在 Flask AppBuilder 中获取当前语言

get current language in flask appbuilder

我有一个用 Flask Appbuilder 编写的简单应用程序,view.py 如下。它是 http://flask-appbuilder.readthedocs.io/en/latest/views.html 中 exmaple 的一部分,在 method1 中稍作改动,我将 return 'Hello' 替换为我希望找到的函数。

我们可以更改应用程序中的语言(en,fr,ru,...)并进行翻译。是否有获取当前语言的功能? (Current_Language()).

from flask_appbuilder import AppBuilder, BaseView, expose, has_access, ModelView
from app import appbuilder, db
from flask import render_template, g
from flask_babel import Babel
from flask_babel import lazy_gettext as _
from flask_appbuilder.models.sqla.interface import SQLAInterface

class MyView(BaseView):    
  default_view = 'method1'    
  @expose('/method1/')
  @has_access
  def method1(self):
    return Current_Language()

appbuilder.add_view(MyView, "Method1", category='My View')

你的问题有歧义。您是指当前的 server-side 语言还是 client-side 语言。

前者:

import locale
locale.getlocale()

后者:

from flask import request
request.headers.get('your-header-name')

您感兴趣的header是Accept-Language。但是在以这种方式推断客户端语言时有一些警告。参见 https://www.w3.org/International/questions/qa-accept-lang-locales

appbuilder 实例有一个 bm 属性,它是 BabelManager class.

的一个实例

此 class 有一个 get_locale 方法,returns 您的应用程序当前使用的语言。

class MyView(BaseView):    
    default_view = 'method1'    
    @expose('/method1/')
    @has_access
    def method1(self):
        return appbuilder.bm.get_locale()

您可以在 project repository.

上查看 BabelManager class 的代码