Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
unho committed Feb 13, 2017
1 parent 33e0251 commit ddb2c6c
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 57 deletions.
49 changes: 3 additions & 46 deletions pootle/i18n/dates.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,55 +6,12 @@
# or later license. See the LICENSE file for a copy of the license and the
# AUTHORS file for copyright and authorship information.

import locale as system_locale
import os
from datetime import datetime

from babel import UnknownLocaleError
from babel.dates import format_timedelta

from django.conf import settings
from django.utils import translation


class LocalDate(object):

def __init__(self):
if not self.locale_code and not os.name == "nt":
self.set_locale()

@property
def default_locale(self):
return translation.to_locale(translation.get_language())

def set_locale(self):
system_locale.setlocale(
system_locale.LC_ALL,
(self.default_locale, 'UTF-8'))

@property
def locale_code(self):
return system_locale.getlocale()[0]

def format_timesince(self, timestamp, locale=None):
timedelta = datetime.now() - datetime.fromtimestamp(timestamp)
locale = (locale
or self.locale_code
or self.default_locale)
try:
return format_timedelta(timedelta, locale=locale)
except UnknownLocaleError:
locale = settings.LANGUAGE_CODE.split("-")[0]
try:
return format_timedelta(timedelta, locale=locale)
except ValueError:
return format_timedelta(timedelta, locale='en')


localdate = LocalDate()
from .formatter import get_locale_formats


def timesince(timestamp, locale=None):
if locale:
locale = translation.to_locale(locale)
return localdate.format_timesince(timestamp, locale=locale)
timedelta = datetime.now() - datetime.fromtimestamp(timestamp)
return get_locale_formats(locale).timedelta(timedelta)
10 changes: 6 additions & 4 deletions pootle/i18n/formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@
from django.utils.translation import get_language, to_locale


def _get_locale_formats():
for language in [get_language(), settings.LANGUAGE_CODE, 'en-us']:
def get_locale_formats(locale=None):
languages = [locale] if locale else []
languages += [get_language(), settings.LANGUAGE_CODE, 'en-us']
for language in languages:
try:
locale = babel_core.Locale.parse(to_locale(language))
break
Expand All @@ -33,9 +35,9 @@ def _clean_zero(number):

def number(number):
number = _clean_zero(number)
return _get_locale_formats().number(number)
return get_locale_formats().number(number)


def percent(number, format=None):
number = _clean_zero(number)
return _get_locale_formats().percent(number, format)
return get_locale_formats().percent(number, format)
29 changes: 25 additions & 4 deletions tests/i18n/dates.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,42 @@
# or later license. See the LICENSE file for a copy of the license and the
# AUTHORS file for copyright and authorship information.

import pytest
import time
from datetime import datetime

from babel import UnknownLocaleError, core as babel_core
from babel.dates import format_timedelta

from pootle.i18n.dates import localdate, timesince
from django.utils.translation import get_language, override, to_locale

from pootle.i18n.dates import timesince


def test_local_date_timesince(settings):
for language in [get_language(), settings.LANGUAGE_CODE, 'en-us']:
try:
locale = babel_core.Locale.parse(to_locale(language))
break
except UnknownLocaleError:
continue

timestamp = time.time() - 1000000
assert (
timesince(timestamp)
== format_timedelta(
datetime.now()
- datetime.fromtimestamp(timestamp),
locale=(
localdate.locale_code
or localdate.default_locale)))
locale=locale))


@pytest.mark.parametrize('language', [
'af', 'en-za', 'en-us', # Normal
'son', 'ed17fds-#@LKJ', # Missing in babel
])
def test_local_date_timesince_wrong_locale(language, settings):
with override(language):
timestamp = time.time() - 1000000
assert (
timesince(timestamp, locale=language)
== get_locale_formats(language).timedelta(timestamp, locale="en-us"))
6 changes: 3 additions & 3 deletions tests/i18n/formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@

from django.utils.translation import override

from pootle.i18n.formatter import (_clean_zero, _get_locale_formats, number,
from pootle.i18n.formatter import (_clean_zero, get_locale_formats, number,
percent)


@pytest.mark.parametrize('language', [
'af', 'en-za', 'en-us', # Normal
'son', # Missing in babel
])
def test__get_locale_formats(language):
def test_get_locale_formats(language):
with override(language):
assert isinstance(_get_locale_formats(), Format)
assert isinstance(get_locale_formats(), Format)


def test__clean_zero():
Expand Down

0 comments on commit ddb2c6c

Please sign in to comment.