Screenshot

Image

Description

Версия Superset: 5.0

Окружение: ОС: Ubuntu 20.04 Браузер: Chrome 120

Ожидаемое поведение В виджете "Календарная тепловая карта" названия месяцев должны отображаться на русском языке (например, "Январь", "Февраль") в соответствии с настройками локализации, заданными в superset_config.py: BABEL_DEFAULT_LOCALE = "ru" D3_TIME_FORMAT настроен с использованием русских названий месяцев.

Фактическое поведение Названия месяцев в виджете "Календарная тепловая карта" отображаются на английском языке (например, "January", "February"), несмотря на указанные настройки локализации.

Comment From: dosubot[bot]

Hi @zmeygarinich! I'm Dosu and I’m helping the superset team.

Виджет "Календарная тепловая карта" в Superset 5.0 отображает названия месяцев на английском языке, потому что его реализация использует d3.time.format без поддержки локализации — в коде не происходит установка русской локали для D3.js, и настройки BABEL_DEFAULT_LOCALE или D3_TIME_FORMAT из superset_config.py не передаются в компонент календаря. Даже если вы указали русские месяцы в D3_TIME_FORMAT, при использовании формата "adaptive" или по умолчанию, месяц всегда будет на английском, так как d3.time.format использует только встроенную (английскую) локаль, если явно не задана другая подробнее.

В коде виджета (Calendar.js и cal-heatmap.js) нет механизма для передачи локали или пользовательских названий месяцев в D3.js — все форматирование дат происходит через d3.time.format('%B'), который всегда возвращает английские месяцы, если не использовать d3.timeFormatLocale с нужной локалью см. детали реализации.

На данный момент нет штатного способа добиться русских названий месяцев в этом виджете только через конфиг. Для поддержки локализации потребуется доработка: нужно добавить возможность передавать d3.timeFormatLocale с русскими месяцами в компонент календаря и использовать его для форматирования дат. В качестве временного обходного пути можно попробовать явно задать формат даты (например, %m или %Y), чтобы избежать вывода английских названий, но полноценная локализация требует изменений в коде подробнее.

Похожие проблемы с локализацией дат и месяцев обсуждаются в issue #31790.

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Chat with Dosu Join Discord Share on X

Comment From: rusackas

Maybe @TechAuditBI has some insight/experience here?

Comment From: rusackas

Seems this might be (at least partly) a duplicate of https://github.com/apache/superset/issues/31790?

Comment From: Prasad-JB

Hi, I am interested in contributing a fix for the Calendar Heatmap widget’s locale issue regarding Russian month names. I have experience with localization and internationalization in web apps. Please consider assigning this to me. Thanks!

Comment From: zmeygarinich

Seems this might be (at least partly) a duplicate of #31790?

Yes, the problem is similar, but the type of graph is different.

Comment From: Prasad-JB

Thanks for clarifying, @zmeygarinich! I understand the issue is similar to #31790 but applies to the Calendar Heatmap widget specifically. If assigned, I’ll review both this widget’s implementation and the solution patterns from #31790 to ensure the locale handling is consistent across chart types.

Comment From: rusackas

If assigned, I’ll review both this widget’s implementation and the solution patterns from https://github.com/apache/superset/issues/31790 to ensure the locale handling is consistent across chart types.

No assignment needed... PRs always welcomed :)

Comment From: Prasad-JB

Thanks @rusackas, I’ll go ahead and work on a PR to fix this in the Calendar Heatmap widget. The idea is to replace the hardcoded d3.time.format('%B') calls with d3.timeFormatLocale, similar to how it’s been addressed in #31790. That way, month names will respect the locale set in Superset’s config.

I’ll test with Russian (BABEL_DEFAULT_LOCALE = "ru") to confirm, but the change should benefit all locales. If I run into anything unexpected, I’ll circle back here.