Python 获取Jinja2中的当前区域设置

Python 获取Jinja2中的当前区域设置,python,jinja2,gettext,python-babel,Python,Jinja2,Gettext,Python Babel,在我的网站上使用Flask+Jinja2和Flask Babel进行翻译。该网站有两种语言(取决于URL),我想添加一个链接在它们之间切换。要正确执行此操作,我需要获取当前区域设置的名称,但在文档中找不到此类函数。它是否存在?您负责将用户的区域设置存储在数据库会话中Flask babel不会为您执行此操作,因此您应该为Flask babel实现get_locale方法,以便能够找到用户的区域设置 这是get_localefromflask babel文档的一个示例: from flask imp

在我的网站上使用Flask+Jinja2和Flask Babel进行翻译。该网站有两种语言(取决于URL),我想添加一个链接在它们之间切换。要正确执行此操作,我需要获取当前区域设置的名称,但在文档中找不到此类函数。它是否存在?

您负责将用户的区域设置存储在数据库会话中
Flask babel
不会为您执行此操作,因此您应该为
Flask babel
实现
get_locale
方法,以便能够找到用户的区域设置

这是
get_locale
from
flask babel
文档的一个示例:

from flask import g, request

@babel.localeselector
def get_locale():
    # if a user is logged in, use the locale from the user settings
    user = getattr(g, 'user', None)
    if user is not None:
        return user.locale
    # otherwise try to guess the language from the user accept
    # header the browser transmits.  We support de/fr/en in this
    # example.  The best match wins.
    return request.accept_languages.best_match(['de', 'fr', 'en'])

最后,我使用了这个解决方案:将应该定义的
get_locale
函数添加到Jinja2全局,然后像其他函数一样在模板中调用它。

其他答案说必须实现babel的
get_locale()
函数,并且应该将其添加到Jinja2全局,但他们没有说明如何实现。所以,我所做的是:

我实现了
get\u locale()
函数,如下所示:

from flask import request, current_app

@babel.localeselector
def get_locale():
    try:
        return request.accept_languages.best_match(current_app.config['LANGUAGES'])
    except RuntimeError:  # Working outside of request context. E.g. a background task
        return current_app.config['BABEL_DEFAULT_LOCALE']
然后,我在我的烧瓶
app
definition中添加了以下行:

app.jinja_env.globals['get_locale'] = get_locale

现在您可以从模板中调用
get\u locale()

是的,我已经实现了这样的get\u locale函数,它根据URL返回一个区域设置。但是如何在Jinja模板中获取活动请求区域设置?您是如何添加到jinja2全局的?我试过做e=Environment,e.globals={'get\u locale':get\u locale}