예제 #1
0
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    db.init_app(app)
    bcrypt.init_app(app)
    login_manager.init_app(app)

    babel = Babel()
    babel.init_app(app)

    from api.main import main
    app.register_blueprint(main)

    from api.auth import auth
    app.register_blueprint(auth)

    from api.flask_admin import create_admin_page
    create_admin_page(app)

    from api.page_route import meinv, link
    app.register_blueprint(meinv)
    app.register_blueprint(link)

    return app
예제 #2
0
def register_babel(app):
    babel = Babel()
    babel.init_app(app)

    class CustomJSONEncoder(JSONEncoder):
        """This class adds support for lazy translation texts to Flask's
        JSON encoder. This is necessary when flashing translated texts."""

        def default(self, obj):
            from speaklater import is_lazy_string
            if is_lazy_string(obj):
                try:
                    return unicode(obj)  # python 2
                except NameError:
                    return str(obj)  # python 3
            return super(CustomJSONEncoder, self).default(obj)

    app.json_encoder = CustomJSONEncoder

    @babel.localeselector
    def get_locale():
        user = getattr(g, 'user', None)
        if user is not None:
            if g.user.is_authenticated:
                return user.setting.locale or 'zh'
        return request.accept_languages.best_match(app.config[
            'LANGUAGES'].keys())

    @babel.timezoneselector
    def get_timezone():
        user = getattr(g, 'user', None)
        if user is not None:
            if g.user.is_authenticated:
                return user.setting.timezone or 'UTC'
        return 'UTC'
예제 #3
0
def create_app(settings_ns):

    babel = Babel()
    app = Flask(
        __name__,
        static_url_path="/static",
        static_folder="static",
        instance_relative_config=False,
    )

    app.config.from_object(settings_ns)

    app.register_blueprint(main_bp)
    app.jinja_env.filters["clean_uri"] = clean_uri
    app.context_processor(utility_processor)
    babel.init_app(app)

    if app.config["DEBUG"]:
        try:
            from flask_debugtoolbar import DebugToolbarExtension
        except ImportError:
            LOGGER.info('cannot import lib "flask_debugtoolbar". '
                        'Make sure it is installed and available in the '
                        'import path.')
        else:
            toolbar = DebugToolbarExtension()
            toolbar.init_app(app)

    return app
예제 #4
0
def creat_app():
    app = Flask(__name__)
    app.config.from_object('app.secure')
    app.config.from_object('app.setting')

    register_blueprint(app)
    # 数据库 插件
    db.init_app(app)
    db.create_all(app=app)
    migtate = Migrate(app,db)
    # migtate.add_command('db', MigrateCommand)


    # login 登录插件初始化
    login_manager.init_app(app)
    # 没登录,将其引导到登录页面
    login_manager.login_view = 'web.login'
    login_manager.login_message='请先登录'

    # admin 注册
    from .admin import admin
    admin.init_app(app)
    # 汉化
    babel = Babel(app)
    babel.init_app(app)



    return app
예제 #5
0
def register_babel(app):
    translations = os.path.abspath(os.path.join(
        os.path.dirname(__file__), os.pardir, 'translations'))
    domain = Domain(translations)
    babel = Babel(default_domain=domain)
    babel.init_app(app)

    class CustomJSONEncoder(JSONEncoder):
        """This class adds support for lazy translation texts to Flask's
        JSON encoder. This is necessary when flashing translated texts."""

        def default(self, obj):
            from speaklater import is_lazy_string
            if is_lazy_string(obj):
                try:
                    return unicode(obj)  # python 2
                except NameError:
                    return str(obj)  # python 3
            return super(CustomJSONEncoder, self).default(obj)

    app.json_encoder = CustomJSONEncoder

    @babel.localeselector
    def get_locale():
        return request.accept_languages.best_match(['zh', 'en'])

    @babel.timezoneselector
    def get_timezone():
        return 'UTC'
예제 #6
0
def register_babel(app):
    babel = Babel()
    babel.init_app(app)

    class CustomJSONEncoder(JSONEncoder):
        """This class adds support for lazy translation texts to Flask's
        JSON encoder. This is necessary when flashing translated texts."""
        def default(self, obj):
            from speaklater import is_lazy_string
            if is_lazy_string(obj):
                try:
                    return unicode(obj)  # python 2
                except NameError:
                    return str(obj)  # python 3
            return super(CustomJSONEncoder, self).default(obj)

    app.json_encoder = CustomJSONEncoder

    @babel.localeselector
    def get_locale():
        user = getattr(g, 'user', None)
        if user is not None:
            if g.user.is_authenticated:
                return user.setting.locale or 'zh'
        return request.accept_languages.best_match(
            app.config['LANGUAGES'].keys())

    @babel.timezoneselector
    def get_timezone():
        user = getattr(g, 'user', None)
        if user is not None:
            if g.user.is_authenticated:
                return user.setting.timezone or 'UTC'
        return 'UTC'
예제 #7
0
def create_app():
    from app.web.util.util import refresh_control_info

    app = Flask(__name__)
    app.config.from_pyfile('secure.py')
    app.config.from_pyfile('settings.py')
    # 注册SQLAlchemy
    db.init_app(app)

    # 注册login模块
    login_manager.init_app(app)
    login_manager.login_view = 'web.login'
    login_manager.login_message = '请先登录或注册'

    # 注册admin模块
    from app.model.user import User
    from app.model.vote import VoteEvent
    admin = Admin(app=app, name='后台管理系统', template_mode='bootstrap3')
    admin.add_view(UserModelView(User, db.session, name='用户管理'))
    admin.add_view(VoteEventModelView(VoteEvent, db.session, name='投票管理'))

    # 国际化
    babel = Babel()
    babel.init_app(app)

    # 刷新投票控制信息
    with app.app_context():
        refresh_control_info()

    return app
예제 #8
0
파일: app.py 프로젝트: scieloorg/packtools
def create_app(settings_ns):

    babel = Babel()
    app = Flask(
        __name__,
        static_url_path="/static",
        static_folder="static",
        instance_relative_config=False,
    )

    app.config.from_object(settings_ns)

    app.register_blueprint(main_bp)
    app.jinja_env.filters["clean_uri"] = clean_uri
    app.context_processor(utility_processor)
    babel.init_app(app)

    if app.config["DEBUG"]:
        try:
            from flask_debugtoolbar import DebugToolbarExtension
        except ImportError:
            LOGGER.info('cannot import lib "flask_debugtoolbar". '
                        'Make sure it is installed and available in the '
                        'import path.')
        else:
            toolbar = DebugToolbarExtension()
            toolbar.init_app(app)

    return app
예제 #9
0
def register_babel(app):
    translations = os.path.abspath(
        os.path.join(os.path.dirname(__file__), os.pardir, 'translations'))
    domain = Domain(translations)
    babel = Babel(default_domain=domain)
    babel.init_app(app)

    class CustomJSONEncoder(JSONEncoder):
        """This class adds support for lazy translation texts to Flask's
        JSON encoder. This is necessary when flashing translated texts."""
        def default(self, obj):
            from speaklater import is_lazy_string
            if is_lazy_string(obj):
                try:
                    return unicode(obj)  # python 2
                except NameError:
                    return str(obj)  # python 3
            return super(CustomJSONEncoder, self).default(obj)

    app.json_encoder = CustomJSONEncoder

    @babel.localeselector
    def get_locale():
        return request.accept_languages.best_match(['zh', 'en'])

    @babel.timezoneselector
    def get_timezone():
        return 'UTC'
예제 #10
0
def register_babel(app):
    translations = os.path.abspath(
        os.path.join(os.path.dirname(__file__), os.pardir, 'translations'))
    domain = Domain(translations)
    babel = Babel(default_domain=domain)
    babel.init_app(app)

    # class CustomJSONEncoder(JSONEncoder):
    #     """This class adds support for lazy translation texts to Flask's
    #     JSON encoder. This is necessary when flashing translated texts."""

    #     def default(self, obj):
    #         from speaklater import is_lazy_string
    #         if is_lazy_string(obj):
    #             try:
    #                 return unicode(obj)  # python 2
    #             except NameError:
    #                 return str(obj)  # python 3
    #         return super(CustomJSONEncoder, self).default(obj)

    # app.json_encoder = CustomJSONEncoder

    @babel.localeselector
    def get_locale():
        user = getattr(g, 'user', None)
        if user is not None:
            if request.path.startswith('/admin'):
                return 'zh_Hans_CN'
            if g.user.is_authenticated:
                return user.setting.locale or 'zh'
        return request.accept_languages.best_match(
            app.config['LANGUAGES'].keys())

    @babel.timezoneselector
    def get_timezone():
        user = getattr(g, 'user', None)
        if user is not None:
            if g.user.is_authenticated:
                return user.setting.timezone or 'UTC'
        return 'UTC'
예제 #11
0
def creat_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    bootstrap = Bootstrap(app)
    db.init_app(app)
    db.create_all(app=app)

    register_blueprint(app)
    moment.init_app(app)

    # 让python支持命令行工作
    manager = Manager(app)

    # 使用migrate绑定app和db
    migrate = Migrate(app, db)
    # 添加迁移脚本的命令到manager中
    manager.add_command('db', MigrateCommand)

    # login 登录插件初始化
    login_manager.init_app(app)
    # 没登录,将其引导到登录页面
    login_manager.login_view = 'web.login'
    login_manager.login_message = '请先登录'

    # admin 注册
    from .admin import admin
    admin.init_app(app)
    # 汉化
    babel = Babel(app)
    babel.init_app(app)
    '''
    app_context_processor在flask中被称作上下文处理器,借助app_context_processor
    可以让所有自定义变量在模板中可见
    函数的返回结果必须是dict,dict中的key将作为变量在所有模板中可见
    '''
    app.context_processor(utility_processor)

    return app
예제 #12
0
class InvenioI18N(object):
    """Invenio I18N module."""

    def __init__(
        self,
        app=None,
        date_formats=None,
        localeselector=None,
        timezoneselector=None,
        entrypoint="invenio_i18n.translations",
    ):
        """Initialize extension."""
        self.babel = Babel(date_formats=date_formats, configure_jinja=True, default_domain=MultidirDomain())

        self.localeselector = localeselector
        self.timezoneselector = timezoneselector
        self.entrypoint = entrypoint
        self._locales_cache = None

        if app:
            self.init_app(app)

    def init_app(self, app):
        """Flask application initialization."""
        # Initialize Flask-BabelEx
        app.config.setdefault("I18N_LANGUAGES", [])

        # TODO: allow to plug custom localeselector and timezoneselector
        self.babel.init_app(app)
        self.babel.localeselector(self.localeselector or get_locale)
        self.babel.timezoneselector(self.timezoneselector or get_timezone)

        # Add paths to search for message catalogs
        domain = self.babel._default_domain
        # 1. Paths listed in I18N_TRANSLATIONS_PATHS
        for p in app.config.get("I18N_TRANSLATIONS_PATHS", []):
            domain.add_path(p)
        # 2. <app.root_path>/translations
        app_translations = os.path.join(app.root_path, "translations")
        if os.path.exists(app_translations):
            domain.add_path(app_translations)
        # 3. Entrypoints
        if self.entrypoint:
            domain.add_entrypoint(self.entrypoint)

        # Register Jinja2 template filters for date formatting (Flask-Babel
        # already installs other filters).
        app.add_template_filter(filter_to_utc, name="toutc")
        app.add_template_filter(filter_to_user_timezone, name="tousertimezone")

        # Lazy string aware JSON encoder.
        app.json_encoder = get_lazystring_encoder(app)

        app.extensions["invenio-i18n"] = self

    def get_locales(self):
        """Get a list of supported locales."""
        if self._locales_cache is None:
            langs = [self.babel.default_locale]
            for l in current_app.config.get("I18N_LANGUAGES", []):
                langs.append(self.babel.load_locale(l))
            self._locales_cache = langs
        return self._locales_cache
예제 #13
0
파일: start.py 프로젝트: xqliu/visualsbest
import app.config as config

app.config.from_object(config)

app.jinja_env.filters['substring'] = jinja2_filter_substring
app.jinja_env.filters['startswith'] = jinja2_filter_startswith
app.jinja_env.filters['datedelta'] = jinja2_filter_date_with_delta
app.jinja_env.filters['heatmap'] = jinja2_filter_photo_collection_heat_map
app.jinja_env.filters['averagerating'] = jinja2_filter_get_average_rating
app.jinja_env.filters['numberoforder'] = jinja2_filter_get_number_of_order

from flask_babelex import Babel

babel = Babel(default_locale='zh_Hans_CN')
babel.init_app(app)

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy(app)
from app.app_provider import AppInfo

AppInfo.set_app(app)
AppInfo.set_db(db)

# 初始化云端的图片存储服务
image_store = ImageStore(app)
# 初始化Gallery存储的服务,用于存储所有的用户上传的头像
AppInfo.set_galleries_store_service(image_store)
# 初始化Image存储的服务,用于存储所有摄影师上传的作品图像
AppInfo.set_image_store_service(image_store)
예제 #14
0
class InvenioI18N(object):
    """Invenio I18N extension."""

    def __init__(self, app=None, date_formats=None, localeselector=None,
                 timezoneselector=None,
                 entry_point_group='invenio_i18n.translations'):
        """Initialize extension.

        :param app: Flask application.
        :param data_formats: Override default date/time formatting.
        :param localeselector: Callback function used for locale selection.
            (Default: :func:`invenio_i18n.selectors.get_locale()`)
        :param timezoneselector: Callback function used for timezone selection.
            (Default: ``BABEL_DEFAULT_TIMEZONE``)
        :param entry_point_group: Entrypoint used to load translations from.
            Set to ``None`` to not load translations from entry points.
        """
        self.domain = MultidirDomain()
        self.babel = Babel(
            date_formats=date_formats,
            configure_jinja=True,
            default_domain=self.domain,
        )
        self.localeselector = localeselector
        self.timezoneselector = timezoneselector
        self.entry_point_group = entry_point_group
        self._locales_cache = None
        self._languages_cache = None

        if app:
            self.init_app(app)

    def init_app(self, app):
        """Flask application initialization.

        The initialization will:

         * Set default values for the configuration variables.
         * Load translations from paths specified in
           ``I18N_TRANSLATIONS_PATHS``.
         * Load translations from ``app.root_path>/translations`` if it exists.
         * Load translations from a specified entry point.
         * Add ``toutc`` and ``tousertimezone`` template filters.
         * Install a custom JSON encoder on app.
        """
        self.init_config(app)

        # Initialize Flask-BabelEx
        self.babel.init_app(app)
        self.babel.localeselector(self.localeselector or get_locale)
        self.babel.timezoneselector(self.timezoneselector or get_timezone)

        # 1. Paths listed in I18N_TRANSLATIONS_PATHS
        for p in app.config.get('I18N_TRANSLATIONS_PATHS', []):
            self.domain.add_path(p)
        # 2. <app.root_path>/translations
        app_translations = os.path.join(app.root_path, 'translations')
        if os.path.exists(app_translations):
            self.domain.add_path(app_translations)
        # 3. Entrypoints
        if self.entry_point_group:
            self.domain.add_entrypoint(self.entry_point_group)

        # Register blueprint if URL is set.
        if app.config['I18N_SET_LANGUAGE_URL'] \
           and app.config['I18N_LANGUAGES']:
            app.register_blueprint(
                blueprint, url_prefix=app.config['I18N_SET_LANGUAGE_URL'])

        # Register Jinja2 template filters for date formatting (Flask-Babel
        # already installs other filters).
        app.add_template_filter(filter_to_utc, name='toutc')
        app.add_template_filter(filter_to_user_timezone, name='tousertimezone')
        app.add_template_filter(filter_language_name, name='language_name')
        app.add_template_filter(
            filter_language_name_local, name='language_name_local')
        app.context_processor(lambda: dict(current_i18n=current_i18n))

        # Lazy string aware JSON encoder.
        app.json_encoder = get_lazystring_encoder(app)

        app.extensions['invenio-i18n'] = self

    def init_config(self, app):
        """Initialize configuration."""
        for k in dir(config):
            if k.startswith('I18N_'):
                app.config.setdefault(k, getattr(config, k))

    def iter_languages(self):
        """Iterate over list of languages."""
        default_lang = self.babel.default_locale.language
        default_title = self.babel.default_locale.get_display_name(
            default_lang)

        yield (default_lang, default_title)

        for l, title in current_app.config.get('I18N_LANGUAGES', []):
            yield l, title

    def get_languages(self):
        """Get list of languages."""
        if self._languages_cache is None:
            self._languages_cache = list(self.iter_languages())
        return self._languages_cache

    def get_locales(self):
        """Get a list of supported locales.

        Computes the list using ``I18N_LANGUAGES`` configuration variable.
        """
        if self._locales_cache is None:
            langs = [self.babel.default_locale]
            for l, dummy_title in current_app.config.get('I18N_LANGUAGES', []):
                langs.append(self.babel.load_locale(l))
            self._locales_cache = langs
        return self._locales_cache

    @property
    def locale(self):
        """Get current locale."""
        return get_current_locale()

    @property
    def language(self):
        """Get current language code."""
        return get_current_locale().language

    @property
    def timezone(self):
        """Get current timezone."""
        return get_current_timezone()
예제 #15
0
# Login Manager
login_manager = LoginManager()
login_manager.init_app(app)

# Bcrypt
bcrypt = Bcrypt()
bcrypt.init_app(app)

# QRCode
qrcode = QRcode()
qrcode.init_app(app)

# Babel
domain = Domain(dirname='translations')
babel = Babel(default_domain=domain)
babel.init_app(app)

# Flask-Assets
from .assets import bundles
assets = Environment(app)
assets.append_path(os.path.join(os.path.dirname(__file__), './static'))
assets.append_path(
    os.path.join(os.path.dirname(__file__), './static/bower_components'))
assets.register(bundles)

# Flask-Admin
admin = Admin(app,
              name='Interface Admin',
              index_view=StatisticsView(url='/admin', name='Vue générale'))
admin.add_view(CompanyView(get_db().companies, name='Entreprises'))
admin.add_view(UserView(get_db().users, name='Utilisateurs'))
예제 #16
0
class InvenioI18N(object):
    """Invenio I18N module."""
    def __init__(self,
                 app=None,
                 date_formats=None,
                 localeselector=None,
                 timezoneselector=None,
                 entrypoint='invenio_i18n.translations'):
        """Initialize extension."""
        self.babel = Babel(date_formats=date_formats,
                           configure_jinja=True,
                           default_domain=MultidirDomain())

        self.localeselector = localeselector
        self.timezoneselector = timezoneselector
        self.entrypoint = entrypoint
        self._locales_cache = None

        if app:
            self.init_app(app)

    def init_app(self, app):
        """Flask application initialization."""
        # Initialize Flask-BabelEx
        app.config.setdefault("I18N_LANGUAGES", [])

        # TODO: allow to plug custom localeselector and timezoneselector
        self.babel.init_app(app)
        self.babel.localeselector(self.localeselector or get_locale)
        self.babel.timezoneselector(self.timezoneselector or get_timezone)

        # Add paths to search for message catalogs
        domain = self.babel._default_domain
        # 1. Paths listed in I18N_TRANSLATIONS_PATHS
        for p in app.config.get("I18N_TRANSLATIONS_PATHS", []):
            domain.add_path(p)
        # 2. <app.root_path>/translations
        app_translations = os.path.join(app.root_path, 'translations')
        if os.path.exists(app_translations):
            domain.add_path(app_translations)
        # 3. Entrypoints
        if self.entrypoint:
            domain.add_entrypoint(self.entrypoint)

        # Register Jinja2 template filters for date formatting (Flask-Babel
        # already installs other filters).
        app.add_template_filter(filter_to_utc, name="toutc")
        app.add_template_filter(filter_to_user_timezone, name="tousertimezone")

        # Lazy string aware JSON encoder.
        app.json_encoder = get_lazystring_encoder(app)

        app.extensions['invenio-i18n'] = self

    def get_locales(self):
        """Get a list of supported locales."""
        if self._locales_cache is None:
            langs = [self.babel.default_locale]
            for l in current_app.config.get('I18N_LANGUAGES', []):
                langs.append(self.babel.load_locale(l))
            self._locales_cache = langs
        return self._locales_cache
예제 #17
0
파일: ext.py 프로젝트: topless/invenio-i18n
class InvenioI18N(object):
    """Invenio I18N extension."""
    def __init__(self,
                 app=None,
                 date_formats=None,
                 localeselector=None,
                 timezoneselector=None,
                 entry_point_group='invenio_i18n.translations'):
        """Initialize extension.

        :param app: Flask application.
        :param data_formats: Override default date/time formatting.
        :param localeselector: Callback function used for locale selection.
            (Default: :func:`invenio_i18n.selectors.get_locale()`)
        :param timezoneselector: Callback function used for timezone selection.
            (Default: ``BABEL_DEFAULT_TIMEZONE``)
        :param entry_point_group: Entrypoint used to load translations from.
            Set to ``None`` to not load translations from entry points.
        """
        self.domain = MultidirDomain()
        self.babel = Babel(
            date_formats=date_formats,
            configure_jinja=True,
            default_domain=self.domain,
        )
        self.localeselector = localeselector
        self.timezoneselector = timezoneselector
        self.entry_point_group = entry_point_group
        self._locales_cache = None
        self._languages_cache = None

        if app:
            self.init_app(app)

    def init_app(self, app):
        """Flask application initialization.

        The initialization will:

         * Set default values for the configuration variables.
         * Load translations from paths specified in
           ``I18N_TRANSLATIONS_PATHS``.
         * Load translations from ``app.root_path>/translations`` if it exists.
         * Load translations from a specified entry point.
         * Add ``toutc`` and ``tousertimezone`` template filters.
         * Install a custom JSON encoder on app.
        """
        self.init_config(app)

        # Initialize Flask-BabelEx
        self.babel.init_app(app)
        self.babel.localeselector(self.localeselector or get_locale)
        self.babel.timezoneselector(self.timezoneselector or get_timezone)

        # 1. Paths listed in I18N_TRANSLATIONS_PATHS
        for p in app.config.get('I18N_TRANSLATIONS_PATHS', []):
            self.domain.add_path(p)
        # 2. <app.root_path>/translations
        app_translations = os.path.join(app.root_path, 'translations')
        if os.path.exists(app_translations):
            self.domain.add_path(app_translations)
        # 3. Entrypoints
        if self.entry_point_group:
            self.domain.add_entrypoint(self.entry_point_group)

        # Register Jinja2 template filters for date formatting (Flask-Babel
        # already installs other filters).
        app.add_template_filter(filter_to_utc, name='toutc')
        app.add_template_filter(filter_to_user_timezone, name='tousertimezone')
        app.add_template_filter(filter_language_name, name='language_name')
        app.add_template_filter(filter_language_name_local,
                                name='language_name_local')
        app.add_template_global(current_i18n, name='current_i18n')

        # Lazy string aware JSON encoder.
        app.json_encoder = get_lazystring_encoder(app)

        app.extensions['invenio-i18n'] = self

    def init_config(self, app):
        """Initialize configuration."""
        for k in dir(config):
            if k.startswith('I18N_'):
                app.config.setdefault(k, getattr(config, k))

    def iter_languages(self):
        """Iterate over list of languages."""
        default_lang = self.babel.default_locale.language
        default_title = self.babel.default_locale.get_display_name(
            default_lang)

        yield (default_lang, default_title)

        for l, title in current_app.config.get('I18N_LANGUAGES', []):
            yield l, title

    def get_languages(self):
        """Get list of languages."""
        if self._languages_cache is None:
            self._languages_cache = list(self.iter_languages())
        return self._languages_cache

    def get_locales(self):
        """Get a list of supported locales.

        Computes the list using ``I18N_LANGUAGES`` configuration variable.
        """
        if self._locales_cache is None:
            langs = [self.babel.default_locale]
            for l, dummy_title in current_app.config.get('I18N_LANGUAGES', []):
                langs.append(self.babel.load_locale(l))
            self._locales_cache = langs
        return self._locales_cache

    @property
    def locale(self):
        """Get current locale."""
        return get_current_locale()

    @property
    def language(self):
        """Get current language code."""
        return get_current_locale().language

    @property
    def timezone(self):
        """Get current timezone."""
        return get_current_timezone()
예제 #18
0
from flask_babelex import Babel, Domain, _
"""An example for creating LinkCol or ButtonCol with translations.
   You have to call ./babel.sh lncompile before using this example.
"""

# Setup the flask app
app = Flask(__name__)

# Setup babel
app.config['BABEL_DEFAULT_LOCALE'] = 'en_GB'
app.config['BABEL_TRANSLATION_DIRECTORIES'] = 'translations'
language_domain = Domain(dirname='translations', domain='messages')
language = Babel(default_locale='en_GB',
                 configure_jinja=True,
                 default_domain=language_domain)
language.init_app(app)


# This class shows how to use translations for columns and tables
class TranslatedTable(Table):
    name = Col('name')
    button = ButtonCol('button_name', 'some_url', translation_enabled=True)

    def __init__(self, items):
        super(TranslatedTable, self).__init__(items, translation_enabled=True)


# The main page
@app.route('/', methods=['GET', 'POST'])
def index():
    # The column names will be translated by flask_table