暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Superset 汉化

alitrack 2022-09-22
5126

多语言支持

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

参考资料

[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*

欢迎关注公众号

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

也欢迎投稿!



文章转载自alitrack,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论