Search
Write a publication
Pull to refresh

Внедрение символа рубля в интерфейс Apache Superset

Level of difficultyMedium

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.

После этих манипуляций необходимо пересобрать образ докер файла. И вуаля, у нас правильное, принятое в России, отображение символа рубля.

В списке выбора валют также отображается правильный символ
В списке выбора валют также отображается правильный символ

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.