SuperSet是Apache的開源可視化工具,本身提供了漢化功能,但是并不完全,工程師需將config.py中的“en”改為“zh”,就可實現部分漢化,在國際化文件夾中包含了兩個重要文件:messages.po/essages.json,messages.po是用于將py文件中的對應字段進行漢化,只要導入對應模塊,使用_("")將字段包圍即可進行翻譯。而messages.json則是用來對js文件進行漢化,這里指的是jsx文件,只需要使用{t()}將字段包圍即可。
1、在.py文件中需要漢化的字段,可以使用
label_columns={'user':_("User")}
的方式進行國際化連接到漢化文件,并在messages.po文件中填寫
msgid "User"
msgstr "用戶"
的方式進行對應漢化,之后再superset根目錄下執行命令
sudo pybabel compile -d translations
會將messages.po編譯為messages.mo,之后將應用重新啟動即可實現對應字段的漢化。
一般來說,大部分的字段都是默認寫為_開頭的py文件,只需要在po文件中直接填寫對應的漢化即可,但是有一些字段并沒有,這時候就需要我們自己進行對應的py文件填寫了,一般情況下,如果同一個頁面,比如一個列表中部分字段實現了漢化,部分沒有,那么很有可能是messages.po文件中沒有對應字段,但是也可能是在對應的label_colums中沒有田間對該字段的轉化。
2、在jsx文件中需要的漢化
superset是使用python的一個框架(具體我也沒有詳細了解),將jsx文件(類似javascript文件)靜態編譯為不可修改的jsx.html文件,一般情況下,如果在jsx文件或者是jsx.html文件中的字段使用
{t('user')}
格式的字段都是可以在messages.json文件中直接添加對應字段進行漢化的,而且漢化完不需要編譯,直接進行重啟即可:
"User": ["用戶"],
但是有時候一些特殊的字段沒有被t包括,那么我們可以修改jsx文件,只需要將對應的字段用{t()}然后進行一下包括就可以了。不過這里修改完之后是沒有效果的,必須使用assets目錄下的js_build.sh進行靜態編譯,將jsx文件編譯為jsx.html之后就可以生效了,但是有時候某些字段會被包含在一個列表中,沒有辦法使用t進行包圍,那么也可以直接使用漢字的形式。