* Added support for the locale plural rules defined by the CLDR.
* Added `format_timedelta` function to support localized formatting of
relative times with strings such as "2 days" or "1 month" (ticket #126).
+ * Fixed Python 2.3 compatibility (ticket #146).
Version 0.9.4
from email import message_from_string
from copy import copy
import re
-try:
- set
-except NameError:
- from sets import Set as set
import time
from babel import __version__ as VERSION
from babel.core import Locale
from babel.dates import format_datetime
from babel.messages.plurals import get_plural
-from babel.util import odict, distinct, LOCALTZ, UTC, FixedOffsetTimezone
+from babel.util import odict, distinct, set, LOCALTZ, UTC, FixedOffsetTimezone
__all__ = ['Message', 'Catalog', 'TranslationError']
__docformat__ = 'restructuredtext en'
from itertools import izip
from babel.messages.catalog import TranslationError, PYTHON_FORMAT
+from babel.util import set
#: list of format chars that are compatible to each other
_string_format_compatibilities = [
"""
import os
-try:
- set
-except NameError:
- from sets import Set as set
import sys
from tokenize import generate_tokens, COMMENT, NAME, OP, STRING
-from babel.util import parse_encoding, pathmatch, relpath
+from babel.util import parse_encoding, pathmatch, relpath, set
from textwrap import dedent
__all__ = ['extract', 'extract_from_dir', 'extract_from_file']
def parse_keywords(strings=[]):
"""Parse keywords specifications from the given list of strings.
- >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3'])
- >>> for keyword, indices in sorted(kw.items()):
+ >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3']).items()
+ >>> kw.sort()
+ >>> for keyword, indices in kw:
... print (keyword, indices)
('_', None)
('dgettext', (2,))
"""
import re
-from operator import itemgetter
+
+from babel.util import itemgetter
operators = [
"""Plural form definitions."""
-
-from operator import itemgetter
from babel.core import default_locale, Locale
+from babel.util import itemgetter
LC_CTYPE = default_locale('LC_CTYPE')
from datetime import date, datetime
import os
import re
-try:
- set
-except NameError:
- from sets import Set as set
from babel import __version__ as VERSION
from babel.messages.catalog import Catalog, Message
-from babel.util import wraptext, LOCALTZ
+from babel.util import set, wraptext, LOCALTZ
__all__ = ['read_po', 'write_po']
__docformat__ = 'restructuredtext en'
context.append(line.rstrip())
for lineno, line in enumerate(fileobj.readlines()):
- line = line.strip().decode(catalog.charset)
+ line = line.strip()
+ if not isinstance(line, unicode):
+ line = line.decode(catalog.charset)
if line.startswith('#'):
in_msgid[0] = in_msgstr[0] = False
if messages and translations:
raise ValueError('Significant digit patterns can not contain '
'"@" or "0"')
if '.' in number:
- integer, fraction = number.rsplit('.', 1)
+ #integer, fraction = number.rsplit('.', 1)
+ # 2.3 compat: this is rsplit
+ parts = number.split('.')
+ integer, fraction = '.'.join(parts[:-1]), parts[-1]
else:
integer = number
fraction = ''
"""CLDR Plural support. See UTS #35. EXPERIMENTAL"""
import re
-try:
- set
-except NameError:
- from sets import ImmutableSet as frozenset, Set as set
+
+from babel.util import frozenset, set
__all__ = ['PluralRule', 'RuleError', 'to_gettext', 'to_javascript',
'to_python']
from datetime import date, datetime, time, timedelta
import gettext
-try:
- set
-except NameError:
- from sets import set
-
from babel.core import Locale
from babel.dates import format_date, format_datetime, format_time, \
format_timedelta, LC_TIME
from babel.numbers import format_number, format_decimal, format_currency, \
format_percent, format_scientific, LC_NUMERIC
-from babel.util import UTC
+from babel.util import set, UTC
__all__ = ['Format', 'LazyProxy', 'Translations']
__docformat__ = 'restructuredtext en'
from datetime import timedelta, tzinfo
import os
import re
-try:
- set
-except NameError:
- from sets import Set as set
import textwrap
import time
from itertools import izip, imap
+try:
+ # assigned so they're importable
+ frozenset = frozenset
+ set = set
+except NameError:
+ from sets import ImmutableSet as frozenset, Set as set
+try:
+ from operator import itemgetter
+except ImportError:
+ def itemgetter(item):
+ return lambda obj: obj[item]
+
missing = object()
__all__ = ['distinct', 'pathmatch', 'relpath', 'wraptext', 'odict', 'UTC',