Yilin Yang | 8e1b24c | 2020-02-03 15:02:25 +0800 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Hung-Te Lin | 34f3d38 | 2015-04-10 18:18:23 +0800 | [diff] [blame] | 2 | # -*- coding: utf-8 -*- |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 3 | # Copyright 2015 The Chromium OS Authors. All rights reserved. |
| 4 | # Use of this source code is governed by a BSD-style license that can be |
| 5 | # found in the LICENSE file. |
| 6 | |
| 7 | """Authoritative source for Chromium OS region/locale configuration. |
| 8 | |
| 9 | Run this module to display all known regions (use --help to see options). |
| 10 | """ |
| 11 | |
| 12 | from __future__ import print_function |
| 13 | |
| 14 | import argparse |
Clark Chung | 3923020 | 2020-05-26 13:24:33 +0800 | [diff] [blame] | 15 | import collections.abc |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 16 | import json |
| 17 | import re |
| 18 | import sys |
| 19 | |
Bao-Duy Tran | e43d5de | 2020-05-29 18:02:36 +1000 | [diff] [blame] | 20 | import yaml # pylint: disable=import-error |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 21 | |
| 22 | |
| 23 | # The regular expression to check values in Region.keyboards and Region.locales. |
| 24 | # Keyboards should come with xkb: protocol, or the input methods (ime:, m17n:). |
Hung-Te Lin | cf2f02b | 2017-03-20 14:58:20 +0800 | [diff] [blame] | 25 | # Examples: xkb:us:intl:eng, ime:ime:zh-t:cangjie, xkb:us:altgr-intl:eng |
| 26 | KEYBOARD_PATTERN = re.compile(r'^xkb:\w+:[\w-]*:\w+$|' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 27 | r'^(ime|m17n|t13n):[\w:-]+$') |
| 28 | # Locale should be a combination of language and location. |
| 29 | # Examples: en-US, ja. |
| 30 | LOCALE_PATTERN = re.compile(r'^(\w+)(-[A-Z0-9]+)?$') |
| 31 | |
| 32 | |
| 33 | class Enum(frozenset): |
| 34 | """An enumeration type. |
| 35 | |
Bao-Duy Tran | e43d5de | 2020-05-29 18:02:36 +1000 | [diff] [blame] | 36 | Examples: |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 37 | To create a enum object: |
| 38 | dummy_enum = Enum(['A', 'B', 'C']) |
| 39 | |
| 40 | To access a enum object, use: |
| 41 | dummy_enum.A |
| 42 | dummy_enum.B |
| 43 | """ |
| 44 | |
| 45 | def __getattr__(self, name): |
| 46 | if name in self: |
| 47 | return name |
| 48 | raise AttributeError |
| 49 | |
| 50 | |
| 51 | class RegionException(Exception): |
| 52 | """Exception in Region handling.""" |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 53 | |
| 54 | |
| 55 | def MakeList(value): |
| 56 | """Converts the given value to a list. |
| 57 | |
| 58 | Returns: |
| 59 | A list of elements from "value" if it is iterable (except string); |
| 60 | otherwise, a list contains only one element. |
| 61 | """ |
Clark Chung | 3923020 | 2020-05-26 13:24:33 +0800 | [diff] [blame] | 62 | if (isinstance(value, collections.abc.Iterable) and |
Yilin Yang | 74cf210 | 2020-02-03 15:04:19 +0800 | [diff] [blame] | 63 | not isinstance(value, str)): |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 64 | return list(value) |
| 65 | return [value] |
| 66 | |
| 67 | |
| 68 | class Region(object): |
| 69 | """Comprehensive, standard locale configuration per country/region. |
| 70 | |
| 71 | See :ref:`regions-values` for detailed information on how to set these values. |
| 72 | """ |
| 73 | # pylint gets confused by some of the docstrings. |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 74 | |
| 75 | # ANSI = US-like |
| 76 | # ISO = UK-like |
| 77 | # JIS = Japanese |
Hung-Te Lin | 4eb4f92 | 2016-03-04 11:51:04 +0800 | [diff] [blame] | 78 | # KS = Korean (see http://crosbug.com/p/50753 for why this is not used yet) |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 79 | # ABNT2 = Brazilian (like ISO but with an extra key to the left of the |
| 80 | # right shift key) |
| 81 | KeyboardMechanicalLayout = Enum(['ANSI', 'ISO', 'JIS', 'KS', 'ABNT2']) |
| 82 | |
| 83 | region_code = None |
| 84 | """A unique identifier for the region. This may be a lower-case |
| 85 | `ISO 3166-1 alpha-2 code |
| 86 | <http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ (e.g., ``us``), |
| 87 | a variant within an alpha-2 entity (e.g., ``ca.fr``), or an |
| 88 | identifier for a collection of countries or entities (e.g., |
| 89 | ``latam-es-419`` or ``nordic``). See :ref:`region-codes`. |
| 90 | |
| 91 | Note that ``uk`` is not a valid identifier; ``gb`` is used as it is |
| 92 | the real alpha-2 code for the UK.""" |
| 93 | |
| 94 | keyboards = None |
| 95 | """A list of keyboard layout identifiers (e.g., ``xkb:us:intl:eng`` |
| 96 | or ``m17n:ar``). This field was designed to be the physical keyboard layout |
| 97 | in the beginning, and then becomes a list of OOBE keyboard selection, which |
| 98 | then includes non-physical layout elements like input methods (``ime:``). |
| 99 | To avoid confusion, physical layout is now defined by |
| 100 | :py:attr:`keyboard_mechanical_layout`, and this is reserved for logical |
| 101 | layouts. |
| 102 | |
| 103 | This is identical to the legacy VPD ``keyboard_layout`` value.""" |
| 104 | |
| 105 | time_zones = None |
| 106 | """A list of default `tz database time zone |
| 107 | <http://en.wikipedia.org/wiki/List_of_tz_database_time_zones>`_ |
| 108 | identifiers (e.g., ``America/Los_Angeles``). See |
| 109 | `timezone_settings.cc <http://goo.gl/WSVUeE>`_ for supported time |
| 110 | zones. |
| 111 | |
| 112 | This is identical to the legacy VPD ``initial_timezone`` value.""" |
| 113 | |
| 114 | locales = None |
| 115 | """A list of default locale codes (e.g., ``en-US``); see |
| 116 | `l10n_util.cc <http://goo.gl/kVkht>`_ for supported locales. |
| 117 | |
| 118 | This is identital to the legacy VPD ``initial_locale`` field.""" |
| 119 | |
| 120 | keyboard_mechanical_layout = None |
| 121 | """The keyboard's mechanical layout (``ANSI`` [US-like], ``ISO`` |
| 122 | [UK-like], ``JIS`` [Japanese], ``ABNT2`` [Brazilian] or ``KS`` [Korean]).""" |
| 123 | |
| 124 | description = None |
| 125 | """A human-readable description of the region. |
| 126 | This defaults to :py:attr:`region_code` if not set.""" |
| 127 | |
| 128 | notes = None |
| 129 | """Implementation notes about the region. This may be None.""" |
| 130 | |
Hung-Te Lin | 436b6cc | 2015-04-03 12:15:47 +0800 | [diff] [blame] | 131 | regulatory_domain = None |
| 132 | """An ISO 3166-1 alpha 2 upper-cased two-letter region code for setting |
| 133 | Wireless regulatory. See crosbug.com/p/38745 for more details. |
| 134 | |
| 135 | When omitted, this will derive from region_code.""" |
| 136 | |
Hung-Te Lin | 1a14cc4 | 2015-04-14 01:23:34 +0800 | [diff] [blame] | 137 | confirmed = None |
| 138 | """An optional boolean flag to indicate if the region data is confirmed.""" |
| 139 | |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 140 | FIELDS = ['region_code', 'description', 'keyboards', |
Hung-Te Lin | 1a14cc4 | 2015-04-14 01:23:34 +0800 | [diff] [blame] | 141 | 'time_zones', 'locales', 'keyboard_mechanical_layout', |
| 142 | 'regulatory_domain'] |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 143 | """Names of fields that define the region.""" |
| 144 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 145 | def __init__(self, region_code, keyboards, time_zones, locales, |
| 146 | keyboard_mechanical_layout, description=None, notes=None, |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 147 | regdomain=None): |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 148 | """Constructor. |
| 149 | |
| 150 | Args: |
| 151 | region_code: See :py:attr:`region_code`. |
| 152 | keyboards: See :py:attr:`keyboards`. A single string is accepted for |
| 153 | backward compatibility. |
| 154 | time_zones: See :py:attr:`time_zones`. |
| 155 | locales: See :py:attr:`locales`. A single string is accepted |
| 156 | for backward compatibility. |
| 157 | keyboard_mechanical_layout: See :py:attr:`keyboard_mechanical_layout`. |
| 158 | description: See :py:attr:`description`. |
| 159 | notes: See :py:attr:`notes`. |
Hung-Te Lin | 436b6cc | 2015-04-03 12:15:47 +0800 | [diff] [blame] | 160 | regdomain: See :py:attr:`regulatory_domain`. |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 161 | """ |
Hung-Te Lin | 436b6cc | 2015-04-03 12:15:47 +0800 | [diff] [blame] | 162 | |
| 163 | def regdomain_from_region(region): |
| 164 | if region.find('.') >= 0: |
| 165 | region = region[:region.index('.')] |
| 166 | if len(region) == 2: |
| 167 | return region.upper() |
| 168 | return None |
| 169 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 170 | # Quick check: should be 'gb', not 'uk' |
| 171 | if region_code == 'uk': |
| 172 | raise RegionException("'uk' is not a valid region code (use 'gb')") |
| 173 | |
| 174 | self.region_code = region_code |
| 175 | self.keyboards = MakeList(keyboards) |
| 176 | self.time_zones = MakeList(time_zones) |
| 177 | self.locales = MakeList(locales) |
| 178 | self.keyboard_mechanical_layout = keyboard_mechanical_layout |
| 179 | self.description = description or region_code |
| 180 | self.notes = notes |
Hung-Te Lin | 436b6cc | 2015-04-03 12:15:47 +0800 | [diff] [blame] | 181 | self.regulatory_domain = (regdomain or regdomain_from_region(region_code)) |
Hung-Te Lin | 1a14cc4 | 2015-04-14 01:23:34 +0800 | [diff] [blame] | 182 | self.confirmed = None |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 183 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 184 | for f in (self.keyboards, self.locales): |
| 185 | assert all(isinstance(x, str) for x in f), ( |
| 186 | 'Expected a list of strings, not %r' % f) |
| 187 | for f in self.keyboards: |
| 188 | assert KEYBOARD_PATTERN.match(f), ( |
| 189 | 'Keyboard pattern %r does not match %r' % ( |
| 190 | f, KEYBOARD_PATTERN.pattern)) |
| 191 | for f in self.locales: |
| 192 | assert LOCALE_PATTERN.match(f), ( |
| 193 | 'Locale %r does not match %r' % ( |
| 194 | f, LOCALE_PATTERN.pattern)) |
Hung-Te Lin | 436b6cc | 2015-04-03 12:15:47 +0800 | [diff] [blame] | 195 | assert (self.regulatory_domain and |
| 196 | len(self.regulatory_domain) == 2 and |
| 197 | self.regulatory_domain.upper() == self.regulatory_domain), ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 198 | 'Regulatory domain settings error for region %s' % region_code) |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 199 | |
| 200 | def __repr__(self): |
| 201 | return 'Region(%s)' % (', '.join([getattr(self, x) for x in self.FIELDS])) |
| 202 | |
| 203 | def GetFieldsDict(self): |
| 204 | """Returns a dict of all substantive fields. |
| 205 | |
| 206 | notes and description are excluded. |
| 207 | """ |
| 208 | return dict((k, getattr(self, k)) for k in self.FIELDS) |
| 209 | |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 210 | KML = Region.KeyboardMechanicalLayout |
Matt Stark | 1987c53 | 2021-04-19 10:12:35 +1000 | [diff] [blame] | 211 | PSEUDOLOCALE_REGIONS_LIST = [ |
| 212 | Region( |
| 213 | 'ar.xb', 'xkb:us::eng', 'America/Los_Angeles', 'ar-XB', KML.ANSI, |
| 214 | 'Pseudolocale (RTL)'), |
| 215 | Region( |
| 216 | 'en.xa', 'xkb:us::eng', 'America/Los_Angeles', 'en-XA', KML.ANSI, |
| 217 | 'Pseudolocale (long strings)'), |
| 218 | ] |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 219 | REGIONS_LIST = [ |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 220 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 221 | 'au', 'xkb:us::eng', 'Australia/Sydney', 'en-AU', KML.ANSI, |
| 222 | 'Australia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 223 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 224 | 'be', 'xkb:be::nld', 'Europe/Brussels', 'en-GB', KML.ISO, |
| 225 | 'Belgium', ( |
| 226 | 'Flemish (Belgian Dutch) keyboard; British English language for ' |
| 227 | 'neutrality')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 228 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 229 | 'br', 'xkb:br::por', 'America/Sao_Paulo', 'pt-BR', KML.ABNT2, |
| 230 | 'Brazil (ABNT2)', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 231 | 'ABNT2 = ABNT NBR 10346 variant 2. This is the preferred layout ' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 232 | 'for Brazil. ABNT2 is mostly an ISO layout, but it 12 keys between ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 233 | 'the shift keys; see http://goo.gl/twA5tq')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 234 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 235 | 'br.abnt', 'xkb:br::por', 'America/Sao_Paulo', 'pt-BR', KML.ISO, |
| 236 | 'Brazil (ABNT)', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 237 | 'Like ABNT2, but lacking the extra key to the left of the right ' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 238 | 'shift key found in that layout. ABNT2 (the "br" region) is ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 239 | 'preferred to this layout')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 240 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 241 | 'br.usintl', 'xkb:us:intl:eng', 'America/Sao_Paulo', 'pt-BR', KML.ANSI, |
| 242 | 'Brazil (US Intl)', ( |
| 243 | 'Brazil with US International keyboard layout. ABNT2 ("br") and ' |
| 244 | 'ABNT1 ("br.abnt1 ") are both preferred to this.')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 245 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 246 | 'ca.ansi', 'xkb:us::eng', 'America/Toronto', 'en-CA', KML.ANSI, |
| 247 | 'Canada (US keyboard)', ( |
| 248 | 'Canada with US (ANSI) keyboard. Only allowed if there are ' |
| 249 | 'separate US English, Canadian English, and French SKUs. ' |
| 250 | 'Not for en/fr hybrid ANSI keyboards; for that you would want ' |
| 251 | 'ca.hybridansi. See http://goto/cros-canada')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 252 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 253 | 'ca.fr', 'xkb:ca::fra', 'America/Toronto', 'fr-CA', KML.ISO, |
| 254 | 'Canada (French keyboard)', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 255 | 'Canadian French (ISO) keyboard. The most common configuration for ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 256 | 'Canadian French SKUs. See http://goto/cros-canada')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 257 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 258 | 'ca.hybrid', 'xkb:ca:eng:eng', 'America/Toronto', 'en-CA', KML.ISO, |
| 259 | 'Canada (hybrid ISO)', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 260 | 'Canada with hybrid (ISO) xkb:ca:eng:eng + xkb:ca::fra keyboard, ' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 261 | 'defaulting to English language and keyboard. Used only if there ' |
| 262 | 'needs to be a single SKU for all of Canada. See ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 263 | 'http://goto/cros-canada')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 264 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 265 | 'ca.hybridansi', 'xkb:ca:eng:eng', 'America/Toronto', 'en-CA', KML.ANSI, |
| 266 | 'Canada (hybrid ANSI)', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 267 | 'Canada with hybrid (ANSI) xkb:ca:eng:eng + xkb:ca::fra keyboard, ' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 268 | 'defaulting to English language and keyboard. Used only if there ' |
| 269 | 'needs to be a single SKU for all of Canada. See ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 270 | 'http://goto/cros-canada')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 271 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 272 | 'ca.multix', 'xkb:ca:multix:fra', 'America/Toronto', 'fr-CA', KML.ISO, |
| 273 | 'Canada (multilingual)', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 274 | "Canadian Multilingual keyboard; you probably don't want this. See " |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 275 | 'http://goto/cros-canada')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 276 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 277 | 'ch', 'xkb:ch::ger', 'Europe/Zurich', 'de-CH', KML.ISO, |
| 278 | 'Switzerland', ( |
| 279 | 'German keyboard')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 280 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 281 | 'de', 'xkb:de::ger', 'Europe/Berlin', 'de', KML.ISO, |
| 282 | 'Germany'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 283 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 284 | 'es', 'xkb:es::spa', 'Europe/Madrid', 'es', KML.ISO, |
| 285 | 'Spain'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 286 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 287 | 'fi', 'xkb:fi::fin', 'Europe/Helsinki', 'fi', KML.ISO, |
| 288 | 'Finland'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 289 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 290 | 'fr', 'xkb:fr::fra', 'Europe/Paris', 'fr', KML.ISO, |
| 291 | 'France'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 292 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 293 | 'gb', 'xkb:gb:extd:eng', 'Europe/London', 'en-GB', KML.ISO, |
| 294 | 'UK'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 295 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 296 | 'ie', 'xkb:gb:extd:eng', 'Europe/Dublin', 'en-GB', KML.ISO, |
| 297 | 'Ireland'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 298 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 299 | 'in', 'xkb:us::eng', 'Asia/Calcutta', 'en-US', KML.ANSI, |
| 300 | 'India'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 301 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 302 | 'it', 'xkb:it::ita', 'Europe/Rome', 'it', KML.ISO, |
| 303 | 'Italy'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 304 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 305 | 'latam-es-419', 'xkb:es::spa', 'America/Mexico_City', 'es-419', KML.ISO, |
| 306 | 'Hispanophone Latin America', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 307 | 'Spanish-speaking countries in Latin America, using the Iberian ' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 308 | '(Spain) Spanish keyboard, which is increasingly dominant in ' |
| 309 | 'Latin America. Known to be correct for ' |
| 310 | 'Chile, Colombia, Mexico, Peru; ' |
| 311 | 'still unconfirmed for other es-419 countries. The old Latin ' |
| 312 | 'American layout (xkb:latam::spa) has not been approved; before ' |
| 313 | 'using that you must seek review through http://goto/vpdsettings. ' |
| 314 | 'See also http://goo.gl/Iffuqh. Note that 419 is the UN M.49 ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 315 | 'region code for Latin America'), 'MX'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 316 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 317 | 'my', 'xkb:us::eng', 'Asia/Kuala_Lumpur', 'ms', KML.ANSI, |
| 318 | 'Malaysia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 319 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 320 | 'nl', 'xkb:us:intl:eng', 'Europe/Amsterdam', 'nl', KML.ANSI, |
| 321 | 'Netherlands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 322 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 323 | 'nordic', 'xkb:se::swe', 'Europe/Stockholm', 'en-US', KML.ISO, |
| 324 | 'Nordics', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 325 | 'Unified SKU for Sweden, Norway, and Denmark. This defaults ' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 326 | 'to Swedish keyboard layout, but starts with US English language ' |
| 327 | 'for neutrality. Use if there is a single combined SKU for Nordic ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 328 | 'countries.'), 'SE'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 329 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 330 | 'nz', 'xkb:us::eng', 'Pacific/Auckland', 'en-NZ', KML.ANSI, |
| 331 | 'New Zealand'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 332 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 333 | 'ph', 'xkb:us::eng', 'Asia/Manila', 'en-US', KML.ANSI, |
| 334 | 'Philippines'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 335 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 336 | 'ru', ['xkb:us::eng', 'xkb:ru::rus'], 'Europe/Moscow', 'ru', KML.ANSI, |
| 337 | 'Russia', ( |
| 338 | 'For R31+ only; R30 and earlier must use US keyboard for login')), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 339 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 340 | 'se', 'xkb:se::swe', 'Europe/Stockholm', 'sv', KML.ISO, |
| 341 | 'Sweden', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 342 | 'Use this if there separate SKUs for Nordic countries (Sweden, ' |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 343 | 'Norway, and Denmark), or the device is only shipping to Sweden. ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 344 | "If there is a single unified SKU, use 'nordic' instead.")), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 345 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 346 | 'sg', 'xkb:us::eng', 'Asia/Singapore', 'en-GB', KML.ANSI, |
| 347 | 'Singapore'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 348 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 349 | 'us', 'xkb:us::eng', 'America/Los_Angeles', 'en-US', KML.ANSI, |
| 350 | 'United States'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 351 | Region( |
Bao-Duy Tran | f79b8f9 | 2019-07-04 17:12:01 +1000 | [diff] [blame] | 352 | 'jp', ['xkb:jp::jpn', 'ime:jp:mozc_jp'], 'Asia/Tokyo', 'ja', KML.JIS, |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 353 | 'Japan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 354 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 355 | 'za', 'xkb:gb:extd:eng', 'Africa/Johannesburg', 'en-ZA', KML.ISO, |
| 356 | 'South Africa'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 357 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 358 | 'ng', 'xkb:us:intl:eng', 'Africa/Lagos', 'en-GB', KML.ANSI, |
| 359 | 'Nigeria'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 360 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 361 | 'hk', ['xkb:us::eng', 'ime:zh-t:cangjie', 'ime:zh-t:quick', |
| 362 | 'ime:zh-t:array', 'ime:zh-t:dayi', 'ime:zh-t:zhuyin', |
| 363 | 'ime:zh-t:pinyin'], 'Asia/Hong_Kong', ['zh-TW', 'en-GB', |
| 364 | 'zh-CN'], KML.ANSI, |
| 365 | 'Hong Kong'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 366 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 367 | 'gcc', ['xkb:us::eng', 'm17n:ar', 't13n:ar'], 'Asia/Riyadh', [ |
| 368 | 'ar', 'en-GB'], |
| 369 | KML.ANSI, |
| 370 | 'Gulf Cooperation Council (GCC)', ( |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 371 | 'GCC is a regional intergovernmental political and economic ' |
| 372 | 'union consisting of all Arab states of the Persian Gulf except ' |
| 373 | 'for Iraq. Its member states are the Islamic monarchies of ' |
| 374 | 'Bahrain, Kuwait, Oman, Qatar, Saudi Arabia, and the United Arab ' |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 375 | 'Emirates.'), 'SA'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 376 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 377 | 'cz', ['xkb:cz::cze', 'xkb:cz:qwerty:cze'], 'Europe/Prague', [ |
| 378 | 'cs', 'en-GB'], KML.ISO, |
| 379 | 'Czech Republic'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 380 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 381 | 'th', ['xkb:us::eng', 'm17n:th', 'm17n:th_pattajoti', |
| 382 | 'm17n:th_tis'], 'Asia/Bangkok', ['th', 'en-GB'], KML.ANSI, |
| 383 | 'Thailand'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 384 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 385 | 'id', 'xkb:us::ind', 'Asia/Jakarta', ['id', 'en-GB'], KML.ANSI, |
| 386 | 'Indonesia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 387 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 388 | 'tw', ['xkb:us::eng', 'ime:zh-t:zhuyin', 'ime:zh-t:array', |
| 389 | 'ime:zh-t:dayi', 'ime:zh-t:cangjie', 'ime:zh-t:quick', |
| 390 | 'ime:zh-t:pinyin'], 'Asia/Taipei', ['zh-TW', 'en-US'], KML.ANSI, |
| 391 | 'Taiwan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 392 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 393 | 'pl', 'xkb:pl::pol', 'Europe/Warsaw', ['pl', 'en-GB'], KML.ANSI, |
| 394 | 'Poland'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 395 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 396 | 'gr', ['xkb:us::eng', 'xkb:gr::gre', 't13n:el'], 'Europe/Athens', [ |
| 397 | 'el', 'en-GB'], KML.ANSI, |
| 398 | 'Greece'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 399 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 400 | 'il', ['xkb:us::eng', 'xkb:il::heb', 't13n:he'], 'Asia/Jerusalem', [ |
| 401 | 'he', 'en-US', 'ar'], KML.ANSI, |
| 402 | 'Israel'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 403 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 404 | 'pt', 'xkb:pt::por', 'Europe/Lisbon', ['pt-PT', 'en-GB'], KML.ISO, |
| 405 | 'Portugal'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 406 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 407 | 'ro', ['xkb:us::eng', 'xkb:ro::rum'], 'Europe/Bucharest', [ |
| 408 | 'ro', 'hu', 'de', 'en-GB'], KML.ISO, |
| 409 | 'Romania'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 410 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 411 | 'kr', ['xkb:us::eng', 'ime:ko:hangul'], 'Asia/Seoul', [ |
| 412 | 'ko', 'en-US'], KML.ANSI, |
| 413 | 'South Korea'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 414 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 415 | 'ae', 'xkb:us::eng', 'Asia/Dubai', 'ar', KML.ANSI, |
| 416 | 'UAE'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 417 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 418 | 'za.us', 'xkb:us::eng', 'Africa/Johannesburg', 'en-ZA', KML.ANSI, |
| 419 | 'South Africa'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 420 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 421 | 'vn', ['xkb:us::eng', 'm17n:vi_telex', 'm17n:vi_vni', 'm17n:vi_viqr', |
| 422 | 'm17n:vi_tcvn'], 'Asia/Ho_Chi_Minh', ['vi', 'en-GB', 'en-US', |
| 423 | 'fr', 'zh-TW'], KML.ANSI, |
| 424 | 'Vietnam'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 425 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 426 | 'at', ['xkb:de::ger', 'xkb:de:neo:ger'], 'Europe/Vienna', [ |
| 427 | 'de', 'en-GB'], KML.ISO, |
| 428 | 'Austria'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 429 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 430 | 'sk', ['xkb:us::eng', 'xkb:sk::slo'], 'Europe/Bratislava', [ |
| 431 | 'sk', 'hu', 'cs', 'en-GB'], KML.ISO, |
| 432 | 'Slovakia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 433 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 434 | 'ch.usintl', 'xkb:us:intl:eng', 'Europe/Zurich', 'en-US', KML.ANSI, |
| 435 | 'Switzerland (US Intl)', ( |
| 436 | 'Switzerland with US International keyboard layout.')), |
Hung-Te Lin | df179fd | 2016-05-12 19:22:13 +0800 | [diff] [blame] | 437 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 438 | 'pe', 'xkb:latam::spa', 'America/Lima', 'es-419', KML.ANSI, |
| 439 | 'Peru'), |
Hung-Te Lin | df179fd | 2016-05-12 19:22:13 +0800 | [diff] [blame] | 440 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 441 | 'sa', 'xkb:us::eng', 'Asia/Riyadh', ['ar', 'en'], KML.ANSI, |
| 442 | 'Saudi Arabia'), |
Hung-Te Lin | df179fd | 2016-05-12 19:22:13 +0800 | [diff] [blame] | 443 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 444 | 'mx', 'xkb:latam::spa', 'America/Mexico_City', 'es-MX', KML.ANSI, |
| 445 | 'Mexico'), |
Hung-Te Lin | df179fd | 2016-05-12 19:22:13 +0800 | [diff] [blame] | 446 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 447 | 'cl', 'xkb:latam::spa', 'America/Santiago', 'es-419', KML.ANSI, |
| 448 | 'Chile'), |
Hung-Te Lin | df179fd | 2016-05-12 19:22:13 +0800 | [diff] [blame] | 449 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 450 | 'kw', ['xkb:us::eng', 'm17n:ar', 't13n:ar'], 'Asia/Kuwait', [ |
| 451 | 'ar', 'en'], KML.ANSI, |
| 452 | 'Kuwait'), |
Hung-Te Lin | df179fd | 2016-05-12 19:22:13 +0800 | [diff] [blame] | 453 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 454 | 'uy', 'xkb:latam::spa', 'America/Montevideo', 'es-419', KML.ANSI, |
| 455 | 'Uruguay'), |
Hung-Te Lin | 37fbbbf | 2016-06-28 17:19:38 +0800 | [diff] [blame] | 456 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 457 | 'tr', ['xkb:tr::tur', 'xkb:tr:f:tur'], 'Europe/Istanbul', [ |
| 458 | 'tr', 'en-GB'], KML.ISO, |
| 459 | 'Turkey'), |
Hung-Te Lin | 639a05b | 2016-12-02 12:39:19 +0800 | [diff] [blame] | 460 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 461 | 'ar', 'xkb:latam::spa', 'America/Argentina/Buenos_Aires', [ |
paris_yeh | 8652e75 | 2017-06-06 14:38:23 +0800 | [diff] [blame] | 462 | 'es-AR', ], KML.ISO, |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 463 | 'Argentina'), |
Hung-Te Lin | cf2f02b | 2017-03-20 14:58:20 +0800 | [diff] [blame] | 464 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 465 | 'gb.usext', 'xkb:us:altgr-intl:eng', 'Europe/London', 'en-GB', KML.ISO, |
| 466 | 'UK (US extended keyboard)', ( |
| 467 | 'GB with US extended keyboard')), |
Hung-Te Lin | fe0165d | 2018-05-02 19:15:03 +0800 | [diff] [blame] | 468 | Region( |
| 469 | 'bg', ['xkb:bg::bul', 'xkb:bg:phonetic:bul'], 'Europe/Sofia', [ |
| 470 | 'bg', 'tr', 'en-US'], KML.ANSI, |
| 471 | 'Bulgaria'), |
Wei-Han Chen | 763e672 | 2018-11-16 12:23:19 +0800 | [diff] [blame] | 472 | Region( |
Bao-Duy Tran | f79b8f9 | 2019-07-04 17:12:01 +1000 | [diff] [blame] | 473 | 'jp.us', ['xkb:us::eng', 'ime:jp:mozc_us'], 'Asia/Tokyo', 'ja', |
| 474 | KML.ANSI, 'Japan with US keyboard'), |
Marco Chen | 233ea67 | 2018-09-19 21:46:49 +0800 | [diff] [blame] | 475 | Region( |
| 476 | 'is', 'xkb:is::ice', 'Atlantic/Reykjavik', ['is', 'en-GB'], KML.ISO, |
| 477 | 'Iceland'), |
Marco Chen | 2b3a91c | 2019-05-13 23:22:59 +0800 | [diff] [blame] | 478 | Region( |
| 479 | 'us.intl', 'xkb:us:intl:eng', 'America/Los_Angeles', 'en-US', KML.ANSI, |
| 480 | 'US (English Intl)'), |
Marco Chen | 773fe7f | 2019-05-13 23:08:18 +0800 | [diff] [blame] | 481 | Region( |
| 482 | 'co', 'xkb:latam::spa', 'America/Bogota', 'es-CO', KML.ANSI, |
| 483 | 'Colombia'), |
Stimim Chen | 053650c | 2020-04-30 11:49:10 +0800 | [diff] [blame] | 484 | Region( |
| 485 | 'hr', 'xkb:hr::scr', 'Europe/Zagreb', ['hr', 'en-GB'], KML.ISO, |
| 486 | 'Croatia'), |
Bao-Duy Tran | a828da6 | 2020-05-29 19:03:04 +1000 | [diff] [blame] | 487 | Region( |
Alexander Alekseev | 0725bd9 | 2021-04-10 00:03:31 -0700 | [diff] [blame] | 488 | 'kz', ['xkb:us::eng', 'xkb:kz::kaz', 'xkb:ru::rus'], |
Bao-Duy Tran | a828da6 | 2020-05-29 19:03:04 +1000 | [diff] [blame] | 489 | ['Asia/Almaty', 'Asia/Aqtobe'], ['kk', 'ru'], KML.ANSI, 'Kazakhstan'), |
Stimim Chen | 67b5f82 | 2021-02-01 16:23:42 +0800 | [diff] [blame] | 490 | Region( |
| 491 | 'ee', 'xkb:ee::est', 'Europe/Tallinn', ['et', 'ru', 'en-GB'], KML.ISO, |
| 492 | 'Estonia'), |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 493 | ] |
Hung-Te Lin | 37fbbbf | 2016-06-28 17:19:38 +0800 | [diff] [blame] | 494 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 495 | """A list of :py:class:`regions.Region` objects for |
| 496 | all **confirmed** regions. A confirmed region is a region whose |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 497 | properties are known to be correct and valid: all contents (locale / timezone / |
Bao-Duy Tran | fd69c2f | 2020-06-16 17:28:07 +1000 | [diff] [blame] | 498 | keyboards) are supported by Chrome. |
| 499 | |
| 500 | NOTE: This list is NOT alpha-sorted. New entries MUST be appended to the end of |
| 501 | the list to retain relative order of existing entries. For backward |
| 502 | compatibility, legacy entries need to stay in the same order because they used |
| 503 | to have numeric mappings. |
| 504 | """ |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 505 | |
| 506 | |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 507 | UNCONFIRMED_REGIONS_LIST = [ |
| 508 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 509 | 'bd', 'xkb:bd::ben', 'Asia/Dhaka', ['bn-BD', 'en'], KML.ANSI, |
| 510 | 'Bangladesh'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 511 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 512 | 'bf', 'xkb:bf::fra', 'Africa/Ouagadougou', 'fr-BF', KML.ANSI, |
| 513 | 'Burkina Faso'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 514 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 515 | 'ba', 'xkb:ba::bos', 'Europe/Sarajevo', 'bs', KML.ANSI, |
| 516 | 'Bosnia and Herzegovina'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 517 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 518 | 'bb', 'xkb:bb::eng', 'America/Barbados', 'en-BB', KML.ANSI, |
| 519 | 'Barbados'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 520 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 521 | 'wf', 'xkb:us::eng', 'Pacific/Wallis', ['wls', 'fud'], KML.ANSI, |
| 522 | 'Wallis and Futuna'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 523 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 524 | 'bl', 'xkb:bl::fra', 'America/St_Barthelemy', 'fr', KML.ANSI, |
| 525 | 'Saint Barthelemy'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 526 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 527 | 'bm', 'xkb:bm::eng', 'Atlantic/Bermuda', ['en-BM', 'pt'], KML.ANSI, |
| 528 | 'Bermuda'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 529 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 530 | 'bn', 'xkb:bn::msa', 'Asia/Brunei', ['ms-BN', 'en-BN'], KML.ANSI, |
| 531 | 'Brunei'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 532 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 533 | 'bo', 'xkb:latam::spa', 'America/La_Paz', ['es-419', 'qu'], KML.ANSI, |
| 534 | 'Bolivia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 535 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 536 | 'bh', 'xkb:bh::ara', 'Asia/Bahrain', ['ar', 'en', 'fa', 'ru'], KML.ANSI, |
| 537 | 'Bahrain'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 538 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 539 | 'bi', 'xkb:bi::fra', 'Africa/Bujumbura', ['fr-BI', 'rn'], KML.ANSI, |
| 540 | 'Burundi'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 541 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 542 | 'bj', 'xkb:bj::fra', 'Africa/Porto-Novo', 'fr-BJ', KML.ANSI, |
| 543 | 'Benin'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 544 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 545 | 'bt', 'xkb:bt::dzo', 'Asia/Thimphu', 'dz', KML.ANSI, |
| 546 | 'Bhutan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 547 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 548 | 'jm', 'xkb:jm::eng', 'America/Jamaica', 'en-JM', KML.ANSI, |
| 549 | 'Jamaica'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 550 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 551 | 'bw', 'xkb:bw::eng', 'Africa/Gaborone', ['en-BW', 'tn-BW'], KML.ANSI, |
| 552 | 'Botswana'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 553 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 554 | 'ws', 'xkb:ws::smo', 'Pacific/Apia', ['sm', 'en-WS'], KML.ANSI, |
| 555 | 'Samoa'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 556 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 557 | 'bq', 'xkb:bq::nld', 'America/Kralendijk', ['nl', 'en'], KML.ANSI, |
| 558 | 'Bonaire, Saint Eustatius and Saba '), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 559 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 560 | 'bs', 'xkb:bs::eng', 'America/Nassau', 'en-BS', KML.ANSI, |
| 561 | 'Bahamas'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 562 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 563 | 'je', 'xkb:je::eng', 'Europe/Jersey', ['en', 'pt'], KML.ANSI, |
| 564 | 'Jersey'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 565 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 566 | 'by', 'xkb:by::bel', 'Europe/Minsk', ['be', 'ru'], KML.ANSI, |
| 567 | 'Belarus'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 568 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 569 | 'bz', 'xkb:bz::eng', 'America/Belize', ['en-BZ', 'es'], KML.ANSI, |
| 570 | 'Belize'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 571 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 572 | 'rw', 'xkb:rw::kin', 'Africa/Kigali', ['rw', 'en-RW'], KML.ANSI, |
| 573 | 'Rwanda'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 574 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 575 | 'rs', 'xkb:rs::srp', 'Europe/Belgrade', ['sr', 'hu', 'bs'], KML.ANSI, |
| 576 | 'Serbia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 577 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 578 | 'tl', 'xkb:us::eng', 'Asia/Dili', ['tet', 'pt-TL', 'en'], KML.ANSI, |
| 579 | 'East Timor'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 580 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 581 | 're', 'xkb:re::fra', 'Indian/Reunion', 'fr-RE', KML.ANSI, |
| 582 | 'Reunion'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 583 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 584 | 'tm', 'xkb:tm::tuk', 'Asia/Ashgabat', ['tk', 'ru', 'uz'], KML.ANSI, |
| 585 | 'Turkmenistan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 586 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 587 | 'tj', 'xkb:tj::tgk', 'Asia/Dushanbe', ['tg', 'ru'], KML.ANSI, |
| 588 | 'Tajikistan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 589 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 590 | 'tk', 'xkb:us::eng', 'Pacific/Fakaofo', ['tkl', 'en-TK'], KML.ANSI, |
| 591 | 'Tokelau'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 592 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 593 | 'gw', 'xkb:gw::por', 'Africa/Bissau', ['pt-GW', 'pov'], KML.ANSI, |
| 594 | 'Guinea-Bissau'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 595 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 596 | 'gu', 'xkb:gu::eng', 'Pacific/Guam', ['en-GU', 'ch-GU'], KML.ANSI, |
| 597 | 'Guam'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 598 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 599 | 'gt', 'xkb:latam::spa', 'America/Guatemala', 'es-419', KML.ANSI, |
| 600 | 'Guatemala'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 601 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 602 | 'gs', 'xkb:gs::eng', 'Atlantic/South_Georgia', 'en', KML.ANSI, |
| 603 | 'South Georgia and the South Sandwich Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 604 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 605 | 'gq', 'xkb:gq::spa', 'Africa/Malabo', ['es-419', 'fr'], KML.ANSI, |
| 606 | 'Equatorial Guinea'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 607 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 608 | 'gp', 'xkb:gp::fra', 'America/Guadeloupe', 'fr-GP', KML.ANSI, |
| 609 | 'Guadeloupe'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 610 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 611 | 'gy', 'xkb:gy::eng', 'America/Guyana', 'en-GY', KML.ANSI, |
| 612 | 'Guyana'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 613 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 614 | 'gg', 'xkb:gg::eng', 'Europe/Guernsey', ['en', 'fr'], KML.ANSI, |
| 615 | 'Guernsey'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 616 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 617 | 'gf', 'xkb:gf::fra', 'America/Cayenne', 'fr-GF', KML.ANSI, |
| 618 | 'French Guiana'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 619 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 620 | 'ge', 'xkb:ge::geo', 'Asia/Tbilisi', 'ka', KML.ANSI, |
| 621 | 'Georgia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 622 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 623 | 'gd', 'xkb:gd::eng', 'America/Grenada', 'en-GD', KML.ANSI, |
| 624 | 'Grenada'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 625 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 626 | 'ga', 'xkb:ga::fra', 'Africa/Libreville', 'fr-GA', KML.ANSI, |
| 627 | 'Gabon'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 628 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 629 | 'sv', 'xkb:latam::spa', 'America/El_Salvador', 'es-419', KML.ANSI, |
| 630 | 'El Salvador'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 631 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 632 | 'gn', 'xkb:gn::fra', 'Africa/Conakry', 'fr-GN', KML.ANSI, |
| 633 | 'Guinea'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 634 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 635 | 'gm', 'xkb:gm::eng', 'Africa/Banjul', ['en-GM', 'mnk', 'wof'], KML.ANSI, |
| 636 | 'Gambia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 637 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 638 | 'gl', 'xkb:gl::kal', ['America/Godthab', 'America/Danmarkshavn', |
| 639 | 'America/Scoresbysund', 'America/Thule'], [ |
| 640 | 'kl', 'da-GL', 'en'], KML.ANSI, |
| 641 | 'Greenland'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 642 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 643 | 'gi', 'xkb:gi::eng', 'Europe/Gibraltar', ['en-GI', 'es'], KML.ANSI, |
| 644 | 'Gibraltar'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 645 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 646 | 'gh', 'xkb:gh::eng', 'Africa/Accra', ['en-GH', 'ak', 'ee'], KML.ANSI, |
| 647 | 'Ghana'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 648 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 649 | 'om', 'xkb:om::ara', 'Asia/Muscat', ['ar', 'en', 'bal'], KML.ANSI, |
| 650 | 'Oman'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 651 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 652 | 'tn', 'xkb:tn::ara', 'Africa/Tunis', ['ar', 'fr'], KML.ANSI, |
| 653 | 'Tunisia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 654 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 655 | 'jo', 'xkb:jo::ara', 'Asia/Amman', ['ar', 'en'], KML.ANSI, |
| 656 | 'Jordan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 657 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 658 | 'hn', 'xkb:latam::spa', 'America/Tegucigalpa', 'es-HN', KML.ANSI, |
| 659 | 'Honduras'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 660 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 661 | 'ht', 'xkb:ht::hat', 'America/Port-au-Prince', ['ht'], KML.ANSI, |
| 662 | 'Haiti'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 663 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 664 | 'hu', ['xkb:us::eng', 'xkb:hu::hun'], 'Europe/Budapest', [ |
| 665 | 'hu', 'en-GB'], KML.ISO, |
| 666 | 'Hungary'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 667 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 668 | 've', 'xkb:latam::spa', 'America/Caracas', 'es-419', KML.ANSI, |
| 669 | 'Venezuela'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 670 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 671 | 'pr', 'xkb:pr::eng', 'America/Puerto_Rico', ['en-PR'], KML.ANSI, |
| 672 | 'Puerto Rico'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 673 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 674 | 'ps', 'xkb:ps::ara', ['Asia/Gaza', 'Asia/Hebron'], 'ar', KML.ANSI, |
| 675 | 'Palestinian Territory'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 676 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 677 | 'pw', 'xkb:us::eng', 'Pacific/Palau', ['pau', 'sov', 'en-PW', 'tox', |
| 678 | 'ja', 'fil', 'zh'], KML.ANSI, |
| 679 | 'Palau'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 680 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 681 | 'sj', 'xkb:sj::nor', 'Arctic/Longyearbyen', ['no', 'ru'], KML.ANSI, |
| 682 | 'Svalbard and Jan Mayen'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 683 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 684 | 'py', 'xkb:latam::spa', 'America/Asuncion', ['es-419', 'gn'], KML.ANSI, |
| 685 | 'Paraguay'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 686 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 687 | 'iq', 'xkb:iq::ara', 'Asia/Baghdad', ['ar', 'ku', 'hy'], KML.ANSI, |
| 688 | 'Iraq'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 689 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 690 | 'pa', 'xkb:latam::spa', 'America/Panama', ['es-419', 'en'], KML.ANSI, |
| 691 | 'Panama'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 692 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 693 | 'pf', 'xkb:pf::fra', ['Pacific/Tahiti', 'Pacific/Marquesas', |
| 694 | 'Pacific/Gambier'], ['fr-PF', 'ty'], KML.ANSI, |
| 695 | 'French Polynesia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 696 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 697 | 'pg', 'xkb:pg::eng', ['Pacific/Port_Moresby', |
| 698 | 'Pacific/Bougainville'], ['en-PG', 'ho', 'meu', |
| 699 | 'tpi'], KML.ANSI, |
| 700 | 'Papua New Guinea'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 701 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 702 | 'pk', 'xkb:pk::urd', 'Asia/Karachi', ['ur-PK', 'en-PK', 'pa', 'sd', |
| 703 | 'ps', 'brh'], KML.ANSI, |
| 704 | 'Pakistan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 705 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 706 | 'pn', 'xkb:pn::eng', 'Pacific/Pitcairn', 'en-PN', KML.ANSI, |
| 707 | 'Pitcairn'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 708 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 709 | 'pm', 'xkb:pm::fra', 'America/Miquelon', 'fr-PM', KML.ANSI, |
| 710 | 'Saint Pierre and Miquelon'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 711 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 712 | 'zm', 'xkb:zm::eng', 'Africa/Lusaka', ['en-ZM', 'bem', 'loz', 'lun', |
| 713 | 'lue', 'ny', 'toi'], KML.ANSI, |
| 714 | 'Zambia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 715 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 716 | 'eh', 'xkb:eh::ara', 'Africa/El_Aaiun', ['ar', 'mey'], KML.ANSI, |
| 717 | 'Western Sahara'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 718 | Region( |
Hung-Te Lin | 47da909 | 2017-03-20 15:01:56 +0800 | [diff] [blame] | 719 | 'eg', 'xkb:eg::ara', 'Africa/Cairo', ['ar', 'en', 'fr'], |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 720 | KML.ANSI, 'Egypt'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 721 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 722 | 'ec', 'xkb:latam::spa', ['America/Guayaquil'], 'es-419', KML.ANSI, |
| 723 | 'Ecuador'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 724 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 725 | 'sb', 'xkb:sb::eng', 'Pacific/Guadalcanal', ['en-SB', 'tpi'], KML.ANSI, |
| 726 | 'Solomon Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 727 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 728 | 'et', 'xkb:et::amh', 'Africa/Addis_Ababa', ['am', 'en-ET', 'om-ET', |
| 729 | 'ti-ET'], KML.ANSI, |
| 730 | 'Ethiopia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 731 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 732 | 'so', 'xkb:so::som', 'Africa/Mogadishu', ['so-SO', 'ar'], KML.ANSI, |
| 733 | 'Somalia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 734 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 735 | 'zw', 'xkb:zw::eng', 'Africa/Harare', ['en-ZW', 'sn', 'nr'], KML.ANSI, |
| 736 | 'Zimbabwe'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 737 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 738 | 'er', 'xkb:er::aar', 'Africa/Asmara', ['aa-ER', 'ar', 'tig', 'kun', |
| 739 | 'ti-ER'], KML.ANSI, |
| 740 | 'Eritrea'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 741 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 742 | 'me', 'xkb:me::srp', 'Europe/Podgorica', ['sr', 'hu', 'bs', 'sq', 'hr', |
| 743 | 'rom'], KML.ANSI, |
| 744 | 'Montenegro'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 745 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 746 | 'md', 'xkb:md::ron', 'Europe/Chisinau', ['ro', 'ru', 'gag'], KML.ANSI, |
| 747 | 'Moldova'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 748 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 749 | 'mg', 'xkb:mg::fra', 'Indian/Antananarivo', ['fr-MG', 'mg'], KML.ANSI, |
| 750 | 'Madagascar'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 751 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 752 | 'mf', 'xkb:mf::fra', 'America/Marigot', 'fr', KML.ANSI, 'Saint Martin'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 753 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 754 | 'ma', 'xkb:ma::ara', 'Africa/Casablanca', ['ar', 'fr'], KML.ANSI, |
| 755 | 'Morocco'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 756 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 757 | 'mc', 'xkb:mc::fra', 'Europe/Monaco', ['fr-MC', 'en', 'it'], KML.ANSI, |
| 758 | 'Monaco'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 759 | Region( |
| 760 | 'uz', 'xkb:uz::uzb', ['Asia/Samarkand', 'Asia/Tashkent'], |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 761 | ['uz', 'ru', 'tg'], KML.ANSI, 'Uzbekistan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 762 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 763 | 'mm', 'xkb:mm::mya', 'Asia/Rangoon', 'my', KML.ANSI, 'Myanmar', |
| 764 | None), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 765 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 766 | 'ml', 'xkb:ml::fra', 'Africa/Bamako', ['fr-ML', 'bm'], KML.ANSI, |
| 767 | 'Mali'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 768 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 769 | 'mo', 'xkb:mo::zho', 'Asia/Macau', ['zh', 'zh-MO', 'pt'], KML.ANSI, |
| 770 | 'Macao'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 771 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 772 | 'mn', 'xkb:mn::mon', ['Asia/Ulaanbaatar', 'Asia/Hovd', |
| 773 | 'Asia/Choibalsan'], ['mn', 'ru'], KML.ANSI, |
| 774 | 'Mongolia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 775 | Region( |
Clark Chung | 0005a70 | 2020-05-26 16:34:52 +0800 | [diff] [blame] | 776 | 'mh', 'xkb:mh::mah', ['Pacific/Majuro'], ['mh', 'en-MH'], KML.ANSI, |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 777 | 'Marshall Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 778 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 779 | 'mk', 'xkb:mk::mkd', 'Europe/Skopje', ['mk', 'sq', 'tr'], KML.ANSI, |
| 780 | 'Macedonia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 781 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 782 | 'mu', 'xkb:mu::eng', 'Indian/Mauritius', ['en-MU', 'bho'], KML.ANSI, |
| 783 | 'Mauritius'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 784 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 785 | 'mt', ['xkb:us::eng'], 'Europe/Malta', ['mt', 'en-GB'], KML.ISO, |
| 786 | 'Malta'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 787 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 788 | 'mw', 'xkb:mw::nya', 'Africa/Blantyre', ['ny', 'yao', 'tum'], KML.ANSI, |
| 789 | 'Malawi'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 790 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 791 | 'mv', 'xkb:mv::div', 'Indian/Maldives', ['dv', 'en'], KML.ANSI, |
| 792 | 'Maldives'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 793 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 794 | 'mq', 'xkb:mq::fra', 'America/Martinique', 'fr-MQ', KML.ANSI, |
| 795 | 'Martinique'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 796 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 797 | 'mp', 'xkb:us::eng', 'Pacific/Saipan', ['fil', 'tl', 'zh', 'ch-MP', |
| 798 | 'en-MP'], KML.ANSI, |
| 799 | 'Northern Mariana Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 800 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 801 | 'ms', 'xkb:ms::eng', 'America/Montserrat', 'en-MS', KML.ANSI, |
| 802 | 'Montserrat'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 803 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 804 | 'mr', 'xkb:mr::ara', 'Africa/Nouakchott', ['ar', 'fuc', 'snk', 'fr', |
| 805 | 'mey', 'wo'], KML.ANSI, |
| 806 | 'Mauritania'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 807 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 808 | 'im', 'xkb:im::eng', 'Europe/Isle_of_Man', ['en', 'gv'], KML.ANSI, |
| 809 | 'Isle of Man'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 810 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 811 | 'ug', 'xkb:ug::eng', 'Africa/Kampala', ['en-UG', 'lg', 'ar'], KML.ANSI, |
| 812 | 'Uganda'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 813 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 814 | 'tz', 'xkb:tz::swa', 'Africa/Dar_es_Salaam', ['sw-TZ', 'en'], KML.ANSI, |
| 815 | 'Tanzania'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 816 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 817 | 'io', 'xkb:io::eng', 'Indian/Chagos', 'en-IO', KML.ANSI, |
| 818 | 'British Indian Ocean Territory'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 819 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 820 | 'sh', 'xkb:sh::eng', 'Atlantic/St_Helena', 'en-SH', KML.ANSI, |
| 821 | 'Saint Helena'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 822 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 823 | 'fj', 'xkb:fj::eng', 'Pacific/Fiji', ['en-FJ', 'fj'], KML.ANSI, |
| 824 | 'Fiji'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 825 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 826 | 'fk', 'xkb:fk::eng', 'Atlantic/Stanley', 'en-FK', KML.ANSI, |
| 827 | 'Falkland Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 828 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 829 | 'fm', 'xkb:fm::eng', [ |
| 830 | 'Pacific/Chuuk', 'Pacific/Pohnpei', 'Pacific/Kosrae'], [ |
| 831 | 'en-FM', 'chk', 'pon', 'yap', 'kos', 'uli', 'woe', 'nkr', |
| 832 | 'kpg'], KML.ANSI, |
| 833 | 'Micronesia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 834 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 835 | 'fo', 'xkb:fo::fao', 'Atlantic/Faroe', ['fo', 'da-FO'], KML.ANSI, |
| 836 | 'Faroe Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 837 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 838 | 'ni', 'xkb:latam::spa', 'America/Managua', ['es-419', 'en'], KML.ANSI, |
| 839 | 'Nicaragua'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 840 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 841 | 'no', 'xkb:no::nor', 'Europe/Oslo', ['no', 'nb', 'nn', 'se'], KML.ISO, |
| 842 | 'Norway'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 843 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 844 | 'na', 'xkb:na::eng', 'Africa/Windhoek', ['en-NA', 'af', 'de', 'hz', |
| 845 | 'naq'], KML.ANSI, |
| 846 | 'Namibia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 847 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 848 | 'vu', 'xkb:vu::bis', 'Pacific/Efate', ['bi', 'en-VU'], KML.ANSI, |
| 849 | 'Vanuatu'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 850 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 851 | 'nc', 'xkb:nc::fra', 'Pacific/Noumea', 'fr-NC', KML.ANSI, |
| 852 | 'New Caledonia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 853 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 854 | 'ne', 'xkb:ne::fra', 'Africa/Niamey', ['fr-NE', 'ha', 'kr'], KML.ANSI, |
| 855 | 'Niger'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 856 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 857 | 'nf', 'xkb:nf::eng', 'Pacific/Norfolk', 'en-NF', KML.ANSI, |
| 858 | 'Norfolk Island'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 859 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 860 | 'np', 'xkb:np::nep', 'Asia/Kathmandu', ['ne', 'en'], KML.ANSI, |
| 861 | 'Nepal'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 862 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 863 | 'nr', 'xkb:nr::nau', 'Pacific/Nauru', ['na', 'en-NR'], KML.ANSI, |
| 864 | 'Nauru'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 865 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 866 | 'nu', 'xkb:us::eng', 'Pacific/Niue', ['niu', 'en-NU'], KML.ANSI, |
| 867 | 'Niue'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 868 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 869 | 'ck', 'xkb:ck::eng', 'Pacific/Rarotonga', ['en-CK', 'mi'], KML.ANSI, |
| 870 | 'Cook Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 871 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 872 | 'ci', 'xkb:ci::fra', 'Africa/Abidjan', 'fr-CI', KML.ANSI, |
| 873 | 'Ivory Coast'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 874 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 875 | 'cn', 'xkb:us::eng', 'Asia/Shanghai', 'zh-CN', KML.ANSI, |
| 876 | 'China'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 877 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 878 | 'cm', 'xkb:cm::eng', 'Africa/Douala', ['en-CM', 'fr-CM'], KML.ANSI, |
| 879 | 'Cameroon'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 880 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 881 | 'cc', 'xkb:cc::msa', 'Indian/Cocos', ['ms-CC', 'en'], KML.ANSI, |
| 882 | 'Cocos Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 883 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 884 | 'cg', 'xkb:cg::fra', 'Africa/Brazzaville', ['fr-CG', 'kg'], KML.ANSI, |
| 885 | 'Republic of the Congo'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 886 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 887 | 'cf', 'xkb:cf::fra', 'Africa/Bangui', ['fr-CF', 'sg', 'ln'], KML.ANSI, |
| 888 | 'Central African Republic'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 889 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 890 | 'cd', 'xkb:cd::fra', ['Africa/Kinshasa', 'Africa/Lubumbashi'], [ |
| 891 | 'fr-CD', 'ln', 'kg'], KML.ANSI, |
| 892 | 'Democratic Republic of the Congo'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 893 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 894 | 'cy', 'xkb:cy::ell', 'Asia/Nicosia', ['el-CY', 'tr-CY'], KML.ANSI, |
| 895 | 'Cyprus'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 896 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 897 | 'cx', 'xkb:cx::eng', 'Indian/Christmas', ['en', 'zh'], KML.ANSI, |
| 898 | 'Christmas Island'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 899 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 900 | 'cr', 'xkb:latam::spa', 'America/Costa_Rica', ['es-419'], KML.ANSI, |
| 901 | 'Costa Rica'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 902 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 903 | 'cw', 'xkb:cw::nld', 'America/Curacao', ['nl'], KML.ANSI, 'Curacao'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 904 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 905 | 'cv', 'xkb:cv::por', 'Atlantic/Cape_Verde', 'pt-CV', KML.ANSI, |
| 906 | 'Cape Verde'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 907 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 908 | 'cu', 'xkb:latam::spa', 'America/Havana', 'es-419', KML.ANSI, |
| 909 | 'Cuba'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 910 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 911 | 'sz', 'xkb:sz::eng', 'Africa/Mbabane', ['en-SZ', 'ss-SZ'], KML.ANSI, |
| 912 | 'Swaziland'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 913 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 914 | 'sy', 'xkb:sy::ara', 'Asia/Damascus', ['ar', 'ku', 'hy', 'arc', 'fr', |
| 915 | 'en'], KML.ANSI, |
| 916 | 'Syria'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 917 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 918 | 'sx', 'xkb:sx::nld', 'America/Lower_Princes', ['nl', 'en'], KML.ANSI, |
| 919 | 'Sint Maarten'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 920 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 921 | 'kg', 'xkb:kg::kir', 'Asia/Bishkek', ['ky', 'uz', 'ru'], KML.ANSI, |
| 922 | 'Kyrgyzstan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 923 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 924 | 'ke', 'xkb:ke::eng', 'Africa/Nairobi', ['en-KE', 'sw-KE'], KML.ANSI, |
| 925 | 'Kenya'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 926 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 927 | 'ss', 'xkb:ss::eng', 'Africa/Juba', 'en', KML.ANSI, |
| 928 | 'South Sudan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 929 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 930 | 'sr', 'xkb:sr::nld', 'America/Paramaribo', ['nl-SR', 'en', 'srn', 'hns', |
| 931 | 'jv'], KML.ANSI, |
| 932 | 'Suriname'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 933 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 934 | 'ki', 'xkb:ki::eng', ['Pacific/Tarawa', 'Pacific/Enderbury', |
| 935 | 'Pacific/Kiritimati'], ['en-KI', 'gil'], KML.ANSI, |
| 936 | 'Kiribati'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 937 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 938 | 'kh', 'xkb:kh::khm', 'Asia/Phnom_Penh', ['km', 'fr', 'en'], KML.ANSI, |
| 939 | 'Cambodia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 940 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 941 | 'kn', 'xkb:kn::eng', 'America/St_Kitts', 'en-KN', KML.ANSI, |
| 942 | 'Saint Kitts and Nevis'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 943 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 944 | 'km', 'xkb:km::ara', 'Indian/Comoro', ['ar', 'fr-KM'], KML.ANSI, |
| 945 | 'Comoros'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 946 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 947 | 'st', 'xkb:st::por', 'Africa/Sao_Tome', 'pt-ST', KML.ANSI, |
| 948 | 'Sao Tome and Principe'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 949 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 950 | 'si', 'xkb:si::slv', 'Europe/Ljubljana', ['sl', 'hu', 'it', 'sr', 'de', |
| 951 | 'hr', 'en-GB'], KML.ISO, |
| 952 | 'Slovenia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 953 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 954 | 'kp', 'xkb:kp::kor', 'Asia/Pyongyang', 'ko-KP', KML.ANSI, |
| 955 | 'North Korea'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 956 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 957 | 'sn', 'xkb:sn::fra', 'Africa/Dakar', ['fr-SN', 'wo', 'fuc'], KML.ANSI, |
| 958 | 'Senegal'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 959 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 960 | 'sm', 'xkb:sm::ita', 'Europe/San_Marino', 'it-SM', KML.ANSI, |
| 961 | 'San Marino'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 962 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 963 | 'sl', 'xkb:sl::eng', 'Africa/Freetown', ['en-SL', 'men'], KML.ANSI, |
| 964 | 'Sierra Leone'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 965 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 966 | 'sc', 'xkb:sc::eng', 'Indian/Mahe', ['en-SC', 'fr-SC'], KML.ANSI, |
| 967 | 'Seychelles'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 968 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 969 | 'ky', 'xkb:ky::eng', 'America/Cayman', 'en-KY', KML.ANSI, |
| 970 | 'Cayman Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 971 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 972 | 'sd', 'xkb:sd::ara', 'Africa/Khartoum', ['ar', 'en', 'fia'], KML.ANSI, |
| 973 | 'Sudan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 974 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 975 | 'do', 'xkb:latam::spa', 'America/Santo_Domingo', 'es-419', KML.ANSI, |
| 976 | 'Dominican Republic'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 977 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 978 | 'dm', 'xkb:dm::eng', 'America/Dominica', 'en-DM', KML.ANSI, |
| 979 | 'Dominica'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 980 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 981 | 'dj', 'xkb:dj::fra', 'Africa/Djibouti', ['fr-DJ', 'ar'], KML.ANSI, |
| 982 | 'Djibouti'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 983 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 984 | 'dk', 'xkb:dk::dan', 'Europe/Copenhagen', ['da-DK', 'en', 'fo', |
| 985 | 'de-DK'], KML.ISO, |
| 986 | 'Denmark'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 987 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 988 | 'vg', 'xkb:vg::eng', 'America/Tortola', 'en-VG', KML.ANSI, |
| 989 | 'British Virgin Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 990 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 991 | 'ye', 'xkb:ye::ara', 'Asia/Aden', 'ar', KML.ANSI, |
| 992 | 'Yemen'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 993 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 994 | 'dz', 'xkb:dz::ara', 'Africa/Algiers', 'ar', KML.ANSI, |
| 995 | 'Algeria'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 996 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 997 | 'yt', 'xkb:yt::fra', 'Indian/Mayotte', 'fr-YT', KML.ANSI, |
| 998 | 'Mayotte'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 999 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1000 | 'um', 'xkb:um::eng', ['Pacific/Johnston', 'Pacific/Midway', |
| 1001 | 'Pacific/Wake'], 'en-UM', KML.ANSI, |
| 1002 | 'United States Minor Outlying Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1003 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1004 | 'lb', 'xkb:lb::ara', 'Asia/Beirut', ['ar', 'fr-LB', 'en'], KML.ANSI, |
| 1005 | 'Lebanon'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1006 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1007 | 'lc', 'xkb:lc::eng', 'America/St_Lucia', 'en-LC', KML.ANSI, |
| 1008 | 'Saint Lucia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1009 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1010 | 'la', 'xkb:la::lao', 'Asia/Vientiane', ['lo', 'fr', 'en'], KML.ANSI, |
| 1011 | 'Laos'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1012 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1013 | 'tv', 'xkb:us::eng', 'Pacific/Funafuti', ['tvl', 'en', 'sm'], KML.ANSI, |
| 1014 | 'Tuvalu'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1015 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1016 | 'tt', 'xkb:tt::eng', 'America/Port_of_Spain', ['en-TT', 'hns', 'fr', |
| 1017 | 'es', 'zh'], KML.ANSI, |
| 1018 | 'Trinidad and Tobago'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1019 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1020 | 'lk', 'xkb:lk::sin', 'Asia/Colombo', ['si', 'ta', 'en'], KML.ANSI, |
| 1021 | 'Sri Lanka'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1022 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1023 | 'li', 'xkb:ch::ger', 'Europe/Vaduz', ['de', 'en-GB'], KML.ISO, |
| 1024 | 'Liechtenstein'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1025 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1026 | 'lv', 'xkb:lv:apostrophe:lav', 'Europe/Riga', ['lv', 'lt', 'ru', |
| 1027 | 'en-GB'], KML.ISO, |
| 1028 | 'Latvia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1029 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1030 | 'to', 'xkb:to::ton', 'Pacific/Tongatapu', ['to', 'en-TO'], KML.ANSI, |
| 1031 | 'Tonga'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1032 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1033 | 'lt', 'xkb:lt::lit', 'Europe/Vilnius', ['lt', 'ru', 'pl'], KML.ISO, |
| 1034 | 'Lithuania'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1035 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1036 | 'lu', 'xkb:lu::ltz', 'Europe/Luxembourg', ['lb', 'de-LU'], KML.ANSI, |
| 1037 | 'Luxembourg'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1038 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1039 | 'lr', 'xkb:lr::eng', 'Africa/Monrovia', 'en-LR', KML.ANSI, |
| 1040 | 'Liberia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1041 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1042 | 'ls', 'xkb:ls::eng', 'Africa/Maseru', ['en-LS', 'st', 'zu'], KML.ANSI, |
| 1043 | 'Lesotho'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1044 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1045 | 'tf', 'xkb:tf::fra', 'Indian/Kerguelen', 'fr', KML.ANSI, |
| 1046 | 'French Southern Territories'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1047 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1048 | 'tg', 'xkb:tg::fra', 'Africa/Lome', ['fr-TG', 'ee', 'hna'], KML.ANSI, |
| 1049 | 'Togo'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1050 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1051 | 'td', 'xkb:td::fra', 'Africa/Ndjamena', ['fr-TD', 'ar'], KML.ANSI, |
| 1052 | 'Chad'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1053 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1054 | 'tc', 'xkb:tc::eng', 'America/Grand_Turk', 'en-TC', KML.ANSI, |
| 1055 | 'Turks and Caicos Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1056 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1057 | 'ly', 'xkb:ly::ara', 'Africa/Tripoli', ['ar', 'it', 'en'], KML.ANSI, |
| 1058 | 'Libya'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1059 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1060 | 'va', 'xkb:va::lat', 'Europe/Vatican', ['la', 'it', 'fr'], KML.ANSI, |
| 1061 | 'Vatican'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1062 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1063 | 'vc', 'xkb:vc::eng', 'America/St_Vincent', ['en-VC', 'fr'], KML.ANSI, |
| 1064 | 'Saint Vincent and the Grenadines'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1065 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1066 | 'ad', 'xkb:ad::cat', 'Europe/Andorra', 'ca', KML.ANSI, |
| 1067 | 'Andorra'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1068 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1069 | 'ag', 'xkb:ag::eng', 'America/Antigua', 'en-AG', KML.ANSI, |
| 1070 | 'Antigua and Barbuda'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1071 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1072 | 'af', 'xkb:af::fas', 'Asia/Kabul', ['fa-AF', 'ps'], KML.ANSI, |
| 1073 | 'Afghanistan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1074 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1075 | 'ai', 'xkb:ai::eng', 'America/Anguilla', 'en-AI', KML.ANSI, |
| 1076 | 'Anguilla'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1077 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1078 | 'vi', 'xkb:vi::eng', 'America/St_Thomas', 'en-VI', KML.ANSI, |
| 1079 | 'U.S. Virgin Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1080 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1081 | 'ir', 'xkb:ir::fas', 'Asia/Tehran', ['fa-IR', 'ku'], KML.ANSI, |
| 1082 | 'Iran'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1083 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1084 | 'am', 'xkb:am::hye', 'Asia/Yerevan', 'hy', KML.ANSI, |
| 1085 | 'Armenia'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1086 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1087 | 'al', 'xkb:al::sqi', 'Europe/Tirane', ['sq', 'el'], KML.ANSI, |
| 1088 | 'Albania'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1089 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1090 | 'ao', 'xkb:ao::por', 'Africa/Luanda', 'pt-AO', KML.ANSI, |
| 1091 | 'Angola'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1092 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1093 | 'as', 'xkb:as::eng', 'Pacific/Pago_Pago', ['en-AS', 'sm'], KML.ANSI, |
| 1094 | 'American Samoa'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1095 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1096 | 'aw', 'xkb:aw::nld', 'America/Aruba', ['nl-AW', 'es', 'en'], KML.ANSI, |
| 1097 | 'Aruba'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1098 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1099 | 'ax', 'xkb:ax::swe', 'Europe/Mariehamn', 'sv-AX', KML.ANSI, |
| 1100 | 'Aland Islands'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1101 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1102 | 'az', 'xkb:az::aze', 'Asia/Baku', ['az', 'ru', 'hy'], KML.ANSI, |
| 1103 | 'Azerbaijan'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1104 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1105 | 'ua', 'xkb:ua::ukr', [ |
| 1106 | 'Europe/Kiev', 'Europe/Uzhgorod', 'Europe/Zaporozhye'], [ |
| 1107 | 'uk', 'ru-UA', 'rom', 'pl', 'hu'], KML.ANSI, |
| 1108 | 'Ukraine'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1109 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1110 | 'qa', 'xkb:qa::ara', 'Asia/Bahrain', ['ar', 'en'], KML.ANSI, |
| 1111 | 'Qatar'), |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1112 | Region( |
Hung-Te Lin | 98501ae | 2017-06-02 15:53:33 +0800 | [diff] [blame] | 1113 | 'mz', 'xkb:mz::por', 'Africa/Maputo', ['pt-MZ', 'vmw'], KML.ANSI, |
| 1114 | 'Mozambique'), |
| 1115 | ] |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1116 | """A list of :py:class:`regions.Region` objects for |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1117 | **unconfirmed** regions. These may contain incorrect information (or not |
| 1118 | supported by Chrome browser yet), and all fields must be reviewed before launch. |
| 1119 | See http://goto/vpdsettings. |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1120 | |
| 1121 | Currently, non-Latin keyboards must use an underlying Latin keyboard |
| 1122 | for VPD. (This assumption should be revisited when moving items to |
| 1123 | :py:data:`regions.Region.REGIONS_LIST`.) This is |
| 1124 | currently being discussed on <http://crbug.com/325389>. |
| 1125 | |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1126 | Some timezones or locales may be missing from ``timezone_settings.cc`` (see |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1127 | http://crosbug.com/p/23902). This must be rectified before moving |
| 1128 | items to :py:data:`regions.Region.REGIONS_LIST`. |
| 1129 | """ |
| 1130 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1131 | |
| 1132 | def ConsolidateRegions(regions): |
| 1133 | """Consolidates a list of regions into a dict. |
| 1134 | |
| 1135 | Args: |
| 1136 | regions: A list of Region objects. All objects for any given |
| 1137 | region code must be identical or we will throw an exception. |
| 1138 | (We allow duplicates in case identical region objects are |
| 1139 | defined in both regions.py and the overlay, e.g., when moving |
| 1140 | items to the public overlay.) |
| 1141 | |
| 1142 | Returns: |
| 1143 | A dict from region code to Region. |
| 1144 | |
| 1145 | Raises: |
| 1146 | RegionException: If there are multiple regions defined for a given |
| 1147 | region, and the values for those regions differ. |
| 1148 | """ |
| 1149 | # Build a dict from region_code to the first Region with that code. |
| 1150 | region_dict = {} |
| 1151 | for r in regions: |
| 1152 | existing_region = region_dict.get(r.region_code) |
| 1153 | if existing_region: |
| 1154 | if existing_region.GetFieldsDict() != r.GetFieldsDict(): |
| 1155 | raise RegionException( |
| 1156 | 'Conflicting definitions for region %r: %r, %r' % |
| 1157 | (r.region_code, existing_region.GetFieldsDict(), |
| 1158 | r.GetFieldsDict())) |
| 1159 | else: |
| 1160 | region_dict[r.region_code] = r |
| 1161 | |
| 1162 | return region_dict |
| 1163 | |
| 1164 | |
Matt Stark | 1987c53 | 2021-04-19 10:12:35 +1000 | [diff] [blame] | 1165 | def BuildRegionsDict(include_all=False, include_pseudolocales=False): |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1166 | """Builds a dictionary mapping from code to :py:class:`regions.Region` object. |
| 1167 | |
Matt Stark | 1987c53 | 2021-04-19 10:12:35 +1000 | [diff] [blame] | 1168 | ``include_pseudolocales`` should never be true for production builds. |
| 1169 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1170 | The regions include: |
| 1171 | |
| 1172 | * :py:data:`regions.REGIONS_LIST` |
| 1173 | * :py:data:`regions_overlay.REGIONS_LIST` |
| 1174 | * Only if ``include_all`` is true: |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1175 | * :py:data:`regions.UNCONFIRMED_REGIONS_LIST` |
| 1176 | * :py:data:`regions.INCOMPLETE_REGIONS_LIST` |
Matt Stark | 1987c53 | 2021-04-19 10:12:35 +1000 | [diff] [blame] | 1177 | * Only if ``include_pseudolocales`` is true: |
| 1178 | * :py:data:`regions.PSEUDOLOCALE_REGIONS_LIST` |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1179 | |
| 1180 | A region may only appear in one of the above lists, or this function |
| 1181 | will (deliberately) fail. |
| 1182 | """ |
| 1183 | regions = list(REGIONS_LIST) |
| 1184 | if include_all: |
Hung-Te Lin | 8f8e0c4 | 2015-04-13 11:42:42 +0800 | [diff] [blame] | 1185 | known_codes = [r.region_code for r in regions] |
| 1186 | regions += [r for r in UNCONFIRMED_REGIONS_LIST if r.region_code not in |
| 1187 | known_codes] |
Matt Stark | 1987c53 | 2021-04-19 10:12:35 +1000 | [diff] [blame] | 1188 | if include_pseudolocales: |
| 1189 | regions += PSEUDOLOCALE_REGIONS_LIST |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1190 | |
| 1191 | # Build dictionary of region code to list of regions with that |
| 1192 | # region code. Check manually for duplicates, since the region may |
| 1193 | # be present both in the overlay and the public repo. |
| 1194 | return ConsolidateRegions(regions) |
| 1195 | |
| 1196 | |
| 1197 | REGIONS = BuildRegionsDict() |
| 1198 | |
| 1199 | |
Bao-Duy Tran | e43d5de | 2020-05-29 18:02:36 +1000 | [diff] [blame] | 1200 | def main(args=None, out=None): |
| 1201 | if args is None: |
| 1202 | args = sys.argv[1:] |
| 1203 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1204 | parser = argparse.ArgumentParser(description=( |
| 1205 | 'Display all known regions and their parameters. ')) |
| 1206 | parser.add_argument('--format', |
| 1207 | choices=('human-readable', 'csv', 'json', 'yaml'), |
| 1208 | default='human-readable', |
| 1209 | help='Output format (default=%(default)s)') |
| 1210 | parser.add_argument('--all', action='store_true', |
| 1211 | help='Include unconfirmed and incomplete regions') |
Hung-Te Lin | fe67ea4 | 2017-07-21 18:59:55 +0800 | [diff] [blame] | 1212 | parser.add_argument('--notes', action='store_true', |
| 1213 | help='Include notes in output') |
Matt Stark | 1987c53 | 2021-04-19 10:12:35 +1000 | [diff] [blame] | 1214 | parser.add_argument('--include_pseudolocales', action='store_true', |
| 1215 | help='Include pseudolocales in output') |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1216 | parser.add_argument('--output', default=None, |
| 1217 | help='Specify output file') |
Hung-Te Lin | 34f3d38 | 2015-04-10 18:18:23 +0800 | [diff] [blame] | 1218 | parser.add_argument('--overlay', default=None, |
| 1219 | help='Specify a Python file to overlay extra data') |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1220 | args = parser.parse_args(args) |
| 1221 | |
Hung-Te Lin | 34f3d38 | 2015-04-10 18:18:23 +0800 | [diff] [blame] | 1222 | if args.overlay is not None: |
Yilin Yang | 350aca0 | 2020-02-03 15:08:23 +0800 | [diff] [blame] | 1223 | with open(args.overlay) as f: |
Bao-Duy Tran | e43d5de | 2020-05-29 18:02:36 +1000 | [diff] [blame] | 1224 | exec(f.read()) # pylint: disable=exec-used |
Hung-Te Lin | 34f3d38 | 2015-04-10 18:18:23 +0800 | [diff] [blame] | 1225 | |
Hung-Te Lin | 1a14cc4 | 2015-04-14 01:23:34 +0800 | [diff] [blame] | 1226 | if args.all: |
| 1227 | # Add an additional 'confirmed' property to help identifying region status, |
| 1228 | # for autotests, unit tests and factory module. |
| 1229 | Region.FIELDS.insert(1, 'confirmed') |
| 1230 | for r in REGIONS_LIST: |
| 1231 | r.confirmed = True |
| 1232 | for r in UNCONFIRMED_REGIONS_LIST: |
| 1233 | r.confirmed = False |
| 1234 | |
Matt Stark | 1987c53 | 2021-04-19 10:12:35 +1000 | [diff] [blame] | 1235 | regions_dict = BuildRegionsDict(args.all, args.include_pseudolocales) |
Hung-Te Lin | 34f3d38 | 2015-04-10 18:18:23 +0800 | [diff] [blame] | 1236 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1237 | if out is None: |
| 1238 | if args.output is None: |
| 1239 | out = sys.stdout |
| 1240 | else: |
| 1241 | out = open(args.output, 'w') |
| 1242 | |
Hung-Te Lin | fe67ea4 | 2017-07-21 18:59:55 +0800 | [diff] [blame] | 1243 | if args.notes or args.format == 'csv': |
| 1244 | Region.FIELDS += ['notes'] |
| 1245 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1246 | # Handle YAML and JSON output. |
| 1247 | if args.format == 'yaml' or args.format == 'json': |
| 1248 | data = {} |
| 1249 | for region in regions_dict.values(): |
| 1250 | item = {} |
| 1251 | for field in Region.FIELDS: |
| 1252 | item[field] = getattr(region, field) |
| 1253 | data[region.region_code] = item |
| 1254 | if args.format == 'yaml': |
| 1255 | yaml.dump(data, out) |
| 1256 | else: |
| 1257 | json.dump(data, out) |
| 1258 | return |
| 1259 | |
| 1260 | # Handle CSV or plain-text output: build a list of lines to print. |
| 1261 | lines = [Region.FIELDS] |
| 1262 | |
| 1263 | def CoerceToString(value): |
| 1264 | """Returns the arguments in simple string type. |
| 1265 | |
| 1266 | If value is a list, concatenate its values with commas. Otherwise, just |
| 1267 | return value. |
| 1268 | """ |
| 1269 | if isinstance(value, list): |
| 1270 | return ','.join(value) |
| 1271 | else: |
| 1272 | return str(value) |
Hung-Te Lin | 1a14cc4 | 2015-04-14 01:23:34 +0800 | [diff] [blame] | 1273 | |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1274 | for region in sorted(regions_dict.values(), key=lambda v: v.region_code): |
| 1275 | lines.append([CoerceToString(getattr(region, field)) |
| 1276 | for field in Region.FIELDS]) |
| 1277 | |
| 1278 | if args.format == 'csv': |
Hung-Te Lin | 1a14cc4 | 2015-04-14 01:23:34 +0800 | [diff] [blame] | 1279 | # Just print the lines in CSV format. Note the values may include ',' so the |
| 1280 | # separator must be tab. |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1281 | for l in lines: |
Hung-Te Lin | 1a14cc4 | 2015-04-14 01:23:34 +0800 | [diff] [blame] | 1282 | print('\t'.join(l)) |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1283 | elif args.format == 'human-readable': |
| 1284 | num_columns = len(lines[0]) |
| 1285 | |
| 1286 | # Calculate maximum length of each column. |
| 1287 | max_lengths = [] |
Yilin Yang | 1550f3c | 2020-02-03 15:09:31 +0800 | [diff] [blame] | 1288 | for column_no in range(num_columns): |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1289 | max_lengths.append(max(len(line[column_no]) for line in lines)) |
| 1290 | |
| 1291 | # Print each line, padding as necessary to the max column length. |
| 1292 | for line in lines: |
Yilin Yang | 1550f3c | 2020-02-03 15:09:31 +0800 | [diff] [blame] | 1293 | for column_no in range(num_columns): |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1294 | out.write(line[column_no].ljust(max_lengths[column_no] + 2)) |
| 1295 | out.write('\n') |
| 1296 | else: |
Wei-Han Chen | 763e672 | 2018-11-16 12:23:19 +0800 | [diff] [blame] | 1297 | sys.exit('Sorry, unknown format specified: %s' % args.format) |
Hung-Te Lin | 76c55b2 | 2015-03-31 14:47:14 +0800 | [diff] [blame] | 1298 | |
| 1299 | |
| 1300 | if __name__ == '__main__': |
| 1301 | main() |