116 lines
4.1 KiB
Diff
116 lines
4.1 KiB
Diff
--- env/lib/python2.7/site-packages/flaskext/babel.py 2013-07-13 00:00:00 +0000
|
|
+++ env/lib/python2.7/site-packages/flaskext/babel.py 2013-07-13 00:00:00 +0000
|
|
@@ -19,6 +19,7 @@
|
|
from datetime import datetime
|
|
from flask import _request_ctx_stack
|
|
from babel import dates, numbers, support, Locale
|
|
+from gettext import NullTranslations
|
|
from werkzeug import ImmutableDict
|
|
try:
|
|
from pytz.gae import pytz
|
|
@@ -55,9 +56,11 @@
|
|
})
|
|
|
|
def __init__(self, app=None, default_locale='en', default_timezone='UTC',
|
|
- date_formats=None, configure_jinja=True):
|
|
+ date_formats=None, configure_jinja=True,
|
|
+ default_domain=support.Translations.DEFAULT_DOMAIN):
|
|
self._default_locale = default_locale
|
|
self._default_timezone = default_timezone
|
|
+ self._default_domain = default_domain
|
|
self._date_formats = date_formats
|
|
self._configure_jinja = configure_jinja
|
|
self.app = app
|
|
@@ -77,6 +80,7 @@
|
|
|
|
app.config.setdefault('BABEL_DEFAULT_LOCALE', self._default_locale)
|
|
app.config.setdefault('BABEL_DEFAULT_TIMEZONE', self._default_timezone)
|
|
+ app.config.setdefault('BABEL_DEFAULT_DOMAIN', self._default_domain)
|
|
if self._date_formats is None:
|
|
self._date_formats = self.default_date_formats.copy()
|
|
|
|
@@ -95,6 +99,7 @@
|
|
|
|
self.locale_selector_func = None
|
|
self.timezone_selector_func = None
|
|
+ self.domain_selector_func = None
|
|
|
|
if self._configure_jinja:
|
|
app.jinja_env.filters.update(
|
|
@@ -142,6 +147,19 @@
|
|
self.timezone_selector_func = f
|
|
return f
|
|
|
|
+ def domainselector(self, f):
|
|
+ """Registers a callback function for domain selection. The default
|
|
+ behaves as if a function was registered that returns `None` all the
|
|
+ time. If `None` is returned, the domain falls back to the one from
|
|
+ the configuration.
|
|
+
|
|
+ This has to return the domain as a list of strings (eg: ``['messages']``)
|
|
+ """
|
|
+ assert self.domain_selector_func is None, \
|
|
+ 'a localeselector function is already registered'
|
|
+ self.domain_selector_func = f
|
|
+ return f
|
|
+
|
|
|
|
def list_translations(self):
|
|
"""Returns a list of all the locales translations exist for. The
|
|
@@ -178,6 +196,13 @@
|
|
"""
|
|
return timezone(self.app.config['BABEL_DEFAULT_TIMEZONE'])
|
|
|
|
+ @property
|
|
+ def default_domain(self):
|
|
+ """The default domain from the configuration as instance of a
|
|
+ `string` object.
|
|
+ """
|
|
+ return self.app.config['BABEL_DEFAULT_DOMAIN']
|
|
+
|
|
|
|
def get_translations():
|
|
"""Returns the correct gettext translations that should be used for
|
|
@@ -191,7 +216,10 @@
|
|
translations = getattr(ctx, 'babel_translations', None)
|
|
if translations is None:
|
|
dirname = os.path.join(ctx.app.root_path, 'translations')
|
|
- translations = support.Translations.load(dirname, [get_locale()])
|
|
+ locale = get_locale()
|
|
+ for domain in get_domains():
|
|
+ dt = support.Translations.load(dirname, [locale], domain)
|
|
+ translations = dt if translations is None or not hasattr(translations, 'merge') else translations.merge(dt)
|
|
ctx.babel_translations = translations
|
|
return translations
|
|
|
|
@@ -243,6 +271,29 @@
|
|
return tzinfo
|
|
|
|
|
|
+def get_domains():
|
|
+ """Returns the domains that should be used for this request as
|
|
+ `list` object. This returns `None` if used outside of
|
|
+ a request.
|
|
+ """
|
|
+ ctx = _request_ctx_stack.top
|
|
+ if ctx is None:
|
|
+ return None
|
|
+ domains = getattr(ctx, 'babel_domains', None)
|
|
+ if domains is None:
|
|
+ babel = ctx.app.extensions['babel']
|
|
+ if babel.domain_selector_func is None:
|
|
+ domains = [babel.default_domain]
|
|
+ else:
|
|
+ rv = babel.domain_selector_func()
|
|
+ if rv is None:
|
|
+ domains = [babel.default_domain]
|
|
+ else:
|
|
+ domains = rv
|
|
+ ctx.babel_domains = domains
|
|
+ return domains
|
|
+
|
|
+
|
|
def refresh():
|
|
"""Refreshes the cached timezones and locale information. This can
|
|
be used to switch a translation between a request and if you want
|