]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Use canonical IANA zone names in zone_territories improve-zone-map 1220/head
authorAarni Koskela <akx@iki.fi>
Tue, 8 Jul 2025 10:01:45 +0000 (13:01 +0300)
committerAarni Koskela <akx@iki.fi>
Tue, 8 Jul 2025 10:03:48 +0000 (13:03 +0300)
Refs #1218

scripts/import_cldr.py
tests/test_core.py

index bcd5898e6e906d072e1e3de8c76bedb2de707d33..26366abdc907e97823b3a6271a5bb30ef3471020 100755 (executable)
@@ -238,13 +238,22 @@ def parse_global(srcdir, sup):
     for key_elem in bcp47_timezone.findall('.//keyword/key'):
         if key_elem.attrib['name'] == 'tz':
             for elem in key_elem.findall('type'):
-                if 'deprecated' not in elem.attrib:
-                    aliases = str(elem.attrib['alias']).split()
-                    tzid = aliases.pop(0)
-                    territory = _zone_territory_map.get(tzid, '001')
-                    territory_zones.setdefault(territory, []).append(tzid)
-                    zone_territories[tzid] = territory
-                    for alias in aliases:
+                if 'deprecated' in elem.attrib:
+                    continue
+                aliases = str(elem.attrib['alias']).split()
+                iana = elem.attrib.get('iana')
+                tzid = iana or aliases[0]  # Use the IANA ID if available, otherwise the first alias
+                territory = '001'
+                # The windowsZones map might use an alias to refer to a timezone,
+                # so can't just do a simple dict lookup.
+                for cand in (tzid, *aliases):
+                    if cand in _zone_territory_map:
+                        territory = _zone_territory_map[cand]
+                        break
+                territory_zones.setdefault(territory, []).append(tzid)
+                zone_territories[tzid] = territory
+                for alias in aliases:
+                    if alias != tzid:
                         zone_aliases[alias] = tzid
             break
 
index 8c215de4a00a23b98eb927c69b741b4ec714044c..fc0c12d6133c52a5ba6fcf4a62eb532f340931b7 100644 (file)
@@ -55,10 +55,18 @@ def test_ignore_invalid_locales_in_lc_ctype(monkeypatch):
     default_locale('LC_CTYPE')
 
 
-def test_get_global():
-    assert core.get_global('zone_aliases')['GMT'] == 'Etc/GMT'
-    assert core.get_global('zone_aliases')['UTC'] == 'Etc/UTC'
-    assert core.get_global('zone_territories')['Europe/Berlin'] == 'DE'
+def test_zone_aliases_and_territories():
+    aliases = core.get_global('zone_aliases')
+    territories = core.get_global('zone_territories')
+    assert aliases['GMT'] == 'Etc/GMT'
+    assert aliases['UTC'] == 'Etc/UTC'
+    assert territories['Europe/Berlin'] == 'DE'
+    # Check that the canonical (IANA) names are used in `territories`,
+    # but that aliases are still available.
+    assert territories['Africa/Asmara'] == 'ER'
+    assert aliases['Africa/Asmera'] == 'Africa/Asmara'
+    assert territories['Europe/Kyiv'] == 'UA'
+    assert aliases['Europe/Kiev'] == 'Europe/Kyiv'
 
 
 def test_hash():