Superset 汉化

多语言支持

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 并没有提供完整的汉化,如果想让汉化更完整,需要自己动手了,具体参考 Superset Translation[1]

工具

我们使用 Flask-Babel[2] 来翻译 Superset。在 Python 文件中,我们使用以下  翻译函数[3]: Flask-Babel

  • gettextlazy_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

参考资料

[1]

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*

欢迎关注公众号

Superset 汉化

有兴趣加群讨论数据挖掘和分析的朋友可以加我微信(witwall),暗号:入群

Superset 汉化

也欢迎投稿!



原文始发于微信公众号(alitrack):Superset 汉化

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/62700.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!