annotate scripts/import_cldr.py @ 307:ca9a37eb7428

Fixed bug where the commandline interface to the compile catalog command actually used the output file for the input file option. Thanks to mitsuhiko for reporting this.
author cmlenz
date Mon, 07 Jan 2008 15:10:46 +0000
parents d0cd235ede46
children c22f292731be
rev   line source
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
1 #!/usr/bin/env python
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
2 # -*- coding: utf-8 -*-
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
3 #
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2007 Edgewall Software
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
5 # All rights reserved.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
6 #
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
7 # This software is licensed as described in the file COPYING, which
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
8 # you should have received as part of this distribution. The terms
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
9 # are also available at http://babel.edgewall.org/wiki/License.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
10 #
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
11 # This software consists of voluntary contributions made by many
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
12 # individuals. For the exact contribution history, see the revision
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
13 # history and logs, available at http://babel.edgewall.org/log/.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
14
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
15 import copy
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
16 from optparse import OptionParser
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
17 import os
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
18 import pickle
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
19 import sys
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
20 try:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
21 from xml.etree.ElementTree import parse
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
22 except ImportError:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
23 from elementtree.ElementTree import parse
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
24
67
ad48b95af0d9 Add Babel soruce path to CLDR import script automatically for asmodai ;-).
cmlenz
parents: 36
diff changeset
25 # Make sure we're using Babel source, and not some previously installed version
ad48b95af0d9 Add Babel soruce path to CLDR import script automatically for asmodai ;-).
cmlenz
parents: 36
diff changeset
26 sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), '..'))
ad48b95af0d9 Add Babel soruce path to CLDR import script automatically for asmodai ;-).
cmlenz
parents: 36
diff changeset
27
11
11f64b232b04 Add basic support for number format patterns.
jonas
parents: 10
diff changeset
28 from babel import dates, numbers
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
29
17
aa33ad077d24 Minor date formatting improvements.
cmlenz
parents: 15
diff changeset
30 weekdays = {'mon': 0, 'tue': 1, 'wed': 2, 'thu': 3, 'fri': 4, 'sat': 5,
aa33ad077d24 Minor date formatting improvements.
cmlenz
parents: 15
diff changeset
31 'sun': 6}
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
32
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
33 try:
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
34 any
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
35 except NameError:
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
36 def any(iterable):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
37 return filter(None, list(iterable))
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
38
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
39 def _text(elem):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
40 buf = [elem.text or '']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
41 for child in elem:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
42 buf.append(_text(child))
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
43 buf.append(elem.tail or '')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
44 return u''.join(filter(None, buf)).strip()
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
45
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
46 def main():
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
47 parser = OptionParser(usage='%prog path/to/cldr')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
48 options, args = parser.parse_args()
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
49 if len(args) != 1:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
50 parser.error('incorrect number of arguments')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
51
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
52 srcdir = args[0]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
53 destdir = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),
235
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
54 '..', 'babel')
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
55
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
56 sup = parse(os.path.join(srcdir, 'supplemental', 'supplementalData.xml'))
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
57
235
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
58 # import global data from the supplemental files
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
59 global_data = {}
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
60
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
61 territory_zones = global_data.setdefault('territory_zones', {})
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
62 zone_aliases = global_data.setdefault('zone_aliases', {})
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
63 zone_territories = global_data.setdefault('zone_territories', {})
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
64 for elem in sup.findall('//timezoneData/zoneFormatting/zoneItem'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
65 tzid = elem.attrib['type']
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
66 territory_zones.setdefault(elem.attrib['territory'], []).append(tzid)
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
67 zone_territories[tzid] = elem.attrib['territory']
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
68 if 'aliases' in elem.attrib:
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
69 for alias in elem.attrib['aliases'].split():
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
70 zone_aliases[alias] = tzid
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
71
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
72 outfile = open(os.path.join(destdir, 'global.dat'), 'wb')
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
73 try:
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
74 pickle.dump(global_data, outfile, 2)
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
75 finally:
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
76 outfile.close()
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
77
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
78 # build a territory containment mapping for inheritance
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
79 regions = {}
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
80 for elem in sup.findall('//territoryContainment/group'):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
81 regions[elem.attrib['type']] = elem.attrib['contains'].split()
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
82
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
83 # Resolve territory containment
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
84 territory_containment = {}
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
85 region_items = regions.items()
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
86 region_items.sort()
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
87 for group, territory_list in region_items:
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
88 for territory in territory_list:
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
89 containers = territory_containment.setdefault(territory, set([]))
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
90 if group in territory_containment:
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
91 containers |= territory_containment[group]
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
92 containers.add(group)
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
93
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
94 filenames = os.listdir(os.path.join(srcdir, 'main'))
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
95 filenames.remove('root.xml')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
96 filenames.sort(lambda a,b: len(a)-len(b))
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
97 filenames.insert(0, 'root.xml')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
98
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
99 for filename in filenames:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
100 print>>sys.stderr, 'Processing input file %r' % filename
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
101 stem, ext = os.path.splitext(filename)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
102 if ext != '.xml':
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
103 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
104
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
105 tree = parse(os.path.join(srcdir, 'main', filename))
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
106 data = {}
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
107
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
108 language = None
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
109 elem = tree.find('//identity/language')
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
110 if elem is not None:
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
111 language = elem.attrib['type']
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
112 print>>sys.stderr, ' Language: %r' % language
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
113
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
114 territory = None
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
115 elem = tree.find('//identity/territory')
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
116 if elem is not None:
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
117 territory = elem.attrib['type']
15
b47c34d42eda Extended and documented `LazyProxy`.
cmlenz
parents: 11
diff changeset
118 else:
b47c34d42eda Extended and documented `LazyProxy`.
cmlenz
parents: 11
diff changeset
119 territory = '001' # world
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
120 print>>sys.stderr, ' Territory: %r' % territory
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
121 regions = territory_containment.get(territory, [])
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
122 print>>sys.stderr, ' Regions: %r' % regions
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
123
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
124 # <localeDisplayNames>
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
125
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
126 territories = data.setdefault('territories', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
127 for elem in tree.findall('//territories/territory'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
128 if 'draft' in elem.attrib and elem.attrib['type'] in territories:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
129 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
130 territories[elem.attrib['type']] = _text(elem)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
131
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
132 languages = data.setdefault('languages', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
133 for elem in tree.findall('//languages/language'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
134 if 'draft' in elem.attrib and elem.attrib['type'] in languages:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
135 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
136 languages[elem.attrib['type']] = _text(elem)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
137
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
138 variants = data.setdefault('variants', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
139 for elem in tree.findall('//variants/variant'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
140 if 'draft' in elem.attrib and elem.attrib['type'] in variants:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
141 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
142 variants[elem.attrib['type']] = _text(elem)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
143
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
144 scripts = data.setdefault('scripts', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
145 for elem in tree.findall('//scripts/script'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
146 if 'draft' in elem.attrib and elem.attrib['type'] in scripts:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
147 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
148 scripts[elem.attrib['type']] = _text(elem)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
149
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
150 # <dates>
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
151
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
152 week_data = data.setdefault('week_data', {})
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
153 supelem = sup.find('//weekData')
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
154
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
155 for elem in supelem.findall('minDays'):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
156 territories = elem.attrib['territories'].split()
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
157 if territory in territories or any([r in territories for r in regions]):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
158 week_data['min_days'] = int(elem.attrib['count'])
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
159
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
160 for elem in supelem.findall('firstDay'):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
161 territories = elem.attrib['territories'].split()
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
162 if territory in territories or any([r in territories for r in regions]):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
163 week_data['first_day'] = weekdays[elem.attrib['day']]
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
164
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
165 for elem in supelem.findall('weekendStart'):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
166 territories = elem.attrib['territories'].split()
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
167 if territory in territories or any([r in territories for r in regions]):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
168 week_data['weekend_start'] = weekdays[elem.attrib['day']]
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
169
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
170 for elem in supelem.findall('weekendEnd'):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
171 territories = elem.attrib['territories'].split()
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
172 if territory in territories or any([r in territories for r in regions]):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
173 week_data['weekend_end'] = weekdays[elem.attrib['day']]
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
174
235
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
175 zone_formats = data.setdefault('zone_formats', {})
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
176 for elem in tree.findall('//timeZoneNames/gmtFormat'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
177 if 'draft' not in elem.attrib:
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
178 zone_formats['gmt'] = unicode(elem.text).replace('{0}', '%s')
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
179 break
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
180 for elem in tree.findall('//timeZoneNames/regionFormat'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
181 if 'draft' not in elem.attrib:
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
182 zone_formats['region'] = unicode(elem.text).replace('{0}', '%s')
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
183 break
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
184 for elem in tree.findall('//timeZoneNames/fallbackFormat'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
185 if 'draft' not in elem.attrib:
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
186 zone_formats['fallback'] = unicode(elem.text) \
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
187 .replace('{0}', '%(0)s').replace('{1}', '%(1)s')
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
188 break
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
189
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
190 time_zones = data.setdefault('time_zones', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
191 for elem in tree.findall('//timeZoneNames/zone'):
30
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
192 info = {}
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
193 city = elem.findtext('exemplarCity')
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
194 if city:
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
195 info['city'] = unicode(city)
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
196 for child in elem.findall('long/*'):
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
197 info.setdefault('long', {})[child.tag] = unicode(child.text)
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
198 for child in elem.findall('short/*'):
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
199 info.setdefault('short', {})[child.tag] = unicode(child.text)
235
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
200 for child in elem.findall('usesMetazone'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
201 if 'to' not in child.attrib: # FIXME: support old mappings
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
202 info['use_metazone'] = child.attrib['mzone']
30
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
203 time_zones[elem.attrib['type']] = info
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
204
235
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
205 meta_zones = data.setdefault('meta_zones', {})
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
206 for elem in tree.findall('//timeZoneNames/metazone'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
207 info = {}
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
208 city = elem.findtext('exemplarCity')
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
209 if city:
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
210 info['city'] = unicode(city)
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
211 for child in elem.findall('long/*'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
212 info.setdefault('long', {})[child.tag] = unicode(child.text)
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
213 for child in elem.findall('short/*'):
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
214 info.setdefault('short', {})[child.tag] = unicode(child.text)
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
215 info['common'] = elem.findtext('commonlyUsed') == 'true'
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
216 meta_zones[elem.attrib['type']] = info
36
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
217
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
218 for calendar in tree.findall('//calendars/calendar'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
219 if calendar.attrib['type'] != 'gregorian':
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
220 # TODO: support other calendar types
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
221 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
222
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
223 months = data.setdefault('months', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
224 for ctxt in calendar.findall('months/monthContext'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
225 ctxts = months.setdefault(ctxt.attrib['type'], {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
226 for width in ctxt.findall('monthWidth'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
227 widths = ctxts.setdefault(width.attrib['type'], {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
228 for elem in width.findall('month'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
229 if 'draft' in elem.attrib and int(elem.attrib['type']) in widths:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
230 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
231 widths[int(elem.attrib.get('type'))] = unicode(elem.text)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
232
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
233 days = data.setdefault('days', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
234 for ctxt in calendar.findall('days/dayContext'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
235 ctxts = days.setdefault(ctxt.attrib['type'], {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
236 for width in ctxt.findall('dayWidth'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
237 widths = ctxts.setdefault(width.attrib['type'], {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
238 for elem in width.findall('day'):
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
239 dtype = weekdays[elem.attrib['type']]
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
240 if 'draft' in elem.attrib and dtype in widths:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
241 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
242 widths[dtype] = unicode(elem.text)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
243
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
244 quarters = data.setdefault('quarters', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
245 for ctxt in calendar.findall('quarters/quarterContext'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
246 ctxts = quarters.setdefault(ctxt.attrib['type'], {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
247 for width in ctxt.findall('quarterWidth'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
248 widths = ctxts.setdefault(width.attrib['type'], {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
249 for elem in width.findall('quarter'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
250 if 'draft' in elem.attrib and int(elem.attrib['type']) in widths:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
251 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
252 widths[int(elem.attrib.get('type'))] = unicode(elem.text)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
253
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
254 eras = data.setdefault('eras', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
255 for width in calendar.findall('eras/*'):
235
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
256 ewidth = {
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
257 'eraAbbr': 'abbreviated',
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
258 'eraNames': 'wide',
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
259 'eraNarrow': 'narrow',
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
260 }[width.tag]
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
261 widths = eras.setdefault(ewidth, {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
262 for elem in width.findall('era'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
263 if 'draft' in elem.attrib and int(elem.attrib['type']) in widths:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
264 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
265 widths[int(elem.attrib.get('type'))] = unicode(elem.text)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
266
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
267 # AM/PM
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
268 periods = data.setdefault('periods', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
269 for elem in calendar.findall('am'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
270 if 'draft' in elem.attrib and elem.tag in periods:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
271 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
272 periods[elem.tag] = unicode(elem.text)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
273 for elem in calendar.findall('pm'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
274 if 'draft' in elem.attrib and elem.tag in periods:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
275 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
276 periods[elem.tag] = unicode(elem.text)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
277
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
278 date_formats = data.setdefault('date_formats', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
279 for elem in calendar.findall('dateFormats/dateFormatLength'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
280 if 'draft' in elem.attrib and elem.attrib.get('type') in date_formats:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
281 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
282 try:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
283 date_formats[elem.attrib.get('type')] = \
11
11f64b232b04 Add basic support for number format patterns.
jonas
parents: 10
diff changeset
284 dates.parse_pattern(unicode(elem.findtext('dateFormat/pattern')))
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
285 except ValueError, e:
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
286 print>>sys.stderr, 'ERROR: %s' % e
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
287
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
288 time_formats = data.setdefault('time_formats', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
289 for elem in calendar.findall('timeFormats/timeFormatLength'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
290 if 'draft' in elem.attrib and elem.attrib.get('type') in time_formats:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
291 continue
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
292 try:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
293 time_formats[elem.attrib.get('type')] = \
11
11f64b232b04 Add basic support for number format patterns.
jonas
parents: 10
diff changeset
294 dates.parse_pattern(unicode(elem.findtext('timeFormat/pattern')))
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
295 except ValueError, e:
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
296 print>>sys.stderr, 'ERROR: %s' % e
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
297
35
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
298 datetime_formats = data.setdefault('datetime_formats', {})
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
299 for elem in calendar.findall('dateTimeFormats/dateTimeFormatLength'):
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
300 if 'draft' in elem.attrib and elem.attrib.get('type') in datetime_formats:
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
301 continue
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
302 try:
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
303 datetime_formats[elem.attrib.get('type')] = \
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
304 unicode(elem.findtext('dateTimeFormat/pattern'))
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
305 except ValueError, e:
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
306 print>>sys.stderr, 'ERROR: %s' % e
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 30
diff changeset
307
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
308 # <numbers>
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
309
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
310 number_symbols = data.setdefault('number_symbols', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
311 for elem in tree.findall('//numbers/symbols/*'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
312 number_symbols[elem.tag] = unicode(elem.text)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
313
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
314 decimal_formats = data.setdefault('decimal_formats', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
315 for elem in tree.findall('//decimalFormats/decimalFormatLength'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
316 if 'draft' in elem.attrib and elem.attrib.get('type') in decimal_formats:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
317 continue
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
318 pattern = unicode(elem.findtext('decimalFormat/pattern'))
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
319 decimal_formats[elem.attrib.get('type')] = numbers.parse_pattern(pattern)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
320
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
321 scientific_formats = data.setdefault('scientific_formats', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
322 for elem in tree.findall('//scientificFormats/scientificFormatLength'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
323 if 'draft' in elem.attrib and elem.attrib.get('type') in scientific_formats:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
324 continue
127
a72de8971819 Add currency formatting.
cmlenz
parents: 67
diff changeset
325 pattern = unicode(elem.findtext('scientificFormat/pattern'))
a72de8971819 Add currency formatting.
cmlenz
parents: 67
diff changeset
326 scientific_formats[elem.attrib.get('type')] = numbers.parse_pattern(pattern)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
327
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
328 currency_formats = data.setdefault('currency_formats', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
329 for elem in tree.findall('//currencyFormats/currencyFormatLength'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
330 if 'draft' in elem.attrib and elem.attrib.get('type') in currency_formats:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
331 continue
127
a72de8971819 Add currency formatting.
cmlenz
parents: 67
diff changeset
332 pattern = unicode(elem.findtext('currencyFormat/pattern'))
a72de8971819 Add currency formatting.
cmlenz
parents: 67
diff changeset
333 currency_formats[elem.attrib.get('type')] = numbers.parse_pattern(pattern)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
334
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
335 percent_formats = data.setdefault('percent_formats', {})
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
336 for elem in tree.findall('//percentFormats/percentFormatLength'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
337 if 'draft' in elem.attrib and elem.attrib.get('type') in percent_formats:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
338 continue
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
339 pattern = unicode(elem.findtext('percentFormat/pattern'))
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
340 percent_formats[elem.attrib.get('type')] = numbers.parse_pattern(pattern)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
341
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
342 currency_names = data.setdefault('currency_names', {})
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
343 currency_symbols = data.setdefault('currency_symbols', {})
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
344 for elem in tree.findall('//currencies/currency'):
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
345 name = elem.findtext('displayName')
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
346 if name:
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
347 currency_names[elem.attrib['type']] = unicode(name)
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
348 symbol = elem.findtext('symbol')
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
349 if symbol:
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
350 currency_symbols[elem.attrib['type']] = unicode(symbol)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
351
235
d0cd235ede46 Upgraded to CLDR 1.5 and improved timezone formatting.
cmlenz
parents: 127
diff changeset
352 outfile = open(os.path.join(destdir, 'localedata', stem + '.dat'), 'wb')
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
353 try:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
354 pickle.dump(data, outfile, 2)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
355 finally:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
356 outfile.close()
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
357
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
358 if __name__ == '__main__':
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
359 main()
Copyright (C) 2012-2017 Edgewall Software