Flask框架学习笔记21-实战(5):(博客管理)网页全球化

现在网站功能基本齐全,当然现在的网络越来越发达,我们的网站不止是有我们自己看,还有别的人浏览,当然还有歪果仁,所以我们就需要对项目进行配置,从而使得我们的项目能够实现全球化,更加方便外人来浏览。(其实说白了就是类似对项目的一个翻译)
所以本次我们使用python的另一个插件来实现全球化功能。

当然,这一部分功能可以选择不实现,只是一个可选项而已
1、安装依赖包
pip2 install Flask-babel

2、实例化、注册该插件,并进行配置
app/init.py

#  -*- coding:utf-8 -*-
from flask import Flask
from werkzeug.routing import BaseConverter
from app.static.flask_bootstrap import Bootstrap
from flask_nav import Nav
from flask_nav.elements import *
from os import path
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_pagedown import PageDown
from flask_gravatar import Gravatar
from flask_babel import Babel,gettext as _

class RegexConver(BaseConverter):
    def __init__(self,url_map,*items):
        super(RegexConver,self).__init__(url_map)
        self.regex = items[0]

#获取绝对路径
basedir = path.abspath(path.dirname(__file__))
bootstrap = Bootstrap()
nav = Nav()
#创建数据库实体
db = SQLAlchemy()
#实例化
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'
pagedown = PageDown()
babel = Babel()


def create_app():
    app = Flask(__name__)
    app.url_map.converters['regex'] = RegexConver
    # app.config.from_pyfile('config')
    #更新配置
    app.secret_key = 'hard to guess string'
    app.config.from_pyfile('babel.cfg')
    app.config['BABEL_DEFAULT_LOCALE'] = 'zh'
    
    app.config['BOOTSTRAP_SERVE_LOCAL'] = True
    nav.register_element('roof', Navbar(u"Flask入门",
                                       View(u'主页', 'index'),
                                       View(u'关于', 'about'),
                                       View(u'服务', 'services'),
                                       View(u'登录', 'login')
                                       ))
    # 配置数据库
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + path.join(basedir, 'data.sqlite')
    # 打开提交
    app.config['SQLALCHEMY_COMMIT-OD-TEARDOWN'] = True
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS']= True
    app.config['SQLALCHEMY_COMMIT_TEARDOWN '] = True

    bootstrap.init_app(app)
    nav.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)
    pagedown.init_app(app)

    babel.init_app(app)
    Gravatar(app,size=64)

    from auth import auth as auth_blueprint
    from main import  main as main_blueprint

    app.register_blueprint(auth_blueprint,url_prefix='/auth',static_folder='static')
    app.register_blueprint(main_blueprint,static_folder='static')

    return app

3、导入一个插件,在app下新建babel.cfg
在这里插入图片描述
内容可以去babel官网上拷贝
app/babel.cfg

[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

4、修改所有文件中的中文字段,调用babel中gettext方法修饰
在这里插入图片描述
类似如此,所有文件中的的中文字段都进行修改。
注意修改格式化的字符串时应该用如下写法:

title =_(u'编辑 - %(title)', title=post.title)

5、用 pybabel 生成要翻译的 PO 模板文件
命令如下:注意,这里因为我们的babel。cfg文件放在app下,所以要先cd app。


pybabel extract -F babel.cfg -o messages.pot .

注意结尾的点“.”,这个点表示当前目录,目录是 pybabel 必须的参数
在这里插入图片描述
可以看到我们的文件已经生成了
在这里插入图片描述6、接下来我们创建英文翻译
命令如下:

pybabel init -i messages.pot -d translations -l en

在这里插入图片描述
翻译完后执行下面的命令,为其编译出 message.mo 文件

 pybabel compile -d translations

7、更新翻译
需要对程序和模板做修改,翻译也要随之更新。更新后需要用前面的命令重新生成 messages.pot 文件,然后使用下面的命令将更新的内容 merge 到原来的翻译中:

pybabel update -i messages.pot -d translations

最后再到对应 app的文件夹下更新翻译并 compile 即可。




参考文档:——》Flask中pybabel简单使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值