fix i18n
This commit is contained in:
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
import re
|
||||
import typing
|
||||
import quart
|
||||
import os.path
|
||||
|
||||
from .app import app
|
||||
|
||||
@ -49,14 +50,15 @@ def detect_language():
|
||||
g = quart.g
|
||||
r = quart.request
|
||||
s = quart.session
|
||||
lang = r.args.get('setlang')
|
||||
if lang:
|
||||
lang = lang.strip().lower()
|
||||
if 'setlang' in r.args:
|
||||
lang = r.args.get('setlang').strip().lower()
|
||||
if lang and _VALID_LANGUAGE_NAMES.match(lang):
|
||||
s = quart.session
|
||||
s['lang'] = lang
|
||||
g.langs = [lang]
|
||||
return
|
||||
else:
|
||||
# reset language
|
||||
s.pop('lang')
|
||||
lang = s.get('lang')
|
||||
if lang:
|
||||
lang = lang.strip().lower()
|
||||
@ -65,3 +67,15 @@ def detect_language():
|
||||
return
|
||||
acc_lang = ','.join(r.headers.get_all('Accept-Language'))
|
||||
g.langs = parse_accept_language(acc_lang)
|
||||
|
||||
|
||||
async def render_i18n_template(template, /, **kwargs) -> str:
|
||||
langs: typing.List[str] = quart.g.langs
|
||||
if not langs:
|
||||
return await quart.render_template(template, **kwargs)
|
||||
names = [
|
||||
os.path.join('i18n', lang, template)
|
||||
for lang in langs
|
||||
]
|
||||
names.append(template)
|
||||
return await quart.render_template(names, **kwargs)
|
||||
|
Reference in New Issue
Block a user