Внедрение символа рубля в интерфейс Apache Superset
Apache Superset активно завоевывает отечественный рынок BI-систем. Но у него, как и любого open sourse решения, есть свои плюсы и минусы. По сути, это конструктор, который предлагает из коробки базовые вещи. А если хочешь чего-то большего, то нужно крутить-вертеть самостоятельно или заказывать стороннюю доработку. Об одной из небольших доработок пойдет речь в этой статье.
Написать данную статью меня побудило желание помочь своим коллегам, т.к. я не нашел информации по данной теме, когда столкнулся с задачей.
В связи с активной тенденцией на импортозамещение и блокировками со стороны западных правообладателей, в нашей компании было принято решение на переход с полюбившейся многим Power BI на Apache Superset.
Как всем известно Apache Superset бесплатная система с открытым исходным кодом, что даёт множество возможностей для кастомизации, но и накладывает определённые ограничения. И как следствие некоторое блуждание в темном лесу.
Участвуя в проекте локализации Apache Superset было принято решение вывести в дашбордах отображение символа рубля ₽. Сперва, задача показалась несложной, но, как оказалось на практике, задача нетривиальная и требует определенного вмешательства в исходный код Superset.
На первом этапе в конфиг добавили строку в список валют “RUB”. Казалось бы, очевидное и простое решение. Это решение действительно добавило символ отечественной валюты в отображение в дашбордах. Но не так, как ожидалось.
Символ валюты отображался с гордым значением “RUB”
А в контекстном меню выбора валют отображалась так:
Как оказалось, по международной классификации валют наша валюта отображается как RUB. Хотя множество валют имеют свои символы, как например доллар $ или английский фунт £.
Как разработчика, меня не устроило такое решение, и я полез искать информацию, как это изменить.
Единственным решением на форумах и чатах было прописать дефолтные установки в шаблонизаторе форматов D3, чтобы при выборе формата был изменен стандартный символ доллар на символ рубля. У этого решения есть один серьезный недостаток. При выборе адаптированного или иного другого формата значения чисел, символ пропадал.
Быстрое решение этой проблемы найдено не было. Для решения этой задачи пришлось залезать в код для отображения фронтовой части приложения и искать пути решения.
Итак, решение!
За отображение валюты отвечает функция GetCurrencySymbol из пакета @superset-ui-core Данная функция берет символы исходя из настроек локали этой функции и если локаль функции указана, как по дефолту, ‘en-US’, то символы указываются, как принято в западном мире, т.е. ‘RUB’.
Для правильного отображения российской валюты, принятого в нашей стране, необходимо изменить локаль с ‘en-US’ на ‘ru-RU’ в 2 местах в скрипте superset-frontend\packages\superset-ui-core\src\currency-format\CurrencyFormatter.ts
А также необходимо исправить локаль еще в 1 месте в superset-frontend\src\components\Datasource\DatasourceEditor.jsx
В config.py или в специально созданном superset-config.py также нужно добавить "RUB" в список валют для отображения в строку CURRENCIES.
После этих манипуляций необходимо пересобрать образ докер файла. И вуаля, у нас правильное, принятое в России, отображение символа рубля.