47 |
get = context.get |
get = context.get |
48 |
|
|
49 |
try: |
try: |
50 |
req_langs = get('user_language', None) or \ |
user_langs = get('user_language', '') |
51 |
get('HTTP_ACCEPT_LANGUAGE', '') |
http_langs = get('HTTP_ACCEPT_LANGUAGE', '') |
52 |
except: |
except: |
53 |
from traceback import print_exc |
from traceback import print_exc |
54 |
print_exc() |
print_exc() |
55 |
self.langs = () |
self.langs = () |
56 |
return |
return |
57 |
|
if user_langs and http_langs and user_langs == context.cookies.get('user_language'): |
58 |
|
user_langs = user_langs.split(',') |
59 |
|
http_langs = http_langs.split(',') |
60 |
|
for l in user_langs: |
61 |
|
if l not in http_langs: |
62 |
|
req_langs = user_langs + http_langs |
63 |
|
break |
64 |
|
else: |
65 |
|
# user_langs is a subset of http_langs |
66 |
|
context.RESPONSE.expireCookie('user_language', path='/') |
67 |
|
req_langs = http_langs |
68 |
|
else: |
69 |
|
req_langs = (user_langs +','+ http_langs).split(',') |
70 |
langs = [] |
langs = [] |
71 |
for lang in req_langs.split(','): |
for lang in req_langs: |
72 |
lang = lang.strip().lower().replace('_', '-') |
lang = lang.strip().lower().replace('_', '-') |
73 |
if lang: |
if lang: |
74 |
langs.append(lang.split(';')[0]) |
langs.append(lang.split(';')[0]) |
85 |
|
|
86 |
|
|
87 |
def getLanguage(self, langs, env): |
def getLanguage(self, langs, env): |
88 |
|
langs = tuple(langs) |
89 |
try: |
try: |
90 |
return env.other['_pts_negotiator_cache'] |
cache = env.other['_pts_negotiator_cache'] |
91 |
except KeyError: |
except KeyError: |
92 |
# Store cache in request object |
# Store cache in request object |
93 |
env.set('_pts_negotiator_cache', self._getLanguage(langs, env)) |
cache = {} |
94 |
return env.other['_pts_negotiator_cache'] |
env.set('_pts_negotiator_cache', cache) |
95 |
|
try: |
96 |
|
return cache[langs] |
97 |
|
except KeyError: |
98 |
|
cache[langs] = self._getLanguage(langs, env) |
99 |
|
return cache[langs] |
100 |
|
|
101 |
def _getLanguage(self, langs, env): |
def _getLanguage(self, langs, env): |
102 |
envprefs = getLangPrefsMethod(env) |
envprefs = getLangPrefsMethod(env) |
117 |
|
|
118 |
|
|
119 |
negotiator = Negotiator() |
negotiator = Negotiator() |
120 |
|
|
121 |
|
def negotiate(langs, request): |
122 |
|
return negotiator.getLanguage(langs, request) |