多语言支持
Superset 可以通过配置 superset_config.py
实现多语言支持
# Setup default language
BABEL_DEFAULT_LOCALE = 'zh'
# Your application default translation path
BABEL_DEFAULT_FOLDER = 'superset/translations'
# The allowed translation for you app
LANGUAGES = {
'en': {'flag': 'us', 'name': 'English'},
'zh': {'flag': 'cn', 'name': 'Chinese'},
}
重启后,在 Settings 的右边会出现语言选择的菜单,
顺便说下,以后的 Superset 便携版本(是不是叫绿色版更好)都会默认加入多语言支持。
Superset 并没有提供完整的汉化,如果想让汉化更完整,需要自己动手了,具体参考 Superset Translation[1]。
工具
我们使用 Flask-Babel[2] 来翻译 Superset。在 Python 文件中,我们使用以下 翻译函数[3]: Flask-Babel
-
gettext
和lazy_gettext
(通常别名为_
):用于翻译单数字符串。 -
ngettext
: 用于翻译可能变成复数的字符串。
from flask_babel import lazy_gettext as _
然后用它包装可翻译的字符串,例如 _('Translate me')
. 在提取过程中,传递给的字符串文字 _
将被添加到每种语言的生成 .po
文件中,以供以后翻译。
在运行时,该 _
函数将返回当前语言的给定字符串的翻译,如果没有可用的翻译,则返回给定字符串本身。
在 TypeScript/JavaScript 中,技术类似:我们导入 t
(简单翻译),tn
(包含数字的翻译)。
import{ t, tn }from"@superset-ui/translation";
提取新字符串进行翻译
每次应用程序字符串更改时都需要执行此步骤。这种情况经常发生,所以如果你想确保你的翻译有很好的覆盖率,这个步骤需要相当频繁地运行,并且更新的字符串通过 PR 合并到上游代码库。要使用当前应用程序字符串更新模板文件 superset/translations/messages.pot
,请运行以下命令:
pybabel extract -F superset/translations/babel.cfg -o superset/translations/messages.pot -k _ -k __ -k t -k tn -k tct .
不要忘记使用适当的许可证信息更新此文件。
更新语言文件
运行以下命令以使用新提取的字符串更新语言文件。
pybabel update -i superset/translations/messages.pot -d superset/translations --ignore-obsolete
然后,您可以翻译收集在位于 下的文件中的字符串 superset/translation
,其中每种语言都有一个文件夹。您可以使用 Poedit[4] 更方便 地翻译 po
文件。wiki 中有一些教程[5]。
要在 MacOS 上执行翻译,您可以通过 Homebrew 安装 poedit
:
brew install poedit
在此之后,只需启动 poedit
应用程序并打开 messages.po
文件。在芬兰语翻译的情况下,这将是 superset/translations/fi/LC_MESSAGES/messages.po
.
应用翻译
为了使翻译在前端可用,我们需要将 PO 文件转换为 JSON 文件。为此,我们需要全局安装 npm 包 po2json
。
npm install -g po2json
要将所有 PO 文件转换为格式化的 JSON 文件,您可以使用该 po2json.sh
脚本。
./scripts/po2json.sh
如果您在运行时遇到错误 po2json
,您可能正在运行同名的 Ubuntu 包,而不是 Node.js 包(它们的参数格式不同)。如果有冲突,您可能需要更新您的 PATH
环境变量或完全限定可执行路径(例如 /usr/local/bin/po2json
,而不是 po2json
)。如果你得到了很多 [null,***]
,messages.json
只需删除所有的 null,
。例如,"year":["年"]
正确而 "year":[null,"年"]
错误。
最后,为了使翻译生效,我们需要将翻译目录编译成二进制 MO 文件。
pybabel compile -d superset/translations
参考资料
Superset Translation: https://superset.apache.org/docs/contributing/translations
[2]
Flask-Babel: https://flask-babel.tkte.ch/
[3]
翻译函数: https://flask-babel.tkte.ch/#using-translations
[4]
Poedit: https://poedit.net/features
[5]
教程: https://wiki.lxde.org/en/Translate_.po_files_with_Poedit*
欢迎关注公众号
有兴趣加群讨论数据挖掘和分析的朋友可以加我微信(witwall),暗号:入群
也欢迎投稿!
原文始发于微信公众号(alitrack):Superset 汉化
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/62700.html