From 6ce9f3a717abd3cb7a9ae35364ae274f141c267b Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 6 Sep 2019 12:30:07 +0100 Subject: [PATCH] Unbundle the l18n library This was previously bundled in #4721 to avoid installation errors on non-Unicode locales. As of v2018.5, this has now been fixed upstream: https://bitbucket.org/tkhyn/l18n/issues/4/setuppy-raises-unicodedecodeerror-trying isort fix --- CHANGELOG.txt | 1 + docs/releases/2.8.rst | 1 + setup.cfg | 3 +- setup.py | 3 +- wagtail/admin/auth.py | 3 +- wagtail/users/forms.py | 3 +- wagtail/utils/l18n/CHANGES.rst | 76 -- wagtail/utils/l18n/CONTRIBUTORS.rst | 18 - wagtail/utils/l18n/LICENSE.txt | 21 - wagtail/utils/l18n/README.rst | 210 ---- wagtail/utils/l18n/__init__.py | 4 - wagtail/utils/l18n/__maps.py | 920 ------------------ .../utils/l18n/locale/cs/LC_MESSAGES/l18n.mo | Bin 15675 -> 0 bytes .../utils/l18n/locale/de/LC_MESSAGES/l18n.mo | Bin 12014 -> 0 bytes .../utils/l18n/locale/en/LC_MESSAGES/l18n.mo | Bin 639 -> 0 bytes .../utils/l18n/locale/fr/LC_MESSAGES/l18n.mo | Bin 15541 -> 0 bytes .../utils/l18n/locale/zh/LC_MESSAGES/l18n.mo | Bin 27555 -> 0 bytes wagtail/utils/l18n/maps.py | 26 - wagtail/utils/l18n/translation.py | 275 ------ wagtail/utils/l18n/utils.py | 32 - wagtail/utils/l18n/version.py | 40 - 21 files changed, 8 insertions(+), 1628 deletions(-) delete mode 100644 wagtail/utils/l18n/CHANGES.rst delete mode 100644 wagtail/utils/l18n/CONTRIBUTORS.rst delete mode 100644 wagtail/utils/l18n/LICENSE.txt delete mode 100644 wagtail/utils/l18n/README.rst delete mode 100644 wagtail/utils/l18n/__init__.py delete mode 100644 wagtail/utils/l18n/__maps.py delete mode 100644 wagtail/utils/l18n/locale/cs/LC_MESSAGES/l18n.mo delete mode 100644 wagtail/utils/l18n/locale/de/LC_MESSAGES/l18n.mo delete mode 100644 wagtail/utils/l18n/locale/en/LC_MESSAGES/l18n.mo delete mode 100644 wagtail/utils/l18n/locale/fr/LC_MESSAGES/l18n.mo delete mode 100644 wagtail/utils/l18n/locale/zh/LC_MESSAGES/l18n.mo delete mode 100644 wagtail/utils/l18n/maps.py delete mode 100644 wagtail/utils/l18n/translation.py delete mode 100644 wagtail/utils/l18n/utils.py delete mode 100644 wagtail/utils/l18n/version.py diff --git a/CHANGELOG.txt b/CHANGELOG.txt index b77adedb4..a2fdde69f 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -9,6 +9,7 @@ Changelog * Improved diffing behavior for text fields (Aliosha Padovani) * Fix: Rename documents listing column 'uploaded' to 'created' (LB (Ben Johnston)) * Fix: Submenu items longer then the page height are no longer broken by the submenu footer (Igor van Spengen) + * Fix: Unbundle the l18n library as it was bundled to avoid installation errors which have been resolved (Matt Westcott) 2.7 LTS (xx.xx.xxxx) - IN DEVELOPMENT ~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/releases/2.8.rst b/docs/releases/2.8.rst index c73d02706..96f1db46d 100644 --- a/docs/releases/2.8.rst +++ b/docs/releases/2.8.rst @@ -24,6 +24,7 @@ Bug fixes * Rename documents listing column 'uploaded' to 'created' (LB (Ben Johnston)) * Submenu items longer then the page height are no longer broken by the submenu footer (Igor van Spengen) + * Unbundle the l18n library as it was bundled to avoid installation errors which have been resolved (Matt Westcott) Upgrade considerations diff --git a/setup.cfg b/setup.cfg index e7e80ce24..28cab378c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -20,14 +20,13 @@ python-tag = py3 # N805: First argument of a method should be named 'self' # N806: Variable in function should be lowercase ignore = D100,D101,D102,D103,D105,D200,D202,D204,D205,D209,D400,D401,E303,E501,W503,N805,N806 -exclude = wagtail/project_template/*,wagtail/utils/l18n/* +exclude = wagtail/project_template/* max-line-length = 120 [isort] line_length=100 multi_line_output=4 skip=migrations,project_template -skip_glob=*/wagtail/utils/l18n/* known_first_party=wagtail known_third_party=willow,modelcluster,taggit,django,unidecode,bs4,pytz,PIL diff --git a/setup.py b/setup.py index 0b407c458..dae6f49cd 100755 --- a/setup.py +++ b/setup.py @@ -33,8 +33,7 @@ install_requires = [ "Unidecode>=0.04.14,<2.0", "Willow>=1.3,<1.4", "requests>=2.11.1,<3.0", - "pytz>=2016.6", # for l18n - "six>=1.11,<2.0", # for l18n + "l18n>=2018.5", ] # Testing dependencies diff --git a/wagtail/admin/auth.py b/wagtail/admin/auth.py index f90a89ed4..0567260ea 100644 --- a/wagtail/admin/auth.py +++ b/wagtail/admin/auth.py @@ -1,5 +1,7 @@ from functools import wraps +import l18n + from django.contrib.auth import get_user_model from django.contrib.auth.views import redirect_to_login as auth_redirect_to_login from django.core.exceptions import PermissionDenied @@ -12,7 +14,6 @@ from django.utils.translation import override from wagtail.admin import messages from wagtail.core.models import GroupPagePermission -from wagtail.utils import l18n def users_with_page_permission(page, permission_type, include_superusers=True): diff --git a/wagtail/users/forms.py b/wagtail/users/forms.py index 72e54b62d..44163008b 100644 --- a/wagtail/users/forms.py +++ b/wagtail/users/forms.py @@ -2,6 +2,8 @@ import warnings from itertools import groupby from operator import itemgetter +import l18n + from django import forms from django.conf import settings from django.contrib.auth import get_user_model @@ -21,7 +23,6 @@ from wagtail.core.models import ( PAGE_PERMISSION_TYPE_CHOICES, PAGE_PERMISSION_TYPES, GroupPagePermission, Page, UserPagePermissionsProxy) from wagtail.users.models import UserProfile -from wagtail.utils import l18n User = get_user_model() diff --git a/wagtail/utils/l18n/CHANGES.rst b/wagtail/utils/l18n/CHANGES.rst deleted file mode 100644 index a7c3fd58d..000000000 --- a/wagtail/utils/l18n/CHANGES.rst +++ /dev/null @@ -1,76 +0,0 @@ -l18n - changes -============== - - -v2016.6.4 (07-09-2016) ----------------------- - -- Chinese (zh) translation overrides by Charlotte Blanc -- copy/deepcopy support for l18n lazy strings and dictionaries -- fix charset bug on python 2 - - -v2016.6.3 (30-08-2016) ----------------------- - -- items are now sorted in maps iterators -- subsets support - - -v2016.6.2 (23-08-2016) ----------------------- - -- fix requirement 'six' - - -v2016.6.1 (19-08-2016) ----------------------- - -- pytz 2016.6.1 -- fix encoding issues - - -v2016.6.0 (18-07-2016) ----------------------- - -- pytz 2016.6 -- remove strict pin against pytz version (#2) - - -v2016.4.0 (05-05-2016) ----------------------- - -- pytz 2016.4 -- Czech translation overrides by Jan Čermák - - -v2015.7.0 (26-11-2015) ----------------------- - -- pytz 2015.7 -- drops support for python 2.6 - - -v2015.6.0 (15-10-2015) ----------------------- - -- pytz 2015.6 -- German translations by Philipp Steinhardt -- Fixes locale files that were not included in some distribution targets (#1) -- Translates all pytz.all_timezones rather than only pytz.common_timezones - - -v2015.2.0 (22-04-2015) ----------------------- - -- updates pytz version to 2015.2 (no changes in translations) - - -v2014.10.1 (17-03-2015) ------------------------ - -- Birth -- Exposes ``tz_cities``, ``tz_fullnames`` and ``territories`` - dictionary-like objects -- Compatible with python 2.6+ and 3.3+ -- English and French translations diff --git a/wagtail/utils/l18n/CONTRIBUTORS.rst b/wagtail/utils/l18n/CONTRIBUTORS.rst deleted file mode 100644 index d70cb7ca5..000000000 --- a/wagtail/utils/l18n/CONTRIBUTORS.rst +++ /dev/null @@ -1,18 +0,0 @@ -l18n contributors list -====================== - - -Code ----- - -Thomas Khyn, thomas@ksytek.com - - -Languages ---------- - -en: Thomas Khyn, thomas[at]ksytek.com -fr: Thomas Khyn, thomas[at]ksytek.com -de: Philipp Steinhardt, steinhardt[at]myvision.de -cs: Jan Čermák, sairon[at]sairon.cz -zh: Charlotte Blanc, charblanc17[at]gmail.com diff --git a/wagtail/utils/l18n/LICENSE.txt b/wagtail/utils/l18n/LICENSE.txt deleted file mode 100644 index 2cfd08704..000000000 --- a/wagtail/utils/l18n/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2016 Thomas Khyn and contributors (see CONTRIBUTORS.rst) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/wagtail/utils/l18n/README.rst b/wagtail/utils/l18n/README.rst deleted file mode 100644 index f79a4920d..000000000 --- a/wagtail/utils/l18n/README.rst +++ /dev/null @@ -1,210 +0,0 @@ -l18n -==== - -|copyright| 2014-2016 Thomas Khyn - -Locale internationalization package. Translations for places, timezones ... - -Tested with the latest minor versions of Python 2 and 3. - -Supported languages: English, French, German, Czech, Chinese -(`want to add yours?`_) - - -What is l18n? -------------- - -As you may have noticed, ``l18n`` is a contraction of ``i18n`` and ``l10n``, -namely 'internationalisation' and 'localization'. It basically provides -lazy translations for names used for localization purposes (e.g. places and -timezones). - -I started writing ``l18n`` when I was looking for translations for the pytz_ -library. Indeed, on a multi-lingual site where users can select the timezone -they are in, it's much better if they can select in their language, as in some -cases, the differences with the english name can be significant, hence the -place to look for it when it's sorted in alphabetical order. - -And as I am lazy, I thought of a way to - almost - automatically fetch the -translations from the CLDR_ (Unicode's Common Locale Data Repository) database. - -Integrating function to link timezone to country codes, there was no reason not -to try and provide translations also for the latter. In the near future, I - -or contributors - may also add currencies or measurement units fetched from -the CLDR database ... - - -How does it work? ------------------ - -To use ``l18n``, you first need to install it. It works well with ``pip``:: - - pip install l18n - -Then, in your code:: - - >>> import l18n - -``l18n`` exposes several read-only dictionary-like objects: - -l18n.tz_cities - - is a mapping between all the timezones listed in ``pytz.all_timezones`` - and human-friendly **lazy** versions of the translated name of the city - in the current language (see `Selecting the language`_ below). For example, - if the language is English:: - - >>> l18n.tz_cities['Pacific/Easter'] - L18NLazyString - >>> str(l18n.tz_cities['Pacific/Easter']) - 'Easter Island' - - In French, it would give:: - - >>> str(l18n.tz_cities['Pacific/Easter']) - 'Île de Pâques' - -l18n.tz_fullnames - - is a mapping between all the timezones listed in ``pytz.all_timezones`` - and **lazy** versions of the timezones' full names in the current language. - For example:: - - >>> str(l18n.tz_fullnames['Pacific/Easter']) - 'Pacific/Easter Island' # or 'Pacifique/Île de Pâques' in French - - It is interesting to note that for 3-components timezone names where the - local state or territory appears in the city name, ``l18n`` cleverly strips - this information so that it is not repeated:: - - >>> str(l18n.tz_fullnames['America/North_Dakota/New_Salem']) - 'America/North Dakota/New Salem' - - indeed:: - - >>> str(l18n.tz_cities['America/North_Dakota/New_salem']) - 'New Salem, North Dakota' - -l18n.territories - - is a mapping between the territory codes as defined in the CLDR_ and their - localized names, lazily defined. For example:: - - >>> str(l18n.territories['CZ']) - 'Czech Republic' # or 'République Tchèque' in French - - -.. note:: - - The values are translated each time they are evaluated, there is no caching. - This means that the same L18NLazyString / L18NLazyStringsList instance can - be used and produce 2 different outputs if you change the language between - the evaluations. - - -.. note:: - - The values in the above mentionned dictionaries can be overriden by your - own translations. The dictionaries are not read-only and values can be - added or removed at your convenience. - - -Lazy mappings special features (v.2016.6.3 onwards) ---------------------------------------------------- - -The fore-mentioned ``tz_cities``, ``tz_fullnames`` and ``territories`` are not -simple dictionaries and provide additional features. - -Sorting -....... - -When iterating over an ``L18NMap``, the items, keys or values are *yielded* in -alphabetical order **in the currently selected language**. For performance, the -results are cached by language, so the sort is only performed once per language. -Note that the values are still lazy objects that are evaluated only when -rendered into a string. - -Subsets -....... - -It is possible to generate a new ``L18NMap`` from an existing one by using the -``subset`` method and passing an iterable of ``keys`` that need to be kept in -the new mapping. Any cached sort is also used to generate the new cache, so -that there is nothing to re-calculate in the new subset. - -For example, one can generate a map of translations for -``pytz.common_timezones``:: - - >>> common_cities = l18n.tz_cities.subset(pytz.common_timezones.keys()) - - -Selecting the language ----------------------- - -By default, when importing ``l18n``, the current default locale is used (via -``locale.getdefaultlocale()``). If it is not the one you want or if you need to -change it, it is rather easy:: - - >>> l18n.set_language('en') - >>> str(l18n.tz_cities['Pacific/Easter']) - 'Easter Island' - >>> l18n.set_language('fr') - >>> str(l18n.tz_cities['Pacific/Easter']) - 'Île de Pâques' - -And in case you want to disable translation and use raw default strings:: - - >>> l18n.set_language(None) - - -Utilities ---------- - -``l18n`` also exposes a few functions that may be helpful in some cases: - -``l18n.utils.get_country_tzs(country_code)`` - - returns a list of locations for the given country code, sorted in - alphabetical order in the currently selected language - -``l18n.utils.get_country_code_from_tz(timezone)`` - - returns the country code from a given (untranslated) timezone - - -Versionning ------------ - -``l18n``'s main version number matches ``pytz``'s version number. ``l18n`` -2014.10.X will be fully compatible with ``pytz`` 2014.10 whatever the value of -X. Indeed, the primary aim is to keep ``l18n``'s translation files consistent -with ``pytz``'s timezone names. - -Before ``l18n`` 2016.6, the ``pytz`` version was pinned against the ``l18n`` -version. Now, ``l18n`` YEAR.MONTH can now be used with any subsequent ``pytz`` -version. However, note that there may be missing translations if the 2 versions -are too different from each other. In that case, open an issue_ to request a -new version of ``l18n`` to be published. - - -.. _`want to add yours?`: - -Want to add a language? ------------------------ - -Great idea !! Have a look at CONTRIBUTE.rst_. - - -Roadmap -------- - -- Add supported languages -- Add currencies and other stuff - - -.. |copyright| unicode:: 0xA9 - -.. _pytz: https://pypi.python.org/pypi/pytz/ -.. _CLDR: http://cldr.unicode.org/ -.. _CONTRIBUTE.rst: https://bitbucket.org/tkhyn/l18n/src/tip/CONTRIBUTE.rst -.. _issue: https://bitbucket.org/tkhyn/l18n/issues/new diff --git a/wagtail/utils/l18n/__init__.py b/wagtail/utils/l18n/__init__.py deleted file mode 100644 index a9a76e2a9..000000000 --- a/wagtail/utils/l18n/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .version import __version__, __version_info__ - -from .maps import tz_cities, tz_fullnames, territories -from .translation import set_language diff --git a/wagtail/utils/l18n/__maps.py b/wagtail/utils/l18n/__maps.py deleted file mode 100644 index d0c8f7e6b..000000000 --- a/wagtail/utils/l18n/__maps.py +++ /dev/null @@ -1,920 +0,0 @@ -# -*- coding: utf-8 -*- - -# AUTOMATICALLY GENERATED FILE, DO NOT EDIT - -tz_locations = { - 'Brazil': u'Brazil', - 'Canada': u'Canada', - 'Asia': u'Asia', - 'America/Indiana/Tell_City': u'Tell City', - 'America/North_Dakota/New_Salem': u'New Salem', - 'US': u'United States', - 'Indiana': u'Indiana', - 'Argentina': u'Argentina', - 'Europe': u'Europe', - 'Australia': u'Australia', - 'America/Indiana/Vevay': u'Vevay', - 'Arctic': u'Arctic', - 'America/Indiana/Marengo': u'Marengo', - 'Atlantic': u'Atlantic', - 'Chile': u'Chile', - 'America/Indiana/Vincennes': u'Vincennes', - 'America': u'America', - 'America/North_Dakota/Center': u'Center', - 'Kentucky': u'Kentucky', - 'Etc': u'Etc', - 'North_Dakota': u'North Dakota', - 'America/Indiana/Knox': u'Knox', - 'America/Kentucky/Monticello': u'Monticello', - 'America/North_Dakota/Beulah': u'Beulah', - 'America/Indiana/Petersburg': u'Petersburg', - 'Mexico': u'Mexico', - 'Africa': u'Africa', - 'Pacific': u'Pacific', - 'Antarctica': u'Antarctica', - 'Indian': u'Indian', - 'America/Indiana/Winamac': u'Winamac', -} - -tz_cities = { - 'Atlantic/Canary': u'Canary', - 'Australia/Melbourne': u'Melbourne', - 'Etc/GMT+9': u'GMT+9', - 'Etc/GMT+8': u'GMT+8', - 'Europe/Lisbon': u'Lisbon', - 'Etc/GMT+3': u'GMT+3', - 'Etc/GMT+2': u'GMT+2', - 'Etc/GMT+1': u'GMT+1', - 'Etc/GMT+0': u'GMT+0', - 'America/Nipigon': u'Nipigon', - 'Etc/GMT+6': u'GMT+6', - 'Etc/GMT+5': u'GMT+5', - 'America/Miquelon': u'Miquelon', - 'Pacific/Wallis': u'Wallis', - 'America/Fort_Nelson': u'Fort Nelson', - 'Antarctica/Davis': u'Davis', - 'America/Coral_Harbour': u'Atikokan', - 'Asia/Dhaka': u'Dhaka', - 'America/St_Lucia': u'St. Lucia', - 'Canada/Newfoundland': u'Newfoundland', - 'Asia/Kashgar': u'Kashgar', - 'America/Phoenix': u'Phoenix', - 'Europe/Kaliningrad': u'Kaliningrad', - 'Etc/GMT+7': u'GMT+7', - 'America/Mazatlan': u'Mazatlan', - 'Arctic/Longyearbyen': u'Longyearbyen', - 'Europe/Guernsey': u'Guernsey', - 'GB': u'GB', - 'Europe/Paris': u'Paris', - 'Europe/Stockholm': u'Stockholm', - 'Pacific/Fiji': u'Fiji', - 'Pacific/Apia': u'Apia', - 'Etc/GMT+4': u'GMT+4', - 'Pacific/Pago_Pago': u'Pago Pago', - 'Asia/Rangoon': u'Rangoon', - 'America/Mexico_City': u'Mexico City', - 'America/Ensenada': u'Ensenada', - 'America/Puerto_Rico': u'Puerto Rico', - 'Indian/Mauritius': u'Mauritius', - 'Europe/Berlin': u'Berlin', - 'Europe/Zurich': u'Zurich', - 'Africa/Casablanca': u'Casablanca', - 'Antarctica/Macquarie': u'Macquarie Island', - 'Asia/Krasnoyarsk': u'Krasnoyarsk', - 'Australia/Canberra': u'Canberra', - 'Atlantic/Bermuda': u'Bermuda', - 'Asia/Ujung_Pandang': u'Ujung Pandang', - 'America/Araguaina': u'Araguaina', - 'Asia/Tehran': u'Tehran', - 'Asia/Saigon': u'Ho Chi Minh', - 'Asia/Baku': u'Baku', - 'America/St_Barthelemy': u'St. Barthelemy', - 'America/Porto_Acre': u'Porto Acre', - 'America/Santarem': u'Santarem', - 'America/Argentina/Cordoba': u'Cordoba', - 'Libya': u'Libya', - 'America/Danmarkshavn': u'Danmarkshavn', - 'America/Scoresbysund': u'Ittoqqortoormiit', - 'America/Eirunepe': u'Eirunepe', - 'America/Caracas': u'Caracas', - 'Asia/Baghdad': u'Baghdad', - 'Africa/Monrovia': u'Monrovia', - 'Atlantic/Stanley': u'Stanley', - 'America/St_Vincent': u'St. Vincent', - 'Portugal': u'Portugal', - 'Europe/Tiraspol': u'Tiraspol', - 'America/Vancouver': u'Vancouver', - 'Asia/Ho_Chi_Minh': u'Ho Chi Minh', - 'Europe/Busingen': u'Busingen', - 'Etc/GMT0': u'GMT0', - 'Asia/Thimphu': u'Thimphu', - 'Africa/Ouagadougou': u'Ouagadougou', - 'America/Belize': u'Belize', - 'America/Port_of_Spain': u'Port of Spain', - 'Greenwich': u'Greenwich', - 'Asia/Tashkent': u'Tashkent', - 'Asia/Tokyo': u'Tokyo', - 'Pacific/Kiritimati': u'Kiritimati', - 'Australia/Sydney': u'Sydney', - 'Europe/Riga': u'Riga', - 'Asia/Dili': u'Dili', - 'Africa/Mbabane': u'Mbabane', - 'Asia/Oral': u'Oral', - 'Asia/Aden': u'Aden', - 'Europe/Isle_of_Man': u'Isle of Man', - 'Europe/Istanbul': u'Istanbul', - 'Asia/Magadan': u'Magadan', - 'Australia/Lindeman': u'Lindeman', - 'US/Michigan': u'Michigan', - 'Pacific/Galapagos': u'Galapagos', - 'America/Bogota': u'Bogota', - 'Africa/Asmara': u'Asmara', - 'America/Chicago': u'Chicago', - 'Pacific/Kwajalein': u'Kwajalein', - 'Australia/Broken_Hill': u'Broken Hill', - 'America/Cuiaba': u'Cuiaba', - 'Indian/Christmas': u'Christmas', - 'Asia/Jayapura': u'Jayapura', - 'Europe/Brussels': u'Brussels', - 'Asia/Chongqing': u'Chongqing', - 'Australia/NSW': u'NSW', - 'Canada/Pacific': u'Pacific', - 'America/Noronha': u'Noronha', - 'Europe/Podgorica': u'Podgorica', - 'Africa/Algiers': u'Algiers', - 'Africa/Harare': u'Harare', - 'Africa/Ndjamena': u'Ndjamena', - 'America/Costa_Rica': u'Costa Rica', - 'Europe/Ljubljana': u'Ljubljana', - 'Indian/Mayotte': u'Mayotte', - 'Asia/Phnom_Penh': u'Phnom Penh', - 'America/Managua': u'Managua', - 'America/Pangnirtung': u'Pangnirtung', - 'Etc/GMT+12': u'GMT+12', - 'America/Tijuana': u'Tijuana', - 'Pacific/Fakaofo': u'Fakaofo', - 'America/Adak': u'Adak', - 'America/Antigua': u'Antigua', - 'America/Indiana/Indianapolis': u'Indianapolis', - 'America/Argentina/La_Rioja': u'La Rioja', - 'Pacific/Tahiti': u'Tahiti', - 'Asia/Brunei': u'Brunei', - 'Europe/Zagreb': u'Zagreb', - 'America/Asuncion': u'Asuncion', - 'Europe/Vienna': u'Vienna', - 'Mexico/General': u'General', - 'Australia/Hobart': u'Hobart', - 'America/Juneau': u'Juneau', - 'America/Inuvik': u'Inuvik', - 'America/Ojinaga': u'Ojinaga', - 'Europe/Astrakhan': u'Astrakhan', - 'America/Montreal': u'Montreal', - 'Asia/Seoul': u'Seoul', - 'Brazil/East': u'East', - 'Indian/Comoro': u'Comoro', - 'Antarctica/Rothera': u'Rothera', - 'Hongkong': u'Hongkong', - 'Europe/Tallinn': u'Tallinn', - 'Indian/Mahe': u'Mahe', - 'Asia/Calcutta': u'Kolkata', - 'Australia/South': u'South', - 'America/Argentina/Jujuy': u'Jujuy', - 'Asia/Bishkek': u'Bishkek', - 'America/Creston': u'Creston', - 'America/Martinique': u'Martinique', - 'Asia/Singapore': u'Singapore', - 'PRC': u'PRC', - 'Africa/Nairobi': u'Nairobi', - 'Asia/Thimbu': u'Thimbu', - 'America/Maceio': u'Maceio', - 'Africa/Cairo': u'Cairo', - 'Europe/Moscow': u'Moscow', - 'Antarctica/Palmer': u'Palmer', - 'Asia/Ulaanbaatar': u'Ulaanbaatar', - 'America/Rainy_River': u'Rainy River', - 'Africa/Kampala': u'Kampala', - 'Asia/Colombo': u'Colombo', - 'Australia/Adelaide': u'Adelaide', - 'America/Cambridge_Bay': u'Cambridge Bay', - 'Africa/Luanda': u'Luanda', - 'Pacific/Chatham': u'Chatham', - 'America/Indiana/Winamac': u'Winamac, Indiana', - 'Asia/Dacca': u'Dacca', - 'America/Cordoba': u'Cordoba', - 'Asia/Tbilisi': u'Tbilisi', - 'Europe/Gibraltar': u'Gibraltar', - 'Asia/Karachi': u'Karachi', - 'Asia/Harbin': u'Harbin', - 'Australia/Lord_Howe': u'Lord Howe', - 'Etc/GMT-9': u'GMT-9', - 'Etc/GMT-8': u'GMT-8', - 'America/Bahia_Banderas': u'Bahia Banderas', - 'Etc/GMT-1': u'GMT-1', - 'Etc/GMT-0': u'GMT-0', - 'Etc/GMT-3': u'GMT-3', - 'Etc/GMT-2': u'GMT-2', - 'Etc/GMT-5': u'GMT-5', - 'Etc/GMT-4': u'GMT-4', - 'Etc/GMT-7': u'GMT-7', - 'Europe/Nicosia': u'Nicosia', - 'America/Boa_Vista': u'Boa Vista', - 'Eire': u'Eire', - 'America/Lima': u'Lima', - 'Indian/Reunion': u'Reunion', - 'Canada/Mountain': u'Mountain', - 'Asia/Srednekolymsk': u'Srednekolymsk', - 'CET': u'CET', - 'Europe/Belfast': u'Belfast', - 'America/Blanc-Sablon': u'Blanc-Sablon', - 'Australia/West': u'West', - 'Antarctica/Syowa': u'Syowa', - 'America/Jamaica': u'Jamaica', - 'Europe/Kiev': u'Kiev', - 'Europe/Budapest': u'Budapest', - 'Canada/Eastern': u'Eastern', - 'Pacific/Midway': u'Midway', - 'America/Goose_Bay': u'Goose Bay', - 'Australia/Victoria': u'Victoria', - 'Asia/Amman': u'Amman', - 'Asia/Sakhalin': u'Sakhalin', - 'Africa/Windhoek': u'Windhoek', - 'US/Pacific': u'Pacific', - 'America/Sitka': u'Sitka', - 'Asia/Katmandu': u'Kathmandu', - 'America/Guyana': u'Guyana', - 'Pacific/Pohnpei': u'Pohnpei', - 'America/Sao_Paulo': u'Sao Paulo', - 'Turkey': u'Turkey', - 'Australia/Yancowinna': u'Yancowinna', - 'America/Lower_Princes': u'Lower Prince’s Quarter', - 'Australia/Perth': u'Perth', - 'Africa/Djibouti': u'Djibouti', - 'Asia/Jakarta': u'Jakarta', - 'Asia/Pyongyang': u'Pyongyang', - 'EST5EDT': u'EST5EDT', - 'Africa/Johannesburg': u'Johannesburg', - 'Canada/East-Saskatchewan': u'East-Saskatchewan', - 'Asia/Tel_Aviv': u'Tel Aviv', - 'Antarctica/Troll': u'Troll', - 'Asia/Istanbul': u'Istanbul', - 'Asia/Irkutsk': u'Irkutsk', - 'Iran': u'Iran', - 'Australia/ACT': u'ACT', - 'Africa/Niamey': u'Niamey', - 'Australia/North': u'North', - 'America/Belem': u'Belem', - 'America/Indiana/Marengo': u'Marengo, Indiana', - 'Africa/Nouakchott': u'Nouakchott', - 'Asia/Ashkhabad': u'Ashkhabad', - 'Europe/Vilnius': u'Vilnius', - 'America/Cayenne': u'Cayenne', - 'Africa/Mogadishu': u'Mogadishu', - 'America/Kentucky/Monticello': u'Monticello, Kentucky', - 'America/Rio_Branco': u'Rio Branco', - 'America/Cancun': u'Cancun', - 'America/Havana': u'Havana', - 'Chile/EasterIsland': u'EasterIsland', - 'Pacific/Guam': u'Guam', - 'Pacific/Kosrae': u'Kosrae', - 'Universal': u'Universal', - 'US/Arizona': u'Arizona', - 'Atlantic/Azores': u'Azores', - 'Australia/Eucla': u'Eucla', - 'Asia/Shanghai': u'Shanghai', - 'US/Alaska': u'Alaska', - 'America/Godthab': u'Nuuk', - 'Asia/Beirut': u'Beirut', - 'Africa/Maputo': u'Maputo', - 'HST': u'HST', - 'Asia/Bahrain': u'Bahrain', - 'Asia/Ashgabat': u'Ashgabat', - 'Asia/Riyadh': u'Riyadh', - 'Atlantic/Faeroe': u'Faroe', - 'America/Montevideo': u'Montevideo', - 'America/Anguilla': u'Anguilla', - 'Asia/Damascus': u'Damascus', - 'America/North_Dakota/Center': u'Center, North Dakota', - 'UCT': u'UCT', - 'America/Indiana/Vevay': u'Vevay, Indiana', - 'Atlantic/St_Helena': u'St. Helena', - 'Iceland': u'Iceland', - 'Europe/Vatican': u'Vatican', - 'America/Indiana/Vincennes': u'Vincennes, Indiana', - 'Asia/Almaty': u'Almaty', - 'Australia/Queensland': u'Queensland', - 'America/Santo_Domingo': u'Santo Domingo', - 'Africa/Brazzaville': u'Brazzaville', - 'America/Nome': u'Nome', - 'Asia/Taipei': u'Taipei', - 'America/Yakutat': u'Yakutat', - 'W-SU': u'W-SU', - 'America/Argentina/Mendoza': u'Mendoza', - 'Zulu': u'Zulu', - 'Egypt': u'Egypt', - 'America/Tortola': u'Tortola', - 'Etc/UTC': u'UTC', - 'Brazil/Acre': u'Acre', - 'Africa/Asmera': u'Asmara', - 'Antarctica/Mawson': u'Mawson', - 'America/Buenos_Aires': u'Buenos Aires', - 'Asia/Kolkata': u'Kolkata', - 'Africa/Maseru': u'Maseru', - 'America/Atikokan': u'Atikokan', - 'America/Louisville': u'Louisville', - 'Pacific/Yap': u'Yap', - 'America/Santa_Isabel': u'Santa Isabel', - 'Asia/Kuching': u'Kuching', - 'Africa/Libreville': u'Libreville', - 'Africa/Freetown': u'Freetown', - 'Africa/Bissau': u'Bissau', - 'Europe/Samara': u'Samara', - 'Europe/Amsterdam': u'Amsterdam', - 'Europe/Tirane': u'Tirane', - 'Pacific/Saipan': u'Saipan', - 'Africa/Abidjan': u'Abidjan', - 'Europe/Zaporozhye': u'Zaporozhye', - 'America/Atka': u'Atka', - 'America/El_Salvador': u'El Salvador', - 'Europe/Madrid': u'Madrid', - 'Africa/Juba': u'Juba', - 'America/Santiago': u'Santiago', - 'America/Argentina/Buenos_Aires': u'Buenos Aires', - 'America/Argentina/San_Luis': u'San Luis', - 'Europe/Skopje': u'Skopje', - 'WET': u'WET', - 'America/Aruba': u'Aruba', - 'Navajo': u'Navajo', - 'America/Indianapolis': u'Indianapolis', - 'America/Regina': u'Regina', - 'Pacific/Truk': u'Chuuk', - 'Pacific/Chuuk': u'Chuuk', - 'Asia/Khandyga': u'Khandyga', - 'Pacific/Funafuti': u'Funafuti', - 'Canada/Atlantic': u'Atlantic', - 'America/Merida': u'Merida', - 'America/Guatemala': u'Guatemala', - 'Africa/Sao_Tome': u'Sao Tome', - 'Asia/Tomsk': u'Tomsk', - 'Asia/Makassar': u'Makassar', - 'Africa/Bujumbura': u'Bujumbura', - 'Europe/Chisinau': u'Chisinau', - 'Europe/Warsaw': u'Warsaw', - 'Asia/Yekaterinburg': u'Yekaterinburg', - 'US/Hawaii': u'Hawaii', - 'MET': u'MET', - 'Antarctica/Casey': u'Casey', - 'Pacific/Enderbury': u'Enderbury', - 'America/Thule': u'Thule', - 'America/St_Johns': u'St. John’s', - 'America/Moncton': u'Moncton', - 'Europe/Helsinki': u'Helsinki', - 'Atlantic/Cape_Verde': u'Cape Verde', - 'America/Tegucigalpa': u'Tegucigalpa', - 'Indian/Cocos': u'Cocos', - 'America/Boise': u'Boise', - 'America/Guadeloupe': u'Guadeloupe', - 'America/Nassau': u'Nassau', - 'Europe/Prague': u'Prague', - 'America/Halifax': u'Halifax', - 'Asia/Hovd': u'Hovd', - 'Canada/Saskatchewan': u'Saskatchewan', - 'America/Manaus': u'Manaus', - 'America/Rankin_Inlet': u'Rankin Inlet', - 'Etc/UCT': u'UCT', - 'GB-Eire': u'GB-Eire', - 'Etc/Greenwich': u'Greenwich', - 'Atlantic/Jan_Mayen': u'Jan Mayen', - 'America/North_Dakota/Beulah': u'Beulah, North Dakota', - 'America/Chihuahua': u'Chihuahua', - 'America/Iqaluit': u'Iqaluit', - 'America/Argentina/Rio_Gallegos': u'Rio Gallegos', - 'Pacific/Gambier': u'Gambier', - 'Europe/Volgograd': u'Volgograd', - 'Africa/Bamako': u'Bamako', - 'Asia/Novokuznetsk': u'Novokuznetsk', - 'Europe/Uzhgorod': u'Uzhgorod', - 'Africa/Banjul': u'Banjul', - 'Asia/Aqtau': u'Aqtau', - 'Pacific/Palau': u'Palau', - 'Africa/Malabo': u'Malabo', - 'Europe/Minsk': u'Minsk', - 'PST8PDT': u'PST8PDT', - 'America/Argentina/ComodRivadavia': u'ComodRivadavia', - 'Atlantic/Madeira': u'Madeira', - 'Pacific/Noumea': u'Noumea', - 'GMT0': u'GMT0', - 'Africa/Kinshasa': u'Kinshasa', - 'Europe/Malta': u'Malta', - 'US/Samoa': u'Samoa', - 'America/Argentina/Ushuaia': u'Ushuaia', - 'Asia/Chungking': u'Chungking', - 'Asia/Bangkok': u'Bangkok', - 'Pacific/Niue': u'Niue', - 'America/Catamarca': u'Catamarca', - 'America/Recife': u'Recife', - 'MST': u'MST', - 'Asia/Yerevan': u'Yerevan', - 'America/La_Paz': u'La Paz', - 'Poland': u'Poland', - 'Asia/Urumqi': u'Urumqi', - 'Africa/Lusaka': u'Lusaka', - 'US/Indiana-Starke': u'Indiana-Starke', - 'Pacific/Guadalcanal': u'Guadalcanal', - 'America/Yellowknife': u'Yellowknife', - 'Australia/LHI': u'LHI', - 'Asia/Vientiane': u'Vientiane', - 'Asia/Kuwait': u'Kuwait', - 'Africa/Conakry': u'Conakry', - 'Asia/Dubai': u'Dubai', - 'America/Argentina/Tucuman': u'Tucuman', - 'Asia/Chita': u'Chita', - 'Europe/Oslo': u'Oslo', - 'Australia/Currie': u'Currie', - 'America/St_Kitts': u'St. Kitts', - 'America/Panama': u'Panama', - 'America/Hermosillo': u'Hermosillo', - 'Asia/Hebron': u'Hebron', - 'America/Guayaquil': u'Guayaquil', - 'Asia/Kuala_Lumpur': u'Kuala Lumpur', - 'Europe/London': u'London', - 'America/Menominee': u'Menominee', - 'Asia/Kamchatka': u'Kamchatka', - 'Europe/Ulyanovsk': u'Ulyanovsk', - 'Asia/Vladivostok': u'Vladivostok', - 'America/Matamoros': u'Matamoros', - 'Brazil/DeNoronha': u'DeNoronha', - 'Asia/Qatar': u'Qatar', - 'Israel': u'Israel', - 'NZ-CHAT': u'NZ-CHAT', - 'Asia/Dushanbe': u'Dushanbe', - 'Asia/Yakutsk': u'Yakutsk', - 'Asia/Omsk': u'Omsk', - 'Africa/Bangui': u'Bangui', - 'UTC': u'UTC', - 'America/Paramaribo': u'Paramaribo', - 'Etc/GMT-11': u'GMT-11', - 'Etc/GMT-10': u'GMT-10', - 'Etc/GMT-13': u'GMT-13', - 'Etc/GMT-12': u'GMT-12', - 'Etc/GMT-14': u'GMT-14', - 'Pacific/Marquesas': u'Marquesas', - 'US/Central': u'Central', - 'Europe/Bratislava': u'Bratislava', - 'Asia/Anadyr': u'Anadyr', - 'America/New_York': u'New York', - 'Pacific/Norfolk': u'Norfolk', - 'CST6CDT': u'CST6CDT', - 'Pacific/Rarotonga': u'Rarotonga', - 'America/Dominica': u'Dominica', - 'Africa/Porto-Novo': u'Porto-Novo', - 'Asia/Samarkand': u'Samarkand', - 'America/Kentucky/Louisville': u'Louisville', - 'America/Toronto': u'Toronto', - 'America/Bahia': u'Bahia', - 'Indian/Maldives': u'Maldives', - 'Africa/Accra': u'Accra', - 'Antarctica/South_Pole': u'South Pole', - 'Asia/Muscat': u'Muscat', - 'America/Virgin': u'Virgin', - 'America/Edmonton': u'Edmonton', - 'Pacific/Wake': u'Wake', - 'America/Indiana/Tell_City': u'Tell City, Indiana', - 'Australia/Darwin': u'Darwin', - 'America/Whitehorse': u'Whitehorse', - 'America/Swift_Current': u'Swift Current', - 'Europe/Copenhagen': u'Copenhagen', - 'America/Fort_Wayne': u'Fort Wayne', - 'America/Montserrat': u'Montserrat', - 'America/Mendoza': u'Mendoza', - 'US/Mountain': u'Mountain', - 'Europe/Simferopol': u'Simferopol', - 'Africa/Blantyre': u'Blantyre', - 'America/Detroit': u'Detroit', - 'America/Shiprock': u'Shiprock', - 'America/Grenada': u'Grenada', - 'Atlantic/Faroe': u'Faroe', - 'America/Indiana/Petersburg': u'Petersburg, Indiana', - 'Asia/Kathmandu': u'Kathmandu', - 'Asia/Pontianak': u'Pontianak', - 'Jamaica': u'Jamaica', - 'Europe/Athens': u'Athens', - 'America/Port-au-Prince': u'Port-au-Prince', - 'America/Cayman': u'Cayman', - 'Etc/Universal': u'Universal', - 'Africa/Dar_es_Salaam': u'Dar es Salaam', - 'America/Curacao': u'Curacao', - 'Indian/Kerguelen': u'Kerguelen', - 'Africa/Khartoum': u'Khartoum', - 'Asia/Manila': u'Manila', - 'Africa/Lome': u'Lome', - 'America/Jujuy': u'Jujuy', - 'Africa/Douala': u'Douala', - 'EET': u'EET', - 'America/Argentina/San_Juan': u'San Juan', - 'America/North_Dakota/New_Salem': u'New Salem, North Dakota', - 'America/Kralendijk': u'Kralendijk', - 'Pacific/Port_Moresby': u'Port Moresby', - 'Europe/Jersey': u'Jersey', - 'Asia/Macao': u'Macao', - 'Europe/Andorra': u'Andorra', - 'ROK': u'ROK', - 'Cuba': u'Cuba', - 'Europe/Luxembourg': u'Luxembourg', - 'Pacific/Honolulu': u'Honolulu', - 'ROC': u'ROC', - 'America/St_Thomas': u'St. Thomas', - 'Pacific/Majuro': u'Majuro', - 'Asia/Hong_Kong': u'Hong Kong', - 'Asia/Macau': u'Macau', - 'MST7MDT': u'MST7MDT', - 'Europe/Belgrade': u'Belgrade', - 'Asia/Choibalsan': u'Choibalsan', - 'US/Eastern': u'Eastern', - 'Europe/Mariehamn': u'Mariehamn', - 'Antarctica/McMurdo': u'McMurdo', - 'America/Thunder_Bay': u'Thunder Bay', - 'America/Los_Angeles': u'Los Angeles', - 'Asia/Kabul': u'Kabul', - 'Indian/Antananarivo': u'Antananarivo', - 'Europe/Sarajevo': u'Sarajevo', - 'Atlantic/Reykjavik': u'Reykjavik', - 'Asia/Nicosia': u'Nicosia', - 'Etc/GMT+11': u'GMT+11', - 'Etc/GMT+10': u'GMT+10', - 'Pacific/Ponape': u'Pohnpei', - 'Japan': u'Japan', - 'Asia/Ulan_Bator': u'Ulan Bator', - 'Asia/Barnaul': u'Barnaul', - 'Kwajalein': u'Kwajalein', - 'Pacific/Tongatapu': u'Tongatapu', - 'America/Marigot': u'Marigot', - 'Pacific/Pitcairn': u'Pitcairn', - 'Pacific/Easter': u'Easter Island', - 'US/East-Indiana': u'East-Indiana', - 'Atlantic/South_Georgia': u'South Georgia', - 'Africa/El_Aaiun': u'El Aaiun', - 'US/Pacific-New': u'Pacific-New', - 'Chile/Continental': u'Continental', - 'Europe/Kirov': u'Kirov', - 'America/Campo_Grande': u'Campo Grande', - 'America/Dawson_Creek': u'Dawson Creek', - 'America/Rosario': u'Rosario', - 'Antarctica/Vostok': u'Vostok', - 'US/Aleutian': u'Aleutian', - 'Europe/Bucharest': u'Bucharest', - 'America/Porto_Velho': u'Porto Velho', - 'Europe/Monaco': u'Monaco', - 'NZ': u'NZ', - 'Africa/Ceuta': u'Ceuta', - 'Europe/Rome': u'Rome', - 'America/Winnipeg': u'Winnipeg', - 'America/Knox_IN': u'Knox IN', - 'Asia/Aqtobe': u'Aqtobe', - 'Africa/Dakar': u'Dakar', - 'America/Fortaleza': u'Fortaleza', - 'Pacific/Samoa': u'Samoa', - 'Pacific/Tarawa': u'Tarawa', - 'America/Dawson': u'Dawson', - 'Africa/Addis_Ababa': u'Addis Ababa', - 'Pacific/Efate': u'Efate', - 'Pacific/Johnston': u'Johnston', - 'GMT': u'GMT', - 'Australia/Brisbane': u'Brisbane', - 'Canada/Yukon': u'Yukon', - 'Asia/Qyzylorda': u'Qyzylorda', - 'Europe/San_Marino': u'San Marino', - 'Asia/Jerusalem': u'Jerusalem', - 'America/Barbados': u'Barbados', - 'Pacific/Auckland': u'Auckland', - 'America/Metlakatla': u'Metlakatla', - 'Etc/Zulu': u'Zulu', - 'America/Denver': u'Denver', - 'Indian/Chagos': u'Chagos', - 'America/Glace_Bay': u'Glace Bay', - 'Pacific/Bougainville': u'Bougainville Island', - 'Africa/Gaborone': u'Gaborone', - 'Africa/Tunis': u'Tunis', - 'Australia/Tasmania': u'Tasmania', - 'Asia/Ust-Nera': u'Ust-Nera', - 'Europe/Vaduz': u'Vaduz', - 'Africa/Lubumbashi': u'Lubumbashi', - 'America/Resolute': u'Resolute', - 'Etc/GMT': u'GMT', - 'Asia/Gaza': u'Gaza', - 'Europe/Dublin': u'Dublin', - 'GMT+0': u'GMT+0', - 'Antarctica/DumontDUrville': u'Dumont d’Urville', - 'America/Argentina/Catamarca': u'Catamarca', - 'America/Indiana/Knox': u'Knox, Indiana', - 'Etc/GMT-6': u'GMT-6', - 'Africa/Timbuktu': u'Timbuktu', - 'Asia/Novosibirsk': u'Novosibirsk', - 'EST': u'EST', - 'Mexico/BajaNorte': u'BajaNorte', - 'Africa/Kigali': u'Kigali', - 'Brazil/West': u'West', - 'America/Grand_Turk': u'Grand Turk', - 'Mexico/BajaSur': u'BajaSur', - 'America/Argentina/Salta': u'Salta', - 'Canada/Central': u'Central', - 'Africa/Lagos': u'Lagos', - 'GMT-0': u'GMT-0', - 'Europe/Sofia': u'Sofia', - 'Singapore': u'Singapore', - 'Africa/Tripoli': u'Tripoli', - 'America/Anchorage': u'Anchorage', - 'America/Monterrey': u'Monterrey', - 'Pacific/Nauru': u'Nauru', -} - -territories = { - 'BD': u'Bangladesh', - 'BE': u'Belgium', - 'BF': u'Burkina Faso', - 'BG': u'Bulgaria', - 'VE': u'Venezuela', - 'BA': u'Bosnia & Herzegovina', - 'BB': u'Barbados', - 'WF': u'Wallis & Futuna', - 'BL': u'St. Barthélemy', - 'BM': u'Bermuda', - 'BN': u'Brunei', - 'BO': u'Bolivia', - 'BH': u'Bahrain', - 'BI': u'Burundi', - 'BJ': u'Benin', - 'BT': u'Bhutan', - '011': u'Western Africa', - 'BV': u'Bouvet Island', - 'BW': u'Botswana', - '014': u'Eastern Africa', - '015': u'Northern Africa', - 'BR': u'Brazil', - '017': u'Middle Africa', - '018': u'Southern Africa', - '019': u'Americas', - 'BY': u'Belarus', - 'BZ': u'Belize', - 'LV': u'Latvia', - 'RW': u'Rwanda', - 'RS': u'Serbia', - 'TL': u'Timor-Leste', - 'RE': u'Réunion', - 'TM': u'Turkmenistan', - 'OM': u'Oman', - 'TJ': u'Tajikistan', - 'RO': u'Romania', - 'TK': u'Tokelau', - 'GW': u'Guinea-Bissau', - 'GU': u'Guam', - 'GT': u'Guatemala', - 'GS': u'South Georgia & South Sandwich Islands', - 'GR': u'Greece', - 'GQ': u'Equatorial Guinea', - 'GP': u'Guadeloupe', - 'JP': u'Japan', - 'KI': u'Kiribati', - 'GY': u'Guyana', - 'GG': u'Guernsey', - 'GF': u'French Guiana', - 'GE': u'Georgia', - 'GD': u'Grenada', - '021': u'Northern America', - 'GB': u'United Kingdom', - 'GA': u'Gabon', - 'SV': u'El Salvador', - 'GN': u'Guinea', - 'GM': u'Gambia', - 'GL': u'Greenland', - '029': u'Caribbean', - 'GI': u'Gibraltar', - 'GH': u'Ghana', - 'JE': u'Jersey', - 'TN': u'Tunisia', - 'JM': u'Jamaica', - '013': u'Central America', - 'WS': u'Samoa', - 'TA': u'Tristan da Cunha', - '419': u'Latin America', - 'BQ': u'Caribbean Netherlands', - 'HR': u'Croatia', - 'BS': u'Bahamas', - 'HT': u'Haiti', - 'HU': u'Hungary', - 'HK': u'Hong Kong SAR China', - '039': u'Southern Europe', - 'HN': u'Honduras', - 'FI': u'Finland', - '142': u'Asia', - '030': u'Eastern Asia', - '034': u'Southern Asia', - '035': u'Southeast Asia', - 'PR': u'Puerto Rico', - 'PS': u'Palestinian Territories', - 'FK': u'Falkland Islands', - 'IO': u'British Indian Ocean Territory', - 'PW': u'Palau', - 'PT': u'Portugal', - 'SJ': u'Svalbard & Jan Mayen', - 'MD': u'Moldova', - 'IQ': u'Iraq', - 'PA': u'Panama', - 'PF': u'French Polynesia', - 'PG': u'Papua New Guinea', - 'PE': u'Peru', - 'PK': u'Pakistan', - 'PH': u'Philippines', - 'FO': u'Faroe Islands', - 'PN': u'Pitcairn Islands', - 'PL': u'Poland', - 'PM': u'St. Pierre & Miquelon', - 'ZM': u'Zambia', - 'EH': u'Western Sahara', - 'RU': u'Russia', - 'EE': u'Estonia', - 'EG': u'Egypt', - 'EA': u'Ceuta & Melilla', - 'ZA': u'South Africa', - 'EC': u'Ecuador', - 'IT': u'Italy', - 'VN': u'Vietnam', - 'ZZ': u'Unknown Region', - 'SB': u'Solomon Islands', - 'EU': u'European Union', - 'ET': u'Ethiopia', - 'SO': u'Somalia', - 'ZW': u'Zimbabwe', - 'SA': u'Saudi Arabia', - 'ES': u'Spain', - 'ER': u'Eritrea', - 'ME': u'Montenegro', - 'AQ': u'Antarctica', - 'MG': u'Madagascar', - 'MF': u'St. Martin', - 'MA': u'Morocco', - 'MC': u'Monaco', - 'UZ': u'Uzbekistan', - 'MM': u'Myanmar (Burma)', - 'ML': u'Mali', - 'MO': u'Macau SAR China', - 'MN': u'Mongolia', - 'HM': u'Heard & McDonald Islands', - 'AS': u'American Samoa', - 'MK': u'Macedonia', - 'MU': u'Mauritius', - 'MT': u'Malta', - 'MW': u'Malawi', - 'MV': u'Maldives', - 'MQ': u'Martinique', - 'MP': u'Northern Mariana Islands', - 'MS': u'Montserrat', - 'MR': u'Mauritania', - 'IM': u'Isle of Man', - 'UG': u'Uganda', - 'TZ': u'Tanzania', - 'MY': u'Malaysia', - 'MX': u'Mexico', - 'IL': u'Israel', - 'IC': u'Canary Islands', - 'FR': u'France', - 'AW': u'Aruba', - 'DO': u'Dominican Republic', - 'SH': u'St. Helena', - 'VC': u'St. Vincent & Grenadines', - '054': u'Melanesia', - 'DJ': u'Djibouti', - 'FJ': u'Fiji', - '057': u'Micronesian Region', - 'FM': u'Micronesia', - '053': u'Australasia', - 'NI': u'Nicaragua', - 'NL': u'Netherlands', - 'NO': u'Norway', - 'NA': u'Namibia', - 'VU': u'Vanuatu', - 'NC': u'New Caledonia', - 'NE': u'Niger', - 'NF': u'Norfolk Island', - 'NG': u'Nigeria', - 'NZ': u'New Zealand', - 'NP': u'Nepal', - 'NR': u'Nauru', - 'NU': u'Niue', - '061': u'Polynesia', - 'XK': u'Kosovo', - 'CI': u'Côte d’Ivoire', - 'CH': u'Switzerland', - 'CO': u'Colombia', - 'CN': u'China', - 'CM': u'Cameroon', - 'CL': u'Chile', - 'CC': u'Cocos (Keeling) Islands', - 'CA': u'Canada', - 'CG': u'Congo - Brazzaville', - 'CF': u'Central African Republic', - 'CD': u'Congo - Kinshasa', - 'CZ': u'Czech Republic', - 'CY': u'Cyprus', - 'CX': u'Christmas Island', - 'CR': u'Costa Rica', - 'PY': u'Paraguay', - 'CP': u'Clipperton Island', - 'CW': u'Curaçao', - 'CV': u'Cape Verde', - 'CU': u'Cuba', - 'SZ': u'Swaziland', - 'SY': u'Syria', - 'SX': u'Sint Maarten', - 'KG': u'Kyrgyzstan', - 'KE': u'Kenya', - 'SS': u'South Sudan', - 'SR': u'Suriname', - '143': u'Central Asia', - 'KH': u'Cambodia', - 'KN': u'St. Kitts & Nevis', - 'KM': u'Comoros', - 'ST': u'São Tomé & Príncipe', - 'SK': u'Slovakia', - 'KR': u'South Korea', - 'SI': u'Slovenia', - 'KP': u'North Korea', - 'KW': u'Kuwait', - 'SN': u'Senegal', - 'SM': u'San Marino', - 'SL': u'Sierra Leone', - 'SC': u'Seychelles', - 'KZ': u'Kazakhstan', - 'KY': u'Cayman Islands', - 'SG': u'Singapore', - 'SE': u'Sweden', - 'SD': u'Sudan', - '151': u'Eastern Europe', - '150': u'Europe', - 'DM': u'Dominica', - '155': u'Western Europe', - '154': u'Northern Europe', - 'VG': u'British Virgin Islands', - 'DG': u'Diego Garcia', - 'DE': u'Germany', - 'YE': u'Yemen', - 'MH': u'Marshall Islands', - 'DZ': u'Algeria', - 'US': u'United States', - 'UY': u'Uruguay', - 'YT': u'Mayotte', - 'UM': u'U.S. Outlying Islands', - 'LB': u'Lebanon', - 'LC': u'St. Lucia', - 'LA': u'Laos', - 'TV': u'Tuvalu', - 'TW': u'Taiwan', - 'TT': u'Trinidad & Tobago', - 'TR': u'Turkey', - 'LK': u'Sri Lanka', - 'LI': u'Liechtenstein', - 'CK': u'Cook Islands', - 'TO': u'Tonga', - 'LT': u'Lithuania', - 'LU': u'Luxembourg', - 'LR': u'Liberia', - 'LS': u'Lesotho', - 'TH': u'Thailand', - 'TF': u'French Southern Territories', - 'TG': u'Togo', - 'TD': u'Chad', - 'TC': u'Turks & Caicos Islands', - 'LY': u'Libya', - 'VA': u'Vatican City', - 'AC': u'Ascension Island', - '145': u'Western Asia', - 'AE': u'United Arab Emirates', - 'AD': u'Andorra', - 'AG': u'Antigua & Barbuda', - 'AF': u'Afghanistan', - 'AI': u'Anguilla', - 'VI': u'U.S. Virgin Islands', - 'IS': u'Iceland', - 'IR': u'Iran', - 'AM': u'Armenia', - 'AL': u'Albania', - 'AO': u'Angola', - '003': u'North America', - '002': u'Africa', - '001': u'World', - 'AR': u'Argentina', - 'AU': u'Australia', - 'AT': u'Austria', - '005': u'South America', - 'IN': u'India', - 'AX': u'Åland Islands', - '009': u'Oceania', - 'AZ': u'Azerbaijan', - 'IE': u'Ireland', - 'ID': u'Indonesia', - 'JO': u'Jordan', - 'UA': u'Ukraine', - 'QA': u'Qatar', - 'DK': u'Denmark', - 'MZ': u'Mozambique', - 'QO': u'Outlying Oceania', -} \ No newline at end of file diff --git a/wagtail/utils/l18n/locale/cs/LC_MESSAGES/l18n.mo b/wagtail/utils/l18n/locale/cs/LC_MESSAGES/l18n.mo deleted file mode 100644 index 36be8eb90bb889f8034a063d0a8f5ec9b20dbf88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15675 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 P?E$?!I@p zkD2Y!sF>9REgxlq55#~1Dj2L)!zL<3rPV|&g9fz9*BXt+ASQ(+Dw4wF_doaR?itM1 z*8I+Q?m6FiedqD-W2YT|gU7!MpW=DXg|B^@EYJJ?X(OIU@(0)};6uho;7aV@8vob0 z@|k7+De&ohKLefsSHo5CBI5>lD)we5zk7|Zg6cwOOrYB7!Dqnhp!~fH9uMDdyv6cw zhw}Gvv+suL|35_U})jq#1}9PI1i>F}eL|2e4oUxw=U{bqm1_+$7~@*g()m&V7T z{2%x1lBye+5s1x0-zfYCS#= z)$cDs_3vMx+IbMl{|}+o@gb=7e;l3xPh#+@cOF!`6{z*O6l(rn3RQ0gs@(v}Zwy_0 z7_Wos$Mt5v9m?Okp~mq6sCNDqYCZ0Ts^7Q#uNfbNgtYeqvmb#f|2rr@E9tcQaXOU! ze5mnW4CViFsPT$f|~!mQ2l5_`I$2wf@
LHV18YPV{96;$~MD((}g@~?-Q@9Uw; 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 diff --git a/wagtail/utils/l18n/locale/en/LC_MESSAGES/l18n.mo b/wagtail/utils/l18n/locale/en/LC_MESSAGES/l18n.mo deleted file mode 100644 index c1d876570429e4904731bf444b44b7e4fac8357b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmY*WF>ll`7&WL8kV=4<89ah2A5M$laCJy+XhjhxPPr5z!D5o{5|_k2*-q8te{?Go z66h8dHbye?4;WbZBYe38PFQ++e)*pLth`^hHqHsItBBi(H?6>R(b0(>=Gfrk*^^Jmpk7O`6lYUUdPA*>et9OkZ1k(Q)IH|YMm;h zNmN^zN<*F+8WoC;l`cpOwQgrqX=q|9AX7h}`_lRXN~jj(_ zEzSk!Xl5~-s`l328$6fJv&2g6O6iU5!e}MmfyJ55YncN}KvtMFJ{ljaUlk5`5E<=3 z;{}U3275U3_vWQkdY7h!v=02}I5}j)wXY4Dfn^6eHJQ@6pu@My|4R}SbTBFL2bS#6 z*vbj2=PT((+q<;ej_zpsn1*+QS8QS+Q=UytZBvN4NI`2q!_2;r=4;nT^ZEZuXr%mt Y#LcoVrun#Prdh75X_kMxDOTP50iEx!0{{R3 diff --git a/wagtail/utils/l18n/locale/fr/LC_MESSAGES/l18n.mo b/wagtail/utils/l18n/locale/fr/LC_MESSAGES/l18n.mo deleted file mode 100644 index 9f908272c89c052b9113fcc4675819687d2250d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15541 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 E1IE{5l>h($ diff --git a/wagtail/utils/l18n/locale/zh/LC_MESSAGES/l18n.mo b/wagtail/utils/l18n/locale/zh/LC_MESSAGES/l18n.mo deleted file mode 100644 index f0dc12fc3f356ddf227f79229f50efe8daac78d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27555 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

s;jZw>RU@ zv|;kc4`_o%aby49P5I6aww=z4NYKt&W&}S#*Ry6iD zZE{|4$zeB>E>2=+JzabHnvUigqq;wM^qh}~>O44!z+%WXf9>rn9S z5h`gzI!oQ5iP9yGSca=W*A5m|HYBg-OpBTD6d6VrB!$d4!?q2Y=KPT+8JJq6*Y<6_ z`w5x1o$Bjm+hgyvsC&xN)ogBg9rC0QR}&d*B)C1Jpi05+kd-HBXEc!pPB)fr)#JSf z*^wNJ$9LwBHt2}$dm5W1<$Ncm+|#v7Ya7XQLmS$BIs#p&k8>ehR3IT&u?hQNL7#}O zB?GD4?#{mB-MU)nXj8|!AE^bVLemwEfRu*Ag=}r3%U-4Hyw|s2VSdFHWpIDDU=5+~ z@gpwe=BiFa!5!&IPL`ENG?b=|L@E2RD4KJwkKp)phn;oNmnge6zpevs&Dr0(sY`Y6 zHy(Ow;dEnnfxpa+gQtJfGr2>W)18qya0hjc{dgNXu^IL{x8L4s+hW^FukXl#-16nU zjZd?^+wxnQdbe>K!zMSbWmu+7Pv`O+x1ocpw5#Re4>ig1=|yoAqv|9AYu+j2aUt+d zA`Mxv3PdSxxBab8n74?8w|fhPH;bQ8Xsn!&-`2 zaH(b6-Kzy(Icu>l%CSYznVr%`#r}0WTpsJ$%%V8Y%_v=J%N{%N)c9epio0^Vc};km zU_JFMIL0kgUk6i6HGW@ty{n1M2)b1FG=GWe%M}MJfpRh3KlF`v}1Tx(ucWF{v&SR;p#UfHDIf zV71OdgQ0C$pxV8s7x%8~^f+i_5FP6|TaGdN6qOQOp8F55aH}^Fl@&n9E8ob9 z=+Od;KBiOE?!%mrhiO_irFh#tOuqdkh7uU#@-@1h^qxASy-h7Grp(9Hk%JQIWMO$7GS0~3C&x6O8ySGtJn@$&T%kyz#lG}fL5l_2ju-ww! zHe+`7=my)riD^a`=8{VjhB(kxUpIHl_JLS%J-22B1zQ<5JDA&ebl#DdTc-D^2z+u+ zKOBYb2Cz+Ew8ga^oQv2@^wemneCtAnO5EvM?QCGWWF&<^H>#rtVzqy+*fmlco$yEqX^T!ba!s)VR-{AgLNQw(S2^H zP*^uEI-DVmjWXR1-M4nKs61*p8{s3i89nV`a|JuxvRj*nea6_eqC|vvY`*F_w8_Q9 z(OIc%MY6j$_ix*q-*(Id7QW|ni`TcBccaItzzpcIk7KS-nm}RI#rgIF&YLh@GDIN5Z0K)TsYhdzahD68VN$hz z3RZXp=QWCsS!5d2mWu?Tcl9>3@&;dq6*9CEOA=QP^pERs@0x@c+;<4j6lgH}yh)Lw zSv5fr?K)W3duF||@riDC^FYOI<`DBhsu0&mQ0ZlDEXUsn1V=OwJxS{$9qGQLlzZ%P z2M_}9-CU7aE57i+$#7g5&IeqXRA9av4)z`(EIjIbzI*E+$kPiD?w3i_2I}9tK~SE1 z>u_rC*xJ|V9%Xwvm*t=4e&?LO!orPvVi4o>2Pan-*x%TA#43gPG8-8sP6X@|GZS zm`d?dm_OR(#xX=-SLr>IzxZ&4dSYS!nN`+U|F-?^(%;B8_ zD{Dd|=1vv96a*>`JZrGVD$9Sm#76g4UDNnm1;@*3t{u_b0?kY_0Wo&K8A1QSuiFvZQCn+sPi2C*$F7d5ILZ2nPVsdE;Xiv8)Nty@OJwSw)=Z0Q0> z_1(Cz7H#k&JXN?qFuS0)@Rugy6V^yxT`4_x^D?8CD65*SW?!2(%fB)$3Y_@!W4?30woo(CgyN|KD5^iF=XX9Wb6CO?z(6XuZ=GW5)r!*p#>fcr zd9~s>P4jYcTVzE``;HL6JhM!@QJ-=Dr_N}V-e#gG!R~j<_taimclVJ74bNGdM?fJH zCfbYMe26RuKjLZ`s8ioI2Lo{_*;ogEU~*?aL)0CIJtKE+E=+qha*tHTZqCdtLp49(8h&u6~ diff --git a/wagtail/utils/l18n/maps.py b/wagtail/utils/l18n/maps.py deleted file mode 100644 index ec9dc0344..000000000 --- a/wagtail/utils/l18n/maps.py +++ /dev/null @@ -1,26 +0,0 @@ -import six - -from .translation import L18NMap, L18NListMap - -try: - from . import __maps - tz_cities = L18NMap(__maps.tz_cities) - territories = L18NMap(__maps.territories) - - # tz_fullnames requires a main dictionary and an auxiliary translations - # dictionary (for components) - - _main_dict = dict(__maps.tz_cities) - _aux_dict = {} - for k, v in six.iteritems(__maps.tz_locations): - if k in _main_dict: - _main_dict[k] = v - else: - _aux_dict[k] = v - - tz_fullnames = L18NListMap('/', _aux_dict, _main_dict) - -except ImportError: - tz_cities = {} - tz_fullnames = {} - territories = {} diff --git a/wagtail/utils/l18n/translation.py b/wagtail/utils/l18n/translation.py deleted file mode 100644 index 1ae66510d..000000000 --- a/wagtail/utils/l18n/translation.py +++ /dev/null @@ -1,275 +0,0 @@ -import os -import gettext -import bisect -from locale import getdefaultlocale -from collections.abc import MutableMapping -from copy import copy, deepcopy - -import six - - -class Trans: - - def __init__(self): - self.registry = {} - self.current = None - self.set(getdefaultlocale()[0]) - - def __getitem__(self, language): - if language: - try: - return self.registry[language] - except KeyError: - self.registry[language] = gettext.translation( - 'l18n', - os.path.join(os.path.dirname(__file__), 'locale'), - languages=[language], - fallback=True - ) - return self.registry[language] - else: - return None - - def set(self, language): - self.current = self[language] - - def gettext(self, s): - try: - return self.current.gettext(s) - except AttributeError: - return s - - if six.PY2: - def ugettext(self, s): - try: - return self.current.ugettext(s) - except AttributeError: - return s - - -_trans = Trans() - - -def set_language(language=None): - _trans.set(language) - - -if six.PY2: - def translate(s, utf8=True, trans=_trans): - if trans: - if utf8: - return trans.ugettext(s) - return trans.gettext(s) - else: - return s -else: - def translate(s, utf8=True, trans=_trans): - if trans: - t = trans.gettext(s) - if utf8: - return t - return t.encode() - else: - return s - - -class L18NLazyObject: - - def _value(self, utf8=True): - raise NotImplementedError - - def __str__(self): - return self._value(utf8=six.PY3) - - def __bytes__(self): - return self._value(utf8=False) - - def __unicode__(self): - return self._value(utf8=True) - - -class L18NLazyString(L18NLazyObject): - - def __init__(self, s): - self._str = s - - def __copy__(self): - return self.__class__(self._str) - - def __deepcopy__(self, memo): - result = self.__copy__() - memo[id(self)] = result - return result - - def _value(self, utf8=True): - return translate(self._str, utf8) - - def __repr__(self): - return 'L18NLazyString <%s>' % repr(self._str) - - def __getattr__(self, name): - # fallback to call the value's attribute in case it's not found in - # L18NLazyString - return getattr(self._value(), name) - - -class L18NLazyStringsList(L18NLazyObject): - - def __init__(self, sep='/', *s): - # we assume that the separator and the strings have the same encoding - # (text_type) - self._sep = sep - self._strings = s - - def __copy__(self): - return self.__class__(self._sep, *self._strings) - - def __deepcopy__(self, memo): - result = self.__copy__() - memo[id(self)] = result - return result - - def _value(self, utf8=True): - sep = self._sep - if utf8 and isinstance(sep, six.binary_type): - sep = sep.decode(encoding='utf-8') - elif not utf8 and isinstance(sep, six.text_type): - sep = sep.encode(encoding='utf-8') - return sep.join([translate(s, utf8) - for s in self._strings]) - - def __repr__(self): - return 'L18NLazyStringsList <%s>' % self._sep.join([ - repr(s) for s in self._strings - ]) - - def __getattr__(self, name): - # fallback to call the value's attribute in case it's not found in - # L18NLazyStringsList - return getattr(self._value(), name) - - -class L18NBaseMap(MutableMapping): - """ - Generic dictionary that returns lazy string or lazy string lists - """ - - def __init__(self, *args, **kwargs): - self.store = dict(*args, **kwargs) - self.sorted = {} - - def __copy__(self): - result = self.__class__() - result.store = self.store - result.sorted = self.sorted - return result - - def __deepcopy__(self, memo): - result = self.__class__() - memo[id(self)] = result - result.store = deepcopy(self.store, memo) - result.sorted = deepcopy(self.sorted, memo) - return result - - def __getitem__(self, key): - raise NotImplementedError - - def __setitem__(self, key, value): - self.store[key] = value - for locale, (keys, values) in six.iteritems(self.sorted): - tr = translate(value, trans=_trans[locale]) - i = bisect.bisect_left(values, tr) - keys.insert(i, key) - values.insert(i, tr) - - def __delitem__(self, key): - del self.store[key] - for keys, values in self.sorted.values(): - i = keys.index(key) - del keys[i] - del values[i] - - def __iter__(self): - loc = _trans.current._info['language'] if _trans.current else None - try: - return iter(self.sorted[loc][0]) - except KeyError: - keys = [] - values = [] - # we can't use iteritems here, as we need to call __getitem__ - # via self[key] - for key in iter(self.store): - value = six.text_type(self[key]) - i = bisect.bisect_left(values, value) - keys.insert(i, key) - values.insert(i, value) - self.sorted[loc] = (keys, values) - return iter(keys) - - def __len__(self): - return len(self.store) - - def subset(self, keys): - """ - Generates a subset of the current map (e.g. to retrieve only tzs in - common_timezones from the tz_cities or tz_fullnames maps) - """ - sub = self.__class__() - - self_keys = set(self.store.keys()) - subset_keys = self_keys.intersection(keys) - removed_keys = self_keys.difference(subset_keys) - - sub.store = {k: self.store[k] for k in subset_keys} - for loc, sorted_items in six.iteritems(self.sorted): - loc_keys = copy(self.sorted[loc][0]) - loc_values = copy(self.sorted[loc][1]) - for k in removed_keys: - i = loc_keys.index(k) - del loc_keys[i] - del loc_values[i] - sub.sorted[loc] = (loc_keys, loc_values) - return sub - - -class L18NMap(L18NBaseMap): - - def __getitem__(self, key): - return L18NLazyString(self.store[key]) - - -class L18NListMap(L18NBaseMap): - - def __init__(self, sep='/', aux=None, *args, **kwargs): - self._sep = sep - self._aux = aux - super(L18NListMap, self).__init__(*args, **kwargs) - - def __copy__(self): - result = super(L18NListMap, self).__copy__() - result._sep = self._sep - result._aux = self._aux - return result - - def __deepcopy__(self, memo): - result = super(L18NListMap, self).__deepcopy__(memo) - result._sep = self._sep - result._aux = None if self._aux is None else deepcopy(self._aux, memo) - return result - - def __getitem__(self, key): - strs = key.split(self._sep) - strs[-1] = key - lst = [] - for s in strs: - try: - lst.append(self.store[s]) - except KeyError: - lst.append(self._aux[s]) - return L18NLazyStringsList(self._sep, *lst) - - def subset(self, keys): - sub = super(L18NListMap, self).subset(keys) - sub._sep = self._sep - sub._aux = deepcopy(self._aux) - return sub diff --git a/wagtail/utils/l18n/utils.py b/wagtail/utils/l18n/utils.py deleted file mode 100644 index 8a2a50015..000000000 --- a/wagtail/utils/l18n/utils.py +++ /dev/null @@ -1,32 +0,0 @@ -import locale - -from pytz import country_timezones -import six - -from .maps import tz_cities - - -def get_country_timezones(country_code): - """ - Retrieves the timezones for a given country, sorted in alphabetical order - """ - - tz_list = [] - - if country_code in country_timezones: - tzs = country_timezones[country_code] - tz_list = [(t, tz_cities[t]) for t in tzs] - tz_list.sort(lambda x, y: locale.strcoll(x[1], y[1])) - - return tz_list - - -def get_country_code_from_tz(tz): - """ - Retrieves the country matching a given timezone - """ - - for c, t in six.iteritems(country_timezones): - if tz in t: - return c - return None diff --git a/wagtail/utils/l18n/version.py b/wagtail/utils/l18n/version.py deleted file mode 100644 index e2ea0ed23..000000000 --- a/wagtail/utils/l18n/version.py +++ /dev/null @@ -1,40 +0,0 @@ -__version_info__ = (2016, 6, 4, 'final', 0) - - -def get_version(version=__version_info__): - - dev_st = {'alpha': 'a', 'beta': 'b', 'rc': 'c', 'final': ''} - - assert len(version) == 5 - assert version[3] in dev_st.keys() - - n = 2 + (version[2] != 0) - version_str = '.'.join([str(v) for v in version[:n]]) - - if version[3] == 'final': - return version_str - - if version[3:] == ('alpha', 0): - return '%s.dev%s' % (version_str, get_hg_chgset()) - else: - return ''.join((version_str, dev_st[version[3]], str(version[4]))) - - -def get_hg_chgset(): - import subprocess - - try: - # python 3 - DEVNULL = subprocess.DEVNULL - except AttributeError: - import os - DEVNULL = open(os.devnull, 'wb') - - try: - return subprocess.check_output(['hg', 'id', '-i'], - stderr=DEVNULL).strip() - except: - return '?' - - -__version__ = get_version()