diff --git a/jules-scratch/verification/verify_main_page.py b/jules-scratch/verification/verify_main_page.py new file mode 100644 index 0000000..490d49c --- /dev/null +++ b/jules-scratch/verification/verify_main_page.py @@ -0,0 +1,12 @@ +from playwright.sync_api import sync_playwright + +def run(playwright): + browser = playwright.chromium.launch() + page = browser.new_page() + page.goto("http://localhost:8080/") + assert page.title() == "Clementine Music Player" + page.screenshot(path="jules-scratch/verification/verification.png") + browser.close() + +with sync_playwright() as playwright: + run(playwright) diff --git a/www.clementine-player.org/app.yaml b/www.clementine-player.org/app.yaml index e6c733a..14805c6 100644 --- a/www.clementine-player.org/app.yaml +++ b/www.clementine-player.org/app.yaml @@ -1,15 +1,5 @@ -runtime: python27 -api_version: 1 -threadsafe: true -automatic_scaling: - max_instances: 1 - -libraries: -- name: webapp2 - version: "2.5.1" -- name: jinja2 - version: "2.6" - +runtime: python312 +entrypoint: gunicorn -b :$PORT main:app handlers: - url: /css @@ -42,15 +32,6 @@ handlers: expiration: "7d" secure: always -- url: /thumbnails/.* - script: thumbnailer.app - secure: always - -- url: /scheduled/.* - script: main.app - secure: always - login: admin - - url: /.* - script: main.app + script: auto secure: always diff --git a/www.clementine-player.org/babel/__init__.py b/www.clementine-player.org/babel.bak/__init__.py similarity index 100% rename from www.clementine-player.org/babel/__init__.py rename to www.clementine-player.org/babel.bak/__init__.py diff --git a/www.clementine-player.org/babel/core.py b/www.clementine-player.org/babel.bak/core.py similarity index 96% rename from www.clementine-player.org/babel/core.py rename to www.clementine-player.org/babel.bak/core.py index a5f108b..775ea3a 100644 --- a/www.clementine-player.org/babel/core.py +++ b/www.clementine-player.org/babel.bak/core.py @@ -26,15 +26,15 @@ def get_global(key): """Return the dictionary for the given key in the global data. - + The global data is stored in the ``babel/global.dat`` file and contains information independent of individual locales. - + >>> get_global('zone_aliases')['UTC'] 'Etc/GMT' >>> get_global('zone_territories')['Europe/Berlin'] 'DE' - + :param key: the data key :return: the dictionary found in the global data under the given key :rtype: `dict` @@ -53,13 +53,13 @@ def get_global(key): LOCALE_ALIASES = { - 'ar': 'ar_SY', 'bg': 'bg_BG', 'bs': 'bs_BA', 'ca': 'ca_ES', 'cs': 'cs_CZ', - 'da': 'da_DK', 'de': 'de_DE', 'el': 'el_GR', 'en': 'en_US', 'es': 'es_ES', - 'et': 'et_EE', 'fa': 'fa_IR', 'fi': 'fi_FI', 'fr': 'fr_FR', 'gl': 'gl_ES', - 'he': 'he_IL', 'hu': 'hu_HU', 'id': 'id_ID', 'is': 'is_IS', 'it': 'it_IT', - 'ja': 'ja_JP', 'km': 'km_KH', 'ko': 'ko_KR', 'lt': 'lt_LT', 'lv': 'lv_LV', - 'mk': 'mk_MK', 'nl': 'nl_NL', 'nn': 'nn_NO', 'no': 'nb_NO', 'pl': 'pl_PL', - 'pt': 'pt_PT', 'ro': 'ro_RO', 'ru': 'ru_RU', 'sk': 'sk_SK', 'sl': 'sl_SI', + 'ar': 'ar_SY', 'bg': 'bg_BG', 'bs': 'bs_BA', 'ca': 'ca_ES', 'cs': 'cs_CZ', + 'da': 'da_DK', 'de': 'de_DE', 'el': 'el_GR', 'en': 'en_US', 'es': 'es_ES', + 'et': 'et_EE', 'fa': 'fa_IR', 'fi': 'fi_FI', 'fr': 'fr_FR', 'gl': 'gl_ES', + 'he': 'he_IL', 'hu': 'hu_HU', 'id': 'id_ID', 'is': 'is_IS', 'it': 'it_IT', + 'ja': 'ja_JP', 'km': 'km_KH', 'ko': 'ko_KR', 'lt': 'lt_LT', 'lv': 'lv_LV', + 'mk': 'mk_MK', 'nl': 'nl_NL', 'nn': 'nn_NO', 'no': 'nb_NO', 'pl': 'pl_PL', + 'pt': 'pt_PT', 'ro': 'ro_RO', 'ru': 'ru_RU', 'sk': 'sk_SK', 'sl': 'sl_SI', 'sv': 'sv_SE', 'th': 'th_TH', 'tr': 'tr_TR', 'uk': 'uk_UA' } @@ -71,7 +71,7 @@ class UnknownLocaleError(Exception): def __init__(self, identifier): """Create the exception. - + :param identifier: the identifier string of the unsupported locale """ Exception.__init__(self, 'unknown locale %r' % identifier) @@ -80,45 +80,45 @@ def __init__(self, identifier): class Locale(object): """Representation of a specific locale. - + >>> locale = Locale('en', 'US') >>> repr(locale) '' >>> locale.display_name u'English (United States)' - + A `Locale` object can also be instantiated from a raw locale string: - + >>> locale = Locale.parse('en-US', sep='-') >>> repr(locale) '' - + `Locale` objects provide access to a collection of locale data, such as territory and language names, number and date format patterns, and more: - + >>> locale.number_symbols['decimal'] u'.' - + If a locale is requested for which no locale data is available, an `UnknownLocaleError` is raised: - + >>> Locale.parse('en_DE') Traceback (most recent call last): ... UnknownLocaleError: unknown locale 'en_DE' - + :see: `IETF RFC 3066 `_ """ def __init__(self, language, territory=None, script=None, variant=None): """Initialize the locale object from the given identifier components. - + >>> locale = Locale('en', 'US') >>> locale.language 'en' >>> locale.territory 'US' - + :param language: the language code :param territory: the territory (country or region) code :param script: the script code @@ -138,7 +138,7 @@ def __init__(self, language, territory=None, script=None, variant=None): def default(cls, category=None, aliases=LOCALE_ALIASES): """Return the system default locale for the specified category. - + >>> for name in ['LANGUAGE', 'LC_ALL', 'LC_CTYPE']: ... os.environ[name] = '' >>> os.environ['LANG'] = 'fr_FR.UTF-8' @@ -157,20 +157,20 @@ def default(cls, category=None, aliases=LOCALE_ALIASES): def negotiate(cls, preferred, available, sep='_', aliases=LOCALE_ALIASES): """Find the best match between available and requested locale strings. - + >>> Locale.negotiate(['de_DE', 'en_US'], ['de_DE', 'de_AT']) >>> Locale.negotiate(['de_DE', 'en_US'], ['en', 'de']) >>> Locale.negotiate(['de_DE', 'de'], ['en_US']) - + You can specify the character used in the locale identifiers to separate the differnet components. This separator is applied to both lists. Also, case is ignored in the comparison: - + >>> Locale.negotiate(['de-DE', 'de'], ['en-us', 'de-de'], sep='-') - + :param preferred: the list of locale identifers preferred by the user :param available: the list of locale identifiers available :param aliases: a dictionary of aliases for locale identifiers @@ -187,17 +187,17 @@ def negotiate(cls, preferred, available, sep='_', aliases=LOCALE_ALIASES): def parse(cls, identifier, sep='_'): """Create a `Locale` instance for the given locale identifier. - + >>> l = Locale.parse('de-DE', sep='-') >>> l.display_name u'Deutsch (Deutschland)' - + If the `identifier` parameter is not a string, but actually a `Locale` object, that object is returned: - + >>> Locale.parse(l) - + :param identifier: the locale identifier string :param sep: optional component separator :return: a corresponding `Locale` instance @@ -234,13 +234,13 @@ def _data(self): def get_display_name(self, locale=None): """Return the display name of the locale using the given locale. - + The display name will include the language, territory, script, and variant, if those are specified. - + >>> Locale('zh', 'CN', script='Hans').get_display_name('en') u'Chinese (Simplified Han, China)' - + :param locale: the locale to use :return: the display name """ @@ -263,14 +263,14 @@ def get_display_name(self, locale=None): display_name = property(get_display_name, doc="""\ The localized display name of the locale. - + >>> Locale('en').display_name u'English' >>> Locale('en', 'US').display_name u'English (United States)' >>> Locale('sv').display_name u'svenska' - + :type: `unicode` """) @@ -278,12 +278,12 @@ def english_name(self): return self.get_display_name(Locale('en')) english_name = property(english_name, doc="""\ The english display name of the locale. - + >>> Locale('de').english_name u'German' >>> Locale('de', 'DE').english_name u'German (Germany)' - + :type: `unicode` """) @@ -293,10 +293,10 @@ def languages(self): return self._data['languages'] languages = property(languages, doc="""\ Mapping of language codes to translated language names. - + >>> Locale('de', 'DE').languages['ja'] u'Japanisch' - + :type: `dict` :see: `ISO 639 `_ """) @@ -305,10 +305,10 @@ def scripts(self): return self._data['scripts'] scripts = property(scripts, doc="""\ Mapping of script codes to translated script names. - + >>> Locale('en', 'US').scripts['Hira'] u'Hiragana' - + :type: `dict` :see: `ISO 15924 `_ """) @@ -317,10 +317,10 @@ def territories(self): return self._data['territories'] territories = property(territories, doc="""\ Mapping of script codes to translated script names. - + >>> Locale('es', 'CO').territories['DE'] u'Alemania' - + :type: `dict` :see: `ISO 3166 `_ """) @@ -329,10 +329,10 @@ def variants(self): return self._data['variants'] variants = property(variants, doc="""\ Mapping of script codes to translated script names. - + >>> Locale('de', 'DE').variants['1901'] u'Alte deutsche Rechtschreibung' - + :type: `dict` """) @@ -342,12 +342,12 @@ def currencies(self): return self._data['currency_names'] currencies = property(currencies, doc="""\ Mapping of currency codes to translated currency names. - + >>> Locale('en').currencies['COP'] u'Colombian Peso' >>> Locale('de', 'DE').currencies['COP'] u'Kolumbianischer Peso' - + :type: `dict` """) @@ -355,12 +355,12 @@ def currency_symbols(self): return self._data['currency_symbols'] currency_symbols = property(currency_symbols, doc="""\ Mapping of currency codes to symbols. - + >>> Locale('en', 'US').currency_symbols['USD'] u'$' >>> Locale('es', 'CO').currency_symbols['USD'] u'US$' - + :type: `dict` """) @@ -368,10 +368,10 @@ def number_symbols(self): return self._data['number_symbols'] number_symbols = property(number_symbols, doc="""\ Symbols used in number formatting. - + >>> Locale('fr', 'FR').number_symbols['decimal'] u',' - + :type: `dict` """) @@ -379,10 +379,10 @@ def decimal_formats(self): return self._data['decimal_formats'] decimal_formats = property(decimal_formats, doc="""\ Locale patterns for decimal number formatting. - + >>> Locale('en', 'US').decimal_formats[None] - + :type: `dict` """) @@ -390,10 +390,10 @@ def currency_formats(self): return self._data['currency_formats'] currency_formats = property(currency_formats, doc=r"""\ Locale patterns for currency number formatting. - + >>> print Locale('en', 'US').currency_formats[None] - + :type: `dict` """) @@ -401,10 +401,10 @@ def percent_formats(self): return self._data['percent_formats'] percent_formats = property(percent_formats, doc="""\ Locale patterns for percent number formatting. - + >>> Locale('en', 'US').percent_formats[None] - + :type: `dict` """) @@ -412,10 +412,10 @@ def scientific_formats(self): return self._data['scientific_formats'] scientific_formats = property(scientific_formats, doc="""\ Locale patterns for scientific number formatting. - + >>> Locale('en', 'US').scientific_formats[None] - + :type: `dict` """) @@ -425,10 +425,10 @@ def periods(self): return self._data['periods'] periods = property(periods, doc="""\ Locale display names for day periods (AM/PM). - + >>> Locale('en', 'US').periods['am'] u'AM' - + :type: `dict` """) @@ -436,10 +436,10 @@ def days(self): return self._data['days'] days = property(days, doc="""\ Locale display names for weekdays. - + >>> Locale('de', 'DE').days['format']['wide'][3] u'Donnerstag' - + :type: `dict` """) @@ -447,10 +447,10 @@ def months(self): return self._data['months'] months = property(months, doc="""\ Locale display names for months. - + >>> Locale('de', 'DE').months['format']['wide'][10] u'Oktober' - + :type: `dict` """) @@ -458,10 +458,10 @@ def quarters(self): return self._data['quarters'] quarters = property(quarters, doc="""\ Locale display names for quarters. - + >>> Locale('de', 'DE').quarters['format']['wide'][1] u'1. Quartal' - + :type: `dict` """) @@ -469,12 +469,12 @@ def eras(self): return self._data['eras'] eras = property(eras, doc="""\ Locale display names for eras. - + >>> Locale('en', 'US').eras['wide'][1] u'Anno Domini' >>> Locale('en', 'US').eras['abbreviated'][0] u'BC' - + :type: `dict` """) @@ -482,12 +482,12 @@ def time_zones(self): return self._data['time_zones'] time_zones = property(time_zones, doc="""\ Locale display names for time zones. - + >>> Locale('en', 'US').time_zones['Europe/London']['long']['daylight'] u'British Summer Time' >>> Locale('en', 'US').time_zones['America/St_Johns']['city'] u"St. John's" - + :type: `dict` """) @@ -495,13 +495,13 @@ def meta_zones(self): return self._data['meta_zones'] meta_zones = property(meta_zones, doc="""\ Locale display names for meta time zones. - + Meta time zones are basically groups of different Olson time zones that have the same GMT offset and daylight savings time. - + >>> Locale('en', 'US').meta_zones['Europe_Central']['long']['daylight'] u'Central European Summer Time' - + :type: `dict` :since: version 0.9 """) @@ -510,12 +510,12 @@ def zone_formats(self): return self._data['zone_formats'] zone_formats = property(zone_formats, doc=r"""\ Patterns related to the formatting of time zones. - + >>> Locale('en', 'US').zone_formats['fallback'] u'%(1)s (%(0)s)' >>> Locale('pt', 'BR').zone_formats['region'] u'Hor\xe1rio %s' - + :type: `dict` :since: version 0.9 """) @@ -524,12 +524,12 @@ def first_week_day(self): return self._data['week_data']['first_day'] first_week_day = property(first_week_day, doc="""\ The first day of a week, with 0 being Monday. - + >>> Locale('de', 'DE').first_week_day 0 >>> Locale('en', 'US').first_week_day 6 - + :type: `int` """) @@ -537,10 +537,10 @@ def weekend_start(self): return self._data['week_data']['weekend_start'] weekend_start = property(weekend_start, doc="""\ The day the weekend starts, with 0 being Monday. - + >>> Locale('de', 'DE').weekend_start 5 - + :type: `int` """) @@ -548,10 +548,10 @@ def weekend_end(self): return self._data['week_data']['weekend_end'] weekend_end = property(weekend_end, doc="""\ The day the weekend ends, with 0 being Monday. - + >>> Locale('de', 'DE').weekend_end 6 - + :type: `int` """) @@ -560,10 +560,10 @@ def min_week_days(self): min_week_days = property(min_week_days, doc="""\ The minimum number of days in a week so that the week is counted as the first week of a year or month. - + >>> Locale('de', 'DE').min_week_days 4 - + :type: `int` """) @@ -571,12 +571,12 @@ def date_formats(self): return self._data['date_formats'] date_formats = property(date_formats, doc="""\ Locale patterns for date formatting. - + >>> Locale('en', 'US').date_formats['short'] >>> Locale('fr', 'FR').date_formats['long'] - + :type: `dict` """) @@ -584,12 +584,12 @@ def time_formats(self): return self._data['time_formats'] time_formats = property(time_formats, doc="""\ Locale patterns for time formatting. - + >>> Locale('en', 'US').time_formats['short'] >>> Locale('fr', 'FR').time_formats['long'] - + :type: `dict` """) @@ -597,12 +597,12 @@ def datetime_formats(self): return self._data['datetime_formats'] datetime_formats = property(datetime_formats, doc="""\ Locale patterns for datetime formatting. - + >>> Locale('en').datetime_formats[None] u'{1} {0}' >>> Locale('th').datetime_formats[None] u'{1}, {0}' - + :type: `dict` """) @@ -610,7 +610,7 @@ def datetime_formats(self): def default_locale(category=None, aliases=LOCALE_ALIASES): """Returns the system default locale for a given category, based on environment variables. - + >>> for name in ['LANGUAGE', 'LC_ALL', 'LC_CTYPE']: ... os.environ[name] = '' >>> os.environ['LANG'] = 'fr_FR.UTF-8' @@ -649,21 +649,21 @@ def default_locale(category=None, aliases=LOCALE_ALIASES): def negotiate_locale(preferred, available, sep='_', aliases=LOCALE_ALIASES): """Find the best match between available and requested locale strings. - + >>> negotiate_locale(['de_DE', 'en_US'], ['de_DE', 'de_AT']) 'de_DE' >>> negotiate_locale(['de_DE', 'en_US'], ['en', 'de']) 'de' - + Case is ignored by the algorithm, the result uses the case of the preferred locale identifier: - + >>> negotiate_locale(['de_DE', 'en_US'], ['de_de', 'de_at']) 'de_DE' - + >>> negotiate_locale(['de_DE', 'en_US'], ['de_de', 'de_at']) 'de_DE' - + By default, some web browsers unfortunately do not include the territory in the locale identifier for many locales, and some don't even allow the user to easily add the territory. So while you may prefer using qualified @@ -671,22 +671,22 @@ def negotiate_locale(preferred, available, sep='_', aliases=LOCALE_ALIASES): the language-only locale sent by such browsers. To workaround that, this function uses a default mapping of commonly used langauge-only locale identifiers to identifiers including the territory: - + >>> negotiate_locale(['ja', 'en_US'], ['ja_JP', 'en_US']) 'ja_JP' - + Some browsers even use an incorrect or outdated language code, such as "no" for Norwegian, where the correct locale identifier would actually be "nb_NO" (Bokmål) or "nn_NO" (Nynorsk). The aliases are intended to take care of such cases, too: - + >>> negotiate_locale(['no', 'sv'], ['nb_NO', 'sv_SE']) 'nb_NO' - + You can override this default mapping by passing a different `aliases` dictionary to this function, or you can bypass the behavior althogher by setting the `aliases` parameter to `None`. - + :param preferred: the list of locale strings preferred by the user :param available: the list of locale strings available :param sep: character that separates the different parts of the locale @@ -714,37 +714,37 @@ def negotiate_locale(preferred, available, sep='_', aliases=LOCALE_ALIASES): def parse_locale(identifier, sep='_'): """Parse a locale identifier into a tuple of the form:: - + ``(language, territory, script, variant)`` - + >>> parse_locale('zh_CN') ('zh', 'CN', None, None) >>> parse_locale('zh_Hans_CN') ('zh', 'CN', 'Hans', None) - + The default component separator is "_", but a different separator can be specified using the `sep` parameter: - + >>> parse_locale('zh-CN', sep='-') ('zh', 'CN', None, None) - + If the identifier cannot be parsed into a locale, a `ValueError` exception is raised: - + >>> parse_locale('not_a_LOCALE_String') Traceback (most recent call last): ... ValueError: 'not_a_LOCALE_String' is not a valid locale identifier - + Encoding information and locale modifiers are removed from the identifier: - + >>> parse_locale('it_IT@euro') ('it', 'IT', None, None) >>> parse_locale('en_US.UTF-8') ('en', 'US', None, None) >>> parse_locale('de_DE.iso885915@euro') ('de', 'DE', None, None) - + :param identifier: the locale identifier string :param sep: character that separates the different components of the locale identifier @@ -752,7 +752,7 @@ def parse_locale(identifier, sep='_'): :rtype: `tuple` :raise `ValueError`: if the string does not appear to be a valid locale identifier - + :see: `IETF RFC 4646 `_ """ if '.' in identifier: diff --git a/www.clementine-player.org/babel/dates.py b/www.clementine-player.org/babel.bak/dates.py similarity index 98% rename from www.clementine-player.org/babel/dates.py rename to www.clementine-player.org/babel.bak/dates.py index fa14f9e..ee23004 100644 --- a/www.clementine-player.org/babel/dates.py +++ b/www.clementine-player.org/babel.bak/dates.py @@ -40,10 +40,10 @@ def get_period_names(locale=LC_TIME): """Return the names for day periods (AM/PM) used by the locale. - + >>> get_period_names(locale='en_US')['am'] u'AM' - + :param locale: the `Locale` object, or a locale string :return: the dictionary of period names :rtype: `dict` @@ -52,14 +52,14 @@ def get_period_names(locale=LC_TIME): def get_day_names(width='wide', context='format', locale=LC_TIME): """Return the day names used by the locale for the specified format. - + >>> get_day_names('wide', locale='en_US')[1] u'Tuesday' >>> get_day_names('abbreviated', locale='es')[1] u'mar' >>> get_day_names('narrow', context='stand-alone', locale='de_DE')[1] u'D' - + :param width: the width to use, one of "wide", "abbreviated", or "narrow" :param context: the context, either "format" or "stand-alone" :param locale: the `Locale` object, or a locale string @@ -70,14 +70,14 @@ def get_day_names(width='wide', context='format', locale=LC_TIME): def get_month_names(width='wide', context='format', locale=LC_TIME): """Return the month names used by the locale for the specified format. - + >>> get_month_names('wide', locale='en_US')[1] u'January' >>> get_month_names('abbreviated', locale='es')[1] u'ene' >>> get_month_names('narrow', context='stand-alone', locale='de_DE')[1] u'J' - + :param width: the width to use, one of "wide", "abbreviated", or "narrow" :param context: the context, either "format" or "stand-alone" :param locale: the `Locale` object, or a locale string @@ -88,12 +88,12 @@ def get_month_names(width='wide', context='format', locale=LC_TIME): def get_quarter_names(width='wide', context='format', locale=LC_TIME): """Return the quarter names used by the locale for the specified format. - + >>> get_quarter_names('wide', locale='en_US')[1] u'1st quarter' >>> get_quarter_names('abbreviated', locale='de_DE')[1] u'Q1' - + :param width: the width to use, one of "wide", "abbreviated", or "narrow" :param context: the context, either "format" or "stand-alone" :param locale: the `Locale` object, or a locale string @@ -104,12 +104,12 @@ def get_quarter_names(width='wide', context='format', locale=LC_TIME): def get_era_names(width='wide', locale=LC_TIME): """Return the era names used by the locale for the specified format. - + >>> get_era_names('wide', locale='en_US')[1] u'Anno Domini' >>> get_era_names('abbreviated', locale='de_DE')[1] u'n. Chr.' - + :param width: the width to use, either "wide", "abbreviated", or "narrow" :param locale: the `Locale` object, or a locale string :return: the dictionary of era names @@ -120,12 +120,12 @@ def get_era_names(width='wide', locale=LC_TIME): def get_date_format(format='medium', locale=LC_TIME): """Return the date formatting patterns used by the locale for the specified format. - + >>> get_date_format(locale='en_US') >>> get_date_format('full', locale='de_DE') - + :param format: the format to use, one of "full", "long", "medium", or "short" :param locale: the `Locale` object, or a locale string @@ -137,10 +137,10 @@ def get_date_format(format='medium', locale=LC_TIME): def get_datetime_format(format='medium', locale=LC_TIME): """Return the datetime formatting patterns used by the locale for the specified format. - + >>> get_datetime_format(locale='en_US') u'{1} {0}' - + :param format: the format to use, one of "full", "long", "medium", or "short" :param locale: the `Locale` object, or a locale string @@ -155,12 +155,12 @@ def get_datetime_format(format='medium', locale=LC_TIME): def get_time_format(format='medium', locale=LC_TIME): """Return the time formatting patterns used by the locale for the specified format. - + >>> get_time_format(locale='en_US') >>> get_time_format('full', locale='de_DE') - + :param format: the format to use, one of "full", "long", "medium", or "short" :param locale: the `Locale` object, or a locale string @@ -172,11 +172,11 @@ def get_time_format(format='medium', locale=LC_TIME): def get_timezone_gmt(datetime=None, width='long', locale=LC_TIME): """Return the timezone associated with the given `datetime` object formatted as string indicating the offset from GMT. - + >>> dt = datetime(2007, 4, 1, 15, 30) >>> get_timezone_gmt(dt, locale='en') u'GMT+00:00' - + >>> from pytz import timezone >>> tz = timezone('America/Los_Angeles') >>> dt = datetime(2007, 4, 1, 15, 30, tzinfo=tz) @@ -184,13 +184,13 @@ def get_timezone_gmt(datetime=None, width='long', locale=LC_TIME): u'GMT-08:00' >>> get_timezone_gmt(dt, 'short', locale='en') u'-0800' - + The long format depends on the locale, for example in France the acronym UTC string is used instead of GMT: - + >>> get_timezone_gmt(dt, 'long', locale='fr_FR') u'UTC-08:00' - + :param datetime: the ``datetime`` object; if `None`, the current date and time in UTC is used :param width: either "long" or "short" @@ -218,10 +218,10 @@ def get_timezone_gmt(datetime=None, width='long', locale=LC_TIME): def get_timezone_location(dt_or_tzinfo=None, locale=LC_TIME): """Return a representation of the given timezone using "location format". - + The result depends on both the local display name of the country and the city associated with the time zone: - + >>> from pytz import timezone >>> tz = timezone('America/St_Johns') >>> get_timezone_location(tz, locale='de_DE') @@ -229,14 +229,14 @@ def get_timezone_location(dt_or_tzinfo=None, locale=LC_TIME): >>> tz = timezone('America/Mexico_City') >>> get_timezone_location(tz, locale='de_DE') u'Mexiko (Mexiko-Stadt)' - + If the timezone is associated with a country that uses only a single timezone, just the localized country name is returned: - + >>> tz = timezone('Europe/Berlin') >>> get_timezone_name(tz, locale='de_DE') u'Deutschland' - + :param dt_or_tzinfo: the ``datetime`` or ``tzinfo`` object that determines the timezone; if `None`, the current date and time in UTC is assumed @@ -302,54 +302,54 @@ def get_timezone_name(dt_or_tzinfo=None, width='long', uncommon=False, locale=LC_TIME): r"""Return the localized display name for the given timezone. The timezone may be specified using a ``datetime`` or `tzinfo` object. - + >>> from pytz import timezone >>> dt = time(15, 30, tzinfo=timezone('America/Los_Angeles')) >>> get_timezone_name(dt, locale='en_US') u'Pacific Standard Time' >>> get_timezone_name(dt, width='short', locale='en_US') u'PST' - + If this function gets passed only a `tzinfo` object and no concrete `datetime`, the returned display name is indenpendent of daylight savings time. This can be used for example for selecting timezones, or to set the time of events that recur across DST changes: - + >>> tz = timezone('America/Los_Angeles') >>> get_timezone_name(tz, locale='en_US') u'Pacific Time' >>> get_timezone_name(tz, 'short', locale='en_US') u'PT' - + If no localized display name for the timezone is available, and the timezone is associated with a country that uses only a single timezone, the name of that country is returned, formatted according to the locale: - + >>> tz = timezone('Europe/Berlin') >>> get_timezone_name(tz, locale='de_DE') u'Deutschland' >>> get_timezone_name(tz, locale='pt_BR') u'Hor\xe1rio Alemanha' - + On the other hand, if the country uses multiple timezones, the city is also included in the representation: - + >>> tz = timezone('America/St_Johns') >>> get_timezone_name(tz, locale='de_DE') u"Kanada (St. John's)" - + The `uncommon` parameter can be set to `True` to enable the use of timezone representations that are not commonly used by the requested locale. For example, while in French the central European timezone is usually abbreviated as "HEC", in Canadian French, this abbreviation is not in common use, so a generic name would be chosen by default: - + >>> tz = timezone('Europe/Paris') >>> get_timezone_name(tz, 'short', locale='fr_CA') u'France' >>> get_timezone_name(tz, 'short', uncommon=True, locale='fr_CA') u'HEC' - + :param dt_or_tzinfo: the ``datetime`` or ``tzinfo`` object that determines the timezone; if a ``tzinfo`` object is used, the resulting display name will be generic, i.e. @@ -422,26 +422,26 @@ def get_timezone_name(dt_or_tzinfo=None, width='long', uncommon=False, def format_date(date=None, format='medium', locale=LC_TIME): """Return a date formatted according to the given pattern. - + >>> d = date(2007, 04, 01) >>> format_date(d, locale='en_US') u'Apr 1, 2007' >>> format_date(d, format='full', locale='de_DE') u'Sonntag, 1. April 2007' - + If you don't want to use the locale default formats, you can specify a custom date pattern: - + >>> format_date(d, "EEE, MMM d, ''yy", locale='en') u"Sun, Apr 1, '07" - + :param date: the ``date`` or ``datetime`` object; if `None`, the current date is used :param format: one of "full", "long", "medium", or "short", or a custom date/time pattern :param locale: a `Locale` object or a locale identifier :rtype: `unicode` - + :note: If the pattern contains time fields, an `AttributeError` will be raised when trying to apply the formatting. This is also true if the value of ``date`` parameter is actually a ``datetime`` object, @@ -461,14 +461,14 @@ def format_date(date=None, format='medium', locale=LC_TIME): def format_datetime(datetime=None, format='medium', tzinfo=None, locale=LC_TIME): """Return a date formatted according to the given pattern. - + >>> dt = datetime(2007, 04, 01, 15, 30) >>> format_datetime(dt, locale='en_US') u'Apr 1, 2007 3:30:00 PM' - + For any pattern requiring the display of the time-zone, the third-party ``pytz`` package is needed to explicitly specify the time-zone: - + >>> from pytz import timezone >>> format_datetime(dt, 'full', tzinfo=timezone('Europe/Paris'), ... locale='fr_FR') @@ -476,7 +476,7 @@ def format_datetime(datetime=None, format='medium', tzinfo=None, >>> format_datetime(dt, "yyyy.MM.dd G 'at' HH:mm:ss zzz", ... tzinfo=timezone('US/Eastern'), locale='en') u'2007.04.01 AD at 11:30:00 EDT' - + :param datetime: the `datetime` object; if `None`, the current date and time is used :param format: one of "full", "long", "medium", or "short", or a custom @@ -509,22 +509,22 @@ def format_datetime(datetime=None, format='medium', tzinfo=None, def format_time(time=None, format='medium', tzinfo=None, locale=LC_TIME): """Return a time formatted according to the given pattern. - + >>> t = time(15, 30) >>> format_time(t, locale='en_US') u'3:30:00 PM' >>> format_time(t, format='short', locale='de_DE') u'15:30' - + If you don't want to use the locale default formats, you can specify a custom time pattern: - + >>> format_time(t, "hh 'o''clock' a", locale='en') u"03 o'clock PM" - + For any pattern requiring the display of the time-zone, the third-party ``pytz`` package is needed to explicitly specify the time-zone: - + >>> from pytz import timezone >>> t = datetime(2007, 4, 1, 15, 30) >>> tzinfo = timezone('Europe/Paris') @@ -534,20 +534,20 @@ def format_time(time=None, format='medium', tzinfo=None, locale=LC_TIME): >>> format_time(t, "hh 'o''clock' a, zzzz", tzinfo=timezone('US/Eastern'), ... locale='en') u"09 o'clock AM, Eastern Daylight Time" - + As that example shows, when this function gets passed a ``datetime.datetime`` value, the actual time in the formatted string is adjusted to the timezone specified by the `tzinfo` parameter. If the ``datetime`` is "naive" (i.e. it has no associated timezone information), it is assumed to be in UTC. - + These timezone calculations are **not** performed if the value is of type ``datetime.time``, as without date information there's no way to determine what a given time would translate to in a different timezone without information about whether daylight savings time is in effect or not. This means that time values are left as-is, and the value of the `tzinfo` parameter is only used to display the timezone name if needed: - + >>> t = time(15, 30) >>> format_time(t, format='full', tzinfo=timezone('Europe/Paris'), ... locale='fr_FR') @@ -555,7 +555,7 @@ def format_time(time=None, format='medium', tzinfo=None, locale=LC_TIME): >>> format_time(t, format='full', tzinfo=timezone('US/Eastern'), ... locale='en_US') u'3:30:00 PM ET' - + :param time: the ``time`` or ``datetime`` object; if `None`, the current time in UTC is used :param format: one of "full", "long", "medium", or "short", or a custom @@ -563,7 +563,7 @@ def format_time(time=None, format='medium', tzinfo=None, locale=LC_TIME): :param tzinfo: the time-zone to apply to the time for display :param locale: a `Locale` object or a locale identifier :rtype: `unicode` - + :note: If the pattern contains date fields, an `AttributeError` will be raised when trying to apply the formatting. This is also true if the value of ``time`` parameter is actually a ``datetime`` object, @@ -591,15 +591,15 @@ def format_time(time=None, format='medium', tzinfo=None, locale=LC_TIME): def parse_date(string, locale=LC_TIME): """Parse a date from a string. - + This function uses the date format for the locale as a hint to determine the order in which the date fields appear in the string. - + >>> parse_date('4/1/04', locale='en_US') datetime.date(2004, 4, 1) >>> parse_date('01.04.2004', locale='de_DE') datetime.date(2004, 4, 1) - + :param string: the string containing the date :param locale: a `Locale` object or a locale identifier :return: the parsed date @@ -634,10 +634,10 @@ def parse_date(string, locale=LC_TIME): def parse_datetime(string, locale=LC_TIME): """Parse a date and time from a string. - + This function uses the date and time formats for the locale as a hint to determine the order in which the time fields appear in the string. - + :param string: the string containing the date and time :param locale: a `Locale` object or a locale identifier :return: the parsed date/time @@ -647,13 +647,13 @@ def parse_datetime(string, locale=LC_TIME): def parse_time(string, locale=LC_TIME): """Parse a time from a string. - + This function uses the time format for the locale as a hint to determine the order in which the time fields appear in the string. - + >>> parse_time('15:30:00', locale='en_US') datetime.time(15, 30) - + :param string: the string containing the time :param locale: a `Locale` object or a locale identifier :return: the parsed time @@ -865,19 +865,19 @@ def get_day_of_year(self, date=None): def get_week_number(self, day_of_period, day_of_week=None): """Return the number of the week of a day within a period. This may be the week number in a year or the week number in a month. - + Usually this will return a value equal to or greater than 1, but if the first week of the period is so short that it actually counts as the last week of the previous period, this function will return 0. - + >>> format = DateTimeFormat(date(2006, 1, 8), Locale.parse('de_DE')) >>> format.get_week_number(6) 1 - + >>> format = DateTimeFormat(date(2006, 1, 8), Locale.parse('en_US')) >>> format.get_week_number(6) 2 - + :param day_of_period: the number of the day in the period (usually either the day of month or the day of year) :param day_of_week: the week day; if ommitted, the week day of the @@ -912,23 +912,23 @@ def get_week_number(self, day_of_period, day_of_week=None): def parse_pattern(pattern): """Parse date, time, and datetime format patterns. - + >>> parse_pattern("MMMMd").format u'%(MMMM)s%(d)s' >>> parse_pattern("MMM d, yyyy").format u'%(MMM)s %(d)s, %(yyyy)s' - + Pattern can contain literal strings in single quotes: - + >>> parse_pattern("H:mm' Uhr 'z").format u'%(H)s:%(mm)s Uhr %(z)s' - + An actual single quote can be used by using two adjacent single quote characters: - + >>> parse_pattern("hh' o''clock'").format u"%(hh)s o'clock" - + :param pattern: the formatting pattern to parse """ if type(pattern) is DateTimePattern: diff --git a/www.clementine-player.org/babel/global.dat b/www.clementine-player.org/babel.bak/global.dat similarity index 100% rename from www.clementine-player.org/babel/global.dat rename to www.clementine-player.org/babel.bak/global.dat diff --git a/www.clementine-player.org/babel/localedata.py b/www.clementine-player.org/babel.bak/localedata.py similarity index 98% rename from www.clementine-player.org/babel/localedata.py rename to www.clementine-player.org/babel.bak/localedata.py index 9308b5e..69c160e 100644 --- a/www.clementine-player.org/babel/localedata.py +++ b/www.clementine-player.org/babel.bak/localedata.py @@ -35,7 +35,7 @@ def exists(name): """Check whether locale data is available for the given locale. - + :param name: the locale identifier string :return: `True` if the locale data exists, `False` otherwise :rtype: `bool` @@ -48,7 +48,7 @@ def exists(name): def list(): """Return a list of all locale identifiers for which locale data is available. - + :return: a list of locale identifiers (strings) :rtype: `list` :since: version 0.8.1 @@ -60,23 +60,23 @@ def list(): def load(name, merge_inherited=True): """Load the locale data for the given locale. - + The locale data is a dictionary that contains much of the data defined by the Common Locale Data Repository (CLDR). This data is stored as a collection of pickle files inside the ``babel`` package. - + >>> d = load('en_US') >>> d['languages']['sv'] u'Swedish' - + Note that the results are cached, and subsequent requests for the same locale return the same dictionary: - + >>> d1 = load('en_US') >>> d2 = load('en_US') >>> d1 is d2 True - + :param name: the locale identifier string (or "root") :param merge_inherited: whether the inherited data should be merged into the data of the requested locale @@ -117,12 +117,12 @@ def load(name, merge_inherited=True): def merge(dict1, dict2): """Merge the data from `dict2` into the `dict1` dictionary, making copies of nested dictionaries. - + >>> d = {1: 'foo', 3: 'baz'} >>> merge(d, {1: 'Foo', 2: 'Bar'}) >>> items = d.items(); items.sort(); items [(1, 'Foo'), (2, 'Bar'), (3, 'baz')] - + :param dict1: the dictionary to merge into :param dict2: the dictionary containing the data that should be merged """ @@ -149,7 +149,7 @@ def merge(dict1, dict2): class Alias(object): """Representation of an alias in the locale data. - + An alias is a value that refers to some other part of the locale data, as specified by the `keys`. """ @@ -162,10 +162,10 @@ def __repr__(self): def resolve(self, data): """Resolve the alias based on the given data. - + This is done recursively, so if one alias resolves to a second alias, that second alias will also be resolved. - + :param data: the locale data :type data: `dict` """ diff --git a/www.clementine-player.org/babel/localedata/af_ZA.dat b/www.clementine-player.org/babel.bak/localedata/af_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/af_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/af_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/ak.dat b/www.clementine-player.org/babel.bak/localedata/ak.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ak.dat rename to www.clementine-player.org/babel.bak/localedata/ak.dat diff --git a/www.clementine-player.org/babel/localedata/ak_GH.dat b/www.clementine-player.org/babel.bak/localedata/ak_GH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ak_GH.dat rename to www.clementine-player.org/babel.bak/localedata/ak_GH.dat diff --git a/www.clementine-player.org/babel/localedata/am.dat b/www.clementine-player.org/babel.bak/localedata/am.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/am.dat rename to www.clementine-player.org/babel.bak/localedata/am.dat diff --git a/www.clementine-player.org/babel/localedata/am_ET.dat b/www.clementine-player.org/babel.bak/localedata/am_ET.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/am_ET.dat rename to www.clementine-player.org/babel.bak/localedata/am_ET.dat diff --git a/www.clementine-player.org/babel/localedata/ar.dat b/www.clementine-player.org/babel.bak/localedata/ar.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar.dat rename to www.clementine-player.org/babel.bak/localedata/ar.dat diff --git a/www.clementine-player.org/babel/localedata/ar_AE.dat b/www.clementine-player.org/babel.bak/localedata/ar_AE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_AE.dat rename to www.clementine-player.org/babel.bak/localedata/ar_AE.dat diff --git a/www.clementine-player.org/babel/localedata/ar_BH.dat b/www.clementine-player.org/babel.bak/localedata/ar_BH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_BH.dat rename to www.clementine-player.org/babel.bak/localedata/ar_BH.dat diff --git a/www.clementine-player.org/babel/localedata/ar_DZ.dat b/www.clementine-player.org/babel.bak/localedata/ar_DZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_DZ.dat rename to www.clementine-player.org/babel.bak/localedata/ar_DZ.dat diff --git a/www.clementine-player.org/babel/localedata/ar_EG.dat b/www.clementine-player.org/babel.bak/localedata/ar_EG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_EG.dat rename to www.clementine-player.org/babel.bak/localedata/ar_EG.dat diff --git a/www.clementine-player.org/babel/localedata/ar_IQ.dat b/www.clementine-player.org/babel.bak/localedata/ar_IQ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_IQ.dat rename to www.clementine-player.org/babel.bak/localedata/ar_IQ.dat diff --git a/www.clementine-player.org/babel/localedata/ar_JO.dat b/www.clementine-player.org/babel.bak/localedata/ar_JO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_JO.dat rename to www.clementine-player.org/babel.bak/localedata/ar_JO.dat diff --git a/www.clementine-player.org/babel/localedata/ar_KW.dat b/www.clementine-player.org/babel.bak/localedata/ar_KW.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_KW.dat rename to www.clementine-player.org/babel.bak/localedata/ar_KW.dat diff --git a/www.clementine-player.org/babel/localedata/ar_LB.dat b/www.clementine-player.org/babel.bak/localedata/ar_LB.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_LB.dat rename to www.clementine-player.org/babel.bak/localedata/ar_LB.dat diff --git a/www.clementine-player.org/babel/localedata/ar_LY.dat b/www.clementine-player.org/babel.bak/localedata/ar_LY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_LY.dat rename to www.clementine-player.org/babel.bak/localedata/ar_LY.dat diff --git a/www.clementine-player.org/babel/localedata/ar_MA.dat b/www.clementine-player.org/babel.bak/localedata/ar_MA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_MA.dat rename to www.clementine-player.org/babel.bak/localedata/ar_MA.dat diff --git a/www.clementine-player.org/babel/localedata/ar_OM.dat b/www.clementine-player.org/babel.bak/localedata/ar_OM.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_OM.dat rename to www.clementine-player.org/babel.bak/localedata/ar_OM.dat diff --git a/www.clementine-player.org/babel/localedata/ar_QA.dat b/www.clementine-player.org/babel.bak/localedata/ar_QA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_QA.dat rename to www.clementine-player.org/babel.bak/localedata/ar_QA.dat diff --git a/www.clementine-player.org/babel/localedata/ar_SA.dat b/www.clementine-player.org/babel.bak/localedata/ar_SA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_SA.dat rename to www.clementine-player.org/babel.bak/localedata/ar_SA.dat diff --git a/www.clementine-player.org/babel/localedata/ar_SD.dat b/www.clementine-player.org/babel.bak/localedata/ar_SD.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_SD.dat rename to www.clementine-player.org/babel.bak/localedata/ar_SD.dat diff --git a/www.clementine-player.org/babel/localedata/ar_SY.dat b/www.clementine-player.org/babel.bak/localedata/ar_SY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_SY.dat rename to www.clementine-player.org/babel.bak/localedata/ar_SY.dat diff --git a/www.clementine-player.org/babel/localedata/ar_TN.dat b/www.clementine-player.org/babel.bak/localedata/ar_TN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_TN.dat rename to www.clementine-player.org/babel.bak/localedata/ar_TN.dat diff --git a/www.clementine-player.org/babel/localedata/ar_YE.dat b/www.clementine-player.org/babel.bak/localedata/ar_YE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ar_YE.dat rename to www.clementine-player.org/babel.bak/localedata/ar_YE.dat diff --git a/www.clementine-player.org/babel/localedata/as.dat b/www.clementine-player.org/babel.bak/localedata/as.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/as.dat rename to www.clementine-player.org/babel.bak/localedata/as.dat diff --git a/www.clementine-player.org/babel/localedata/as_IN.dat b/www.clementine-player.org/babel.bak/localedata/as_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/as_IN.dat rename to www.clementine-player.org/babel.bak/localedata/as_IN.dat diff --git a/www.clementine-player.org/babel/localedata/az.dat b/www.clementine-player.org/babel.bak/localedata/az.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/az.dat rename to www.clementine-player.org/babel.bak/localedata/az.dat diff --git a/www.clementine-player.org/babel/localedata/az_AZ.dat b/www.clementine-player.org/babel.bak/localedata/az_AZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/az_AZ.dat rename to www.clementine-player.org/babel.bak/localedata/az_AZ.dat diff --git a/www.clementine-player.org/babel/localedata/az_Cyrl.dat b/www.clementine-player.org/babel.bak/localedata/az_Cyrl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/az_Cyrl.dat rename to www.clementine-player.org/babel.bak/localedata/az_Cyrl.dat diff --git a/www.clementine-player.org/babel/localedata/az_Cyrl_AZ.dat b/www.clementine-player.org/babel.bak/localedata/az_Cyrl_AZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/az_Cyrl_AZ.dat rename to www.clementine-player.org/babel.bak/localedata/az_Cyrl_AZ.dat diff --git a/www.clementine-player.org/babel/localedata/az_Latn.dat b/www.clementine-player.org/babel.bak/localedata/az_Latn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/az_Latn.dat rename to www.clementine-player.org/babel.bak/localedata/az_Latn.dat diff --git a/www.clementine-player.org/babel/localedata/az_Latn_AZ.dat b/www.clementine-player.org/babel.bak/localedata/az_Latn_AZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/az_Latn_AZ.dat rename to www.clementine-player.org/babel.bak/localedata/az_Latn_AZ.dat diff --git a/www.clementine-player.org/babel/localedata/be.dat b/www.clementine-player.org/babel.bak/localedata/be.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/be.dat rename to www.clementine-player.org/babel.bak/localedata/be.dat diff --git a/www.clementine-player.org/babel/localedata/be_BY.dat b/www.clementine-player.org/babel.bak/localedata/be_BY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/be_BY.dat rename to www.clementine-player.org/babel.bak/localedata/be_BY.dat diff --git a/www.clementine-player.org/babel/localedata/bg.dat b/www.clementine-player.org/babel.bak/localedata/bg.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/bg.dat rename to www.clementine-player.org/babel.bak/localedata/bg.dat diff --git a/www.clementine-player.org/babel/localedata/bg_BG.dat b/www.clementine-player.org/babel.bak/localedata/bg_BG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/bg_BG.dat rename to www.clementine-player.org/babel.bak/localedata/bg_BG.dat diff --git a/www.clementine-player.org/babel/localedata/bn.dat b/www.clementine-player.org/babel.bak/localedata/bn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/bn.dat rename to www.clementine-player.org/babel.bak/localedata/bn.dat diff --git a/www.clementine-player.org/babel/localedata/bn_BD.dat b/www.clementine-player.org/babel.bak/localedata/bn_BD.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/bn_BD.dat rename to www.clementine-player.org/babel.bak/localedata/bn_BD.dat diff --git a/www.clementine-player.org/babel/localedata/bn_IN.dat b/www.clementine-player.org/babel.bak/localedata/bn_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/bn_IN.dat rename to www.clementine-player.org/babel.bak/localedata/bn_IN.dat diff --git a/www.clementine-player.org/babel/localedata/bs.dat b/www.clementine-player.org/babel.bak/localedata/bs.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/bs.dat rename to www.clementine-player.org/babel.bak/localedata/bs.dat diff --git a/www.clementine-player.org/babel/localedata/bs_BA.dat b/www.clementine-player.org/babel.bak/localedata/bs_BA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/bs_BA.dat rename to www.clementine-player.org/babel.bak/localedata/bs_BA.dat diff --git a/www.clementine-player.org/babel/localedata/byn.dat b/www.clementine-player.org/babel.bak/localedata/byn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/byn.dat rename to www.clementine-player.org/babel.bak/localedata/byn.dat diff --git a/www.clementine-player.org/babel/localedata/byn_ER.dat b/www.clementine-player.org/babel.bak/localedata/byn_ER.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/byn_ER.dat rename to www.clementine-player.org/babel.bak/localedata/byn_ER.dat diff --git a/www.clementine-player.org/babel/localedata/ca.dat b/www.clementine-player.org/babel.bak/localedata/ca.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ca.dat rename to www.clementine-player.org/babel.bak/localedata/ca.dat diff --git a/www.clementine-player.org/babel/localedata/ca_ES.dat b/www.clementine-player.org/babel.bak/localedata/ca_ES.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ca_ES.dat rename to www.clementine-player.org/babel.bak/localedata/ca_ES.dat diff --git a/www.clementine-player.org/babel/localedata/cch.dat b/www.clementine-player.org/babel.bak/localedata/cch.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/cch.dat rename to www.clementine-player.org/babel.bak/localedata/cch.dat diff --git a/www.clementine-player.org/babel/localedata/cch_NG.dat b/www.clementine-player.org/babel.bak/localedata/cch_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/cch_NG.dat rename to www.clementine-player.org/babel.bak/localedata/cch_NG.dat diff --git a/www.clementine-player.org/babel/localedata/cop.dat b/www.clementine-player.org/babel.bak/localedata/cop.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/cop.dat rename to www.clementine-player.org/babel.bak/localedata/cop.dat diff --git a/www.clementine-player.org/babel/localedata/cs.dat b/www.clementine-player.org/babel.bak/localedata/cs.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/cs.dat rename to www.clementine-player.org/babel.bak/localedata/cs.dat diff --git a/www.clementine-player.org/babel/localedata/cs_CZ.dat b/www.clementine-player.org/babel.bak/localedata/cs_CZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/cs_CZ.dat rename to www.clementine-player.org/babel.bak/localedata/cs_CZ.dat diff --git a/www.clementine-player.org/babel/localedata/cy.dat b/www.clementine-player.org/babel.bak/localedata/cy.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/cy.dat rename to www.clementine-player.org/babel.bak/localedata/cy.dat diff --git a/www.clementine-player.org/babel/localedata/cy_GB.dat b/www.clementine-player.org/babel.bak/localedata/cy_GB.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/cy_GB.dat rename to www.clementine-player.org/babel.bak/localedata/cy_GB.dat diff --git a/www.clementine-player.org/babel/localedata/da.dat b/www.clementine-player.org/babel.bak/localedata/da.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/da.dat rename to www.clementine-player.org/babel.bak/localedata/da.dat diff --git a/www.clementine-player.org/babel/localedata/da_DK.dat b/www.clementine-player.org/babel.bak/localedata/da_DK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/da_DK.dat rename to www.clementine-player.org/babel.bak/localedata/da_DK.dat diff --git a/www.clementine-player.org/babel/localedata/de.dat b/www.clementine-player.org/babel.bak/localedata/de.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/de.dat rename to www.clementine-player.org/babel.bak/localedata/de.dat diff --git a/www.clementine-player.org/babel/localedata/de_AT.dat b/www.clementine-player.org/babel.bak/localedata/de_AT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/de_AT.dat rename to www.clementine-player.org/babel.bak/localedata/de_AT.dat diff --git a/www.clementine-player.org/babel/localedata/de_BE.dat b/www.clementine-player.org/babel.bak/localedata/de_BE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/de_BE.dat rename to www.clementine-player.org/babel.bak/localedata/de_BE.dat diff --git a/www.clementine-player.org/babel/localedata/de_CH.dat b/www.clementine-player.org/babel.bak/localedata/de_CH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/de_CH.dat rename to www.clementine-player.org/babel.bak/localedata/de_CH.dat diff --git a/www.clementine-player.org/babel/localedata/de_DE.dat b/www.clementine-player.org/babel.bak/localedata/de_DE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/de_DE.dat rename to www.clementine-player.org/babel.bak/localedata/de_DE.dat diff --git a/www.clementine-player.org/babel/localedata/de_LI.dat b/www.clementine-player.org/babel.bak/localedata/de_LI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/de_LI.dat rename to www.clementine-player.org/babel.bak/localedata/de_LI.dat diff --git a/www.clementine-player.org/babel/localedata/de_LU.dat b/www.clementine-player.org/babel.bak/localedata/de_LU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/de_LU.dat rename to www.clementine-player.org/babel.bak/localedata/de_LU.dat diff --git a/www.clementine-player.org/babel/localedata/dv.dat b/www.clementine-player.org/babel.bak/localedata/dv.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/dv.dat rename to www.clementine-player.org/babel.bak/localedata/dv.dat diff --git a/www.clementine-player.org/babel/localedata/dv_MV.dat b/www.clementine-player.org/babel.bak/localedata/dv_MV.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/dv_MV.dat rename to www.clementine-player.org/babel.bak/localedata/dv_MV.dat diff --git a/www.clementine-player.org/babel/localedata/dz.dat b/www.clementine-player.org/babel.bak/localedata/dz.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/dz.dat rename to www.clementine-player.org/babel.bak/localedata/dz.dat diff --git a/www.clementine-player.org/babel/localedata/dz_BT.dat b/www.clementine-player.org/babel.bak/localedata/dz_BT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/dz_BT.dat rename to www.clementine-player.org/babel.bak/localedata/dz_BT.dat diff --git a/www.clementine-player.org/babel/localedata/ee.dat b/www.clementine-player.org/babel.bak/localedata/ee.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ee.dat rename to www.clementine-player.org/babel.bak/localedata/ee.dat diff --git a/www.clementine-player.org/babel/localedata/ee_GH.dat b/www.clementine-player.org/babel.bak/localedata/ee_GH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ee_GH.dat rename to www.clementine-player.org/babel.bak/localedata/ee_GH.dat diff --git a/www.clementine-player.org/babel/localedata/ee_TG.dat b/www.clementine-player.org/babel.bak/localedata/ee_TG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ee_TG.dat rename to www.clementine-player.org/babel.bak/localedata/ee_TG.dat diff --git a/www.clementine-player.org/babel/localedata/el.dat b/www.clementine-player.org/babel.bak/localedata/el.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/el.dat rename to www.clementine-player.org/babel.bak/localedata/el.dat diff --git a/www.clementine-player.org/babel/localedata/el_CY.dat b/www.clementine-player.org/babel.bak/localedata/el_CY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/el_CY.dat rename to www.clementine-player.org/babel.bak/localedata/el_CY.dat diff --git a/www.clementine-player.org/babel/localedata/el_GR.dat b/www.clementine-player.org/babel.bak/localedata/el_GR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/el_GR.dat rename to www.clementine-player.org/babel.bak/localedata/el_GR.dat diff --git a/www.clementine-player.org/babel/localedata/el_POLYTON.dat b/www.clementine-player.org/babel.bak/localedata/el_POLYTON.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/el_POLYTON.dat rename to www.clementine-player.org/babel.bak/localedata/el_POLYTON.dat diff --git a/www.clementine-player.org/babel/localedata/en.dat b/www.clementine-player.org/babel.bak/localedata/en.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en.dat rename to www.clementine-player.org/babel.bak/localedata/en.dat diff --git a/www.clementine-player.org/babel/localedata/en_AS.dat b/www.clementine-player.org/babel.bak/localedata/en_AS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_AS.dat rename to www.clementine-player.org/babel.bak/localedata/en_AS.dat diff --git a/www.clementine-player.org/babel/localedata/en_AU.dat b/www.clementine-player.org/babel.bak/localedata/en_AU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_AU.dat rename to www.clementine-player.org/babel.bak/localedata/en_AU.dat diff --git a/www.clementine-player.org/babel/localedata/en_BE.dat b/www.clementine-player.org/babel.bak/localedata/en_BE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_BE.dat rename to www.clementine-player.org/babel.bak/localedata/en_BE.dat diff --git a/www.clementine-player.org/babel/localedata/en_BW.dat b/www.clementine-player.org/babel.bak/localedata/en_BW.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_BW.dat rename to www.clementine-player.org/babel.bak/localedata/en_BW.dat diff --git a/www.clementine-player.org/babel/localedata/en_BZ.dat b/www.clementine-player.org/babel.bak/localedata/en_BZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_BZ.dat rename to www.clementine-player.org/babel.bak/localedata/en_BZ.dat diff --git a/www.clementine-player.org/babel/localedata/en_CA.dat b/www.clementine-player.org/babel.bak/localedata/en_CA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_CA.dat rename to www.clementine-player.org/babel.bak/localedata/en_CA.dat diff --git a/www.clementine-player.org/babel/localedata/en_Dsrt.dat b/www.clementine-player.org/babel.bak/localedata/en_Dsrt.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_Dsrt.dat rename to www.clementine-player.org/babel.bak/localedata/en_Dsrt.dat diff --git a/www.clementine-player.org/babel/localedata/en_Dsrt_US.dat b/www.clementine-player.org/babel.bak/localedata/en_Dsrt_US.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_Dsrt_US.dat rename to www.clementine-player.org/babel.bak/localedata/en_Dsrt_US.dat diff --git a/www.clementine-player.org/babel/localedata/en_GB.dat b/www.clementine-player.org/babel.bak/localedata/en_GB.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_GB.dat rename to www.clementine-player.org/babel.bak/localedata/en_GB.dat diff --git a/www.clementine-player.org/babel/localedata/en_GU.dat b/www.clementine-player.org/babel.bak/localedata/en_GU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_GU.dat rename to www.clementine-player.org/babel.bak/localedata/en_GU.dat diff --git a/www.clementine-player.org/babel/localedata/en_HK.dat b/www.clementine-player.org/babel.bak/localedata/en_HK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_HK.dat rename to www.clementine-player.org/babel.bak/localedata/en_HK.dat diff --git a/www.clementine-player.org/babel/localedata/en_IE.dat b/www.clementine-player.org/babel.bak/localedata/en_IE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_IE.dat rename to www.clementine-player.org/babel.bak/localedata/en_IE.dat diff --git a/www.clementine-player.org/babel/localedata/en_IN.dat b/www.clementine-player.org/babel.bak/localedata/en_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_IN.dat rename to www.clementine-player.org/babel.bak/localedata/en_IN.dat diff --git a/www.clementine-player.org/babel/localedata/en_JM.dat b/www.clementine-player.org/babel.bak/localedata/en_JM.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_JM.dat rename to www.clementine-player.org/babel.bak/localedata/en_JM.dat diff --git a/www.clementine-player.org/babel/localedata/en_MH.dat b/www.clementine-player.org/babel.bak/localedata/en_MH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_MH.dat rename to www.clementine-player.org/babel.bak/localedata/en_MH.dat diff --git a/www.clementine-player.org/babel/localedata/en_MP.dat b/www.clementine-player.org/babel.bak/localedata/en_MP.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_MP.dat rename to www.clementine-player.org/babel.bak/localedata/en_MP.dat diff --git a/www.clementine-player.org/babel/localedata/en_MT.dat b/www.clementine-player.org/babel.bak/localedata/en_MT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_MT.dat rename to www.clementine-player.org/babel.bak/localedata/en_MT.dat diff --git a/www.clementine-player.org/babel/localedata/en_NA.dat b/www.clementine-player.org/babel.bak/localedata/en_NA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_NA.dat rename to www.clementine-player.org/babel.bak/localedata/en_NA.dat diff --git a/www.clementine-player.org/babel/localedata/en_NZ.dat b/www.clementine-player.org/babel.bak/localedata/en_NZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_NZ.dat rename to www.clementine-player.org/babel.bak/localedata/en_NZ.dat diff --git a/www.clementine-player.org/babel/localedata/en_PH.dat b/www.clementine-player.org/babel.bak/localedata/en_PH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_PH.dat rename to www.clementine-player.org/babel.bak/localedata/en_PH.dat diff --git a/www.clementine-player.org/babel/localedata/en_PK.dat b/www.clementine-player.org/babel.bak/localedata/en_PK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_PK.dat rename to www.clementine-player.org/babel.bak/localedata/en_PK.dat diff --git a/www.clementine-player.org/babel/localedata/en_SG.dat b/www.clementine-player.org/babel.bak/localedata/en_SG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_SG.dat rename to www.clementine-player.org/babel.bak/localedata/en_SG.dat diff --git a/www.clementine-player.org/babel/localedata/en_Shaw.dat b/www.clementine-player.org/babel.bak/localedata/en_Shaw.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_Shaw.dat rename to www.clementine-player.org/babel.bak/localedata/en_Shaw.dat diff --git a/www.clementine-player.org/babel/localedata/en_TT.dat b/www.clementine-player.org/babel.bak/localedata/en_TT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_TT.dat rename to www.clementine-player.org/babel.bak/localedata/en_TT.dat diff --git a/www.clementine-player.org/babel/localedata/en_UM.dat b/www.clementine-player.org/babel.bak/localedata/en_UM.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_UM.dat rename to www.clementine-player.org/babel.bak/localedata/en_UM.dat diff --git a/www.clementine-player.org/babel/localedata/en_US.dat b/www.clementine-player.org/babel.bak/localedata/en_US.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_US.dat rename to www.clementine-player.org/babel.bak/localedata/en_US.dat diff --git a/www.clementine-player.org/babel/localedata/en_US_POSIX.dat b/www.clementine-player.org/babel.bak/localedata/en_US_POSIX.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_US_POSIX.dat rename to www.clementine-player.org/babel.bak/localedata/en_US_POSIX.dat diff --git a/www.clementine-player.org/babel/localedata/en_VI.dat b/www.clementine-player.org/babel.bak/localedata/en_VI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_VI.dat rename to www.clementine-player.org/babel.bak/localedata/en_VI.dat diff --git a/www.clementine-player.org/babel/localedata/en_ZA.dat b/www.clementine-player.org/babel.bak/localedata/en_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/en_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/en_ZW.dat b/www.clementine-player.org/babel.bak/localedata/en_ZW.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/en_ZW.dat rename to www.clementine-player.org/babel.bak/localedata/en_ZW.dat diff --git a/www.clementine-player.org/babel/localedata/eo.dat b/www.clementine-player.org/babel.bak/localedata/eo.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/eo.dat rename to www.clementine-player.org/babel.bak/localedata/eo.dat diff --git a/www.clementine-player.org/babel/localedata/es.dat b/www.clementine-player.org/babel.bak/localedata/es.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es.dat rename to www.clementine-player.org/babel.bak/localedata/es.dat diff --git a/www.clementine-player.org/babel/localedata/es_AR.dat b/www.clementine-player.org/babel.bak/localedata/es_AR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_AR.dat rename to www.clementine-player.org/babel.bak/localedata/es_AR.dat diff --git a/www.clementine-player.org/babel/localedata/es_BO.dat b/www.clementine-player.org/babel.bak/localedata/es_BO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_BO.dat rename to www.clementine-player.org/babel.bak/localedata/es_BO.dat diff --git a/www.clementine-player.org/babel/localedata/es_CL.dat b/www.clementine-player.org/babel.bak/localedata/es_CL.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_CL.dat rename to www.clementine-player.org/babel.bak/localedata/es_CL.dat diff --git a/www.clementine-player.org/babel/localedata/es_CO.dat b/www.clementine-player.org/babel.bak/localedata/es_CO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_CO.dat rename to www.clementine-player.org/babel.bak/localedata/es_CO.dat diff --git a/www.clementine-player.org/babel/localedata/es_CR.dat b/www.clementine-player.org/babel.bak/localedata/es_CR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_CR.dat rename to www.clementine-player.org/babel.bak/localedata/es_CR.dat diff --git a/www.clementine-player.org/babel/localedata/es_DO.dat b/www.clementine-player.org/babel.bak/localedata/es_DO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_DO.dat rename to www.clementine-player.org/babel.bak/localedata/es_DO.dat diff --git a/www.clementine-player.org/babel/localedata/es_EC.dat b/www.clementine-player.org/babel.bak/localedata/es_EC.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_EC.dat rename to www.clementine-player.org/babel.bak/localedata/es_EC.dat diff --git a/www.clementine-player.org/babel/localedata/es_ES.dat b/www.clementine-player.org/babel.bak/localedata/es_ES.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_ES.dat rename to www.clementine-player.org/babel.bak/localedata/es_ES.dat diff --git a/www.clementine-player.org/babel/localedata/es_GT.dat b/www.clementine-player.org/babel.bak/localedata/es_GT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_GT.dat rename to www.clementine-player.org/babel.bak/localedata/es_GT.dat diff --git a/www.clementine-player.org/babel/localedata/es_HN.dat b/www.clementine-player.org/babel.bak/localedata/es_HN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_HN.dat rename to www.clementine-player.org/babel.bak/localedata/es_HN.dat diff --git a/www.clementine-player.org/babel/localedata/es_MX.dat b/www.clementine-player.org/babel.bak/localedata/es_MX.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_MX.dat rename to www.clementine-player.org/babel.bak/localedata/es_MX.dat diff --git a/www.clementine-player.org/babel/localedata/es_NI.dat b/www.clementine-player.org/babel.bak/localedata/es_NI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_NI.dat rename to www.clementine-player.org/babel.bak/localedata/es_NI.dat diff --git a/www.clementine-player.org/babel/localedata/es_PA.dat b/www.clementine-player.org/babel.bak/localedata/es_PA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_PA.dat rename to www.clementine-player.org/babel.bak/localedata/es_PA.dat diff --git a/www.clementine-player.org/babel/localedata/es_PE.dat b/www.clementine-player.org/babel.bak/localedata/es_PE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_PE.dat rename to www.clementine-player.org/babel.bak/localedata/es_PE.dat diff --git a/www.clementine-player.org/babel/localedata/es_PR.dat b/www.clementine-player.org/babel.bak/localedata/es_PR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_PR.dat rename to www.clementine-player.org/babel.bak/localedata/es_PR.dat diff --git a/www.clementine-player.org/babel/localedata/es_PY.dat b/www.clementine-player.org/babel.bak/localedata/es_PY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_PY.dat rename to www.clementine-player.org/babel.bak/localedata/es_PY.dat diff --git a/www.clementine-player.org/babel/localedata/es_SV.dat b/www.clementine-player.org/babel.bak/localedata/es_SV.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_SV.dat rename to www.clementine-player.org/babel.bak/localedata/es_SV.dat diff --git a/www.clementine-player.org/babel/localedata/es_US.dat b/www.clementine-player.org/babel.bak/localedata/es_US.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_US.dat rename to www.clementine-player.org/babel.bak/localedata/es_US.dat diff --git a/www.clementine-player.org/babel/localedata/es_UY.dat b/www.clementine-player.org/babel.bak/localedata/es_UY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_UY.dat rename to www.clementine-player.org/babel.bak/localedata/es_UY.dat diff --git a/www.clementine-player.org/babel/localedata/es_VE.dat b/www.clementine-player.org/babel.bak/localedata/es_VE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/es_VE.dat rename to www.clementine-player.org/babel.bak/localedata/es_VE.dat diff --git a/www.clementine-player.org/babel/localedata/et.dat b/www.clementine-player.org/babel.bak/localedata/et.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/et.dat rename to www.clementine-player.org/babel.bak/localedata/et.dat diff --git a/www.clementine-player.org/babel/localedata/et_EE.dat b/www.clementine-player.org/babel.bak/localedata/et_EE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/et_EE.dat rename to www.clementine-player.org/babel.bak/localedata/et_EE.dat diff --git a/www.clementine-player.org/babel/localedata/eu.dat b/www.clementine-player.org/babel.bak/localedata/eu.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/eu.dat rename to www.clementine-player.org/babel.bak/localedata/eu.dat diff --git a/www.clementine-player.org/babel/localedata/eu_ES.dat b/www.clementine-player.org/babel.bak/localedata/eu_ES.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/eu_ES.dat rename to www.clementine-player.org/babel.bak/localedata/eu_ES.dat diff --git a/www.clementine-player.org/babel/localedata/fa.dat b/www.clementine-player.org/babel.bak/localedata/fa.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fa.dat rename to www.clementine-player.org/babel.bak/localedata/fa.dat diff --git a/www.clementine-player.org/babel/localedata/fa_AF.dat b/www.clementine-player.org/babel.bak/localedata/fa_AF.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fa_AF.dat rename to www.clementine-player.org/babel.bak/localedata/fa_AF.dat diff --git a/www.clementine-player.org/babel/localedata/fa_IR.dat b/www.clementine-player.org/babel.bak/localedata/fa_IR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fa_IR.dat rename to www.clementine-player.org/babel.bak/localedata/fa_IR.dat diff --git a/www.clementine-player.org/babel/localedata/fi.dat b/www.clementine-player.org/babel.bak/localedata/fi.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fi.dat rename to www.clementine-player.org/babel.bak/localedata/fi.dat diff --git a/www.clementine-player.org/babel/localedata/fi_FI.dat b/www.clementine-player.org/babel.bak/localedata/fi_FI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fi_FI.dat rename to www.clementine-player.org/babel.bak/localedata/fi_FI.dat diff --git a/www.clementine-player.org/babel/localedata/fil.dat b/www.clementine-player.org/babel.bak/localedata/fil.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fil.dat rename to www.clementine-player.org/babel.bak/localedata/fil.dat diff --git a/www.clementine-player.org/babel/localedata/fil_PH.dat b/www.clementine-player.org/babel.bak/localedata/fil_PH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fil_PH.dat rename to www.clementine-player.org/babel.bak/localedata/fil_PH.dat diff --git a/www.clementine-player.org/babel/localedata/fo.dat b/www.clementine-player.org/babel.bak/localedata/fo.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fo.dat rename to www.clementine-player.org/babel.bak/localedata/fo.dat diff --git a/www.clementine-player.org/babel/localedata/fo_FO.dat b/www.clementine-player.org/babel.bak/localedata/fo_FO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fo_FO.dat rename to www.clementine-player.org/babel.bak/localedata/fo_FO.dat diff --git a/www.clementine-player.org/babel/localedata/fr.dat b/www.clementine-player.org/babel.bak/localedata/fr.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr.dat rename to www.clementine-player.org/babel.bak/localedata/fr.dat diff --git a/www.clementine-player.org/babel/localedata/fr_BE.dat b/www.clementine-player.org/babel.bak/localedata/fr_BE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr_BE.dat rename to www.clementine-player.org/babel.bak/localedata/fr_BE.dat diff --git a/www.clementine-player.org/babel/localedata/fr_CA.dat b/www.clementine-player.org/babel.bak/localedata/fr_CA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr_CA.dat rename to www.clementine-player.org/babel.bak/localedata/fr_CA.dat diff --git a/www.clementine-player.org/babel/localedata/fr_CH.dat b/www.clementine-player.org/babel.bak/localedata/fr_CH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr_CH.dat rename to www.clementine-player.org/babel.bak/localedata/fr_CH.dat diff --git a/www.clementine-player.org/babel/localedata/fr_FR.dat b/www.clementine-player.org/babel.bak/localedata/fr_FR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr_FR.dat rename to www.clementine-player.org/babel.bak/localedata/fr_FR.dat diff --git a/www.clementine-player.org/babel/localedata/fr_LU.dat b/www.clementine-player.org/babel.bak/localedata/fr_LU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr_LU.dat rename to www.clementine-player.org/babel.bak/localedata/fr_LU.dat diff --git a/www.clementine-player.org/babel/localedata/fr_MC.dat b/www.clementine-player.org/babel.bak/localedata/fr_MC.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr_MC.dat rename to www.clementine-player.org/babel.bak/localedata/fr_MC.dat diff --git a/www.clementine-player.org/babel/localedata/fr_SN.dat b/www.clementine-player.org/babel.bak/localedata/fr_SN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fr_SN.dat rename to www.clementine-player.org/babel.bak/localedata/fr_SN.dat diff --git a/www.clementine-player.org/babel/localedata/fur.dat b/www.clementine-player.org/babel.bak/localedata/fur.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fur.dat rename to www.clementine-player.org/babel.bak/localedata/fur.dat diff --git a/www.clementine-player.org/babel/localedata/fur_IT.dat b/www.clementine-player.org/babel.bak/localedata/fur_IT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/fur_IT.dat rename to www.clementine-player.org/babel.bak/localedata/fur_IT.dat diff --git a/www.clementine-player.org/babel/localedata/ga.dat b/www.clementine-player.org/babel.bak/localedata/ga.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ga.dat rename to www.clementine-player.org/babel.bak/localedata/ga.dat diff --git a/www.clementine-player.org/babel/localedata/ga_IE.dat b/www.clementine-player.org/babel.bak/localedata/ga_IE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ga_IE.dat rename to www.clementine-player.org/babel.bak/localedata/ga_IE.dat diff --git a/www.clementine-player.org/babel/localedata/gaa.dat b/www.clementine-player.org/babel.bak/localedata/gaa.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gaa.dat rename to www.clementine-player.org/babel.bak/localedata/gaa.dat diff --git a/www.clementine-player.org/babel/localedata/gaa_GH.dat b/www.clementine-player.org/babel.bak/localedata/gaa_GH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gaa_GH.dat rename to www.clementine-player.org/babel.bak/localedata/gaa_GH.dat diff --git a/www.clementine-player.org/babel/localedata/gez.dat b/www.clementine-player.org/babel.bak/localedata/gez.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gez.dat rename to www.clementine-player.org/babel.bak/localedata/gez.dat diff --git a/www.clementine-player.org/babel/localedata/gez_ER.dat b/www.clementine-player.org/babel.bak/localedata/gez_ER.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gez_ER.dat rename to www.clementine-player.org/babel.bak/localedata/gez_ER.dat diff --git a/www.clementine-player.org/babel/localedata/gez_ET.dat b/www.clementine-player.org/babel.bak/localedata/gez_ET.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gez_ET.dat rename to www.clementine-player.org/babel.bak/localedata/gez_ET.dat diff --git a/www.clementine-player.org/babel/localedata/gl.dat b/www.clementine-player.org/babel.bak/localedata/gl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gl.dat rename to www.clementine-player.org/babel.bak/localedata/gl.dat diff --git a/www.clementine-player.org/babel/localedata/gl_ES.dat b/www.clementine-player.org/babel.bak/localedata/gl_ES.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gl_ES.dat rename to www.clementine-player.org/babel.bak/localedata/gl_ES.dat diff --git a/www.clementine-player.org/babel/localedata/gu.dat b/www.clementine-player.org/babel.bak/localedata/gu.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gu.dat rename to www.clementine-player.org/babel.bak/localedata/gu.dat diff --git a/www.clementine-player.org/babel/localedata/gu_IN.dat b/www.clementine-player.org/babel.bak/localedata/gu_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gu_IN.dat rename to www.clementine-player.org/babel.bak/localedata/gu_IN.dat diff --git a/www.clementine-player.org/babel/localedata/gv.dat b/www.clementine-player.org/babel.bak/localedata/gv.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gv.dat rename to www.clementine-player.org/babel.bak/localedata/gv.dat diff --git a/www.clementine-player.org/babel/localedata/gv_GB.dat b/www.clementine-player.org/babel.bak/localedata/gv_GB.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/gv_GB.dat rename to www.clementine-player.org/babel.bak/localedata/gv_GB.dat diff --git a/www.clementine-player.org/babel/localedata/ha.dat b/www.clementine-player.org/babel.bak/localedata/ha.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha.dat rename to www.clementine-player.org/babel.bak/localedata/ha.dat diff --git a/www.clementine-player.org/babel/localedata/ha_Arab.dat b/www.clementine-player.org/babel.bak/localedata/ha_Arab.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_Arab.dat rename to www.clementine-player.org/babel.bak/localedata/ha_Arab.dat diff --git a/www.clementine-player.org/babel/localedata/ha_Arab_NG.dat b/www.clementine-player.org/babel.bak/localedata/ha_Arab_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_Arab_NG.dat rename to www.clementine-player.org/babel.bak/localedata/ha_Arab_NG.dat diff --git a/www.clementine-player.org/babel/localedata/ha_Arab_SD.dat b/www.clementine-player.org/babel.bak/localedata/ha_Arab_SD.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_Arab_SD.dat rename to www.clementine-player.org/babel.bak/localedata/ha_Arab_SD.dat diff --git a/www.clementine-player.org/babel/localedata/ha_GH.dat b/www.clementine-player.org/babel.bak/localedata/ha_GH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_GH.dat rename to www.clementine-player.org/babel.bak/localedata/ha_GH.dat diff --git a/www.clementine-player.org/babel/localedata/ha_Latn.dat b/www.clementine-player.org/babel.bak/localedata/ha_Latn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_Latn.dat rename to www.clementine-player.org/babel.bak/localedata/ha_Latn.dat diff --git a/www.clementine-player.org/babel/localedata/ha_Latn_GH.dat b/www.clementine-player.org/babel.bak/localedata/ha_Latn_GH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_Latn_GH.dat rename to www.clementine-player.org/babel.bak/localedata/ha_Latn_GH.dat diff --git a/www.clementine-player.org/babel/localedata/ha_Latn_NE.dat b/www.clementine-player.org/babel.bak/localedata/ha_Latn_NE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_Latn_NE.dat rename to www.clementine-player.org/babel.bak/localedata/ha_Latn_NE.dat diff --git a/www.clementine-player.org/babel/localedata/ha_Latn_NG.dat b/www.clementine-player.org/babel.bak/localedata/ha_Latn_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_Latn_NG.dat rename to www.clementine-player.org/babel.bak/localedata/ha_Latn_NG.dat diff --git a/www.clementine-player.org/babel/localedata/ha_NE.dat b/www.clementine-player.org/babel.bak/localedata/ha_NE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_NE.dat rename to www.clementine-player.org/babel.bak/localedata/ha_NE.dat diff --git a/www.clementine-player.org/babel/localedata/ha_NG.dat b/www.clementine-player.org/babel.bak/localedata/ha_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_NG.dat rename to www.clementine-player.org/babel.bak/localedata/ha_NG.dat diff --git a/www.clementine-player.org/babel/localedata/ha_SD.dat b/www.clementine-player.org/babel.bak/localedata/ha_SD.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ha_SD.dat rename to www.clementine-player.org/babel.bak/localedata/ha_SD.dat diff --git a/www.clementine-player.org/babel/localedata/haw.dat b/www.clementine-player.org/babel.bak/localedata/haw.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/haw.dat rename to www.clementine-player.org/babel.bak/localedata/haw.dat diff --git a/www.clementine-player.org/babel/localedata/haw_US.dat b/www.clementine-player.org/babel.bak/localedata/haw_US.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/haw_US.dat rename to www.clementine-player.org/babel.bak/localedata/haw_US.dat diff --git a/www.clementine-player.org/babel/localedata/he.dat b/www.clementine-player.org/babel.bak/localedata/he.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/he.dat rename to www.clementine-player.org/babel.bak/localedata/he.dat diff --git a/www.clementine-player.org/babel/localedata/he_IL.dat b/www.clementine-player.org/babel.bak/localedata/he_IL.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/he_IL.dat rename to www.clementine-player.org/babel.bak/localedata/he_IL.dat diff --git a/www.clementine-player.org/babel/localedata/hi.dat b/www.clementine-player.org/babel.bak/localedata/hi.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hi.dat rename to www.clementine-player.org/babel.bak/localedata/hi.dat diff --git a/www.clementine-player.org/babel/localedata/hi_IN.dat b/www.clementine-player.org/babel.bak/localedata/hi_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hi_IN.dat rename to www.clementine-player.org/babel.bak/localedata/hi_IN.dat diff --git a/www.clementine-player.org/babel/localedata/hr.dat b/www.clementine-player.org/babel.bak/localedata/hr.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hr.dat rename to www.clementine-player.org/babel.bak/localedata/hr.dat diff --git a/www.clementine-player.org/babel/localedata/hr_HR.dat b/www.clementine-player.org/babel.bak/localedata/hr_HR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hr_HR.dat rename to www.clementine-player.org/babel.bak/localedata/hr_HR.dat diff --git a/www.clementine-player.org/babel/localedata/hu.dat b/www.clementine-player.org/babel.bak/localedata/hu.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hu.dat rename to www.clementine-player.org/babel.bak/localedata/hu.dat diff --git a/www.clementine-player.org/babel/localedata/hu_HU.dat b/www.clementine-player.org/babel.bak/localedata/hu_HU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hu_HU.dat rename to www.clementine-player.org/babel.bak/localedata/hu_HU.dat diff --git a/www.clementine-player.org/babel/localedata/hy.dat b/www.clementine-player.org/babel.bak/localedata/hy.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hy.dat rename to www.clementine-player.org/babel.bak/localedata/hy.dat diff --git a/www.clementine-player.org/babel/localedata/hy_AM.dat b/www.clementine-player.org/babel.bak/localedata/hy_AM.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hy_AM.dat rename to www.clementine-player.org/babel.bak/localedata/hy_AM.dat diff --git a/www.clementine-player.org/babel/localedata/hy_AM_REVISED.dat b/www.clementine-player.org/babel.bak/localedata/hy_AM_REVISED.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/hy_AM_REVISED.dat rename to www.clementine-player.org/babel.bak/localedata/hy_AM_REVISED.dat diff --git a/www.clementine-player.org/babel/localedata/ia.dat b/www.clementine-player.org/babel.bak/localedata/ia.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ia.dat rename to www.clementine-player.org/babel.bak/localedata/ia.dat diff --git a/www.clementine-player.org/babel/localedata/id.dat b/www.clementine-player.org/babel.bak/localedata/id.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/id.dat rename to www.clementine-player.org/babel.bak/localedata/id.dat diff --git a/www.clementine-player.org/babel/localedata/id_ID.dat b/www.clementine-player.org/babel.bak/localedata/id_ID.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/id_ID.dat rename to www.clementine-player.org/babel.bak/localedata/id_ID.dat diff --git a/www.clementine-player.org/babel/localedata/ig.dat b/www.clementine-player.org/babel.bak/localedata/ig.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ig.dat rename to www.clementine-player.org/babel.bak/localedata/ig.dat diff --git a/www.clementine-player.org/babel/localedata/ig_NG.dat b/www.clementine-player.org/babel.bak/localedata/ig_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ig_NG.dat rename to www.clementine-player.org/babel.bak/localedata/ig_NG.dat diff --git a/www.clementine-player.org/babel/localedata/ii.dat b/www.clementine-player.org/babel.bak/localedata/ii.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ii.dat rename to www.clementine-player.org/babel.bak/localedata/ii.dat diff --git a/www.clementine-player.org/babel/localedata/ii_CN.dat b/www.clementine-player.org/babel.bak/localedata/ii_CN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ii_CN.dat rename to www.clementine-player.org/babel.bak/localedata/ii_CN.dat diff --git a/www.clementine-player.org/babel/localedata/in.dat b/www.clementine-player.org/babel.bak/localedata/in.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/in.dat rename to www.clementine-player.org/babel.bak/localedata/in.dat diff --git a/www.clementine-player.org/babel/localedata/is.dat b/www.clementine-player.org/babel.bak/localedata/is.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/is.dat rename to www.clementine-player.org/babel.bak/localedata/is.dat diff --git a/www.clementine-player.org/babel/localedata/is_IS.dat b/www.clementine-player.org/babel.bak/localedata/is_IS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/is_IS.dat rename to www.clementine-player.org/babel.bak/localedata/is_IS.dat diff --git a/www.clementine-player.org/babel/localedata/it.dat b/www.clementine-player.org/babel.bak/localedata/it.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/it.dat rename to www.clementine-player.org/babel.bak/localedata/it.dat diff --git a/www.clementine-player.org/babel/localedata/it_CH.dat b/www.clementine-player.org/babel.bak/localedata/it_CH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/it_CH.dat rename to www.clementine-player.org/babel.bak/localedata/it_CH.dat diff --git a/www.clementine-player.org/babel/localedata/it_IT.dat b/www.clementine-player.org/babel.bak/localedata/it_IT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/it_IT.dat rename to www.clementine-player.org/babel.bak/localedata/it_IT.dat diff --git a/www.clementine-player.org/babel/localedata/iu.dat b/www.clementine-player.org/babel.bak/localedata/iu.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/iu.dat rename to www.clementine-player.org/babel.bak/localedata/iu.dat diff --git a/www.clementine-player.org/babel/localedata/iw.dat b/www.clementine-player.org/babel.bak/localedata/iw.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/iw.dat rename to www.clementine-player.org/babel.bak/localedata/iw.dat diff --git a/www.clementine-player.org/babel/localedata/ja.dat b/www.clementine-player.org/babel.bak/localedata/ja.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ja.dat rename to www.clementine-player.org/babel.bak/localedata/ja.dat diff --git a/www.clementine-player.org/babel/localedata/ja_JP.dat b/www.clementine-player.org/babel.bak/localedata/ja_JP.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ja_JP.dat rename to www.clementine-player.org/babel.bak/localedata/ja_JP.dat diff --git a/www.clementine-player.org/babel/localedata/ka.dat b/www.clementine-player.org/babel.bak/localedata/ka.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ka.dat rename to www.clementine-player.org/babel.bak/localedata/ka.dat diff --git a/www.clementine-player.org/babel/localedata/ka_GE.dat b/www.clementine-player.org/babel.bak/localedata/ka_GE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ka_GE.dat rename to www.clementine-player.org/babel.bak/localedata/ka_GE.dat diff --git a/www.clementine-player.org/babel/localedata/kaj.dat b/www.clementine-player.org/babel.bak/localedata/kaj.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kaj.dat rename to www.clementine-player.org/babel.bak/localedata/kaj.dat diff --git a/www.clementine-player.org/babel/localedata/kaj_NG.dat b/www.clementine-player.org/babel.bak/localedata/kaj_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kaj_NG.dat rename to www.clementine-player.org/babel.bak/localedata/kaj_NG.dat diff --git a/www.clementine-player.org/babel/localedata/kam.dat b/www.clementine-player.org/babel.bak/localedata/kam.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kam.dat rename to www.clementine-player.org/babel.bak/localedata/kam.dat diff --git a/www.clementine-player.org/babel/localedata/kam_KE.dat b/www.clementine-player.org/babel.bak/localedata/kam_KE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kam_KE.dat rename to www.clementine-player.org/babel.bak/localedata/kam_KE.dat diff --git a/www.clementine-player.org/babel/localedata/kcg.dat b/www.clementine-player.org/babel.bak/localedata/kcg.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kcg.dat rename to www.clementine-player.org/babel.bak/localedata/kcg.dat diff --git a/www.clementine-player.org/babel/localedata/kcg_NG.dat b/www.clementine-player.org/babel.bak/localedata/kcg_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kcg_NG.dat rename to www.clementine-player.org/babel.bak/localedata/kcg_NG.dat diff --git a/www.clementine-player.org/babel/localedata/kfo.dat b/www.clementine-player.org/babel.bak/localedata/kfo.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kfo.dat rename to www.clementine-player.org/babel.bak/localedata/kfo.dat diff --git a/www.clementine-player.org/babel/localedata/kfo_CI.dat b/www.clementine-player.org/babel.bak/localedata/kfo_CI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kfo_CI.dat rename to www.clementine-player.org/babel.bak/localedata/kfo_CI.dat diff --git a/www.clementine-player.org/babel/localedata/kk.dat b/www.clementine-player.org/babel.bak/localedata/kk.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kk.dat rename to www.clementine-player.org/babel.bak/localedata/kk.dat diff --git a/www.clementine-player.org/babel/localedata/kk_Cyrl.dat b/www.clementine-player.org/babel.bak/localedata/kk_Cyrl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kk_Cyrl.dat rename to www.clementine-player.org/babel.bak/localedata/kk_Cyrl.dat diff --git a/www.clementine-player.org/babel/localedata/kk_Cyrl_KZ.dat b/www.clementine-player.org/babel.bak/localedata/kk_Cyrl_KZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kk_Cyrl_KZ.dat rename to www.clementine-player.org/babel.bak/localedata/kk_Cyrl_KZ.dat diff --git a/www.clementine-player.org/babel/localedata/kk_KZ.dat b/www.clementine-player.org/babel.bak/localedata/kk_KZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kk_KZ.dat rename to www.clementine-player.org/babel.bak/localedata/kk_KZ.dat diff --git a/www.clementine-player.org/babel/localedata/kl.dat b/www.clementine-player.org/babel.bak/localedata/kl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kl.dat rename to www.clementine-player.org/babel.bak/localedata/kl.dat diff --git a/www.clementine-player.org/babel/localedata/kl_GL.dat b/www.clementine-player.org/babel.bak/localedata/kl_GL.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kl_GL.dat rename to www.clementine-player.org/babel.bak/localedata/kl_GL.dat diff --git a/www.clementine-player.org/babel/localedata/km.dat b/www.clementine-player.org/babel.bak/localedata/km.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/km.dat rename to www.clementine-player.org/babel.bak/localedata/km.dat diff --git a/www.clementine-player.org/babel/localedata/km_KH.dat b/www.clementine-player.org/babel.bak/localedata/km_KH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/km_KH.dat rename to www.clementine-player.org/babel.bak/localedata/km_KH.dat diff --git a/www.clementine-player.org/babel/localedata/kn.dat b/www.clementine-player.org/babel.bak/localedata/kn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kn.dat rename to www.clementine-player.org/babel.bak/localedata/kn.dat diff --git a/www.clementine-player.org/babel/localedata/kn_IN.dat b/www.clementine-player.org/babel.bak/localedata/kn_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kn_IN.dat rename to www.clementine-player.org/babel.bak/localedata/kn_IN.dat diff --git a/www.clementine-player.org/babel/localedata/ko.dat b/www.clementine-player.org/babel.bak/localedata/ko.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ko.dat rename to www.clementine-player.org/babel.bak/localedata/ko.dat diff --git a/www.clementine-player.org/babel/localedata/ko_KR.dat b/www.clementine-player.org/babel.bak/localedata/ko_KR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ko_KR.dat rename to www.clementine-player.org/babel.bak/localedata/ko_KR.dat diff --git a/www.clementine-player.org/babel/localedata/kok.dat b/www.clementine-player.org/babel.bak/localedata/kok.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kok.dat rename to www.clementine-player.org/babel.bak/localedata/kok.dat diff --git a/www.clementine-player.org/babel/localedata/kok_IN.dat b/www.clementine-player.org/babel.bak/localedata/kok_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kok_IN.dat rename to www.clementine-player.org/babel.bak/localedata/kok_IN.dat diff --git a/www.clementine-player.org/babel/localedata/kpe.dat b/www.clementine-player.org/babel.bak/localedata/kpe.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kpe.dat rename to www.clementine-player.org/babel.bak/localedata/kpe.dat diff --git a/www.clementine-player.org/babel/localedata/kpe_GN.dat b/www.clementine-player.org/babel.bak/localedata/kpe_GN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kpe_GN.dat rename to www.clementine-player.org/babel.bak/localedata/kpe_GN.dat diff --git a/www.clementine-player.org/babel/localedata/kpe_LR.dat b/www.clementine-player.org/babel.bak/localedata/kpe_LR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kpe_LR.dat rename to www.clementine-player.org/babel.bak/localedata/kpe_LR.dat diff --git a/www.clementine-player.org/babel/localedata/ku.dat b/www.clementine-player.org/babel.bak/localedata/ku.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ku.dat rename to www.clementine-player.org/babel.bak/localedata/ku.dat diff --git a/www.clementine-player.org/babel/localedata/ku_Arab.dat b/www.clementine-player.org/babel.bak/localedata/ku_Arab.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ku_Arab.dat rename to www.clementine-player.org/babel.bak/localedata/ku_Arab.dat diff --git a/www.clementine-player.org/babel/localedata/ku_Latn.dat b/www.clementine-player.org/babel.bak/localedata/ku_Latn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ku_Latn.dat rename to www.clementine-player.org/babel.bak/localedata/ku_Latn.dat diff --git a/www.clementine-player.org/babel/localedata/ku_Latn_TR.dat b/www.clementine-player.org/babel.bak/localedata/ku_Latn_TR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ku_Latn_TR.dat rename to www.clementine-player.org/babel.bak/localedata/ku_Latn_TR.dat diff --git a/www.clementine-player.org/babel/localedata/ku_TR.dat b/www.clementine-player.org/babel.bak/localedata/ku_TR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ku_TR.dat rename to www.clementine-player.org/babel.bak/localedata/ku_TR.dat diff --git a/www.clementine-player.org/babel/localedata/kw.dat b/www.clementine-player.org/babel.bak/localedata/kw.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kw.dat rename to www.clementine-player.org/babel.bak/localedata/kw.dat diff --git a/www.clementine-player.org/babel/localedata/kw_GB.dat b/www.clementine-player.org/babel.bak/localedata/kw_GB.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/kw_GB.dat rename to www.clementine-player.org/babel.bak/localedata/kw_GB.dat diff --git a/www.clementine-player.org/babel/localedata/ky.dat b/www.clementine-player.org/babel.bak/localedata/ky.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ky.dat rename to www.clementine-player.org/babel.bak/localedata/ky.dat diff --git a/www.clementine-player.org/babel/localedata/ky_KG.dat b/www.clementine-player.org/babel.bak/localedata/ky_KG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ky_KG.dat rename to www.clementine-player.org/babel.bak/localedata/ky_KG.dat diff --git a/www.clementine-player.org/babel/localedata/ln.dat b/www.clementine-player.org/babel.bak/localedata/ln.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ln.dat rename to www.clementine-player.org/babel.bak/localedata/ln.dat diff --git a/www.clementine-player.org/babel/localedata/ln_CD.dat b/www.clementine-player.org/babel.bak/localedata/ln_CD.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ln_CD.dat rename to www.clementine-player.org/babel.bak/localedata/ln_CD.dat diff --git a/www.clementine-player.org/babel/localedata/ln_CG.dat b/www.clementine-player.org/babel.bak/localedata/ln_CG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ln_CG.dat rename to www.clementine-player.org/babel.bak/localedata/ln_CG.dat diff --git a/www.clementine-player.org/babel/localedata/lo.dat b/www.clementine-player.org/babel.bak/localedata/lo.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/lo.dat rename to www.clementine-player.org/babel.bak/localedata/lo.dat diff --git a/www.clementine-player.org/babel/localedata/lo_LA.dat b/www.clementine-player.org/babel.bak/localedata/lo_LA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/lo_LA.dat rename to www.clementine-player.org/babel.bak/localedata/lo_LA.dat diff --git a/www.clementine-player.org/babel/localedata/lt.dat b/www.clementine-player.org/babel.bak/localedata/lt.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/lt.dat rename to www.clementine-player.org/babel.bak/localedata/lt.dat diff --git a/www.clementine-player.org/babel/localedata/lt_LT.dat b/www.clementine-player.org/babel.bak/localedata/lt_LT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/lt_LT.dat rename to www.clementine-player.org/babel.bak/localedata/lt_LT.dat diff --git a/www.clementine-player.org/babel/localedata/lv.dat b/www.clementine-player.org/babel.bak/localedata/lv.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/lv.dat rename to www.clementine-player.org/babel.bak/localedata/lv.dat diff --git a/www.clementine-player.org/babel/localedata/lv_LV.dat b/www.clementine-player.org/babel.bak/localedata/lv_LV.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/lv_LV.dat rename to www.clementine-player.org/babel.bak/localedata/lv_LV.dat diff --git a/www.clementine-player.org/babel/localedata/mk.dat b/www.clementine-player.org/babel.bak/localedata/mk.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mk.dat rename to www.clementine-player.org/babel.bak/localedata/mk.dat diff --git a/www.clementine-player.org/babel/localedata/mk_MK.dat b/www.clementine-player.org/babel.bak/localedata/mk_MK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mk_MK.dat rename to www.clementine-player.org/babel.bak/localedata/mk_MK.dat diff --git a/www.clementine-player.org/babel/localedata/ml.dat b/www.clementine-player.org/babel.bak/localedata/ml.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ml.dat rename to www.clementine-player.org/babel.bak/localedata/ml.dat diff --git a/www.clementine-player.org/babel/localedata/ml_IN.dat b/www.clementine-player.org/babel.bak/localedata/ml_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ml_IN.dat rename to www.clementine-player.org/babel.bak/localedata/ml_IN.dat diff --git a/www.clementine-player.org/babel/localedata/mn.dat b/www.clementine-player.org/babel.bak/localedata/mn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mn.dat rename to www.clementine-player.org/babel.bak/localedata/mn.dat diff --git a/www.clementine-player.org/babel/localedata/mn_CN.dat b/www.clementine-player.org/babel.bak/localedata/mn_CN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mn_CN.dat rename to www.clementine-player.org/babel.bak/localedata/mn_CN.dat diff --git a/www.clementine-player.org/babel/localedata/mn_Cyrl.dat b/www.clementine-player.org/babel.bak/localedata/mn_Cyrl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mn_Cyrl.dat rename to www.clementine-player.org/babel.bak/localedata/mn_Cyrl.dat diff --git a/www.clementine-player.org/babel/localedata/mn_Cyrl_MN.dat b/www.clementine-player.org/babel.bak/localedata/mn_Cyrl_MN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mn_Cyrl_MN.dat rename to www.clementine-player.org/babel.bak/localedata/mn_Cyrl_MN.dat diff --git a/www.clementine-player.org/babel/localedata/mn_MN.dat b/www.clementine-player.org/babel.bak/localedata/mn_MN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mn_MN.dat rename to www.clementine-player.org/babel.bak/localedata/mn_MN.dat diff --git a/www.clementine-player.org/babel/localedata/mn_Mong.dat b/www.clementine-player.org/babel.bak/localedata/mn_Mong.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mn_Mong.dat rename to www.clementine-player.org/babel.bak/localedata/mn_Mong.dat diff --git a/www.clementine-player.org/babel/localedata/mn_Mong_CN.dat b/www.clementine-player.org/babel.bak/localedata/mn_Mong_CN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mn_Mong_CN.dat rename to www.clementine-player.org/babel.bak/localedata/mn_Mong_CN.dat diff --git a/www.clementine-player.org/babel/localedata/mo.dat b/www.clementine-player.org/babel.bak/localedata/mo.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mo.dat rename to www.clementine-player.org/babel.bak/localedata/mo.dat diff --git a/www.clementine-player.org/babel/localedata/mr.dat b/www.clementine-player.org/babel.bak/localedata/mr.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mr.dat rename to www.clementine-player.org/babel.bak/localedata/mr.dat diff --git a/www.clementine-player.org/babel/localedata/mr_IN.dat b/www.clementine-player.org/babel.bak/localedata/mr_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mr_IN.dat rename to www.clementine-player.org/babel.bak/localedata/mr_IN.dat diff --git a/www.clementine-player.org/babel/localedata/ms.dat b/www.clementine-player.org/babel.bak/localedata/ms.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ms.dat rename to www.clementine-player.org/babel.bak/localedata/ms.dat diff --git a/www.clementine-player.org/babel/localedata/ms_BN.dat b/www.clementine-player.org/babel.bak/localedata/ms_BN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ms_BN.dat rename to www.clementine-player.org/babel.bak/localedata/ms_BN.dat diff --git a/www.clementine-player.org/babel/localedata/ms_MY.dat b/www.clementine-player.org/babel.bak/localedata/ms_MY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ms_MY.dat rename to www.clementine-player.org/babel.bak/localedata/ms_MY.dat diff --git a/www.clementine-player.org/babel/localedata/mt.dat b/www.clementine-player.org/babel.bak/localedata/mt.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mt.dat rename to www.clementine-player.org/babel.bak/localedata/mt.dat diff --git a/www.clementine-player.org/babel/localedata/mt_MT.dat b/www.clementine-player.org/babel.bak/localedata/mt_MT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/mt_MT.dat rename to www.clementine-player.org/babel.bak/localedata/mt_MT.dat diff --git a/www.clementine-player.org/babel/localedata/my.dat b/www.clementine-player.org/babel.bak/localedata/my.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/my.dat rename to www.clementine-player.org/babel.bak/localedata/my.dat diff --git a/www.clementine-player.org/babel/localedata/my_MM.dat b/www.clementine-player.org/babel.bak/localedata/my_MM.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/my_MM.dat rename to www.clementine-player.org/babel.bak/localedata/my_MM.dat diff --git a/www.clementine-player.org/babel/localedata/nb.dat b/www.clementine-player.org/babel.bak/localedata/nb.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nb.dat rename to www.clementine-player.org/babel.bak/localedata/nb.dat diff --git a/www.clementine-player.org/babel/localedata/nb_NO.dat b/www.clementine-player.org/babel.bak/localedata/nb_NO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nb_NO.dat rename to www.clementine-player.org/babel.bak/localedata/nb_NO.dat diff --git a/www.clementine-player.org/babel/localedata/ne.dat b/www.clementine-player.org/babel.bak/localedata/ne.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ne.dat rename to www.clementine-player.org/babel.bak/localedata/ne.dat diff --git a/www.clementine-player.org/babel/localedata/ne_IN.dat b/www.clementine-player.org/babel.bak/localedata/ne_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ne_IN.dat rename to www.clementine-player.org/babel.bak/localedata/ne_IN.dat diff --git a/www.clementine-player.org/babel/localedata/ne_NP.dat b/www.clementine-player.org/babel.bak/localedata/ne_NP.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ne_NP.dat rename to www.clementine-player.org/babel.bak/localedata/ne_NP.dat diff --git a/www.clementine-player.org/babel/localedata/nl.dat b/www.clementine-player.org/babel.bak/localedata/nl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nl.dat rename to www.clementine-player.org/babel.bak/localedata/nl.dat diff --git a/www.clementine-player.org/babel/localedata/nl_BE.dat b/www.clementine-player.org/babel.bak/localedata/nl_BE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nl_BE.dat rename to www.clementine-player.org/babel.bak/localedata/nl_BE.dat diff --git a/www.clementine-player.org/babel/localedata/nl_NL.dat b/www.clementine-player.org/babel.bak/localedata/nl_NL.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nl_NL.dat rename to www.clementine-player.org/babel.bak/localedata/nl_NL.dat diff --git a/www.clementine-player.org/babel/localedata/nn.dat b/www.clementine-player.org/babel.bak/localedata/nn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nn.dat rename to www.clementine-player.org/babel.bak/localedata/nn.dat diff --git a/www.clementine-player.org/babel/localedata/nn_NO.dat b/www.clementine-player.org/babel.bak/localedata/nn_NO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nn_NO.dat rename to www.clementine-player.org/babel.bak/localedata/nn_NO.dat diff --git a/www.clementine-player.org/babel/localedata/no.dat b/www.clementine-player.org/babel.bak/localedata/no.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/no.dat rename to www.clementine-player.org/babel.bak/localedata/no.dat diff --git a/www.clementine-player.org/babel/localedata/nr.dat b/www.clementine-player.org/babel.bak/localedata/nr.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nr.dat rename to www.clementine-player.org/babel.bak/localedata/nr.dat diff --git a/www.clementine-player.org/babel/localedata/nr_ZA.dat b/www.clementine-player.org/babel.bak/localedata/nr_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nr_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/nr_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/nso.dat b/www.clementine-player.org/babel.bak/localedata/nso.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nso.dat rename to www.clementine-player.org/babel.bak/localedata/nso.dat diff --git a/www.clementine-player.org/babel/localedata/nso_ZA.dat b/www.clementine-player.org/babel.bak/localedata/nso_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/nso_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/nso_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/ny.dat b/www.clementine-player.org/babel.bak/localedata/ny.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ny.dat rename to www.clementine-player.org/babel.bak/localedata/ny.dat diff --git a/www.clementine-player.org/babel/localedata/ny_MW.dat b/www.clementine-player.org/babel.bak/localedata/ny_MW.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ny_MW.dat rename to www.clementine-player.org/babel.bak/localedata/ny_MW.dat diff --git a/www.clementine-player.org/babel/localedata/om.dat b/www.clementine-player.org/babel.bak/localedata/om.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/om.dat rename to www.clementine-player.org/babel.bak/localedata/om.dat diff --git a/www.clementine-player.org/babel/localedata/om_ET.dat b/www.clementine-player.org/babel.bak/localedata/om_ET.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/om_ET.dat rename to www.clementine-player.org/babel.bak/localedata/om_ET.dat diff --git a/www.clementine-player.org/babel/localedata/om_KE.dat b/www.clementine-player.org/babel.bak/localedata/om_KE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/om_KE.dat rename to www.clementine-player.org/babel.bak/localedata/om_KE.dat diff --git a/www.clementine-player.org/babel/localedata/or.dat b/www.clementine-player.org/babel.bak/localedata/or.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/or.dat rename to www.clementine-player.org/babel.bak/localedata/or.dat diff --git a/www.clementine-player.org/babel/localedata/or_IN.dat b/www.clementine-player.org/babel.bak/localedata/or_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/or_IN.dat rename to www.clementine-player.org/babel.bak/localedata/or_IN.dat diff --git a/www.clementine-player.org/babel/localedata/pa.dat b/www.clementine-player.org/babel.bak/localedata/pa.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pa.dat rename to www.clementine-player.org/babel.bak/localedata/pa.dat diff --git a/www.clementine-player.org/babel/localedata/pa_Arab.dat b/www.clementine-player.org/babel.bak/localedata/pa_Arab.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pa_Arab.dat rename to www.clementine-player.org/babel.bak/localedata/pa_Arab.dat diff --git a/www.clementine-player.org/babel/localedata/pa_Arab_PK.dat b/www.clementine-player.org/babel.bak/localedata/pa_Arab_PK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pa_Arab_PK.dat rename to www.clementine-player.org/babel.bak/localedata/pa_Arab_PK.dat diff --git a/www.clementine-player.org/babel/localedata/pa_Guru.dat b/www.clementine-player.org/babel.bak/localedata/pa_Guru.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pa_Guru.dat rename to www.clementine-player.org/babel.bak/localedata/pa_Guru.dat diff --git a/www.clementine-player.org/babel/localedata/pa_Guru_IN.dat b/www.clementine-player.org/babel.bak/localedata/pa_Guru_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pa_Guru_IN.dat rename to www.clementine-player.org/babel.bak/localedata/pa_Guru_IN.dat diff --git a/www.clementine-player.org/babel/localedata/pa_IN.dat b/www.clementine-player.org/babel.bak/localedata/pa_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pa_IN.dat rename to www.clementine-player.org/babel.bak/localedata/pa_IN.dat diff --git a/www.clementine-player.org/babel/localedata/pa_PK.dat b/www.clementine-player.org/babel.bak/localedata/pa_PK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pa_PK.dat rename to www.clementine-player.org/babel.bak/localedata/pa_PK.dat diff --git a/www.clementine-player.org/babel/localedata/pl.dat b/www.clementine-player.org/babel.bak/localedata/pl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pl.dat rename to www.clementine-player.org/babel.bak/localedata/pl.dat diff --git a/www.clementine-player.org/babel/localedata/pl_PL.dat b/www.clementine-player.org/babel.bak/localedata/pl_PL.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pl_PL.dat rename to www.clementine-player.org/babel.bak/localedata/pl_PL.dat diff --git a/www.clementine-player.org/babel/localedata/ps.dat b/www.clementine-player.org/babel.bak/localedata/ps.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ps.dat rename to www.clementine-player.org/babel.bak/localedata/ps.dat diff --git a/www.clementine-player.org/babel/localedata/ps_AF.dat b/www.clementine-player.org/babel.bak/localedata/ps_AF.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ps_AF.dat rename to www.clementine-player.org/babel.bak/localedata/ps_AF.dat diff --git a/www.clementine-player.org/babel/localedata/pt.dat b/www.clementine-player.org/babel.bak/localedata/pt.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pt.dat rename to www.clementine-player.org/babel.bak/localedata/pt.dat diff --git a/www.clementine-player.org/babel/localedata/pt_BR.dat b/www.clementine-player.org/babel.bak/localedata/pt_BR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pt_BR.dat rename to www.clementine-player.org/babel.bak/localedata/pt_BR.dat diff --git a/www.clementine-player.org/babel/localedata/pt_PT.dat b/www.clementine-player.org/babel.bak/localedata/pt_PT.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/pt_PT.dat rename to www.clementine-player.org/babel.bak/localedata/pt_PT.dat diff --git a/www.clementine-player.org/babel/localedata/ro.dat b/www.clementine-player.org/babel.bak/localedata/ro.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ro.dat rename to www.clementine-player.org/babel.bak/localedata/ro.dat diff --git a/www.clementine-player.org/babel/localedata/ro_MD.dat b/www.clementine-player.org/babel.bak/localedata/ro_MD.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ro_MD.dat rename to www.clementine-player.org/babel.bak/localedata/ro_MD.dat diff --git a/www.clementine-player.org/babel/localedata/ro_RO.dat b/www.clementine-player.org/babel.bak/localedata/ro_RO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ro_RO.dat rename to www.clementine-player.org/babel.bak/localedata/ro_RO.dat diff --git a/www.clementine-player.org/babel/localedata/root.dat b/www.clementine-player.org/babel.bak/localedata/root.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/root.dat rename to www.clementine-player.org/babel.bak/localedata/root.dat diff --git a/www.clementine-player.org/babel/localedata/ru.dat b/www.clementine-player.org/babel.bak/localedata/ru.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ru.dat rename to www.clementine-player.org/babel.bak/localedata/ru.dat diff --git a/www.clementine-player.org/babel/localedata/ru_RU.dat b/www.clementine-player.org/babel.bak/localedata/ru_RU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ru_RU.dat rename to www.clementine-player.org/babel.bak/localedata/ru_RU.dat diff --git a/www.clementine-player.org/babel/localedata/ru_UA.dat b/www.clementine-player.org/babel.bak/localedata/ru_UA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ru_UA.dat rename to www.clementine-player.org/babel.bak/localedata/ru_UA.dat diff --git a/www.clementine-player.org/babel/localedata/rw.dat b/www.clementine-player.org/babel.bak/localedata/rw.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/rw.dat rename to www.clementine-player.org/babel.bak/localedata/rw.dat diff --git a/www.clementine-player.org/babel/localedata/rw_RW.dat b/www.clementine-player.org/babel.bak/localedata/rw_RW.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/rw_RW.dat rename to www.clementine-player.org/babel.bak/localedata/rw_RW.dat diff --git a/www.clementine-player.org/babel/localedata/sa.dat b/www.clementine-player.org/babel.bak/localedata/sa.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sa.dat rename to www.clementine-player.org/babel.bak/localedata/sa.dat diff --git a/www.clementine-player.org/babel/localedata/sa_IN.dat b/www.clementine-player.org/babel.bak/localedata/sa_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sa_IN.dat rename to www.clementine-player.org/babel.bak/localedata/sa_IN.dat diff --git a/www.clementine-player.org/babel/localedata/se.dat b/www.clementine-player.org/babel.bak/localedata/se.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/se.dat rename to www.clementine-player.org/babel.bak/localedata/se.dat diff --git a/www.clementine-player.org/babel/localedata/se_FI.dat b/www.clementine-player.org/babel.bak/localedata/se_FI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/se_FI.dat rename to www.clementine-player.org/babel.bak/localedata/se_FI.dat diff --git a/www.clementine-player.org/babel/localedata/se_NO.dat b/www.clementine-player.org/babel.bak/localedata/se_NO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/se_NO.dat rename to www.clementine-player.org/babel.bak/localedata/se_NO.dat diff --git a/www.clementine-player.org/babel/localedata/sh.dat b/www.clementine-player.org/babel.bak/localedata/sh.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sh.dat rename to www.clementine-player.org/babel.bak/localedata/sh.dat diff --git a/www.clementine-player.org/babel/localedata/sh_BA.dat b/www.clementine-player.org/babel.bak/localedata/sh_BA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sh_BA.dat rename to www.clementine-player.org/babel.bak/localedata/sh_BA.dat diff --git a/www.clementine-player.org/babel/localedata/sh_CS.dat b/www.clementine-player.org/babel.bak/localedata/sh_CS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sh_CS.dat rename to www.clementine-player.org/babel.bak/localedata/sh_CS.dat diff --git a/www.clementine-player.org/babel/localedata/sh_YU.dat b/www.clementine-player.org/babel.bak/localedata/sh_YU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sh_YU.dat rename to www.clementine-player.org/babel.bak/localedata/sh_YU.dat diff --git a/www.clementine-player.org/babel/localedata/si.dat b/www.clementine-player.org/babel.bak/localedata/si.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/si.dat rename to www.clementine-player.org/babel.bak/localedata/si.dat diff --git a/www.clementine-player.org/babel/localedata/si_LK.dat b/www.clementine-player.org/babel.bak/localedata/si_LK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/si_LK.dat rename to www.clementine-player.org/babel.bak/localedata/si_LK.dat diff --git a/www.clementine-player.org/babel/localedata/sid.dat b/www.clementine-player.org/babel.bak/localedata/sid.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sid.dat rename to www.clementine-player.org/babel.bak/localedata/sid.dat diff --git a/www.clementine-player.org/babel/localedata/sid_ET.dat b/www.clementine-player.org/babel.bak/localedata/sid_ET.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sid_ET.dat rename to www.clementine-player.org/babel.bak/localedata/sid_ET.dat diff --git a/www.clementine-player.org/babel/localedata/sk.dat b/www.clementine-player.org/babel.bak/localedata/sk.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sk.dat rename to www.clementine-player.org/babel.bak/localedata/sk.dat diff --git a/www.clementine-player.org/babel/localedata/sk_SK.dat b/www.clementine-player.org/babel.bak/localedata/sk_SK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sk_SK.dat rename to www.clementine-player.org/babel.bak/localedata/sk_SK.dat diff --git a/www.clementine-player.org/babel/localedata/sl.dat b/www.clementine-player.org/babel.bak/localedata/sl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sl.dat rename to www.clementine-player.org/babel.bak/localedata/sl.dat diff --git a/www.clementine-player.org/babel/localedata/sl_SI.dat b/www.clementine-player.org/babel.bak/localedata/sl_SI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sl_SI.dat rename to www.clementine-player.org/babel.bak/localedata/sl_SI.dat diff --git a/www.clementine-player.org/babel/localedata/so.dat b/www.clementine-player.org/babel.bak/localedata/so.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/so.dat rename to www.clementine-player.org/babel.bak/localedata/so.dat diff --git a/www.clementine-player.org/babel/localedata/so_DJ.dat b/www.clementine-player.org/babel.bak/localedata/so_DJ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/so_DJ.dat rename to www.clementine-player.org/babel.bak/localedata/so_DJ.dat diff --git a/www.clementine-player.org/babel/localedata/so_ET.dat b/www.clementine-player.org/babel.bak/localedata/so_ET.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/so_ET.dat rename to www.clementine-player.org/babel.bak/localedata/so_ET.dat diff --git a/www.clementine-player.org/babel/localedata/so_KE.dat b/www.clementine-player.org/babel.bak/localedata/so_KE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/so_KE.dat rename to www.clementine-player.org/babel.bak/localedata/so_KE.dat diff --git a/www.clementine-player.org/babel/localedata/so_SO.dat b/www.clementine-player.org/babel.bak/localedata/so_SO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/so_SO.dat rename to www.clementine-player.org/babel.bak/localedata/so_SO.dat diff --git a/www.clementine-player.org/babel/localedata/sq.dat b/www.clementine-player.org/babel.bak/localedata/sq.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sq.dat rename to www.clementine-player.org/babel.bak/localedata/sq.dat diff --git a/www.clementine-player.org/babel/localedata/sq_AL.dat b/www.clementine-player.org/babel.bak/localedata/sq_AL.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sq_AL.dat rename to www.clementine-player.org/babel.bak/localedata/sq_AL.dat diff --git a/www.clementine-player.org/babel/localedata/sr.dat b/www.clementine-player.org/babel.bak/localedata/sr.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr.dat rename to www.clementine-player.org/babel.bak/localedata/sr.dat diff --git a/www.clementine-player.org/babel/localedata/sr_BA.dat b/www.clementine-player.org/babel.bak/localedata/sr_BA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_BA.dat rename to www.clementine-player.org/babel.bak/localedata/sr_BA.dat diff --git a/www.clementine-player.org/babel/localedata/sr_CS.dat b/www.clementine-player.org/babel.bak/localedata/sr_CS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_CS.dat rename to www.clementine-player.org/babel.bak/localedata/sr_CS.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Cyrl.dat b/www.clementine-player.org/babel.bak/localedata/sr_Cyrl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Cyrl.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Cyrl.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Cyrl_BA.dat b/www.clementine-player.org/babel.bak/localedata/sr_Cyrl_BA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Cyrl_BA.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Cyrl_BA.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Cyrl_CS.dat b/www.clementine-player.org/babel.bak/localedata/sr_Cyrl_CS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Cyrl_CS.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Cyrl_CS.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Cyrl_ME.dat b/www.clementine-player.org/babel.bak/localedata/sr_Cyrl_ME.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Cyrl_ME.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Cyrl_ME.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Cyrl_RS.dat b/www.clementine-player.org/babel.bak/localedata/sr_Cyrl_RS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Cyrl_RS.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Cyrl_RS.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Cyrl_YU.dat b/www.clementine-player.org/babel.bak/localedata/sr_Cyrl_YU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Cyrl_YU.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Cyrl_YU.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Latn.dat b/www.clementine-player.org/babel.bak/localedata/sr_Latn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Latn.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Latn.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Latn_BA.dat b/www.clementine-player.org/babel.bak/localedata/sr_Latn_BA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Latn_BA.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Latn_BA.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Latn_CS.dat b/www.clementine-player.org/babel.bak/localedata/sr_Latn_CS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Latn_CS.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Latn_CS.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Latn_ME.dat b/www.clementine-player.org/babel.bak/localedata/sr_Latn_ME.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Latn_ME.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Latn_ME.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Latn_RS.dat b/www.clementine-player.org/babel.bak/localedata/sr_Latn_RS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Latn_RS.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Latn_RS.dat diff --git a/www.clementine-player.org/babel/localedata/sr_Latn_YU.dat b/www.clementine-player.org/babel.bak/localedata/sr_Latn_YU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_Latn_YU.dat rename to www.clementine-player.org/babel.bak/localedata/sr_Latn_YU.dat diff --git a/www.clementine-player.org/babel/localedata/sr_ME.dat b/www.clementine-player.org/babel.bak/localedata/sr_ME.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_ME.dat rename to www.clementine-player.org/babel.bak/localedata/sr_ME.dat diff --git a/www.clementine-player.org/babel/localedata/sr_RS.dat b/www.clementine-player.org/babel.bak/localedata/sr_RS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_RS.dat rename to www.clementine-player.org/babel.bak/localedata/sr_RS.dat diff --git a/www.clementine-player.org/babel/localedata/sr_YU.dat b/www.clementine-player.org/babel.bak/localedata/sr_YU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sr_YU.dat rename to www.clementine-player.org/babel.bak/localedata/sr_YU.dat diff --git a/www.clementine-player.org/babel/localedata/ss.dat b/www.clementine-player.org/babel.bak/localedata/ss.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ss.dat rename to www.clementine-player.org/babel.bak/localedata/ss.dat diff --git a/www.clementine-player.org/babel/localedata/ss_SZ.dat b/www.clementine-player.org/babel.bak/localedata/ss_SZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ss_SZ.dat rename to www.clementine-player.org/babel.bak/localedata/ss_SZ.dat diff --git a/www.clementine-player.org/babel/localedata/ss_ZA.dat b/www.clementine-player.org/babel.bak/localedata/ss_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ss_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/ss_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/st.dat b/www.clementine-player.org/babel.bak/localedata/st.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/st.dat rename to www.clementine-player.org/babel.bak/localedata/st.dat diff --git a/www.clementine-player.org/babel/localedata/st_LS.dat b/www.clementine-player.org/babel.bak/localedata/st_LS.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/st_LS.dat rename to www.clementine-player.org/babel.bak/localedata/st_LS.dat diff --git a/www.clementine-player.org/babel/localedata/st_ZA.dat b/www.clementine-player.org/babel.bak/localedata/st_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/st_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/st_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/sv.dat b/www.clementine-player.org/babel.bak/localedata/sv.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sv.dat rename to www.clementine-player.org/babel.bak/localedata/sv.dat diff --git a/www.clementine-player.org/babel/localedata/sv_FI.dat b/www.clementine-player.org/babel.bak/localedata/sv_FI.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sv_FI.dat rename to www.clementine-player.org/babel.bak/localedata/sv_FI.dat diff --git a/www.clementine-player.org/babel/localedata/sv_SE.dat b/www.clementine-player.org/babel.bak/localedata/sv_SE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sv_SE.dat rename to www.clementine-player.org/babel.bak/localedata/sv_SE.dat diff --git a/www.clementine-player.org/babel/localedata/sw.dat b/www.clementine-player.org/babel.bak/localedata/sw.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sw.dat rename to www.clementine-player.org/babel.bak/localedata/sw.dat diff --git a/www.clementine-player.org/babel/localedata/sw_KE.dat b/www.clementine-player.org/babel.bak/localedata/sw_KE.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sw_KE.dat rename to www.clementine-player.org/babel.bak/localedata/sw_KE.dat diff --git a/www.clementine-player.org/babel/localedata/sw_TZ.dat b/www.clementine-player.org/babel.bak/localedata/sw_TZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/sw_TZ.dat rename to www.clementine-player.org/babel.bak/localedata/sw_TZ.dat diff --git a/www.clementine-player.org/babel/localedata/syr.dat b/www.clementine-player.org/babel.bak/localedata/syr.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/syr.dat rename to www.clementine-player.org/babel.bak/localedata/syr.dat diff --git a/www.clementine-player.org/babel/localedata/syr_SY.dat b/www.clementine-player.org/babel.bak/localedata/syr_SY.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/syr_SY.dat rename to www.clementine-player.org/babel.bak/localedata/syr_SY.dat diff --git a/www.clementine-player.org/babel/localedata/ta.dat b/www.clementine-player.org/babel.bak/localedata/ta.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ta.dat rename to www.clementine-player.org/babel.bak/localedata/ta.dat diff --git a/www.clementine-player.org/babel/localedata/ta_IN.dat b/www.clementine-player.org/babel.bak/localedata/ta_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ta_IN.dat rename to www.clementine-player.org/babel.bak/localedata/ta_IN.dat diff --git a/www.clementine-player.org/babel/localedata/te.dat b/www.clementine-player.org/babel.bak/localedata/te.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/te.dat rename to www.clementine-player.org/babel.bak/localedata/te.dat diff --git a/www.clementine-player.org/babel/localedata/te_IN.dat b/www.clementine-player.org/babel.bak/localedata/te_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/te_IN.dat rename to www.clementine-player.org/babel.bak/localedata/te_IN.dat diff --git a/www.clementine-player.org/babel/localedata/tg.dat b/www.clementine-player.org/babel.bak/localedata/tg.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tg.dat rename to www.clementine-player.org/babel.bak/localedata/tg.dat diff --git a/www.clementine-player.org/babel/localedata/tg_Cyrl.dat b/www.clementine-player.org/babel.bak/localedata/tg_Cyrl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tg_Cyrl.dat rename to www.clementine-player.org/babel.bak/localedata/tg_Cyrl.dat diff --git a/www.clementine-player.org/babel/localedata/tg_Cyrl_TJ.dat b/www.clementine-player.org/babel.bak/localedata/tg_Cyrl_TJ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tg_Cyrl_TJ.dat rename to www.clementine-player.org/babel.bak/localedata/tg_Cyrl_TJ.dat diff --git a/www.clementine-player.org/babel/localedata/tg_TJ.dat b/www.clementine-player.org/babel.bak/localedata/tg_TJ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tg_TJ.dat rename to www.clementine-player.org/babel.bak/localedata/tg_TJ.dat diff --git a/www.clementine-player.org/babel/localedata/th.dat b/www.clementine-player.org/babel.bak/localedata/th.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/th.dat rename to www.clementine-player.org/babel.bak/localedata/th.dat diff --git a/www.clementine-player.org/babel/localedata/th_TH.dat b/www.clementine-player.org/babel.bak/localedata/th_TH.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/th_TH.dat rename to www.clementine-player.org/babel.bak/localedata/th_TH.dat diff --git a/www.clementine-player.org/babel/localedata/ti.dat b/www.clementine-player.org/babel.bak/localedata/ti.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ti.dat rename to www.clementine-player.org/babel.bak/localedata/ti.dat diff --git a/www.clementine-player.org/babel/localedata/ti_ER.dat b/www.clementine-player.org/babel.bak/localedata/ti_ER.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ti_ER.dat rename to www.clementine-player.org/babel.bak/localedata/ti_ER.dat diff --git a/www.clementine-player.org/babel/localedata/ti_ET.dat b/www.clementine-player.org/babel.bak/localedata/ti_ET.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ti_ET.dat rename to www.clementine-player.org/babel.bak/localedata/ti_ET.dat diff --git a/www.clementine-player.org/babel/localedata/tig.dat b/www.clementine-player.org/babel.bak/localedata/tig.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tig.dat rename to www.clementine-player.org/babel.bak/localedata/tig.dat diff --git a/www.clementine-player.org/babel/localedata/tig_ER.dat b/www.clementine-player.org/babel.bak/localedata/tig_ER.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tig_ER.dat rename to www.clementine-player.org/babel.bak/localedata/tig_ER.dat diff --git a/www.clementine-player.org/babel/localedata/tl.dat b/www.clementine-player.org/babel.bak/localedata/tl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tl.dat rename to www.clementine-player.org/babel.bak/localedata/tl.dat diff --git a/www.clementine-player.org/babel/localedata/tn.dat b/www.clementine-player.org/babel.bak/localedata/tn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tn.dat rename to www.clementine-player.org/babel.bak/localedata/tn.dat diff --git a/www.clementine-player.org/babel/localedata/tn_ZA.dat b/www.clementine-player.org/babel.bak/localedata/tn_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tn_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/tn_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/to.dat b/www.clementine-player.org/babel.bak/localedata/to.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/to.dat rename to www.clementine-player.org/babel.bak/localedata/to.dat diff --git a/www.clementine-player.org/babel/localedata/to_TO.dat b/www.clementine-player.org/babel.bak/localedata/to_TO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/to_TO.dat rename to www.clementine-player.org/babel.bak/localedata/to_TO.dat diff --git a/www.clementine-player.org/babel/localedata/tr.dat b/www.clementine-player.org/babel.bak/localedata/tr.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tr.dat rename to www.clementine-player.org/babel.bak/localedata/tr.dat diff --git a/www.clementine-player.org/babel/localedata/tr_TR.dat b/www.clementine-player.org/babel.bak/localedata/tr_TR.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tr_TR.dat rename to www.clementine-player.org/babel.bak/localedata/tr_TR.dat diff --git a/www.clementine-player.org/babel/localedata/trv.dat b/www.clementine-player.org/babel.bak/localedata/trv.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/trv.dat rename to www.clementine-player.org/babel.bak/localedata/trv.dat diff --git a/www.clementine-player.org/babel/localedata/ts.dat b/www.clementine-player.org/babel.bak/localedata/ts.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ts.dat rename to www.clementine-player.org/babel.bak/localedata/ts.dat diff --git a/www.clementine-player.org/babel/localedata/ts_ZA.dat b/www.clementine-player.org/babel.bak/localedata/ts_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ts_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/ts_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/tt.dat b/www.clementine-player.org/babel.bak/localedata/tt.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tt.dat rename to www.clementine-player.org/babel.bak/localedata/tt.dat diff --git a/www.clementine-player.org/babel/localedata/tt_RU.dat b/www.clementine-player.org/babel.bak/localedata/tt_RU.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/tt_RU.dat rename to www.clementine-player.org/babel.bak/localedata/tt_RU.dat diff --git a/www.clementine-player.org/babel/localedata/ug.dat b/www.clementine-player.org/babel.bak/localedata/ug.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ug.dat rename to www.clementine-player.org/babel.bak/localedata/ug.dat diff --git a/www.clementine-player.org/babel/localedata/ug_Arab.dat b/www.clementine-player.org/babel.bak/localedata/ug_Arab.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ug_Arab.dat rename to www.clementine-player.org/babel.bak/localedata/ug_Arab.dat diff --git a/www.clementine-player.org/babel/localedata/ug_Arab_CN.dat b/www.clementine-player.org/babel.bak/localedata/ug_Arab_CN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ug_Arab_CN.dat rename to www.clementine-player.org/babel.bak/localedata/ug_Arab_CN.dat diff --git a/www.clementine-player.org/babel/localedata/ug_CN.dat b/www.clementine-player.org/babel.bak/localedata/ug_CN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ug_CN.dat rename to www.clementine-player.org/babel.bak/localedata/ug_CN.dat diff --git a/www.clementine-player.org/babel/localedata/uk.dat b/www.clementine-player.org/babel.bak/localedata/uk.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uk.dat rename to www.clementine-player.org/babel.bak/localedata/uk.dat diff --git a/www.clementine-player.org/babel/localedata/uk_UA.dat b/www.clementine-player.org/babel.bak/localedata/uk_UA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uk_UA.dat rename to www.clementine-player.org/babel.bak/localedata/uk_UA.dat diff --git a/www.clementine-player.org/babel/localedata/ur.dat b/www.clementine-player.org/babel.bak/localedata/ur.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ur.dat rename to www.clementine-player.org/babel.bak/localedata/ur.dat diff --git a/www.clementine-player.org/babel/localedata/ur_IN.dat b/www.clementine-player.org/babel.bak/localedata/ur_IN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ur_IN.dat rename to www.clementine-player.org/babel.bak/localedata/ur_IN.dat diff --git a/www.clementine-player.org/babel/localedata/ur_PK.dat b/www.clementine-player.org/babel.bak/localedata/ur_PK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ur_PK.dat rename to www.clementine-player.org/babel.bak/localedata/ur_PK.dat diff --git a/www.clementine-player.org/babel/localedata/uz.dat b/www.clementine-player.org/babel.bak/localedata/uz.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz.dat rename to www.clementine-player.org/babel.bak/localedata/uz.dat diff --git a/www.clementine-player.org/babel/localedata/uz_AF.dat b/www.clementine-player.org/babel.bak/localedata/uz_AF.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_AF.dat rename to www.clementine-player.org/babel.bak/localedata/uz_AF.dat diff --git a/www.clementine-player.org/babel/localedata/uz_Arab.dat b/www.clementine-player.org/babel.bak/localedata/uz_Arab.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_Arab.dat rename to www.clementine-player.org/babel.bak/localedata/uz_Arab.dat diff --git a/www.clementine-player.org/babel/localedata/uz_Arab_AF.dat b/www.clementine-player.org/babel.bak/localedata/uz_Arab_AF.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_Arab_AF.dat rename to www.clementine-player.org/babel.bak/localedata/uz_Arab_AF.dat diff --git a/www.clementine-player.org/babel/localedata/uz_Cyrl.dat b/www.clementine-player.org/babel.bak/localedata/uz_Cyrl.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_Cyrl.dat rename to www.clementine-player.org/babel.bak/localedata/uz_Cyrl.dat diff --git a/www.clementine-player.org/babel/localedata/uz_Cyrl_UZ.dat b/www.clementine-player.org/babel.bak/localedata/uz_Cyrl_UZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_Cyrl_UZ.dat rename to www.clementine-player.org/babel.bak/localedata/uz_Cyrl_UZ.dat diff --git a/www.clementine-player.org/babel/localedata/uz_Latn.dat b/www.clementine-player.org/babel.bak/localedata/uz_Latn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_Latn.dat rename to www.clementine-player.org/babel.bak/localedata/uz_Latn.dat diff --git a/www.clementine-player.org/babel/localedata/uz_Latn_UZ.dat b/www.clementine-player.org/babel.bak/localedata/uz_Latn_UZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_Latn_UZ.dat rename to www.clementine-player.org/babel.bak/localedata/uz_Latn_UZ.dat diff --git a/www.clementine-player.org/babel/localedata/uz_UZ.dat b/www.clementine-player.org/babel.bak/localedata/uz_UZ.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/uz_UZ.dat rename to www.clementine-player.org/babel.bak/localedata/uz_UZ.dat diff --git a/www.clementine-player.org/babel/localedata/ve.dat b/www.clementine-player.org/babel.bak/localedata/ve.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ve.dat rename to www.clementine-player.org/babel.bak/localedata/ve.dat diff --git a/www.clementine-player.org/babel/localedata/ve_ZA.dat b/www.clementine-player.org/babel.bak/localedata/ve_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/ve_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/ve_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/vi.dat b/www.clementine-player.org/babel.bak/localedata/vi.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/vi.dat rename to www.clementine-player.org/babel.bak/localedata/vi.dat diff --git a/www.clementine-player.org/babel/localedata/vi_VN.dat b/www.clementine-player.org/babel.bak/localedata/vi_VN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/vi_VN.dat rename to www.clementine-player.org/babel.bak/localedata/vi_VN.dat diff --git a/www.clementine-player.org/babel/localedata/wal.dat b/www.clementine-player.org/babel.bak/localedata/wal.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/wal.dat rename to www.clementine-player.org/babel.bak/localedata/wal.dat diff --git a/www.clementine-player.org/babel/localedata/wal_ET.dat b/www.clementine-player.org/babel.bak/localedata/wal_ET.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/wal_ET.dat rename to www.clementine-player.org/babel.bak/localedata/wal_ET.dat diff --git a/www.clementine-player.org/babel/localedata/wo.dat b/www.clementine-player.org/babel.bak/localedata/wo.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/wo.dat rename to www.clementine-player.org/babel.bak/localedata/wo.dat diff --git a/www.clementine-player.org/babel/localedata/wo_Latn.dat b/www.clementine-player.org/babel.bak/localedata/wo_Latn.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/wo_Latn.dat rename to www.clementine-player.org/babel.bak/localedata/wo_Latn.dat diff --git a/www.clementine-player.org/babel/localedata/wo_Latn_SN.dat b/www.clementine-player.org/babel.bak/localedata/wo_Latn_SN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/wo_Latn_SN.dat rename to www.clementine-player.org/babel.bak/localedata/wo_Latn_SN.dat diff --git a/www.clementine-player.org/babel/localedata/wo_SN.dat b/www.clementine-player.org/babel.bak/localedata/wo_SN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/wo_SN.dat rename to www.clementine-player.org/babel.bak/localedata/wo_SN.dat diff --git a/www.clementine-player.org/babel/localedata/xh.dat b/www.clementine-player.org/babel.bak/localedata/xh.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/xh.dat rename to www.clementine-player.org/babel.bak/localedata/xh.dat diff --git a/www.clementine-player.org/babel/localedata/xh_ZA.dat b/www.clementine-player.org/babel.bak/localedata/xh_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/xh_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/xh_ZA.dat diff --git a/www.clementine-player.org/babel/localedata/yo.dat b/www.clementine-player.org/babel.bak/localedata/yo.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/yo.dat rename to www.clementine-player.org/babel.bak/localedata/yo.dat diff --git a/www.clementine-player.org/babel/localedata/yo_NG.dat b/www.clementine-player.org/babel.bak/localedata/yo_NG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/yo_NG.dat rename to www.clementine-player.org/babel.bak/localedata/yo_NG.dat diff --git a/www.clementine-player.org/babel/localedata/zh.dat b/www.clementine-player.org/babel.bak/localedata/zh.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh.dat rename to www.clementine-player.org/babel.bak/localedata/zh.dat diff --git a/www.clementine-player.org/babel/localedata/zh_CN.dat b/www.clementine-player.org/babel.bak/localedata/zh_CN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_CN.dat rename to www.clementine-player.org/babel.bak/localedata/zh_CN.dat diff --git a/www.clementine-player.org/babel/localedata/zh_HK.dat b/www.clementine-player.org/babel.bak/localedata/zh_HK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_HK.dat rename to www.clementine-player.org/babel.bak/localedata/zh_HK.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hans.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hans.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hans.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hans.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hans_CN.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hans_CN.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hans_CN.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hans_CN.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hans_HK.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hans_HK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hans_HK.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hans_HK.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hans_MO.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hans_MO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hans_MO.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hans_MO.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hans_SG.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hans_SG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hans_SG.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hans_SG.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hant.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hant.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hant.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hant.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hant_HK.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hant_HK.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hant_HK.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hant_HK.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hant_MO.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hant_MO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hant_MO.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hant_MO.dat diff --git a/www.clementine-player.org/babel/localedata/zh_Hant_TW.dat b/www.clementine-player.org/babel.bak/localedata/zh_Hant_TW.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_Hant_TW.dat rename to www.clementine-player.org/babel.bak/localedata/zh_Hant_TW.dat diff --git a/www.clementine-player.org/babel/localedata/zh_MO.dat b/www.clementine-player.org/babel.bak/localedata/zh_MO.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_MO.dat rename to www.clementine-player.org/babel.bak/localedata/zh_MO.dat diff --git a/www.clementine-player.org/babel/localedata/zh_SG.dat b/www.clementine-player.org/babel.bak/localedata/zh_SG.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_SG.dat rename to www.clementine-player.org/babel.bak/localedata/zh_SG.dat diff --git a/www.clementine-player.org/babel/localedata/zh_TW.dat b/www.clementine-player.org/babel.bak/localedata/zh_TW.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zh_TW.dat rename to www.clementine-player.org/babel.bak/localedata/zh_TW.dat diff --git a/www.clementine-player.org/babel/localedata/zu.dat b/www.clementine-player.org/babel.bak/localedata/zu.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zu.dat rename to www.clementine-player.org/babel.bak/localedata/zu.dat diff --git a/www.clementine-player.org/babel/localedata/zu_ZA.dat b/www.clementine-player.org/babel.bak/localedata/zu_ZA.dat similarity index 100% rename from www.clementine-player.org/babel/localedata/zu_ZA.dat rename to www.clementine-player.org/babel.bak/localedata/zu_ZA.dat diff --git a/www.clementine-player.org/babel/messages/__init__.py b/www.clementine-player.org/babel.bak/messages/__init__.py similarity index 100% rename from www.clementine-player.org/babel/messages/__init__.py rename to www.clementine-player.org/babel.bak/messages/__init__.py diff --git a/www.clementine-player.org/babel/messages/catalog.py b/www.clementine-player.org/babel.bak/messages/catalog.py similarity index 100% rename from www.clementine-player.org/babel/messages/catalog.py rename to www.clementine-player.org/babel.bak/messages/catalog.py diff --git a/www.clementine-player.org/babel/messages/checkers.py b/www.clementine-player.org/babel.bak/messages/checkers.py similarity index 100% rename from www.clementine-player.org/babel/messages/checkers.py rename to www.clementine-player.org/babel.bak/messages/checkers.py diff --git a/www.clementine-player.org/babel/messages/extract.py b/www.clementine-player.org/babel.bak/messages/extract.py similarity index 100% rename from www.clementine-player.org/babel/messages/extract.py rename to www.clementine-player.org/babel.bak/messages/extract.py diff --git a/www.clementine-player.org/babel/messages/frontend.py b/www.clementine-player.org/babel.bak/messages/frontend.py similarity index 99% rename from www.clementine-player.org/babel/messages/frontend.py rename to www.clementine-player.org/babel.bak/messages/frontend.py index bdcf942..609d329 100644 --- a/www.clementine-player.org/babel/messages/frontend.py +++ b/www.clementine-player.org/babel.bak/messages/frontend.py @@ -1112,7 +1112,7 @@ def parse_mapping(fileobj, filename=None): >>> buf = StringIO(''' ... [extractors] ... custom = mypackage.module:myfunc - ... + ... ... # Python source files ... [python: **.py] ... @@ -1122,7 +1122,7 @@ def parse_mapping(fileobj, filename=None): ... [genshi: **/templates/**.txt] ... template_class = genshi.template:TextTemplate ... encoding = latin-1 - ... + ... ... # Some custom extractor ... [custom: **/custom/*.*] ... ''') diff --git a/www.clementine-player.org/babel/messages/jslexer.py b/www.clementine-player.org/babel.bak/messages/jslexer.py similarity index 100% rename from www.clementine-player.org/babel/messages/jslexer.py rename to www.clementine-player.org/babel.bak/messages/jslexer.py diff --git a/www.clementine-player.org/babel/messages/mofile.py b/www.clementine-player.org/babel.bak/messages/mofile.py similarity index 99% rename from www.clementine-player.org/babel/messages/mofile.py rename to www.clementine-player.org/babel.bak/messages/mofile.py index bc0f3a8..9d09a47 100644 --- a/www.clementine-player.org/babel/messages/mofile.py +++ b/www.clementine-player.org/babel.bak/messages/mofile.py @@ -27,11 +27,11 @@ def write_mo(fileobj, catalog, use_fuzzy=False): """Write a catalog to the specified file-like object using the GNU MO file format. - + >>> from babel.messages import Catalog >>> from gettext import GNUTranslations >>> from StringIO import StringIO - + >>> catalog = Catalog(locale='en_US') >>> catalog.add('foo', 'Voh') >>> catalog.add((u'bar', u'baz'), (u'Bahr', u'Batz')) @@ -39,7 +39,7 @@ def write_mo(fileobj, catalog, use_fuzzy=False): >>> catalog.add('Fizz', '') >>> catalog.add(('Fuzz', 'Fuzzes'), ('', '')) >>> buf = StringIO() - + >>> write_mo(buf, catalog) >>> buf.seek(0) >>> translations = GNUTranslations(fp=buf) @@ -57,7 +57,7 @@ def write_mo(fileobj, catalog, use_fuzzy=False): u'Fuzz' >>> translations.ugettext('Fuzzes') u'Fuzzes' - + :param fileobj: the file-like object to write to :param catalog: the `Catalog` instance :param use_fuzzy: whether translations marked as "fuzzy" should be included diff --git a/www.clementine-player.org/babel/messages/plurals.py b/www.clementine-player.org/babel.bak/messages/plurals.py similarity index 100% rename from www.clementine-player.org/babel/messages/plurals.py rename to www.clementine-player.org/babel.bak/messages/plurals.py diff --git a/www.clementine-player.org/babel/messages/pofile.py b/www.clementine-player.org/babel.bak/messages/pofile.py similarity index 100% rename from www.clementine-player.org/babel/messages/pofile.py rename to www.clementine-player.org/babel.bak/messages/pofile.py diff --git a/www.clementine-player.org/babel/numbers.py b/www.clementine-player.org/babel.bak/numbers.py similarity index 97% rename from www.clementine-player.org/babel/numbers.py rename to www.clementine-player.org/babel.bak/numbers.py index 479ddec..cb4d151 100644 --- a/www.clementine-player.org/babel/numbers.py +++ b/www.clementine-player.org/babel.bak/numbers.py @@ -43,10 +43,10 @@ def get_currency_name(currency, locale=LC_NUMERIC): """Return the name used by the locale for the specified currency. - + >>> get_currency_name('USD', 'en_US') u'US Dollar' - + :param currency: the currency code :param locale: the `Locale` object or locale identifier :return: the currency symbol @@ -57,10 +57,10 @@ def get_currency_name(currency, locale=LC_NUMERIC): def get_currency_symbol(currency, locale=LC_NUMERIC): """Return the symbol used by the locale for the specified currency. - + >>> get_currency_symbol('USD', 'en_US') u'$' - + :param currency: the currency code :param locale: the `Locale` object or locale identifier :return: the currency symbol @@ -70,10 +70,10 @@ def get_currency_symbol(currency, locale=LC_NUMERIC): def get_decimal_symbol(locale=LC_NUMERIC): """Return the symbol used by the locale to separate decimal fractions. - + >>> get_decimal_symbol('en_US') u'.' - + :param locale: the `Locale` object or locale identifier :return: the decimal symbol :rtype: `unicode` @@ -82,10 +82,10 @@ def get_decimal_symbol(locale=LC_NUMERIC): def get_plus_sign_symbol(locale=LC_NUMERIC): """Return the plus sign symbol used by the current locale. - + >>> get_plus_sign_symbol('en_US') u'+' - + :param locale: the `Locale` object or locale identifier :return: the plus sign symbol :rtype: `unicode` @@ -94,10 +94,10 @@ def get_plus_sign_symbol(locale=LC_NUMERIC): def get_minus_sign_symbol(locale=LC_NUMERIC): """Return the plus sign symbol used by the current locale. - + >>> get_minus_sign_symbol('en_US') u'-' - + :param locale: the `Locale` object or locale identifier :return: the plus sign symbol :rtype: `unicode` @@ -106,10 +106,10 @@ def get_minus_sign_symbol(locale=LC_NUMERIC): def get_exponential_symbol(locale=LC_NUMERIC): """Return the symbol used by the locale to separate mantissa and exponent. - + >>> get_exponential_symbol('en_US') u'E' - + :param locale: the `Locale` object or locale identifier :return: the exponential symbol :rtype: `unicode` @@ -118,10 +118,10 @@ def get_exponential_symbol(locale=LC_NUMERIC): def get_group_symbol(locale=LC_NUMERIC): """Return the symbol used by the locale to separate groups of thousands. - + >>> get_group_symbol('en_US') u',' - + :param locale: the `Locale` object or locale identifier :return: the group symbol :rtype: `unicode` @@ -130,10 +130,10 @@ def get_group_symbol(locale=LC_NUMERIC): def format_number(number, locale=LC_NUMERIC): """Return the given number formatted for a specific locale. - + >>> format_number(1099, locale='en_US') u'1,099' - + :param number: the number to format :param locale: the `Locale` object or locale identifier :return: the formatted number @@ -144,7 +144,7 @@ def format_number(number, locale=LC_NUMERIC): def format_decimal(number, format=None, locale=LC_NUMERIC): """Return the given decimal number formatted for a specific locale. - + >>> format_decimal(1.2345, locale='en_US') u'1.234' >>> format_decimal(1.2346, locale='en_US') @@ -158,12 +158,12 @@ def format_decimal(number, format=None, locale=LC_NUMERIC): The appropriate thousands grouping and the decimal separator are used for each locale: - + >>> format_decimal(12345.5, locale='en_US') u'12,345.5' :param number: the number to format - :param format: + :param format: :param locale: the `Locale` object or locale identifier :return: the formatted decimal number :rtype: `unicode` @@ -176,19 +176,19 @@ def format_decimal(number, format=None, locale=LC_NUMERIC): def format_currency(number, currency, format=None, locale=LC_NUMERIC): u"""Return formatted currency value. - + >>> format_currency(1099.98, 'USD', locale='en_US') u'$1,099.98' >>> format_currency(1099.98, 'USD', locale='es_CO') u'US$\\xa01.099,98' >>> format_currency(1099.98, 'EUR', locale='de_DE') u'1.099,98\\xa0\\u20ac' - + The pattern can also be specified explicitly: - + >>> format_currency(1099.98, 'EUR', u'\xa4\xa4 #,##0.00', locale='en_US') u'EUR 1,099.98' - + :param number: the number to format :param currency: the currency code :param locale: the `Locale` object or locale identifier @@ -203,7 +203,7 @@ def format_currency(number, currency, format=None, locale=LC_NUMERIC): def format_percent(number, format=None, locale=LC_NUMERIC): """Return formatted percent value for a specific locale. - + >>> format_percent(0.34, locale='en_US') u'34%' >>> format_percent(25.1234, locale='en_US') @@ -212,12 +212,12 @@ def format_percent(number, format=None, locale=LC_NUMERIC): u'2\\xa0512\\xa0%' The format pattern can also be specified explicitly: - + >>> format_percent(25.1234, u'#,##0\u2030', locale='en_US') u'25,123\u2030' :param number: the percent number to format - :param format: + :param format: :param locale: the `Locale` object or locale identifier :return: the formatted percent number :rtype: `unicode` @@ -230,17 +230,17 @@ def format_percent(number, format=None, locale=LC_NUMERIC): def format_scientific(number, format=None, locale=LC_NUMERIC): """Return value formatted in scientific notation for a specific locale. - + >>> format_scientific(10000, locale='en_US') u'1E4' The format pattern can also be specified explicitly: - + >>> format_scientific(1234567, u'##0E00', locale='en_US') u'1.23E06' :param number: the number to format - :param format: + :param format: :param locale: the `Locale` object or locale identifier :return: value formatted in scientific notation. :rtype: `unicode` @@ -258,19 +258,19 @@ class NumberFormatError(ValueError): def parse_number(string, locale=LC_NUMERIC): """Parse localized number string into a long integer. - + >>> parse_number('1,099', locale='en_US') 1099L >>> parse_number('1.099', locale='de_DE') 1099L - + When the given string cannot be parsed, an exception is raised: - + >>> parse_number('1.099,98', locale='de') Traceback (most recent call last): ... NumberFormatError: '1.099,98' is not a valid number - + :param string: the string to parse :param locale: the `Locale` object or locale identifier :return: the parsed number @@ -284,19 +284,19 @@ def parse_number(string, locale=LC_NUMERIC): def parse_decimal(string, locale=LC_NUMERIC): """Parse localized decimal string into a float. - + >>> parse_decimal('1,099.98', locale='en_US') 1099.98 >>> parse_decimal('1.099,98', locale='de') 1099.98 - + When the given string cannot be parsed, an exception is raised: - + >>> parse_decimal('2,109,998', locale='de') Traceback (most recent call last): ... NumberFormatError: '2,109,998' is not a valid decimal number - + :param string: the string to parse :param locale: the `Locale` object or locale identifier :return: the parsed decimal number @@ -445,9 +445,9 @@ def parse_grouping(p): exp_plus = None exp_prec = None grouping = parse_grouping(integer) - return NumberPattern(pattern, (pos_prefix, neg_prefix), + return NumberPattern(pattern, (pos_prefix, neg_prefix), (pos_suffix, neg_suffix), grouping, - int_prec, frac_prec, + int_prec, frac_prec, exp_prec, exp_plus) @@ -501,8 +501,8 @@ def apply(self, value, locale, currency=None): exp_sign = get_plus_sign_symbol(locale) exp = abs(exp) number = u'%s%s%s%s' % \ - (self._format_sigdig(value, self.frac_prec[0], - self.frac_prec[1]), + (self._format_sigdig(value, self.frac_prec[0], + self.frac_prec[1]), get_exponential_symbol(locale), exp_sign, self._format_int(str(exp), self.exp_prec[0], self.exp_prec[1], locale)) @@ -519,7 +519,7 @@ def apply(self, value, locale, currency=None): else: number = self._format_int(text, 0, 1000, locale) else: # A normal number pattern - a, b = split_number(bankersround(abs(value), + a, b = split_number(bankersround(abs(value), self.frac_prec[1])) b = b or '0' a = self._format_int(a, self.int_prec[0], diff --git a/www.clementine-player.org/babel/support.py b/www.clementine-player.org/babel.bak/support.py similarity index 98% rename from www.clementine-player.org/babel/support.py rename to www.clementine-player.org/babel.bak/support.py index c290932..82ba664 100644 --- a/www.clementine-player.org/babel/support.py +++ b/www.clementine-player.org/babel.bak/support.py @@ -33,7 +33,7 @@ class Format(object): """Wrapper class providing the various date and number formatting functions bound to a specific locale and time-zone. - + >>> fmt = Format('en_US', UTC) >>> fmt.date(date(2007, 4, 1)) u'Apr 1, 2007' @@ -43,7 +43,7 @@ class Format(object): def __init__(self, locale, tzinfo=None): """Initialize the formatter. - + :param locale: the locale identifier or `Locale` instance :param tzinfo: the time-zone info (a `tzinfo` instance or `None`) """ @@ -52,23 +52,23 @@ def __init__(self, locale, tzinfo=None): def date(self, date=None, format='medium'): """Return a date formatted according to the given pattern. - + >>> fmt = Format('en_US') >>> fmt.date(date(2007, 4, 1)) u'Apr 1, 2007' - + :see: `babel.dates.format_date` """ return format_date(date, format, locale=self.locale) def datetime(self, datetime=None, format='medium'): """Return a date and time formatted according to the given pattern. - + >>> from pytz import timezone >>> fmt = Format('en_US', tzinfo=timezone('US/Eastern')) >>> fmt.datetime(datetime(2007, 4, 1, 15, 30)) u'Apr 1, 2007 11:30:00 AM' - + :see: `babel.dates.format_datetime` """ return format_datetime(datetime, format, tzinfo=self.tzinfo, @@ -76,59 +76,59 @@ def datetime(self, datetime=None, format='medium'): def time(self, time=None, format='medium'): """Return a time formatted according to the given pattern. - + >>> from pytz import timezone >>> fmt = Format('en_US', tzinfo=timezone('US/Eastern')) >>> fmt.time(datetime(2007, 4, 1, 15, 30)) u'11:30:00 AM' - + :see: `babel.dates.format_time` """ return format_time(time, format, tzinfo=self.tzinfo, locale=self.locale) def number(self, number): """Return an integer number formatted for the locale. - + >>> fmt = Format('en_US') >>> fmt.number(1099) u'1,099' - + :see: `babel.numbers.format_number` """ return format_number(number, locale=self.locale) def decimal(self, number, format=None): """Return a decimal number formatted for the locale. - + >>> fmt = Format('en_US') >>> fmt.decimal(1.2345) u'1.234' - + :see: `babel.numbers.format_decimal` """ return format_decimal(number, format, locale=self.locale) def currency(self, number, currency): """Return a number in the given currency formatted for the locale. - + :see: `babel.numbers.format_currency` """ return format_currency(number, currency, locale=self.locale) def percent(self, number, format=None): """Return a number formatted as percentage for the locale. - + >>> fmt = Format('en_US') >>> fmt.percent(0.34) u'34%' - + :see: `babel.numbers.format_percent` """ return format_percent(number, format, locale=self.locale) def scientific(self, number): """Return a number formatted using scientific notation for the locale. - + :see: `babel.numbers.format_scientific` """ return format_scientific(number, locale=self.locale) @@ -137,7 +137,7 @@ def scientific(self, number): class LazyProxy(object): """Class for proxy objects that delegate to a specified function to evaluate the actual object. - + >>> def greeting(name='world'): ... return 'Hello, %s!' % name >>> lazy_greeting = LazyProxy(greeting, name='Joe') @@ -147,16 +147,16 @@ class LazyProxy(object): u' Hello, Joe!' >>> u'(%s)' % lazy_greeting u'(Hello, Joe!)' - + This can be used, for example, to implement lazy translation functions that delay the actual translation until the string is actually used. The rationale for such behavior is that the locale of the user may not always be available. In web applications, you only know the locale when processing a request. - + The proxy implementation attempts to be as complete as possible, so that the lazy objects should mostly work as expected, for example for sorting: - + >>> greetings = [ ... LazyProxy(greeting, 'world'), ... LazyProxy(greeting, 'Joe'), @@ -263,7 +263,7 @@ def __getitem__(self, key): def __setitem__(self, key, value): self.value[key] = value - + class Translations(gettext.GNUTranslations, object): """An extended translation catalog class.""" @@ -361,31 +361,31 @@ def dgettext(self, domain, message): domain. """ return self._domains.get(domain, self).gettext(message) - + def ldgettext(self, domain, message): - """Like ``lgettext()``, but look the message up in the specified + """Like ``lgettext()``, but look the message up in the specified domain. - """ + """ return self._domains.get(domain, self).lgettext(message) - + def dugettext(self, domain, message): """Like ``ugettext()``, but look the message up in the specified domain. """ return self._domains.get(domain, self).ugettext(message) - + def dngettext(self, domain, singular, plural, num): """Like ``ngettext()``, but look the message up in the specified domain. """ return self._domains.get(domain, self).ngettext(singular, plural, num) - + def ldngettext(self, domain, singular, plural, num): """Like ``lngettext()``, but look the message up in the specified domain. """ return self._domains.get(domain, self).lngettext(singular, plural, num) - + def dungettext(self, domain, singular, plural, num): """Like ``ungettext()`` but look the message up in the specified domain. diff --git a/www.clementine-player.org/babel/util.py b/www.clementine-player.org/babel.bak/util.py similarity index 99% rename from www.clementine-player.org/babel/util.py rename to www.clementine-player.org/babel.bak/util.py index e3a611d..e818088 100644 --- a/www.clementine-player.org/babel/util.py +++ b/www.clementine-player.org/babel.bak/util.py @@ -104,29 +104,29 @@ def parse_encoding(fp): def pathmatch(pattern, filename): """Extended pathname pattern matching. - + This function is similar to what is provided by the ``fnmatch`` module in the Python standard library, but: - + * can match complete (relative or absolute) path names, and not just file names, and * also supports a convenience pattern ("**") to match files at any directory level. - + Examples: - + >>> pathmatch('**.py', 'bar.py') True >>> pathmatch('**.py', 'foo/bar/baz.py') True >>> pathmatch('**.py', 'templates/index.html') False - + >>> pathmatch('**/templates/*.html', 'templates/index.html') True >>> pathmatch('**/templates/*.html', 'templates/foo/bar.html') False - + :param pattern: the glob pattern :param filename: the path name of the file to match against :return: `True` if the path name matches the pattern, `False` otherwise @@ -160,7 +160,7 @@ class TextWrapper(textwrap.TextWrapper): def wraptext(text, width=70, initial_indent='', subsequent_indent=''): """Simple wrapper around the ``textwrap.wrap`` function in the standard library. This version does not wrap lines on hyphens in words. - + :param text: the text to wrap :param width: the maximum line width :param initial_indent: string that will be prepended to the first line of @@ -178,7 +178,7 @@ def wraptext(text, width=70, initial_indent='', subsequent_indent=''): class odict(dict): """Ordered dict implementation. - + :see: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747 """ def __init__(self, data=None): @@ -249,14 +249,14 @@ def itervalues(self): except AttributeError: def relpath(path, start='.'): """Compute the relative path to one path from another. - + >>> relpath('foo/bar.txt', '').replace(os.sep, '/') 'foo/bar.txt' >>> relpath('foo/bar.txt', 'foo').replace(os.sep, '/') 'bar.txt' >>> relpath('foo/bar.txt', 'baz').replace(os.sep, '/') '../foo/bar.txt' - + :return: the relative path :rtype: `basestring` """ @@ -324,7 +324,7 @@ def dst(self, dt): except ImportError: UTC = FixedOffsetTimezone(0, 'UTC') """`tzinfo` object for UTC (Universal Time). - + :type: `tzinfo` """ diff --git a/www.clementine-player.org/babel/localedata/aa.dat b/www.clementine-player.org/babel/localedata/aa.dat deleted file mode 100644 index 4285296..0000000 Binary files a/www.clementine-player.org/babel/localedata/aa.dat and /dev/null differ diff --git a/www.clementine-player.org/babel/localedata/aa_DJ.dat b/www.clementine-player.org/babel/localedata/aa_DJ.dat deleted file mode 100644 index 1f3ee97..0000000 Binary files a/www.clementine-player.org/babel/localedata/aa_DJ.dat and /dev/null differ diff --git a/www.clementine-player.org/babel/localedata/aa_ER.dat b/www.clementine-player.org/babel/localedata/aa_ER.dat deleted file mode 100644 index e0f2275..0000000 Binary files a/www.clementine-player.org/babel/localedata/aa_ER.dat and /dev/null differ diff --git a/www.clementine-player.org/babel/localedata/aa_ER_SAAHO.dat b/www.clementine-player.org/babel/localedata/aa_ER_SAAHO.dat deleted file mode 100644 index 47256c5..0000000 Binary files a/www.clementine-player.org/babel/localedata/aa_ER_SAAHO.dat and /dev/null differ diff --git a/www.clementine-player.org/babel/localedata/aa_ET.dat b/www.clementine-player.org/babel/localedata/aa_ET.dat deleted file mode 100644 index 1967e9e..0000000 Binary files a/www.clementine-player.org/babel/localedata/aa_ET.dat and /dev/null differ diff --git a/www.clementine-player.org/babel/localedata/af.dat b/www.clementine-player.org/babel/localedata/af.dat deleted file mode 100644 index cd419dc..0000000 Binary files a/www.clementine-player.org/babel/localedata/af.dat and /dev/null differ diff --git a/www.clementine-player.org/babel/localedata/af_NA.dat b/www.clementine-player.org/babel/localedata/af_NA.dat deleted file mode 100644 index f4c7471..0000000 Binary files a/www.clementine-player.org/babel/localedata/af_NA.dat and /dev/null differ diff --git a/www.clementine-player.org/base.html b/www.clementine-player.org/base.html index 29f106f..fda97ce 100644 --- a/www.clementine-player.org/base.html +++ b/www.clementine-player.org/base.html @@ -48,10 +48,10 @@ diff --git a/www.clementine-player.org/css/all.css b/www.clementine-player.org/css/all.css new file mode 100644 index 0000000..6d02345 --- /dev/null +++ b/www.clementine-player.org/css/all.css @@ -0,0 +1,235 @@ +/* + This is a combined and slightly modified version of the original CSS files. + The main change is to use absolute paths for the background images to + work with the new routing. +*/ + +body { + background: #2a2a2a url(/images/body-decoration.png) repeat-x; + color: #fff; + font-family: "Lucida Grande", "Trebuchet MS", sans-serif; + font-size: 14px; + line-height: 1.6em; + margin: 0; + padding: 0; +} + +#wrapper { + margin: 0 auto; + position: relative; + width: 960px; +} + +#header { + height: 145px; + position: relative; +} + +#header .logo { + left: 0; + position: absolute; + top: 15px; +} + +#site-slogan { + color: #ccc; + font-size: 20px; + left: 175px; + position: absolute; + top: 40px; +} + +#primary-links { + position: absolute; + right: 0; + text-align: right; + top: 5px; +} + +#primary-links ul { + float: left; + margin: 0; + padding: 0; +} + +#primary-links li { + float: left; + list-style: none; + margin: 0; + padding: 0; +} + +#primary-links a { + -moz-border-radius: 5px; + border: 1px solid #000; + color: #fff; + display: block; + float: left; + font-size: 16px; + font-weight: bold; + margin: 0 0 0 10px; + padding: 5px 10px; + text-decoration: none; +} + +#primary-links a:hover { + background-color: #333; +} + +#primary-links a:active { + background-color: #666; +} + +#container { + padding: 10px; +} + +#footer-top-gradient { + background: url(/images/footer-top-gradient.png) repeat-x; + height: 25px; + width: 100%; +} + +#footer { + background: #111 url(/images/footer.png) repeat-x; + color: #aaa; + padding: 10px; + text-align: center; +} + +#footer a { + color: #fd9146; + text-decoration: none; +} + +#footer a:hover { + text-decoration: underline; +} + +a { + color: #fd9146; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +h1, h2, h3, h4, h5, h6 { + color: #fd9146; + font-weight: normal; +} + +h1 { + font-size: 30px; + line-height: 32px; +} + +h2 { + font-size: 24px; +} + +h3 { + font-size: 18px; + line-height: 22px; +} + +.screenshot { + padding: 10px; + width: 450px; +} + +.screenshot img { + border: 1px solid #000; +} + +.screenshot p { + color: #ccc; + font-style: italic; + padding: 10px 0; + text-align: center; +} + +.languages { + padding: 10px; +} + +span.language { + color: #fff; +} + +a.language { + padding: 0 5px; +} + +hr.division { + background: url(/images/footer.png) repeat-x; + border: 0; + height: 20px; +} + +#download-block { + -moz-border-radius: 20px; + -webkit-border-radius: 20px; + background: url(/images/download-block.png) repeat-x; + border-radius: 20px; + border: 1px solid #000; + float: right; + height: 100px; + margin: 0 0 20px 20px; + padding: 10px; + text-align: center; + width: 320px; +} + +#download-block:hover { + background: url(/images/download-block-hover.png) repeat-x; +} + +#download-block a#download-button { + color: #fff; + display: block; + text-decoration: none; +} + +#download-block p { + margin: 0; + padding: 0; +} + +#download-title { + font-size: 16px; + font-weight: bold; +} + +#download-version { + color: #fd9146; +} + +#download-logo { + float: left; + height: 64px; + margin: 10px 0 0 10px; + width: 64px; +} + +#download-os { + font-size: 20px; + font-weight: bold; + padding-top: 20px; +} + +#download-arch { + color: #ccc; + font-size: 14px; +} + +#download-otherlinks { + color: #ccc; + font-size: 12px; + padding-top: 10px; +} + +#download-otherlinks a { + color: #fd9146; +} diff --git a/www.clementine-player.org/main.py b/www.clementine-player.org/main.py index f5e67ae..e670e50 100644 --- a/www.clementine-player.org/main.py +++ b/www.clementine-player.org/main.py @@ -1,78 +1,64 @@ # -*- coding: utf-8 -*- import babel -import base64 -import jinja2 -import os -import re -import webapp2 - -from webapp2_extras import i18n - -from data import DISPLAY_OS -from data import DOWNLOAD_BASE_URL -from data import DOWNLOADS -from data import LANGUAGE_NAMES -from data import LANGUAGES -from data import LATEST_VERSION -from data import NEWS -from data import OS_LOGOS -from data import SCREENSHOTS -from data import SHORT_DISPLAY_OS - -from data import DEBIAN_NAMES -from data import UBUNTU_NAMES - -def _(x): return x - -jinja_environment = jinja2.Environment( - loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), - extensions=['jinja2.ext.i18n', 'jinja2.ext.with_']) -jinja_environment.install_gettext_translations(i18n) - -def format_datetime(value, language='en'): - # Babel supports fewer locales than we do so change to English for - # unsupported locales. - if not babel.localedata.exists(language): - language = 'en' - return babel.dates.format_date(value, format='full', locale=language) -jinja_environment.filters['datetime'] = format_datetime +from flask import Flask, render_template, request, g, redirect, send_file, jsonify +from flask_babel import Babel, gettext +from PIL import Image +import io +import google.auth +import data import copy import datetime -import gettext import json -import logging import re +import os +import requests +from cachelib import SimpleCache -from google.appengine.api import app_identity -from google.appengine.api import memcache -from google.appengine.api import urlfetch - +app = Flask(__name__) +babel_ext = Babel(app) +cache = SimpleCache() -GITHUB_TOKEN=os.environ['GITHUB_TOKEN'] +GITHUB_TOKEN=os.environ.get('GITHUB_TOKEN') RELEASES_KEY='github_releases' -class Error(Exception): - pass +@app.before_request +def before_request(): + path_parts = request.path.split('/') + if len(path_parts) > 1 and path_parts[1] in data.LANGUAGES: + g.language = path_parts[1] + else: + g.language = request.accept_languages.best_match(data.LANGUAGES) + if g.language is None: + g.language = 'en' + g.locale = g.language -class GithubFetchError(Error): - pass +@babel_ext.locale_selector +def get_locale(): + return g.get('locale', 'en') +def format_datetime(value, language='en'): + if not babel.localedata.exists(language): + language = 'en' + return babel.dates.format_date(value, format='full', locale=language) + +app.jinja_env.filters['datetime'] = format_datetime -class BasePage(webapp2.RequestHandler): - def _FetchRelease(self): - content = memcache.get(RELEASES_KEY) +def _fetch_release(): + content = cache.get(RELEASES_KEY) if content is None: - token = base64.b64encode('%s:' % GITHUB_TOKEN) - r = urlfetch.fetch('https://api.github.com/repos/clementine-player/Clementine/releases/latest', headers={ - 'Authorization': 'Basic %s' % token, + if not GITHUB_TOKEN: + return [] + auth_header = 'token %s' % GITHUB_TOKEN + r = requests.get('https://api.github.com/repos/clementine-player/Clementine/releases/latest', headers={ + 'Authorization': auth_header, }) if r.status_code != 200: - raise GithubFetchError('Error fetching releases: %d %s' % (r.status_code, r.content)) - memcache.set(RELEASES_KEY, r.content, time=60*60) - content = r.content + raise Exception('Error fetching releases: %d %s' % (r.status_code, r.text)) + cache.set(RELEASES_KEY, r.text, timeout=60*60) + content = r.text result = json.loads(content) downloads = [] @@ -105,8 +91,8 @@ def _FetchRelease(self): info['arch'] = 64 elif asset['content_type'] == 'application/x-xz': info['os'] = 'source' - info['display_os'] = _('Source Code') - info['short_os'] = _('Source') + info['display_os'] = gettext('Source Code') + info['short_os'] = gettext('Source') info['os_logo'] = 'source-logo.png' elif asset['content_type'] == 'application/x-ms-dos-executable': info['os'] = 'windows' @@ -115,14 +101,14 @@ def _FetchRelease(self): info['os_logo'] = 'windows-logo.png' info['arch'] = 32 elif asset['content_type'] == 'application/x-deb' or asset['content_type'] == 'application/vnd.debian.binary-package': - for n in DEBIAN_NAMES: + for n in data.DEBIAN_NAMES: if n in asset['name']: info['os'] = 'debian' info['display_os'] = 'Debian %s' % n.capitalize() info['short_os'] = n.capitalize() info['os_logo'] = 'squeeze-logo.png' - for n in UBUNTU_NAMES: + for n in data.UBUNTU_NAMES: if n in asset['name']: info['os'] = 'ubuntu' info['display_os'] = 'Ubuntu %s' % n.capitalize() @@ -138,176 +124,158 @@ def _FetchRelease(self): info['display_os'] = 'Raspberry Pi' info['short_os'] = 'RPI' info['os_logo'] = 'raspberry-pi-logo.png' - + downloads.append(info) return downloads - - def MakePage(self, template_file, language, extra_params=None): - root_page = "/" - - if language is None: - language = self.GetLanguageFromRequest() +def find_download(downloads, os, arch=0): + downloads = [x for x in downloads if x['os'] == os + and x['arch'] == arch + and x['ver'][:3] == data.LATEST_VERSION[:3]] + if downloads: + return copy.deepcopy(downloads[0]) else: - root_page = "/%s/" % language + return None + +def _make_page(template_file, language=None, extra_params=None): if language is None: - language = 'en' + language = g.language - i18n.get_i18n().set_locale(language) + root_page = "/" + if language != 'en': + root_page = "/%s/" % language if extra_params is None: extra_params = {} - # i18n - self.response.headers['Content-Language'] = i18n.get_i18n().locale - - downloads = self._FetchRelease() + downloads = _fetch_release() # Add datetime objects to the list of news - news = copy.deepcopy(NEWS) + news = copy.deepcopy(data.NEWS) for n in news: title = n['title'] content = n['content'] n['datetime'] = datetime.datetime.fromtimestamp(n['timestamp']) - n['title'] = i18n.gettext(title) - n['content'] = i18n.gettext(content) + n['title'] = gettext(title) + n['content'] = gettext(content) - screenshots = copy.deepcopy(SCREENSHOTS) + screenshots = copy.deepcopy(data.SCREENSHOTS) for s in screenshots: for e in s['entries']: title = e['title'] - e['title'] = i18n.gettext(title) + e['title'] = gettext(title) # Try to detect the user's OS and architecture - ua = self.request.headers['User-Agent'].lower() + ua = request.headers.get('User-Agent', '').lower() if 'win' in ua: - best_download = self.FindDownload(downloads, 'windows', 32) + best_download = find_download(downloads, 'windows', 32) elif 'mac' in ua: - best_download = self.FindDownload(downloads, 'mac', 64) + best_download = find_download(downloads, 'mac', 64) elif 'fedora' in ua: if '64' in ua: - best_download = self.FindDownload(downloads, 'fedora', 64) + best_download = find_download(downloads, 'fedora', 64) else: - best_download = self.FindDownload(downloads, 'fedora', 32) + best_download = find_download(downloads, 'fedora', 32) else: best_download = None - languages = [{'code': x, 'name': LANGUAGE_NAMES[x], 'current': x == language} for x in LANGUAGES] + languages = [{'code': x, 'name': data.LANGUAGE_NAMES[x], 'current': x == language} for x in data.LANGUAGES] params = { 'best_download': best_download, 'downloads': downloads, - 'latest_downloads': [x for x in downloads if x['ver'] == LATEST_VERSION], + 'latest_downloads': [x for x in downloads if x['ver'] == data.LATEST_VERSION], 'latest_screenshots': screenshots[0]['entries'], - 'latest_version': LATEST_VERSION, + 'latest_version': data.LATEST_VERSION, 'news': news, 'language': language, 'languages': languages, - 'old_downloads': [x for x in downloads if x['ver'] != LATEST_VERSION], + 'old_downloads': [x for x in downloads if x['ver'] != data.LATEST_VERSION], 'root_page': root_page, 'screenshots': screenshots, 'is_rtl': language == 'ar' or language == 'fa' or language == 'he', } params.update(extra_params) - template = jinja_environment.get_template(template_file) - self.response.out.write(template.render(params)) + return render_template(template_file, **params) + +@app.route('/thumbnails/') +def thumbnail(filename): + thumbnail_data = cache.get(filename) + if thumbnail_data is None: + image_path = os.path.join(app.static_folder, 'screenshots', filename) + if os.path.exists(image_path): + with Image.open(image_path) as img: + img.thumbnail((440, 440)) + img_io = io.BytesIO() + img.save(img_io, 'PNG') + img_io.seek(0) + thumbnail_data = img_io.read() + cache.set(filename, thumbnail_data) + else: + return "Image not found", 404 + return send_file(io.BytesIO(thumbnail_data), mimetype='image/png') - def FindDownload(self, downloads, os, arch=0): - downloads = [x for x in downloads if x['os'] == os - and x['arch'] == arch - and x['ver'][:3] == LATEST_VERSION[:3]] - if downloads: - return copy.deepcopy(downloads[0]) - else: - return None +@app.route('/scheduled/trigger-transifex-pull') +def trigger_transifex_pull(): + credentials, project = google.auth.default( + scopes=['https://www.googleapis.com/auth/cloud-platform']) + authed_session = google.auth.transport.requests.AuthorizedSession(credentials) - # Similar to django.utils.translation.get_language_from_request which has no equivalent in jinja2 - def GetLanguageFromRequest(self): - if not 'Accept-Language' in self.request.headers: - return None + response = authed_session.post( + 'https://cloudbuild.googleapis.com/v1/projects/clementine-web/triggers/e19d2c38-5478-4282-a475-ee54d6d5363a:run', + data=json.dumps({ + 'projectId': 'clementine-web', + 'repoName': 'github-clementine-player-website', + 'branchName': 'master', + }) + ) + return jsonify(response.json()) - accepted_languages_header = self.request.headers['Accept-Language'] - accepted_languages = [language.split(';')[0].replace('-', '_').lower() for language in accepted_languages_header.split(',')] - for accepted_language in accepted_languages: - if accepted_language in [language.lower() for language in LANGUAGES]: - return accepted_language - return None +@app.route('/') +def main_page_no_lang(): + return _make_page('main.html') +@app.route('//') +def main_page(language=None): + return _make_page('main.html', language) -class MainPage(BasePage): - def get(self, language): - self.MakePage('main.html', language) +@app.route('/screenshots') +def screenshots_page_no_lang(): + return _make_page('screenshots.html') -class ScreenshotsPage(BasePage): - def get(self, language): - self.MakePage('screenshots.html', language) +@app.route('//screenshots') +def screenshots_page(language=None): + return _make_page('screenshots.html', language) -class DownloadsPage(BasePage): - def get(self, language): - self.MakePage('downloads.html', language) +@app.route('/downloads') +def downloads_page_no_lang(): + return _make_page('downloads.html') -class ParticipatePage(BasePage): - def get(self, language): - self.MakePage('participate.html', language) +@app.route('//downloads') +def downloads_page(language=None): + return _make_page('downloads.html', language) -class WiimotePage(webapp2.RequestHandler): - def get(self): - self.redirect('https://github.com/clementine-player/Clementine/wiki/Wii-Remotes') +@app.route('/participate') +def participate_page_no_lang(): + return _make_page('participate.html') -class PrivacyPage(BasePage): - def get(self, language): - self.MakePage('privacy.html', language) +@app.route('//participate') +def participate_page(language=None): + return _make_page('participate.html', language) -class AcmeChallengePage(webapp2.RequestHandler): - def get(self): - self.redirect( - 'https://builds.clementine-player.org' + self.request.path) +@app.route('/privacy') +def privacy_page_no_lang(): + return _make_page('privacy.html') - def post(self): - self.redirect( - 'https://builds.clementine-player.org' + self.request.path) +@app.route('//privacy') +def privacy_page(language=None): + return _make_page('privacy.html', language) -class TransifexPullPage(webapp2.RequestHandler): - def get(self): - token, _ = app_identity.get_access_token('https://www.googleapis.com/auth/cloud-platform') - response = urlfetch.fetch( - 'https://cloudbuild.googleapis.com/v1/projects/clementine-web/triggers/e19d2c38-5478-4282-a475-ee54d6d5363a:run', - method=urlfetch.POST, - payload=json.dumps({ - 'projectId': 'clementine-web', - 'repoName': 'github-clementine-player-website', - 'branchName': 'master', - }), - headers={ - 'Authorization': 'Bearer {}'.format(token), - 'Content-Type': 'application/json', - }) - if response.status_code != 200: - raise Exception('Triggering build failed: {}'.format(response.content)) - result = json.loads(response.content) - self.response.headers['Content-Type'] = 'application/json' - self.response.write(json.dumps(result, indent=2)) - -config = {} -config['webapp2_extras.i18n'] = { - 'domains': ['django'], - 'translations_path': os.path.join(os.path.dirname(__file__), 'locale'), -} - -LANG_RE = r'/(?:([a-zA-Z]{2}(?:_[a-zA-Z]{2})?(?:@latin)?)/?)?' -app = webapp2.WSGIApplication( - [ - (LANG_RE + '', MainPage), - (LANG_RE + 'about', MainPage), - (LANG_RE + 'screenshots', ScreenshotsPage), - (LANG_RE + 'downloads', DownloadsPage), - (LANG_RE + 'participate', ParticipatePage), - (LANG_RE + 'privacy', PrivacyPage), - (r'/wiimote', WiimotePage), - (r'/.well-known/acme-challenge/.*', AcmeChallengePage), - (r'/scheduled/trigger-transifex-pull', TransifexPullPage), - ], - config=config, - debug=True) +@app.route('/wiimote') +def wiimote_page(): + return redirect('https://github.com/clementine-player/Clementine/wiki/Wii-Remotes') + +if __name__ == '__main__': + app.run(debug=True) diff --git a/www.clementine-player.org/pytz/__init__.py b/www.clementine-player.org/pytz/__init__.py deleted file mode 100644 index 69772f2..0000000 --- a/www.clementine-player.org/pytz/__init__.py +++ /dev/null @@ -1,1518 +0,0 @@ -''' -datetime.tzinfo timezone definitions generated from the -Olson timezone database: - - ftp://elsie.nci.nih.gov/pub/tz*.tar.gz - -See the datetime section of the Python Library Reference for information -on how to use these modules. -''' - -# The Olson database is updated several times a year. -OLSON_VERSION = '2011k' -VERSION = OLSON_VERSION -# Version format for a patch release - only one so far. -#VERSION = OLSON_VERSION + '.2' -__version__ = OLSON_VERSION - -OLSEN_VERSION = OLSON_VERSION # Old releases had this misspelling - -__all__ = [ - 'timezone', 'utc', 'country_timezones', 'country_names', - 'AmbiguousTimeError', 'InvalidTimeError', - 'NonExistentTimeError', 'UnknownTimeZoneError', - 'all_timezones', 'all_timezones_set', - 'common_timezones', 'common_timezones_set', - ] - -import sys, datetime, os.path, gettext -try: - from UserDict import DictMixin -except ImportError: - from collections import Mapping as DictMixin - -from pytz.exceptions import AmbiguousTimeError -from pytz.exceptions import InvalidTimeError -from pytz.exceptions import NonExistentTimeError -from pytz.exceptions import UnknownTimeZoneError -from pytz.tzinfo import unpickler -from pytz.tzfile import build_tzinfo, _byte_string - - -try: - unicode - -except NameError: # Python 3.x - - # Python 3.x doesn't have unicode(), making writing code - # for Python 2.3 and Python 3.x a pain. - unicode = str - - def ascii(s): - r""" - >>> ascii('Hello') - 'Hello' - >>> ascii('\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - UnicodeEncodeError: ... - """ - s.encode('US-ASCII') # Raise an exception if not ASCII - return s # But return the original string - not a byte string. - -else: # Python 2.x - - def ascii(s): - r""" - >>> ascii('Hello') - 'Hello' - >>> ascii(u'Hello') - 'Hello' - >>> ascii(u'\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - UnicodeEncodeError: ... - """ - return s.encode('US-ASCII') - - -def open_resource(name): - """Open a resource from the zoneinfo subdir for reading. - - Uses the pkg_resources module if available and no standard file - found at the calculated location. - """ - # Patched in Debian, use the system zoneinfo from the tzdata package - name_parts = name.lstrip('/').split('/') - for part in name_parts: - if part == os.path.pardir or os.path.sep in part: - raise ValueError('Bad path segment: %r' % part) - filename = os.path.join('/usr/share/zoneinfo', *name_parts) - return open(filename, 'rb') - - -def resource_exists(name): - """Return true if the given resource exists""" - try: - open_resource(name).close() - return True - except IOError: - return False - - -# Enable this when we get some translations? -# We want an i18n API that is useful to programs using Python's gettext -# module, as well as the Zope3 i18n package. Perhaps we should just provide -# the POT file and translations, and leave it up to callers to make use -# of them. -# -# t = gettext.translation( -# 'pytz', os.path.join(os.path.dirname(__file__), 'locales'), -# fallback=True -# ) -# def _(timezone_name): -# """Translate a timezone name using the current locale, returning Unicode""" -# return t.ugettext(timezone_name) - - -_tzinfo_cache = {} - -def timezone(zone): - r''' Return a datetime.tzinfo implementation for the given timezone - - >>> from datetime import datetime, timedelta - >>> utc = timezone('UTC') - >>> eastern = timezone('US/Eastern') - >>> eastern.zone - 'US/Eastern' - >>> timezone(unicode('US/Eastern')) is eastern - True - >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) - >>> loc_dt = utc_dt.astimezone(eastern) - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - >>> loc_dt.strftime(fmt) - '2002-10-27 01:00:00 EST (-0500)' - >>> (loc_dt - timedelta(minutes=10)).strftime(fmt) - '2002-10-27 00:50:00 EST (-0500)' - >>> eastern.normalize(loc_dt - timedelta(minutes=10)).strftime(fmt) - '2002-10-27 01:50:00 EDT (-0400)' - >>> (loc_dt + timedelta(minutes=10)).strftime(fmt) - '2002-10-27 01:10:00 EST (-0500)' - - Raises UnknownTimeZoneError if passed an unknown zone. - - >>> try: - ... timezone('Asia/Shangri-La') - ... except UnknownTimeZoneError: - ... print('Unknown') - Unknown - - >>> try: - ... timezone(unicode('\N{TRADE MARK SIGN}')) - ... except UnknownTimeZoneError: - ... print('Unknown') - Unknown - - ''' - if zone.upper() == 'UTC': - return utc - - try: - zone = ascii(zone) - except UnicodeEncodeError: - # All valid timezones are ASCII - raise UnknownTimeZoneError(zone) - - zone = _unmunge_zone(zone) - if zone not in _tzinfo_cache: - if zone in all_timezones_set: - fp = open_resource(zone) - try: - _tzinfo_cache[zone] = build_tzinfo(zone, fp) - finally: - fp.close() - else: - raise UnknownTimeZoneError(zone) - - return _tzinfo_cache[zone] - - -def _unmunge_zone(zone): - """Undo the time zone name munging done by older versions of pytz.""" - return zone.replace('_plus_', '+').replace('_minus_', '-') - - -ZERO = datetime.timedelta(0) -HOUR = datetime.timedelta(hours=1) - - -class UTC(datetime.tzinfo): - """UTC - - Identical to the reference UTC implementation given in Python docs except - that it unpickles using the single module global instance defined beneath - this class declaration. - - Also contains extra attributes and methods to match other pytz tzinfo - instances. - """ - zone = "UTC" - - _utcoffset = ZERO - _dst = ZERO - _tzname = zone - - def utcoffset(self, dt): - return ZERO - - def tzname(self, dt): - return "UTC" - - def dst(self, dt): - return ZERO - - def __reduce__(self): - return _UTC, () - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time''' - if dt.tzinfo is not None: - raise ValueError('Not naive datetime (tzinfo is already set)') - return dt.replace(tzinfo=self) - - def normalize(self, dt, is_dst=False): - '''Correct the timezone information on the given datetime''' - if dt.tzinfo is None: - raise ValueError('Naive time - no tzinfo set') - return dt.replace(tzinfo=self) - - def __repr__(self): - return "" - - def __str__(self): - return "UTC" - - -UTC = utc = UTC() # UTC is a singleton - - -def _UTC(): - """Factory function for utc unpickling. - - Makes sure that unpickling a utc instance always returns the same - module global. - - These examples belong in the UTC class above, but it is obscured; or in - the README.txt, but we are not depending on Python 2.4 so integrating - the README.txt examples with the unit tests is not trivial. - - >>> import datetime, pickle - >>> dt = datetime.datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc) - >>> naive = dt.replace(tzinfo=None) - >>> p = pickle.dumps(dt, 1) - >>> naive_p = pickle.dumps(naive, 1) - >>> len(p) - len(naive_p) - 17 - >>> new = pickle.loads(p) - >>> new == dt - True - >>> new is dt - False - >>> new.tzinfo is dt.tzinfo - True - >>> utc is UTC is timezone('UTC') - True - >>> utc is timezone('GMT') - False - """ - return utc -_UTC.__safe_for_unpickling__ = True - - -def _p(*args): - """Factory function for unpickling pytz tzinfo instances. - - Just a wrapper around tzinfo.unpickler to save a few bytes in each pickle - by shortening the path. - """ - return unpickler(*args) -_p.__safe_for_unpickling__ = True - - -class _LazyDict(DictMixin): - """Dictionary populated on first use.""" - data = None - def __getitem__(self, key): - if self.data is None: - self._fill() - return self.data[key.upper()] - - def __contains__(self, key): - if self.data is None: - self._fill() - return key in self.data - - def __iter__(self): - if self.data is None: - self._fill() - return iter(self.data) - - def __len__(self): - if self.data is None: - self._fill() - return len(self.data) - - def keys(self): - if self.data is None: - self._fill() - return self.data.keys() - - -class _CountryTimezoneDict(_LazyDict): - """Map ISO 3166 country code to a list of timezone names commonly used - in that country. - - iso3166_code is the two letter code used to identify the country. - - >>> def print_list(list_of_strings): - ... 'We use a helper so doctests work under Python 2.3 -> 3.x' - ... for s in list_of_strings: - ... print(s) - - >>> print_list(country_timezones['nz']) - Pacific/Auckland - Pacific/Chatham - >>> print_list(country_timezones['ch']) - Europe/Zurich - >>> print_list(country_timezones['CH']) - Europe/Zurich - >>> print_list(country_timezones[unicode('ch')]) - Europe/Zurich - >>> print_list(country_timezones['XXX']) - Traceback (most recent call last): - ... - KeyError: 'XXX' - - Previously, this information was exposed as a function rather than a - dictionary. This is still supported:: - - >>> print_list(country_timezones('nz')) - Pacific/Auckland - Pacific/Chatham - """ - def __call__(self, iso3166_code): - """Backwards compatibility.""" - return self[iso3166_code] - - def _fill(self): - data = {} - zone_tab = open_resource('zone.tab') - try: - for line in zone_tab: - line = line.decode('US-ASCII') - if line.startswith('#'): - continue - code, coordinates, zone = line.split(None, 4)[:3] - if zone not in all_timezones_set: - continue - try: - data[code].append(zone) - except KeyError: - data[code] = [zone] - self.data = data - finally: - zone_tab.close() - -country_timezones = _CountryTimezoneDict() - - -class _CountryNameDict(_LazyDict): - '''Dictionary proving ISO3166 code -> English name. - - >>> print(country_names['au']) - Australia - ''' - def _fill(self): - data = {} - zone_tab = open_resource('iso3166.tab') - try: - for line in zone_tab.readlines(): - line = line.decode('US-ASCII') - if line.startswith('#'): - continue - code, name = line.split(None, 1) - data[code] = name.strip() - self.data = data - finally: - zone_tab.close() - -country_names = _CountryNameDict() - - -# Time-zone info based solely on fixed offsets - -class _FixedOffset(datetime.tzinfo): - - zone = None # to match the standard pytz API - - def __init__(self, minutes): - if abs(minutes) >= 1440: - raise ValueError("absolute offset is too large", minutes) - self._minutes = minutes - self._offset = datetime.timedelta(minutes=minutes) - - def utcoffset(self, dt): - return self._offset - - def __reduce__(self): - return FixedOffset, (self._minutes, ) - - def dst(self, dt): - return ZERO - - def tzname(self, dt): - return None - - def __repr__(self): - return 'pytz.FixedOffset(%d)' % self._minutes - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time''' - if dt.tzinfo is not None: - raise ValueError('Not naive datetime (tzinfo is already set)') - return dt.replace(tzinfo=self) - - def normalize(self, dt, is_dst=False): - '''Correct the timezone information on the given datetime''' - if dt.tzinfo is None: - raise ValueError('Naive time - no tzinfo set') - return dt.replace(tzinfo=self) - - -def FixedOffset(offset, _tzinfos = {}): - """return a fixed-offset timezone based off a number of minutes. - - >>> one = FixedOffset(-330) - >>> one - pytz.FixedOffset(-330) - >>> one.utcoffset(datetime.datetime.now()) - datetime.timedelta(-1, 66600) - >>> one.dst(datetime.datetime.now()) - datetime.timedelta(0) - - >>> two = FixedOffset(1380) - >>> two - pytz.FixedOffset(1380) - >>> two.utcoffset(datetime.datetime.now()) - datetime.timedelta(0, 82800) - >>> two.dst(datetime.datetime.now()) - datetime.timedelta(0) - - The datetime.timedelta must be between the range of -1 and 1 day, - non-inclusive. - - >>> FixedOffset(1440) - Traceback (most recent call last): - ... - ValueError: ('absolute offset is too large', 1440) - - >>> FixedOffset(-1440) - Traceback (most recent call last): - ... - ValueError: ('absolute offset is too large', -1440) - - An offset of 0 is special-cased to return UTC. - - >>> FixedOffset(0) is UTC - True - - There should always be only one instance of a FixedOffset per timedelta. - This should be true for multiple creation calls. - - >>> FixedOffset(-330) is one - True - >>> FixedOffset(1380) is two - True - - It should also be true for pickling. - - >>> import pickle - >>> pickle.loads(pickle.dumps(one)) is one - True - >>> pickle.loads(pickle.dumps(two)) is two - True - """ - if offset == 0: - return UTC - - info = _tzinfos.get(offset) - if info is None: - # We haven't seen this one before. we need to save it. - - # Use setdefault to avoid a race condition and make sure we have - # only one - info = _tzinfos.setdefault(offset, _FixedOffset(offset)) - - return info - -FixedOffset.__safe_for_unpickling__ = True - - -def _test(): - import doctest, os, sys - sys.path.insert(0, os.pardir) - import pytz - return doctest.testmod(pytz) - -if __name__ == '__main__': - _test() - -all_timezones = \ -['Africa/Abidjan', - 'Africa/Accra', - 'Africa/Addis_Ababa', - 'Africa/Algiers', - 'Africa/Asmara', - 'Africa/Asmera', - 'Africa/Bamako', - 'Africa/Bangui', - 'Africa/Banjul', - 'Africa/Bissau', - 'Africa/Blantyre', - 'Africa/Brazzaville', - 'Africa/Bujumbura', - 'Africa/Cairo', - 'Africa/Casablanca', - 'Africa/Ceuta', - 'Africa/Conakry', - 'Africa/Dakar', - 'Africa/Dar_es_Salaam', - 'Africa/Djibouti', - 'Africa/Douala', - 'Africa/El_Aaiun', - 'Africa/Freetown', - 'Africa/Gaborone', - 'Africa/Harare', - 'Africa/Johannesburg', - 'Africa/Kampala', - 'Africa/Khartoum', - 'Africa/Kigali', - 'Africa/Kinshasa', - 'Africa/Lagos', - 'Africa/Libreville', - 'Africa/Lome', - 'Africa/Luanda', - 'Africa/Lubumbashi', - 'Africa/Lusaka', - 'Africa/Malabo', - 'Africa/Maputo', - 'Africa/Maseru', - 'Africa/Mbabane', - 'Africa/Mogadishu', - 'Africa/Monrovia', - 'Africa/Nairobi', - 'Africa/Ndjamena', - 'Africa/Niamey', - 'Africa/Nouakchott', - 'Africa/Ouagadougou', - 'Africa/Porto-Novo', - 'Africa/Sao_Tome', - 'Africa/Timbuktu', - 'Africa/Tripoli', - 'Africa/Tunis', - 'Africa/Windhoek', - 'America/Adak', - 'America/Anchorage', - 'America/Anguilla', - 'America/Antigua', - 'America/Araguaina', - 'America/Argentina/Buenos_Aires', - 'America/Argentina/Catamarca', - 'America/Argentina/ComodRivadavia', - 'America/Argentina/Cordoba', - 'America/Argentina/Jujuy', - 'America/Argentina/La_Rioja', - 'America/Argentina/Mendoza', - 'America/Argentina/Rio_Gallegos', - 'America/Argentina/Salta', - 'America/Argentina/San_Juan', - 'America/Argentina/San_Luis', - 'America/Argentina/Tucuman', - 'America/Argentina/Ushuaia', - 'America/Aruba', - 'America/Asuncion', - 'America/Atikokan', - 'America/Atka', - 'America/Bahia', - 'America/Bahia_Banderas', - 'America/Barbados', - 'America/Belem', - 'America/Belize', - 'America/Blanc-Sablon', - 'America/Boa_Vista', - 'America/Bogota', - 'America/Boise', - 'America/Buenos_Aires', - 'America/Cambridge_Bay', - 'America/Campo_Grande', - 'America/Cancun', - 'America/Caracas', - 'America/Catamarca', - 'America/Cayenne', - 'America/Cayman', - 'America/Chicago', - 'America/Chihuahua', - 'America/Coral_Harbour', - 'America/Cordoba', - 'America/Costa_Rica', - 'America/Cuiaba', - 'America/Curacao', - 'America/Danmarkshavn', - 'America/Dawson', - 'America/Dawson_Creek', - 'America/Denver', - 'America/Detroit', - 'America/Dominica', - 'America/Edmonton', - 'America/Eirunepe', - 'America/El_Salvador', - 'America/Ensenada', - 'America/Fort_Wayne', - 'America/Fortaleza', - 'America/Glace_Bay', - 'America/Godthab', - 'America/Goose_Bay', - 'America/Grand_Turk', - 'America/Grenada', - 'America/Guadeloupe', - 'America/Guatemala', - 'America/Guayaquil', - 'America/Guyana', - 'America/Halifax', - 'America/Havana', - 'America/Hermosillo', - 'America/Indiana/Indianapolis', - 'America/Indiana/Knox', - 'America/Indiana/Marengo', - 'America/Indiana/Petersburg', - 'America/Indiana/Tell_City', - 'America/Indiana/Vevay', - 'America/Indiana/Vincennes', - 'America/Indiana/Winamac', - 'America/Indianapolis', - 'America/Inuvik', - 'America/Iqaluit', - 'America/Jamaica', - 'America/Jujuy', - 'America/Juneau', - 'America/Kentucky/Louisville', - 'America/Kentucky/Monticello', - 'America/Knox_IN', - 'America/Kralendijk', - 'America/La_Paz', - 'America/Lima', - 'America/Los_Angeles', - 'America/Louisville', - 'America/Lower_Princes', - 'America/Maceio', - 'America/Managua', - 'America/Manaus', - 'America/Marigot', - 'America/Martinique', - 'America/Matamoros', - 'America/Mazatlan', - 'America/Mendoza', - 'America/Menominee', - 'America/Merida', - 'America/Metlakatla', - 'America/Mexico_City', - 'America/Miquelon', - 'America/Moncton', - 'America/Monterrey', - 'America/Montevideo', - 'America/Montreal', - 'America/Montserrat', - 'America/Nassau', - 'America/New_York', - 'America/Nipigon', - 'America/Nome', - 'America/Noronha', - 'America/North_Dakota/Beulah', - 'America/North_Dakota/Center', - 'America/North_Dakota/New_Salem', - 'America/Ojinaga', - 'America/Panama', - 'America/Pangnirtung', - 'America/Paramaribo', - 'America/Phoenix', - 'America/Port-au-Prince', - 'America/Port_of_Spain', - 'America/Porto_Acre', - 'America/Porto_Velho', - 'America/Puerto_Rico', - 'America/Rainy_River', - 'America/Rankin_Inlet', - 'America/Recife', - 'America/Regina', - 'America/Resolute', - 'America/Rio_Branco', - 'America/Rosario', - 'America/Santa_Isabel', - 'America/Santarem', - 'America/Santiago', - 'America/Santo_Domingo', - 'America/Sao_Paulo', - 'America/Scoresbysund', - 'America/Shiprock', - 'America/Sitka', - 'America/St_Barthelemy', - 'America/St_Johns', - 'America/St_Kitts', - 'America/St_Lucia', - 'America/St_Thomas', - 'America/St_Vincent', - 'America/Swift_Current', - 'America/Tegucigalpa', - 'America/Thule', - 'America/Thunder_Bay', - 'America/Tijuana', - 'America/Toronto', - 'America/Tortola', - 'America/Vancouver', - 'America/Virgin', - 'America/Whitehorse', - 'America/Winnipeg', - 'America/Yakutat', - 'America/Yellowknife', - 'Antarctica/Casey', - 'Antarctica/Davis', - 'Antarctica/DumontDUrville', - 'Antarctica/Macquarie', - 'Antarctica/Mawson', - 'Antarctica/McMurdo', - 'Antarctica/Palmer', - 'Antarctica/Rothera', - 'Antarctica/South_Pole', - 'Antarctica/Syowa', - 'Antarctica/Vostok', - 'Arctic/Longyearbyen', - 'Asia/Aden', - 'Asia/Almaty', - 'Asia/Amman', - 'Asia/Anadyr', - 'Asia/Aqtau', - 'Asia/Aqtobe', - 'Asia/Ashgabat', - 'Asia/Ashkhabad', - 'Asia/Baghdad', - 'Asia/Bahrain', - 'Asia/Baku', - 'Asia/Bangkok', - 'Asia/Beirut', - 'Asia/Bishkek', - 'Asia/Brunei', - 'Asia/Calcutta', - 'Asia/Choibalsan', - 'Asia/Chongqing', - 'Asia/Chungking', - 'Asia/Colombo', - 'Asia/Dacca', - 'Asia/Damascus', - 'Asia/Dhaka', - 'Asia/Dili', - 'Asia/Dubai', - 'Asia/Dushanbe', - 'Asia/Gaza', - 'Asia/Harbin', - 'Asia/Ho_Chi_Minh', - 'Asia/Hong_Kong', - 'Asia/Hovd', - 'Asia/Irkutsk', - 'Asia/Istanbul', - 'Asia/Jakarta', - 'Asia/Jayapura', - 'Asia/Jerusalem', - 'Asia/Kabul', - 'Asia/Kamchatka', - 'Asia/Karachi', - 'Asia/Kashgar', - 'Asia/Kathmandu', - 'Asia/Katmandu', - 'Asia/Kolkata', - 'Asia/Krasnoyarsk', - 'Asia/Kuala_Lumpur', - 'Asia/Kuching', - 'Asia/Kuwait', - 'Asia/Macao', - 'Asia/Macau', - 'Asia/Magadan', - 'Asia/Makassar', - 'Asia/Manila', - 'Asia/Muscat', - 'Asia/Nicosia', - 'Asia/Novokuznetsk', - 'Asia/Novosibirsk', - 'Asia/Omsk', - 'Asia/Oral', - 'Asia/Phnom_Penh', - 'Asia/Pontianak', - 'Asia/Pyongyang', - 'Asia/Qatar', - 'Asia/Qyzylorda', - 'Asia/Rangoon', - 'Asia/Riyadh', - 'Asia/Saigon', - 'Asia/Sakhalin', - 'Asia/Samarkand', - 'Asia/Seoul', - 'Asia/Shanghai', - 'Asia/Singapore', - 'Asia/Taipei', - 'Asia/Tashkent', - 'Asia/Tbilisi', - 'Asia/Tehran', - 'Asia/Tel_Aviv', - 'Asia/Thimbu', - 'Asia/Thimphu', - 'Asia/Tokyo', - 'Asia/Ujung_Pandang', - 'Asia/Ulaanbaatar', - 'Asia/Ulan_Bator', - 'Asia/Urumqi', - 'Asia/Vientiane', - 'Asia/Vladivostok', - 'Asia/Yakutsk', - 'Asia/Yekaterinburg', - 'Asia/Yerevan', - 'Atlantic/Azores', - 'Atlantic/Bermuda', - 'Atlantic/Canary', - 'Atlantic/Cape_Verde', - 'Atlantic/Faeroe', - 'Atlantic/Faroe', - 'Atlantic/Jan_Mayen', - 'Atlantic/Madeira', - 'Atlantic/Reykjavik', - 'Atlantic/South_Georgia', - 'Atlantic/St_Helena', - 'Atlantic/Stanley', - 'Australia/ACT', - 'Australia/Adelaide', - 'Australia/Brisbane', - 'Australia/Broken_Hill', - 'Australia/Canberra', - 'Australia/Currie', - 'Australia/Darwin', - 'Australia/Eucla', - 'Australia/Hobart', - 'Australia/LHI', - 'Australia/Lindeman', - 'Australia/Lord_Howe', - 'Australia/Melbourne', - 'Australia/NSW', - 'Australia/North', - 'Australia/Perth', - 'Australia/Queensland', - 'Australia/South', - 'Australia/Sydney', - 'Australia/Tasmania', - 'Australia/Victoria', - 'Australia/West', - 'Australia/Yancowinna', - 'Brazil/Acre', - 'Brazil/DeNoronha', - 'Brazil/East', - 'Brazil/West', - 'CET', - 'CST6CDT', - 'Canada/Atlantic', - 'Canada/Central', - 'Canada/East-Saskatchewan', - 'Canada/Eastern', - 'Canada/Mountain', - 'Canada/Newfoundland', - 'Canada/Pacific', - 'Canada/Saskatchewan', - 'Canada/Yukon', - 'Chile/Continental', - 'Chile/EasterIsland', - 'Cuba', - 'EET', - 'EST', - 'EST5EDT', - 'Egypt', - 'Eire', - 'Etc/GMT', - 'Etc/GMT+0', - 'Etc/GMT+1', - 'Etc/GMT+10', - 'Etc/GMT+11', - 'Etc/GMT+12', - 'Etc/GMT+2', - 'Etc/GMT+3', - 'Etc/GMT+4', - 'Etc/GMT+5', - 'Etc/GMT+6', - 'Etc/GMT+7', - 'Etc/GMT+8', - 'Etc/GMT+9', - 'Etc/GMT-0', - 'Etc/GMT-1', - 'Etc/GMT-10', - 'Etc/GMT-11', - 'Etc/GMT-12', - 'Etc/GMT-13', - 'Etc/GMT-14', - 'Etc/GMT-2', - 'Etc/GMT-3', - 'Etc/GMT-4', - 'Etc/GMT-5', - 'Etc/GMT-6', - 'Etc/GMT-7', - 'Etc/GMT-8', - 'Etc/GMT-9', - 'Etc/GMT0', - 'Etc/Greenwich', - 'Etc/UCT', - 'Etc/UTC', - 'Etc/Universal', - 'Etc/Zulu', - 'Europe/Amsterdam', - 'Europe/Andorra', - 'Europe/Athens', - 'Europe/Belfast', - 'Europe/Belgrade', - 'Europe/Berlin', - 'Europe/Bratislava', - 'Europe/Brussels', - 'Europe/Bucharest', - 'Europe/Budapest', - 'Europe/Chisinau', - 'Europe/Copenhagen', - 'Europe/Dublin', - 'Europe/Gibraltar', - 'Europe/Guernsey', - 'Europe/Helsinki', - 'Europe/Isle_of_Man', - 'Europe/Istanbul', - 'Europe/Jersey', - 'Europe/Kaliningrad', - 'Europe/Kiev', - 'Europe/Lisbon', - 'Europe/Ljubljana', - 'Europe/London', - 'Europe/Luxembourg', - 'Europe/Madrid', - 'Europe/Malta', - 'Europe/Mariehamn', - 'Europe/Minsk', - 'Europe/Monaco', - 'Europe/Moscow', - 'Europe/Nicosia', - 'Europe/Oslo', - 'Europe/Paris', - 'Europe/Podgorica', - 'Europe/Prague', - 'Europe/Riga', - 'Europe/Rome', - 'Europe/Samara', - 'Europe/San_Marino', - 'Europe/Sarajevo', - 'Europe/Simferopol', - 'Europe/Skopje', - 'Europe/Sofia', - 'Europe/Stockholm', - 'Europe/Tallinn', - 'Europe/Tirane', - 'Europe/Tiraspol', - 'Europe/Uzhgorod', - 'Europe/Vaduz', - 'Europe/Vatican', - 'Europe/Vienna', - 'Europe/Vilnius', - 'Europe/Volgograd', - 'Europe/Warsaw', - 'Europe/Zagreb', - 'Europe/Zaporozhye', - 'Europe/Zurich', - 'GB', - 'GB-Eire', - 'GMT', - 'GMT+0', - 'GMT-0', - 'GMT0', - 'Greenwich', - 'HST', - 'Hongkong', - 'Iceland', - 'Indian/Antananarivo', - 'Indian/Chagos', - 'Indian/Christmas', - 'Indian/Cocos', - 'Indian/Comoro', - 'Indian/Kerguelen', - 'Indian/Mahe', - 'Indian/Maldives', - 'Indian/Mauritius', - 'Indian/Mayotte', - 'Indian/Reunion', - 'Iran', - 'Israel', - 'Jamaica', - 'Japan', - 'Kwajalein', - 'Libya', - 'MET', - 'MST', - 'MST7MDT', - 'Mexico/BajaNorte', - 'Mexico/BajaSur', - 'Mexico/General', - 'NZ', - 'NZ-CHAT', - 'Navajo', - 'PRC', - 'PST8PDT', - 'Pacific/Apia', - 'Pacific/Auckland', - 'Pacific/Chatham', - 'Pacific/Chuuk', - 'Pacific/Easter', - 'Pacific/Efate', - 'Pacific/Enderbury', - 'Pacific/Fakaofo', - 'Pacific/Fiji', - 'Pacific/Funafuti', - 'Pacific/Galapagos', - 'Pacific/Gambier', - 'Pacific/Guadalcanal', - 'Pacific/Guam', - 'Pacific/Honolulu', - 'Pacific/Johnston', - 'Pacific/Kiritimati', - 'Pacific/Kosrae', - 'Pacific/Kwajalein', - 'Pacific/Majuro', - 'Pacific/Marquesas', - 'Pacific/Midway', - 'Pacific/Nauru', - 'Pacific/Niue', - 'Pacific/Norfolk', - 'Pacific/Noumea', - 'Pacific/Pago_Pago', - 'Pacific/Palau', - 'Pacific/Pitcairn', - 'Pacific/Pohnpei', - 'Pacific/Ponape', - 'Pacific/Port_Moresby', - 'Pacific/Rarotonga', - 'Pacific/Saipan', - 'Pacific/Samoa', - 'Pacific/Tahiti', - 'Pacific/Tarawa', - 'Pacific/Tongatapu', - 'Pacific/Truk', - 'Pacific/Wake', - 'Pacific/Wallis', - 'Pacific/Yap', - 'Poland', - 'Portugal', - 'ROC', - 'ROK', - 'Singapore', - 'Turkey', - 'UCT', - 'US/Alaska', - 'US/Aleutian', - 'US/Arizona', - 'US/Central', - 'US/East-Indiana', - 'US/Eastern', - 'US/Hawaii', - 'US/Indiana-Starke', - 'US/Michigan', - 'US/Mountain', - 'US/Pacific', - 'US/Pacific-New', - 'US/Samoa', - 'UTC', - 'Universal', - 'W-SU', - 'WET', - 'Zulu'] -all_timezones = [ - tz for tz in all_timezones if resource_exists(tz)] - -all_timezones_set = set(all_timezones) -common_timezones = \ -['Africa/Abidjan', - 'Africa/Accra', - 'Africa/Addis_Ababa', - 'Africa/Algiers', - 'Africa/Asmara', - 'Africa/Bamako', - 'Africa/Bangui', - 'Africa/Banjul', - 'Africa/Bissau', - 'Africa/Blantyre', - 'Africa/Brazzaville', - 'Africa/Bujumbura', - 'Africa/Cairo', - 'Africa/Casablanca', - 'Africa/Ceuta', - 'Africa/Conakry', - 'Africa/Dakar', - 'Africa/Dar_es_Salaam', - 'Africa/Djibouti', - 'Africa/Douala', - 'Africa/El_Aaiun', - 'Africa/Freetown', - 'Africa/Gaborone', - 'Africa/Harare', - 'Africa/Johannesburg', - 'Africa/Kampala', - 'Africa/Khartoum', - 'Africa/Kigali', - 'Africa/Kinshasa', - 'Africa/Lagos', - 'Africa/Libreville', - 'Africa/Lome', - 'Africa/Luanda', - 'Africa/Lubumbashi', - 'Africa/Lusaka', - 'Africa/Malabo', - 'Africa/Maputo', - 'Africa/Maseru', - 'Africa/Mbabane', - 'Africa/Mogadishu', - 'Africa/Monrovia', - 'Africa/Nairobi', - 'Africa/Ndjamena', - 'Africa/Niamey', - 'Africa/Nouakchott', - 'Africa/Ouagadougou', - 'Africa/Porto-Novo', - 'Africa/Sao_Tome', - 'Africa/Tripoli', - 'Africa/Tunis', - 'Africa/Windhoek', - 'America/Adak', - 'America/Anchorage', - 'America/Anguilla', - 'America/Antigua', - 'America/Araguaina', - 'America/Argentina/Buenos_Aires', - 'America/Argentina/Catamarca', - 'America/Argentina/Cordoba', - 'America/Argentina/Jujuy', - 'America/Argentina/La_Rioja', - 'America/Argentina/Mendoza', - 'America/Argentina/Rio_Gallegos', - 'America/Argentina/Salta', - 'America/Argentina/San_Juan', - 'America/Argentina/San_Luis', - 'America/Argentina/Tucuman', - 'America/Argentina/Ushuaia', - 'America/Aruba', - 'America/Asuncion', - 'America/Atikokan', - 'America/Bahia', - 'America/Bahia_Banderas', - 'America/Barbados', - 'America/Belem', - 'America/Belize', - 'America/Blanc-Sablon', - 'America/Boa_Vista', - 'America/Bogota', - 'America/Boise', - 'America/Cambridge_Bay', - 'America/Campo_Grande', - 'America/Cancun', - 'America/Caracas', - 'America/Cayenne', - 'America/Cayman', - 'America/Chicago', - 'America/Chihuahua', - 'America/Costa_Rica', - 'America/Cuiaba', - 'America/Curacao', - 'America/Danmarkshavn', - 'America/Dawson', - 'America/Dawson_Creek', - 'America/Denver', - 'America/Detroit', - 'America/Dominica', - 'America/Edmonton', - 'America/Eirunepe', - 'America/El_Salvador', - 'America/Fortaleza', - 'America/Glace_Bay', - 'America/Godthab', - 'America/Goose_Bay', - 'America/Grand_Turk', - 'America/Grenada', - 'America/Guadeloupe', - 'America/Guatemala', - 'America/Guayaquil', - 'America/Guyana', - 'America/Halifax', - 'America/Havana', - 'America/Hermosillo', - 'America/Indiana/Indianapolis', - 'America/Indiana/Knox', - 'America/Indiana/Marengo', - 'America/Indiana/Petersburg', - 'America/Indiana/Tell_City', - 'America/Indiana/Vevay', - 'America/Indiana/Vincennes', - 'America/Indiana/Winamac', - 'America/Inuvik', - 'America/Iqaluit', - 'America/Jamaica', - 'America/Juneau', - 'America/Kentucky/Louisville', - 'America/Kentucky/Monticello', - 'America/Kralendijk', - 'America/La_Paz', - 'America/Lima', - 'America/Los_Angeles', - 'America/Lower_Princes', - 'America/Maceio', - 'America/Managua', - 'America/Manaus', - 'America/Marigot', - 'America/Martinique', - 'America/Matamoros', - 'America/Mazatlan', - 'America/Menominee', - 'America/Merida', - 'America/Metlakatla', - 'America/Mexico_City', - 'America/Miquelon', - 'America/Moncton', - 'America/Monterrey', - 'America/Montevideo', - 'America/Montreal', - 'America/Montserrat', - 'America/Nassau', - 'America/New_York', - 'America/Nipigon', - 'America/Nome', - 'America/Noronha', - 'America/North_Dakota/Beulah', - 'America/North_Dakota/Center', - 'America/North_Dakota/New_Salem', - 'America/Ojinaga', - 'America/Panama', - 'America/Pangnirtung', - 'America/Paramaribo', - 'America/Phoenix', - 'America/Port-au-Prince', - 'America/Port_of_Spain', - 'America/Porto_Velho', - 'America/Puerto_Rico', - 'America/Rainy_River', - 'America/Rankin_Inlet', - 'America/Recife', - 'America/Regina', - 'America/Resolute', - 'America/Rio_Branco', - 'America/Santa_Isabel', - 'America/Santarem', - 'America/Santiago', - 'America/Santo_Domingo', - 'America/Sao_Paulo', - 'America/Scoresbysund', - 'America/Shiprock', - 'America/Sitka', - 'America/St_Barthelemy', - 'America/St_Johns', - 'America/St_Kitts', - 'America/St_Lucia', - 'America/St_Thomas', - 'America/St_Vincent', - 'America/Swift_Current', - 'America/Tegucigalpa', - 'America/Thule', - 'America/Thunder_Bay', - 'America/Tijuana', - 'America/Toronto', - 'America/Tortola', - 'America/Vancouver', - 'America/Whitehorse', - 'America/Winnipeg', - 'America/Yakutat', - 'America/Yellowknife', - 'Antarctica/Casey', - 'Antarctica/Davis', - 'Antarctica/DumontDUrville', - 'Antarctica/Macquarie', - 'Antarctica/Mawson', - 'Antarctica/McMurdo', - 'Antarctica/Palmer', - 'Antarctica/Rothera', - 'Antarctica/South_Pole', - 'Antarctica/Syowa', - 'Antarctica/Vostok', - 'Arctic/Longyearbyen', - 'Asia/Aden', - 'Asia/Almaty', - 'Asia/Amman', - 'Asia/Anadyr', - 'Asia/Aqtau', - 'Asia/Aqtobe', - 'Asia/Ashgabat', - 'Asia/Baghdad', - 'Asia/Bahrain', - 'Asia/Baku', - 'Asia/Bangkok', - 'Asia/Beirut', - 'Asia/Bishkek', - 'Asia/Brunei', - 'Asia/Choibalsan', - 'Asia/Chongqing', - 'Asia/Colombo', - 'Asia/Damascus', - 'Asia/Dhaka', - 'Asia/Dili', - 'Asia/Dubai', - 'Asia/Dushanbe', - 'Asia/Gaza', - 'Asia/Harbin', - 'Asia/Ho_Chi_Minh', - 'Asia/Hong_Kong', - 'Asia/Hovd', - 'Asia/Irkutsk', - 'Asia/Jakarta', - 'Asia/Jayapura', - 'Asia/Jerusalem', - 'Asia/Kabul', - 'Asia/Kamchatka', - 'Asia/Karachi', - 'Asia/Kashgar', - 'Asia/Kathmandu', - 'Asia/Kolkata', - 'Asia/Krasnoyarsk', - 'Asia/Kuala_Lumpur', - 'Asia/Kuching', - 'Asia/Kuwait', - 'Asia/Macau', - 'Asia/Magadan', - 'Asia/Makassar', - 'Asia/Manila', - 'Asia/Muscat', - 'Asia/Nicosia', - 'Asia/Novokuznetsk', - 'Asia/Novosibirsk', - 'Asia/Omsk', - 'Asia/Oral', - 'Asia/Phnom_Penh', - 'Asia/Pontianak', - 'Asia/Pyongyang', - 'Asia/Qatar', - 'Asia/Qyzylorda', - 'Asia/Rangoon', - 'Asia/Riyadh', - 'Asia/Sakhalin', - 'Asia/Samarkand', - 'Asia/Seoul', - 'Asia/Shanghai', - 'Asia/Singapore', - 'Asia/Taipei', - 'Asia/Tashkent', - 'Asia/Tbilisi', - 'Asia/Tehran', - 'Asia/Thimphu', - 'Asia/Tokyo', - 'Asia/Ulaanbaatar', - 'Asia/Urumqi', - 'Asia/Vientiane', - 'Asia/Vladivostok', - 'Asia/Yakutsk', - 'Asia/Yekaterinburg', - 'Asia/Yerevan', - 'Atlantic/Azores', - 'Atlantic/Bermuda', - 'Atlantic/Canary', - 'Atlantic/Cape_Verde', - 'Atlantic/Faroe', - 'Atlantic/Madeira', - 'Atlantic/Reykjavik', - 'Atlantic/South_Georgia', - 'Atlantic/St_Helena', - 'Atlantic/Stanley', - 'Australia/Adelaide', - 'Australia/Brisbane', - 'Australia/Broken_Hill', - 'Australia/Currie', - 'Australia/Darwin', - 'Australia/Eucla', - 'Australia/Hobart', - 'Australia/Lindeman', - 'Australia/Lord_Howe', - 'Australia/Melbourne', - 'Australia/Perth', - 'Australia/Sydney', - 'Canada/Atlantic', - 'Canada/Central', - 'Canada/Eastern', - 'Canada/Mountain', - 'Canada/Newfoundland', - 'Canada/Pacific', - 'Europe/Amsterdam', - 'Europe/Andorra', - 'Europe/Athens', - 'Europe/Belgrade', - 'Europe/Berlin', - 'Europe/Bratislava', - 'Europe/Brussels', - 'Europe/Bucharest', - 'Europe/Budapest', - 'Europe/Chisinau', - 'Europe/Copenhagen', - 'Europe/Dublin', - 'Europe/Gibraltar', - 'Europe/Guernsey', - 'Europe/Helsinki', - 'Europe/Isle_of_Man', - 'Europe/Istanbul', - 'Europe/Jersey', - 'Europe/Kaliningrad', - 'Europe/Kiev', - 'Europe/Lisbon', - 'Europe/Ljubljana', - 'Europe/London', - 'Europe/Luxembourg', - 'Europe/Madrid', - 'Europe/Malta', - 'Europe/Mariehamn', - 'Europe/Minsk', - 'Europe/Monaco', - 'Europe/Moscow', - 'Europe/Oslo', - 'Europe/Paris', - 'Europe/Podgorica', - 'Europe/Prague', - 'Europe/Riga', - 'Europe/Rome', - 'Europe/Samara', - 'Europe/San_Marino', - 'Europe/Sarajevo', - 'Europe/Simferopol', - 'Europe/Skopje', - 'Europe/Sofia', - 'Europe/Stockholm', - 'Europe/Tallinn', - 'Europe/Tirane', - 'Europe/Uzhgorod', - 'Europe/Vaduz', - 'Europe/Vatican', - 'Europe/Vienna', - 'Europe/Vilnius', - 'Europe/Volgograd', - 'Europe/Warsaw', - 'Europe/Zagreb', - 'Europe/Zaporozhye', - 'Europe/Zurich', - 'GMT', - 'Indian/Antananarivo', - 'Indian/Chagos', - 'Indian/Christmas', - 'Indian/Cocos', - 'Indian/Comoro', - 'Indian/Kerguelen', - 'Indian/Mahe', - 'Indian/Maldives', - 'Indian/Mauritius', - 'Indian/Mayotte', - 'Indian/Reunion', - 'Pacific/Apia', - 'Pacific/Auckland', - 'Pacific/Chatham', - 'Pacific/Chuuk', - 'Pacific/Easter', - 'Pacific/Efate', - 'Pacific/Enderbury', - 'Pacific/Fakaofo', - 'Pacific/Fiji', - 'Pacific/Funafuti', - 'Pacific/Galapagos', - 'Pacific/Gambier', - 'Pacific/Guadalcanal', - 'Pacific/Guam', - 'Pacific/Honolulu', - 'Pacific/Johnston', - 'Pacific/Kiritimati', - 'Pacific/Kosrae', - 'Pacific/Kwajalein', - 'Pacific/Majuro', - 'Pacific/Marquesas', - 'Pacific/Midway', - 'Pacific/Nauru', - 'Pacific/Niue', - 'Pacific/Norfolk', - 'Pacific/Noumea', - 'Pacific/Pago_Pago', - 'Pacific/Palau', - 'Pacific/Pitcairn', - 'Pacific/Pohnpei', - 'Pacific/Port_Moresby', - 'Pacific/Rarotonga', - 'Pacific/Saipan', - 'Pacific/Tahiti', - 'Pacific/Tarawa', - 'Pacific/Tongatapu', - 'Pacific/Wake', - 'Pacific/Wallis', - 'US/Alaska', - 'US/Arizona', - 'US/Central', - 'US/Eastern', - 'US/Hawaii', - 'US/Mountain', - 'US/Pacific', - 'UTC'] -common_timezones = [ - tz for tz in common_timezones if tz in all_timezones] - -common_timezones_set = set(common_timezones) diff --git a/www.clementine-player.org/pytz/exceptions.py b/www.clementine-player.org/pytz/exceptions.py deleted file mode 100644 index 0376108..0000000 --- a/www.clementine-player.org/pytz/exceptions.py +++ /dev/null @@ -1,48 +0,0 @@ -''' -Custom exceptions raised by pytz. -''' - -__all__ = [ - 'UnknownTimeZoneError', 'InvalidTimeError', 'AmbiguousTimeError', - 'NonExistentTimeError', - ] - - -class UnknownTimeZoneError(KeyError): - '''Exception raised when pytz is passed an unknown timezone. - - >>> isinstance(UnknownTimeZoneError(), LookupError) - True - - This class is actually a subclass of KeyError to provide backwards - compatibility with code relying on the undocumented behavior of earlier - pytz releases. - - >>> isinstance(UnknownTimeZoneError(), KeyError) - True - ''' - pass - - -class InvalidTimeError(Exception): - '''Base class for invalid time exceptions.''' - - -class AmbiguousTimeError(InvalidTimeError): - '''Exception raised when attempting to create an ambiguous wallclock time. - - At the end of a DST transition period, a particular wallclock time will - occur twice (once before the clocks are set back, once after). Both - possibilities may be correct, unless further information is supplied. - - See DstTzInfo.normalize() for more info - ''' - - -class NonExistentTimeError(InvalidTimeError): - '''Exception raised when attempting to create a wallclock time that - cannot exist. - - At the start of a DST transition period, the wallclock time jumps forward. - The instants jumped over never occur. - ''' diff --git a/www.clementine-player.org/pytz/reference.py b/www.clementine-player.org/pytz/reference.py deleted file mode 100644 index 3dda13e..0000000 --- a/www.clementine-player.org/pytz/reference.py +++ /dev/null @@ -1,127 +0,0 @@ -''' -Reference tzinfo implementations from the Python docs. -Used for testing against as they are only correct for the years -1987 to 2006. Do not use these for real code. -''' - -from datetime import tzinfo, timedelta, datetime -from pytz import utc, UTC, HOUR, ZERO - -# A class building tzinfo objects for fixed-offset time zones. -# Note that FixedOffset(0, "UTC") is a different way to build a -# UTC tzinfo object. - -class FixedOffset(tzinfo): - """Fixed offset in minutes east from UTC.""" - - def __init__(self, offset, name): - self.__offset = timedelta(minutes = offset) - self.__name = name - - def utcoffset(self, dt): - return self.__offset - - def tzname(self, dt): - return self.__name - - def dst(self, dt): - return ZERO - -# A class capturing the platform's idea of local time. - -import time as _time - -STDOFFSET = timedelta(seconds = -_time.timezone) -if _time.daylight: - DSTOFFSET = timedelta(seconds = -_time.altzone) -else: - DSTOFFSET = STDOFFSET - -DSTDIFF = DSTOFFSET - STDOFFSET - -class LocalTimezone(tzinfo): - - def utcoffset(self, dt): - if self._isdst(dt): - return DSTOFFSET - else: - return STDOFFSET - - def dst(self, dt): - if self._isdst(dt): - return DSTDIFF - else: - return ZERO - - def tzname(self, dt): - return _time.tzname[self._isdst(dt)] - - def _isdst(self, dt): - tt = (dt.year, dt.month, dt.day, - dt.hour, dt.minute, dt.second, - dt.weekday(), 0, -1) - stamp = _time.mktime(tt) - tt = _time.localtime(stamp) - return tt.tm_isdst > 0 - -Local = LocalTimezone() - -# A complete implementation of current DST rules for major US time zones. - -def first_sunday_on_or_after(dt): - days_to_go = 6 - dt.weekday() - if days_to_go: - dt += timedelta(days_to_go) - return dt - -# In the US, DST starts at 2am (standard time) on the first Sunday in April. -DSTSTART = datetime(1, 4, 1, 2) -# and ends at 2am (DST time; 1am standard time) on the last Sunday of Oct. -# which is the first Sunday on or after Oct 25. -DSTEND = datetime(1, 10, 25, 1) - -class USTimeZone(tzinfo): - - def __init__(self, hours, reprname, stdname, dstname): - self.stdoffset = timedelta(hours=hours) - self.reprname = reprname - self.stdname = stdname - self.dstname = dstname - - def __repr__(self): - return self.reprname - - def tzname(self, dt): - if self.dst(dt): - return self.dstname - else: - return self.stdname - - def utcoffset(self, dt): - return self.stdoffset + self.dst(dt) - - def dst(self, dt): - if dt is None or dt.tzinfo is None: - # An exception may be sensible here, in one or both cases. - # It depends on how you want to treat them. The default - # fromutc() implementation (called by the default astimezone() - # implementation) passes a datetime with dt.tzinfo is self. - return ZERO - assert dt.tzinfo is self - - # Find first Sunday in April & the last in October. - start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year)) - end = first_sunday_on_or_after(DSTEND.replace(year=dt.year)) - - # Can't compare naive to aware objects, so strip the timezone from - # dt first. - if start <= dt.replace(tzinfo=None) < end: - return HOUR - else: - return ZERO - -Eastern = USTimeZone(-5, "Eastern", "EST", "EDT") -Central = USTimeZone(-6, "Central", "CST", "CDT") -Mountain = USTimeZone(-7, "Mountain", "MST", "MDT") -Pacific = USTimeZone(-8, "Pacific", "PST", "PDT") - diff --git a/www.clementine-player.org/pytz/tzfile.py b/www.clementine-player.org/pytz/tzfile.py deleted file mode 100644 index 05a269b..0000000 --- a/www.clementine-player.org/pytz/tzfile.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python -''' -$Id: tzfile.py,v 1.8 2004/06/03 00:15:24 zenzen Exp $ -''' - -try: - from cStringIO import StringIO -except ImportError: - from io import StringIO -from datetime import datetime, timedelta -from struct import unpack, calcsize - -from pytz.tzinfo import StaticTzInfo, DstTzInfo, memorized_ttinfo -from pytz.tzinfo import memorized_datetime, memorized_timedelta - -def _byte_string(s): - """Cast a string or byte string to an ASCII byte string.""" - return s.encode('US-ASCII') - -_NULL = _byte_string('\0') - -def _std_string(s): - """Cast a string or byte string to an ASCII string.""" - return str(s.decode('US-ASCII')) - -def build_tzinfo(zone, fp): - head_fmt = '>4s c 15x 6l' - head_size = calcsize(head_fmt) - (magic, format, ttisgmtcnt, ttisstdcnt,leapcnt, timecnt, - typecnt, charcnt) = unpack(head_fmt, fp.read(head_size)) - - # Make sure it is a tzfile(5) file - assert magic == _byte_string('TZif'), 'Got magic %s' % repr(magic) - - # Read out the transition times, localtime indices and ttinfo structures. - data_fmt = '>%(timecnt)dl %(timecnt)dB %(ttinfo)s %(charcnt)ds' % dict( - timecnt=timecnt, ttinfo='lBB'*typecnt, charcnt=charcnt) - data_size = calcsize(data_fmt) - data = unpack(data_fmt, fp.read(data_size)) - - # make sure we unpacked the right number of values - assert len(data) == 2 * timecnt + 3 * typecnt + 1 - transitions = [memorized_datetime(trans) - for trans in data[:timecnt]] - lindexes = list(data[timecnt:2 * timecnt]) - ttinfo_raw = data[2 * timecnt:-1] - tznames_raw = data[-1] - del data - - # Process ttinfo into separate structs - ttinfo = [] - tznames = {} - i = 0 - while i < len(ttinfo_raw): - # have we looked up this timezone name yet? - tzname_offset = ttinfo_raw[i+2] - if tzname_offset not in tznames: - nul = tznames_raw.find(_NULL, tzname_offset) - if nul < 0: - nul = len(tznames_raw) - tznames[tzname_offset] = _std_string( - tznames_raw[tzname_offset:nul]) - ttinfo.append((ttinfo_raw[i], - bool(ttinfo_raw[i+1]), - tznames[tzname_offset])) - i += 3 - - # Now build the timezone object - if len(transitions) == 0: - ttinfo[0][0], ttinfo[0][2] - cls = type(zone, (StaticTzInfo,), dict( - zone=zone, - _utcoffset=memorized_timedelta(ttinfo[0][0]), - _tzname=ttinfo[0][2])) - else: - # Early dates use the first standard time ttinfo - i = 0 - while ttinfo[i][1]: - i += 1 - if ttinfo[i] == ttinfo[lindexes[0]]: - transitions[0] = datetime.min - else: - transitions.insert(0, datetime.min) - lindexes.insert(0, i) - - # calculate transition info - transition_info = [] - for i in range(len(transitions)): - inf = ttinfo[lindexes[i]] - utcoffset = inf[0] - if not inf[1]: - dst = 0 - else: - for j in range(i-1, -1, -1): - prev_inf = ttinfo[lindexes[j]] - if not prev_inf[1]: - break - dst = inf[0] - prev_inf[0] # dst offset - - # Bad dst? Look further. DST > 24 hours happens when - # a timzone has moved across the international dateline. - if dst <= 0 or dst > 3600*3: - for j in range(i+1, len(transitions)): - stdinf = ttinfo[lindexes[j]] - if not stdinf[1]: - dst = inf[0] - stdinf[0] - if dst > 0: - break # Found a useful std time. - - tzname = inf[2] - - # Round utcoffset and dst to the nearest minute or the - # datetime library will complain. Conversions to these timezones - # might be up to plus or minus 30 seconds out, but it is - # the best we can do. - utcoffset = int((utcoffset + 30) // 60) * 60 - dst = int((dst + 30) // 60) * 60 - transition_info.append(memorized_ttinfo(utcoffset, dst, tzname)) - - cls = type(zone, (DstTzInfo,), dict( - zone=zone, - _utc_transition_times=transitions, - _transition_info=transition_info)) - - return cls() - -if __name__ == '__main__': - import os.path - from pprint import pprint - # Patched in Debian, use the system zoninfo from the tzdata package - base = '/usr/share/zoneinfo' - tz = build_tzinfo('Australia/Melbourne', - open(os.path.join(base,'Australia','Melbourne'), 'rb')) - tz = build_tzinfo('US/Eastern', - open(os.path.join(base,'US','Eastern'), 'rb')) - pprint(tz._utc_transition_times) - #print tz.asPython(4) - #print tz.transitions_mapping diff --git a/www.clementine-player.org/pytz/tzinfo.py b/www.clementine-player.org/pytz/tzinfo.py deleted file mode 100644 index 1bb57c2..0000000 --- a/www.clementine-player.org/pytz/tzinfo.py +++ /dev/null @@ -1,558 +0,0 @@ -'''Base classes and helpers for building zone specific tzinfo classes''' - -from datetime import datetime, timedelta, tzinfo -from bisect import bisect_right -try: - set -except NameError: - from sets import Set as set - -import pytz -from pytz.exceptions import AmbiguousTimeError, NonExistentTimeError - -__all__ = [] - -_timedelta_cache = {} -def memorized_timedelta(seconds): - '''Create only one instance of each distinct timedelta''' - try: - return _timedelta_cache[seconds] - except KeyError: - delta = timedelta(seconds=seconds) - _timedelta_cache[seconds] = delta - return delta - -_epoch = datetime.utcfromtimestamp(0) -_datetime_cache = {0: _epoch} -def memorized_datetime(seconds): - '''Create only one instance of each distinct datetime''' - try: - return _datetime_cache[seconds] - except KeyError: - # NB. We can't just do datetime.utcfromtimestamp(seconds) as this - # fails with negative values under Windows (Bug #90096) - dt = _epoch + timedelta(seconds=seconds) - _datetime_cache[seconds] = dt - return dt - -_ttinfo_cache = {} -def memorized_ttinfo(*args): - '''Create only one instance of each distinct tuple''' - try: - return _ttinfo_cache[args] - except KeyError: - ttinfo = ( - memorized_timedelta(args[0]), - memorized_timedelta(args[1]), - args[2] - ) - _ttinfo_cache[args] = ttinfo - return ttinfo - -_notime = memorized_timedelta(0) - -def _to_seconds(td): - '''Convert a timedelta to seconds''' - return td.seconds + td.days * 24 * 60 * 60 - - -class BaseTzInfo(tzinfo): - # Overridden in subclass - _utcoffset = None - _tzname = None - zone = None - - def __str__(self): - return self.zone - - -class StaticTzInfo(BaseTzInfo): - '''A timezone that has a constant offset from UTC - - These timezones are rare, as most locations have changed their - offset at some point in their history - ''' - def fromutc(self, dt): - '''See datetime.tzinfo.fromutc''' - return (dt + self._utcoffset).replace(tzinfo=self) - - def utcoffset(self, dt, is_dst=None): - '''See datetime.tzinfo.utcoffset - - is_dst is ignored for StaticTzInfo, and exists only to - retain compatibility with DstTzInfo. - ''' - return self._utcoffset - - def dst(self, dt, is_dst=None): - '''See datetime.tzinfo.dst - - is_dst is ignored for StaticTzInfo, and exists only to - retain compatibility with DstTzInfo. - ''' - return _notime - - def tzname(self, dt, is_dst=None): - '''See datetime.tzinfo.tzname - - is_dst is ignored for StaticTzInfo, and exists only to - retain compatibility with DstTzInfo. - ''' - return self._tzname - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time''' - if dt.tzinfo is not None: - raise ValueError('Not naive datetime (tzinfo is already set)') - return dt.replace(tzinfo=self) - - def normalize(self, dt, is_dst=False): - '''Correct the timezone information on the given datetime. - - This is normally a no-op, as StaticTzInfo timezones never have - ambiguous cases to correct: - - >>> from pytz import timezone - >>> gmt = timezone('GMT') - >>> isinstance(gmt, StaticTzInfo) - True - >>> dt = datetime(2011, 5, 8, 1, 2, 3, tzinfo=gmt) - >>> gmt.normalize(dt) is dt - True - - The supported method of converting between timezones is to use - datetime.astimezone(). Currently normalize() also works: - - >>> la = timezone('America/Los_Angeles') - >>> dt = la.localize(datetime(2011, 5, 7, 1, 2, 3)) - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - >>> gmt.normalize(dt).strftime(fmt) - '2011-05-07 08:02:03 GMT (+0000)' - ''' - if dt.tzinfo is self: - return dt - if dt.tzinfo is None: - raise ValueError('Naive time - no tzinfo set') - return dt.astimezone(self) - - def __repr__(self): - return '' % (self.zone,) - - def __reduce__(self): - # Special pickle to zone remains a singleton and to cope with - # database changes. - return pytz._p, (self.zone,) - - -class DstTzInfo(BaseTzInfo): - '''A timezone that has a variable offset from UTC - - The offset might change if daylight savings time comes into effect, - or at a point in history when the region decides to change their - timezone definition. - ''' - # Overridden in subclass - _utc_transition_times = None # Sorted list of DST transition times in UTC - _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding - # to _utc_transition_times entries - zone = None - - # Set in __init__ - _tzinfos = None - _dst = None # DST offset - - def __init__(self, _inf=None, _tzinfos=None): - if _inf: - self._tzinfos = _tzinfos - self._utcoffset, self._dst, self._tzname = _inf - else: - _tzinfos = {} - self._tzinfos = _tzinfos - self._utcoffset, self._dst, self._tzname = self._transition_info[0] - _tzinfos[self._transition_info[0]] = self - for inf in self._transition_info[1:]: - if inf not in _tzinfos: - _tzinfos[inf] = self.__class__(inf, _tzinfos) - - def fromutc(self, dt): - '''See datetime.tzinfo.fromutc''' - dt = dt.replace(tzinfo=None) - idx = max(0, bisect_right(self._utc_transition_times, dt) - 1) - inf = self._transition_info[idx] - return (dt + inf[0]).replace(tzinfo=self._tzinfos[inf]) - - def normalize(self, dt): - '''Correct the timezone information on the given datetime - - If date arithmetic crosses DST boundaries, the tzinfo - is not magically adjusted. This method normalizes the - tzinfo to the correct one. - - To test, first we need to do some setup - - >>> from pytz import timezone - >>> utc = timezone('UTC') - >>> eastern = timezone('US/Eastern') - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - - We next create a datetime right on an end-of-DST transition point, - the instant when the wallclocks are wound back one hour. - - >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) - >>> loc_dt = utc_dt.astimezone(eastern) - >>> loc_dt.strftime(fmt) - '2002-10-27 01:00:00 EST (-0500)' - - Now, if we subtract a few minutes from it, note that the timezone - information has not changed. - - >>> before = loc_dt - timedelta(minutes=10) - >>> before.strftime(fmt) - '2002-10-27 00:50:00 EST (-0500)' - - But we can fix that by calling the normalize method - - >>> before = eastern.normalize(before) - >>> before.strftime(fmt) - '2002-10-27 01:50:00 EDT (-0400)' - - The supported method of converting between timezones is to use - datetime.astimezone(). Currently, normalize() also works: - - >>> th = timezone('Asia/Bangkok') - >>> am = timezone('Europe/Amsterdam') - >>> dt = th.localize(datetime(2011, 5, 7, 1, 2, 3)) - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - >>> am.normalize(dt).strftime(fmt) - '2011-05-06 20:02:03 CEST (+0200)' - ''' - if dt.tzinfo is None: - raise ValueError('Naive time - no tzinfo set') - - # Convert dt in localtime to UTC - offset = dt.tzinfo._utcoffset - dt = dt.replace(tzinfo=None) - dt = dt - offset - # convert it back, and return it - return self.fromutc(dt) - - def localize(self, dt, is_dst=False): - '''Convert naive time to local time. - - This method should be used to construct localtimes, rather - than passing a tzinfo argument to a datetime constructor. - - is_dst is used to determine the correct timezone in the ambigous - period at the end of daylight savings time. - - >>> from pytz import timezone - >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' - >>> amdam = timezone('Europe/Amsterdam') - >>> dt = datetime(2004, 10, 31, 2, 0, 0) - >>> loc_dt1 = amdam.localize(dt, is_dst=True) - >>> loc_dt2 = amdam.localize(dt, is_dst=False) - >>> loc_dt1.strftime(fmt) - '2004-10-31 02:00:00 CEST (+0200)' - >>> loc_dt2.strftime(fmt) - '2004-10-31 02:00:00 CET (+0100)' - >>> str(loc_dt2 - loc_dt1) - '1:00:00' - - Use is_dst=None to raise an AmbiguousTimeError for ambiguous - times at the end of daylight savings - - >>> try: - ... loc_dt1 = amdam.localize(dt, is_dst=None) - ... except AmbiguousTimeError: - ... print('Ambiguous') - Ambiguous - - is_dst defaults to False - - >>> amdam.localize(dt) == amdam.localize(dt, False) - True - - is_dst is also used to determine the correct timezone in the - wallclock times jumped over at the start of daylight savings time. - - >>> pacific = timezone('US/Pacific') - >>> dt = datetime(2008, 3, 9, 2, 0, 0) - >>> ploc_dt1 = pacific.localize(dt, is_dst=True) - >>> ploc_dt2 = pacific.localize(dt, is_dst=False) - >>> ploc_dt1.strftime(fmt) - '2008-03-09 02:00:00 PDT (-0700)' - >>> ploc_dt2.strftime(fmt) - '2008-03-09 02:00:00 PST (-0800)' - >>> str(ploc_dt2 - ploc_dt1) - '1:00:00' - - Use is_dst=None to raise a NonExistentTimeError for these skipped - times. - - >>> try: - ... loc_dt1 = pacific.localize(dt, is_dst=None) - ... except NonExistentTimeError: - ... print('Non-existent') - Non-existent - ''' - if dt.tzinfo is not None: - raise ValueError('Not naive datetime (tzinfo is already set)') - - # Find the two best possibilities. - possible_loc_dt = set() - for delta in [timedelta(days=-1), timedelta(days=1)]: - loc_dt = dt + delta - idx = max(0, bisect_right( - self._utc_transition_times, loc_dt) - 1) - inf = self._transition_info[idx] - tzinfo = self._tzinfos[inf] - loc_dt = tzinfo.normalize(dt.replace(tzinfo=tzinfo)) - if loc_dt.replace(tzinfo=None) == dt: - possible_loc_dt.add(loc_dt) - - if len(possible_loc_dt) == 1: - return possible_loc_dt.pop() - - # If there are no possibly correct timezones, we are attempting - # to convert a time that never happened - the time period jumped - # during the start-of-DST transition period. - if len(possible_loc_dt) == 0: - # If we refuse to guess, raise an exception. - if is_dst is None: - raise NonExistentTimeError(dt) - - # If we are forcing the pre-DST side of the DST transition, we - # obtain the correct timezone by winding the clock forward a few - # hours. - elif is_dst: - return self.localize( - dt + timedelta(hours=6), is_dst=True) - timedelta(hours=6) - - # If we are forcing the post-DST side of the DST transition, we - # obtain the correct timezone by winding the clock back. - else: - return self.localize( - dt - timedelta(hours=6), is_dst=False) + timedelta(hours=6) - - - # If we get this far, we have multiple possible timezones - this - # is an ambiguous case occuring during the end-of-DST transition. - - # If told to be strict, raise an exception since we have an - # ambiguous case - if is_dst is None: - raise AmbiguousTimeError(dt) - - # Filter out the possiblilities that don't match the requested - # is_dst - filtered_possible_loc_dt = [ - p for p in possible_loc_dt - if bool(p.tzinfo._dst) == is_dst - ] - - # Hopefully we only have one possibility left. Return it. - if len(filtered_possible_loc_dt) == 1: - return filtered_possible_loc_dt[0] - - if len(filtered_possible_loc_dt) == 0: - filtered_possible_loc_dt = list(possible_loc_dt) - - # If we get this far, we have in a wierd timezone transition - # where the clocks have been wound back but is_dst is the same - # in both (eg. Europe/Warsaw 1915 when they switched to CET). - # At this point, we just have to guess unless we allow more - # hints to be passed in (such as the UTC offset or abbreviation), - # but that is just getting silly. - # - # Choose the earliest (by UTC) applicable timezone. - sorting_keys = {} - for local_dt in filtered_possible_loc_dt: - key = local_dt.replace(tzinfo=None) - local_dt.tzinfo._utcoffset - sorting_keys[key] = local_dt - first_key = sorted(sorting_keys)[0] - return sorting_keys[first_key] - - def utcoffset(self, dt, is_dst=None): - '''See datetime.tzinfo.utcoffset - - The is_dst parameter may be used to remove ambiguity during DST - transitions. - - >>> from pytz import timezone - >>> tz = timezone('America/St_Johns') - >>> ambiguous = datetime(2009, 10, 31, 23, 30) - - >>> tz.utcoffset(ambiguous, is_dst=False) - datetime.timedelta(-1, 73800) - - >>> tz.utcoffset(ambiguous, is_dst=True) - datetime.timedelta(-1, 77400) - - >>> try: - ... tz.utcoffset(ambiguous) - ... except AmbiguousTimeError: - ... print('Ambiguous') - Ambiguous - - ''' - if dt is None: - return None - elif dt.tzinfo is not self: - dt = self.localize(dt, is_dst) - return dt.tzinfo._utcoffset - else: - return self._utcoffset - - def dst(self, dt, is_dst=None): - '''See datetime.tzinfo.dst - - The is_dst parameter may be used to remove ambiguity during DST - transitions. - - >>> from pytz import timezone - >>> tz = timezone('America/St_Johns') - - >>> normal = datetime(2009, 9, 1) - - >>> tz.dst(normal) - datetime.timedelta(0, 3600) - >>> tz.dst(normal, is_dst=False) - datetime.timedelta(0, 3600) - >>> tz.dst(normal, is_dst=True) - datetime.timedelta(0, 3600) - - >>> ambiguous = datetime(2009, 10, 31, 23, 30) - - >>> tz.dst(ambiguous, is_dst=False) - datetime.timedelta(0) - >>> tz.dst(ambiguous, is_dst=True) - datetime.timedelta(0, 3600) - >>> try: - ... tz.dst(ambiguous) - ... except AmbiguousTimeError: - ... print('Ambiguous') - Ambiguous - - ''' - if dt is None: - return None - elif dt.tzinfo is not self: - dt = self.localize(dt, is_dst) - return dt.tzinfo._dst - else: - return self._dst - - def tzname(self, dt, is_dst=None): - '''See datetime.tzinfo.tzname - - The is_dst parameter may be used to remove ambiguity during DST - transitions. - - >>> from pytz import timezone - >>> tz = timezone('America/St_Johns') - - >>> normal = datetime(2009, 9, 1) - - >>> tz.tzname(normal) - 'NDT' - >>> tz.tzname(normal, is_dst=False) - 'NDT' - >>> tz.tzname(normal, is_dst=True) - 'NDT' - - >>> ambiguous = datetime(2009, 10, 31, 23, 30) - - >>> tz.tzname(ambiguous, is_dst=False) - 'NST' - >>> tz.tzname(ambiguous, is_dst=True) - 'NDT' - >>> try: - ... tz.tzname(ambiguous) - ... except AmbiguousTimeError: - ... print('Ambiguous') - Ambiguous - ''' - if dt is None: - return self.zone - elif dt.tzinfo is not self: - dt = self.localize(dt, is_dst) - return dt.tzinfo._tzname - else: - return self._tzname - - def __repr__(self): - if self._dst: - dst = 'DST' - else: - dst = 'STD' - if self._utcoffset > _notime: - return '' % ( - self.zone, self._tzname, self._utcoffset, dst - ) - else: - return '' % ( - self.zone, self._tzname, self._utcoffset, dst - ) - - def __reduce__(self): - # Special pickle to zone remains a singleton and to cope with - # database changes. - return pytz._p, ( - self.zone, - _to_seconds(self._utcoffset), - _to_seconds(self._dst), - self._tzname - ) - - - -def unpickler(zone, utcoffset=None, dstoffset=None, tzname=None): - """Factory function for unpickling pytz tzinfo instances. - - This is shared for both StaticTzInfo and DstTzInfo instances, because - database changes could cause a zones implementation to switch between - these two base classes and we can't break pickles on a pytz version - upgrade. - """ - # Raises a KeyError if zone no longer exists, which should never happen - # and would be a bug. - tz = pytz.timezone(zone) - - # A StaticTzInfo - just return it - if utcoffset is None: - return tz - - # This pickle was created from a DstTzInfo. We need to - # determine which of the list of tzinfo instances for this zone - # to use in order to restore the state of any datetime instances using - # it correctly. - utcoffset = memorized_timedelta(utcoffset) - dstoffset = memorized_timedelta(dstoffset) - try: - return tz._tzinfos[(utcoffset, dstoffset, tzname)] - except KeyError: - # The particular state requested in this timezone no longer exists. - # This indicates a corrupt pickle, or the timezone database has been - # corrected violently enough to make this particular - # (utcoffset,dstoffset) no longer exist in the zone, or the - # abbreviation has been changed. - pass - - # See if we can find an entry differing only by tzname. Abbreviations - # get changed from the initial guess by the database maintainers to - # match reality when this information is discovered. - for localized_tz in tz._tzinfos.values(): - if (localized_tz._utcoffset == utcoffset - and localized_tz._dst == dstoffset): - return localized_tz - - # This (utcoffset, dstoffset) information has been removed from the - # zone. Add it back. This might occur when the database maintainers have - # corrected incorrect information. datetime instances using this - # incorrect information will continue to do so, exactly as they were - # before being pickled. This is purely an overly paranoid safety net - I - # doubt this will ever been needed in real life. - inf = (utcoffset, dstoffset, tzname) - tz._tzinfos[inf] = tz.__class__(inf, tz._tzinfos) - return tz._tzinfos[inf] - diff --git a/www.clementine-player.org/requirements.txt b/www.clementine-player.org/requirements.txt new file mode 100644 index 0000000..e5b6968 --- /dev/null +++ b/www.clementine-player.org/requirements.txt @@ -0,0 +1,9 @@ +Flask==3.0.3 +Jinja2==3.1.4 +requests==2.31.0 +Babel==2.14.0 +gunicorn==22.0.0 +cachelib==0.13.0 +Flask-Babel==4.0.0 +Pillow==10.3.0 +google-auth==2.29.0