You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@superset.apache.org by GitBox <gi...@apache.org> on 2017/12/01 14:09:02 UTC
[GitHub] alanmcruickshank opened a new issue #3972: [feature] Global customise-able d3 locale
alanmcruickshank opened a new issue #3972: [feature] Global customise-able d3 locale
URL: https://github.com/apache/incubator-superset/issues/3972
## Feature description
The default locale (notably for currency values) is US English. For other countries where currency might be in Euros or Pounds (or who might want to use commas or stops differently), this makes number formatting hard.
To do this we would need to set a locale for d3 before we call `d3.format()` on anything as per the docs:
https://github.com/d3/d3-3.x-api-reference/blob/master/Localization.md
I think this should be an option in `superset_config.py` so that it can be optionally set for any given deployment.
As a bonus point, I think it could be neat to override locales for given metrics. This could be powerful for organisations which have data in multiple currencies. For example setting one column in yen, one in euros and one in pounds. If this is easy to implement we could just do this instead of enabling a global override locale.
## Potential implementation
For the basic implementation we would need to pass through a json object which was set in a config variable to each visualisation.
in `superset_config.py` (for UK):
```python
SUPERSET_D3_LOCALE = """
{
"decimal": ".",
"thousands": ",",
"grouping": [3],
"currency": ["?", ""],
"dateTime": "%a %e %b %X %Y",
"date": "%d/%m/%Y",
"time": "%H:%M:%S",
"periods": ["AM", "PM"],
"days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
"months": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
"shortMonths": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
} """
```
and then *somewhere* in the visualisation javascript we would call:
```javascript
// for d3 v4
d3.formatDefaultLocale(definition)
// for d4 v3
d3.locale(definition)
```
where `definition` is that JSON object which we defined in `superset.py`
### column level formatting
If we wanted to also allow column level formatting instructions then one option is allowing a JSON payload on the `SqlMetric` model (and somewhere on the druid metric too?) which was then passed to `d3.format()` as an override locale.
@mistercrunch @graceguo-supercat @xrmx - does this sound like:
a) a good idea for a feature?
b) a good idea for implementation?
c) what's the best way to pass through the global locale config to the right javascript? I assume on page load but I don't know exactly where would make the most sense. Would appreciate some guidance.
Any other feedback welcome - I'm happy to do the legwork to actually implement it because we've got enough users that would value it.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services