在flask appbuilder中获取当前语言

时间:2018-05-06 10:29:32

标签: python flask babel flask-appbuilder

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

我们可以在app(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')

2 个答案:

答案 0 :(得分:1)

你的问题含糊不清。您是指当前的服务器端语言还是客户端语言。

前者:

import locale
locale.getlocale()

后者:

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

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

答案 1 :(得分:1)

appbuilder实例具有bm属性,该属性是BabelManager类的实例。

此类有get_locale方法,可返回您的应用使用的当前语言。

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

您可以在project repository.

上查看BabelManager课程的代码