Superset图表与仪表盘国际化实现技术咨询
Superset图表与仪表盘国际化实现方案
一、图表/仪表盘静态文本(标题、描述等)翻译
利用Superset内置的翻译键机制,将自定义文本关联到多语言包:
- 在创建/编辑图表、仪表盘时,不直接输入硬编码文本,而是使用翻译键语法:
{{ t('your.custom.key') }}- 示例:仪表盘标题填写
{{ t('dashboard.retail_sales.title') }},图表副标题填写{{ t('chart.monthly_trend.subtitle') }}
- 示例:仪表盘标题填写
- 在Superset前端翻译文件中添加对应键值对(路径:
superset-frontend/src/translations/下的en.json、fr.json):- en.json:
"dashboard.retail_sales.title": "Retail Sales Dashboard", "chart.monthly_trend.subtitle": "Monthly Sales Trend Analysis" - fr.json:
"dashboard.retail_sales.title": "Tableau de bord des ventes au détail", "chart.monthly_trend.subtitle": "Analyse de la tendance des ventes mensuelles"
- en.json:
- 仪表盘内的文本框、注释等组件,同样使用翻译键语法实现多语言切换。
二、数据及标签翻译(动态内容)
针对数据库中的维度值、标签等动态数据,通过SQL逻辑或数据集配置实现语言匹配:
方法1:SQL查询中结合语言变量
利用Superset上下文变量{{ current_user_language }}(自动获取用户当前设置的语言),在SQL里动态返回对应语言的内容:
SELECT -- 根据用户语言切换产品名称 CASE WHEN '{{ current_user_language }}' = 'fr' THEN p.product_name_fr ELSE p.product_name_en END AS product_name, SUM(s.total_amount) AS sales_volume FROM products p JOIN sales_records s ON p.product_id = s.product_id GROUP BY 1
方法2:数据集计算列配置
在数据集(Dataset)中创建计算列,封装多语言逻辑:
- 进入数据集编辑页面,添加计算列,命名为
product_name_translated - 计算列表达式:
CASE WHEN {{ current_user_language }} = 'fr' THEN product_name_fr ELSE product_name_en END - 后续图表直接使用该计算列即可自动根据语言切换显示内容。
三、基于语言检测的筛选器配置
支持手动选择语言或自动匹配用户语言,实现数据维度的语言筛选:
自动语言匹配(无需手动筛选)
直接在SQL或计算列中使用{{ current_user_language }}变量,Superset会自动读取用户个人设置中的语言选项(已添加en/fr),无需额外配置筛选器。
手动语言筛选器(用户可切换)
- 在仪表盘编辑页面,添加下拉筛选器组件:
- 筛选器类型选择"静态列表",选项设置为
en(English)、fr(Français) - 给筛选器命名为
language_selector
- 筛选器类型选择"静态列表",选项设置为
- 在关联图表的SQL中引用筛选器值:
SELECT CASE WHEN '{{ filter_values('language_selector')[0] }}' = 'fr' THEN p.product_name_fr ELSE p.product_name_en END AS product_name, SUM(s.total_amount) AS sales_volume FROM products p JOIN sales_records s ON p.product_id = s.product_id GROUP BY 1 - 将筛选器设置为仪表盘级筛选器,确保所有关联图表同步响应语言切换。
内容的提问来源于stack exchange,提问作者Carole
相关产品推荐
相关产品推荐

