最近由于工作需要研究开源可视化项目superset,由于其国际化做不怎么好,故而记录下国际化的过程,本篇本着『授人以鱼不如授人以渔』的原则,只叙述国际化的过程及方法,不提供直接的国际化文件。
为了方便讲解,我们假定superset安装目录为PYHTON_LIB=/usr/local/lib/python3.5/site-packages
1、修改PYHTON_LIB/superset-0.17.1-py3.5.egg/superset/config.py文件
注:如不是root用户,需要修改config.py的文件权限后,再进行修改。
修改点如下:
# ---------------------------------------------------
# Babel config for translations
# ---------------------------------------------------
# Setup default language
BABEL_DEFAULT_LOCALE = 'zh'
# Your application default translation path
BABEL_DEFAULT_FOLDER = 'babel/translations'
# The allowed translation for you app
LANGUAGES = {
# 'en': {'flag': 'us', 'name': 'English'},
# 'fr': {'flag': 'fr', 'name': 'French'},
# 'es':{'flag': 'es', 'name': 'Spain'},
# 'it':{'flag': 'it', 'name': 'Italy'},
'zh': {'flag': 'cn', 'name': 'Chinese'},
}
说明:BABEL_DEFAULT_LOCALE设置默认的本地化环境
LANGUAGES:国际化的语言种类,你可以把注释全放开,这样就可以根据不同的语言环进行本地化,若要只提供一种语言,那么就可以放开你要使用的语言,而把其它的语言注释掉。
2、修改messages.po文件
路径:PYHTON_LIB/superset-0.17.1-py3.5.egg/superset/translations/zh/LC_MESSAGES
根据views.py视图中
from flask_babel import gettext as __
from flask_babel import lazy_gettext as _
可以判断出,只有"__"和"_"开头的才可以进行国际化,如
__("Import Dashboards")
_("Column")
然后到messages.po文件中找相应字符串,看是否已经国际化过,若没有,则在文件的尾部添加
msgid "Column"
msgstr "列"
msgid就是要国际化的字符串,而msgstr则是要翻译成的语言
3、编译messages.po文件为messages.mo
在终端中将目录切换到PYHTON_LIB/superset-0.17.1-py3.5.egg/superset/目录下,执行如下命令
pybabel compile -d translations
注意:要对translations目录及其子目录有写入权限
4、重启superset即可。
ps:以上只是superset的国际化,但类似下面panel之类的汉化,必须要修改appbuilder的汉化目录才能生效,目录在PYHTON_LIB/flask_appbuilder/translations/zh。