Skip to content
This repository has been archived by the owner on Jun 6, 2021. It is now read-only.

Commit

Permalink
remove trailing whitespace and fix blank line between method
Browse files Browse the repository at this point in the history
  • Loading branch information
seenxu committed Aug 21, 2014
1 parent 8910640 commit b748eb9
Showing 1 changed file with 28 additions and 28 deletions.
56 changes: 28 additions & 28 deletions bottle_i18n.py
Expand Up @@ -6,7 +6,6 @@ def i18n_defaults(template, request):
template.defaults['_'] = lambda msgid, options=None: request.app._(msgid) % options if options else request.app._(msgid)
template.defaults['lang'] = lambda: request.app.lang


def i18n_template(*args, **kwargs):
tpl = args[0] if args else None
if tpl:
Expand Down Expand Up @@ -34,29 +33,30 @@ def wrapper(*args, **kwargs):


class I18NMiddleware(object):

@property
def header(self):
return self._header

@property
def http_accept_language(self):
return self.header.get('HTTP_ACCEPT_LANGUAGE')

@property
def app(self):
return self._app

def __init__(self, app, i18n, sub_app=True):
self._app = app
self.app.install(i18n)
self._http_language = ""
i18n.middleware = self

if sub_app:
for route in self.app.routes:
if route.config.get('mountpoint'):
route.config.get('mountpoint').get('target').install(i18n)



def __call__(self, e, h):
self._http_language = e.get('HTTP_ACCEPT_LANGUAGE')
self._header = e
Expand All @@ -75,60 +75,63 @@ def __call__(self, e, h):
class I18NPlugin(object):
name = 'i18n'
api = 2

@property
def middleware(self):
return self._middleware

@middleware.setter
def middleware(self, middleware):
self._middleware = middleware

@property
def keyword(self):
return self._keyword

@property
def locales(self):
return self._locales

@property
def local_dir(self):
return self._locale_dir

def __init__(self, domain, locale_dir, lang_code=None, default='en', keyword='i18n'):
self.domain = domain
if locale_dir is None:
raise PluginError('No locale directory found, please assign a right one.')
self._locale_dir = locale_dir

self._locales = self._get_languages(self._locale_dir)
self._default = default
self._lang_code = lang_code

self._cache = {}
self._apps = []
self._keyword = keyword

def _get_languages(self, directory):
return [dir for dir in os.listdir(self._locale_dir) if os.path.isdir(os.path.join(directory, dir))]



def setup(self, app):
self._apps.append(app)
for app in self._apps:
app._ = lambda s: s

if hasattr(app, 'add_hook'):
# attribute hooks was renamed to _hooks in version 0.12.x and add_hook method was introduced instead.
app.add_hook('before_request', self.prepare)
else:
app.hooks.add('before_request', self.prepare)

app.__class__.lang = property(fget=lambda x: self.get_lang(), fset=lambda x, value: self.set_lang(value))

def parse_accept_language(self, accept_language):
if accept_language == None:
return []
languages = accept_language.split(",")
locale_q_pairs = []

for language in languages:
if language.split(";")[0] == language:
# no q => q = 1
Expand All @@ -137,34 +140,32 @@ def parse_accept_language(self, accept_language):
locale = language.split(";")[0].strip()
q = language.split(";")[1].split("=")[1]
locale_q_pairs.append((locale, q))

return locale_q_pairs



def detect_locale(self):
locale_q_pairs = self.parse_accept_language(self.middleware.http_accept_language)
for pair in locale_q_pairs:
for locale in self._locales:
if pair[0].replace('-', '_').lower().startswith(locale.lower()):
return locale

return self._default



def get_lang(self):
return self._lang_code

def set_lang(self, lang_code=None):
self._lang_code = lang_code
if self._lang_code is None:
self._lang_code = self.detect_locale()

self.prepare()

def prepare(self, *args, **kwargs):
if self._lang_code is None:
self._lang_code = self.detect_locale()

if self._lang_code in self._cache.keys():
trans = self._cache[self._lang_code]
if trans:
Expand All @@ -185,8 +186,7 @@ def prepare(self, *args, **kwargs):
for app in self._apps:
app._ = lambda s: s
self._cache[self._lang_code] = None



def apply(self, callback, route):
return callback

Expand Down

0 comments on commit b748eb9

Please sign in to comment.