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