From 63bf3cfa0f9694c5527a34d495a423821c6fe737 Mon Sep 17 00:00:00 2001 From: lxzhangchao <1099326813@qq.com> Date: Mon, 24 Jul 2017 15:12:41 +0800 Subject: [PATCH] upgrade document Fixing the damn build (#3179) * Fixing the build * Going deeper [bugfix] only filterable columns should show up in FilterBox list (#3105) * [bugfix] only filterable columns should show up in FilterBox list * Touchups Datasource cannot be empty (#3035) add title description to model view (#3045) * add title description to model view * add missing import Add 'show/hide totals' option to pivot table vis (#3101) [bugfix] numeric value for date fields in table viz (#3036) Bug was present only when using the NOT GROUPED BY option fixes https://github.com/ApacheInfra/superset/issues/3027 fix hive.fetch_logs (#2968) add Zalando to the list of organizations (#3171) docs: fixup installation examples code indentation (#3169) [bugfix] fix bar order (#3180) [bugfix] visualize flow error: 'Metric x is not valid' (#3181) The metric name in the frontend doesn't match the one generated on the backend. It turns out the explore view will default to the first metric so specifying one isn't needed. Fix the segment interval for pulling metadata (#3174) The end of the interval would be on the truncated today date, which means that you will exclude today. If your realtime ingestion job runs shorter than a day, the metadata cannot be pulled from the druid cluster. Bump cryptography to 1.9 (#3065) As 1.7.2 doesn't compile here with openssl 1.1.0f Escaping the user's SQL in the explore view (#3186) * Escaping the user's SQL in the explore view When executing SQL from SQL Lab, we use a lower level API to the database which doesn't require escaping the SQL. When going through the explore view, the stack chain leading to the same method may need escaping depending on how the DBAPI driver is written, and that is the case for Presto (and perhaps other drivers). * Using regex to avoid doubling doubles [sqllab] improve Hive support (#3187) * [sqllab] improve Hive support * Fix "Transport not open" bug * Getting progress bar to show * Bump pyhive to 0.4.0 * Getting [Track Job] button to show * Fix testzz Add BigQuery engine specifications (#3193) As contributed by @mxmzdlv on issue #945 [bugfix] fix merge conflict that broke Hive support (#3196) Adding 'apache' to docs (#3194) [druid] Allow custom druid postaggregators (#3146) * [druid] Allow custom druid postaggregators Also, fix the postaggregation for approxHistogram quantiles so it adds the dependent field and that can show up in the graphs/tables. In general, postAggregators add significant power, we should probably support including custom postAggregators. Plywood has standard postAggregators here, and a customAggregator escape hatch that allows you to define custom postAggregators. This commit adds a similar capability for Superset and a additional field/fields/fieldName breakdown of the typical naming for dependent aggregations, which should make it significantly easier to develop approxHistogram and custom postAggregation-required dashboards. * [druid] Minor style cleanup in tests file. * [druid] Apply code review suggestions * break out CustomPostAggregator into separate class. This just cleans up the creation of the postaggregator a little bit. * minor style issues. * move the function around so the git diff is more readable add combine config for metrics in pivot table (#3086) * add combine config for metrics in pivot table * change method to stack/unstack * update backendSync Autofocus search input in VizTypeControl modal onEnter (#2929) Speed up JS build time (#3203) Also bumping a few related libs JS Translation JS translations js translation fix issue 3204 (#3205) [bugfix] capture Hive job_id pre-url transformation (#3213) js translation fix issue 3204 (#3205) [bugfix] capture Hive job_id pre-url transformation (#3213) [docs] update url in CONTRIBUTING.md (#3212) [sqllab/cosmetics] add margin-top for labels in query history (#3222) [explore] nvd3 sort values in rich tooltip (#3197) [sqllab] fix UI shows 'The query returned no results' momentarily (#3214) this is visible when running async queries between the fetching and success state as the rows are getting cached in the component [explore] DatasourceControl to pick datasource in modal (#3210) * [explore] DatasourceControl to pick datasource in modal Makes it easier to change datasource, also makes it such that the list of all datasources doesn't need to be loaded upfront. * Adding more metadata --- CONTRIBUTING.md | 16 +- README.md | 1 + babel/babel.cfg | 4 + babel/messages.pot | 3085 ++++++++++++++-- docs/conf.py | 2 +- docs/index.rst | 32 +- docs/installation.rst | 24 +- setup.py | 4 +- superset/assets/backendSync.json | 6 + superset/assets/javascripts/SqlLab/actions.js | 27 +- .../SqlLab/components/CopyQueryTabUrl.jsx | 5 +- .../SqlLab/components/HighlightedSql.jsx | 7 +- .../SqlLab/components/QueryHistory.jsx | 3 +- .../SqlLab/components/QuerySearch.jsx | 17 +- .../SqlLab/components/QueryTable.jsx | 17 +- .../SqlLab/components/ResultSet.jsx | 80 +- .../components/RunQueryActionButton.jsx | 7 +- .../SqlLab/components/SaveQuery.jsx | 17 +- .../SqlLab/components/SouthPane.jsx | 9 +- .../SqlLab/components/SqlEditor.jsx | 11 +- .../SqlLab/components/SqlEditorLeftBar.jsx | 23 +- .../SqlLab/components/TabbedSqlEditors.jsx | 13 +- .../SqlLab/components/TableElement.jsx | 17 +- .../SqlLab/components/VisualizeModal.jsx | 48 +- .../assets/javascripts/SqlLab/constants.js | 10 +- superset/assets/javascripts/SqlLab/index.jsx | 2 +- superset/assets/javascripts/SqlLab/main.css | 2 +- .../assets/javascripts/SqlLab/reducers.js | 25 +- .../addSlice/AddSliceContainer.jsx | 13 +- .../javascripts/components/AsyncSelect.jsx | 3 +- .../javascripts/components/CachedLabel.jsx | 7 +- .../components/CopyToClipboard.jsx | 9 +- .../javascripts/components/EditableTitle.jsx | 5 +- .../javascripts/components/FaveStar.jsx | 3 +- .../components/InfoTooltipWithTrigger.jsx | 9 +- .../javascripts/dashboard/Dashboard.jsx | 17 +- .../dashboard/components/CodeModal.jsx | 3 +- .../dashboard/components/Controls.jsx | 7 +- .../dashboard/components/CssEditor.jsx | 9 +- .../components/RefreshIntervalModal.jsx | 15 +- .../dashboard/components/SaveModal.jsx | 19 +- .../dashboard/components/SliceAdder.jsx | 13 +- .../dashboard/components/SliceCell.jsx | 14 +- .../explore/actions/exploreActions.js | 38 - .../explore/components/ChartContainer.jsx | 5 +- .../explore/components/Control.jsx | 6 +- .../explore/components/ControlHeader.jsx | 3 +- .../components/ControlPanelsContainer.jsx | 12 +- .../explore/components/DisplayQueryButton.jsx | 5 +- .../explore/components/EmbedCodeButton.jsx | 7 +- .../components/ExploreActionButtons.jsx | 5 +- .../components/ExploreViewContainer.jsx | 3 - .../explore/components/SaveModal.jsx | 2 +- .../explore/components/URLShortLinkButton.jsx | 5 +- .../components/controls/BoundsControl.jsx | 9 +- .../components/controls/DatasourceControl.jsx | 157 + .../explore/components/controls/Filter.jsx | 7 +- .../components/controls/FilterControl.jsx | 3 +- .../components/controls/SelectControl.jsx | 6 +- .../components/controls/TextAreaControl.jsx | 5 +- .../components/controls/VizTypeControl.jsx | 44 +- superset/assets/javascripts/explore/index.jsx | 1 + .../explore/reducers/exploreReducer.js | 38 +- .../javascripts/explore/stores/controls.jsx | 546 +-- .../javascripts/explore/stores/visTypes.js | 298 +- .../assets/javascripts/modules/superset.js | 15 +- superset/assets/javascripts/modules/utils.js | 14 +- .../javascripts/profile/components/App.jsx | 9 +- .../profile/components/CreatedContent.jsx | 9 +- .../profile/components/Favorites.jsx | 9 +- .../profile/components/Security.jsx | 7 +- .../profile/components/UserInfo.jsx | 7 +- superset/assets/javascripts/translations.jsx | 18 +- superset/assets/package.json | 19 +- .../components/DatasourceControl_spec.jsx | 32 + .../explore/exploreActions_spec.js | 38 - .../reactable-pagination.css | 0 superset/assets/stylesheets/superset.css | 5 +- superset/assets/visualizations/EventFlow.jsx | 3 +- superset/assets/visualizations/filter_box.jsx | 3 +- superset/assets/visualizations/nvd3_vis.js | 31 +- superset/assets/visualizations/treemap.js | 2 +- superset/assets/webpack.config.js | 21 +- superset/config.py | 7 +- superset/connectors/base/models.py | 28 +- superset/connectors/druid/models.py | 135 +- superset/connectors/druid/views.py | 24 + superset/connectors/sqla/models.py | 20 +- superset/connectors/sqla/views.py | 18 + superset/db_engine_specs.py | 144 +- superset/db_engines/hive.py | 14 +- .../versions/ca69c70ec99b_tracking_url.py | 23 + superset/models/sql_lab.py | 2 + superset/sql_lab.py | 6 +- superset/translations/catalogs.json | 9 - .../translations/en/LC_MESSAGES/messages.mo | Bin 17221 -> 58907 bytes .../translations/en/LC_MESSAGES/messages.po | 3085 ++++++++++++++-- .../translations/es/LC_MESSAGES/messages.mo | Bin 17221 -> 58907 bytes .../translations/es/LC_MESSAGES/messages.po | 3085 ++++++++++++++-- .../translations/fr/LC_MESSAGES/messages.mo | Bin 17220 -> 58906 bytes .../translations/fr/LC_MESSAGES/messages.po | 3085 ++++++++++++++-- .../translations/it/LC_MESSAGES/messages.mo | Bin 18023 -> 59709 bytes .../translations/it/LC_MESSAGES/messages.po | 3075 ++++++++++++++-- .../translations/zh/LC_MESSAGES/messages.mo | Bin 16624 -> 54463 bytes .../translations/zh/LC_MESSAGES/messages.po | 3195 ++++++++++++++--- superset/views/core.py | 24 +- superset/views/sql_lab.py | 7 + superset/viz.py | 11 +- tests/db_engine_specs_test.py | 40 +- tests/druid_tests.py | 77 +- tests/sqllab_tests.py | 5 +- 111 files changed, 18020 insertions(+), 3206 deletions(-) create mode 100644 superset/assets/javascripts/explore/components/controls/DatasourceControl.jsx create mode 100644 superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx rename superset/assets/{javascripts/SqlLab => stylesheets}/reactable-pagination.css (100%) create mode 100644 superset/migrations/versions/ca69c70ec99b_tracking_url.py delete mode 100644 superset/translations/catalogs.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cd45739c031e4..9175ec520947f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -70,7 +70,7 @@ meets these guidelines: ## Documentation -The latest documentation and tutorial are available [here](http://airbnb.io/superset). +The latest documentation and tutorial are available [here](https://superset.incubator.apache.org/). Contributing to the official documentation is relatively easy, once you've setup your environment and done an edit end-to-end. The docs can be found in the @@ -144,7 +144,7 @@ referenced in the rst, e.g. aren't actually included in that directory. _Instead_, you'll want to add and commit images (and any other static assets) to the _superset/assets/images_ directory. -When the docs are being pushed to [airbnb.io](http://airbnb.io/superset/), images +When the docs are being pushed to [Apache Superset (incubating)](https://superset.incubator.apache.org/), images will be moved from there to the _\_static/img_ directory, just like they're referenced in the docs. @@ -161,12 +161,12 @@ instead. ## Setting up a Python development environment -Check the [OS dependencies](http://airbnb.io/superset/installation.html#os-dependencies) before follows these steps. +Check the [OS dependencies](https://superset.incubator.apache.org/installation.html#os-dependencies) before follows these steps. # fork the repo on GitHub and then clone it # alternatively you may want to clone the main repo but that won't work # so well if you are planning on sending PRs - # git clone git@github.com:airbnb/superset.git + # git clone git@github.com:apache/incubator-superset.git # [optional] setup a virtual env and activate it virtualenv env @@ -331,6 +331,8 @@ key is to instrument the strings that need translation using a module, all you have to do is to `_("Wrap your strings")` using the underscore `_` "function". +We use `import {t, tn, TCT} from locales;` in js, JSX file, locales is in `./superset/assets/javascripts/` directory. + To enable changing language in your environment, you can simply add the `LANGUAGES` parameter to your `superset_config.py`. Having more than one options here will add a language selection dropdown on the right side of the @@ -342,6 +344,10 @@ navigation bar. 'zh': {'flag': 'cn', 'name': 'Chinese'}, } +We need to extract the string to be translated, run the following command: + + pybabel extract -F ./babel/babel.cfg -k _ -k __ -k t -k tn -k tct -o ./babel/messages.pot . + As per the [Flask AppBuilder documentation] about translation, to create a new language dictionary, run the following command: @@ -379,4 +385,4 @@ to take effect, they need to be compiled using this command: Here's an example as a Github PR with comments that describe what the different sections of the code do: -https://github.com/airbnb/superset/pull/3013 +https://github.com/apache/incubator-superset/pull/3013 diff --git a/README.md b/README.md index 11b66752de4dc..d508f9e6baea3 100644 --- a/README.md +++ b/README.md @@ -186,3 +186,4 @@ the world know they are using Superset. Join our growing community! - [Tooploox](https://www.tooploox.com/) - [Udemy](https://www.udemy.com/) - [Yahoo!](www.yahoo.com) + - [Zalando](https://www.zalando.com) diff --git a/babel/babel.cfg b/babel/babel.cfg index 790b262731b74..762ac64e77c96 100644 --- a/babel/babel.cfg +++ b/babel/babel.cfg @@ -1,4 +1,8 @@ [ignore: superset/assets/node_modules/**] [python: superset/**.py] [jinja2: superset/**/templates/**.html] +[javascript: superset/assets/javascripts/**.js] +[javascript: superset/assets/javascripts/**.jsx] +[javascript: superset/assets/visualizations/**.js] +[javascript: superset/assets/visualizations/**.jsx] encoding = utf-8 diff --git a/babel/messages.pot b/babel/messages.pot index 41851e382ad0b..6011b36ff5d51 100755 --- a/babel/messages.pot +++ b/babel/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-06-19 23:49+0800\n" +"POT-Creation-Date: 2017-07-31 11:46+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,342 +17,2701 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:225 -#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:317 -#: superset/db_engine_specs.py:362 superset/db_engine_specs.py:770 -#: superset/db_engine_specs.py:806 superset/db_engine_specs.py:838 -#: superset/db_engine_specs.py:884 +#: superset/assets/javascripts/explore/stores/controls.jsx:491 +#: superset/db_engine_specs.py:192 superset/db_engine_specs.py:223 +#: superset/db_engine_specs.py:267 superset/db_engine_specs.py:315 +#: superset/db_engine_specs.py:360 superset/db_engine_specs.py:810 +#: superset/db_engine_specs.py:846 superset/db_engine_specs.py:878 +#: superset/db_engine_specs.py:924 superset/db_engine_specs.py:961 msgid "Time Column" msgstr "" -#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:226 -#: superset/db_engine_specs.py:318 superset/db_engine_specs.py:363 -#: superset/db_engine_specs.py:771 superset/db_engine_specs.py:839 +#: superset/db_engine_specs.py:193 superset/db_engine_specs.py:224 +#: superset/db_engine_specs.py:316 superset/db_engine_specs.py:361 +#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:879 +#: superset/db_engine_specs.py:962 msgid "second" msgstr "" -#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:229 -#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 -#: superset/db_engine_specs.py:773 superset/db_engine_specs.py:807 -#: superset/db_engine_specs.py:841 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:227 +#: superset/db_engine_specs.py:319 superset/db_engine_specs.py:363 +#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:881 superset/db_engine_specs.py:925 +#: superset/db_engine_specs.py:963 msgid "minute" msgstr "" -#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:233 -#: superset/db_engine_specs.py:323 superset/db_engine_specs.py:367 -#: superset/db_engine_specs.py:779 superset/db_engine_specs.py:809 -#: superset/db_engine_specs.py:843 superset/db_engine_specs.py:891 -msgid "hour" +#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:231 +#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 +#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:849 +#: superset/db_engine_specs.py:883 superset/db_engine_specs.py:931 +#: superset/db_engine_specs.py:964 +msgid "hour" +msgstr "" + +#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:236 +#: superset/db_engine_specs.py:268 superset/db_engine_specs.py:323 +#: superset/db_engine_specs.py:367 superset/db_engine_specs.py:821 +#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:933 superset/db_engine_specs.py:965 +msgid "day" +msgstr "" + +#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:242 +#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:324 +#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:823 +#: superset/db_engine_specs.py:853 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:966 +msgid "week" +msgstr "" + +#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:244 +#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 +#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:825 +#: superset/db_engine_specs.py:855 superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:935 superset/db_engine_specs.py:967 +msgid "month" +msgstr "" + +#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:246 +#: superset/db_engine_specs.py:328 superset/db_engine_specs.py:373 +#: superset/db_engine_specs.py:827 superset/db_engine_specs.py:857 +#: superset/db_engine_specs.py:891 superset/db_engine_specs.py:937 +#: superset/db_engine_specs.py:968 +msgid "quarter" +msgstr "" + +#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:250 +#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:829 +#: superset/db_engine_specs.py:859 superset/db_engine_specs.py:939 +#: superset/db_engine_specs.py:969 +msgid "year" +msgstr "" + +#: superset/db_engine_specs.py:332 +msgid "week_start_monday" +msgstr "" + +#: superset/db_engine_specs.py:375 superset/db_engine_specs.py:893 +msgid "week_ending_saturday" +msgstr "" + +#: superset/db_engine_specs.py:378 superset/db_engine_specs.py:896 +msgid "week_start_sunday" +msgstr "" + +#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:927 +msgid "5 minute" +msgstr "" + +#: superset/db_engine_specs.py:817 +msgid "half hour" +msgstr "" + +#: superset/db_engine_specs.py:929 +msgid "10 minute" +msgstr "" + +#: superset/utils.py:472 +#, python-format +msgid "[Superset] Access to the datasource %(name)s was granted" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:283 +#: superset/viz.py:312 +msgid "Table View" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:334 +#: superset/viz.py:368 +msgid "Pivot Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:321 +#: superset/viz.py:423 +msgid "Markup" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:348 +#: superset/viz.py:442 +msgid "Separator" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:369 +#: superset/viz.py:458 +msgid "Word Cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:383 +#: superset/viz.py:481 +msgid "Treemap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:403 +#: superset/viz.py:507 +msgid "Calendar Heatmap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:418 +#: superset/viz.py:565 +msgid "Box Plot" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:437 +#: superset/viz.py:654 +msgid "Bubble Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:481 +#: superset/viz.py:704 +msgid "Bullet Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:497 +#: superset/viz.py:753 +msgid "Big Number with Trendline" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:516 +#: superset/viz.py:782 +msgid "Big Number" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:21 +#: superset/assets/javascripts/explore/stores/visTypes.js:127 +#: superset/viz.py:809 +msgid "Time Series - Line Chart" +msgstr "" + +#: superset/viz.py:936 +msgid "Time Series - Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:22 +#: superset/assets/javascripts/explore/stores/visTypes.js:197 +#: superset/viz.py:1011 +msgid "Time Series - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:230 +#: superset/viz.py:1019 +msgid "Time Series - Percent Change" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:251 +#: superset/viz.py:1027 +msgid "Time Series - Stacked" +msgstr "" + +#: superset/viz.py:1036 +msgid "Distribution - NVD3 - Pie Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:535 +#: superset/viz.py:1054 +msgid "Histogram" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:19 +#: superset/assets/javascripts/explore/stores/visTypes.js:81 +#: superset/viz.py:1079 +msgid "Distribution - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:565 +#: superset/viz.py:1146 +msgid "Sunburst" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:595 +#: superset/viz.py:1179 +msgid "Sankey" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:615 +#: superset/viz.py:1228 superset/viz.py:1249 +msgid "Directed Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:672 +#: superset/viz.py:1282 +msgid "Country Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:696 +#: superset/viz.py:1311 +msgid "World Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:63 +#: superset/viz.py:1361 +msgid "Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:758 +#: superset/viz.py:1396 +msgid "iFrame" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:770 +#: superset/viz.py:1413 +msgid "Parallel Coordinates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:786 +#: superset/viz.py:1438 +msgid "Heatmap" +msgstr "" + +#: superset/viz.py:1489 +msgid "Horizon Charts" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:830 +#: superset/viz.py:1500 +msgid "Mapbox" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:900 +#: superset/viz.py:1603 +msgid "Event flow" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:55 +msgid "Your query was saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:56 +msgid "Your query could not be saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:109 +msgid "Failed at retrieving results from the results backend" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:155 +msgid "Could not connect to server" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:160 +msgid "Your session timed out, please refresh your page and try again." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:179 +msgid "Query was stopped." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:182 +msgid "Failed at stopping query." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:295 +#: superset/assets/javascripts/SqlLab/actions.js:308 +msgid "Error occurred while fetching table metadata" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:358 +msgid "shared query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:366 +#: superset/assets/javascripts/SqlLab/actions.js:386 +msgid "The query couldn't be loaded" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:419 +msgid "An error occurred while creating the data source" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:29 +msgid "Pick a chart type!" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:30 +msgid "To use this chart type you need at least one column flagged as a date" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:31 +msgid "To use this chart type you need at least one dimension" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:32 +msgid "To use this chart type you need at least one aggregation function" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:49 +#: superset/assets/javascripts/SqlLab/reducers.js:11 +msgid "Untitled Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/reducers.js:44 +#, python-format +msgid "Copy of %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:30 +msgid "share query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:33 +msgid "copy URL to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:56 +msgid "Raw SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:66 +msgid "Source SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:78 +#: superset/assets/javascripts/explore/stores/visTypes.js:31 +msgid "SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryHistory.jsx:28 +msgid "No query history yet..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:106 +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:66 +msgid "It seems you don't have access to any database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:154 +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:90 +msgid "Search Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:160 +msgid "[From]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:171 +msgid "[To]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:181 +msgid "[Query Status]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:190 +msgid "Search" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:114 +msgid "Open in SQL Editor" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:133 +msgid "view results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:136 +msgid "Data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:176 +msgid "Visualize the data out of this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:182 +msgid "Overwrite text in editor with a query on this table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:188 +msgid "Run query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:193 +msgid "Remove query from log" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:68 +msgid ".CSV" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:79 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:235 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:274 +msgid "Visualize" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:151 +msgid "Query was stopped" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +#: superset/connectors/sqla/views.py:86 superset/connectors/sqla/views.py:135 +#: superset/connectors/sqla/views.py:213 superset/views/core.py:375 +msgid "Table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +msgid "was created" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:201 +msgid "Query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:240 +msgid "Fetch data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:244 +msgid "The query returned no data" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Selected Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:22 +msgid "Run query asynchronously" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:56 +msgid "Stop" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:16 +msgid "Undefined" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:66 +msgid "Label" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:71 +msgid "Label for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:81 +#: superset/connectors/druid/views.py:107 +#: superset/connectors/druid/views.py:229 superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:131 superset/views/core.py:369 +msgid "Description" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:85 +msgid "Write a description for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:99 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:139 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 +msgid "Save" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:102 +#: superset/templates/superset/request_access.html:16 +msgid "Cancel" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:123 +msgid "Save Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:80 +msgid "Run a query to display results here" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:85 +#, python-format +msgid "Preview for %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:109 +msgid "Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:115 +msgid "Query History" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:112 +#, python-format +msgid "" +"It appears that the number of rows in the query results displayed was " +"limited on the server side to the %s limit." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:123 +msgid "Create table as with query results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:131 +msgid "new table name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:90 +msgid "Error while fetching table list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:131 +msgid "Error while fetching schema list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:153 +msgid "Error while fetching database list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:159 +msgid "Database:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:163 +msgid "Select a database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:170 +#, python-format +msgid "Select a schema (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:175 +msgid "Schema:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:190 +#, python-format +msgid "Add a table (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:203 +msgid "Type to search ..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:226 +msgid "Reset State" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:105 +msgid "Enter a new title for the tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:124 +#, python-format +msgid "Untitled Query %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:170 +msgid "close tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:173 +msgid "rename tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "expand tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "hide tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:75 +msgid "Copy partition query to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:94 +msgid "latest partition:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:110 +msgid "Keys for table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:119 +#, python-format +msgid "View keys & indexes (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:135 +msgid "Sort columns alphabetically" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:136 +msgid "Original table column order" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:146 +msgid "Copy SELECT statement to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:152 +msgid "Remove table preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:20 +#: superset/assets/javascripts/explore/stores/visTypes.js:111 +msgid "Pie Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:85 +#, python-format +msgid "%s is not right as a column name, please alias it (as in SELECT count(*) " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "AS my_alias" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "using only alphanumeric characters and underscores" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:136 +#, python-format +msgid "This query took %s seconds to run," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:137 +#, python-format +msgid "and the explore view times out at %s seconds," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:138 +msgid "" +"following this flow will most likely lead to your query timing out.We " +"recommend your summarize your data further before following that flow.If " +"activated you can use the " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:140 +msgid "featureto store a summarized data set that you can then explore." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:160 +msgid "Creating a data source and popping a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:190 +msgid "No results available for this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:242 +msgid "Chart Type" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:245 +msgid "[Chart Type]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:253 +msgid "Datasource Name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:257 +msgid "datasource name" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:54 +msgid "Create a new slice" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:59 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:65 +msgid "Choose a datasource" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:71 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:77 +msgid "Choose a visualization type" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:87 +msgid "Create new slice" +msgstr "" + +#: superset/assets/javascripts/components/AsyncSelect.jsx:20 +msgid "Select ..." +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:26 +msgid "Loaded data cached" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:28 +msgid "Loaded from cache" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:33 +msgid "Click to force-refresh" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:21 +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:67 +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:37 +msgid "Copy to clipboard" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:65 +msgid "Not successful" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:68 +msgid "Sorry, your browser does not support copying. Use Ctrl / Cmd + C!" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:79 +msgid "Copied!" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:12 +#: superset/views/core.py:470 superset/views/core.py:537 +msgid "Title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "click to edit title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "You don't have the rights to alter this title." +msgstr "" + +#: superset/assets/javascripts/components/FaveStar.jsx:32 +#: superset/assets/javascripts/modules/superset.js:33 +msgid "Click to favorite/unfavorite" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:36 +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "You have unsaved changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "Click the" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:55 +msgid "button on the top right to save your changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:158 +#, python-format +msgid "Served from data cached %s . Click to force refresh." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:163 +msgid "Click to force refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:337 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:93 +msgid "Error" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:338 +#, python-format +msgid "Sorry, there was an error adding slices to this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CodeModal.jsx:35 +msgid "Active Dashboard Filters" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:48 +#, python-format +msgid "Checkout this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:54 +msgid "Force refresh the whole dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:94 +msgid "Edit this dashboard's properties" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:65 +msgid "Load a template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:68 +msgid "Load a CSS template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:80 +#: superset/views/core.py:477 +msgid "CSS" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:86 +msgid "Live CSS Editor" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:19 +msgid "Don't refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:20 +msgid "10 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:21 +msgid "30 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:22 +msgid "1 minute" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:23 +msgid "5 minutes" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:38 +msgid "Refresh Interval" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:41 +msgid "Choose the refresh frequency for this dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:58 +msgid "This dashboard was saved successfully." +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:64 +msgid "Sorry, there was an error saving this dashboard: " +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:94 +msgid "You must pick a name for the new dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:108 +msgid "Save Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:116 +#, python-format +msgid "Overwrite Dashboard [%s]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:123 +msgid "Save as:" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:127 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 +msgid "[dashboard name]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:137 +#: superset/views/core.py:374 +msgid "Name" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:143 +msgid "Viz" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:152 +#: superset/views/core.py:475 superset/views/core.py:539 +msgid "Modified" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:162 +msgid "Add Slices" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:171 +msgid "Add a new slice to the dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:175 +msgid "Add Slices to Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:23 +msgid "Move chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:26 +msgid "Force refresh data" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:30 +msgid "Toggle chart description" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:40 +msgid "Edit chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:45 +msgid "Explore chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:50 +msgid "Remove chart from dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:170 +#, python-format +msgid "%s - untitled" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:276 +msgid "Edit slice properties" +msgstr "" + +#: superset/assets/javascripts/explore/components/ControlHeader.jsx:60 +msgid "Takes effect on chart immediatly" +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:56 +msgid "Error..." +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:92 +msgid "Query" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:76 +msgid "Height" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:90 +msgid "Width" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:32 +msgid "Export to .json" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:42 +msgid "Export to .csv format" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 +msgid "Please enter a slice name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 +msgid "Please select a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 +msgid "Please enter a dashboard name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 +msgid "Save A Slice" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 +#, python-format +msgid "Overwrite slice %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 +msgid "Save as" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 +msgid "[slice name]" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 +msgid "Do not add to a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 +msgid "Add slice to existing dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 +msgid "Add to new dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 +msgid "Save & go to dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:32 +#, python-format +msgid "Check out this slice: %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:55 +msgid "`Min` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:58 +msgid "`Max` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:75 +#: superset/connectors/druid/views.py:50 superset/connectors/sqla/views.py:89 +msgid "Min" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:83 +#: superset/connectors/druid/views.py:51 superset/connectors/sqla/views.py:90 +msgid "Max" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:118 +msgid "Filter value" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select metric" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select column" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:159 +msgid "Select operator" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/FilterControl.jsx:70 +msgid "Add Filter" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/SelectControl.jsx:106 +#, python-format +msgid "Select %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:62 +msgid "textarea" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "Edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "in modal" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:90 +#: superset/assets/javascripts/explore/stores/controls.jsx:46 +msgid "edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:104 +msgid "Select a visualization type" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:114 +msgid "Search / Filter" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:61 +#, python-format +msgid "fetching dashboards failed for %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:100 +msgid "Updating chart was stopped" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:106 +#: superset/assets/javascripts/modules/superset.js:220 +#, python-format +msgid "An error occurred while rendering the visualization: %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:117 +msgid "Query timeout" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:118 +#, python-format +msgid "- visualization query are set to timeout at %s seconds. " +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:119 +msgid "" +"Perhaps your data has grown, your database is under unusual load, or you " +"are simply querying a data source that is to large to be processed within" +" the timeout range. If that is the case, we recommend that you summarize " +"your data further." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:127 +msgid "Network error." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:150 +msgid "Failed to save slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:35 +#: superset/connectors/druid/views.py:45 superset/views/core.py:313 +#: superset/views/core.py:368 +msgid "Datasource" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:55 +#: superset/views/core.py:376 +msgid "Visualization Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:57 +msgid "The type of visualization to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:63 +msgid "Metrics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:72 +#: superset/assets/javascripts/explore/stores/controls.jsx:90 +msgid "One or many metrics to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:79 +msgid "" +"Bounds for the Y axis. When left empty, the bounds are dynamically " +"defined based on the min/max of the data. Note that this feature will " +"only expand the axis range. It won't narrow the data's extent." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:88 +msgid "Ordering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:100 +msgid "Choose the metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:113 +msgid "Right Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:117 +msgid "Choose a metric for right axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:128 +msgid "Stacked Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:140 +msgid "Linear Color Scheme" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:153 +msgid "Normalize Across" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:160 +msgid "" +"Color will be rendered based on a ratio of the cell against the sum of " +"across this criteria" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:167 +msgid "Horizon Color Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:174 +msgid "Defines how the color are attributed." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:179 +msgid "Rendering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:185 +msgid "" +"image-rendering CSS attribute of the canvas object that defines how the " +"browser scales up the image" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:191 +msgid "XScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:194 +msgid "Number of steps to take between ticks when displaying the X scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:200 +msgid "YScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:203 +msgid "Number of steps to take between ticks when displaying the Y scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:209 +msgid "Include Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:210 +msgid "Whether to include the time granularity as defined in the time section" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:216 +msgid "Stacked Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:232 +msgid "Show Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:235 +msgid "Show data points as circle markers on the lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:240 +msgid "Bar Values" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:248 +msgid "Sort Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:250 +msgid "Sort bars by x labels." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:263 +msgid "Extra Controls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:266 +msgid "" +"Whether to show extra controls or not. Extra controls include things like" +" making mulitBar charts stacked or side by side." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:273 +msgid "Reduce X ticks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:276 +msgid "" +"Reduces the number of X axis ticks to be rendered. If true, the x axis " +"wont overflow and labels may be missing. If false, a minimum width will " +"be applied to columns and the width may overflow into an horizontal " +"scroll." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:285 +msgid "Include Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:288 +msgid "Include series name as an axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:293 +msgid "Color Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:295 +msgid "A metric to use for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:302 +msgid "Country Name" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:321 +msgid "The name of country that Superset should display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:325 +msgid "Country Field Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:333 +msgid "" +"The country code standard that Superset should expect to find in the " +"[country] column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:340 +msgid "Group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:342 +msgid "One or many controls to group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:354 +#: superset/assets/javascripts/explore/stores/controls.jsx:368 +msgid "Columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:370 +#: superset/assets/javascripts/explore/stores/controls.jsx:380 +#: superset/assets/javascripts/explore/stores/controls.jsx:390 +msgid "Columns to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:378 +msgid "X" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:388 +msgid "Y" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:399 +msgid "Origin" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:405 +msgid "" +"Defines the origin where time buckets start, accepts natural dates as in " +"`now`, `sunday` or `1970-01-01`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:415 +msgid "Bottom marging, in pixels, allowing for more room for axis labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:421 +msgid "Time Granularity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:438 +msgid "" +"The time granularity for the visualization. Note that you can type and " +"use simple natural language as in `10 seconds`, `1 day` or `56 weeks`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:445 +msgid "Domain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:448 +msgid "The time unit used for the grouping of blocks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:453 +msgid "Subdomain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:456 +msgid "" +"The time unit for each block. Should be a smaller unit than " +"domain_granularity. Should be larger or equal to Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:463 +msgid "Link Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:466 +msgid "Link length in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:472 +msgid "Charge" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:486 +msgid "Charge in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:494 +msgid "" +"The time column for the visualization. Note that you can define arbitrary" +" expression that return a DATETIME column in the table or. Also note that" +" the filter below is applied against this column or expression" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:506 +msgid "Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:508 +msgid "" +"The time granularity for the visualization. This applies a date " +"transformation to alter your time column and defines a new time " +"granularity. The options here are defined on a per database engine basis " +"in the Superset source code." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:521 +msgid "Resample Rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:524 +msgid "Pandas resample rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:530 +msgid "Resample How" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:533 +msgid "Pandas resample how" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:539 +msgid "Resample Fill Method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:542 +msgid "Pandas resample fill method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:548 +msgid "Since" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:560 +msgid "" +"Timestamp from filter. This supports free form typing and natural " +"language as in `1 day ago`, `28 days` or `3 years`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:567 +msgid "Until" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:582 +msgid "Max Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:590 +msgid "Whisker/outlier options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:592 +msgid "Determines how whiskers and outliers are calculated." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:603 +msgid "Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:606 +msgid "Target aspect ratio for treemap tiles." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:612 +#: superset/assets/javascripts/explore/stores/visTypes.js:510 +#: superset/assets/javascripts/explore/stores/visTypes.js:529 +#: superset/assets/javascripts/explore/stores/visTypes.js:654 +msgid "Number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:622 +msgid "Row limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:630 +msgid "Series limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:633 +msgid "Limits the number of time series that get displayed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:638 +msgid "Sort By" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:640 +msgid "Metric used to define the top series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:648 +msgid "Rolling" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:651 +msgid "" +"Defines a rolling window function to apply, works along with the " +"[Periods] text box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:657 +msgid "Periods" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:659 +msgid "" +"Defines the size of the rolling window function, relative to the time " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:665 +#: superset/assets/javascripts/explore/stores/visTypes.js:101 +msgid "Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:667 +msgid "" +"Defines the grouping of entities. Each series is shown as a specific " +"color on the chart and has a legend toggle" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:677 +msgid "Entity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:680 +msgid "This defines the element to be plotted on the chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:688 +#: superset/assets/javascripts/explore/stores/visTypes.js:459 +msgid "X Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:689 +msgid "Metric assigned to the [X] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:702 +#: superset/assets/javascripts/explore/stores/visTypes.js:466 +msgid "Y Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:705 +msgid "Metric assigned to the [Y] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:716 +msgid "Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:729 +msgid "URL" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:730 +msgid "" +"The URL, this control is templated, so you can integrate {{ width }} " +"and/or {{ height }} in your URL string." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:737 +msgid "X Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:744 +msgid "Y Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:751 +msgid "Custom WHERE clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:753 +msgid "" +"The text in this box gets included in your query's WHERE clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:761 +msgid "Custom HAVING clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:763 +msgid "" +"The text in this box gets included in your query's HAVING clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:771 +msgid "Comparison Period Lag" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:773 +msgid "Based on granularity, number of time periods to compare against" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:778 +msgid "Comparison suffix" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:779 +msgid "Suffix to apply after the percentage display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:785 +msgid "Table Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:790 +msgid "Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:796 +msgid "Series Height" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:799 +msgid "Pixel height of each series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:805 +msgid "Page Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:808 +msgid "Rows per page, 0 means no pagination" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:814 +#: superset/assets/javascripts/explore/stores/controls.jsx:824 +msgid "X Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:834 +msgid "Y Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:844 +msgid "Right Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:852 +msgid "Markup Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:857 +msgid "Pick your favorite markup language" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:862 +msgid "Rotation" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:865 +msgid "Rotation to apply to words in the cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:870 +msgid "Line Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:875 +msgid "Line interpolation as defined by d3.js" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:880 +msgid "Label Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:887 +msgid "What should be shown on the label?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:892 +msgid "Code" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:893 +msgid "Put your code here" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:902 +msgid "Aggregation function" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:914 +msgid "" +"Aggregate function to apply when pivoting and computing the total rows " +"and columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:921 +msgid "Font Size From" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:923 +msgid "Font size for the smallest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:929 +msgid "Font Size To" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:931 +msgid "Font size for the biggest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:936 +msgid "Instant Filtering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:940 +msgid "" +"Whether to apply filters as they change, or wait forusers to hit an " +"[Apply] button" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:947 +msgid "Range Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:950 +msgid "Whether to display the time range interactive selector" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:955 +msgid "Date Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:957 +msgid "Whether to include a time filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:962 +msgid "Data Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:964 +msgid "Whether to display the interactive data table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:969 +msgid "Search Box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:972 +msgid "Whether to include a client side search box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:977 +msgid "Table Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:979 +msgid "Whether to apply filter when table cell is clicked" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:984 +msgid "Show Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:987 +msgid "Whether to display bubbles on top of countries" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:992 +msgid "Legend" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:995 +msgid "Whether to display the legend (toggles)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1000 +msgid "X bounds" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1003 +msgid "Whether to display the min and max values of the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1008 +msgid "Rich Tooltip" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1011 +msgid "The rich tooltip shows a list of all series for that point in time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1017 +msgid "Y Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1020 +msgid "Use a log scale for the Y axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1025 +msgid "X Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1028 +msgid "Use a log scale for the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1033 +msgid "Donut" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1036 +msgid "Do you want a donut or a pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1041 +msgid "Put labels outside" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1044 +msgid "Put the labels outside the pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1049 +msgid "Contribution" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1051 +msgid "Compute the contribution to the total" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1056 +msgid "Period Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1059 +msgid "" +"[integer] Number of period to compare against, this is relative to the " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1065 +msgid "Period Ratio Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1068 +msgid "" +"`factor` means (new/previous), `growth` is ((new/previous) - 1), `value` " +"is (new-previous)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1074 +msgid "Time Shift" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1076 +msgid "" +"Overlay a timeseries from a relative time period. Expects relative time " +"delta in natural language (example: 24 hours, 7 days, 56 weeks, 365 " +"days)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1084 +msgid "Subheader" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1085 +msgid "Description text that shows up below your Big Number" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1091 +msgid "label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1093 +msgid "" +"`count` is COUNT(*) if a group by is used. Numerical columns will be " +"aggregated with the aggregator. Non-numerical columns will be used to " +"label points. Leave empty to get a count of points in each cluster." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1104 +msgid "Map Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1114 +msgid "Base layer map style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1120 +msgid "Clustering Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1133 +msgid "" +"The radius (in pixels) the algorithm uses to define a cluster. Choose 0 " +"to turn off clustering, but beware that a large number of points (>1000) " +"will cause lag." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1140 +msgid "Point Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1142 +msgid "" +"The radius of individual points (ones that are not in a cluster). Either " +"a numerical column or `Auto`, which scales the point based on the largest" +" cluster" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1152 +msgid "Point Radius Unit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1155 +msgid "The unit of measure for the specified point radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1160 +msgid "Opacity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1163 +msgid "Opacity of all clusters, points, and labels. Between 0 and 1." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1169 +msgid "Zoom" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1172 +msgid "Zoom level of the map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1178 +msgid "Default latitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1181 +msgid "Latitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1187 +msgid "Default longitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1190 +msgid "Longitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1196 +msgid "Live render" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1198 +msgid "Points and clusters will update as viewport is being changed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1204 +msgid "RGB Color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1214 +msgid "The color for points and clusters in RGB" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1219 +msgid "Ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1221 +msgid "Ranges to highlight with shading" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1226 +msgid "Range labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1228 +msgid "Labels for the ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1233 +msgid "Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1235 +msgid "List of values to mark with triangles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1240 +msgid "Marker labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1242 +msgid "Labels for the markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1247 +msgid "Marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1249 +msgid "List of values to mark with lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1254 +msgid "Marker line labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1256 +msgid "Labels for the marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1283 +msgid "Slice ID" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1285 +msgid "The id of the active slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1290 +msgid "Cache Timeout (seconds)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1292 +msgid "The number of seconds before expiring the cache" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1297 +msgid "Order by entity id" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1298 +msgid "" +"Important! Select this if the table is not already sorted by entity id, " +"else there is no guarantee that all events for each entity are returned." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1306 +msgid "Minimum leaf node event count" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1309 +msgid "" +"Leaf nodes that represent fewer than this number of events will be " +"initially hidden in the visualization" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:7 +#: superset/assets/javascripts/explore/stores/visTypes.js:23 +msgid "Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:8 +#: superset/assets/javascripts/explore/stores/visTypes.js:24 +msgid "Time related form attributes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:15 +msgid "Datasource & Chart Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:36 +msgid "This section exposes ways to include snippets of SQL in your query" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:48 +msgid "Advanced Analytics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:49 +msgid "" +"This section contains options that allow for advanced analytical post " +"processing of query results" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:64 +msgid "" +"Filters are defined using comma delimited strings as in " +"Leave the value control empty to filter empty strings or " +"nullsFor filters with comma in values, wrap them in single quotesas in " +"" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:71 +msgid "Result Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:72 +msgid "" +"The filters to apply after post-aggregation.Leave the value control empty" +" to filter empty strings or nulls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:84 +#: superset/assets/javascripts/explore/stores/visTypes.js:132 +#: superset/assets/javascripts/explore/stores/visTypes.js:163 +#: superset/assets/javascripts/explore/stores/visTypes.js:202 +#: superset/assets/javascripts/explore/stores/visTypes.js:235 +#: superset/assets/javascripts/explore/stores/visTypes.js:256 +#: superset/assets/javascripts/explore/stores/visTypes.js:393 +#: superset/assets/javascripts/explore/stores/visTypes.js:428 +#: superset/assets/javascripts/explore/stores/visTypes.js:447 +#: superset/assets/javascripts/explore/stores/visTypes.js:821 +msgid "Chart Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:104 +msgid "Breakdowns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:105 +msgid "Defines how each series is broken down" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:141 +#: superset/assets/javascripts/explore/stores/visTypes.js:211 +#: superset/assets/javascripts/explore/stores/visTypes.js:265 +msgid "Axes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:159 +msgid "Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:169 +msgid "Y Axis 1" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:175 +msgid "Y Axis 2" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:183 +msgid "Left Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:184 +msgid "Choose a metric for left axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:187 +msgid "Left Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:286 +msgid "GROUP BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:287 +msgid "Use this section if you want a query that aggregates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:294 +msgid "NOT GROUPED BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:295 +msgid "Use this section if you want to query atomic rows" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:302 +msgid "Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:453 +#: superset/assets/javascripts/explore/stores/visTypes.js:707 +msgid "Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:545 +msgid "Histogram Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:553 +msgid "Numeric Column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:554 +msgid "Select the numeric column to draw the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:557 +msgid "No of Bins" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:558 +msgid "Select number of bins for the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:578 +msgid "Primary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:579 +msgid "The primary metric is used to define the arc segment sizes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:582 +msgid "Secondary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:583 +msgid "" +"This secondary metric is used to define the color as a ratio against the " +"primary metric. If the two metrics match, color is mapped level groups" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:588 +msgid "Hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:589 +msgid "This defines the level of the hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:608 +#: superset/assets/javascripts/explore/stores/visTypes.js:635 +msgid "Source / Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:609 +#: superset/assets/javascripts/explore/stores/visTypes.js:636 +msgid "Choose a source and a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:626 +msgid "Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:641 +msgid "Chord Diagram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:655 +msgid "Choose a number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:658 +msgid "Source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:661 +msgid "Choose a source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:664 +msgid "Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:667 +msgid "Choose a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:686 +msgid "ISO 3166-1 codes of region/province/department" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:687 +msgid "" +"It's ISO 3166-1 of your region/province/department in your table. (see " +"documentation for list of ISO 3166-1)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:690 +#: superset/connectors/druid/views.py:106 superset/connectors/sqla/views.py:130 +msgid "Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:691 +msgid "Metric to display bottom title" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:717 +msgid "Country Control" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:718 +msgid "3 letter code of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:721 +msgid "Metric for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:722 +msgid "Metric that defines the color of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:725 +msgid "Bubble size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:726 +msgid "Metric that defines the size of the bubble" msgstr "" -#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:238 -#: superset/db_engine_specs.py:270 superset/db_engine_specs.py:325 -#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:781 -#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:845 -#: superset/db_engine_specs.py:893 -msgid "day" +#: superset/assets/javascripts/explore/stores/visTypes.js:732 +msgid "Filter Box" msgstr "" -#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:244 -#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 -#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:783 -#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 -msgid "week" +#: superset/assets/javascripts/explore/stores/visTypes.js:745 +msgid "Filter controls" msgstr "" -#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:246 -#: superset/db_engine_specs.py:273 superset/db_engine_specs.py:328 -#: superset/db_engine_specs.py:373 superset/db_engine_specs.py:785 -#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:849 -#: superset/db_engine_specs.py:895 -msgid "month" +#: superset/assets/javascripts/explore/stores/visTypes.js:747 +msgid "" +"The controls you want to filter on. Note that only columns checked as " +"\"filterable\" will show up on this list." msgstr "" -#: superset/db_engine_specs.py:201 superset/db_engine_specs.py:248 -#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:375 -#: superset/db_engine_specs.py:787 superset/db_engine_specs.py:817 -#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:897 -msgid "quarter" +#: superset/assets/javascripts/explore/stores/visTypes.js:789 +msgid "Axis & Metrics" msgstr "" -#: superset/db_engine_specs.py:202 superset/db_engine_specs.py:252 -#: superset/db_engine_specs.py:332 superset/db_engine_specs.py:789 -#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:899 -msgid "year" +#: superset/assets/javascripts/explore/stores/visTypes.js:797 +msgid "Heatmap Options" msgstr "" -#: superset/db_engine_specs.py:334 -msgid "week_start_monday" +#: superset/assets/javascripts/explore/stores/visTypes.js:817 +msgid "Horizon" msgstr "" -#: superset/db_engine_specs.py:377 superset/db_engine_specs.py:853 -msgid "week_ending_saturday" +#: superset/assets/javascripts/explore/stores/visTypes.js:843 +msgid "Points" msgstr "" -#: superset/db_engine_specs.py:380 superset/db_engine_specs.py:856 -msgid "week_start_sunday" +#: superset/assets/javascripts/explore/stores/visTypes.js:850 +msgid "Labelling" msgstr "" -#: superset/db_engine_specs.py:775 superset/db_engine_specs.py:887 -msgid "5 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:857 +msgid "Visual Tweaks" msgstr "" -#: superset/db_engine_specs.py:777 -msgid "half hour" +#: superset/assets/javascripts/explore/stores/visTypes.js:865 +msgid "Viewport" msgstr "" -#: superset/db_engine_specs.py:889 -msgid "10 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:875 +msgid "Longitude" msgstr "" -#: superset/utils.py:472 -#, python-format -msgid "[Superset] Access to the datasource %(name)s was granted" +#: superset/assets/javascripts/explore/stores/visTypes.js:876 +msgid "Column containing longitude data" msgstr "" -#: superset/viz.py:311 -msgid "Table View" +#: superset/assets/javascripts/explore/stores/visTypes.js:879 +msgid "Latitude" msgstr "" -#: superset/viz.py:364 -msgid "Pivot Table" +#: superset/assets/javascripts/explore/stores/visTypes.js:880 +msgid "Column containing latitude data" msgstr "" -#: superset/viz.py:413 -msgid "Markup" +#: superset/assets/javascripts/explore/stores/visTypes.js:883 +msgid "Cluster label aggregator" msgstr "" -#: superset/viz.py:432 -msgid "Separator" +#: superset/assets/javascripts/explore/stores/visTypes.js:884 +msgid "" +"Aggregate function applied to the list of points in each cluster to " +"produce the cluster label." msgstr "" -#: superset/viz.py:448 -msgid "Word Cloud" +#: superset/assets/javascripts/explore/stores/visTypes.js:888 +msgid "Tooltip" msgstr "" -#: superset/viz.py:471 -msgid "Treemap" +#: superset/assets/javascripts/explore/stores/visTypes.js:889 +msgid "Show a tooltip when hovering over points and clusters describing the label" msgstr "" -#: superset/viz.py:497 -msgid "Calendar Heatmap" +#: superset/assets/javascripts/explore/stores/visTypes.js:893 +msgid "" +"One or many controls to group by. If grouping, latitude and longitude " +"columns must be present." msgstr "" -#: superset/viz.py:555 -msgid "Box Plot" +#: superset/assets/javascripts/explore/stores/visTypes.js:904 +msgid "Event definition" msgstr "" -#: superset/viz.py:644 -msgid "Bubble Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:914 +msgid "Additional meta data" msgstr "" -#: superset/viz.py:693 -msgid "Bullet Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:922 +msgid "Column containing entity ids" msgstr "" -#: superset/viz.py:742 -msgid "Big Number with Trendline" +#: superset/assets/javascripts/explore/stores/visTypes.js:923 +msgid "e.g., a \"user id\" column" msgstr "" -#: superset/viz.py:771 -msgid "Big Number" +#: superset/assets/javascripts/explore/stores/visTypes.js:926 +msgid "Column containing event names" msgstr "" -#: superset/viz.py:798 -msgid "Time Series - Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:934 +msgid "Event count limit" msgstr "" -#: superset/viz.py:925 -msgid "Time Series - Dual Axis Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:935 +msgid "The maximum number of events to return, equivalent to number of rows" msgstr "" -#: superset/viz.py:1000 -msgid "Time Series - Bar Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:938 +msgid "Meta data" msgstr "" -#: superset/viz.py:1008 -msgid "Time Series - Percent Change" +#: superset/assets/javascripts/explore/stores/visTypes.js:939 +msgid "Select any columns for meta data inspection" msgstr "" -#: superset/viz.py:1016 -msgid "Time Series - Stacked" +#: superset/assets/javascripts/modules/superset.js:134 +msgid "" +"The server could not be reached. You may want to verify your connection " +"and try again." msgstr "" -#: superset/viz.py:1025 -msgid "Distribution - NVD3 - Pie Chart" +#: superset/assets/javascripts/modules/superset.js:137 +#, python-format +msgid "An unknown error occurred. (Status: %s )" msgstr "" -#: superset/viz.py:1043 -msgid "Histogram" +#: superset/assets/javascripts/modules/superset.js:162 +#, python-format +msgid "Query timeout - visualization query are set to time out at %s seconds." msgstr "" -#: superset/viz.py:1068 -msgid "Distribution - Bar Chart" +#: superset/assets/javascripts/profile/components/App.jsx:24 +msgid "Favorites" msgstr "" -#: superset/viz.py:1135 -msgid "Sunburst" +#: superset/assets/javascripts/profile/components/App.jsx:30 +msgid "Created Content" msgstr "" -#: superset/viz.py:1168 -msgid "Sankey" +#: superset/assets/javascripts/profile/components/App.jsx:37 +msgid "Recent Activity" msgstr "" -#: superset/viz.py:1217 -msgid "Directed Force Layout" +#: superset/assets/javascripts/profile/components/App.jsx:42 +msgid "Security & Access" msgstr "" -#: superset/viz.py:1238 -msgid "Country Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:33 +msgid "No slices" msgstr "" -#: superset/viz.py:1267 -msgid "World Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:49 +msgid "No dashboards" msgstr "" -#: superset/viz.py:1317 -msgid "Filters" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:58 +#: superset/assets/javascripts/profile/components/Favorites.jsx:59 +#: superset/templates/superset/welcome.html:20 +#: superset/views/core.py:367 superset/views/core.py:527 +msgid "Dashboards" msgstr "" -#: superset/viz.py:1352 -msgid "iFrame" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:61 +#: superset/assets/javascripts/profile/components/Favorites.jsx:62 +#: superset/views/core.py:403 superset/views/core.py:472 +msgid "Slices" msgstr "" -#: superset/viz.py:1369 -msgid "Parallel Coordinates" +#: superset/assets/javascripts/profile/components/Favorites.jsx:34 +msgid "No favorite slices yet, go click on stars!" msgstr "" -#: superset/viz.py:1394 -msgid "Heatmap" +#: superset/assets/javascripts/profile/components/Favorites.jsx:50 +msgid "No favorite dashboards yet, go click on stars!" msgstr "" -#: superset/viz.py:1445 -msgid "Horizon Charts" +#: superset/assets/javascripts/profile/components/Security.jsx:14 +msgid "Roles" msgstr "" -#: superset/viz.py:1456 -msgid "Mapbox" +#: superset/assets/javascripts/profile/components/Security.jsx:23 +#: superset/views/core.py:279 +msgid "Databases" +msgstr "" + +#: superset/assets/javascripts/profile/components/Security.jsx:34 +msgid "Datasources" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:18 +msgid "Profile picture provided by Gravatar" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:33 +msgid "joined" msgstr "" -#: superset/connectors/druid/models.py:950 +#: superset/assets/javascripts/profile/components/UserInfo.jsx:43 +msgid "id:" +msgstr "" + +#: superset/assets/visualizations/EventFlow.jsx:56 +msgid "Sorry, there appears to be no data" +msgstr "" + +#: superset/assets/visualizations/filter_box.jsx:88 +#, python-format +msgid "Select [%s]" +msgstr "" + +#: superset/connectors/druid/models.py:970 msgid "No data was returned." msgstr "" -#: superset/connectors/druid/views.py:36 superset/connectors/sqla/views.py:73 -msgid "Column" +#: superset/connectors/druid/views.py:28 +msgid "List Druid Column" msgstr "" -#: superset/connectors/druid/views.py:37 superset/connectors/druid/views.py:96 -#: superset/connectors/sqla/views.py:119 -msgid "Type" +#: superset/connectors/druid/views.py:29 +msgid "Show Druid Column" msgstr "" -#: superset/connectors/druid/views.py:38 superset/views/core.py:305 -#: superset/views/core.py:354 -msgid "Datasource" +#: superset/connectors/druid/views.py:30 +msgid "Add Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:31 +msgid "Edit Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 +msgid "Column" +msgstr "" + +#: superset/connectors/druid/views.py:44 superset/connectors/druid/views.py:109 +#: superset/connectors/sqla/views.py:133 +msgid "Type" msgstr "" -#: superset/connectors/druid/views.py:39 superset/connectors/sqla/views.py:76 +#: superset/connectors/druid/views.py:46 superset/connectors/sqla/views.py:84 msgid "Groupable" msgstr "" -#: superset/connectors/druid/views.py:40 superset/connectors/sqla/views.py:77 +#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:85 msgid "Filterable" msgstr "" -#: superset/connectors/druid/views.py:41 superset/connectors/sqla/views.py:79 +#: superset/connectors/druid/views.py:48 superset/connectors/sqla/views.py:87 msgid "Count Distinct" msgstr "" -#: superset/connectors/druid/views.py:42 superset/connectors/sqla/views.py:80 +#: superset/connectors/druid/views.py:49 superset/connectors/sqla/views.py:88 msgid "Sum" msgstr "" -#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 -msgid "Min" +#: superset/connectors/druid/views.py:54 superset/connectors/sqla/views.py:50 +msgid "" +"Whether this column is exposed in the `Filters` section of the explore " +"view." msgstr "" -#: superset/connectors/druid/views.py:44 superset/connectors/sqla/views.py:82 -msgid "Max" +#: superset/connectors/druid/views.py:80 +msgid "List Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:42 -msgid "" -"Whether this column is exposed in the `Filters` section of the explore " -"view." +#: superset/connectors/druid/views.py:81 +msgid "Show Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:82 +msgid "Add Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:83 +msgid "Edit Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:87 superset/connectors/sqla/views.py:101 +#: superset/connectors/druid/views.py:100 superset/connectors/sqla/views.py:115 msgid "" "Whether the access to this metric is restricted to certain roles. Only " "roles with the permission 'metric access on XXX (the name of this " "metric)' are allowed to access this metric" msgstr "" -#: superset/connectors/druid/views.py:93 superset/connectors/sqla/views.py:116 -msgid "Metric" +#: superset/connectors/druid/views.py:108 superset/connectors/sqla/views.py:82 +#: superset/connectors/sqla/views.py:132 +msgid "Verbose Name" msgstr "" -#: superset/connectors/druid/views.py:94 superset/connectors/druid/views.py:204 -#: superset/connectors/sqla/views.py:75 superset/connectors/sqla/views.py:117 -#: superset/views/core.py:355 -msgid "Description" +#: superset/connectors/druid/views.py:110 superset/views/core.py:554 +msgid "JSON" msgstr "" -#: superset/connectors/druid/views.py:95 superset/connectors/sqla/views.py:74 -#: superset/connectors/sqla/views.py:118 -msgid "Verbose Name" +#: superset/connectors/druid/views.py:111 +msgid "Druid Datasource" msgstr "" -#: superset/connectors/druid/views.py:97 superset/views/core.py:534 -msgid "JSON" +#: superset/connectors/druid/views.py:128 +msgid "List Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:98 -msgid "Druid Datasource" +#: superset/connectors/druid/views.py:129 +msgid "Show Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:130 +msgid "Add Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:131 +msgid "Edit Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:123 -#: superset/connectors/druid/views.py:203 +#: superset/connectors/druid/views.py:142 +#: superset/connectors/druid/views.py:228 msgid "Cluster" msgstr "" -#: superset/connectors/druid/views.py:124 +#: superset/connectors/druid/views.py:143 msgid "Coordinator Host" msgstr "" -#: superset/connectors/druid/views.py:125 +#: superset/connectors/druid/views.py:144 msgid "Coordinator Port" msgstr "" -#: superset/connectors/druid/views.py:126 +#: superset/connectors/druid/views.py:145 msgid "Coordinator Endpoint" msgstr "" -#: superset/connectors/druid/views.py:127 +#: superset/connectors/druid/views.py:146 msgid "Broker Host" msgstr "" -#: superset/connectors/druid/views.py:128 +#: superset/connectors/druid/views.py:147 msgid "Broker Port" msgstr "" -#: superset/connectors/druid/views.py:129 +#: superset/connectors/druid/views.py:148 msgid "Broker Endpoint" msgstr "" -#: superset/connectors/druid/views.py:144 +#: superset/connectors/druid/views.py:163 msgid "Druid Clusters" msgstr "" -#: superset/connectors/druid/views.py:147 -#: superset/connectors/druid/views.py:243 -#: superset/connectors/druid/views.py:282 superset/connectors/sqla/views.py:261 -#: superset/views/core.py:274 +#: superset/connectors/druid/views.py:166 +#: superset/connectors/druid/views.py:268 +#: superset/connectors/druid/views.py:307 superset/connectors/sqla/views.py:281 +#: superset/views/core.py:282 msgid "Sources" msgstr "" -#: superset/connectors/druid/views.py:172 superset/connectors/sqla/views.py:155 +#: superset/connectors/druid/views.py:173 +msgid "List Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:174 +msgid "Show Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:175 +msgid "Add Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:176 +msgid "Edit Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:197 superset/connectors/sqla/views.py:175 msgid "" "The list of slices associated with this table. By altering this " "datasource, you may change how these associated slices behave. Also note " @@ -361,11 +2720,11 @@ msgid "" "datasource for a slice, overwrite the slice from the 'explore view'" msgstr "" -#: superset/connectors/druid/views.py:180 superset/connectors/sqla/views.py:163 +#: superset/connectors/druid/views.py:205 superset/connectors/sqla/views.py:183 msgid "Timezone offset (in hours) for this datasource" msgstr "" -#: superset/connectors/druid/views.py:184 +#: superset/connectors/druid/views.py:209 msgid "" "Time expression to use as a predicate when retrieving distinct values to " "populate the filter component. Only applies when `Enable Filter Select` " @@ -373,160 +2732,203 @@ msgid "" "filter will be populated based on the distinct value over the past week" msgstr "" -#: superset/connectors/druid/views.py:191 superset/connectors/sqla/views.py:185 +#: superset/connectors/druid/views.py:216 superset/connectors/sqla/views.py:205 msgid "" "Whether to populate the filter's dropdown in the explore view's filter " "section with a list of distinct values fetched from the backend on the " "fly" msgstr "" -#: superset/connectors/druid/views.py:195 superset/connectors/sqla/views.py:199 +#: superset/connectors/druid/views.py:220 superset/connectors/sqla/views.py:219 msgid "" "Redirects to this endpoint when clicking on the datasource from the " "datasource list" msgstr "" -#: superset/connectors/druid/views.py:201 superset/connectors/sqla/views.py:192 +#: superset/connectors/druid/views.py:226 superset/connectors/sqla/views.py:212 msgid "Associated Slices" msgstr "" -#: superset/connectors/druid/views.py:202 +#: superset/connectors/druid/views.py:227 msgid "Data Source" msgstr "" -#: superset/connectors/druid/views.py:205 +#: superset/connectors/druid/views.py:230 msgid "Owner" msgstr "" -#: superset/connectors/druid/views.py:206 +#: superset/connectors/druid/views.py:231 msgid "Is Hidden" msgstr "" -#: superset/connectors/druid/views.py:207 superset/connectors/sqla/views.py:197 +#: superset/connectors/druid/views.py:232 superset/connectors/sqla/views.py:217 msgid "Enable Filter Select" msgstr "" -#: superset/connectors/druid/views.py:208 +#: superset/connectors/druid/views.py:233 msgid "Default Endpoint" msgstr "" -#: superset/connectors/druid/views.py:209 +#: superset/connectors/druid/views.py:234 msgid "Time Offset" msgstr "" -#: superset/connectors/druid/views.py:210 superset/connectors/sqla/views.py:203 -#: superset/views/core.py:241 superset/views/core.py:351 +#: superset/connectors/druid/views.py:235 superset/connectors/sqla/views.py:223 +#: superset/views/core.py:249 superset/views/core.py:365 msgid "Cache Timeout" msgstr "" -#: superset/connectors/druid/views.py:241 +#: superset/connectors/druid/views.py:266 msgid "Druid Datasources" msgstr "" -#: superset/connectors/druid/views.py:279 +#: superset/connectors/druid/views.py:304 msgid "Refresh Druid Metadata" msgstr "" -#: superset/connectors/sqla/models.py:388 +#: superset/connectors/sqla/models.py:386 msgid "" "Datetime column not provided as part table configuration and is required " "by this type of chart" msgstr "" -#: superset/connectors/sqla/models.py:393 +#: superset/connectors/sqla/models.py:391 msgid "Metric '{}' is not valid" msgstr "" -#: superset/connectors/sqla/views.py:38 +#: superset/connectors/sqla/views.py:28 +msgid "List Columns" +msgstr "" + +#: superset/connectors/sqla/views.py:29 +msgid "Show Column" +msgstr "" + +#: superset/connectors/sqla/views.py:30 +msgid "Add Column" +msgstr "" + +#: superset/connectors/sqla/views.py:31 +msgid "Edit Column" +msgstr "" + +#: superset/connectors/sqla/views.py:46 msgid "" "Whether to make this column available as a [Time Granularity] option, " "column has to be DATETIME or DATETIME-like" msgstr "" -#: superset/connectors/sqla/views.py:45 +#: superset/connectors/sqla/views.py:53 msgid "" "The data type that was inferred by the database. It may be necessary to " "input a type manually for expression-defined columns in some cases. In " "most case users should not need to alter this." msgstr "" -#: superset/connectors/sqla/views.py:78 superset/connectors/sqla/views.py:121 -#: superset/connectors/sqla/views.py:193 superset/views/core.py:361 -msgid "Table" -msgstr "" - -#: superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:91 msgid "Expression" msgstr "" -#: superset/connectors/sqla/views.py:84 +#: superset/connectors/sqla/views.py:92 msgid "Is temporal" msgstr "" -#: superset/connectors/sqla/views.py:85 +#: superset/connectors/sqla/views.py:93 msgid "Datetime Format" msgstr "" -#: superset/connectors/sqla/views.py:86 +#: superset/connectors/sqla/views.py:94 msgid "Database Expression" msgstr "" -#: superset/connectors/sqla/views.py:120 +#: superset/connectors/sqla/views.py:102 +msgid "List Metrics" +msgstr "" + +#: superset/connectors/sqla/views.py:103 +msgid "Show Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:104 +msgid "Add Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:105 +msgid "Edit Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:134 msgid "SQL Expression" msgstr "" -#: superset/connectors/sqla/views.py:164 +#: superset/connectors/sqla/views.py:152 +msgid "List Tables" +msgstr "" + +#: superset/connectors/sqla/views.py:153 +msgid "Show Table" +msgstr "" + +#: superset/connectors/sqla/views.py:154 +msgid "Add Table" +msgstr "" + +#: superset/connectors/sqla/views.py:155 +msgid "Edit Table" +msgstr "" + +#: superset/connectors/sqla/views.py:184 msgid "Name of the table that exists in the source database" msgstr "" -#: superset/connectors/sqla/views.py:166 +#: superset/connectors/sqla/views.py:186 msgid "Schema, as used only in some databases like Postgres, Redshift and DB2" msgstr "" -#: superset/connectors/sqla/views.py:172 +#: superset/connectors/sqla/views.py:192 msgid "" "This fields acts a Superset view, meaning that Superset will run a query " "against this string as a subquery." msgstr "" -#: superset/connectors/sqla/views.py:176 +#: superset/connectors/sqla/views.py:196 msgid "" "Predicate applied when fetching distinct value to populate the filter " "control component. Supports jinja template syntax. Applies only when " "`Enable Filter Select` is on." msgstr "" -#: superset/connectors/sqla/views.py:182 +#: superset/connectors/sqla/views.py:202 msgid "Redirects to this endpoint when clicking on the table from the table list" msgstr "" -#: superset/connectors/sqla/views.py:194 +#: superset/connectors/sqla/views.py:214 msgid "Changed By" msgstr "" -#: superset/connectors/sqla/views.py:195 superset/views/core.py:237 +#: superset/connectors/sqla/views.py:215 superset/views/core.py:245 msgid "Database" msgstr "" -#: superset/connectors/sqla/views.py:196 superset/views/core.py:239 +#: superset/connectors/sqla/views.py:216 superset/views/core.py:247 msgid "Last Changed" msgstr "" -#: superset/connectors/sqla/views.py:198 +#: superset/connectors/sqla/views.py:218 msgid "Schema" msgstr "" -#: superset/connectors/sqla/views.py:202 +#: superset/connectors/sqla/views.py:222 msgid "Offset" msgstr "" -#: superset/connectors/sqla/views.py:235 +#: superset/connectors/sqla/views.py:255 msgid "" "The table was created. As part of this two phase configuration process, " "you should now click the edit button by the new table to configure it." msgstr "" -#: superset/connectors/sqla/views.py:259 +#: superset/connectors/sqla/views.py:279 msgid "Tables" msgstr "" @@ -559,19 +2961,10 @@ msgstr "" msgid "Request Permissions" msgstr "" -#: superset/templates/superset/request_access.html:16 -msgid "Cancel" -msgstr "" - #: superset/templates/superset/welcome.html:10 msgid "Welcome!" msgstr "" -#: superset/templates/superset/welcome.html:20 superset/views/core.py:353 -#: superset/views/core.py:507 -msgid "Dashboards" -msgstr "" - #: superset/templates/superset/models/database/macros.html:4 msgid "Test Connection" msgstr "" @@ -589,144 +2982,172 @@ msgstr "" msgid "Delete all Really?" msgstr "" -#: superset/views/core.py:55 +#: superset/views/core.py:57 msgid "This endpoint requires the `all_datasource_access` permission" msgstr "" -#: superset/views/core.py:57 +#: superset/views/core.py:59 msgid "The datasource seems to have been deleted" msgstr "" -#: superset/views/core.py:58 +#: superset/views/core.py:60 msgid "The access requests seem to have been deleted" msgstr "" -#: superset/views/core.py:60 +#: superset/views/core.py:62 msgid "The user seems to have been deleted" msgstr "" -#: superset/views/core.py:61 +#: superset/views/core.py:63 msgid "You don't have access to this datasource" msgstr "" -#: superset/views/core.py:65 +#: superset/views/core.py:67 #, python-format msgid "" "This view requires the database %(name)s or `all_datasource_access` " "permission" msgstr "" -#: superset/views/core.py:70 +#: superset/views/core.py:72 #, python-format msgid "" "This endpoint requires the datasource %(name)s, database or " "`all_datasource_access` permission" msgstr "" -#: superset/views/core.py:205 +#: superset/views/core.py:175 +msgid "List Databases" +msgstr "" + +#: superset/views/core.py:176 +msgid "Show Database" +msgstr "" + +#: superset/views/core.py:177 +msgid "Add Database" +msgstr "" + +#: superset/views/core.py:178 +msgid "Edit Database" +msgstr "" + +#: superset/views/core.py:213 msgid "Expose this DB in SQL Lab" msgstr "" -#: superset/views/core.py:206 +#: superset/views/core.py:214 msgid "" "Allow users to run synchronous queries, this is the default and should " "work well for queries that can be executed within a web request scope " "(<~1 minute)" msgstr "" -#: superset/views/core.py:210 +#: superset/views/core.py:218 msgid "" "Allow users to run queries, against an async backend. This assumes that " "you have a Celery worker setup as well as a results backend." msgstr "" -#: superset/views/core.py:214 +#: superset/views/core.py:222 msgid "Allow CREATE TABLE AS option in SQL Lab" msgstr "" -#: superset/views/core.py:215 +#: superset/views/core.py:223 msgid "" "Allow users to run non-SELECT statements (UPDATE, DELETE, CREATE, ...) in" " SQL Lab" msgstr "" -#: superset/views/core.py:219 +#: superset/views/core.py:227 msgid "" "When allowing CREATE TABLE AS option in SQL Lab, this option forces the " "table to be created in this schema" msgstr "" -#: superset/views/core.py:233 +#: superset/views/core.py:241 msgid "Expose in SQL Lab" msgstr "" -#: superset/views/core.py:234 +#: superset/views/core.py:242 msgid "Allow CREATE TABLE AS" msgstr "" -#: superset/views/core.py:235 +#: superset/views/core.py:243 msgid "Allow DML" msgstr "" -#: superset/views/core.py:236 +#: superset/views/core.py:244 msgid "CTAS Schema" msgstr "" -#: superset/views/core.py:238 superset/views/core.py:352 -#: superset/views/core.py:454 superset/views/core.py:518 +#: superset/views/core.py:246 superset/views/core.py:366 +#: superset/views/core.py:474 superset/views/core.py:538 msgid "Creator" msgstr "" -#: superset/views/core.py:240 +#: superset/views/core.py:248 msgid "SQLAlchemy URI" msgstr "" -#: superset/views/core.py:242 +#: superset/views/core.py:250 msgid "Extra" msgstr "" -#: superset/views/core.py:260 +#: superset/views/core.py:268 msgid "Import Dashboards" msgstr "" -#: superset/views/core.py:264 superset/views/core.py:2279 -#: superset/views/sql_lab.py:22 +#: superset/views/core.py:272 superset/views/core.py:2318 +#: superset/views/sql_lab.py:23 msgid "Manage" msgstr "" -#: superset/views/core.py:271 -msgid "Databases" -msgstr "" - -#: superset/views/core.py:302 superset/views/core.py:531 +#: superset/views/core.py:310 superset/views/core.py:551 msgid "User" msgstr "" -#: superset/views/core.py:303 +#: superset/views/core.py:311 msgid "User Roles" msgstr "" -#: superset/views/core.py:304 +#: superset/views/core.py:312 msgid "Database URL" msgstr "" -#: superset/views/core.py:306 +#: superset/views/core.py:314 msgid "Roles to grant" msgstr "" -#: superset/views/core.py:307 +#: superset/views/core.py:315 msgid "Created On" msgstr "" -#: superset/views/core.py:313 +#: superset/views/core.py:321 msgid "Access requests" msgstr "" -#: superset/views/core.py:315 superset/views/core.py:542 +#: superset/views/core.py:323 superset/views/core.py:562 msgid "Security" msgstr "" -#: superset/views/core.py:340 +#: superset/views/core.py:330 +msgid "List Slices" +msgstr "" + +#: superset/views/core.py:331 +msgid "Show Slice" +msgstr "" + +#: superset/views/core.py:332 +msgid "Add Slice" +msgstr "" + +#: superset/views/core.py:333 +msgid "Edit Slice" +msgstr "" + +#: superset/views/core.py:354 msgid "" "These parameters are generated dynamically when clicking the save or " "overwrite button in the explore view. This JSON object is exposed here " @@ -734,237 +3155,193 @@ msgid "" "parameters." msgstr "" -#: superset/views/core.py:345 +#: superset/views/core.py:359 msgid "Duration (in seconds) of the caching timeout for this slice." msgstr "" -#: superset/views/core.py:356 +#: superset/views/core.py:370 msgid "Last Modified" msgstr "" -#: superset/views/core.py:357 superset/views/core.py:453 +#: superset/views/core.py:371 superset/views/core.py:473 msgid "Owners" msgstr "" -#: superset/views/core.py:358 +#: superset/views/core.py:372 msgid "Parameters" msgstr "" -#: superset/views/core.py:359 superset/views/core.py:401 +#: superset/views/core.py:373 superset/views/core.py:415 msgid "Slice" msgstr "" -#: superset/views/core.py:360 -msgid "Name" +#: superset/views/core.py:432 +msgid "List Dashboards" msgstr "" -#: superset/views/core.py:362 -msgid "Visualization Type" +#: superset/views/core.py:433 +msgid "Show Dashboard" msgstr "" -#: superset/views/core.py:389 superset/views/core.py:452 -msgid "Slices" +#: superset/views/core.py:434 +msgid "Add Dashboard" +msgstr "" + +#: superset/views/core.py:435 +msgid "Edit Dashboard" msgstr "" -#: superset/views/core.py:426 +#: superset/views/core.py:446 msgid "" "This json object describes the positioning of the widgets in the " "dashboard. It is dynamically generated when adjusting the widgets size " "and positions by using drag & drop in the dashboard view" msgstr "" -#: superset/views/core.py:431 +#: superset/views/core.py:451 msgid "" "The css for individual dashboards can be altered here, or in the " "dashboard view where changes are immediately visible" msgstr "" -#: superset/views/core.py:435 +#: superset/views/core.py:455 msgid "To get a readable URL for your dashboard" msgstr "" -#: superset/views/core.py:436 +#: superset/views/core.py:456 msgid "" "This JSON object is generated dynamically when clicking the save or " "overwrite button in the dashboard view. It is exposed here for reference " "and for power users who may want to alter specific parameters." msgstr "" -#: superset/views/core.py:441 +#: superset/views/core.py:461 msgid "Owners is a list of users who can alter the dashboard." msgstr "" -#: superset/views/core.py:449 superset/views/core.py:516 +#: superset/views/core.py:469 superset/views/core.py:536 msgid "Dashboard" msgstr "" -#: superset/views/core.py:450 superset/views/core.py:517 -msgid "Title" -msgstr "" - -#: superset/views/core.py:451 +#: superset/views/core.py:471 msgid "Slug" msgstr "" -#: superset/views/core.py:455 superset/views/core.py:519 -msgid "Modified" -msgstr "" - -#: superset/views/core.py:456 +#: superset/views/core.py:476 msgid "Position JSON" msgstr "" -#: superset/views/core.py:457 -msgid "CSS" -msgstr "" - -#: superset/views/core.py:458 +#: superset/views/core.py:478 msgid "JSON Metadata" msgstr "" -#: superset/views/core.py:459 +#: superset/views/core.py:479 msgid "Underlying Tables" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export dashboards?" msgstr "" -#: superset/views/core.py:532 +#: superset/views/core.py:552 msgid "Action" msgstr "" -#: superset/views/core.py:533 +#: superset/views/core.py:553 msgid "dttm" msgstr "" -#: superset/views/core.py:540 +#: superset/views/core.py:560 msgid "Action Log" msgstr "" -#: superset/views/core.py:770 +#: superset/views/core.py:790 msgid "Access was requested" msgstr "" -#: superset/views/core.py:831 +#: superset/views/core.py:851 #, python-format msgid "" "%(user)s was granted the role %(role)s that gives access to the " "%(datasource)s" msgstr "" -#: superset/views/core.py:847 +#: superset/views/core.py:867 #, python-format msgid "Role %(r)s was extended to provide the access to the datasource %(ds)s" msgstr "" -#: superset/views/core.py:856 +#: superset/views/core.py:876 msgid "You have no permission to approve this request" msgstr "" -#: superset/views/core.py:1589 +#: superset/views/core.py:1609 msgid "" "Malformed request. slice_id or table_name and db_name arguments are " "expected" msgstr "" -#: superset/views/core.py:1595 +#: superset/views/core.py:1615 #, python-format msgid "Slice %(id)s not found" msgstr "" -#: superset/views/core.py:1607 +#: superset/views/core.py:1627 #, python-format msgid "Table %(t)s wasn't found in the database %(d)s" msgstr "" -#: superset/views/core.py:1741 +#: superset/views/core.py:1761 #, python-format msgid "Can't find User '%(name)s', please ask your admin to create one." msgstr "" -#: superset/views/core.py:1748 +#: superset/views/core.py:1768 #, python-format msgid "Can't find DruidCluster with cluster_name = '%(name)s'" msgstr "" -#: superset/views/core.py:2276 +#: superset/views/core.py:2315 msgid "CSS Templates" msgstr "" -#: superset/views/core.py:2286 +#: superset/views/core.py:2325 msgid "SQL Editor" msgstr "" -#: superset/views/core.py:2291 superset/views/core.py:2300 +#: superset/views/core.py:2330 superset/views/core.py:2339 msgid "SQL Lab" msgstr "" -#: superset/views/core.py:2295 +#: superset/views/core.py:2334 msgid "Query Search" msgstr "" -#: superset/views/sql_lab.py:20 +#: superset/views/sql_lab.py:21 msgid "Queries" msgstr "" -#: superset/views/sql_lab.py:55 -msgid "Saved Queries" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 -msgid "Please enter a slice name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 -msgid "Please select a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 -msgid "Please enter a dashboard name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 -msgid "Save A Slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 -msgid "Overwrite slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 -msgid "Save as" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 -msgid "[slice name]" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 -msgid "Do not add to a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 -msgid "Add slice to existing dashboard" +#: superset/views/sql_lab.py:30 +msgid "List Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 -msgid "Add to new dashboard" +#: superset/views/sql_lab.py:31 +msgid "Show Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 -msgid "[dashboard name]" +#: superset/views/sql_lab.py:32 +msgid "Add Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 -msgid "Save" +#: superset/views/sql_lab.py:33 +msgid "Edit Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 -msgid "Save & go to dashboard" +#: superset/views/sql_lab.py:62 +msgid "Saved Queries" msgstr "" diff --git a/docs/conf.py b/docs/conf.py index d1d5065006215..fbc75e9854587 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -51,7 +51,7 @@ master_doc = 'index' # General information about the project. -project = "Superset's documentation" +project = "Apache Superset" copyright = None author = u'Maxime Beauchemin' diff --git a/docs/index.rst b/docs/index.rst index 51410395219c3..eba2e94516930 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,10 +1,10 @@ .. image:: _static/img/s.png -Superset's documentation -'''''''''''''''''''''''' +Apache Superset (incubating) +'''''''''''''''''''''''''''' -Superset is a data exploration platform designed to be visual, intuitive -and interactive. +Apache Superset (incubating) is a modern, enterprise-ready business +intelligence web application ---------------- @@ -12,25 +12,37 @@ and interactive. .. warning:: This project was originally named Panoramix, was renamed to Caravel in March 2016, and is currently named Superset as of November 2016 +.. important:: + + **Disclaimer**: Apache Superset is an effort undergoing incubation at The + Apache Software Foundation (ASF), sponsored by the Apache Incubator. + Incubation is required of all newly accepted projects until a further + review indicates that the infrastructure, communications, and + decision making process have stabilized in a manner consistent with + other successful ASF projects. While incubation status is not + necessarily a reflection of the completeness or stability of + the code, it does indicate that the project has yet to be fully + endorsed by the ASF. + Overview ======================================= Features --------- -- A rich set of data visualizations, integrated from some of the best - visualization libraries -- Create and share simple dashboards -- An extensible, high-granularity security/permission model allowing - intricate rules on who can access individual features and the dataset +- A rich set of data visualizations +- An easy-to-use interface for exploring and visualizing data +- Create and share dashboards - Enterprise-ready authentication with integration with major authentication providers (database, OpenID, LDAP, OAuth & REMOTE_USER through Flask AppBuilder) +- An extensible, high-granularity security/permission model allowing + intricate rules on who can access individual features and the dataset - A simple semantic layer, allowing users to control how data sources are displayed in the UI by defining which fields should show up in which drop-down and which aggregation and function metrics are made available to the user -- Integration with most RDBMS through SqlAlchemy +- Integration with most SQL-speaking RDBMS through SQLAlchemy - Deep integration with Druid.io ------ diff --git a/docs/installation.rst b/docs/installation.rst index 10aa7d77bbcc0..c9b027ab4ca8c 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -392,13 +392,13 @@ have the same configuration. .. code-block:: python - class CeleryConfig(object): - BROKER_URL = 'redis://localhost:6379/0' - CELERY_IMPORTS = ('superset.sql_lab', ) - CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' - CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} + class CeleryConfig(object): + BROKER_URL = 'redis://localhost:6379/0' + CELERY_IMPORTS = ('superset.sql_lab', ) + CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' + CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} - CELERY_CONFIG = CeleryConfig + CELERY_CONFIG = CeleryConfig To setup a result backend, you need to pass an instance of a derivative of ``werkzeug.contrib.cache.BaseCache`` to the ``RESULTS_BACKEND`` @@ -410,13 +410,13 @@ look something like: .. code-block:: python - # On S3 - from s3cache.s3cache import S3Cache - S3_CACHE_BUCKET = 'foobar-superset' - S3_CACHE_KEY_PREFIX = 'sql_lab_result' - RESULTS_BACKEND = S3Cache(S3_CACHE_BUCKET, S3_CACHE_KEY_PREFIX) + # On S3 + from s3cache.s3cache import S3Cache + S3_CACHE_BUCKET = 'foobar-superset' + S3_CACHE_KEY_PREFIX = 'sql_lab_result' + RESULTS_BACKEND = S3Cache(S3_CACHE_BUCKET, S3_CACHE_KEY_PREFIX) - # On Redis + # On Redis from werkzeug.contrib.cache import RedisCache RESULTS_BACKEND = RedisCache( host='localhost', port=6379, key_prefix='superset_results') diff --git a/setup.py b/setup.py index 32cc777052196..ad86b08959ae0 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ def get_git_sha(): 'boto3==1.4.4', 'celery==3.1.25', 'colorama==0.3.9', - 'cryptography==1.7.2', + 'cryptography==1.9', 'flask-appbuilder==1.9.1', 'flask-cache==0.13.1', 'flask-migrate==2.0.3', @@ -61,7 +61,7 @@ def get_git_sha(): 'pandas==0.20.2', 'parsedatetime==2.0.0', 'pydruid==0.3.1', - 'PyHive>=0.3.0', + 'PyHive>=0.4.0', 'python-dateutil==2.6.0', 'requests==2.17.3', 'simplejson==3.10.0', diff --git a/superset/assets/backendSync.json b/superset/assets/backendSync.json index 1d8ba55fa746d..71e7130328492 100644 --- a/superset/assets/backendSync.json +++ b/superset/assets/backendSync.json @@ -750,6 +750,12 @@ "default": false, "description": "Sort bars by x labels." }, + "combine_metric": { + "type": "CheckboxControl", + "label": "Combine Metrics", + "default": false, + "description": "Display metrics side by side within each column, as opposed to each column being displayed side by side for each metric." + }, "show_controls": { "type": "CheckboxControl", "label": "Extra Controls", diff --git a/superset/assets/javascripts/SqlLab/actions.js b/superset/assets/javascripts/SqlLab/actions.js index 4203a757420bf..e7cedb99e8652 100644 --- a/superset/assets/javascripts/SqlLab/actions.js +++ b/superset/assets/javascripts/SqlLab/actions.js @@ -1,6 +1,7 @@ /* global notify */ import shortid from 'shortid'; import { now } from '../modules/dates'; +import { t } from '../locales'; const $ = require('jquery'); @@ -51,8 +52,8 @@ export function saveQuery(query) { type: 'POST', url, data: query, - success: () => notify.success('Your query was saved'), - error: () => notify.error('Your query could not be saved'), + success: () => notify.success(t('Your query was saved')), + error: () => notify.error(t('Your query could not be saved')), dataType: 'json', }); return { type: SAVE_QUERY }; @@ -105,7 +106,7 @@ export function fetchQueryResults(query) { dispatch(querySuccess(query, results)); }, error(err) { - let msg = 'Failed at retrieving results from the results backend'; + let msg = t('Failed at retrieving results from the results backend'); if (err.responseJSON && err.responseJSON.error) { msg = err.responseJSON.error; } @@ -151,12 +152,12 @@ export function runQuery(query) { } } if (textStatus === 'error' && errorThrown === '') { - msg = 'Could not connect to server'; + msg = t('Could not connect to server'); } else if (msg === null) { msg = `[${textStatus}] ${errorThrown}`; } if (msg.indexOf('CSRF token') > 0) { - msg = 'Your session timed out, please refresh your page and try again.'; + msg = t('Your session timed out, please refresh your page and try again.'); } dispatch(queryFailed(query, msg)); }, @@ -175,10 +176,10 @@ export function postStopQuery(query) { url: stopQueryUrl, data: stopQueryRequestData, success() { - notify.success('Query was stopped.'); + notify.success(t('Query was stopped.')); }, error() { - notify.error('Failed at stopping query.'); + notify.error(t('Failed at stopping query.')); }, }); }; @@ -291,7 +292,7 @@ export function addTable(query, tableName, schemaName) { isMetadataLoading: false, }); dispatch(mergeTable(newTable)); - notify.error('Error occurred while fetching table metadata'); + notify.error(t('Error occurred while fetching table metadata')); }); url = `/superset/extra_table_metadata/${query.dbId}/${tableName}/${schemaName}/`; @@ -304,7 +305,7 @@ export function addTable(query, tableName, schemaName) { isExtraMetadataLoading: false, }); dispatch(mergeTable(newTable)); - notify.error('Error occurred while fetching table metadata'); + notify.error(t('Error occurred while fetching table metadata')); }); }; } @@ -354,7 +355,7 @@ export function popStoredQuery(urlId) { success: (data) => { const newQuery = JSON.parse(data); const queryEditorProps = { - title: newQuery.title ? newQuery.title : 'shared query', + title: newQuery.title ? newQuery.title : t('shared query'), dbId: newQuery.dbId ? parseInt(newQuery.dbId, 10) : null, schema: newQuery.schema ? newQuery.schema : null, autorun: newQuery.autorun ? newQuery.autorun : false, @@ -362,7 +363,7 @@ export function popStoredQuery(urlId) { }; dispatch(addQueryEditor(queryEditorProps)); }, - error: () => notify.error("The query couldn't be loaded"), + error: () => notify.error(t('The query couldn\'t be loaded')), }); }; } @@ -382,7 +383,7 @@ export function popSavedQuery(saveQueryId) { }; dispatch(addQueryEditor(queryEditorProps)); }, - error: () => notify.error("The query couldn't be loaded"), + error: () => notify.error(t('The query couldn\'t be loaded')), }); }; } @@ -415,7 +416,7 @@ export function createDatasource(vizOptions, context) { dispatch(createDatasourceSuccess(resp)); }, error: () => { - dispatch(createDatasourceFailed('An error occurred while creating the data source')); + dispatch(createDatasourceFailed(t('An error occurred while creating the data source'))); }, }); }; diff --git a/superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx b/superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx index 5491eed545b3e..66e60c9b2b4f7 100644 --- a/superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx +++ b/superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import CopyToClipboard from '../../components/CopyToClipboard'; import { storeQuery } from '../../../utils/common'; +import { t } from '../../locales'; const propTypes = { queryEditor: PropTypes.object.isRequired, @@ -26,10 +27,10 @@ export default class CopyQueryTabUrl extends React.PureComponent { inMenu copyNode={(
- share query + {t('share query')}
)} - tooltipText="copy URL to clipboard" + tooltipText={t('copy URL to clipboard')} shouldShowText={false} getText={this.getUrl.bind(this)} /> diff --git a/superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx b/superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx index dc5a5a90f3349..38d55bb50e488 100644 --- a/superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx +++ b/superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import SyntaxHighlighter from 'react-syntax-highlighter'; import { github } from 'react-syntax-highlighter/dist/styles'; import ModalTrigger from '../../components/ModalTrigger'; +import { t } from '../../locales'; const defaultProps = { maxWidth: 50, @@ -52,7 +53,7 @@ class HighlightedSql extends React.Component { if (this.props.rawSql && this.props.rawSql !== this.props.sql) { rawSql = (
-

Raw SQL

+

{t('Raw SQL')}

{this.props.rawSql} @@ -62,7 +63,7 @@ class HighlightedSql extends React.Component { this.setState({ modalBody: (
-

Source SQL

+

{t('Source SQL')}

{this.props.sql} @@ -74,7 +75,7 @@ class HighlightedSql extends React.Component { render() { return ( { } return ( - No query history yet... + {t('No query history yet...')} ); }; diff --git a/superset/assets/javascripts/SqlLab/components/QuerySearch.jsx b/superset/assets/javascripts/SqlLab/components/QuerySearch.jsx index 44daa3920bd5c..216d159c1fbdc 100644 --- a/superset/assets/javascripts/SqlLab/components/QuerySearch.jsx +++ b/superset/assets/javascripts/SqlLab/components/QuerySearch.jsx @@ -7,6 +7,7 @@ import { now, epochTimeXHoursAgo, epochTimeXDaysAgo, epochTimeXYearsAgo } from '../../modules/dates'; import { STATUS_OPTIONS, TIME_OPTIONS } from '../constants'; import AsyncSelect from '../../components/AsyncSelect'; +import { t } from '../../locales'; const $ = window.$ = require('jquery'); @@ -102,7 +103,7 @@ class QuerySearch extends React.PureComponent { if (data.result.length === 0) { this.props.actions.addAlert({ bsStyle: 'danger', - msg: "It seems you don't have access to any database", + msg: t('It seems you don\'t have access to any database'), }); } return options; @@ -150,15 +151,15 @@ class QuerySearch extends React.PureComponent { type="text" onChange={this.changeSearch.bind(this)} className="form-control input-sm" - placeholder="Search Results" + placeholder={t('Search Results')} />
({ value: t, label: t }))} + placeholder={t('[To]-')} + options={TIME_OPTIONS.map(xt => ({ value: xt, label: xt }))} value={this.state.to} autosize={false} onChange={this.changeTo.bind(this)} @@ -177,7 +178,7 @@ class QuerySearch extends React.PureComponent {
(
- Schema: {o.label} + {t('Schema:')} {o.label}
)} isLoading={this.state.schemaLoading} @@ -186,7 +187,7 @@ class SqlEditorLeftBar extends React.PureComponent { ref="selectTable" isLoading={this.state.tableLoading} value={this.state.tableName} - placeholder={`Add a table (${this.state.tableOptions.length})`} + placeholder={t('Add a table (%s)', this.state.tableOptions.length)} autosize={false} onChange={this.changeTable.bind(this)} filterOptions={this.state.filterOptions} @@ -199,7 +200,7 @@ class SqlEditorLeftBar extends React.PureComponent { name="async-select-table" ref="selectTable" value={this.state.tableName} - placeholder={'Type to search ...'} + placeholder={t('Type to search ...')} autosize={false} onChange={this.changeTable.bind(this)} loadOptions={this.getTableNamesBySubStr.bind(this)} @@ -222,7 +223,7 @@ class SqlEditorLeftBar extends React.PureComponent {
{shouldShowReset && }
diff --git a/superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx b/superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx index 73ba6bcd29c6f..4f716d9a71ab3 100644 --- a/superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx +++ b/superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx @@ -9,6 +9,7 @@ import * as Actions from '../actions'; import SqlEditor from './SqlEditor'; import CopyQueryTabUrl from './CopyQueryTabUrl'; import { areArraysShallowEqual } from '../../reduxUtils'; +import { t } from '../../locales'; const propTypes = { actions: PropTypes.object.isRequired, @@ -101,7 +102,7 @@ class TabbedSqlEditors extends React.PureComponent { } renameTab(qe) { /* eslint no-alert: 0 */ - const newTitle = prompt('Enter a new title for the tab'); + const newTitle = prompt(t('Enter a new title for the tab')); if (newTitle) { this.props.actions.queryEditorSetTitle(qe, newTitle); } @@ -120,7 +121,7 @@ class TabbedSqlEditors extends React.PureComponent { queryCount++; const activeQueryEditor = this.activeQueryEditor(); const qe = { - title: `Untitled Query ${queryCount}`, + title: t('Untitled Query %s', queryCount), dbId: (activeQueryEditor && activeQueryEditor.dbId) ? activeQueryEditor.dbId : this.props.defaultDbId, @@ -166,10 +167,10 @@ class TabbedSqlEditors extends React.PureComponent { title="" > - close tab + {t('close tab')} - rename tab + {t('rename tab')} {qe && @@ -177,7 +178,7 @@ class TabbedSqlEditors extends React.PureComponent {   - {this.state.hideLeftBar ? 'expand tool bar' : 'hide tool bar'} + {this.state.hideLeftBar ? t('expand tool bar') : t('hide tool bar')}
@@ -193,7 +194,7 @@ class TabbedSqlEditors extends React.PureComponent { {isSelected && (t.queryEditorId === qe.id))} + tables={this.props.tables.filter(xt => (xt.queryEditorId === qe.id))} queryEditor={qe} editorQueries={this.state.queriesArray} dataPreviewQueries={this.state.dataPreviewQueries} diff --git a/superset/assets/javascripts/SqlLab/components/TableElement.jsx b/superset/assets/javascripts/SqlLab/components/TableElement.jsx index fc8ae0c669991..624a0ed1c7650 100644 --- a/superset/assets/javascripts/SqlLab/components/TableElement.jsx +++ b/superset/assets/javascripts/SqlLab/components/TableElement.jsx @@ -9,6 +9,7 @@ import Link from './Link'; import ColumnElement from './ColumnElement'; import ModalTrigger from '../../components/ModalTrigger'; import Loading from '../../components/Loading'; +import { t } from '../../locales'; const propTypes = { table: PropTypes.object, @@ -71,7 +72,7 @@ class TableElement extends React.PureComponent { let partitionClipBoard; if (table.partitions.partitionQuery) { partitionQuery = table.partitions.partitionQuery; - const tt = 'Copy partition query to clipboard'; + const tt = t('Copy partition query to clipboard'); partitionClipBoard = (
- latest partition: {latest} + {t('latest partition:')} {latest} {partitionClipBoard}
@@ -106,7 +107,7 @@ class TableElement extends React.PureComponent { - Keys for table {table.name} + {t('Keys for table')} {table.name} } modalBody={table.indexes.map((ix, i) => ( @@ -115,7 +116,7 @@ class TableElement extends React.PureComponent { triggerNode={ } /> @@ -131,8 +132,8 @@ class TableElement extends React.PureComponent { onClick={this.toggleSortColumns.bind(this)} tooltip={ !this.state.sortColumns ? - 'Sort columns alphabetically' : - 'Original table column order'} + t('Sort columns alphabetically') : + t('Original table column order')} href="#" /> {table.selectStar && @@ -142,13 +143,13 @@ class TableElement extends React.PureComponent { } text={table.selectStar} shouldShowText={false} - tooltipText="Copy SELECT statement to clipboard" + tooltipText={t('Copy SELECT statement to clipboard')} /> } diff --git a/superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx b/superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx index 2ebfef9318a1a..f86972c01895a 100644 --- a/superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx +++ b/superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx @@ -13,12 +13,13 @@ import { getExploreUrl } from '../../explore/exploreUtils'; import * as actions from '../actions'; import { VISUALIZE_VALIDATION_ERRORS } from '../constants'; import { QUERY_TIMEOUT_THRESHOLD } from '../../constants'; +import { t } from '../../locales'; const CHART_TYPES = [ - { value: 'dist_bar', label: 'Distribution - Bar Chart', requiresTime: false }, - { value: 'pie', label: 'Pie Chart', requiresTime: false }, - { value: 'line', label: 'Time Series - Line Chart', requiresTime: true }, - { value: 'bar', label: 'Time Series - Bar Chart', requiresTime: true }, + { value: 'dist_bar', label: t('Distribution - Bar Chart'), requiresTime: false }, + { value: 'pie', label: t('Pie Chart'), requiresTime: false }, + { value: 'line', label: t('Time Series - Line Chart'), requiresTime: true }, + { value: 'bar', label: t('Time Series - Bar Chart'), requiresTime: true }, ]; const propTypes = { @@ -81,9 +82,9 @@ class VisualizeModal extends React.PureComponent { if (!re.test(colName)) { hints.push(
- "{colName}" is not right as a column name, please alias it - (as in SELECT count(*) AS my_alias) using only - alphanumeric characters and underscores + {t('%s is not right as a column name, please alias it ' + + '(as in SELECT count(*) ', colName)} {t('AS my_alias')}) {t('using only ' + + 'alphanumeric characters and underscores')}
); } }); @@ -132,12 +133,12 @@ class VisualizeModal extends React.PureComponent { if (Math.round(queryDuration.asMilliseconds()) > QUERY_TIMEOUT_THRESHOLD) { advise = ( - This query took {Math.round(queryDuration.asSeconds())} seconds to run, - and the explore view times out at {QUERY_TIMEOUT_THRESHOLD / 1000} seconds, - following this flow will most likely lead to your query timing out. - We recommend your summarize your data further before following that flow. - If activated you can use the CREATE TABLE AS feature - to store a summarized data set that you can then explore. + {t('This query took %s seconds to run,', Math.round(queryDuration.asSeconds()))} + {t('and the explore view times out at %s seconds,', QUERY_TIMEOUT_THRESHOLD / 1000)} + {t('following this flow will most likely lead to your query timing out.' + + 'We recommend your summarize your data further before following that flow.' + + 'If activated you can use the ')} CREATE TABLE AS {t('feature' + + 'to store a summarized data set that you can then explore.')} ); } return advise; @@ -146,7 +147,6 @@ class VisualizeModal extends React.PureComponent { this.props.actions.createDatasource(this.buildVizOptions(), this) .done(() => { const columns = Object.keys(this.state.columns).map(k => this.state.columns[k]); - const mainMetric = columns.filter(d => d.agg)[0]; const mainGroupBy = columns.filter(d => d.is_dim)[0]; const formData = { datasource: this.props.datasource, @@ -154,14 +154,10 @@ class VisualizeModal extends React.PureComponent { since: '100 years ago', limit: '0', }; - if (mainMetric) { - formData.metrics = [mainMetric.name]; - formData.metric = mainMetric.name; - } if (mainGroupBy) { formData.groupby = [mainGroupBy.name]; } - notify.info('Creating a data source and popping a new tab'); + notify.info(t('Creating a data source and popping a new tab')); window.open(getExploreUrl(formData)); }) @@ -191,7 +187,7 @@ class VisualizeModal extends React.PureComponent {
- No results available for this query + {t('No results available for this query')}
@@ -236,17 +232,17 @@ class VisualizeModal extends React.PureComponent {
- Visualize + {t('Visualize')} {alerts} {this.buildVisualizeAdvise()}
- Chart Type + {t('Chart Type')} @@ -275,7 +271,7 @@ class VisualizeModal extends React.PureComponent { bsStyle="primary" disabled={(this.state.hints.length > 0)} > - Visualize + {t('Visualize')} diff --git a/superset/assets/javascripts/SqlLab/constants.js b/superset/assets/javascripts/SqlLab/constants.js index 2a9327509e3f8..7a94215278dc5 100644 --- a/superset/assets/javascripts/SqlLab/constants.js +++ b/superset/assets/javascripts/SqlLab/constants.js @@ -1,3 +1,5 @@ +import { t } from '../locales'; + export const STATE_BSSTYLE_MAP = { failed: 'danger', pending: 'info', @@ -24,8 +26,8 @@ export const TIME_OPTIONS = [ ]; export const VISUALIZE_VALIDATION_ERRORS = { - REQUIRE_CHART_TYPE: 'Pick a chart type!', - REQUIRE_TIME: 'To use this chart type you need at least one column flagged as a date', - REQUIRE_DIMENSION: 'To use this chart type you need at least one dimension', - REQUIRE_AGGREGATION_FUNCTION: 'To use this chart type you need at least one aggregation function', + REQUIRE_CHART_TYPE: t('Pick a chart type!'), + REQUIRE_TIME: t('To use this chart type you need at least one column flagged as a date'), + REQUIRE_DIMENSION: t('To use this chart type you need at least one dimension'), + REQUIRE_AGGREGATION_FUNCTION: t('To use this chart type you need at least one aggregation function'), }; diff --git a/superset/assets/javascripts/SqlLab/index.jsx b/superset/assets/javascripts/SqlLab/index.jsx index e292c2576c1ae..ba09924720177 100644 --- a/superset/assets/javascripts/SqlLab/index.jsx +++ b/superset/assets/javascripts/SqlLab/index.jsx @@ -11,7 +11,7 @@ import App from './components/App'; import { appSetup } from '../common'; import './main.css'; -import './reactable-pagination.css'; +import '../../stylesheets/reactable-pagination.css'; import '../components/FilterableTable/FilterableTableStyles.css'; appSetup(); diff --git a/superset/assets/javascripts/SqlLab/main.css b/superset/assets/javascripts/SqlLab/main.css index a3ad7dbe6b445..ad2bb37c0e3e6 100644 --- a/superset/assets/javascripts/SqlLab/main.css +++ b/superset/assets/javascripts/SqlLab/main.css @@ -265,7 +265,7 @@ div.tablePopover:hover { } .QueryTable .label { - margin-top: 5px; + display: inline-block; } .ResultsModal .modal-body { diff --git a/superset/assets/javascripts/SqlLab/reducers.js b/superset/assets/javascripts/SqlLab/reducers.js index 7bef4546c55e0..a8b140860e59e 100644 --- a/superset/assets/javascripts/SqlLab/reducers.js +++ b/superset/assets/javascripts/SqlLab/reducers.js @@ -3,11 +3,12 @@ import * as actions from './actions'; import { now } from '../modules/dates'; import { addToObject, alterInObject, alterInArr, removeFromArr, getFromArr, addToArr } from '../reduxUtils'; +import { t } from '../locales'; export function getInitialState(defaultDbId) { const defaultQueryEditor = { id: shortid.generate(), - title: 'Untitled Query', + title: t('Untitled Query'), sql: 'SELECT *\nFROM\nWHERE', selectedText: null, latestQueryId: null, @@ -40,7 +41,7 @@ export const sqlLabReducer = function (state, action) { qe.id === state.tabHistory[state.tabHistory.length - 1]); const qe = { id: shortid.generate(), - title: `Copy of ${progenitor.title}`, + title: t('Copy of %s', progenitor.title), dbId: (action.query.dbId) ? action.query.dbId : null, schema: (action.query.schema) ? action.query.schema : null, autorun: true, @@ -76,13 +77,13 @@ export const sqlLabReducer = function (state, action) { [actions.MERGE_TABLE]() { const at = Object.assign({}, action.table); let existingTable; - state.tables.forEach((t) => { + state.tables.forEach((xt) => { if ( - t.dbId === at.dbId && - t.queryEditorId === at.queryEditorId && - t.schema === at.schema && - t.name === at.name) { - existingTable = t; + xt.dbId === at.dbId && + xt.queryEditorId === at.queryEditorId && + xt.schema === at.schema && + xt.name === at.name) { + existingTable = xt; } }); if (existingTable) { @@ -115,11 +116,11 @@ export const sqlLabReducer = function (state, action) { delete queries[action.oldQueryId]; const newTables = []; - state.tables.forEach((t) => { - if (t.dataPreviewQueryId === action.oldQueryId) { - newTables.push(Object.assign({}, t, { dataPreviewQueryId: action.newQuery.id })); + state.tables.forEach((xt) => { + if (xt.dataPreviewQueryId === action.oldQueryId) { + newTables.push(Object.assign({}, xt, { dataPreviewQueryId: action.newQuery.id })); } else { - newTables.push(t); + newTables.push(xt); } }); return Object.assign( diff --git a/superset/assets/javascripts/addSlice/AddSliceContainer.jsx b/superset/assets/javascripts/addSlice/AddSliceContainer.jsx index c316e2c76ed09..2396b1b303f40 100644 --- a/superset/assets/javascripts/addSlice/AddSliceContainer.jsx +++ b/superset/assets/javascripts/addSlice/AddSliceContainer.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { Button, Panel, Grid, Row, Col } from 'react-bootstrap'; import Select from 'react-virtualized-select'; import visTypes from '../explore/stores/visTypes'; +import { t } from '../locales'; const propTypes = { datasources: PropTypes.arrayOf(PropTypes.shape({ @@ -50,30 +51,30 @@ export default class AddSliceContainer extends React.PureComponent { render() { return (
- Create a new slice}> + {t('Create a new slice')}}>
-

Choose a datasource

+

{t('Choose a datasource')}

@@ -83,7 +84,7 @@ export default class AddSliceContainer extends React.PureComponent { disabled={this.isBtnDisabled()} onClick={this.gotoSlice.bind(this)} > - Create new slice + {t('Create new slice')}

diff --git a/superset/assets/javascripts/components/AsyncSelect.jsx b/superset/assets/javascripts/components/AsyncSelect.jsx index e045dc973c987..007281a116a04 100644 --- a/superset/assets/javascripts/components/AsyncSelect.jsx +++ b/superset/assets/javascripts/components/AsyncSelect.jsx @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import Select from 'react-select'; +import { t } from '../locales'; const $ = window.$ = require('jquery'); @@ -16,7 +17,7 @@ const propTypes = { }; const defaultProps = { - placeholder: 'Select ...', + placeholder: t('Select ...'), valueRenderer: o => (
{o.label}
), onAsyncError: () => {}, }; diff --git a/superset/assets/javascripts/components/CachedLabel.jsx b/superset/assets/javascripts/components/CachedLabel.jsx index e78e4f7996a81..8d0c0f2f2a740 100644 --- a/superset/assets/javascripts/components/CachedLabel.jsx +++ b/superset/assets/javascripts/components/CachedLabel.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { Label } from 'react-bootstrap'; import moment from 'moment'; import TooltipWrapper from './TooltipWrapper'; +import { t } from '../locales'; const propTypes = { onClick: PropTypes.func, @@ -22,14 +23,14 @@ class CacheLabel extends React.PureComponent { updateTooltipContent() { const cachedText = this.props.cachedTimestamp ? ( - Loaded data cached {moment.utc(this.props.cachedTimestamp).fromNow()} + t('Loaded data cached') {moment.utc(this.props.cachedTimestamp).fromNow()} ) : - 'Loaded from cache'; + t('Loaded from cache'); const tooltipContent = ( {cachedText}. - Click to force-refresh + {t('Click to force-refresh')} ); this.setState({ tooltipContent }); diff --git a/superset/assets/javascripts/components/CopyToClipboard.jsx b/superset/assets/javascripts/components/CopyToClipboard.jsx index c9120b2b3ef28..d00347d998987 100644 --- a/superset/assets/javascripts/components/CopyToClipboard.jsx +++ b/superset/assets/javascripts/components/CopyToClipboard.jsx @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Tooltip, OverlayTrigger, MenuItem } from 'react-bootstrap'; +import { t } from '../locales'; const propTypes = { copyNode: PropTypes.node, @@ -17,7 +18,7 @@ const defaultProps = { onCopyEnd: () => {}, shouldShowText: true, inMenu: false, - tooltipText: 'Copy to clipboard', + tooltipText: t('Copy to clipboard'), }; export default class CopyToClipboard extends React.Component { @@ -61,10 +62,10 @@ export default class CopyToClipboard extends React.Component { textArea.select(); try { if (!document.execCommand('copy')) { - throw new Error('Not successful'); + throw new Error(t('Not successful')); } } catch (err) { - window.alert('Sorry, your browser does not support copying. Use Ctrl / Cmd + C!'); // eslint-disable-line + window.alert(t('Sorry, your browser does not support copying. Use Ctrl / Cmd + C!')); // eslint-disable-line } document.body.removeChild(textArea); @@ -75,7 +76,7 @@ export default class CopyToClipboard extends React.Component { tooltipText() { if (this.state.hasCopied) { - return 'Copied!'; + return t('Copied!'); } return this.props.tooltipText; } diff --git a/superset/assets/javascripts/components/EditableTitle.jsx b/superset/assets/javascripts/components/EditableTitle.jsx index 9d71388828ad2..26f474420d0ae 100644 --- a/superset/assets/javascripts/components/EditableTitle.jsx +++ b/superset/assets/javascripts/components/EditableTitle.jsx @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import TooltipWrapper from './TooltipWrapper'; +import { t } from '../locales'; const propTypes = { title: PropTypes.string, @@ -8,7 +9,7 @@ const propTypes = { onSaveTitle: PropTypes.func.isRequired, }; const defaultProps = { - title: 'Title', + title: t('Title'), canEdit: false, }; @@ -71,7 +72,7 @@ class EditableTitle extends React.PureComponent { {tooltip}} > - + ); } diff --git a/superset/assets/javascripts/dashboard/Dashboard.jsx b/superset/assets/javascripts/dashboard/Dashboard.jsx index 8b0a0e1c69114..1a3307070e63f 100644 --- a/superset/assets/javascripts/dashboard/Dashboard.jsx +++ b/superset/assets/javascripts/dashboard/Dashboard.jsx @@ -8,7 +8,7 @@ import GridLayout from './components/GridLayout'; import Header from './components/Header'; import { appSetup } from '../common'; import AlertsWrapper from '../components/AlertsWrapper'; - +import { t } from '../locales'; import '../../stylesheets/dashboard.css'; const px = require('../modules/superset'); @@ -33,7 +33,7 @@ export function getInitialState(boostrapData) { } function unload() { - const message = 'You have unsaved changes.'; + const message = t('You have unsaved changes.'); window.event.returnValue = message; // Gecko + IE return message; // Gecko + Webkit, Safari, Chrome etc. } @@ -50,9 +50,9 @@ function renderAlert() { render(
- You have unsaved changes. Click the  + {t('You have unsaved changes.')} {t('Click the')}     - button on the top right to save your changes. + {t('button on the top right to save your changes.')}
, document.getElementById('alert-container'), @@ -155,13 +155,12 @@ export function dashboardContainer(dashboard, datasources, userid) { .addClass('danger') .attr( 'title', - `Served from data cached ${cachedWhen}. ` + - 'Click to force refresh') + t('Served from data cached %s . Click to force refresh.', cachedWhen)) .tooltip('fixTitle'); } else { refresh .removeClass('danger') - .attr('title', 'Click to force refresh') + .attr('title', t('Click to force refresh')) .tooltip('fixTitle'); } }, @@ -335,8 +334,8 @@ export function dashboardContainer(dashboard, datasources, userid) { error(error) { const errorMsg = getAjaxErrorMsg(error); utils.showModal({ - title: 'Error', - body: 'Sorry, there was an error adding slices to this dashboard: ' + errorMsg, + title: t('Error'), + body: t('Sorry, there was an error adding slices to this dashboard: %s', errorMsg), }); }, }); diff --git a/superset/assets/javascripts/dashboard/components/CodeModal.jsx b/superset/assets/javascripts/dashboard/components/CodeModal.jsx index 77f2dafea08a0..f9c1535a7708a 100644 --- a/superset/assets/javascripts/dashboard/components/CodeModal.jsx +++ b/superset/assets/javascripts/dashboard/components/CodeModal.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import ModalTrigger from '../../components/ModalTrigger'; +import { t } from '../../locales'; const propTypes = { triggerNode: PropTypes.node.isRequired, @@ -31,7 +32,7 @@ export default class CodeModal extends React.PureComponent { triggerNode={this.props.triggerNode} isButton beforeOpen={this.beforeOpen.bind(this)} - modalTitle="Active Dashboard Filters" + modalTitle={t('Active Dashboard Filters')} modalBody={
diff --git a/superset/assets/javascripts/dashboard/components/Controls.jsx b/superset/assets/javascripts/dashboard/components/Controls.jsx
index 1169642ff60e5..e18c2701fee9b 100644
--- a/superset/assets/javascripts/dashboard/components/Controls.jsx
+++ b/superset/assets/javascripts/dashboard/components/Controls.jsx
@@ -8,6 +8,7 @@ import RefreshIntervalModal from './RefreshIntervalModal';
 import SaveModal from './SaveModal';
 import CodeModal from './CodeModal';
 import SliceAdder from './SliceAdder';
+import { t } from '../../locales';
 
 const $ = window.$ = require('jquery');
 
@@ -44,13 +45,13 @@ class Controls extends React.PureComponent {
   }
   render() {
     const dashboard = this.props.dashboard;
-    const emailBody = `Checkout this dashboard: ${window.location.href}`;
+    const emailBody = t('Checkout this dashboard: %s', window.location.href);
     const emailLink = 'mailto:?Subject=Superset%20Dashboard%20'
       + `${dashboard.dashboard_title}&Body=${emailBody}`;
     return (
       
         
diff --git a/superset/assets/javascripts/dashboard/components/CssEditor.jsx b/superset/assets/javascripts/dashboard/components/CssEditor.jsx
index b77ab9d0ff5e6..bbcc19f078604 100644
--- a/superset/assets/javascripts/dashboard/components/CssEditor.jsx
+++ b/superset/assets/javascripts/dashboard/components/CssEditor.jsx
@@ -7,6 +7,7 @@ import 'brace/mode/css';
 import 'brace/theme/github';
 
 import ModalTrigger from '../../components/ModalTrigger';
+import { t } from '../../locales';
 
 const propTypes = {
   initialCss: PropTypes.string,
@@ -61,10 +62,10 @@ class CssEditor extends React.PureComponent {
     if (this.props.templates) {
       return (
         
-
Load a template
+
{t('Load a template')}
' + errorMsg); + notify.error(t('Sorry, there was an error saving this dashboard: ') + '' + errorMsg); }, }); } @@ -89,8 +90,8 @@ class SaveModal extends React.PureComponent { if (!newDashboardTitle) { this.modal.close(); showModal({ - title: 'Error', - body: 'You must pick a name for the new dashboard', + title: t('Error'), + body: t('You must pick a name for the new dashboard'), }); } else { data.dashboard_title = newDashboardTitle; @@ -104,7 +105,7 @@ class SaveModal extends React.PureComponent { { this.modal = modal; }} triggerNode={this.props.triggerNode} - modalTitle="Save Dashboard" + modalTitle={t('Save Dashboard')} modalBody={ - Overwrite Dashboard [{this.props.dashboard.dashboard_title}] + {t('Overwrite Dashboard [%s]', this.props.dashboard.dashboard_title)} - Save as: + {t('Save as:')} @@ -135,7 +136,7 @@ class SaveModal extends React.PureComponent { bsStyle="primary" onClick={() => { this.saveDashboard(this.state.saveType, this.state.newDashName); }} > - Save + {t('Save')}
} diff --git a/superset/assets/javascripts/dashboard/components/SliceAdder.jsx b/superset/assets/javascripts/dashboard/components/SliceAdder.jsx index a96effef4b196..6729a6e420756 100644 --- a/superset/assets/javascripts/dashboard/components/SliceAdder.jsx +++ b/superset/assets/javascripts/dashboard/components/SliceAdder.jsx @@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; import { BootstrapTable, TableHeaderColumn } from 'react-bootstrap-table'; import ModalTrigger from '../../components/ModalTrigger'; +import { t } from '../../locales'; require('react-bootstrap-table/css/react-bootstrap-table.css'); @@ -133,13 +134,13 @@ class SliceAdder extends React.Component { isKey dataSort > - Name + {t('Name')} - Viz + {t('Viz')} modified} > - Modified + {t('Modified')}
@@ -167,11 +168,11 @@ class SliceAdder extends React.Component { return ( ); } diff --git a/superset/assets/javascripts/dashboard/components/SliceCell.jsx b/superset/assets/javascripts/dashboard/components/SliceCell.jsx index a57fbded639e4..ab968de94bc4e 100644 --- a/superset/assets/javascripts/dashboard/components/SliceCell.jsx +++ b/superset/assets/javascripts/dashboard/components/SliceCell.jsx @@ -2,6 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { t } from '../../locales'; + const propTypes = { slice: PropTypes.object.isRequired, removeSlice: PropTypes.func.isRequired, @@ -18,14 +20,14 @@ function SliceCell({ expandedSlices, removeSlice, slice }) {
- + - + {slice.description && - + - + { - dispatch(setDatasources(data)); - dispatch(fetchDatasourcesSucceeded()); - }, - error(error) { - dispatch(fetchDatasourcesFailed(error.responseJSON.error)); - }, - }); - }; -} - export const TOGGLE_FAVE_STAR = 'TOGGLE_FAVE_STAR'; export function toggleFaveStar(isStarred) { return { type: TOGGLE_FAVE_STAR, isStarred }; diff --git a/superset/assets/javascripts/explore/components/ChartContainer.jsx b/superset/assets/javascripts/explore/components/ChartContainer.jsx index fb0a342840337..831cc11a7c796 100644 --- a/superset/assets/javascripts/explore/components/ChartContainer.jsx +++ b/superset/assets/javascripts/explore/components/ChartContainer.jsx @@ -14,6 +14,7 @@ import Timer from '../../components/Timer'; import { getExploreUrl } from '../exploreUtils'; import { getFormDataFromControls } from '../stores/store'; import CachedLabel from '../../components/CachedLabel'; +import { t } from '../../locales'; const CHART_STATUS_MAP = { failed: 'danger', @@ -166,7 +167,7 @@ class ChartContainer extends React.PureComponent { if (this.props.slice) { title = this.props.slice.slice_name; } else { - title = `[${this.props.table_name}] - untitled`; + title = t('%s - untitled', this.props.table_name); } return title; } @@ -272,7 +273,7 @@ class ChartContainer extends React.PureComponent { - Takes effect on chart immediatly + {t('Takes effect on chart immediatly')} } > diff --git a/superset/assets/javascripts/explore/components/ControlPanelsContainer.jsx b/superset/assets/javascripts/explore/components/ControlPanelsContainer.jsx index 9227390d12516..ac82bb490c31d 100644 --- a/superset/assets/javascripts/explore/components/ControlPanelsContainer.jsx +++ b/superset/assets/javascripts/explore/components/ControlPanelsContainer.jsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { Alert } from 'react-bootstrap'; -import { sectionsToRender } from '../stores/visTypes'; +import { sectionsToRender, visTypes } from '../stores/visTypes'; import ControlPanelSection from './ControlPanelSection'; import ControlRow from './ControlRow'; import Control from './Control'; @@ -28,7 +28,15 @@ class ControlPanelsContainer extends React.Component { this.getControlData = this.getControlData.bind(this); } getControlData(controlName) { - const mapF = controls[controlName].mapStateToProps; + // Identifying mapStateToProps function to apply (logic can't be in store) + let mapF = controls[controlName].mapStateToProps; + + // Looking to find mapStateToProps override for this viz type + const controlOverrides = visTypes[this.props.controls.viz_type.value].controlOverrides || {}; + if (controlOverrides[controlName] && controlOverrides[controlName].mapStateToProps) { + mapF = controlOverrides[controlName].mapStateToProps; + } + // Applying mapStateToProps if needed if (mapF) { return Object.assign({}, this.props.controls[controlName], mapF(this.props.exploreState)); } diff --git a/superset/assets/javascripts/explore/components/DisplayQueryButton.jsx b/superset/assets/javascripts/explore/components/DisplayQueryButton.jsx index 9194ed159f3a0..aec8f43753702 100644 --- a/superset/assets/javascripts/explore/components/DisplayQueryButton.jsx +++ b/superset/assets/javascripts/explore/components/DisplayQueryButton.jsx @@ -4,6 +4,7 @@ import SyntaxHighlighter from 'react-syntax-highlighter'; import { github } from 'react-syntax-highlighter/dist/styles'; import ModalTrigger from './../../components/ModalTrigger'; +import { t } from '../../locales'; const $ = window.$ = require('jquery'); @@ -52,7 +53,7 @@ export default class DisplayQueryButton extends React.PureComponent { }, error: (data) => { this.setState({ - error: data.responseJSON ? data.responseJSON.error : 'Error...', + error: data.responseJSON ? data.responseJSON.error : t('Error...'), isLoading: false, }); }, @@ -88,7 +89,7 @@ export default class DisplayQueryButton extends React.PureComponent { animation={this.props.animation} isButton triggerNode={Query} - modalTitle="Query" + modalTitle={t('Query')} bsSize="large" beforeOpen={this.beforeOpen} modalBody={this.renderModalBody()} diff --git a/superset/assets/javascripts/explore/components/EmbedCodeButton.jsx b/superset/assets/javascripts/explore/components/EmbedCodeButton.jsx index 4de5d94831337..c5615dc25abb5 100644 --- a/superset/assets/javascripts/explore/components/EmbedCodeButton.jsx +++ b/superset/assets/javascripts/explore/components/EmbedCodeButton.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Popover, OverlayTrigger } from 'react-bootstrap'; import CopyToClipboard from './../../components/CopyToClipboard'; +import { t } from '../../locales'; const propTypes = { slice: PropTypes.object.isRequired, @@ -63,7 +64,7 @@ export default class EmbedCodeButton extends React.Component { } + copyNode={} />
@@ -72,7 +73,7 @@ export default class EmbedCodeButton extends React.Component {
- +
- + @@ -38,7 +39,7 @@ export default function ExploreActionButtons({ diff --git a/superset/assets/javascripts/explore/components/ExploreViewContainer.jsx b/superset/assets/javascripts/explore/components/ExploreViewContainer.jsx index f015aa99b6a09..e8c904263bcee 100644 --- a/superset/assets/javascripts/explore/components/ExploreViewContainer.jsx +++ b/superset/assets/javascripts/explore/components/ExploreViewContainer.jsx @@ -33,9 +33,6 @@ class ExploreViewContainer extends React.Component { } componentDidMount() { - if (!this.props.standalone) { - this.props.actions.fetchDatasources(); - } window.addEventListener('resize', this.handleResize.bind(this)); this.triggerQueryIfNeeded(); } diff --git a/superset/assets/javascripts/explore/components/SaveModal.jsx b/superset/assets/javascripts/explore/components/SaveModal.jsx index e41d215d58a8d..6e036261472ff 100644 --- a/superset/assets/javascripts/explore/components/SaveModal.jsx +++ b/superset/assets/javascripts/explore/components/SaveModal.jsx @@ -152,7 +152,7 @@ class SaveModal extends React.Component { checked={this.state.action === 'overwrite'} onChange={this.changeAction.bind(this, 'overwrite')} > - {`${t('Overwrite slice')} ${this.props.slice.slice_name}`} + {t('Overwrite slice %s', this.props.slice.slice_name)} } diff --git a/superset/assets/javascripts/explore/components/URLShortLinkButton.jsx b/superset/assets/javascripts/explore/components/URLShortLinkButton.jsx index 4dbf0f1103a4e..ddae9a2206429 100644 --- a/superset/assets/javascripts/explore/components/URLShortLinkButton.jsx +++ b/superset/assets/javascripts/explore/components/URLShortLinkButton.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { Popover, OverlayTrigger } from 'react-bootstrap'; import CopyToClipboard from './../../components/CopyToClipboard'; import { getShortUrl } from '../../../utils/common'; +import { t } from '../../locales'; const propTypes = { slice: PropTypes.object.isRequired, @@ -28,12 +29,12 @@ export default class URLShortLinkButton extends React.Component { } renderPopover() { - const emailBody = `Check out this slice: ${this.state.shortUrl}`; + const emailBody = t('Check out this slice: %s', this.state.shortUrl); return ( } + copyNode={} />    diff --git a/superset/assets/javascripts/explore/components/controls/BoundsControl.jsx b/superset/assets/javascripts/explore/components/controls/BoundsControl.jsx index 313ab93ae3f8e..776f7a499bde0 100644 --- a/superset/assets/javascripts/explore/components/controls/BoundsControl.jsx +++ b/superset/assets/javascripts/explore/components/controls/BoundsControl.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Col, Row, FormGroup, FormControl } from 'react-bootstrap'; import ControlHeader from '../ControlHeader'; +import { t } from '../../../locales'; const propTypes = { name: PropTypes.string.isRequired, @@ -51,10 +52,10 @@ export default class BoundsControl extends React.Component { const mm = this.state.minMax; const errors = []; if (mm[0] && isNaN(mm[0])) { - errors.push('`Min` value should be numeric or empty'); + errors.push(t('`Min` value should be numeric or empty')); } if (mm[1] && isNaN(mm[1])) { - errors.push('`Max` value should be numeric or empty'); + errors.push(t('`Max` value should be numeric or empty')); } if (errors.length === 0) { this.props.onChange([parseFloat(mm[0]), parseFloat(mm[1])], errors); @@ -71,7 +72,7 @@ export default class BoundsControl extends React.Component { @@ -79,7 +80,7 @@ export default class BoundsControl extends React.Component { diff --git a/superset/assets/javascripts/explore/components/controls/DatasourceControl.jsx b/superset/assets/javascripts/explore/components/controls/DatasourceControl.jsx new file mode 100644 index 0000000000000..20e12a5f9e5dd --- /dev/null +++ b/superset/assets/javascripts/explore/components/controls/DatasourceControl.jsx @@ -0,0 +1,157 @@ +/* global notify */ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Table } from 'reactable'; +import { Label, FormControl, Modal, OverlayTrigger, Tooltip } from 'react-bootstrap'; + +import ControlHeader from '../ControlHeader'; +import InfoTooltipWithTrigger from '../../../components/InfoTooltipWithTrigger'; + +const propTypes = { + description: PropTypes.string, + label: PropTypes.string, + name: PropTypes.string.isRequired, + onChange: PropTypes.func, + value: PropTypes.string.isRequired, + datasource: PropTypes.object.isRequired, +}; + +const defaultProps = { + onChange: () => {}, +}; + +export default class DatasourceControl extends React.PureComponent { + constructor(props) { + super(props); + this.state = { + showModal: false, + filter: '', + loading: true, + }; + this.toggleModal = this.toggleModal.bind(this); + this.changeSearch = this.changeSearch.bind(this); + this.setSearchRef = this.setSearchRef.bind(this); + this.onEnterModal = this.onEnterModal.bind(this); + } + onChange(vizType) { + this.props.onChange(vizType); + this.setState({ showModal: false }); + } + onEnterModal() { + if (this.searchRef) { + this.searchRef.focus(); + } + const url = '/superset/datasources/'; + const that = this; + if (!this.state.datasources) { + $.ajax({ + type: 'GET', + url, + success: (data) => { + const datasources = data.map(ds => ({ + rawName: ds.name, + connection: ds.connection, + schema: ds.schema, + name: ( + + {ds.name} + ), + type: ds.type, + })); + + that.setState({ loading: false, datasources }); + }, + error() { + that.setState({ loading: false }); + notify.error('Something went wrong while fetching the datasource list'); + }, + }); + } + } + setSearchRef(searchRef) { + this.searchRef = searchRef; + } + toggleModal() { + this.setState({ showModal: !this.state.showModal }); + } + changeSearch(event) { + this.setState({ filter: event.target.value }); + } + selectDatasource(datasourceId) { + this.setState({ showModal: false }); + this.props.onChange(datasourceId); + } + render() { + return ( +
+ + Click to point to another datasource + } + > + + + { + window.location = this.props.datasource.edit_url; + }} + /> + + + Select a datasource + + +
+ { this.setSearchRef(ref); }} + type="text" + bsSize="sm" + value={this.state.filter} + placeholder="Search / Filter" + onChange={this.changeSearch} + /> +
+ {this.state.loading && + Loading... + } + {this.state.datasources && + + } + + + ); + } +} + +DatasourceControl.propTypes = propTypes; +DatasourceControl.defaultProps = defaultProps; diff --git a/superset/assets/javascripts/explore/components/controls/Filter.jsx b/superset/assets/javascripts/explore/components/controls/Filter.jsx index bcb0eb9247616..57ce973d04326 100644 --- a/superset/assets/javascripts/explore/components/controls/Filter.jsx +++ b/superset/assets/javascripts/explore/components/controls/Filter.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import Select from 'react-select'; import { Button, Row, Col } from 'react-bootstrap'; import SelectControl from './SelectControl'; +import { t } from '../../../locales'; const $ = window.$ = require('jquery'); @@ -114,7 +115,7 @@ export default class Filter extends React.Component { onChange={this.changeText.bind(this)} value={filter.val} className="form-control input-sm" - placeholder="Filter value" + placeholder={t('Filter value')} /> ); } @@ -143,7 +144,7 @@ export default class Filter extends React.Component { -   Add Filter +   {t('Add Filter')} diff --git a/superset/assets/javascripts/explore/components/controls/SelectControl.jsx b/superset/assets/javascripts/explore/components/controls/SelectControl.jsx index 6998c071b0e92..4c72b5dbd10fc 100644 --- a/superset/assets/javascripts/explore/components/controls/SelectControl.jsx +++ b/superset/assets/javascripts/explore/components/controls/SelectControl.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import Select, { Creatable } from 'react-select'; import ControlHeader from '../ControlHeader'; +import { t } from '../../../locales'; const propTypes = { choices: PropTypes.array, @@ -43,7 +44,8 @@ export default class SelectControl extends React.PureComponent { this.onChange = this.onChange.bind(this); } componentWillReceiveProps(nextProps) { - if (nextProps.choices !== this.props.choices) { + if (nextProps.choices !== this.props.choices || + nextProps.options !== this.props.options) { const options = this.getOptions(nextProps); this.setState({ options }); } @@ -101,7 +103,7 @@ export default class SelectControl extends React.PureComponent { const selectProps = { multi: this.props.multi, name: `select-${this.props.name}`, - placeholder: `Select (${this.state.options.length})`, + placeholder: t('Select %s', this.state.options.length), options: this.state.options, value: this.props.value, valueKey: this.props.valueKey, diff --git a/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx b/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx index 4fe9b7716d891..510ed04b2fb4d 100644 --- a/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx +++ b/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx @@ -11,6 +11,7 @@ import 'brace/theme/textmate'; import ControlHeader from '../ControlHeader'; import ModalTrigger from '../../../components/ModalTrigger'; +import { t } from '../../../locales'; const propTypes = { name: PropTypes.string.isRequired, @@ -58,7 +59,7 @@ export default class TextAreaControl extends React.Component { - Edit {this.props.language} in modal + {t('Edit')} {this.props.language} {t('in modal')} } modalBody={this.renderEditor(true)} diff --git a/superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx b/superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx index 8fdd3f2d5b125..267292e524c82 100644 --- a/superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx +++ b/superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx @@ -1,8 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Label, Row, Col, FormControl, Modal } from 'react-bootstrap'; +import { + Label, Row, Col, FormControl, Modal, OverlayTrigger, + Tooltip } from 'react-bootstrap'; import visTypes from '../../stores/visTypes'; import ControlHeader from '../ControlHeader'; +import { t } from '../../../locales'; const propTypes = { description: PropTypes.string, @@ -25,17 +28,27 @@ export default class VizTypeControl extends React.PureComponent { }; this.toggleModal = this.toggleModal.bind(this); this.changeSearch = this.changeSearch.bind(this); + this.setSearchRef = this.setSearchRef.bind(this); + this.focusSearch = this.focusSearch.bind(this); } onChange(vizType) { this.props.onChange(vizType); this.setState({ showModal: false }); } + setSearchRef(searchRef) { + this.searchRef = searchRef; + } toggleModal() { this.setState({ showModal: !this.state.showModal }); } changeSearch(event) { this.setState({ filter: event.target.value }); } + focusSearch() { + if (this.searchRef) { + this.searchRef.focus(); + } + } renderVizType(vizType) { const vt = vizType; return ( @@ -75,25 +88,36 @@ export default class VizTypeControl extends React.PureComponent {
edit - } /> - - + Click to change visualization type + } + > + + + - Select a visualization type + {t('Select a visualization type')}
{ this.setSearchRef(ref); }} type="text" bsSize="sm" value={this.state.filter} - placeholder="Search / Filter" + placeholder={t('Search / Filter')} onChange={this.changeSearch} />
diff --git a/superset/assets/javascripts/explore/index.jsx b/superset/assets/javascripts/explore/index.jsx index 39ecab08c57dd..0fe4fcaba9524 100644 --- a/superset/assets/javascripts/explore/index.jsx +++ b/superset/assets/javascripts/explore/index.jsx @@ -14,6 +14,7 @@ import ExploreViewContainer from './components/ExploreViewContainer'; import { exploreReducer } from './reducers/exploreReducer'; import { appSetup } from '../common'; import './main.css'; +import '../../stylesheets/reactable-pagination.css'; appSetup(); initJQueryAjax(); diff --git a/superset/assets/javascripts/explore/reducers/exploreReducer.js b/superset/assets/javascripts/explore/reducers/exploreReducer.js index cc214581c6b4a..b3b0d1d6d3b34 100644 --- a/superset/assets/javascripts/explore/reducers/exploreReducer.js +++ b/superset/assets/javascripts/explore/reducers/exploreReducer.js @@ -3,6 +3,7 @@ import { getControlsState, getFormDataFromControls } from '../stores/store'; import * as actions from '../actions/exploreActions'; import { now } from '../../modules/dates'; import { QUERY_TIMEOUT_THRESHOLD } from '../../constants'; +import { t } from '../../locales'; export const exploreReducer = function (state, action) { const actionHandlers = { @@ -29,25 +30,6 @@ export const exploreReducer = function (state, action) { [actions.SET_DATASOURCE]() { return Object.assign({}, state, { datasource: action.datasource }); }, - [actions.FETCH_DATASOURCES_STARTED]() { - return Object.assign({}, state, { isDatasourcesLoading: true }); - }, - - [actions.FETCH_DATASOURCES_SUCCEEDED]() { - return Object.assign({}, state, { isDatasourcesLoading: false }); - }, - - [actions.FETCH_DATASOURCES_FAILED]() { - // todo(alanna) handle failure/error state - return Object.assign({}, state, - { - isDatasourcesLoading: false, - controlPanelAlert: action.error, - }); - }, - [actions.SET_DATASOURCES]() { - return Object.assign({}, state, { datasources: action.datasources }); - }, [actions.REMOVE_CONTROL_PANEL_ALERT]() { return Object.assign({}, state, { controlPanelAlert: null }); }, @@ -57,7 +39,7 @@ export const exploreReducer = function (state, action) { [actions.FETCH_DASHBOARDS_FAILED]() { return Object.assign({}, state, - { saveModalAlert: `fetching dashboards failed for ${action.userId}` }); + { saveModalAlert: t('fetching dashboards failed for %s', action.userId) }); }, [actions.SET_FIELD_VALUE]() { const controls = Object.assign({}, state.controls); @@ -96,13 +78,13 @@ export const exploreReducer = function (state, action) { return Object.assign({}, state, { chartStatus: 'stopped', - chartAlert: 'Updating chart was stopped', + chartAlert: t('Updating chart was stopped'), }); }, [actions.CHART_RENDERING_FAILED]() { return Object.assign({}, state, { chartStatus: 'failed', - chartAlert: 'An error occurred while rendering the visualization: ' + action.error, + chartAlert: t('An error occurred while rendering the visualization: %s', action.error), }); }, [actions.TRIGGER_QUERY]() { @@ -113,17 +95,17 @@ export const exploreReducer = function (state, action) { [actions.CHART_UPDATE_TIMEOUT]() { return Object.assign({}, state, { chartStatus: 'failed', - chartAlert: 'Query timeout - visualization query are set to timeout at ' + - `${QUERY_TIMEOUT_THRESHOLD / 1000} seconds. ` + - 'Perhaps your data has grown, your database is under unusual load, ' + + chartAlert: '' + t('Query timeout') + '' + + t('- visualization query are set to timeout at %s seconds. ', QUERY_TIMEOUT_THRESHOLD / 1000) + + t('Perhaps your data has grown, your database is under unusual load, ' + 'or you are simply querying a data source that is to large to be processed within the timeout range. ' + - 'If that is the case, we recommend that you summarize your data further.', + 'If that is the case, we recommend that you summarize your data further.'), }); }, [actions.CHART_UPDATE_FAILED]() { return Object.assign({}, state, { chartStatus: 'failed', - chartAlert: action.queryResponse ? action.queryResponse.error : 'Network error.', + chartAlert: action.queryResponse ? action.queryResponse.error : t('Network error.'), chartUpdateEndTime: now(), queryResponse: action.queryResponse, }); @@ -146,7 +128,7 @@ export const exploreReducer = function (state, action) { return state; }, [actions.SAVE_SLICE_FAILED]() { - return Object.assign({}, state, { saveModalAlert: 'Failed to save slice' }); + return Object.assign({}, state, { saveModalAlert: t('Failed to save slice') }); }, [actions.SAVE_SLICE_SUCCESS](data) { return Object.assign({}, state, { data }); diff --git a/superset/assets/javascripts/explore/stores/controls.jsx b/superset/assets/javascripts/explore/stores/controls.jsx index 13306932ce013..f17c963597329 100644 --- a/superset/assets/javascripts/explore/stores/controls.jsx +++ b/superset/assets/javascripts/explore/stores/controls.jsx @@ -3,6 +3,7 @@ import { formatSelectOptionsForRange, formatSelectOptions } from '../../modules/ import * as v from '../validators'; import MetricOption from '../../components/MetricOption'; import ColumnOption from '../../components/ColumnOption'; +import { t } from '../../locales'; const D3_FORMAT_DOCS = 'D3 format syntax: https://github.com/d3/d3-format'; @@ -30,35 +31,26 @@ export const D3_TIME_FORMAT_OPTIONS = [ export const controls = { datasource: { - type: 'SelectControl', + type: 'DatasourceControl', label: 'Datasource', - isLoading: true, - clearable: false, default: null, - mapStateToProps: (state) => { - const datasources = state.datasources || []; - return { - choices: datasources, - isLoading: datasources.length === 0, - rightNode: state.datasource ? - edit - : null, - }; - }, - description: '', + description: null, + mapStateToProps: state => ({ + datasource: state.datasource, + }), }, viz_type: { type: 'VizTypeControl', - label: 'Visualization Type', + label: t('Visualization Type'), default: 'table', - description: 'The type of visualization to display', + description: t('The type of visualization to display'), }, metrics: { type: 'SelectControl', multi: true, - label: 'Metrics', + label: t('Metrics'), validators: [v.nonEmpty], valueKey: 'metric_name', optionRenderer: m => , @@ -67,25 +59,25 @@ export const controls = { mapStateToProps: state => ({ options: (state.datasource) ? state.datasource.metrics : [], }), - description: 'One or many metrics to display', + description: t('One or many metrics to display'), }, y_axis_bounds: { type: 'BoundsControl', label: 'Y Axis Bounds', default: [null, null], description: ( - 'Bounds for the Y axis. When left empty, the bounds are ' + + t('Bounds for the Y axis. When left empty, the bounds are ' + 'dynamically defined based on the min/max of the data. Note that ' + - "this feature will only expand the axis range. It won't " + - "narrow the data's extent." + 'this feature will only expand the axis range. It won\'t ' + + 'narrow the data\'s extent.') ), }, order_by_cols: { type: 'SelectControl', multi: true, - label: 'Ordering', + label: t('Ordering'), default: [], - description: 'One or many metrics to display', + description: t('One or many metrics to display'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.order_by_choices : [], }), @@ -95,7 +87,7 @@ export const controls = { type: 'SelectControl', label: 'Metric', clearable: false, - description: 'Choose the metric', + description: t('Choose the metric'), validators: [v.nonEmpty], optionRenderer: m => , valueRenderer: m => , @@ -108,11 +100,11 @@ export const controls = { metric_2: { type: 'SelectControl', - label: 'Right Axis Metric', + label: t('Right Axis Metric'), default: null, validators: [v.nonEmpty], clearable: true, - description: 'Choose a metric for right axis', + description: t('Choose a metric for right axis'), valueKey: 'metric_name', optionRenderer: m => , valueRenderer: m => , @@ -123,7 +115,7 @@ export const controls = { stacked_style: { type: 'SelectControl', - label: 'Stacked Style', + label: t('Stacked Style'), choices: [ ['stack', 'stack'], ['stream', 'stream'], @@ -135,7 +127,7 @@ export const controls = { linear_color_scheme: { type: 'SelectControl', - label: 'Linear Color Scheme', + label: t('Linear Color Scheme'), choices: [ ['fire', 'fire'], ['blue_white_yellow', 'blue/white/yellow'], @@ -148,140 +140,156 @@ export const controls = { normalize_across: { type: 'SelectControl', - label: 'Normalize Across', + label: t('Normalize Across'), choices: [ ['heatmap', 'heatmap'], ['x', 'x'], ['y', 'y'], ], default: 'heatmap', - description: 'Color will be rendered based on a ratio ' + + description: t('Color will be rendered based on a ratio ' + 'of the cell against the sum of across this ' + - 'criteria', + 'criteria'), }, horizon_color_scale: { type: 'SelectControl', - label: 'Horizon Color Scale', + label: t('Horizon Color Scale'), choices: [ ['series', 'series'], ['overall', 'overall'], ['change', 'change'], ], default: 'series', - description: 'Defines how the color are attributed.', + description: t('Defines how the color are attributed.'), }, canvas_image_rendering: { type: 'SelectControl', - label: 'Rendering', + label: t('Rendering'), choices: [ ['pixelated', 'pixelated (Sharp)'], ['auto', 'auto (Smooth)'], ], default: 'pixelated', - description: 'image-rendering CSS attribute of the canvas object that ' + - 'defines how the browser scales up the image', + description: t('image-rendering CSS attribute of the canvas object that ' + + 'defines how the browser scales up the image'), }, xscale_interval: { type: 'SelectControl', - label: 'XScale Interval', + label: t('XScale Interval'), choices: formatSelectOptionsForRange(1, 50), default: '1', - description: 'Number of steps to take between ticks when ' + - 'displaying the X scale', + description: t('Number of steps to take between ticks when ' + + 'displaying the X scale'), }, yscale_interval: { type: 'SelectControl', - label: 'YScale Interval', + label: t('YScale Interval'), choices: formatSelectOptionsForRange(1, 50), default: null, - description: 'Number of steps to take between ticks when ' + - 'displaying the Y scale', + description: t('Number of steps to take between ticks when ' + + 'displaying the Y scale'), }, include_time: { type: 'CheckboxControl', - label: 'Include Time', - description: 'Whether to include the time granularity as defined in the time section', + label: t('Include Time'), + description: t('Whether to include the time granularity as defined in the time section'), default: false, }, bar_stacked: { type: 'CheckboxControl', - label: 'Stacked Bars', + label: t('Stacked Bars'), renderTrigger: true, default: false, description: null, }, + pivot_margins: { + type: 'CheckboxControl', + label: 'Show totals', + renderTrigger: false, + default: true, + description: 'Display total row/column', + }, + show_markers: { type: 'CheckboxControl', - label: 'Show Markers', + label: t('Show Markers'), renderTrigger: true, default: false, - description: 'Show data points as circle markers on the lines', + description: t('Show data points as circle markers on the lines'), }, show_bar_value: { type: 'CheckboxControl', - label: 'Bar Values', + label: t('Bar Values'), default: false, renderTrigger: true, - description: 'Show the value on top of the bar', + description: ('Show the value on top of the bar'), }, order_bars: { type: 'CheckboxControl', - label: 'Sort Bars', + label: t('Sort Bars'), + default: false, + description: t('Sort bars by x labels.'), + }, + + combine_metric: { + type: 'CheckboxControl', + label: 'Combine Metrics', default: false, - description: 'Sort bars by x labels.', + description: 'Display metrics side by side within each column, as ' + + 'opposed to each column being displayed side by side for each metric.', }, show_controls: { type: 'CheckboxControl', - label: 'Extra Controls', + label: t('Extra Controls'), renderTrigger: true, default: false, - description: 'Whether to show extra controls or not. Extra controls ' + + description: t('Whether to show extra controls or not. Extra controls ' + 'include things like making mulitBar charts stacked ' + - 'or side by side.', + 'or side by side.'), }, reduce_x_ticks: { type: 'CheckboxControl', - label: 'Reduce X ticks', + label: t('Reduce X ticks'), renderTrigger: true, default: false, - description: 'Reduces the number of X axis ticks to be rendered. ' + + description: t('Reduces the number of X axis ticks to be rendered. ' + 'If true, the x axis wont overflow and labels may be ' + 'missing. If false, a minimum width will be applied ' + 'to columns and the width may overflow into an ' + - 'horizontal scroll.', + 'horizontal scroll.'), }, include_series: { type: 'CheckboxControl', - label: 'Include Series', + label: t('Include Series'), renderTrigger: true, default: false, - description: 'Include series name as an axis', + description: t('Include series name as an axis'), }, secondary_metric: { type: 'SelectControl', - label: 'Color Metric', + label: t('Color Metric'), default: null, - description: 'A metric to use for color', + description: t('A metric to use for color'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.metrics_combo : [], }), }, select_country: { type: 'SelectControl', - label: 'Country Name', + label: t('Country Name'), default: 'France', choices: [ 'Belgium', @@ -300,11 +308,11 @@ export const controls = { 'Ukraine', 'Usa', ].map(s => [s, s]), - description: 'The name of country that Superset should display', + description: t('The name of country that Superset should display'), }, country_fieldtype: { type: 'SelectControl', - label: 'Country Field Type', + label: t('Country Field Type'), default: 'cca2', choices: [ ['name', 'Full name'], @@ -312,30 +320,30 @@ export const controls = { ['cca2', 'code ISO 3166-1 alpha-2 (cca2)'], ['cca3', 'code ISO 3166-1 alpha-3 (cca3)'], ], - description: 'The country code standard that Superset should expect ' + - 'to find in the [country] column', + description: t('The country code standard that Superset should expect ' + + 'to find in the [country] column'), }, groupby: { type: 'SelectControl', multi: true, - label: 'Group by', + label: t('Group by'), default: [], - description: 'One or many controls to group by', + description: t('One or many controls to group by'), optionRenderer: c => , valueRenderer: c => , valueKey: 'column_name', mapStateToProps: state => ({ - options: (state.datasource) ? state.datasource.columns : [], + options: (state.datasource) ? state.datasource.columns.filter(c => c.groupby) : [], }), }, columns: { type: 'SelectControl', multi: true, - label: 'Columns', + label: t('Columns'), default: [], - description: 'One or many controls to pivot as columns', + description: ('One or many controls to pivot as columns'), optionRenderer: c => , valueRenderer: c => , valueKey: 'column_name', @@ -347,9 +355,9 @@ export const controls = { all_columns: { type: 'SelectControl', multi: true, - label: 'Columns', + label: t('Columns'), default: [], - description: 'Columns to display', + description: t('Columns to display'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.all_cols : [], }), @@ -357,9 +365,9 @@ export const controls = { all_columns_x: { type: 'SelectControl', - label: 'X', + label: t('X'), default: null, - description: 'Columns to display', + description: t('Columns to display'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.all_cols : [], }), @@ -367,9 +375,9 @@ export const controls = { all_columns_y: { type: 'SelectControl', - label: 'Y', + label: t('Y'), default: null, - description: 'Columns to display', + description: t('Columns to display'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.all_cols : [], }), @@ -378,14 +386,14 @@ export const controls = { druid_time_origin: { type: 'SelectControl', freeForm: true, - label: 'Origin', + label: t('Origin'), choices: [ ['', 'default'], ['now', 'now'], ], default: null, - description: 'Defines the origin where time buckets start, ' + - 'accepts natural dates as in `now`, `sunday` or `1970-01-01`', + description: t('Defines the origin where time buckets start, ' + + 'accepts natural dates as in `now`, `sunday` or `1970-01-01`'), }, bottom_margin: { @@ -394,13 +402,13 @@ export const controls = { label: 'Bottom Margin', choices: formatSelectOptions(['auto', 50, 75, 100, 125, 150, 200]), default: 'auto', - description: 'Bottom marging, in pixels, allowing for more room for axis labels', + description: t('Bottom marging, in pixels, allowing for more room for axis labels'), }, granularity: { type: 'SelectControl', freeForm: true, - label: 'Time Granularity', + label: t('Time Granularity'), default: 'one day', choices: formatSelectOptions([ 'all', @@ -417,41 +425,41 @@ export const controls = { 'week_ending_saturday', 'month', ]), - description: 'The time granularity for the visualization. Note that you ' + + description: t('The time granularity for the visualization. Note that you ' + 'can type and use simple natural language as in `10 seconds`, ' + - '`1 day` or `56 weeks`', + '`1 day` or `56 weeks`'), }, domain_granularity: { type: 'SelectControl', - label: 'Domain', + label: t('Domain'), default: 'month', choices: formatSelectOptions(['hour', 'day', 'week', 'month', 'year']), - description: 'The time unit used for the grouping of blocks', + description: t('The time unit used for the grouping of blocks'), }, subdomain_granularity: { type: 'SelectControl', - label: 'Subdomain', + label: t('Subdomain'), default: 'day', choices: formatSelectOptions(['min', 'hour', 'day', 'week', 'month']), - description: 'The time unit for each block. Should be a smaller unit than ' + - 'domain_granularity. Should be larger or equal to Time Grain', + description: t('The time unit for each block. Should be a smaller unit than ' + + 'domain_granularity. Should be larger or equal to Time Grain'), }, link_length: { type: 'SelectControl', freeForm: true, - label: 'Link Length', + label: t('Link Length'), default: '200', choices: formatSelectOptions(['10', '25', '50', '75', '100', '150', '200', '250']), - description: 'Link length in the force layout', + description: t('Link length in the force layout'), }, charge: { type: 'SelectControl', freeForm: true, - label: 'Charge', + label: t('Charge'), default: '-500', choices: formatSelectOptions([ '-50', @@ -465,19 +473,19 @@ export const controls = { '-2500', '-5000', ]), - description: 'Charge in the force layout', + description: t('Charge in the force layout'), }, granularity_sqla: { type: 'SelectControl', - label: 'Time Column', + label: t('Time Column'), default: control => control.choices && control.choices.length > 0 ? control.choices[0][0] : null, - description: 'The time column for the visualization. Note that you ' + + description: t('The time column for the visualization. Note that you ' + 'can define arbitrary expression that return a DATETIME ' + 'column in the table or. Also note that the ' + 'filter below is applied against this column or ' + - 'expression', + 'expression'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.granularity_sqla : [], }), @@ -485,13 +493,13 @@ export const controls = { time_grain_sqla: { type: 'SelectControl', - label: 'Time Grain', + label: t('Time Grain'), default: control => control.choices && control.choices.length ? control.choices[0][0] : null, - description: 'The time granularity for the visualization. This ' + + description: t('The time granularity for the visualization. This ' + 'applies a date transformation to alter ' + 'your time column and defines a new time granularity. ' + 'The options here are defined on a per database ' + - 'engine basis in the Superset source code.', + 'engine basis in the Superset source code.'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.time_grain_sqla : null, }), @@ -500,34 +508,34 @@ export const controls = { resample_rule: { type: 'SelectControl', freeForm: true, - label: 'Resample Rule', + label: t('Resample Rule'), default: null, choices: formatSelectOptions(['', '1T', '1H', '1D', '7D', '1M', '1AS']), - description: 'Pandas resample rule', + description: t('Pandas resample rule'), }, resample_how: { type: 'SelectControl', freeForm: true, - label: 'Resample How', + label: t('Resample How'), default: null, choices: formatSelectOptions(['', 'mean', 'sum', 'median']), - description: 'Pandas resample how', + description: t('Pandas resample how'), }, resample_fillmethod: { type: 'SelectControl', freeForm: true, - label: 'Resample Fill Method', + label: t('Resample Fill Method'), default: null, choices: formatSelectOptions(['', 'ffill', 'bfill']), - description: 'Pandas resample fill method', + description: t('Pandas resample fill method'), }, since: { type: 'SelectControl', freeForm: true, - label: 'Since', + label: t('Since'), default: '7 days ago', choices: formatSelectOptions([ '1 hour ago', @@ -539,14 +547,14 @@ export const controls = { '1 year ago', '100 year ago', ]), - description: 'Timestamp from filter. This supports free form typing and ' + - 'natural language as in `1 day ago`, `28 days` or `3 years`', + description: t('Timestamp from filter. This supports free form typing and ' + + 'natural language as in `1 day ago`, `28 days` or `3 years`'), }, until: { type: 'SelectControl', freeForm: true, - label: 'Until', + label: t('Until'), default: 'now', choices: formatSelectOptions([ 'now', @@ -561,7 +569,7 @@ export const controls = { max_bubble_size: { type: 'SelectControl', freeForm: true, - label: 'Max Bubble Size', + label: t('Max Bubble Size'), default: '25', choices: formatSelectOptions(['5', '10', '15', '25', '50', '75', '100']), }, @@ -569,9 +577,9 @@ export const controls = { whisker_options: { type: 'SelectControl', freeForm: true, - label: 'Whisker/outlier options', + label: t('Whisker/outlier options'), default: 'Tukey', - description: 'Determines how whiskers and outliers are calculated.', + description: t('Determines how whiskers and outliers are calculated.'), choices: formatSelectOptions([ 'Tukey', 'Min/max (no outliers)', @@ -582,16 +590,16 @@ export const controls = { treemap_ratio: { type: 'TextControl', - label: 'Ratio', + label: t('Ratio'), isFloat: true, default: 0.5 * (1 + Math.sqrt(5)), // d3 default, golden ratio - description: 'Target aspect ratio for treemap tiles.', + description: t('Target aspect ratio for treemap tiles.'), }, number_format: { type: 'SelectControl', freeForm: true, - label: 'Number format', + label: t('Number format'), renderTrigger: true, default: '.3s', choices: D3_FORMAT_OPTIONS, @@ -601,7 +609,7 @@ export const controls = { row_limit: { type: 'SelectControl', freeForm: true, - label: 'Row limit', + label: t('Row limit'), default: null, choices: formatSelectOptions(ROW_LIMIT_OPTIONS), }, @@ -609,17 +617,17 @@ export const controls = { limit: { type: 'SelectControl', freeForm: true, - label: 'Series limit', + label: t('Series limit'), choices: formatSelectOptions(SERIES_LIMITS), default: 50, - description: 'Limits the number of time series that get displayed', + description: t('Limits the number of time series that get displayed'), }, timeseries_limit_metric: { type: 'SelectControl', - label: 'Sort By', + label: t('Sort By'), default: null, - description: 'Metric used to define the top series', + description: t('Metric used to define the top series'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.metrics_combo : [], }), @@ -627,28 +635,28 @@ export const controls = { rolling_type: { type: 'SelectControl', - label: 'Rolling', + label: t('Rolling'), default: 'None', choices: formatSelectOptions(['None', 'mean', 'sum', 'std', 'cumsum']), - description: 'Defines a rolling window function to apply, works along ' + - 'with the [Periods] text box', + description: t('Defines a rolling window function to apply, works along ' + + 'with the [Periods] text box'), }, rolling_periods: { type: 'TextControl', - label: 'Periods', + label: t('Periods'), isInt: true, - description: 'Defines the size of the rolling window function, ' + - 'relative to the time granularity selected', + description: t('Defines the size of the rolling window function, ' + + 'relative to the time granularity selected'), }, series: { type: 'SelectControl', - label: 'Series', + label: t('Series'), default: null, - description: 'Defines the grouping of entities. ' + + description: t('Defines the grouping of entities. ' + 'Each series is shown as a specific color on the chart and ' + - 'has a legend toggle', + 'has a legend toggle'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.gb_cols : [], }), @@ -656,10 +664,10 @@ export const controls = { entity: { type: 'SelectControl', - label: 'Entity', + label: t('Entity'), default: null, validators: [v.nonEmpty], - description: 'This defines the element to be plotted on the chart', + description: t('This defines the element to be plotted on the chart'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.gb_cols : [], }), @@ -667,8 +675,8 @@ export const controls = { x: { type: 'SelectControl', - label: 'X Axis', - description: 'Metric assigned to the [X] axis', + label: t('X Axis'), + description: t('Metric assigned to the [X] axis'), default: null, validators: [v.nonEmpty], optionRenderer: m => , @@ -681,10 +689,10 @@ export const controls = { y: { type: 'SelectControl', - label: 'Y Axis', + label: t('Y Axis'), default: null, validators: [v.nonEmpty], - description: 'Metric assigned to the [Y] axis', + description: t('Metric assigned to the [Y] axis'), optionRenderer: m => , valueRenderer: m => , valueKey: 'metric_name', @@ -695,7 +703,7 @@ export const controls = { size: { type: 'SelectControl', - label: 'Bubble Size', + label: t('Bubble Size'), default: null, validators: [v.nonEmpty], optionRenderer: m => , @@ -708,92 +716,92 @@ export const controls = { url: { type: 'TextControl', - label: 'URL', - description: 'The URL, this control is templated, so you can integrate ' + - '{{ width }} and/or {{ height }} in your URL string.', + label: t('URL'), + description: t('The URL, this control is templated, so you can integrate ' + + '{{ width }} and/or {{ height }} in your URL string.'), default: 'https://www.youtube.com/embed/AdSZJzb-aX8', }, x_axis_label: { type: 'TextControl', - label: 'X Axis Label', + label: t('X Axis Label'), renderTrigger: true, default: '', }, y_axis_label: { type: 'TextControl', - label: 'Y Axis Label', + label: t('Y Axis Label'), renderTrigger: true, default: '', }, where: { type: 'TextControl', - label: 'Custom WHERE clause', + label: t('Custom WHERE clause'), default: '', - description: 'The text in this box gets included in your query\'s WHERE ' + + description: t('The text in this box gets included in your query\'s WHERE ' + 'clause, as an AND to other criteria. You can include ' + 'complex expression, parenthesis and anything else ' + - 'supported by the backend it is directed towards.', + 'supported by the backend it is directed towards.'), }, having: { type: 'TextControl', - label: 'Custom HAVING clause', + label: t('Custom HAVING clause'), default: '', - description: 'The text in this box gets included in your query\'s HAVING ' + + description: t('The text in this box gets included in your query\'s HAVING ' + 'clause, as an AND to other criteria. You can include ' + 'complex expression, parenthesis and anything else ' + - 'supported by the backend it is directed towards.', + 'supported by the backend it is directed towards.'), }, compare_lag: { type: 'TextControl', - label: 'Comparison Period Lag', + label: t('Comparison Period Lag'), isInt: true, - description: 'Based on granularity, number of time periods to compare against', + description: t('Based on granularity, number of time periods to compare against'), }, compare_suffix: { type: 'TextControl', - label: 'Comparison suffix', - description: 'Suffix to apply after the percentage display', + label: t('Comparison suffix'), + description: t('Suffix to apply after the percentage display'), }, table_timestamp_format: { type: 'SelectControl', freeForm: true, - label: 'Table Timestamp Format', + label: t('Table Timestamp Format'), default: '%Y-%m-%d %H:%M:%S', validators: [v.nonEmpty], clearable: false, choices: D3_TIME_FORMAT_OPTIONS, - description: 'Timestamp Format', + description: t('Timestamp Format'), }, series_height: { type: 'SelectControl', freeForm: true, - label: 'Series Height', + label: t('Series Height'), default: '25', choices: formatSelectOptions(['10', '25', '40', '50', '75', '100', '150', '200']), - description: 'Pixel height of each series', + description: t('Pixel height of each series'), }, page_length: { type: 'SelectControl', freeForm: true, - label: 'Page Length', + label: t('Page Length'), default: 0, choices: formatSelectOptions([0, 10, 25, 40, 50, 75, 100, 150, 200]), - description: 'Rows per page, 0 means no pagination', + description: t('Rows per page, 0 means no pagination'), }, x_axis_format: { type: 'SelectControl', freeForm: true, - label: 'X Axis Format', + label: t('X Axis Format'), renderTrigger: true, default: '.3s', choices: D3_FORMAT_OPTIONS, @@ -803,7 +811,7 @@ export const controls = { x_axis_time_format: { type: 'SelectControl', freeForm: true, - label: 'X Axis Format', + label: t('X Axis Format'), renderTrigger: true, default: 'smart_date', choices: D3_TIME_FORMAT_OPTIONS, @@ -813,7 +821,7 @@ export const controls = { y_axis_format: { type: 'SelectControl', freeForm: true, - label: 'Y Axis Format', + label: t('Y Axis Format'), renderTrigger: true, default: '.3s', choices: D3_FORMAT_OPTIONS, @@ -823,7 +831,7 @@ export const controls = { y_axis_2_format: { type: 'SelectControl', freeForm: true, - label: 'Right Axis Format', + label: t('Right Axis Format'), default: '.3s', choices: D3_FORMAT_OPTIONS, description: D3_FORMAT_DOCS, @@ -831,48 +839,48 @@ export const controls = { markup_type: { type: 'SelectControl', - label: 'Markup Type', + label: t('Markup Type'), clearable: false, choices: formatSelectOptions(['markdown', 'html']), default: 'markdown', validators: [v.nonEmpty], - description: 'Pick your favorite markup language', + description: t('Pick your favorite markup language'), }, rotation: { type: 'SelectControl', - label: 'Rotation', + label: t('Rotation'), choices: formatSelectOptions(['random', 'flat', 'square']), default: 'random', - description: 'Rotation to apply to words in the cloud', + description: t('Rotation to apply to words in the cloud'), }, line_interpolation: { type: 'SelectControl', - label: 'Line Style', + label: t('Line Style'), renderTrigger: true, choices: formatSelectOptions(['linear', 'basis', 'cardinal', 'monotone', 'step-before', 'step-after']), default: 'linear', - description: 'Line interpolation as defined by d3.js', + description: t('Line interpolation as defined by d3.js'), }, pie_label_type: { type: 'SelectControl', - label: 'Label Type', + label: t('Label Type'), default: 'key', choices: [ ['key', 'Category Name'], ['value', 'Value'], ['percent', 'Percentage'], ], - description: 'What should be shown on the label?', + description: t('What should be shown on the label?'), }, code: { type: 'TextAreaControl', - label: 'Code', - description: 'Put your code here', + label: t('Code'), + description: t('Put your code here'), mapStateToProps: state => ({ language: state.controls && state.controls.markup_type ? state.controls.markup_type.value : 'markdown', }), @@ -881,7 +889,7 @@ export const controls = { pandas_aggfunc: { type: 'SelectControl', - label: 'Aggregation function', + label: t('Aggregation function'), clearable: false, choices: formatSelectOptions([ 'sum', @@ -893,189 +901,189 @@ export const controls = { 'var', ]), default: 'sum', - description: 'Aggregate function to apply when pivoting and ' + - 'computing the total rows and columns', + description: t('Aggregate function to apply when pivoting and ' + + 'computing the total rows and columns'), }, size_from: { type: 'TextControl', isInt: true, - label: 'Font Size From', + label: t('Font Size From'), default: '20', - description: 'Font size for the smallest value in the list', + description: t('Font size for the smallest value in the list'), }, size_to: { type: 'TextControl', isInt: true, - label: 'Font Size To', + label: t('Font Size To'), default: '150', - description: 'Font size for the biggest value in the list', + description: t('Font size for the biggest value in the list'), }, instant_filtering: { type: 'CheckboxControl', - label: 'Instant Filtering', + label: t('Instant Filtering'), renderTrigger: true, default: true, description: ( - 'Whether to apply filters as they change, or wait for' + - 'users to hit an [Apply] button' + t('Whether to apply filters as they change, or wait for' + + 'users to hit an [Apply] button') ), }, show_brush: { type: 'CheckboxControl', - label: 'Range Filter', + label: t('Range Filter'), renderTrigger: true, default: false, - description: 'Whether to display the time range interactive selector', + description: t('Whether to display the time range interactive selector'), }, date_filter: { type: 'CheckboxControl', - label: 'Date Filter', + label: t('Date Filter'), default: false, - description: 'Whether to include a time filter', + description: t('Whether to include a time filter'), }, show_datatable: { type: 'CheckboxControl', - label: 'Data Table', + label: t('Data Table'), default: false, - description: 'Whether to display the interactive data table', + description: t('Whether to display the interactive data table'), }, include_search: { type: 'CheckboxControl', - label: 'Search Box', + label: t('Search Box'), renderTrigger: true, default: false, - description: 'Whether to include a client side search box', + description: t('Whether to include a client side search box'), }, table_filter: { type: 'CheckboxControl', - label: 'Table Filter', + label: t('Table Filter'), default: false, - description: 'Whether to apply filter when table cell is clicked', + description: t('Whether to apply filter when table cell is clicked'), }, show_bubbles: { type: 'CheckboxControl', - label: 'Show Bubbles', + label: t('Show Bubbles'), default: false, renderTrigger: true, - description: 'Whether to display bubbles on top of countries', + description: t('Whether to display bubbles on top of countries'), }, show_legend: { type: 'CheckboxControl', - label: 'Legend', + label: t('Legend'), renderTrigger: true, default: true, - description: 'Whether to display the legend (toggles)', + description: t('Whether to display the legend (toggles)'), }, x_axis_showminmax: { type: 'CheckboxControl', - label: 'X bounds', + label: t('X bounds'), renderTrigger: true, default: true, - description: 'Whether to display the min and max values of the X axis', + description: t('Whether to display the min and max values of the X axis'), }, rich_tooltip: { type: 'CheckboxControl', - label: 'Rich Tooltip', + label: t('Rich Tooltip'), renderTrigger: true, default: true, - description: 'The rich tooltip shows a list of all series for that ' + - 'point in time', + description: t('The rich tooltip shows a list of all series for that ' + + 'point in time'), }, y_log_scale: { type: 'CheckboxControl', - label: 'Y Log Scale', + label: t('Y Log Scale'), default: false, renderTrigger: true, - description: 'Use a log scale for the Y axis', + description: t('Use a log scale for the Y axis'), }, x_log_scale: { type: 'CheckboxControl', - label: 'X Log Scale', + label: t('X Log Scale'), default: false, renderTrigger: true, - description: 'Use a log scale for the X axis', + description: t('Use a log scale for the X axis'), }, donut: { type: 'CheckboxControl', - label: 'Donut', + label: t('Donut'), default: false, renderTrigger: true, - description: 'Do you want a donut or a pie?', + description: t('Do you want a donut or a pie?'), }, labels_outside: { type: 'CheckboxControl', - label: 'Put labels outside', + label: t('Put labels outside'), default: true, renderTrigger: true, - description: 'Put the labels outside the pie?', + description: t('Put the labels outside the pie?'), }, contribution: { type: 'CheckboxControl', - label: 'Contribution', + label: t('Contribution'), default: false, - description: 'Compute the contribution to the total', + description: t('Compute the contribution to the total'), }, num_period_compare: { type: 'TextControl', - label: 'Period Ratio', + label: t('Period Ratio'), default: '', isInt: true, - description: '[integer] Number of period to compare against, ' + - 'this is relative to the granularity selected', + description: t('[integer] Number of period to compare against, ' + + 'this is relative to the granularity selected'), }, period_ratio_type: { type: 'SelectControl', - label: 'Period Ratio Type', + label: t('Period Ratio Type'), default: 'growth', choices: formatSelectOptions(['factor', 'growth', 'value']), - description: '`factor` means (new/previous), `growth` is ' + - '((new/previous) - 1), `value` is (new-previous)', + description: t('`factor` means (new/previous), `growth` is ' + + '((new/previous) - 1), `value` is (new-previous)'), }, time_compare: { type: 'TextControl', - label: 'Time Shift', + label: t('Time Shift'), default: null, - description: 'Overlay a timeseries from a ' + + description: t('Overlay a timeseries from a ' + 'relative time period. Expects relative time delta ' + 'in natural language (example: 24 hours, 7 days, ' + - '56 weeks, 365 days)', + '56 weeks, 365 days)'), }, subheader: { type: 'TextControl', - label: 'Subheader', - description: 'Description text that shows up below your Big Number', + label: t('Subheader'), + description: t('Description text that shows up below your Big Number'), }, mapbox_label: { type: 'SelectControl', multi: true, - label: 'label', + label: t('label'), default: [], - description: '`count` is COUNT(*) if a group by is used. ' + + description: t('`count` is COUNT(*) if a group by is used. ' + 'Numerical columns will be aggregated with the aggregator. ' + 'Non-numerical columns will be used to label points. ' + - 'Leave empty to get a count of points in each cluster.', + 'Leave empty to get a count of points in each cluster.'), mapStateToProps: state => ({ choices: (state.datasource) ? state.datasource.all_cols : [], }), @@ -1083,7 +1091,7 @@ export const controls = { mapbox_style: { type: 'SelectControl', - label: 'Map Style', + label: t('Map Style'), choices: [ ['mapbox://styles/mapbox/streets-v9', 'Streets'], ['mapbox://styles/mapbox/dark-v9', 'Dark'], @@ -1093,13 +1101,13 @@ export const controls = { ['mapbox://styles/mapbox/outdoors-v9', 'Outdoors'], ], default: 'mapbox://styles/mapbox/streets-v9', - description: 'Base layer map style', + description: t('Base layer map style'), }, clustering_radius: { type: 'SelectControl', freeForm: true, - label: 'Clustering Radius', + label: t('Clustering Radius'), default: '60', choices: formatSelectOptions([ '0', @@ -1112,18 +1120,18 @@ export const controls = { '500', '1000', ]), - description: 'The radius (in pixels) the algorithm uses to define a cluster. ' + + description: t('The radius (in pixels) the algorithm uses to define a cluster. ' + 'Choose 0 to turn off clustering, but beware that a large ' + - 'number of points (>1000) will cause lag.', + 'number of points (>1000) will cause lag.'), }, point_radius: { type: 'SelectControl', - label: 'Point Radius', + label: t('Point Radius'), default: 'Auto', - description: 'The radius of individual points (ones that are not in a cluster). ' + + description: t('The radius of individual points (ones that are not in a cluster). ' + 'Either a numerical column or `Auto`, which scales the point based ' + - 'on the largest cluster', + 'on the largest cluster'), mapStateToProps: state => ({ choices: [].concat([['Auto', 'Auto']], state.datasource.all_cols), }), @@ -1131,59 +1139,59 @@ export const controls = { point_radius_unit: { type: 'SelectControl', - label: 'Point Radius Unit', + label: t('Point Radius Unit'), default: 'Pixels', choices: formatSelectOptions(['Pixels', 'Miles', 'Kilometers']), - description: 'The unit of measure for the specified point radius', + description: t('The unit of measure for the specified point radius'), }, global_opacity: { type: 'TextControl', - label: 'Opacity', + label: t('Opacity'), default: 1, isFloat: true, - description: 'Opacity of all clusters, points, and labels. ' + - 'Between 0 and 1.', + description: t('Opacity of all clusters, points, and labels. ' + + 'Between 0 and 1.'), }, viewport_zoom: { type: 'TextControl', - label: 'Zoom', + label: t('Zoom'), isFloat: true, default: 11, - description: 'Zoom level of the map', + description: t('Zoom level of the map'), places: 8, }, viewport_latitude: { type: 'TextControl', - label: 'Default latitude', + label: t('Default latitude'), default: 37.772123, isFloat: true, - description: 'Latitude of default viewport', + description: t('Latitude of default viewport'), places: 8, }, viewport_longitude: { type: 'TextControl', - label: 'Default longitude', + label: t('Default longitude'), default: -122.405293, isFloat: true, - description: 'Longitude of default viewport', + description: t('Longitude of default viewport'), places: 8, }, render_while_dragging: { type: 'CheckboxControl', - label: 'Live render', + label: t('Live render'), default: true, - description: 'Points and clusters will update as viewport is being changed', + description: t('Points and clusters will update as viewport is being changed'), }, mapbox_color: { type: 'SelectControl', freeForm: true, - label: 'RGB Color', + label: t('RGB Color'), default: 'rgb(0, 122, 135)', choices: [ ['rgb(0, 139, 139)', 'Dark Cyan'], @@ -1193,49 +1201,49 @@ export const controls = { ['rgb(220, 20, 60)', 'Crimson'], ['rgb(34, 139, 34)', 'Forest Green'], ], - description: 'The color for points and clusters in RGB', + description: t('The color for points and clusters in RGB'), }, ranges: { type: 'TextControl', - label: 'Ranges', + label: t('Ranges'), default: '', - description: 'Ranges to highlight with shading', + description: t('Ranges to highlight with shading'), }, range_labels: { type: 'TextControl', - label: 'Range labels', + label: t('Range labels'), default: '', - description: 'Labels for the ranges', + description: t('Labels for the ranges'), }, markers: { type: 'TextControl', - label: 'Markers', + label: t('Markers'), default: '', - description: 'List of values to mark with triangles', + description: t('List of values to mark with triangles'), }, marker_labels: { type: 'TextControl', - label: 'Marker labels', + label: t('Marker labels'), default: '', - description: 'Labels for the markers', + description: t('Labels for the markers'), }, marker_lines: { type: 'TextControl', - label: 'Marker lines', + label: t('Marker lines'), default: '', - description: 'List of values to mark with lines', + description: t('List of values to mark with lines'), }, marker_line_labels: { type: 'TextControl', - label: 'Marker line labels', + label: t('Marker line labels'), default: '', - description: 'Labels for the marker lines', + description: t('Labels for the marker lines'), }, filters: { @@ -1262,34 +1270,34 @@ export const controls = { slice_id: { type: 'HiddenControl', - label: 'Slice ID', + label: t('Slice ID'), hidden: true, - description: 'The id of the active slice', + description: t('The id of the active slice'), }, cache_timeout: { type: 'HiddenControl', - label: 'Cache Timeout (seconds)', + label: t('Cache Timeout (seconds)'), hidden: true, - description: 'The number of seconds before expiring the cache', + description: t('The number of seconds before expiring the cache'), }, order_by_entity: { type: 'CheckboxControl', - label: 'Order by entity id', - description: 'Important! Select this if the table is not already sorted by entity id, ' + - 'else there is no guarantee that all events for each entity are returned.', + label: t('Order by entity id'), + description: t('Important! Select this if the table is not already sorted by entity id, ' + + 'else there is no guarantee that all events for each entity are returned.'), default: true, }, min_leaf_node_event_count: { type: 'SelectControl', freeForm: false, - label: 'Minimum leaf node event count', + label: t('Minimum leaf node event count'), default: 1, choices: formatSelectOptionsForRange(1, 10), - description: 'Leaf nodes that represent fewer than this number of events will be initially ' + - 'hidden in the visualization', + description: t('Leaf nodes that represent fewer than this number of events will be initially ' + + 'hidden in the visualization'), }, }; export default controls; diff --git a/superset/assets/javascripts/explore/stores/visTypes.js b/superset/assets/javascripts/explore/stores/visTypes.js index bdebf076420ae..fd9c8e35f7dea 100644 --- a/superset/assets/javascripts/explore/stores/visTypes.js +++ b/superset/assets/javascripts/explore/stores/visTypes.js @@ -1,17 +1,18 @@ import { D3_TIME_FORMAT_OPTIONS } from './controls'; import * as v from '../validators'; +import { t } from '../../locales'; export const sections = { druidTimeSeries: { - label: 'Time', - description: 'Time related form attributes', + label: t('Time'), + description: t('Time related form attributes'), controlSetRows: [ ['granularity', 'druid_time_origin'], ['since', 'until'], ], }, datasourceAndVizType: { - label: 'Datasource & Chart Type', + label: t('Datasource & Chart Type'), controlSetRows: [ ['datasource'], ['viz_type'], @@ -19,20 +20,20 @@ export const sections = { ], }, sqlaTimeSeries: { - label: 'Time', - description: 'Time related form attributes', + label: t('Time'), + description: t('Time related form attributes'), controlSetRows: [ ['granularity_sqla', 'time_grain_sqla'], ['since', 'until'], ], }, sqlClause: { - label: 'SQL', + label: t('SQL'), controlSetRows: [ ['where'], ['having'], ], - description: 'This section exposes ways to include snippets of SQL in your query', + description: t('This section exposes ways to include snippets of SQL in your query'), }, NVD3TimeSeries: [ { @@ -44,10 +45,10 @@ export const sections = { ], }, { - label: 'Advanced Analytics', - description: 'This section contains options ' + + label: t('Advanced Analytics'), + description: t('This section contains options ' + 'that allow for advanced analytical post processing ' + - 'of query results', + 'of query results'), controlSetRows: [ ['rolling_type', 'rolling_periods'], ['time_compare'], @@ -59,28 +60,28 @@ export const sections = { ], filters: [ { - label: 'Filters', - description: 'Filters are defined using comma delimited strings as in ' + + label: t('Filters'), + description: t('Filters are defined using comma delimited strings as in ' + 'Leave the value control empty to filter empty strings or nulls' + 'For filters with comma in values, wrap them in single quotes' + - "as in ", + "as in "), controlSetRows: [['filters']], }, { - label: 'Result Filters', - description: 'The filters to apply after post-aggregation.' + - 'Leave the value control empty to filter empty strings or nulls', + label: t('Result Filters'), + description: t('The filters to apply after post-aggregation.' + + 'Leave the value control empty to filter empty strings or nulls'), controlSetRows: [['having_filters']], }, ], }; -const visTypes = { +export const visTypes = { dist_bar: { - label: 'Distribution - Bar Chart', + label: t('Distribution - Bar Chart'), controlPanelSections: [ { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['metrics'], ['groupby'], @@ -97,17 +98,17 @@ const visTypes = { ], controlOverrides: { groupby: { - label: 'Series', + label: t('Series'), }, columns: { - label: 'Breakdowns', - description: 'Defines how each series is broken down', + label: t('Breakdowns'), + description: t('Defines how each series is broken down'), }, }, }, pie: { - label: 'Pie Chart', + label: t('Pie Chart'), controlPanelSections: [ { label: null, @@ -123,12 +124,12 @@ const visTypes = { }, line: { - label: 'Time Series - Line Chart', + label: t('Time Series - Line Chart'), requiresTime: true, controlPanelSections: [ sections.NVD3TimeSeries[0], { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['show_brush', 'show_legend'], ['rich_tooltip', null], @@ -137,7 +138,7 @@ const visTypes = { ], }, { - label: 'Axes', + label: t('Axes'), controlSetRows: [ ['x_axis_label', 'x_axis_format'], ['y_axis_label', 'y_axis_bounds'], @@ -155,23 +156,23 @@ const visTypes = { }, dual_line: { - label: 'Dual Axis Line Chart', + label: t('Dual Axis Line Chart'), requiresTime: true, controlPanelSections: [ { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['x_axis_format'], ], }, { - label: 'Y Axis 1', + label: t('Y Axis 1'), controlSetRows: [ ['metric', 'y_axis_format'], ], }, { - label: 'Y Axis 2', + label: t('Y Axis 2'), controlSetRows: [ ['metric_2', 'y_axis_2_format'], ], @@ -179,11 +180,11 @@ const visTypes = { ], controlOverrides: { metric: { - label: 'Left Axis Metric', - description: 'Choose a metric for left axis', + label: t('Left Axis Metric'), + description: t('Choose a metric for left axis'), }, y_axis_format: { - label: 'Left Axis Format', + label: t('Left Axis Format'), }, x_axis_format: { choices: D3_TIME_FORMAT_OPTIONS, @@ -193,12 +194,12 @@ const visTypes = { }, bar: { - label: 'Time Series - Bar Chart', + label: t('Time Series - Bar Chart'), requiresTime: true, controlPanelSections: [ sections.NVD3TimeSeries[0], { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['show_brush', 'show_legend', 'show_bar_value'], ['rich_tooltip', 'contribution'], @@ -207,7 +208,7 @@ const visTypes = { ], }, { - label: 'Axes', + label: t('Axes'), controlSetRows: [ ['x_axis_format', 'y_axis_format'], ['x_axis_showminmax', 'reduce_x_ticks'], @@ -226,12 +227,12 @@ const visTypes = { }, compare: { - label: 'Time Series - Percent Change', + label: t('Time Series - Percent Change'), requiresTime: true, controlPanelSections: [ sections.NVD3TimeSeries[0], { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['x_axis_format', 'y_axis_format'], ], @@ -247,12 +248,12 @@ const visTypes = { }, area: { - label: 'Time Series - Stacked', + label: t('Time Series - Stacked'), requiresTime: true, controlPanelSections: [ sections.NVD3TimeSeries[0], { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['show_brush', 'show_legend'], ['line_interpolation', 'stacked_style'], @@ -261,7 +262,7 @@ const visTypes = { ], }, { - label: 'Axes', + label: t('Axes'), controlSetRows: [ ['x_axis_format', 'x_axis_showminmax'], ['y_axis_format', 'y_axis_bounds'], @@ -279,26 +280,26 @@ const visTypes = { }, table: { - label: 'Table View', + label: t('Table View'), controlPanelSections: [ { - label: 'GROUP BY', - description: 'Use this section if you want a query that aggregates', + label: t('GROUP BY'), + description: t('Use this section if you want a query that aggregates'), controlSetRows: [ ['groupby', 'metrics'], ['include_time'], ], }, { - label: 'NOT GROUPED BY', - description: 'Use this section if you want to query atomic rows', + label: t('NOT GROUPED BY'), + description: t('Use this section if you want to query atomic rows'), controlSetRows: [ ['all_columns'], ['order_by_cols'], ], }, { - label: 'Options', + label: t('Options'), controlSetRows: [ ['table_timestamp_format'], ['row_limit', 'page_length'], @@ -317,7 +318,7 @@ const visTypes = { }, markup: { - label: 'Markup', + label: t('Markup'), controlPanelSections: [ { label: null, @@ -330,21 +331,21 @@ const visTypes = { }, pivot_table: { - label: 'Pivot Table', + label: t('Pivot Table'), controlPanelSections: [ { label: null, controlSetRows: [ ['groupby', 'columns'], ['metrics', 'pandas_aggfunc'], - ['number_format'], + ['number_format', 'combine_metric', 'pivot_margins'], ], }, ], }, separator: { - label: 'Separator', + label: t('Separator'), controlPanelSections: [ { label: null, @@ -365,7 +366,7 @@ const visTypes = { }, word_cloud: { - label: 'Word Cloud', + label: t('Word Cloud'), controlPanelSections: [ { label: null, @@ -379,7 +380,7 @@ const visTypes = { }, treemap: { - label: 'Treemap', + label: t('Treemap'), controlPanelSections: [ { label: null, @@ -389,7 +390,7 @@ const visTypes = { ], }, { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['treemap_ratio'], ['number_format'], @@ -399,7 +400,7 @@ const visTypes = { }, cal_heatmap: { - label: 'Calendar Heatmap', + label: t('Calendar Heatmap'), requiresTime: true, controlPanelSections: [ { @@ -414,7 +415,7 @@ const visTypes = { }, box_plot: { - label: 'Box Plot', + label: t('Box Plot'), controlPanelSections: [ { label: null, @@ -424,7 +425,7 @@ const visTypes = { ], }, { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['whisker_options'], ], @@ -433,7 +434,7 @@ const visTypes = { }, bubble: { - label: 'Bubble Chart', + label: t('Bubble Chart'), controlPanelSections: [ { label: null, @@ -443,26 +444,26 @@ const visTypes = { ], }, { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['show_legend', null], ], }, { - label: 'Bubbles', + label: t('Bubbles'), controlSetRows: [ ['size', 'max_bubble_size'], ], }, { - label: 'X Axis', + label: t('X Axis'), controlSetRows: [ ['x', 'x_axis_format'], ['x_axis_label', 'x_log_scale'], ], }, { - label: 'Y Axis', + label: t('Y Axis'), controlSetRows: [ ['y', 'y_axis_format'], ['y_axis_label', 'y_log_scale'], @@ -477,7 +478,7 @@ const visTypes = { }, bullet: { - label: 'Bullet Chart', + label: t('Bullet Chart'), requiresTime: false, controlPanelSections: [ { @@ -493,7 +494,7 @@ const visTypes = { }, big_number: { - label: 'Big Number with Trendline', + label: t('Big Number with Trendline'), controlPanelSections: [ { label: null, @@ -506,13 +507,13 @@ const visTypes = { ], controlOverrides: { y_axis_format: { - label: 'Number format', + label: t('Number format'), }, }, }, big_number_total: { - label: 'Big Number', + label: t('Big Number'), controlPanelSections: [ { label: null, @@ -525,13 +526,13 @@ const visTypes = { ], controlOverrides: { y_axis_format: { - label: 'Number format', + label: t('Number format'), }, }, }, histogram: { - label: 'Histogram', + label: t('Histogram'), controlPanelSections: [ { label: null, @@ -541,7 +542,7 @@ const visTypes = { ], }, { - label: 'Histogram Options', + label: t('Histogram Options'), controlSetRows: [ ['link_length'], ], @@ -549,19 +550,19 @@ const visTypes = { ], controlOverrides: { all_columns_x: { - label: 'Numeric Column', - description: 'Select the numeric column to draw the histogram', + label: t('Numeric Column'), + description: t('Select the numeric column to draw the histogram'), }, link_length: { - label: 'No of Bins', - description: 'Select number of bins for the histogram', + label: t('No of Bins'), + description: t('Select number of bins for the histogram'), default: 5, }, }, }, sunburst: { - label: 'Sunburst', + label: t('Sunburst'), controlPanelSections: [ { label: null, @@ -574,24 +575,24 @@ const visTypes = { ], controlOverrides: { metric: { - label: 'Primary Metric', - description: 'The primary metric is used to define the arc segment sizes', + label: t('Primary Metric'), + description: t('The primary metric is used to define the arc segment sizes'), }, secondary_metric: { - label: 'Secondary Metric', - description: 'This secondary metric is used to ' + + label: t('Secondary Metric'), + description: t('This secondary metric is used to ' + 'define the color as a ratio against the primary metric. ' + - 'If the two metrics match, color is mapped level groups', + 'If the two metrics match, color is mapped level groups'), }, groupby: { - label: 'Hierarchy', - description: 'This defines the level of the hierarchy', + label: t('Hierarchy'), + description: t('This defines the level of the hierarchy'), }, }, }, sankey: { - label: 'Sankey', + label: t('Sankey'), controlPanelSections: [ { label: null, @@ -604,14 +605,14 @@ const visTypes = { ], controlOverrides: { groupby: { - label: 'Source / Target', - description: 'Choose a source and a target', + label: t('Source / Target'), + description: t('Choose a source and a target'), }, }, }, directed_force: { - label: 'Directed Force Layout', + label: t('Directed Force Layout'), controlPanelSections: [ { label: null, @@ -622,7 +623,7 @@ const visTypes = { ], }, { - label: 'Force Layout', + label: t('Force Layout'), controlSetRows: [ ['link_length'], ['charge'], @@ -631,13 +632,13 @@ const visTypes = { ], controlOverrides: { groupby: { - label: 'Source / Target', - description: 'Choose a source and a target', + label: t('Source / Target'), + description: t('Choose a source and a target'), }, }, }, chord: { - label: 'Chord Diagram', + label: t('Chord Diagram'), controlPanelSections: [ { label: null, @@ -650,25 +651,25 @@ const visTypes = { ], controlOverrides: { y_axis_format: { - label: 'Number format', - description: 'Choose a number format', + label: t('Number format'), + description: t('Choose a number format'), }, groupby: { - label: 'Source', + label: t('Source'), multi: false, validators: [v.nonEmpty], - description: 'Choose a source', + description: t('Choose a source'), }, columns: { - label: 'Target', + label: t('Target'), multi: false, validators: [v.nonEmpty], - description: 'Choose a target', + description: t('Choose a target'), }, }, }, country_map: { - label: 'Country Map', + label: t('Country Map'), controlPanelSections: [ { label: null, @@ -682,17 +683,17 @@ const visTypes = { ], controlOverrides: { entity: { - label: 'ISO 3166-1 codes of region/province/department', - description: "It's ISO 3166-1 of your region/province/department in your table. (see documentation for list of ISO 3166-1)", + label: t('ISO 3166-1 codes of region/province/department'), + description: t('It\'s ISO 3166-1 of your region/province/department in your table. (see documentation for list of ISO 3166-1)'), }, metric: { - label: 'Metric', - description: 'Metric to display bottom title', + label: t('Metric'), + description: t('Metric to display bottom title'), }, }, }, world_map: { - label: 'World Map', + label: t('World Map'), controlPanelSections: [ { label: null, @@ -703,7 +704,7 @@ const visTypes = { ], }, { - label: 'Bubbles', + label: t('Bubbles'), controlSetRows: [ ['show_bubbles'], ['secondary_metric'], @@ -713,22 +714,22 @@ const visTypes = { ], controlOverrides: { entity: { - label: 'Country Control', - description: '3 letter code of the country', + label: t('Country Control'), + description: t('3 letter code of the country'), }, metric: { - label: 'Metric for color', - description: 'Metric that defines the color of the country', + label: t('Metric for color'), + description: t('Metric that defines the color of the country'), }, secondary_metric: { - label: 'Bubble size', - description: 'Metric that defines the size of the bubble', + label: t('Bubble size'), + description: t('Metric that defines the size of the bubble'), }, }, }, filter_box: { - label: 'Filter Box', + label: t('Filter Box'), controlPanelSections: [ { label: null, @@ -741,15 +742,20 @@ const visTypes = { ], controlOverrides: { groupby: { - label: 'Filter controls', - description: 'The controls you want to filter on', - default: [], + label: t('Filter controls'), + description: ( + t('The controls you want to filter on. Note that only columns ' + + 'checked as "filterable" will show up on this list.') + ), + mapStateToProps: state => ({ + options: (state.datasource) ? state.datasource.columns.filter(c => c.filterable) : [], + }), }, }, }, iframe: { - label: 'iFrame', + label: t('iFrame'), controlPanelSections: [ { label: null, @@ -761,7 +767,7 @@ const visTypes = { }, para: { - label: 'Parallel Coordinates', + label: t('Parallel Coordinates'), controlPanelSections: [ { label: null, @@ -777,10 +783,10 @@ const visTypes = { }, heatmap: { - label: 'Heatmap', + label: t('Heatmap'), controlPanelSections: [ { - label: 'Axis & Metrics', + label: t('Axis & Metrics'), controlSetRows: [ ['all_columns_x'], ['all_columns_y'], @@ -788,7 +794,7 @@ const visTypes = { ], }, { - label: 'Heatmap Options', + label: t('Heatmap Options'), controlSetRows: [ ['linear_color_scheme'], ['xscale_interval', 'yscale_interval'], @@ -808,11 +814,11 @@ const visTypes = { }, horizon: { - label: 'Horizon', + label: t('Horizon'), controlPanelSections: [ sections.NVD3TimeSeries[0], { - label: 'Chart Options', + label: t('Chart Options'), controlSetRows: [ ['series_height', 'horizon_color_scale'], ], @@ -821,7 +827,7 @@ const visTypes = { }, mapbox: { - label: 'Mapbox', + label: t('Mapbox'), controlPanelSections: [ { label: null, @@ -834,21 +840,21 @@ const visTypes = { ], }, { - label: 'Points', + label: t('Points'), controlSetRows: [ ['point_radius'], ['point_radius_unit'], ], }, { - label: 'Labelling', + label: t('Labelling'), controlSetRows: [ ['mapbox_label'], ['pandas_aggfunc'], ], }, { - label: 'Visual Tweaks', + label: t('Visual Tweaks'), controlSetRows: [ ['mapbox_style'], ['global_opacity'], @@ -856,7 +862,7 @@ const visTypes = { ], }, { - label: 'Viewport', + label: t('Viewport'), controlSetRows: [ ['viewport_longitude'], ['viewport_latitude'], @@ -866,36 +872,36 @@ const visTypes = { ], controlOverrides: { all_columns_x: { - label: 'Longitude', - description: 'Column containing longitude data', + label: t('Longitude'), + description: t('Column containing longitude data'), }, all_columns_y: { - label: 'Latitude', - description: 'Column containing latitude data', + label: t('Latitude'), + description: t('Column containing latitude data'), }, pandas_aggfunc: { - label: 'Cluster label aggregator', - description: 'Aggregate function applied to the list of points ' + - 'in each cluster to produce the cluster label.', + label: t('Cluster label aggregator'), + description: t('Aggregate function applied to the list of points ' + + 'in each cluster to produce the cluster label.'), }, rich_tooltip: { - label: 'Tooltip', - description: 'Show a tooltip when hovering over points and clusters ' + - 'describing the label', + label: t('Tooltip'), + description: t('Show a tooltip when hovering over points and clusters ' + + 'describing the label'), }, groupby: { - description: 'One or many controls to group by. If grouping, latitude ' + - 'and longitude columns must be present.', + description: t('One or many controls to group by. If grouping, latitude ' + + 'and longitude columns must be present.'), }, }, }, event_flow: { - label: 'Event flow', + label: t('Event flow'), requiresTime: true, controlPanelSections: [ { - label: 'Event definition', + label: t('Event definition'), controlSetRows: [ ['entity'], ['all_columns_x'], @@ -905,7 +911,7 @@ const visTypes = { ], }, { - label: 'Additional meta data', + label: t('Additional meta data'), controlSetRows: [ ['all_columns'], ], @@ -913,11 +919,11 @@ const visTypes = { ], controlOverrides: { entity: { - label: 'Column containing entity ids', - description: 'e.g., a "user id" column', + label: t('Column containing entity ids'), + description: t('e.g., a "user id" column'), }, all_columns_x: { - label: 'Column containing event names', + label: t('Column containing event names'), validators: [v.nonEmpty], default: control => ( control.choices && control.choices.length > 0 ? @@ -925,12 +931,12 @@ const visTypes = { ), }, row_limit: { - label: 'Event count limit', - description: 'The maximum number of events to return, equivalent to number of rows', + label: t('Event count limit'), + description: t('The maximum number of events to return, equivalent to number of rows'), }, all_columns: { - label: 'Meta data', - description: 'Select any columns for meta data inspection', + label: t('Meta data'), + description: t('Select any columns for meta data inspection'), }, }, }, diff --git a/superset/assets/javascripts/modules/superset.js b/superset/assets/javascripts/modules/superset.js index 55af823117c4e..cb5334d207b46 100644 --- a/superset/assets/javascripts/modules/superset.js +++ b/superset/assets/javascripts/modules/superset.js @@ -5,10 +5,11 @@ import vizMap from '../../visualizations/main'; import { getExploreUrl } from '../explore/exploreUtils'; import { applyDefaultFormData } from '../explore/stores/store'; import { QUERY_TIMEOUT_THRESHOLD } from '../constants'; +import { t } from '../locales'; const utils = require('./utils'); -/* eslint wrap-iife: 0*/ +/* eslint wrap-iife: 0 */ const px = function () { let slice; function getParam(name) { @@ -29,7 +30,7 @@ const px = function () { } } $('.favstar') - .attr('title', 'Click to favorite/unfavorite') + .attr('title', t('Click to favorite/unfavorite')) .css('cursor', 'pointer') .each(show) .each(function () { @@ -130,10 +131,10 @@ const px = function () { if (status === 0) { // This may happen when the worker in gunicorn times out msg += ( - 'The server could not be reached. You may want to ' + - 'verify your connection and try again.'); + t('The server could not be reached. You may want to ' + + 'verify your connection and try again.')); } else { - msg += 'An unknown error occurred. (Status: ' + status + ')'; + msg += (t('An unknown error occurred. (Status: %s )', status)); } } return msg; @@ -158,7 +159,7 @@ const px = function () { if (xhr) { if (xhr.statusText === 'timeout') { errHtml += '
' + - `Query timeout - visualization query are set to time out at ${QUERY_TIMEOUT_THRESHOLD / 1000} seconds.
`; + t('Query timeout - visualization query are set to time out at %s seconds.', QUERY_TIMEOUT_THRESHOLD / 1000) + '
'; } else { const extendedMsg = this.getErrorMsg(xhr); if (extendedMsg) { @@ -216,7 +217,7 @@ const px = function () { vizMap[formData.viz_type](this, queryResponse); this.done(queryResponse); } catch (e) { - this.error('An error occurred while rendering the visualization: ' + e); + this.error(t('An error occurred while rendering the visualization: %s', e)); } }, error: (err) => { diff --git a/superset/assets/javascripts/modules/utils.js b/superset/assets/javascripts/modules/utils.js index 7349dbb7f8f11..61949c7e2b39e 100644 --- a/superset/assets/javascripts/modules/utils.js +++ b/superset/assets/javascripts/modules/utils.js @@ -229,14 +229,10 @@ export function initJQueryAjax() { } export function tryNumify(s) { - // Attempts casting to float, returns string when failing - try { - const parsed = parseFloat(s); - if (parsed) { - return parsed; - } - } catch (e) { - // pass + // Attempts casting to Number, returns string when failing + const n = Number(s); + if (isNaN(n)) { + return s; } - return s; + return n; } diff --git a/superset/assets/javascripts/profile/components/App.jsx b/superset/assets/javascripts/profile/components/App.jsx index 596b0ada4b51f..0cb9034182327 100644 --- a/superset/assets/javascripts/profile/components/App.jsx +++ b/superset/assets/javascripts/profile/components/App.jsx @@ -6,6 +6,7 @@ import UserInfo from './UserInfo'; import Security from './Security'; import RecentActivity from './RecentActivity'; import CreatedContent from './CreatedContent'; +import { t } from '../../locales'; const propTypes = { user: PropTypes.object.isRequired, @@ -20,25 +21,25 @@ export default function App(props) {
- Favorites}> + {t('Favorites')}}> Created Content +
{t('Created Content')}
} >
- Recent Activity}> + {t('Recent Activity')}}> - Security & Access}> + {t('Security & Access')}}> diff --git a/superset/assets/javascripts/profile/components/CreatedContent.jsx b/superset/assets/javascripts/profile/components/CreatedContent.jsx index 87921c6872e6c..895be78434ce9 100644 --- a/superset/assets/javascripts/profile/components/CreatedContent.jsx +++ b/superset/assets/javascripts/profile/components/CreatedContent.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import TableLoader from './TableLoader'; +import { t } from '../../locales'; const propTypes = { user: PropTypes.object.isRequired, @@ -29,7 +30,7 @@ class CreatedContent extends React.PureComponent { className="table table-condensed" columns={['slice', 'favorited']} mutator={mutator} - noDataText="No slices" + noDataText={t('No slices')} sortable /> ); @@ -45,7 +46,7 @@ class CreatedContent extends React.PureComponent { className="table table-condensed" mutator={mutator} dataEndpoint={`/superset/created_dashboards/${this.props.user.userId}/`} - noDataText="No dashboards" + noDataText={t('No dashboards')} columns={['dashboard', 'favorited']} sortable /> @@ -54,10 +55,10 @@ class CreatedContent extends React.PureComponent { render() { return (
-

Dashboards

+

{t('Dashboards')}

{this.renderDashboardTable()}
-

Slices

+

{t('Slices')}

{this.renderSliceTable()}
); diff --git a/superset/assets/javascripts/profile/components/Favorites.jsx b/superset/assets/javascripts/profile/components/Favorites.jsx index 9039d916518b4..3141bb0c32850 100644 --- a/superset/assets/javascripts/profile/components/Favorites.jsx +++ b/superset/assets/javascripts/profile/components/Favorites.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import TableLoader from './TableLoader'; +import { t } from '../../locales'; const propTypes = { user: PropTypes.object.isRequired, @@ -30,7 +31,7 @@ export default class Favorites extends React.PureComponent { className="table table-condensed" columns={['slice', 'creator', 'favorited']} mutator={mutator} - noDataText="No favorite slices yet, go click on stars!" + noDataText={t('No favorite slices yet, go click on stars!')} sortable /> ); @@ -46,7 +47,7 @@ export default class Favorites extends React.PureComponent { className="table table-condensed" mutator={mutator} dataEndpoint={`/superset/fave_dashboards/${this.props.user.userId}/`} - noDataText="No favorite dashboards yet, go click on stars!" + noDataText={t('No favorite dashboards yet, go click on stars!')} columns={['dashboard', 'creator', 'favorited']} sortable /> @@ -55,10 +56,10 @@ export default class Favorites extends React.PureComponent { render() { return (
-

Dashboards

+

{t('Dashboards')}

{this.renderDashboardTable()}
-

Slices

+

{t('Slices')}

{this.renderSliceTable()}
); diff --git a/superset/assets/javascripts/profile/components/Security.jsx b/superset/assets/javascripts/profile/components/Security.jsx index 0d942dd83fdee..748be6b84043c 100644 --- a/superset/assets/javascripts/profile/components/Security.jsx +++ b/superset/assets/javascripts/profile/components/Security.jsx @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Badge, Label } from 'react-bootstrap'; +import { t } from '../../locales'; const propTypes = { user: PropTypes.object.isRequired, @@ -10,7 +11,7 @@ export default function Security({ user }) {

- Roles {Object.keys(user.roles).length} + {t('Roles')} {Object.keys(user.roles).length}

{Object.keys(user.roles).map(role => )}
@@ -19,7 +20,7 @@ export default function Security({ user }) { {user.permissions.database_access &&

- Databases {user.permissions.database_access.length} + {t('Databases')} {user.permissions.database_access.length}

{user.permissions.database_access.map(role => )}
@@ -30,7 +31,7 @@ export default function Security({ user }) { {user.permissions.datasource_access &&

- Datasources {user.permissions.datasource_access.length} + {t('Datasources')} {user.permissions.datasource_access.length}

{user.permissions.datasource_access.map(role => )}
diff --git a/superset/assets/javascripts/profile/components/UserInfo.jsx b/superset/assets/javascripts/profile/components/UserInfo.jsx index 4f751ed0d2391..cf9bde717bb6e 100644 --- a/superset/assets/javascripts/profile/components/UserInfo.jsx +++ b/superset/assets/javascripts/profile/components/UserInfo.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import Gravatar from 'react-gravatar'; import moment from 'moment'; import { Panel } from 'react-bootstrap'; +import { t } from '../../locales'; const propTypes = { user: PropTypes.object.isRequired, @@ -14,7 +15,7 @@ const UserInfo = ({ user }) => ( email={user.email} width="100%" height="" - alt="Profile picture provided by Gravatar" + alt={t('Profile picture provided by Gravatar')} className="img-rounded" style={{ borderRadius: 15 }} /> @@ -29,7 +30,7 @@ const UserInfo = ({ user }) => (

- joined {moment(user.createdOn, 'YYYYMMDD').fromNow()} + {t('joined')} {moment(user.createdOn, 'YYYYMMDD').fromNow()}

{user.email} @@ -39,7 +40,7 @@ const UserInfo = ({ user }) => (

  - id:  + {t('id:')}  {user.userId}

diff --git a/superset/assets/javascripts/translations.jsx b/superset/assets/javascripts/translations.jsx index 6fbf3c931509e..f3d459ada1807 100644 --- a/superset/assets/javascripts/translations.jsx +++ b/superset/assets/javascripts/translations.jsx @@ -1,11 +1,6 @@ -import { _ } from 'underscore'; -import info from '../../translations/catalogs.json'; +/* eslint-disable global-require, import/no-dynamic-require */ import { getLanguage } from './explore/stores/getLanguage'; -const catalogs = (function () { - return info.supported_locales; -}()); - function dirnameToLocale(dirName) { let reDirName = dirName; if (dirName.indexOf('_') >= 0) { @@ -16,16 +11,9 @@ function dirnameToLocale(dirName) { } export const translations = (function () { - const ctx = require.context('../../translations/', true, /\.po$/); + const ctx = require(`../../translations/${getLanguage()}/LC_MESSAGES/messages.po`); const rv = {}; - ctx.keys().forEach((translation) => { - const langCode = translation.match(/([a-zA-Z_]+)/)[1]; - if (_.contains(catalogs, langCode)) { - if (langCode === getLanguage()) { - rv[dirnameToLocale(langCode)] = ctx(translation); - } - } - }); + rv[dirnameToLocale(getLanguage())] = ctx; return rv; }()); diff --git a/superset/assets/package.json b/superset/assets/package.json index 63399e4f97638..f146de6dbd26b 100644 --- a/superset/assets/package.json +++ b/superset/assets/package.json @@ -18,7 +18,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/airbnb/superset.git" + "url": "git+https://github.com/apache/incubator-superset.git" }, "keywords": [ "big", @@ -32,11 +32,11 @@ "database", "flask" ], - "author": "Airbnb", + "author": "Apache", "bugs": { - "url": "https://github.com/airbnb/superset/issues" + "url": "https://github.com/apache/incubator-superset/issues" }, - "homepage": "https://github.com/airbnb/superset#readme", + "homepage": "http://superset.apache.org/", "dependencies": { "@data-ui/event-flow": "0.0.4", "babel-register": "^6.24.1", @@ -57,9 +57,7 @@ "immutable": "^3.8.1", "jed": "^1.1.1", "jquery": "^3.2.1", - "jsdom": "9.12.0", "lodash.throttle": "^4.1.1", - "mapbox-gl": "^0.26.0", "moment": "^2.14.1", "mustache": "^2.2.1", "nvd3": "1.8.5", @@ -75,7 +73,7 @@ "react-dom": "^15.5.1", "react-gravatar": "^2.6.1", "react-grid-layout": "^0.14.4", - "react-map-gl": "^1.7.0", + "react-map-gl": "^2.0.3", "react-redux": "^5.0.2", "react-resizable": "^1.3.3", "react-select": "1.0.0-rc.3", @@ -90,7 +88,6 @@ "shortid": "^2.2.6", "sprintf-js": "^1.1.1", "supercluster": "https://github.com/georgeke/supercluster/tarball/ac3492737e7ce98e07af679623aad452373bbc40", - "underscore": "^1.8.3", "urijs": "^1.18.10", "viewport-mercator-project": "^2.1.0" }, @@ -133,8 +130,8 @@ "transform-loader": "^0.2.3", "uglifyjs-webpack-plugin": "^0.4.6", "url-loader": "^0.5.7", - "webpack": "^2.3.3", - "webpack-manifest-plugin": "1.1.0", - "webworkify-webpack": "2.0.4" + "webpack": "^3.4.1", + "webpack-manifest-plugin": "1.2.1", + "webworkify-webpack": "2.0.5" } } diff --git a/superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx new file mode 100644 index 0000000000000..c46ded004a230 --- /dev/null +++ b/superset/assets/spec/javascripts/explore/components/DatasourceControl_spec.jsx @@ -0,0 +1,32 @@ +import React from 'react'; +import sinon from 'sinon'; +import { expect } from 'chai'; +import { describe, it, beforeEach } from 'mocha'; +import { shallow } from 'enzyme'; +import { Modal } from 'react-bootstrap'; +import DatasourceControl from '../../../../javascripts/explore/components/controls/DatasourceControl'; + +const defaultProps = { + name: 'datasource', + label: 'Datasource', + value: '1__table', + datasource: { + name: 'birth_names', + type: 'table', + uid: '1__table', + id: 1, + }, + onChange: sinon.spy(), +}; + +describe('DatasourceControl', () => { + let wrapper; + + beforeEach(() => { + wrapper = shallow(); + }); + + it('renders a Modal', () => { + expect(wrapper.find(Modal)).to.have.lengthOf(1); + }); +}); diff --git a/superset/assets/spec/javascripts/explore/exploreActions_spec.js b/superset/assets/spec/javascripts/explore/exploreActions_spec.js index 86173be4ecdfe..9fa02e4b12484 100644 --- a/superset/assets/spec/javascripts/explore/exploreActions_spec.js +++ b/superset/assets/spec/javascripts/explore/exploreActions_spec.js @@ -82,44 +82,6 @@ describe('fetching actions', () => { }); }); - describe('fetchDatasources', () => { - const makeRequest = () => { - request = actions.fetchDatasources(); - request(dispatch); - }; - - it('calls fetchDatasourcesStarted', () => { - makeRequest(); - expect(dispatch.args[0][0].type).to.equal(actions.FETCH_DATASOURCES_STARTED); - }); - - it('makes the ajax request', () => { - makeRequest(); - expect(ajaxStub.calledOnce).to.be.true; - }); - - it('calls correct url', () => { - const url = '/superset/datasources/'; - makeRequest(); - expect(ajaxStub.getCall(0).args[0].url).to.equal(url); - }); - - it('calls correct actions on error', () => { - ajaxStub.yieldsTo('error', { responseJSON: { error: 'error text' } }); - makeRequest(); - expect(dispatch.callCount).to.equal(2); - expect(dispatch.getCall(1).args[0].type).to.equal(actions.FETCH_DATASOURCES_FAILED); - }); - - it('calls correct actions on success', () => { - ajaxStub.yieldsTo('success', { data: '' }); - makeRequest(); - expect(dispatch.callCount).to.equal(3); - expect(dispatch.getCall(1).args[0].type).to.equal(actions.SET_DATASOURCES); - expect(dispatch.getCall(2).args[0].type).to.equal(actions.FETCH_DATASOURCES_SUCCEEDED); - }); - }); - describe('fetchDashboards', () => { const userID = 1; const mockDashboardData = { diff --git a/superset/assets/javascripts/SqlLab/reactable-pagination.css b/superset/assets/stylesheets/reactable-pagination.css similarity index 100% rename from superset/assets/javascripts/SqlLab/reactable-pagination.css rename to superset/assets/stylesheets/reactable-pagination.css diff --git a/superset/assets/stylesheets/superset.css b/superset/assets/stylesheets/superset.css index 2cbe27fa9d913..20041330c9434 100644 --- a/superset/assets/stylesheets/superset.css +++ b/superset/assets/stylesheets/superset.css @@ -13,7 +13,7 @@ body { } .emph { - font-weight: bold; + font-weight: bold !important; } .alert.alert-danger > .debugger { @@ -228,6 +228,9 @@ div.widget .slice_container { .m-r-5 { margin-right: 5px; } +.m-r-3 { + margin-right: 3px; +} .m-t-5 { margin-top: 5px; } diff --git a/superset/assets/visualizations/EventFlow.jsx b/superset/assets/visualizations/EventFlow.jsx index 110f4a76482c6..83811a5f465f4 100644 --- a/superset/assets/visualizations/EventFlow.jsx +++ b/superset/assets/visualizations/EventFlow.jsx @@ -9,6 +9,7 @@ import { EVENT_NAME, ENTITY_ID, } from '@data-ui/event-flow'; +import { t } from '../javascripts/locales'; /* * This function takes the slice object and json payload as input and renders a @@ -52,7 +53,7 @@ function renderEventFlow(slice, json) { Component = ; } else { - Component =
Sorry, there appears to be no data
; + Component =
{t('Sorry, there appears to be no data')}
; } ReactDOM.render(Component, container); diff --git a/superset/assets/visualizations/filter_box.jsx b/superset/assets/visualizations/filter_box.jsx index a97ec3fe6f85b..e1c904314d331 100644 --- a/superset/assets/visualizations/filter_box.jsx +++ b/superset/assets/visualizations/filter_box.jsx @@ -9,6 +9,7 @@ import { Button } from 'react-bootstrap'; import '../stylesheets/react-select/select.less'; import { TIME_CHOICES } from './constants'; import './filter_box.css'; +import { t } from '../javascripts/locales'; const propTypes = { origSelectedValues: PropTypes.object, @@ -84,7 +85,7 @@ class FilterBox extends React.Component {
{this.props.datasource.verbose_map[filter] || filter} category21(d[colorKey])); } + if ((vizType === 'line' || vizType === 'area') && fd.rich_tooltip) { + chart.useInteractiveGuideline(true); + if (vizType === 'line') { + // Custom sorted tooltip + chart.interactiveLayer.tooltip.contentGenerator((d) => { + let tooltip = ''; + tooltip += "
'; + d.series.sort((a, b) => a.value >= b.value ? -1 : 1); + d.series.forEach((series) => { + tooltip += ( + `` + + `' + + `` + + `` + + '' + ); + }); + tooltip += '
" + + `${xAxisFormatter(d.value)}` + + '
` + + '
' + + '
${series.key}${yAxisFormatter(series.value)}
'; + return tooltip; + }); + } + } if (fd.x_axis_label && fd.x_axis_label !== '' && chart.xAxis) { let distance = 0; diff --git a/superset/assets/visualizations/treemap.js b/superset/assets/visualizations/treemap.js index f728985dba5cd..3243dba472281 100644 --- a/superset/assets/visualizations/treemap.js +++ b/superset/assets/visualizations/treemap.js @@ -1,4 +1,4 @@ -/* eslint-disable no-shadow, no-param-reassign, no-underscore-dangle, no-use-before-define*/ +/* eslint-disable no-shadow, no-param-reassign, no-underscore-dangle, no-use-before-define */ import d3 from 'd3'; import { category21 } from '../javascripts/modules/colors'; diff --git a/superset/assets/webpack.config.js b/superset/assets/webpack.config.js index a4f9c3ca7306a..d4e515068def2 100644 --- a/superset/assets/webpack.config.js +++ b/superset/assets/webpack.config.js @@ -10,6 +10,9 @@ const APP_DIR = path.resolve(__dirname, './'); const BUILD_DIR = path.resolve(__dirname, './dist'); const config = { + node: { + fs: 'empty', + }, entry: { 'css-theme': APP_DIR + '/javascripts/css-theme.js', common: APP_DIR + '/javascripts/common.js', @@ -32,9 +35,7 @@ const config = { ], alias: { webworkify: 'webworkify-webpack', - 'mapbox-gl/js/geo/transform': path.join( - __dirname, '/node_modules/mapbox-gl/js/geo/transform'), - 'mapbox-gl': path.join(__dirname, '/node_modules/mapbox-gl/dist/mapbox-gl.js'), + 'mapbox-gl$': path.join(__dirname, '/node_modules/mapbox-gl/dist/mapbox-gl.js'), }, }, @@ -57,10 +58,10 @@ const config = { ], }, }, - /* for react-map-gl overlays */ + /* for mapbox-gl/js/geo/transform */ { - test: /\.react\.js$/, - include: APP_DIR + '/node_modules/react-map-gl/src/overlays', + test: /\.js$/, + include: APP_DIR + '/node_modules/mapbox-gl/js', loader: 'babel-loader', }, /* for require('*.css') */ @@ -137,11 +138,11 @@ if (process.env.NODE_ENV === 'production') { const UJSplugin = new webpack.optimize.UglifyJsPlugin({ sourceMap: false, minimize: true, - compress: { - drop_debugger: true, - warnings: false, - drop_console: true, + parallel: { + cache: true, + workers: 4, }, + compress: false, }); config.plugins.push(UJSplugin); } diff --git a/superset/config.py b/superset/config.py index 394c7f215e014..3db4f136cfe8d 100644 --- a/superset/config.py +++ b/superset/config.py @@ -241,6 +241,7 @@ class CeleryConfig(object): CELERY_IMPORTS = ('superset.sql_lab', ) CELERY_RESULT_BACKEND = 'db+sqlite:///celery_results.sqlite' CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} + CELERYD_LOG_LEVEL = 'DEBUG' CELERY_CONFIG = CeleryConfig """ CELERY_CONFIG = None @@ -307,8 +308,12 @@ class CeleryConfig(object): # configuration. These blueprints will get integrated in the app BLUEPRINTS = [] -try: +# Provide a callable that receives a tracking_url and returns another +# URL. This is used to translate internal Hadoop job tracker URL +# into a proxied one +TRACKING_URL_TRANSFORMER = lambda x: x +try: if CONFIG_PATH_ENV_VAR in os.environ: # Explicitly import config module that is not in pythonpath; useful # for case where app is being executed via pex. diff --git a/superset/connectors/base/models.py b/superset/connectors/base/models.py index e203ef4401200..593c722d42bbc 100644 --- a/superset/connectors/base/models.py +++ b/superset/connectors/base/models.py @@ -68,6 +68,16 @@ def column_names(self): def main_dttm_col(self): return "timestamp" + @property + def connection(self): + """String representing the context of the Datasource""" + return None + + @property + def schema(self): + """String representing the schema of the Datasource (if it applies)""" + return None + @property def groupby_column_names(self): return sorted([c.column_name for c in self.columns if c.groupby]) @@ -107,6 +117,20 @@ def metrics_combo(self): for m in self.metrics], key=lambda x: x[1]) + @property + def short_data(self): + """Data representation of the datasource sent to the frontend""" + return { + 'edit_url': self.url, + 'id': self.id, + 'uid': self.uid, + 'schema': self.schema, + 'name': self.name, + 'type': self.type, + 'connection': self.connection, + 'creator': str(self.created_by), + } + @property def data(self): """Data representation of the datasource sent to the frontend""" @@ -222,7 +246,9 @@ def expression(self): @property def data(self): - attrs = ('column_name', 'verbose_name', 'description', 'expression') + attrs = ( + 'column_name', 'verbose_name', 'description', 'expression', + 'filterable', 'groupby') return {s: getattr(self, s) for s in attrs} diff --git a/superset/connectors/druid/models.py b/superset/connectors/druid/models.py index b4e1556a9eaae..6f88dd14630c7 100644 --- a/superset/connectors/druid/models.py +++ b/superset/connectors/druid/models.py @@ -50,6 +50,13 @@ def __init__(self, name, field_names, function): self.name = name +class CustomPostAggregator(Postaggregator): + """A way to allow users to specify completely custom PostAggregators""" + def __init__(self, name, post_aggregator): + self.name = name + self.post_aggregator = post_aggregator + + class DruidCluster(Model, AuditMixinNullable): """ORM object referencing the Druid clusters""" @@ -347,6 +354,10 @@ class DruidDatasource(Model, BaseDatasource): def database(self): return self.cluster + @property + def connection(self): + return str(self.database) + @property def num_cols(self): return [c.column_name for c in self.columns if c.is_num] @@ -492,7 +503,7 @@ def latest_metadata(self): lbound = datetime(1901, 1, 1).isoformat()[:10] rbound = datetime(2050, 1, 1).isoformat()[:10] if not self.version_higher(self.cluster.druid_version, '0.8.2'): - rbound = datetime.now().isoformat()[:10] + rbound = datetime.now().isoformat() try: segment_metadata = client.segment_metadata( datasource=self.datasource_name, @@ -690,6 +701,75 @@ def granularity(period_name, timezone=None, origin=None): period_name).total_seconds() * 1000 return granularity + @staticmethod + def _metrics_and_post_aggs(metrics, metrics_dict): + all_metrics = [] + post_aggs = {} + + def recursive_get_fields(_conf): + _type = _conf.get('type') + _field = _conf.get('field') + _fields = _conf.get('fields') + + field_names = [] + if _type in ['fieldAccess', 'hyperUniqueCardinality', + 'quantile', 'quantiles']: + field_names.append(_conf.get('fieldName', '')) + + if _field: + field_names += recursive_get_fields(_field) + + if _fields: + for _f in _fields: + field_names += recursive_get_fields(_f) + + return list(set(field_names)) + + for metric_name in metrics: + metric = metrics_dict[metric_name] + if metric.metric_type != 'postagg': + all_metrics.append(metric_name) + else: + mconf = metric.json_obj + all_metrics += recursive_get_fields(mconf) + all_metrics += mconf.get('fieldNames', []) + if mconf.get('type') == 'javascript': + post_aggs[metric_name] = JavascriptPostAggregator( + name=mconf.get('name', ''), + field_names=mconf.get('fieldNames', []), + function=mconf.get('function', '')) + elif mconf.get('type') == 'quantile': + post_aggs[metric_name] = Quantile( + mconf.get('name', ''), + mconf.get('probability', ''), + ) + elif mconf.get('type') == 'quantiles': + post_aggs[metric_name] = Quantiles( + mconf.get('name', ''), + mconf.get('probabilities', ''), + ) + elif mconf.get('type') == 'fieldAccess': + post_aggs[metric_name] = Field(mconf.get('name')) + elif mconf.get('type') == 'constant': + post_aggs[metric_name] = Const( + mconf.get('value'), + output_name=mconf.get('name', '') + ) + elif mconf.get('type') == 'hyperUniqueCardinality': + post_aggs[metric_name] = HyperUniqueCardinality( + mconf.get('name') + ) + elif mconf.get('type') == 'arithmetic': + post_aggs[metric_name] = Postaggregator( + mconf.get('fn', "/"), + mconf.get('fields', []), + mconf.get('name', '')) + else: + post_aggs[metric_name] = CustomPostAggregator( + mconf.get('name', ''), + mconf) + return all_metrics, post_aggs + def values_for_column(self, column_name, limit=10000): @@ -749,61 +829,10 @@ def run_query( # noqa / druid query_str = "" metrics_dict = {m.metric_name: m for m in self.metrics} - all_metrics = [] - post_aggs = {} columns_dict = {c.column_name: c for c in self.columns} - def recursive_get_fields(_conf): - _fields = _conf.get('fields', []) - field_names = [] - for _f in _fields: - _type = _f.get('type') - if _type in ['fieldAccess', 'hyperUniqueCardinality']: - field_names.append(_f.get('fieldName')) - elif _type == 'arithmetic': - field_names += recursive_get_fields(_f) - return list(set(field_names)) - - for metric_name in metrics: - metric = metrics_dict[metric_name] - if metric.metric_type != 'postagg': - all_metrics.append(metric_name) - else: - mconf = metric.json_obj - all_metrics += recursive_get_fields(mconf) - all_metrics += mconf.get('fieldNames', []) - if mconf.get('type') == 'javascript': - post_aggs[metric_name] = JavascriptPostAggregator( - name=mconf.get('name', ''), - field_names=mconf.get('fieldNames', []), - function=mconf.get('function', '')) - elif mconf.get('type') == 'quantile': - post_aggs[metric_name] = Quantile( - mconf.get('name', ''), - mconf.get('probability', ''), - ) - elif mconf.get('type') == 'quantiles': - post_aggs[metric_name] = Quantiles( - mconf.get('name', ''), - mconf.get('probabilities', ''), - ) - elif mconf.get('type') == 'fieldAccess': - post_aggs[metric_name] = Field(mconf.get('name')) - elif mconf.get('type') == 'constant': - post_aggs[metric_name] = Const( - mconf.get('value'), - output_name=mconf.get('name', '') - ) - elif mconf.get('type') == 'hyperUniqueCardinality': - post_aggs[metric_name] = HyperUniqueCardinality( - mconf.get('name') - ) - else: - post_aggs[metric_name] = Postaggregator( - mconf.get('fn', "/"), - mconf.get('fields', []), - mconf.get('name', '')) + all_metrics, post_aggs = self._metrics_and_post_aggs(metrics, metrics_dict) aggregations = OrderedDict() for m in self.metrics: diff --git a/superset/connectors/druid/views.py b/superset/connectors/druid/views.py index 7ae3fb37096aa..b9a87e3f52567 100644 --- a/superset/connectors/druid/views.py +++ b/superset/connectors/druid/views.py @@ -24,6 +24,12 @@ class DruidColumnInlineView(CompactCRUDMixin, SupersetModelView): # noqa datamodel = SQLAInterface(models.DruidColumn) + + list_title = _('List Druid Column') + show_title = _('Show Druid Column') + add_title = _('Add Druid Column') + edit_title = _('Edit Druid Column') + edit_columns = [ 'column_name', 'description', 'dimension_spec_json', 'datasource', 'groupby', 'filterable', 'count_distinct', 'sum', 'min', 'max'] @@ -70,6 +76,12 @@ def post_add(self, col): class DruidMetricInlineView(CompactCRUDMixin, SupersetModelView): # noqa datamodel = SQLAInterface(models.DruidMetric) + + list_title = _('List Druid Metric') + show_title = _('Show Druid Metric') + add_title = _('Add Druid Metric') + edit_title = _('Edit Druid Metric') + list_columns = ['metric_name', 'verbose_name', 'metric_type'] edit_columns = [ 'metric_name', 'description', 'verbose_name', 'metric_type', 'json', @@ -112,6 +124,12 @@ def post_update(self, metric): class DruidClusterModelView(SupersetModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.DruidCluster) + + list_title = _('List Druid Cluster') + show_title = _('Show Druid Cluster') + add_title = _('Add Druid Cluster') + edit_title = _('Edit Druid Cluster') + add_columns = [ 'verbose_name', 'coordinator_host', 'coordinator_port', 'coordinator_endpoint', 'broker_host', 'broker_port', @@ -151,6 +169,12 @@ def _delete(self, pk): class DruidDatasourceModelView(DatasourceModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.DruidDatasource) + + list_title = _('List Druid Datasource') + show_title = _('Show Druid Datasource') + add_title = _('Add Druid Datasource') + edit_title = _('Edit Druid Datasource') + list_widget = ListWidgetWithCheckboxes list_columns = [ 'datasource_link', 'cluster', 'changed_by_', 'modified'] diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py index 147c667df04bf..b836a153e140d 100644 --- a/superset/connectors/sqla/models.py +++ b/superset/connectors/sqla/models.py @@ -192,6 +192,10 @@ class SqlaTable(Model, BaseDatasource): def __repr__(self): return self.name + @property + def connection(self): + return str(self.database) + @property def description_markeddown(self): return utils.markdown(self.description) @@ -285,10 +289,12 @@ def values_for_column(self, column_name, limit=10000): """ cols = {col.column_name: col for col in self.columns} target_col = cols[column_name] + tp = self.get_template_processor() + db_engine_spec = self.database.db_engine_spec qry = ( select([target_col.sqla_col]) - .select_from(self.get_from_clause()) + .select_from(self.get_from_clause(tp, db_engine_spec)) .distinct(column_name) ) if limit: @@ -322,7 +328,6 @@ def get_query_str(self, query_obj): ) logging.info(sql) sql = sqlparse.format(sql, reindent=True) - sql = self.database.db_engine_spec.sql_preprocessor(sql) return sql def get_sqla_table(self): @@ -331,12 +336,14 @@ def get_sqla_table(self): tbl.schema = self.schema return tbl - def get_from_clause(self, template_processor=None): + def get_from_clause(self, template_processor=None, db_engine_spec=None): # Supporting arbitrary SQL statements in place of tables if self.sql: from_sql = self.sql if template_processor: from_sql = template_processor.process_template(from_sql) + if db_engine_spec: + from_sql = db_engine_spec.escape_sql(from_sql) return TextAsFrom(sa.text(from_sql), []).alias('expr_qry') return self.get_sqla_table() @@ -367,13 +374,14 @@ def get_sqla_query( # sqla 'form_data': form_data, } template_processor = self.get_template_processor(**template_kwargs) + db_engine_spec = self.database.db_engine_spec # For backward compatibility if granularity not in self.dttm_cols: granularity = self.main_dttm_col # Database spec supports join-free timeslot grouping - time_groupby_inline = self.database.db_engine_spec.time_groupby_inline + time_groupby_inline = db_engine_spec.time_groupby_inline cols = {col.column_name: col for col in self.columns} metrics_dict = {m.metric_name: m for m in self.metrics} @@ -428,7 +436,7 @@ def get_sqla_query( # sqla groupby_exprs += [timestamp] # Use main dttm column to support index with secondary dttm columns - if self.database.db_engine_spec.time_secondary_columns and \ + if db_engine_spec.time_secondary_columns and \ self.main_dttm_col in self.dttm_cols and \ self.main_dttm_col != dttm_col.column_name: time_filters.append(cols[self.main_dttm_col]. @@ -438,7 +446,7 @@ def get_sqla_query( # sqla select_exprs += metrics_exprs qry = sa.select(select_exprs) - tbl = self.get_from_clause(template_processor) + tbl = self.get_from_clause(template_processor, db_engine_spec) if not columns: qry = qry.group_by(*groupby_exprs) diff --git a/superset/connectors/sqla/views.py b/superset/connectors/sqla/views.py index cddd859dac104..ef87d3140a1ab 100644 --- a/superset/connectors/sqla/views.py +++ b/superset/connectors/sqla/views.py @@ -24,6 +24,12 @@ class TableColumnInlineView(CompactCRUDMixin, SupersetModelView): # noqa datamodel = SQLAInterface(models.TableColumn) + + list_title = _('List Columns') + show_title = _('Show Column') + add_title = _('Add Column') + edit_title = _('Edit Column') + can_delete = False list_widget = ListWidgetWithCheckboxes edit_columns = [ @@ -92,6 +98,12 @@ class TableColumnInlineView(CompactCRUDMixin, SupersetModelView): # noqa class SqlMetricInlineView(CompactCRUDMixin, SupersetModelView): # noqa datamodel = SQLAInterface(models.SqlMetric) + + list_title = _('List Metrics') + show_title = _('Show Metric') + add_title = _('Add Metric') + edit_title = _('Edit Metric') + list_columns = ['metric_name', 'verbose_name', 'metric_type'] edit_columns = [ 'metric_name', 'description', 'verbose_name', 'metric_type', @@ -136,6 +148,12 @@ def post_update(self, metric): class TableModelView(DatasourceModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.SqlaTable) + + list_title = _('List Tables') + show_title = _('Show Table') + add_title = _('Add Table') + edit_title = _('Edit Table') + list_columns = [ 'link', 'database', 'changed_by_', 'modified'] diff --git a/superset/db_engine_specs.py b/superset/db_engine_specs.py index d4a7fa0e4de4d..f159c7cd6735c 100644 --- a/superset/db_engine_specs.py +++ b/superset/db_engine_specs.py @@ -31,8 +31,9 @@ from superset.utils import SupersetTemplateException from superset.utils import QueryStatus -from superset import utils -from superset import cache_util +from superset import conf, cache_util, utils + +tracking_url_trans = conf.get('TRACKING_URL_TRANSFORMER') Grain = namedtuple('Grain', 'name label function') @@ -73,6 +74,11 @@ def extra_table_metadata(cls, database, table_name, schema_name): """Returns engine-specific table metadata""" return {} + @classmethod + def escape_sql(cls, sql): + """Escapes the raw SQL""" + return sql + @classmethod def convert_dttm(cls, target_type, dttm): return "'{}'".format(dttm.strftime('%Y-%m-%d %H:%M:%S')) @@ -139,14 +145,6 @@ def adjust_database_uri(cls, uri, selected_schema): """ return uri - @classmethod - def sql_preprocessor(cls, sql): - """If the SQL needs to be altered prior to running it - - For example Presto needs to double `%` characters - """ - return sql - @classmethod def patch(cls): pass @@ -399,6 +397,10 @@ def adjust_database_uri(cls, uri, selected_schema=None): uri.database = database return uri + @classmethod + def escape_sql(cls, sql): + return re.sub(r'%%|%', "%%", sql) + @classmethod def convert_dttm(cls, target_type, dttm): tt = target_type.upper() @@ -636,6 +638,21 @@ class HiveEngineSpec(PrestoEngineSpec): engine = 'hive' cursor_execute_kwargs = {'async': True} + # Scoping regex at class level to avoid recompiling + # 17/02/07 19:36:38 INFO ql.Driver: Total jobs = 5 + jobs_stats_r = re.compile( + r'.*INFO.*Total jobs = (?P[0-9]+)') + # 17/02/07 19:37:08 INFO ql.Driver: Launching Job 2 out of 5 + launching_job_r = re.compile( + '.*INFO.*Launching Job (?P[0-9]+) out of ' + '(?P[0-9]+)') + # 17/02/07 19:36:58 INFO exec.Task: 2017-02-07 19:36:58,152 Stage-18 + # map = 0%, reduce = 0% + stage_progress_r = re.compile( + r'.*INFO.*Stage-(?P[0-9]+).*' + r'map = (?P[0-9]+)%.*' + r'reduce = (?P[0-9]+)%.*') + @classmethod def patch(cls): from pyhive import hive @@ -665,41 +682,30 @@ def adjust_database_uri(cls, uri, selected_schema=None): return uri @classmethod - def progress(cls, logs): - # 17/02/07 19:36:38 INFO ql.Driver: Total jobs = 5 - jobs_stats_r = re.compile( - r'.*INFO.*Total jobs = (?P[0-9]+)') - # 17/02/07 19:37:08 INFO ql.Driver: Launching Job 2 out of 5 - launching_job_r = re.compile( - '.*INFO.*Launching Job (?P[0-9]+) out of ' - '(?P[0-9]+)') - # 17/02/07 19:36:58 INFO exec.Task: 2017-02-07 19:36:58,152 Stage-18 - # map = 0%, reduce = 0% - stage_progress = re.compile( - r'.*INFO.*Stage-(?P[0-9]+).*' - r'map = (?P[0-9]+)%.*' - r'reduce = (?P[0-9]+)%.*') - total_jobs = None - current_job = None + def progress(cls, log_lines): + total_jobs = 1 # assuming there's at least 1 job + current_job = 1 stages = {} - lines = logs.splitlines() - for line in lines: - match = jobs_stats_r.match(line) + for line in log_lines: + match = cls.jobs_stats_r.match(line) if match: - total_jobs = int(match.groupdict()['max_jobs']) - match = launching_job_r.match(line) + total_jobs = int(match.groupdict()['max_jobs']) or 1 + match = cls.launching_job_r.match(line) if match: current_job = int(match.groupdict()['job_number']) + total_jobs = int(match.groupdict()['max_jobs']) or 1 stages = {} - match = stage_progress.match(line) + match = cls.stage_progress_r.match(line) if match: stage_number = int(match.groupdict()['stage_number']) map_progress = int(match.groupdict()['map_progress']) reduce_progress = int(match.groupdict()['reduce_progress']) stages[stage_number] = (map_progress + reduce_progress) / 2 + logging.info( + "Progress detail: {}, " + "current job {}, " + "total jobs: {}".format(stages, current_job, total_jobs)) - if not total_jobs or not current_job: - return 0 stage_progress = sum( stages.values()) / len(stages.values()) if stages else 0 @@ -708,6 +714,13 @@ def progress(cls, logs): ) return int(progress) + @classmethod + def get_tracking_url(cls, log_lines): + lkp = "Tracking URL = " + for line in log_lines: + if lkp in line: + return line.split(lkp)[1] + @classmethod def handle_cursor(cls, cursor, query, session): """Updates progress information""" @@ -717,18 +730,45 @@ def handle_cursor(cls, cursor, query, session): hive.ttypes.TOperationState.RUNNING_STATE, ) polled = cursor.poll() + last_log_line = 0 + tracking_url = None + job_id = None while polled.operationState in unfinished_states: query = session.query(type(query)).filter_by(id=query.id).one() if query.status == QueryStatus.STOPPED: cursor.cancel() break - resp = cursor.fetch_logs() - if resp and resp.log: - progress = cls.progress(resp.log) + log = cursor.fetch_logs() or '' + if log: + log_lines = log.splitlines() + progress = cls.progress(log_lines) + logging.info("Progress total: {}".format(progress)) + needs_commit = False if progress > query.progress: query.progress = progress - session.commit() + needs_commit = True + if not tracking_url: + tracking_url = cls.get_tracking_url(log_lines) + if tracking_url: + job_id = tracking_url.split('/')[-2] + logging.info( + "Found the tracking url: {}".format(tracking_url)) + tracking_url = tracking_url_trans(tracking_url) + logging.info( + "Transformation applied: {}".format(tracking_url)) + query.tracking_url = tracking_url + logging.info("Job id: {}".format(job_id)) + needs_commit = True + if job_id and len(log_lines) > last_log_line: + # Wait for job id before logging things out + # this allows for prefixing all log lines and becoming + # searchable in something like Kibana + for l in log_lines[last_log_line:]: + logging.info("[{}] {}".format(job_id, l)) + last_log_line = len(log_lines) + if needs_commit: + session.commit() time.sleep(5) polled = cursor.poll() @@ -910,6 +950,34 @@ def convert_dttm(cls, target_type, dttm): dttm.strftime('%Y-%m-%d %H:%M:%S')) return "'{}'".format(dttm.strftime('%Y-%m-%d %H:%M:%S')) + +class BQEngineSpec(BaseEngineSpec): + """Engine spec for Google's BigQuery + + As contributed by @mxmzdlv on issue #945""" + engine = 'bigquery' + + time_grains = ( + Grain("Time Column", _('Time Column'), "{col}"), + Grain("second", _('second'), "TIMESTAMP_TRUNC({col}, SECOND)"), + Grain("minute", _('minute'), "TIMESTAMP_TRUNC({col}, MINUTE)"), + Grain("hour", _('hour'), "TIMESTAMP_TRUNC({col}, HOUR)"), + Grain("day", _('day'), "TIMESTAMP_TRUNC({col}, DAY)"), + Grain("week", _('week'), "TIMESTAMP_TRUNC({col}, WEEK)"), + Grain("month", _('month'), "TIMESTAMP_TRUNC({col}, MONTH)"), + Grain("quarter", _('quarter'), "TIMESTAMP_TRUNC({col}, QUARTER)"), + Grain("year", _('year'), "TIMESTAMP_TRUNC({col}, YEAR)"), + ) + + @classmethod + def convert_dttm(cls, target_type, dttm): + tt = target_type.upper() + if tt == 'DATE': + return "'{}'".format(dttm.strftime('%Y-%m-%d')) + else: + return "'{}'".format(dttm.strftime('%Y-%m-%d %H:%M:%S')) + + engines = { o.engine: o for o in globals().values() if inspect.isclass(o) and issubclass(o, BaseEngineSpec)} diff --git a/superset/db_engines/hive.py b/superset/db_engines/hive.py index d3244feac62b0..a31b4d7f323d8 100644 --- a/superset/db_engines/hive.py +++ b/superset/db_engines/hive.py @@ -1,5 +1,6 @@ from pyhive import hive from pythrifthiveapi.TCLIService import ttypes +from thrift import Thrift # TODO: contribute back to pyhive. @@ -15,9 +16,11 @@ def fetch_logs(self, max_rows=1024, """ try: req = ttypes.TGetLogReq(operationHandle=self._operationHandle) - logs = self._connection.client.GetLog(req) + logs = self._connection.client.GetLog(req).log return logs - except ttypes.TApplicationException as e: # raised if Hive is used + # raised if Hive is used + except (ttypes.TApplicationException, + Thrift.TApplicationException): if self._state == self._STATE_NONE: raise hive.ProgrammingError("No query yet") logs = [] @@ -30,12 +33,11 @@ def fetch_logs(self, max_rows=1024, ) response = self._connection.client.FetchResults(req) hive._check_status(response) - assert not ( - response.results.rows, 'expected data in columnar format' - ) + assert not response.results.rows, \ + 'expected data in columnar format' assert len(response.results.columns) == 1, response.results.columns new_logs = hive._unwrap_column(response.results.columns[0]) logs += new_logs if not new_logs: break - return logs + return '\n'.join(logs) diff --git a/superset/migrations/versions/ca69c70ec99b_tracking_url.py b/superset/migrations/versions/ca69c70ec99b_tracking_url.py new file mode 100644 index 0000000000000..8a2ef38295c67 --- /dev/null +++ b/superset/migrations/versions/ca69c70ec99b_tracking_url.py @@ -0,0 +1,23 @@ +"""tracking_url + +Revision ID: ca69c70ec99b +Revises: a65458420354 +Create Date: 2017-07-26 20:09:52.606416 + +""" + +# revision identifiers, used by Alembic. +revision = 'ca69c70ec99b' +down_revision = 'a65458420354' + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + + +def upgrade(): + op.add_column('query', sa.Column('tracking_url', sa.Text(), nullable=True)) + + +def downgrade(): + op.drop_column('query', 'tracking_url') diff --git a/superset/models/sql_lab.py b/superset/models/sql_lab.py index 00eb388150041..e2e125ad2438a 100644 --- a/superset/models/sql_lab.py +++ b/superset/models/sql_lab.py @@ -69,6 +69,7 @@ class Query(Model): start_running_time = Column(Numeric(precision=20, scale=6)) end_time = Column(Numeric(precision=20, scale=6)) end_result_backend_time = Column(Numeric(precision=20, scale=6)) + tracking_url = Column(Text) changed_on = Column( DateTime, @@ -119,6 +120,7 @@ def to_dict(self): 'user': self.user.username, 'limit_reached': self.limit_reached, 'resultsKey': self.results_key, + 'trackingUrl': self.tracking_url, } @property diff --git a/superset/sql_lab.py b/superset/sql_lab.py index 4b0bd863bcd04..55130cdaed618 100644 --- a/superset/sql_lab.py +++ b/superset/sql_lab.py @@ -154,7 +154,6 @@ def handle_error(msg): template_processor = get_template_processor( database=database, query=query) executed_sql = template_processor.process_template(executed_sql) - executed_sql = db_engine_spec.sql_preprocessor(executed_sql) except Exception as e: logging.exception(e) msg = "Template rendering failed: " + utils.error_msg_from_exception(e) @@ -193,6 +192,9 @@ def handle_error(msg): conn.close() return handle_error(db_engine_spec.extract_error_message(e)) + logging.info("Fetching cursor description") + cursor_description = cursor.description + conn.commit() conn.close() @@ -204,7 +206,7 @@ def handle_error(msg): }, default=utils.json_iso_dttm_ser) column_names = ( - [col[0] for col in cursor.description] if cursor.description else []) + [col[0] for col in cursor_description] if cursor_description else []) column_names = dedup(column_names) cdf = dataframe.SupersetDataFrame(pd.DataFrame( list(data), columns=column_names)) diff --git a/superset/translations/catalogs.json b/superset/translations/catalogs.json deleted file mode 100644 index cafd557eee69e..0000000000000 --- a/superset/translations/catalogs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "supported_locales": [ - "en", - "es", - "fr", - "it", - "zh" - ] -} diff --git a/superset/translations/en/LC_MESSAGES/messages.mo b/superset/translations/en/LC_MESSAGES/messages.mo index de0bef3434f6dd900f9690ba089cf64825b25c60..aa77f074331cd4fc733a95c9e766374d29e6765a 100644 GIT binary patch literal 58907 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 sL$HA}PK@}{o1Ypo`\n" "Language: en\n" @@ -18,342 +18,2701 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:225 -#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:317 -#: superset/db_engine_specs.py:362 superset/db_engine_specs.py:770 -#: superset/db_engine_specs.py:806 superset/db_engine_specs.py:838 -#: superset/db_engine_specs.py:884 +#: superset/assets/javascripts/explore/stores/controls.jsx:491 +#: superset/db_engine_specs.py:192 superset/db_engine_specs.py:223 +#: superset/db_engine_specs.py:267 superset/db_engine_specs.py:315 +#: superset/db_engine_specs.py:360 superset/db_engine_specs.py:810 +#: superset/db_engine_specs.py:846 superset/db_engine_specs.py:878 +#: superset/db_engine_specs.py:924 superset/db_engine_specs.py:961 msgid "Time Column" msgstr "" -#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:226 -#: superset/db_engine_specs.py:318 superset/db_engine_specs.py:363 -#: superset/db_engine_specs.py:771 superset/db_engine_specs.py:839 +#: superset/db_engine_specs.py:193 superset/db_engine_specs.py:224 +#: superset/db_engine_specs.py:316 superset/db_engine_specs.py:361 +#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:879 +#: superset/db_engine_specs.py:962 msgid "second" msgstr "" -#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:229 -#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 -#: superset/db_engine_specs.py:773 superset/db_engine_specs.py:807 -#: superset/db_engine_specs.py:841 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:227 +#: superset/db_engine_specs.py:319 superset/db_engine_specs.py:363 +#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:881 superset/db_engine_specs.py:925 +#: superset/db_engine_specs.py:963 msgid "minute" msgstr "" -#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:233 -#: superset/db_engine_specs.py:323 superset/db_engine_specs.py:367 -#: superset/db_engine_specs.py:779 superset/db_engine_specs.py:809 -#: superset/db_engine_specs.py:843 superset/db_engine_specs.py:891 -msgid "hour" +#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:231 +#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 +#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:849 +#: superset/db_engine_specs.py:883 superset/db_engine_specs.py:931 +#: superset/db_engine_specs.py:964 +msgid "hour" +msgstr "" + +#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:236 +#: superset/db_engine_specs.py:268 superset/db_engine_specs.py:323 +#: superset/db_engine_specs.py:367 superset/db_engine_specs.py:821 +#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:933 superset/db_engine_specs.py:965 +msgid "day" +msgstr "" + +#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:242 +#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:324 +#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:823 +#: superset/db_engine_specs.py:853 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:966 +msgid "week" +msgstr "" + +#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:244 +#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 +#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:825 +#: superset/db_engine_specs.py:855 superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:935 superset/db_engine_specs.py:967 +msgid "month" +msgstr "" + +#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:246 +#: superset/db_engine_specs.py:328 superset/db_engine_specs.py:373 +#: superset/db_engine_specs.py:827 superset/db_engine_specs.py:857 +#: superset/db_engine_specs.py:891 superset/db_engine_specs.py:937 +#: superset/db_engine_specs.py:968 +msgid "quarter" +msgstr "" + +#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:250 +#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:829 +#: superset/db_engine_specs.py:859 superset/db_engine_specs.py:939 +#: superset/db_engine_specs.py:969 +msgid "year" +msgstr "" + +#: superset/db_engine_specs.py:332 +msgid "week_start_monday" +msgstr "" + +#: superset/db_engine_specs.py:375 superset/db_engine_specs.py:893 +msgid "week_ending_saturday" +msgstr "" + +#: superset/db_engine_specs.py:378 superset/db_engine_specs.py:896 +msgid "week_start_sunday" +msgstr "" + +#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:927 +msgid "5 minute" +msgstr "" + +#: superset/db_engine_specs.py:817 +msgid "half hour" +msgstr "" + +#: superset/db_engine_specs.py:929 +msgid "10 minute" +msgstr "" + +#: superset/utils.py:472 +#, python-format +msgid "[Superset] Access to the datasource %(name)s was granted" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:283 +#: superset/viz.py:312 +msgid "Table View" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:334 +#: superset/viz.py:368 +msgid "Pivot Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:321 +#: superset/viz.py:423 +msgid "Markup" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:348 +#: superset/viz.py:442 +msgid "Separator" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:369 +#: superset/viz.py:458 +msgid "Word Cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:383 +#: superset/viz.py:481 +msgid "Treemap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:403 +#: superset/viz.py:507 +msgid "Calendar Heatmap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:418 +#: superset/viz.py:565 +msgid "Box Plot" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:437 +#: superset/viz.py:654 +msgid "Bubble Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:481 +#: superset/viz.py:704 +msgid "Bullet Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:497 +#: superset/viz.py:753 +msgid "Big Number with Trendline" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:516 +#: superset/viz.py:782 +msgid "Big Number" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:21 +#: superset/assets/javascripts/explore/stores/visTypes.js:127 +#: superset/viz.py:809 +msgid "Time Series - Line Chart" +msgstr "" + +#: superset/viz.py:936 +msgid "Time Series - Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:22 +#: superset/assets/javascripts/explore/stores/visTypes.js:197 +#: superset/viz.py:1011 +msgid "Time Series - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:230 +#: superset/viz.py:1019 +msgid "Time Series - Percent Change" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:251 +#: superset/viz.py:1027 +msgid "Time Series - Stacked" +msgstr "" + +#: superset/viz.py:1036 +msgid "Distribution - NVD3 - Pie Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:535 +#: superset/viz.py:1054 +msgid "Histogram" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:19 +#: superset/assets/javascripts/explore/stores/visTypes.js:81 +#: superset/viz.py:1079 +msgid "Distribution - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:565 +#: superset/viz.py:1146 +msgid "Sunburst" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:595 +#: superset/viz.py:1179 +msgid "Sankey" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:615 +#: superset/viz.py:1228 superset/viz.py:1249 +msgid "Directed Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:672 +#: superset/viz.py:1282 +msgid "Country Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:696 +#: superset/viz.py:1311 +msgid "World Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:63 +#: superset/viz.py:1361 +msgid "Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:758 +#: superset/viz.py:1396 +msgid "iFrame" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:770 +#: superset/viz.py:1413 +msgid "Parallel Coordinates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:786 +#: superset/viz.py:1438 +msgid "Heatmap" +msgstr "" + +#: superset/viz.py:1489 +msgid "Horizon Charts" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:830 +#: superset/viz.py:1500 +msgid "Mapbox" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:900 +#: superset/viz.py:1603 +msgid "Event flow" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:55 +msgid "Your query was saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:56 +msgid "Your query could not be saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:109 +msgid "Failed at retrieving results from the results backend" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:155 +msgid "Could not connect to server" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:160 +msgid "Your session timed out, please refresh your page and try again." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:179 +msgid "Query was stopped." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:182 +msgid "Failed at stopping query." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:295 +#: superset/assets/javascripts/SqlLab/actions.js:308 +msgid "Error occurred while fetching table metadata" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:358 +msgid "shared query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:366 +#: superset/assets/javascripts/SqlLab/actions.js:386 +msgid "The query couldn't be loaded" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:419 +msgid "An error occurred while creating the data source" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:29 +msgid "Pick a chart type!" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:30 +msgid "To use this chart type you need at least one column flagged as a date" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:31 +msgid "To use this chart type you need at least one dimension" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:32 +msgid "To use this chart type you need at least one aggregation function" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:49 +#: superset/assets/javascripts/SqlLab/reducers.js:11 +msgid "Untitled Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/reducers.js:44 +#, python-format +msgid "Copy of %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:30 +msgid "share query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:33 +msgid "copy URL to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:56 +msgid "Raw SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:66 +msgid "Source SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:78 +#: superset/assets/javascripts/explore/stores/visTypes.js:31 +msgid "SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryHistory.jsx:28 +msgid "No query history yet..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:106 +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:66 +msgid "It seems you don't have access to any database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:154 +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:90 +msgid "Search Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:160 +msgid "[From]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:171 +msgid "[To]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:181 +msgid "[Query Status]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:190 +msgid "Search" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:114 +msgid "Open in SQL Editor" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:133 +msgid "view results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:136 +msgid "Data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:176 +msgid "Visualize the data out of this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:182 +msgid "Overwrite text in editor with a query on this table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:188 +msgid "Run query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:193 +msgid "Remove query from log" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:68 +msgid ".CSV" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:79 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:235 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:274 +msgid "Visualize" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:151 +msgid "Query was stopped" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +#: superset/connectors/sqla/views.py:86 superset/connectors/sqla/views.py:135 +#: superset/connectors/sqla/views.py:213 superset/views/core.py:375 +msgid "Table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +msgid "was created" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:201 +msgid "Query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:240 +msgid "Fetch data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:244 +msgid "The query returned no data" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Selected Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:22 +msgid "Run query asynchronously" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:56 +msgid "Stop" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:16 +msgid "Undefined" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:66 +msgid "Label" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:71 +msgid "Label for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:81 +#: superset/connectors/druid/views.py:107 +#: superset/connectors/druid/views.py:229 superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:131 superset/views/core.py:369 +msgid "Description" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:85 +msgid "Write a description for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:99 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:139 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 +msgid "Save" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:102 +#: superset/templates/superset/request_access.html:16 +msgid "Cancel" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:123 +msgid "Save Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:80 +msgid "Run a query to display results here" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:85 +#, python-format +msgid "Preview for %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:109 +msgid "Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:115 +msgid "Query History" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:112 +#, python-format +msgid "" +"It appears that the number of rows in the query results displayed was " +"limited on the server side to the %s limit." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:123 +msgid "Create table as with query results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:131 +msgid "new table name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:90 +msgid "Error while fetching table list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:131 +msgid "Error while fetching schema list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:153 +msgid "Error while fetching database list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:159 +msgid "Database:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:163 +msgid "Select a database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:170 +#, python-format +msgid "Select a schema (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:175 +msgid "Schema:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:190 +#, python-format +msgid "Add a table (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:203 +msgid "Type to search ..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:226 +msgid "Reset State" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:105 +msgid "Enter a new title for the tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:124 +#, python-format +msgid "Untitled Query %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:170 +msgid "close tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:173 +msgid "rename tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "expand tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "hide tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:75 +msgid "Copy partition query to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:94 +msgid "latest partition:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:110 +msgid "Keys for table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:119 +#, python-format +msgid "View keys & indexes (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:135 +msgid "Sort columns alphabetically" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:136 +msgid "Original table column order" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:146 +msgid "Copy SELECT statement to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:152 +msgid "Remove table preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:20 +#: superset/assets/javascripts/explore/stores/visTypes.js:111 +msgid "Pie Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:85 +#, python-format +msgid "%s is not right as a column name, please alias it (as in SELECT count(*) " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "AS my_alias" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "using only alphanumeric characters and underscores" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:136 +#, python-format +msgid "This query took %s seconds to run," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:137 +#, python-format +msgid "and the explore view times out at %s seconds," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:138 +msgid "" +"following this flow will most likely lead to your query timing out.We " +"recommend your summarize your data further before following that flow.If " +"activated you can use the " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:140 +msgid "featureto store a summarized data set that you can then explore." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:160 +msgid "Creating a data source and popping a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:190 +msgid "No results available for this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:242 +msgid "Chart Type" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:245 +msgid "[Chart Type]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:253 +msgid "Datasource Name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:257 +msgid "datasource name" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:54 +msgid "Create a new slice" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:59 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:65 +msgid "Choose a datasource" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:71 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:77 +msgid "Choose a visualization type" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:87 +msgid "Create new slice" +msgstr "" + +#: superset/assets/javascripts/components/AsyncSelect.jsx:20 +msgid "Select ..." +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:26 +msgid "Loaded data cached" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:28 +msgid "Loaded from cache" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:33 +msgid "Click to force-refresh" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:21 +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:67 +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:37 +msgid "Copy to clipboard" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:65 +msgid "Not successful" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:68 +msgid "Sorry, your browser does not support copying. Use Ctrl / Cmd + C!" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:79 +msgid "Copied!" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:12 +#: superset/views/core.py:470 superset/views/core.py:537 +msgid "Title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "click to edit title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "You don't have the rights to alter this title." +msgstr "" + +#: superset/assets/javascripts/components/FaveStar.jsx:32 +#: superset/assets/javascripts/modules/superset.js:33 +msgid "Click to favorite/unfavorite" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:36 +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "You have unsaved changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "Click the" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:55 +msgid "button on the top right to save your changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:158 +#, python-format +msgid "Served from data cached %s . Click to force refresh." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:163 +msgid "Click to force refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:337 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:93 +msgid "Error" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:338 +#, python-format +msgid "Sorry, there was an error adding slices to this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CodeModal.jsx:35 +msgid "Active Dashboard Filters" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:48 +#, python-format +msgid "Checkout this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:54 +msgid "Force refresh the whole dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:94 +msgid "Edit this dashboard's properties" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:65 +msgid "Load a template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:68 +msgid "Load a CSS template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:80 +#: superset/views/core.py:477 +msgid "CSS" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:86 +msgid "Live CSS Editor" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:19 +msgid "Don't refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:20 +msgid "10 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:21 +msgid "30 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:22 +msgid "1 minute" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:23 +msgid "5 minutes" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:38 +msgid "Refresh Interval" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:41 +msgid "Choose the refresh frequency for this dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:58 +msgid "This dashboard was saved successfully." +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:64 +msgid "Sorry, there was an error saving this dashboard: " +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:94 +msgid "You must pick a name for the new dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:108 +msgid "Save Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:116 +#, python-format +msgid "Overwrite Dashboard [%s]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:123 +msgid "Save as:" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:127 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 +msgid "[dashboard name]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:137 +#: superset/views/core.py:374 +msgid "Name" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:143 +msgid "Viz" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:152 +#: superset/views/core.py:475 superset/views/core.py:539 +msgid "Modified" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:162 +msgid "Add Slices" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:171 +msgid "Add a new slice to the dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:175 +msgid "Add Slices to Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:23 +msgid "Move chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:26 +msgid "Force refresh data" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:30 +msgid "Toggle chart description" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:40 +msgid "Edit chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:45 +msgid "Explore chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:50 +msgid "Remove chart from dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:170 +#, python-format +msgid "%s - untitled" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:276 +msgid "Edit slice properties" +msgstr "" + +#: superset/assets/javascripts/explore/components/ControlHeader.jsx:60 +msgid "Takes effect on chart immediatly" +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:56 +msgid "Error..." +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:92 +msgid "Query" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:76 +msgid "Height" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:90 +msgid "Width" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:32 +msgid "Export to .json" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:42 +msgid "Export to .csv format" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 +msgid "Please enter a slice name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 +msgid "Please select a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 +msgid "Please enter a dashboard name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 +msgid "Save A Slice" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 +#, python-format +msgid "Overwrite slice %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 +msgid "Save as" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 +msgid "[slice name]" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 +msgid "Do not add to a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 +msgid "Add slice to existing dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 +msgid "Add to new dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 +msgid "Save & go to dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:32 +#, python-format +msgid "Check out this slice: %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:55 +msgid "`Min` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:58 +msgid "`Max` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:75 +#: superset/connectors/druid/views.py:50 superset/connectors/sqla/views.py:89 +msgid "Min" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:83 +#: superset/connectors/druid/views.py:51 superset/connectors/sqla/views.py:90 +msgid "Max" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:118 +msgid "Filter value" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select metric" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select column" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:159 +msgid "Select operator" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/FilterControl.jsx:70 +msgid "Add Filter" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/SelectControl.jsx:106 +#, python-format +msgid "Select %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:62 +msgid "textarea" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "Edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "in modal" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:90 +#: superset/assets/javascripts/explore/stores/controls.jsx:46 +msgid "edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:104 +msgid "Select a visualization type" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:114 +msgid "Search / Filter" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:61 +#, python-format +msgid "fetching dashboards failed for %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:100 +msgid "Updating chart was stopped" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:106 +#: superset/assets/javascripts/modules/superset.js:220 +#, python-format +msgid "An error occurred while rendering the visualization: %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:117 +msgid "Query timeout" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:118 +#, python-format +msgid "- visualization query are set to timeout at %s seconds. " +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:119 +msgid "" +"Perhaps your data has grown, your database is under unusual load, or you " +"are simply querying a data source that is to large to be processed within" +" the timeout range. If that is the case, we recommend that you summarize " +"your data further." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:127 +msgid "Network error." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:150 +msgid "Failed to save slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:35 +#: superset/connectors/druid/views.py:45 superset/views/core.py:313 +#: superset/views/core.py:368 +msgid "Datasource" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:55 +#: superset/views/core.py:376 +msgid "Visualization Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:57 +msgid "The type of visualization to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:63 +msgid "Metrics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:72 +#: superset/assets/javascripts/explore/stores/controls.jsx:90 +msgid "One or many metrics to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:79 +msgid "" +"Bounds for the Y axis. When left empty, the bounds are dynamically " +"defined based on the min/max of the data. Note that this feature will " +"only expand the axis range. It won't narrow the data's extent." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:88 +msgid "Ordering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:100 +msgid "Choose the metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:113 +msgid "Right Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:117 +msgid "Choose a metric for right axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:128 +msgid "Stacked Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:140 +msgid "Linear Color Scheme" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:153 +msgid "Normalize Across" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:160 +msgid "" +"Color will be rendered based on a ratio of the cell against the sum of " +"across this criteria" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:167 +msgid "Horizon Color Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:174 +msgid "Defines how the color are attributed." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:179 +msgid "Rendering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:185 +msgid "" +"image-rendering CSS attribute of the canvas object that defines how the " +"browser scales up the image" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:191 +msgid "XScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:194 +msgid "Number of steps to take between ticks when displaying the X scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:200 +msgid "YScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:203 +msgid "Number of steps to take between ticks when displaying the Y scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:209 +msgid "Include Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:210 +msgid "Whether to include the time granularity as defined in the time section" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:216 +msgid "Stacked Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:232 +msgid "Show Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:235 +msgid "Show data points as circle markers on the lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:240 +msgid "Bar Values" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:248 +msgid "Sort Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:250 +msgid "Sort bars by x labels." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:263 +msgid "Extra Controls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:266 +msgid "" +"Whether to show extra controls or not. Extra controls include things like" +" making mulitBar charts stacked or side by side." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:273 +msgid "Reduce X ticks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:276 +msgid "" +"Reduces the number of X axis ticks to be rendered. If true, the x axis " +"wont overflow and labels may be missing. If false, a minimum width will " +"be applied to columns and the width may overflow into an horizontal " +"scroll." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:285 +msgid "Include Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:288 +msgid "Include series name as an axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:293 +msgid "Color Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:295 +msgid "A metric to use for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:302 +msgid "Country Name" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:321 +msgid "The name of country that Superset should display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:325 +msgid "Country Field Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:333 +msgid "" +"The country code standard that Superset should expect to find in the " +"[country] column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:340 +msgid "Group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:342 +msgid "One or many controls to group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:354 +#: superset/assets/javascripts/explore/stores/controls.jsx:368 +msgid "Columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:370 +#: superset/assets/javascripts/explore/stores/controls.jsx:380 +#: superset/assets/javascripts/explore/stores/controls.jsx:390 +msgid "Columns to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:378 +msgid "X" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:388 +msgid "Y" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:399 +msgid "Origin" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:405 +msgid "" +"Defines the origin where time buckets start, accepts natural dates as in " +"`now`, `sunday` or `1970-01-01`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:415 +msgid "Bottom marging, in pixels, allowing for more room for axis labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:421 +msgid "Time Granularity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:438 +msgid "" +"The time granularity for the visualization. Note that you can type and " +"use simple natural language as in `10 seconds`, `1 day` or `56 weeks`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:445 +msgid "Domain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:448 +msgid "The time unit used for the grouping of blocks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:453 +msgid "Subdomain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:456 +msgid "" +"The time unit for each block. Should be a smaller unit than " +"domain_granularity. Should be larger or equal to Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:463 +msgid "Link Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:466 +msgid "Link length in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:472 +msgid "Charge" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:486 +msgid "Charge in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:494 +msgid "" +"The time column for the visualization. Note that you can define arbitrary" +" expression that return a DATETIME column in the table or. Also note that" +" the filter below is applied against this column or expression" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:506 +msgid "Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:508 +msgid "" +"The time granularity for the visualization. This applies a date " +"transformation to alter your time column and defines a new time " +"granularity. The options here are defined on a per database engine basis " +"in the Superset source code." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:521 +msgid "Resample Rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:524 +msgid "Pandas resample rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:530 +msgid "Resample How" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:533 +msgid "Pandas resample how" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:539 +msgid "Resample Fill Method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:542 +msgid "Pandas resample fill method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:548 +msgid "Since" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:560 +msgid "" +"Timestamp from filter. This supports free form typing and natural " +"language as in `1 day ago`, `28 days` or `3 years`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:567 +msgid "Until" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:582 +msgid "Max Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:590 +msgid "Whisker/outlier options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:592 +msgid "Determines how whiskers and outliers are calculated." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:603 +msgid "Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:606 +msgid "Target aspect ratio for treemap tiles." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:612 +#: superset/assets/javascripts/explore/stores/visTypes.js:510 +#: superset/assets/javascripts/explore/stores/visTypes.js:529 +#: superset/assets/javascripts/explore/stores/visTypes.js:654 +msgid "Number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:622 +msgid "Row limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:630 +msgid "Series limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:633 +msgid "Limits the number of time series that get displayed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:638 +msgid "Sort By" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:640 +msgid "Metric used to define the top series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:648 +msgid "Rolling" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:651 +msgid "" +"Defines a rolling window function to apply, works along with the " +"[Periods] text box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:657 +msgid "Periods" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:659 +msgid "" +"Defines the size of the rolling window function, relative to the time " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:665 +#: superset/assets/javascripts/explore/stores/visTypes.js:101 +msgid "Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:667 +msgid "" +"Defines the grouping of entities. Each series is shown as a specific " +"color on the chart and has a legend toggle" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:677 +msgid "Entity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:680 +msgid "This defines the element to be plotted on the chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:688 +#: superset/assets/javascripts/explore/stores/visTypes.js:459 +msgid "X Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:689 +msgid "Metric assigned to the [X] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:702 +#: superset/assets/javascripts/explore/stores/visTypes.js:466 +msgid "Y Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:705 +msgid "Metric assigned to the [Y] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:716 +msgid "Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:729 +msgid "URL" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:730 +msgid "" +"The URL, this control is templated, so you can integrate {{ width }} " +"and/or {{ height }} in your URL string." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:737 +msgid "X Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:744 +msgid "Y Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:751 +msgid "Custom WHERE clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:753 +msgid "" +"The text in this box gets included in your query's WHERE clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:761 +msgid "Custom HAVING clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:763 +msgid "" +"The text in this box gets included in your query's HAVING clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:771 +msgid "Comparison Period Lag" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:773 +msgid "Based on granularity, number of time periods to compare against" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:778 +msgid "Comparison suffix" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:779 +msgid "Suffix to apply after the percentage display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:785 +msgid "Table Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:790 +msgid "Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:796 +msgid "Series Height" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:799 +msgid "Pixel height of each series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:805 +msgid "Page Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:808 +msgid "Rows per page, 0 means no pagination" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:814 +#: superset/assets/javascripts/explore/stores/controls.jsx:824 +msgid "X Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:834 +msgid "Y Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:844 +msgid "Right Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:852 +msgid "Markup Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:857 +msgid "Pick your favorite markup language" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:862 +msgid "Rotation" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:865 +msgid "Rotation to apply to words in the cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:870 +msgid "Line Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:875 +msgid "Line interpolation as defined by d3.js" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:880 +msgid "Label Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:887 +msgid "What should be shown on the label?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:892 +msgid "Code" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:893 +msgid "Put your code here" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:902 +msgid "Aggregation function" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:914 +msgid "" +"Aggregate function to apply when pivoting and computing the total rows " +"and columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:921 +msgid "Font Size From" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:923 +msgid "Font size for the smallest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:929 +msgid "Font Size To" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:931 +msgid "Font size for the biggest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:936 +msgid "Instant Filtering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:940 +msgid "" +"Whether to apply filters as they change, or wait forusers to hit an " +"[Apply] button" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:947 +msgid "Range Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:950 +msgid "Whether to display the time range interactive selector" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:955 +msgid "Date Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:957 +msgid "Whether to include a time filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:962 +msgid "Data Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:964 +msgid "Whether to display the interactive data table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:969 +msgid "Search Box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:972 +msgid "Whether to include a client side search box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:977 +msgid "Table Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:979 +msgid "Whether to apply filter when table cell is clicked" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:984 +msgid "Show Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:987 +msgid "Whether to display bubbles on top of countries" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:992 +msgid "Legend" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:995 +msgid "Whether to display the legend (toggles)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1000 +msgid "X bounds" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1003 +msgid "Whether to display the min and max values of the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1008 +msgid "Rich Tooltip" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1011 +msgid "The rich tooltip shows a list of all series for that point in time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1017 +msgid "Y Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1020 +msgid "Use a log scale for the Y axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1025 +msgid "X Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1028 +msgid "Use a log scale for the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1033 +msgid "Donut" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1036 +msgid "Do you want a donut or a pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1041 +msgid "Put labels outside" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1044 +msgid "Put the labels outside the pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1049 +msgid "Contribution" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1051 +msgid "Compute the contribution to the total" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1056 +msgid "Period Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1059 +msgid "" +"[integer] Number of period to compare against, this is relative to the " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1065 +msgid "Period Ratio Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1068 +msgid "" +"`factor` means (new/previous), `growth` is ((new/previous) - 1), `value` " +"is (new-previous)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1074 +msgid "Time Shift" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1076 +msgid "" +"Overlay a timeseries from a relative time period. Expects relative time " +"delta in natural language (example: 24 hours, 7 days, 56 weeks, 365 " +"days)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1084 +msgid "Subheader" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1085 +msgid "Description text that shows up below your Big Number" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1091 +msgid "label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1093 +msgid "" +"`count` is COUNT(*) if a group by is used. Numerical columns will be " +"aggregated with the aggregator. Non-numerical columns will be used to " +"label points. Leave empty to get a count of points in each cluster." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1104 +msgid "Map Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1114 +msgid "Base layer map style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1120 +msgid "Clustering Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1133 +msgid "" +"The radius (in pixels) the algorithm uses to define a cluster. Choose 0 " +"to turn off clustering, but beware that a large number of points (>1000) " +"will cause lag." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1140 +msgid "Point Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1142 +msgid "" +"The radius of individual points (ones that are not in a cluster). Either " +"a numerical column or `Auto`, which scales the point based on the largest" +" cluster" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1152 +msgid "Point Radius Unit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1155 +msgid "The unit of measure for the specified point radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1160 +msgid "Opacity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1163 +msgid "Opacity of all clusters, points, and labels. Between 0 and 1." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1169 +msgid "Zoom" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1172 +msgid "Zoom level of the map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1178 +msgid "Default latitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1181 +msgid "Latitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1187 +msgid "Default longitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1190 +msgid "Longitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1196 +msgid "Live render" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1198 +msgid "Points and clusters will update as viewport is being changed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1204 +msgid "RGB Color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1214 +msgid "The color for points and clusters in RGB" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1219 +msgid "Ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1221 +msgid "Ranges to highlight with shading" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1226 +msgid "Range labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1228 +msgid "Labels for the ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1233 +msgid "Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1235 +msgid "List of values to mark with triangles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1240 +msgid "Marker labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1242 +msgid "Labels for the markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1247 +msgid "Marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1249 +msgid "List of values to mark with lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1254 +msgid "Marker line labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1256 +msgid "Labels for the marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1283 +msgid "Slice ID" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1285 +msgid "The id of the active slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1290 +msgid "Cache Timeout (seconds)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1292 +msgid "The number of seconds before expiring the cache" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1297 +msgid "Order by entity id" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1298 +msgid "" +"Important! Select this if the table is not already sorted by entity id, " +"else there is no guarantee that all events for each entity are returned." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1306 +msgid "Minimum leaf node event count" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1309 +msgid "" +"Leaf nodes that represent fewer than this number of events will be " +"initially hidden in the visualization" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:7 +#: superset/assets/javascripts/explore/stores/visTypes.js:23 +msgid "Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:8 +#: superset/assets/javascripts/explore/stores/visTypes.js:24 +msgid "Time related form attributes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:15 +msgid "Datasource & Chart Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:36 +msgid "This section exposes ways to include snippets of SQL in your query" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:48 +msgid "Advanced Analytics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:49 +msgid "" +"This section contains options that allow for advanced analytical post " +"processing of query results" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:64 +msgid "" +"Filters are defined using comma delimited strings as in " +"Leave the value control empty to filter empty strings or " +"nullsFor filters with comma in values, wrap them in single quotesas in " +"" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:71 +msgid "Result Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:72 +msgid "" +"The filters to apply after post-aggregation.Leave the value control empty" +" to filter empty strings or nulls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:84 +#: superset/assets/javascripts/explore/stores/visTypes.js:132 +#: superset/assets/javascripts/explore/stores/visTypes.js:163 +#: superset/assets/javascripts/explore/stores/visTypes.js:202 +#: superset/assets/javascripts/explore/stores/visTypes.js:235 +#: superset/assets/javascripts/explore/stores/visTypes.js:256 +#: superset/assets/javascripts/explore/stores/visTypes.js:393 +#: superset/assets/javascripts/explore/stores/visTypes.js:428 +#: superset/assets/javascripts/explore/stores/visTypes.js:447 +#: superset/assets/javascripts/explore/stores/visTypes.js:821 +msgid "Chart Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:104 +msgid "Breakdowns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:105 +msgid "Defines how each series is broken down" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:141 +#: superset/assets/javascripts/explore/stores/visTypes.js:211 +#: superset/assets/javascripts/explore/stores/visTypes.js:265 +msgid "Axes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:159 +msgid "Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:169 +msgid "Y Axis 1" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:175 +msgid "Y Axis 2" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:183 +msgid "Left Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:184 +msgid "Choose a metric for left axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:187 +msgid "Left Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:286 +msgid "GROUP BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:287 +msgid "Use this section if you want a query that aggregates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:294 +msgid "NOT GROUPED BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:295 +msgid "Use this section if you want to query atomic rows" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:302 +msgid "Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:453 +#: superset/assets/javascripts/explore/stores/visTypes.js:707 +msgid "Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:545 +msgid "Histogram Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:553 +msgid "Numeric Column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:554 +msgid "Select the numeric column to draw the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:557 +msgid "No of Bins" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:558 +msgid "Select number of bins for the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:578 +msgid "Primary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:579 +msgid "The primary metric is used to define the arc segment sizes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:582 +msgid "Secondary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:583 +msgid "" +"This secondary metric is used to define the color as a ratio against the " +"primary metric. If the two metrics match, color is mapped level groups" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:588 +msgid "Hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:589 +msgid "This defines the level of the hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:608 +#: superset/assets/javascripts/explore/stores/visTypes.js:635 +msgid "Source / Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:609 +#: superset/assets/javascripts/explore/stores/visTypes.js:636 +msgid "Choose a source and a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:626 +msgid "Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:641 +msgid "Chord Diagram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:655 +msgid "Choose a number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:658 +msgid "Source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:661 +msgid "Choose a source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:664 +msgid "Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:667 +msgid "Choose a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:686 +msgid "ISO 3166-1 codes of region/province/department" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:687 +msgid "" +"It's ISO 3166-1 of your region/province/department in your table. (see " +"documentation for list of ISO 3166-1)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:690 +#: superset/connectors/druid/views.py:106 superset/connectors/sqla/views.py:130 +msgid "Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:691 +msgid "Metric to display bottom title" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:717 +msgid "Country Control" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:718 +msgid "3 letter code of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:721 +msgid "Metric for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:722 +msgid "Metric that defines the color of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:725 +msgid "Bubble size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:726 +msgid "Metric that defines the size of the bubble" msgstr "" -#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:238 -#: superset/db_engine_specs.py:270 superset/db_engine_specs.py:325 -#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:781 -#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:845 -#: superset/db_engine_specs.py:893 -msgid "day" +#: superset/assets/javascripts/explore/stores/visTypes.js:732 +msgid "Filter Box" msgstr "" -#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:244 -#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 -#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:783 -#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 -msgid "week" +#: superset/assets/javascripts/explore/stores/visTypes.js:745 +msgid "Filter controls" msgstr "" -#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:246 -#: superset/db_engine_specs.py:273 superset/db_engine_specs.py:328 -#: superset/db_engine_specs.py:373 superset/db_engine_specs.py:785 -#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:849 -#: superset/db_engine_specs.py:895 -msgid "month" +#: superset/assets/javascripts/explore/stores/visTypes.js:747 +msgid "" +"The controls you want to filter on. Note that only columns checked as " +"\"filterable\" will show up on this list." msgstr "" -#: superset/db_engine_specs.py:201 superset/db_engine_specs.py:248 -#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:375 -#: superset/db_engine_specs.py:787 superset/db_engine_specs.py:817 -#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:897 -msgid "quarter" +#: superset/assets/javascripts/explore/stores/visTypes.js:789 +msgid "Axis & Metrics" msgstr "" -#: superset/db_engine_specs.py:202 superset/db_engine_specs.py:252 -#: superset/db_engine_specs.py:332 superset/db_engine_specs.py:789 -#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:899 -msgid "year" +#: superset/assets/javascripts/explore/stores/visTypes.js:797 +msgid "Heatmap Options" msgstr "" -#: superset/db_engine_specs.py:334 -msgid "week_start_monday" +#: superset/assets/javascripts/explore/stores/visTypes.js:817 +msgid "Horizon" msgstr "" -#: superset/db_engine_specs.py:377 superset/db_engine_specs.py:853 -msgid "week_ending_saturday" +#: superset/assets/javascripts/explore/stores/visTypes.js:843 +msgid "Points" msgstr "" -#: superset/db_engine_specs.py:380 superset/db_engine_specs.py:856 -msgid "week_start_sunday" +#: superset/assets/javascripts/explore/stores/visTypes.js:850 +msgid "Labelling" msgstr "" -#: superset/db_engine_specs.py:775 superset/db_engine_specs.py:887 -msgid "5 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:857 +msgid "Visual Tweaks" msgstr "" -#: superset/db_engine_specs.py:777 -msgid "half hour" +#: superset/assets/javascripts/explore/stores/visTypes.js:865 +msgid "Viewport" msgstr "" -#: superset/db_engine_specs.py:889 -msgid "10 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:875 +msgid "Longitude" msgstr "" -#: superset/utils.py:472 -#, python-format -msgid "[Superset] Access to the datasource %(name)s was granted" +#: superset/assets/javascripts/explore/stores/visTypes.js:876 +msgid "Column containing longitude data" msgstr "" -#: superset/viz.py:311 -msgid "Table View" +#: superset/assets/javascripts/explore/stores/visTypes.js:879 +msgid "Latitude" msgstr "" -#: superset/viz.py:364 -msgid "Pivot Table" +#: superset/assets/javascripts/explore/stores/visTypes.js:880 +msgid "Column containing latitude data" msgstr "" -#: superset/viz.py:413 -msgid "Markup" +#: superset/assets/javascripts/explore/stores/visTypes.js:883 +msgid "Cluster label aggregator" msgstr "" -#: superset/viz.py:432 -msgid "Separator" +#: superset/assets/javascripts/explore/stores/visTypes.js:884 +msgid "" +"Aggregate function applied to the list of points in each cluster to " +"produce the cluster label." msgstr "" -#: superset/viz.py:448 -msgid "Word Cloud" +#: superset/assets/javascripts/explore/stores/visTypes.js:888 +msgid "Tooltip" msgstr "" -#: superset/viz.py:471 -msgid "Treemap" +#: superset/assets/javascripts/explore/stores/visTypes.js:889 +msgid "Show a tooltip when hovering over points and clusters describing the label" msgstr "" -#: superset/viz.py:497 -msgid "Calendar Heatmap" +#: superset/assets/javascripts/explore/stores/visTypes.js:893 +msgid "" +"One or many controls to group by. If grouping, latitude and longitude " +"columns must be present." msgstr "" -#: superset/viz.py:555 -msgid "Box Plot" +#: superset/assets/javascripts/explore/stores/visTypes.js:904 +msgid "Event definition" msgstr "" -#: superset/viz.py:644 -msgid "Bubble Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:914 +msgid "Additional meta data" msgstr "" -#: superset/viz.py:693 -msgid "Bullet Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:922 +msgid "Column containing entity ids" msgstr "" -#: superset/viz.py:742 -msgid "Big Number with Trendline" +#: superset/assets/javascripts/explore/stores/visTypes.js:923 +msgid "e.g., a \"user id\" column" msgstr "" -#: superset/viz.py:771 -msgid "Big Number" +#: superset/assets/javascripts/explore/stores/visTypes.js:926 +msgid "Column containing event names" msgstr "" -#: superset/viz.py:798 -msgid "Time Series - Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:934 +msgid "Event count limit" msgstr "" -#: superset/viz.py:925 -msgid "Time Series - Dual Axis Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:935 +msgid "The maximum number of events to return, equivalent to number of rows" msgstr "" -#: superset/viz.py:1000 -msgid "Time Series - Bar Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:938 +msgid "Meta data" msgstr "" -#: superset/viz.py:1008 -msgid "Time Series - Percent Change" +#: superset/assets/javascripts/explore/stores/visTypes.js:939 +msgid "Select any columns for meta data inspection" msgstr "" -#: superset/viz.py:1016 -msgid "Time Series - Stacked" +#: superset/assets/javascripts/modules/superset.js:134 +msgid "" +"The server could not be reached. You may want to verify your connection " +"and try again." msgstr "" -#: superset/viz.py:1025 -msgid "Distribution - NVD3 - Pie Chart" +#: superset/assets/javascripts/modules/superset.js:137 +#, python-format +msgid "An unknown error occurred. (Status: %s )" msgstr "" -#: superset/viz.py:1043 -msgid "Histogram" +#: superset/assets/javascripts/modules/superset.js:162 +#, python-format +msgid "Query timeout - visualization query are set to time out at %s seconds." msgstr "" -#: superset/viz.py:1068 -msgid "Distribution - Bar Chart" +#: superset/assets/javascripts/profile/components/App.jsx:24 +msgid "Favorites" msgstr "" -#: superset/viz.py:1135 -msgid "Sunburst" +#: superset/assets/javascripts/profile/components/App.jsx:30 +msgid "Created Content" msgstr "" -#: superset/viz.py:1168 -msgid "Sankey" +#: superset/assets/javascripts/profile/components/App.jsx:37 +msgid "Recent Activity" msgstr "" -#: superset/viz.py:1217 -msgid "Directed Force Layout" +#: superset/assets/javascripts/profile/components/App.jsx:42 +msgid "Security & Access" msgstr "" -#: superset/viz.py:1238 -msgid "Country Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:33 +msgid "No slices" msgstr "" -#: superset/viz.py:1267 -msgid "World Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:49 +msgid "No dashboards" msgstr "" -#: superset/viz.py:1317 -msgid "Filters" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:58 +#: superset/assets/javascripts/profile/components/Favorites.jsx:59 +#: superset/templates/superset/welcome.html:20 superset/views/core.py:367 +#: superset/views/core.py:527 +msgid "Dashboards" msgstr "" -#: superset/viz.py:1352 -msgid "iFrame" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:61 +#: superset/assets/javascripts/profile/components/Favorites.jsx:62 +#: superset/views/core.py:403 superset/views/core.py:472 +msgid "Slices" msgstr "" -#: superset/viz.py:1369 -msgid "Parallel Coordinates" +#: superset/assets/javascripts/profile/components/Favorites.jsx:34 +msgid "No favorite slices yet, go click on stars!" msgstr "" -#: superset/viz.py:1394 -msgid "Heatmap" +#: superset/assets/javascripts/profile/components/Favorites.jsx:50 +msgid "No favorite dashboards yet, go click on stars!" msgstr "" -#: superset/viz.py:1445 -msgid "Horizon Charts" +#: superset/assets/javascripts/profile/components/Security.jsx:14 +msgid "Roles" msgstr "" -#: superset/viz.py:1456 -msgid "Mapbox" +#: superset/assets/javascripts/profile/components/Security.jsx:23 +#: superset/views/core.py:279 +msgid "Databases" +msgstr "" + +#: superset/assets/javascripts/profile/components/Security.jsx:34 +msgid "Datasources" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:18 +msgid "Profile picture provided by Gravatar" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:33 +msgid "joined" msgstr "" -#: superset/connectors/druid/models.py:950 +#: superset/assets/javascripts/profile/components/UserInfo.jsx:43 +msgid "id:" +msgstr "" + +#: superset/assets/visualizations/EventFlow.jsx:56 +msgid "Sorry, there appears to be no data" +msgstr "" + +#: superset/assets/visualizations/filter_box.jsx:88 +#, python-format +msgid "Select [%s]" +msgstr "" + +#: superset/connectors/druid/models.py:970 msgid "No data was returned." msgstr "" -#: superset/connectors/druid/views.py:36 superset/connectors/sqla/views.py:73 -msgid "Column" +#: superset/connectors/druid/views.py:28 +msgid "List Druid Column" msgstr "" -#: superset/connectors/druid/views.py:37 superset/connectors/druid/views.py:96 -#: superset/connectors/sqla/views.py:119 -msgid "Type" +#: superset/connectors/druid/views.py:29 +msgid "Show Druid Column" msgstr "" -#: superset/connectors/druid/views.py:38 superset/views/core.py:305 -#: superset/views/core.py:354 -msgid "Datasource" +#: superset/connectors/druid/views.py:30 +msgid "Add Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:31 +msgid "Edit Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 +msgid "Column" +msgstr "" + +#: superset/connectors/druid/views.py:44 superset/connectors/druid/views.py:109 +#: superset/connectors/sqla/views.py:133 +msgid "Type" msgstr "" -#: superset/connectors/druid/views.py:39 superset/connectors/sqla/views.py:76 +#: superset/connectors/druid/views.py:46 superset/connectors/sqla/views.py:84 msgid "Groupable" msgstr "" -#: superset/connectors/druid/views.py:40 superset/connectors/sqla/views.py:77 +#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:85 msgid "Filterable" msgstr "" -#: superset/connectors/druid/views.py:41 superset/connectors/sqla/views.py:79 +#: superset/connectors/druid/views.py:48 superset/connectors/sqla/views.py:87 msgid "Count Distinct" msgstr "" -#: superset/connectors/druid/views.py:42 superset/connectors/sqla/views.py:80 +#: superset/connectors/druid/views.py:49 superset/connectors/sqla/views.py:88 msgid "Sum" msgstr "" -#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 -msgid "Min" +#: superset/connectors/druid/views.py:54 superset/connectors/sqla/views.py:50 +msgid "" +"Whether this column is exposed in the `Filters` section of the explore " +"view." msgstr "" -#: superset/connectors/druid/views.py:44 superset/connectors/sqla/views.py:82 -msgid "Max" +#: superset/connectors/druid/views.py:80 +msgid "List Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:42 -msgid "" -"Whether this column is exposed in the `Filters` section of the explore " -"view." +#: superset/connectors/druid/views.py:81 +msgid "Show Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:82 +msgid "Add Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:83 +msgid "Edit Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:87 superset/connectors/sqla/views.py:101 +#: superset/connectors/druid/views.py:100 superset/connectors/sqla/views.py:115 msgid "" "Whether the access to this metric is restricted to certain roles. Only " "roles with the permission 'metric access on XXX (the name of this " "metric)' are allowed to access this metric" msgstr "" -#: superset/connectors/druid/views.py:93 superset/connectors/sqla/views.py:116 -msgid "Metric" +#: superset/connectors/druid/views.py:108 superset/connectors/sqla/views.py:82 +#: superset/connectors/sqla/views.py:132 +msgid "Verbose Name" msgstr "" -#: superset/connectors/druid/views.py:94 superset/connectors/druid/views.py:204 -#: superset/connectors/sqla/views.py:75 superset/connectors/sqla/views.py:117 -#: superset/views/core.py:355 -msgid "Description" +#: superset/connectors/druid/views.py:110 superset/views/core.py:554 +msgid "JSON" msgstr "" -#: superset/connectors/druid/views.py:95 superset/connectors/sqla/views.py:74 -#: superset/connectors/sqla/views.py:118 -msgid "Verbose Name" +#: superset/connectors/druid/views.py:111 +msgid "Druid Datasource" msgstr "" -#: superset/connectors/druid/views.py:97 superset/views/core.py:534 -msgid "JSON" +#: superset/connectors/druid/views.py:128 +msgid "List Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:98 -msgid "Druid Datasource" +#: superset/connectors/druid/views.py:129 +msgid "Show Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:130 +msgid "Add Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:131 +msgid "Edit Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:123 -#: superset/connectors/druid/views.py:203 +#: superset/connectors/druid/views.py:142 +#: superset/connectors/druid/views.py:228 msgid "Cluster" msgstr "" -#: superset/connectors/druid/views.py:124 +#: superset/connectors/druid/views.py:143 msgid "Coordinator Host" msgstr "" -#: superset/connectors/druid/views.py:125 +#: superset/connectors/druid/views.py:144 msgid "Coordinator Port" msgstr "" -#: superset/connectors/druid/views.py:126 +#: superset/connectors/druid/views.py:145 msgid "Coordinator Endpoint" msgstr "" -#: superset/connectors/druid/views.py:127 +#: superset/connectors/druid/views.py:146 msgid "Broker Host" msgstr "" -#: superset/connectors/druid/views.py:128 +#: superset/connectors/druid/views.py:147 msgid "Broker Port" msgstr "" -#: superset/connectors/druid/views.py:129 +#: superset/connectors/druid/views.py:148 msgid "Broker Endpoint" msgstr "" -#: superset/connectors/druid/views.py:144 +#: superset/connectors/druid/views.py:163 msgid "Druid Clusters" msgstr "" -#: superset/connectors/druid/views.py:147 -#: superset/connectors/druid/views.py:243 -#: superset/connectors/druid/views.py:282 superset/connectors/sqla/views.py:261 -#: superset/views/core.py:274 +#: superset/connectors/druid/views.py:166 +#: superset/connectors/druid/views.py:268 +#: superset/connectors/druid/views.py:307 superset/connectors/sqla/views.py:281 +#: superset/views/core.py:282 msgid "Sources" msgstr "" -#: superset/connectors/druid/views.py:172 superset/connectors/sqla/views.py:155 +#: superset/connectors/druid/views.py:173 +msgid "List Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:174 +msgid "Show Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:175 +msgid "Add Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:176 +msgid "Edit Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:197 superset/connectors/sqla/views.py:175 msgid "" "The list of slices associated with this table. By altering this " "datasource, you may change how these associated slices behave. Also note " @@ -362,11 +2721,11 @@ msgid "" "datasource for a slice, overwrite the slice from the 'explore view'" msgstr "" -#: superset/connectors/druid/views.py:180 superset/connectors/sqla/views.py:163 +#: superset/connectors/druid/views.py:205 superset/connectors/sqla/views.py:183 msgid "Timezone offset (in hours) for this datasource" msgstr "" -#: superset/connectors/druid/views.py:184 +#: superset/connectors/druid/views.py:209 msgid "" "Time expression to use as a predicate when retrieving distinct values to " "populate the filter component. Only applies when `Enable Filter Select` " @@ -374,160 +2733,203 @@ msgid "" "filter will be populated based on the distinct value over the past week" msgstr "" -#: superset/connectors/druid/views.py:191 superset/connectors/sqla/views.py:185 +#: superset/connectors/druid/views.py:216 superset/connectors/sqla/views.py:205 msgid "" "Whether to populate the filter's dropdown in the explore view's filter " "section with a list of distinct values fetched from the backend on the " "fly" msgstr "" -#: superset/connectors/druid/views.py:195 superset/connectors/sqla/views.py:199 +#: superset/connectors/druid/views.py:220 superset/connectors/sqla/views.py:219 msgid "" "Redirects to this endpoint when clicking on the datasource from the " "datasource list" msgstr "" -#: superset/connectors/druid/views.py:201 superset/connectors/sqla/views.py:192 +#: superset/connectors/druid/views.py:226 superset/connectors/sqla/views.py:212 msgid "Associated Slices" msgstr "" -#: superset/connectors/druid/views.py:202 +#: superset/connectors/druid/views.py:227 msgid "Data Source" msgstr "" -#: superset/connectors/druid/views.py:205 +#: superset/connectors/druid/views.py:230 msgid "Owner" msgstr "" -#: superset/connectors/druid/views.py:206 +#: superset/connectors/druid/views.py:231 msgid "Is Hidden" msgstr "" -#: superset/connectors/druid/views.py:207 superset/connectors/sqla/views.py:197 +#: superset/connectors/druid/views.py:232 superset/connectors/sqla/views.py:217 msgid "Enable Filter Select" msgstr "" -#: superset/connectors/druid/views.py:208 +#: superset/connectors/druid/views.py:233 msgid "Default Endpoint" msgstr "" -#: superset/connectors/druid/views.py:209 +#: superset/connectors/druid/views.py:234 msgid "Time Offset" msgstr "" -#: superset/connectors/druid/views.py:210 superset/connectors/sqla/views.py:203 -#: superset/views/core.py:241 superset/views/core.py:351 +#: superset/connectors/druid/views.py:235 superset/connectors/sqla/views.py:223 +#: superset/views/core.py:249 superset/views/core.py:365 msgid "Cache Timeout" msgstr "" -#: superset/connectors/druid/views.py:241 +#: superset/connectors/druid/views.py:266 msgid "Druid Datasources" msgstr "" -#: superset/connectors/druid/views.py:279 +#: superset/connectors/druid/views.py:304 msgid "Refresh Druid Metadata" msgstr "" -#: superset/connectors/sqla/models.py:388 +#: superset/connectors/sqla/models.py:386 msgid "" "Datetime column not provided as part table configuration and is required " "by this type of chart" msgstr "" -#: superset/connectors/sqla/models.py:393 +#: superset/connectors/sqla/models.py:391 msgid "Metric '{}' is not valid" msgstr "" -#: superset/connectors/sqla/views.py:38 +#: superset/connectors/sqla/views.py:28 +msgid "List Columns" +msgstr "" + +#: superset/connectors/sqla/views.py:29 +msgid "Show Column" +msgstr "" + +#: superset/connectors/sqla/views.py:30 +msgid "Add Column" +msgstr "" + +#: superset/connectors/sqla/views.py:31 +msgid "Edit Column" +msgstr "" + +#: superset/connectors/sqla/views.py:46 msgid "" "Whether to make this column available as a [Time Granularity] option, " "column has to be DATETIME or DATETIME-like" msgstr "" -#: superset/connectors/sqla/views.py:45 +#: superset/connectors/sqla/views.py:53 msgid "" "The data type that was inferred by the database. It may be necessary to " "input a type manually for expression-defined columns in some cases. In " "most case users should not need to alter this." msgstr "" -#: superset/connectors/sqla/views.py:78 superset/connectors/sqla/views.py:121 -#: superset/connectors/sqla/views.py:193 superset/views/core.py:361 -msgid "Table" -msgstr "" - -#: superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:91 msgid "Expression" msgstr "" -#: superset/connectors/sqla/views.py:84 +#: superset/connectors/sqla/views.py:92 msgid "Is temporal" msgstr "" -#: superset/connectors/sqla/views.py:85 +#: superset/connectors/sqla/views.py:93 msgid "Datetime Format" msgstr "" -#: superset/connectors/sqla/views.py:86 +#: superset/connectors/sqla/views.py:94 msgid "Database Expression" msgstr "" -#: superset/connectors/sqla/views.py:120 +#: superset/connectors/sqla/views.py:102 +msgid "List Metrics" +msgstr "" + +#: superset/connectors/sqla/views.py:103 +msgid "Show Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:104 +msgid "Add Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:105 +msgid "Edit Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:134 msgid "SQL Expression" msgstr "" -#: superset/connectors/sqla/views.py:164 +#: superset/connectors/sqla/views.py:152 +msgid "List Tables" +msgstr "" + +#: superset/connectors/sqla/views.py:153 +msgid "Show Table" +msgstr "" + +#: superset/connectors/sqla/views.py:154 +msgid "Add Table" +msgstr "" + +#: superset/connectors/sqla/views.py:155 +msgid "Edit Table" +msgstr "" + +#: superset/connectors/sqla/views.py:184 msgid "Name of the table that exists in the source database" msgstr "" -#: superset/connectors/sqla/views.py:166 +#: superset/connectors/sqla/views.py:186 msgid "Schema, as used only in some databases like Postgres, Redshift and DB2" msgstr "" -#: superset/connectors/sqla/views.py:172 +#: superset/connectors/sqla/views.py:192 msgid "" "This fields acts a Superset view, meaning that Superset will run a query " "against this string as a subquery." msgstr "" -#: superset/connectors/sqla/views.py:176 +#: superset/connectors/sqla/views.py:196 msgid "" "Predicate applied when fetching distinct value to populate the filter " "control component. Supports jinja template syntax. Applies only when " "`Enable Filter Select` is on." msgstr "" -#: superset/connectors/sqla/views.py:182 +#: superset/connectors/sqla/views.py:202 msgid "Redirects to this endpoint when clicking on the table from the table list" msgstr "" -#: superset/connectors/sqla/views.py:194 +#: superset/connectors/sqla/views.py:214 msgid "Changed By" msgstr "" -#: superset/connectors/sqla/views.py:195 superset/views/core.py:237 +#: superset/connectors/sqla/views.py:215 superset/views/core.py:245 msgid "Database" msgstr "" -#: superset/connectors/sqla/views.py:196 superset/views/core.py:239 +#: superset/connectors/sqla/views.py:216 superset/views/core.py:247 msgid "Last Changed" msgstr "" -#: superset/connectors/sqla/views.py:198 +#: superset/connectors/sqla/views.py:218 msgid "Schema" msgstr "" -#: superset/connectors/sqla/views.py:202 +#: superset/connectors/sqla/views.py:222 msgid "Offset" msgstr "" -#: superset/connectors/sqla/views.py:235 +#: superset/connectors/sqla/views.py:255 msgid "" "The table was created. As part of this two phase configuration process, " "you should now click the edit button by the new table to configure it." msgstr "" -#: superset/connectors/sqla/views.py:259 +#: superset/connectors/sqla/views.py:279 msgid "Tables" msgstr "" @@ -560,19 +2962,10 @@ msgstr "" msgid "Request Permissions" msgstr "" -#: superset/templates/superset/request_access.html:16 -msgid "Cancel" -msgstr "" - #: superset/templates/superset/welcome.html:10 msgid "Welcome!" msgstr "" -#: superset/templates/superset/welcome.html:20 superset/views/core.py:353 -#: superset/views/core.py:507 -msgid "Dashboards" -msgstr "" - #: superset/templates/superset/models/database/macros.html:4 msgid "Test Connection" msgstr "" @@ -590,144 +2983,172 @@ msgstr "" msgid "Delete all Really?" msgstr "" -#: superset/views/core.py:55 +#: superset/views/core.py:57 msgid "This endpoint requires the `all_datasource_access` permission" msgstr "" -#: superset/views/core.py:57 +#: superset/views/core.py:59 msgid "The datasource seems to have been deleted" msgstr "" -#: superset/views/core.py:58 +#: superset/views/core.py:60 msgid "The access requests seem to have been deleted" msgstr "" -#: superset/views/core.py:60 +#: superset/views/core.py:62 msgid "The user seems to have been deleted" msgstr "" -#: superset/views/core.py:61 +#: superset/views/core.py:63 msgid "You don't have access to this datasource" msgstr "" -#: superset/views/core.py:65 +#: superset/views/core.py:67 #, python-format msgid "" "This view requires the database %(name)s or `all_datasource_access` " "permission" msgstr "" -#: superset/views/core.py:70 +#: superset/views/core.py:72 #, python-format msgid "" "This endpoint requires the datasource %(name)s, database or " "`all_datasource_access` permission" msgstr "" -#: superset/views/core.py:205 +#: superset/views/core.py:175 +msgid "List Databases" +msgstr "" + +#: superset/views/core.py:176 +msgid "Show Database" +msgstr "" + +#: superset/views/core.py:177 +msgid "Add Database" +msgstr "" + +#: superset/views/core.py:178 +msgid "Edit Database" +msgstr "" + +#: superset/views/core.py:213 msgid "Expose this DB in SQL Lab" msgstr "" -#: superset/views/core.py:206 +#: superset/views/core.py:214 msgid "" "Allow users to run synchronous queries, this is the default and should " "work well for queries that can be executed within a web request scope " "(<~1 minute)" msgstr "" -#: superset/views/core.py:210 +#: superset/views/core.py:218 msgid "" "Allow users to run queries, against an async backend. This assumes that " "you have a Celery worker setup as well as a results backend." msgstr "" -#: superset/views/core.py:214 +#: superset/views/core.py:222 msgid "Allow CREATE TABLE AS option in SQL Lab" msgstr "" -#: superset/views/core.py:215 +#: superset/views/core.py:223 msgid "" "Allow users to run non-SELECT statements (UPDATE, DELETE, CREATE, ...) in" " SQL Lab" msgstr "" -#: superset/views/core.py:219 +#: superset/views/core.py:227 msgid "" "When allowing CREATE TABLE AS option in SQL Lab, this option forces the " "table to be created in this schema" msgstr "" -#: superset/views/core.py:233 +#: superset/views/core.py:241 msgid "Expose in SQL Lab" msgstr "" -#: superset/views/core.py:234 +#: superset/views/core.py:242 msgid "Allow CREATE TABLE AS" msgstr "" -#: superset/views/core.py:235 +#: superset/views/core.py:243 msgid "Allow DML" msgstr "" -#: superset/views/core.py:236 +#: superset/views/core.py:244 msgid "CTAS Schema" msgstr "" -#: superset/views/core.py:238 superset/views/core.py:352 -#: superset/views/core.py:454 superset/views/core.py:518 +#: superset/views/core.py:246 superset/views/core.py:366 +#: superset/views/core.py:474 superset/views/core.py:538 msgid "Creator" msgstr "" -#: superset/views/core.py:240 +#: superset/views/core.py:248 msgid "SQLAlchemy URI" msgstr "" -#: superset/views/core.py:242 +#: superset/views/core.py:250 msgid "Extra" msgstr "" -#: superset/views/core.py:260 +#: superset/views/core.py:268 msgid "Import Dashboards" msgstr "" -#: superset/views/core.py:264 superset/views/core.py:2279 -#: superset/views/sql_lab.py:22 +#: superset/views/core.py:272 superset/views/core.py:2318 +#: superset/views/sql_lab.py:23 msgid "Manage" msgstr "" -#: superset/views/core.py:271 -msgid "Databases" -msgstr "" - -#: superset/views/core.py:302 superset/views/core.py:531 +#: superset/views/core.py:310 superset/views/core.py:551 msgid "User" msgstr "" -#: superset/views/core.py:303 +#: superset/views/core.py:311 msgid "User Roles" msgstr "" -#: superset/views/core.py:304 +#: superset/views/core.py:312 msgid "Database URL" msgstr "" -#: superset/views/core.py:306 +#: superset/views/core.py:314 msgid "Roles to grant" msgstr "" -#: superset/views/core.py:307 +#: superset/views/core.py:315 msgid "Created On" msgstr "" -#: superset/views/core.py:313 +#: superset/views/core.py:321 msgid "Access requests" msgstr "" -#: superset/views/core.py:315 superset/views/core.py:542 +#: superset/views/core.py:323 superset/views/core.py:562 msgid "Security" msgstr "" -#: superset/views/core.py:340 +#: superset/views/core.py:330 +msgid "List Slices" +msgstr "" + +#: superset/views/core.py:331 +msgid "Show Slice" +msgstr "" + +#: superset/views/core.py:332 +msgid "Add Slice" +msgstr "" + +#: superset/views/core.py:333 +msgid "Edit Slice" +msgstr "" + +#: superset/views/core.py:354 msgid "" "These parameters are generated dynamically when clicking the save or " "overwrite button in the explore view. This JSON object is exposed here " @@ -735,237 +3156,193 @@ msgid "" "parameters." msgstr "" -#: superset/views/core.py:345 +#: superset/views/core.py:359 msgid "Duration (in seconds) of the caching timeout for this slice." msgstr "" -#: superset/views/core.py:356 +#: superset/views/core.py:370 msgid "Last Modified" msgstr "" -#: superset/views/core.py:357 superset/views/core.py:453 +#: superset/views/core.py:371 superset/views/core.py:473 msgid "Owners" msgstr "" -#: superset/views/core.py:358 +#: superset/views/core.py:372 msgid "Parameters" msgstr "" -#: superset/views/core.py:359 superset/views/core.py:401 +#: superset/views/core.py:373 superset/views/core.py:415 msgid "Slice" msgstr "" -#: superset/views/core.py:360 -msgid "Name" +#: superset/views/core.py:432 +msgid "List Dashboards" msgstr "" -#: superset/views/core.py:362 -msgid "Visualization Type" +#: superset/views/core.py:433 +msgid "Show Dashboard" msgstr "" -#: superset/views/core.py:389 superset/views/core.py:452 -msgid "Slices" +#: superset/views/core.py:434 +msgid "Add Dashboard" +msgstr "" + +#: superset/views/core.py:435 +msgid "Edit Dashboard" msgstr "" -#: superset/views/core.py:426 +#: superset/views/core.py:446 msgid "" "This json object describes the positioning of the widgets in the " "dashboard. It is dynamically generated when adjusting the widgets size " "and positions by using drag & drop in the dashboard view" msgstr "" -#: superset/views/core.py:431 +#: superset/views/core.py:451 msgid "" "The css for individual dashboards can be altered here, or in the " "dashboard view where changes are immediately visible" msgstr "" -#: superset/views/core.py:435 +#: superset/views/core.py:455 msgid "To get a readable URL for your dashboard" msgstr "" -#: superset/views/core.py:436 +#: superset/views/core.py:456 msgid "" "This JSON object is generated dynamically when clicking the save or " "overwrite button in the dashboard view. It is exposed here for reference " "and for power users who may want to alter specific parameters." msgstr "" -#: superset/views/core.py:441 +#: superset/views/core.py:461 msgid "Owners is a list of users who can alter the dashboard." msgstr "" -#: superset/views/core.py:449 superset/views/core.py:516 +#: superset/views/core.py:469 superset/views/core.py:536 msgid "Dashboard" msgstr "" -#: superset/views/core.py:450 superset/views/core.py:517 -msgid "Title" -msgstr "" - -#: superset/views/core.py:451 +#: superset/views/core.py:471 msgid "Slug" msgstr "" -#: superset/views/core.py:455 superset/views/core.py:519 -msgid "Modified" -msgstr "" - -#: superset/views/core.py:456 +#: superset/views/core.py:476 msgid "Position JSON" msgstr "" -#: superset/views/core.py:457 -msgid "CSS" -msgstr "" - -#: superset/views/core.py:458 +#: superset/views/core.py:478 msgid "JSON Metadata" msgstr "" -#: superset/views/core.py:459 +#: superset/views/core.py:479 msgid "Underlying Tables" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export dashboards?" msgstr "" -#: superset/views/core.py:532 +#: superset/views/core.py:552 msgid "Action" msgstr "" -#: superset/views/core.py:533 +#: superset/views/core.py:553 msgid "dttm" msgstr "" -#: superset/views/core.py:540 +#: superset/views/core.py:560 msgid "Action Log" msgstr "" -#: superset/views/core.py:770 +#: superset/views/core.py:790 msgid "Access was requested" msgstr "" -#: superset/views/core.py:831 +#: superset/views/core.py:851 #, python-format msgid "" "%(user)s was granted the role %(role)s that gives access to the " "%(datasource)s" msgstr "" -#: superset/views/core.py:847 +#: superset/views/core.py:867 #, python-format msgid "Role %(r)s was extended to provide the access to the datasource %(ds)s" msgstr "" -#: superset/views/core.py:856 +#: superset/views/core.py:876 msgid "You have no permission to approve this request" msgstr "" -#: superset/views/core.py:1589 +#: superset/views/core.py:1609 msgid "" "Malformed request. slice_id or table_name and db_name arguments are " "expected" msgstr "" -#: superset/views/core.py:1595 +#: superset/views/core.py:1615 #, python-format msgid "Slice %(id)s not found" msgstr "" -#: superset/views/core.py:1607 +#: superset/views/core.py:1627 #, python-format msgid "Table %(t)s wasn't found in the database %(d)s" msgstr "" -#: superset/views/core.py:1741 +#: superset/views/core.py:1761 #, python-format msgid "Can't find User '%(name)s', please ask your admin to create one." msgstr "" -#: superset/views/core.py:1748 +#: superset/views/core.py:1768 #, python-format msgid "Can't find DruidCluster with cluster_name = '%(name)s'" msgstr "" -#: superset/views/core.py:2276 +#: superset/views/core.py:2315 msgid "CSS Templates" msgstr "" -#: superset/views/core.py:2286 +#: superset/views/core.py:2325 msgid "SQL Editor" msgstr "" -#: superset/views/core.py:2291 superset/views/core.py:2300 +#: superset/views/core.py:2330 superset/views/core.py:2339 msgid "SQL Lab" msgstr "" -#: superset/views/core.py:2295 +#: superset/views/core.py:2334 msgid "Query Search" msgstr "" -#: superset/views/sql_lab.py:20 +#: superset/views/sql_lab.py:21 msgid "Queries" msgstr "" -#: superset/views/sql_lab.py:55 -msgid "Saved Queries" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 -msgid "Please enter a slice name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 -msgid "Please select a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 -msgid "Please enter a dashboard name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 -msgid "Save A Slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 -msgid "Overwrite slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 -msgid "Save as" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 -msgid "[slice name]" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 -msgid "Do not add to a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 -msgid "Add slice to existing dashboard" +#: superset/views/sql_lab.py:30 +msgid "List Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 -msgid "Add to new dashboard" +#: superset/views/sql_lab.py:31 +msgid "Show Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 -msgid "[dashboard name]" +#: superset/views/sql_lab.py:32 +msgid "Add Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 -msgid "Save" +#: superset/views/sql_lab.py:33 +msgid "Edit Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 -msgid "Save & go to dashboard" +#: superset/views/sql_lab.py:62 +msgid "Saved Queries" msgstr "" diff --git a/superset/translations/es/LC_MESSAGES/messages.mo b/superset/translations/es/LC_MESSAGES/messages.mo index 580a31fcab3e9ac00246b4055e08d48abe9dff04..9036b9dc10fefb37003a46b67dbfdd6c8f5cacae 100644 GIT binary patch literal 58907 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 sL$HA}PK@}{o1Ypo`\n" "Language: es\n" @@ -18,342 +18,2701 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:225 -#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:317 -#: superset/db_engine_specs.py:362 superset/db_engine_specs.py:770 -#: superset/db_engine_specs.py:806 superset/db_engine_specs.py:838 -#: superset/db_engine_specs.py:884 +#: superset/assets/javascripts/explore/stores/controls.jsx:491 +#: superset/db_engine_specs.py:192 superset/db_engine_specs.py:223 +#: superset/db_engine_specs.py:267 superset/db_engine_specs.py:315 +#: superset/db_engine_specs.py:360 superset/db_engine_specs.py:810 +#: superset/db_engine_specs.py:846 superset/db_engine_specs.py:878 +#: superset/db_engine_specs.py:924 superset/db_engine_specs.py:961 msgid "Time Column" msgstr "" -#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:226 -#: superset/db_engine_specs.py:318 superset/db_engine_specs.py:363 -#: superset/db_engine_specs.py:771 superset/db_engine_specs.py:839 +#: superset/db_engine_specs.py:193 superset/db_engine_specs.py:224 +#: superset/db_engine_specs.py:316 superset/db_engine_specs.py:361 +#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:879 +#: superset/db_engine_specs.py:962 msgid "second" msgstr "" -#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:229 -#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 -#: superset/db_engine_specs.py:773 superset/db_engine_specs.py:807 -#: superset/db_engine_specs.py:841 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:227 +#: superset/db_engine_specs.py:319 superset/db_engine_specs.py:363 +#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:881 superset/db_engine_specs.py:925 +#: superset/db_engine_specs.py:963 msgid "minute" msgstr "" -#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:233 -#: superset/db_engine_specs.py:323 superset/db_engine_specs.py:367 -#: superset/db_engine_specs.py:779 superset/db_engine_specs.py:809 -#: superset/db_engine_specs.py:843 superset/db_engine_specs.py:891 -msgid "hour" +#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:231 +#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 +#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:849 +#: superset/db_engine_specs.py:883 superset/db_engine_specs.py:931 +#: superset/db_engine_specs.py:964 +msgid "hour" +msgstr "" + +#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:236 +#: superset/db_engine_specs.py:268 superset/db_engine_specs.py:323 +#: superset/db_engine_specs.py:367 superset/db_engine_specs.py:821 +#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:933 superset/db_engine_specs.py:965 +msgid "day" +msgstr "" + +#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:242 +#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:324 +#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:823 +#: superset/db_engine_specs.py:853 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:966 +msgid "week" +msgstr "" + +#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:244 +#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 +#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:825 +#: superset/db_engine_specs.py:855 superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:935 superset/db_engine_specs.py:967 +msgid "month" +msgstr "" + +#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:246 +#: superset/db_engine_specs.py:328 superset/db_engine_specs.py:373 +#: superset/db_engine_specs.py:827 superset/db_engine_specs.py:857 +#: superset/db_engine_specs.py:891 superset/db_engine_specs.py:937 +#: superset/db_engine_specs.py:968 +msgid "quarter" +msgstr "" + +#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:250 +#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:829 +#: superset/db_engine_specs.py:859 superset/db_engine_specs.py:939 +#: superset/db_engine_specs.py:969 +msgid "year" +msgstr "" + +#: superset/db_engine_specs.py:332 +msgid "week_start_monday" +msgstr "" + +#: superset/db_engine_specs.py:375 superset/db_engine_specs.py:893 +msgid "week_ending_saturday" +msgstr "" + +#: superset/db_engine_specs.py:378 superset/db_engine_specs.py:896 +msgid "week_start_sunday" +msgstr "" + +#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:927 +msgid "5 minute" +msgstr "" + +#: superset/db_engine_specs.py:817 +msgid "half hour" +msgstr "" + +#: superset/db_engine_specs.py:929 +msgid "10 minute" +msgstr "" + +#: superset/utils.py:472 +#, python-format +msgid "[Superset] Access to the datasource %(name)s was granted" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:283 +#: superset/viz.py:312 +msgid "Table View" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:334 +#: superset/viz.py:368 +msgid "Pivot Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:321 +#: superset/viz.py:423 +msgid "Markup" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:348 +#: superset/viz.py:442 +msgid "Separator" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:369 +#: superset/viz.py:458 +msgid "Word Cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:383 +#: superset/viz.py:481 +msgid "Treemap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:403 +#: superset/viz.py:507 +msgid "Calendar Heatmap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:418 +#: superset/viz.py:565 +msgid "Box Plot" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:437 +#: superset/viz.py:654 +msgid "Bubble Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:481 +#: superset/viz.py:704 +msgid "Bullet Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:497 +#: superset/viz.py:753 +msgid "Big Number with Trendline" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:516 +#: superset/viz.py:782 +msgid "Big Number" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:21 +#: superset/assets/javascripts/explore/stores/visTypes.js:127 +#: superset/viz.py:809 +msgid "Time Series - Line Chart" +msgstr "" + +#: superset/viz.py:936 +msgid "Time Series - Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:22 +#: superset/assets/javascripts/explore/stores/visTypes.js:197 +#: superset/viz.py:1011 +msgid "Time Series - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:230 +#: superset/viz.py:1019 +msgid "Time Series - Percent Change" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:251 +#: superset/viz.py:1027 +msgid "Time Series - Stacked" +msgstr "" + +#: superset/viz.py:1036 +msgid "Distribution - NVD3 - Pie Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:535 +#: superset/viz.py:1054 +msgid "Histogram" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:19 +#: superset/assets/javascripts/explore/stores/visTypes.js:81 +#: superset/viz.py:1079 +msgid "Distribution - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:565 +#: superset/viz.py:1146 +msgid "Sunburst" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:595 +#: superset/viz.py:1179 +msgid "Sankey" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:615 +#: superset/viz.py:1228 superset/viz.py:1249 +msgid "Directed Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:672 +#: superset/viz.py:1282 +msgid "Country Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:696 +#: superset/viz.py:1311 +msgid "World Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:63 +#: superset/viz.py:1361 +msgid "Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:758 +#: superset/viz.py:1396 +msgid "iFrame" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:770 +#: superset/viz.py:1413 +msgid "Parallel Coordinates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:786 +#: superset/viz.py:1438 +msgid "Heatmap" +msgstr "" + +#: superset/viz.py:1489 +msgid "Horizon Charts" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:830 +#: superset/viz.py:1500 +msgid "Mapbox" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:900 +#: superset/viz.py:1603 +msgid "Event flow" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:55 +msgid "Your query was saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:56 +msgid "Your query could not be saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:109 +msgid "Failed at retrieving results from the results backend" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:155 +msgid "Could not connect to server" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:160 +msgid "Your session timed out, please refresh your page and try again." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:179 +msgid "Query was stopped." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:182 +msgid "Failed at stopping query." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:295 +#: superset/assets/javascripts/SqlLab/actions.js:308 +msgid "Error occurred while fetching table metadata" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:358 +msgid "shared query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:366 +#: superset/assets/javascripts/SqlLab/actions.js:386 +msgid "The query couldn't be loaded" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:419 +msgid "An error occurred while creating the data source" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:29 +msgid "Pick a chart type!" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:30 +msgid "To use this chart type you need at least one column flagged as a date" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:31 +msgid "To use this chart type you need at least one dimension" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:32 +msgid "To use this chart type you need at least one aggregation function" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:49 +#: superset/assets/javascripts/SqlLab/reducers.js:11 +msgid "Untitled Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/reducers.js:44 +#, python-format +msgid "Copy of %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:30 +msgid "share query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:33 +msgid "copy URL to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:56 +msgid "Raw SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:66 +msgid "Source SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:78 +#: superset/assets/javascripts/explore/stores/visTypes.js:31 +msgid "SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryHistory.jsx:28 +msgid "No query history yet..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:106 +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:66 +msgid "It seems you don't have access to any database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:154 +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:90 +msgid "Search Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:160 +msgid "[From]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:171 +msgid "[To]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:181 +msgid "[Query Status]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:190 +msgid "Search" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:114 +msgid "Open in SQL Editor" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:133 +msgid "view results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:136 +msgid "Data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:176 +msgid "Visualize the data out of this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:182 +msgid "Overwrite text in editor with a query on this table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:188 +msgid "Run query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:193 +msgid "Remove query from log" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:68 +msgid ".CSV" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:79 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:235 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:274 +msgid "Visualize" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:151 +msgid "Query was stopped" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +#: superset/connectors/sqla/views.py:86 superset/connectors/sqla/views.py:135 +#: superset/connectors/sqla/views.py:213 superset/views/core.py:375 +msgid "Table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +msgid "was created" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:201 +msgid "Query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:240 +msgid "Fetch data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:244 +msgid "The query returned no data" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Selected Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:22 +msgid "Run query asynchronously" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:56 +msgid "Stop" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:16 +msgid "Undefined" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:66 +msgid "Label" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:71 +msgid "Label for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:81 +#: superset/connectors/druid/views.py:107 +#: superset/connectors/druid/views.py:229 superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:131 superset/views/core.py:369 +msgid "Description" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:85 +msgid "Write a description for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:99 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:139 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 +msgid "Save" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:102 +#: superset/templates/superset/request_access.html:16 +msgid "Cancel" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:123 +msgid "Save Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:80 +msgid "Run a query to display results here" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:85 +#, python-format +msgid "Preview for %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:109 +msgid "Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:115 +msgid "Query History" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:112 +#, python-format +msgid "" +"It appears that the number of rows in the query results displayed was " +"limited on the server side to the %s limit." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:123 +msgid "Create table as with query results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:131 +msgid "new table name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:90 +msgid "Error while fetching table list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:131 +msgid "Error while fetching schema list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:153 +msgid "Error while fetching database list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:159 +msgid "Database:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:163 +msgid "Select a database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:170 +#, python-format +msgid "Select a schema (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:175 +msgid "Schema:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:190 +#, python-format +msgid "Add a table (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:203 +msgid "Type to search ..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:226 +msgid "Reset State" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:105 +msgid "Enter a new title for the tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:124 +#, python-format +msgid "Untitled Query %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:170 +msgid "close tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:173 +msgid "rename tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "expand tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "hide tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:75 +msgid "Copy partition query to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:94 +msgid "latest partition:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:110 +msgid "Keys for table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:119 +#, python-format +msgid "View keys & indexes (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:135 +msgid "Sort columns alphabetically" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:136 +msgid "Original table column order" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:146 +msgid "Copy SELECT statement to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:152 +msgid "Remove table preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:20 +#: superset/assets/javascripts/explore/stores/visTypes.js:111 +msgid "Pie Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:85 +#, python-format +msgid "%s is not right as a column name, please alias it (as in SELECT count(*) " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "AS my_alias" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "using only alphanumeric characters and underscores" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:136 +#, python-format +msgid "This query took %s seconds to run," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:137 +#, python-format +msgid "and the explore view times out at %s seconds," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:138 +msgid "" +"following this flow will most likely lead to your query timing out.We " +"recommend your summarize your data further before following that flow.If " +"activated you can use the " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:140 +msgid "featureto store a summarized data set that you can then explore." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:160 +msgid "Creating a data source and popping a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:190 +msgid "No results available for this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:242 +msgid "Chart Type" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:245 +msgid "[Chart Type]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:253 +msgid "Datasource Name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:257 +msgid "datasource name" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:54 +msgid "Create a new slice" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:59 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:65 +msgid "Choose a datasource" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:71 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:77 +msgid "Choose a visualization type" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:87 +msgid "Create new slice" +msgstr "" + +#: superset/assets/javascripts/components/AsyncSelect.jsx:20 +msgid "Select ..." +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:26 +msgid "Loaded data cached" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:28 +msgid "Loaded from cache" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:33 +msgid "Click to force-refresh" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:21 +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:67 +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:37 +msgid "Copy to clipboard" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:65 +msgid "Not successful" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:68 +msgid "Sorry, your browser does not support copying. Use Ctrl / Cmd + C!" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:79 +msgid "Copied!" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:12 +#: superset/views/core.py:470 superset/views/core.py:537 +msgid "Title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "click to edit title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "You don't have the rights to alter this title." +msgstr "" + +#: superset/assets/javascripts/components/FaveStar.jsx:32 +#: superset/assets/javascripts/modules/superset.js:33 +msgid "Click to favorite/unfavorite" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:36 +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "You have unsaved changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "Click the" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:55 +msgid "button on the top right to save your changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:158 +#, python-format +msgid "Served from data cached %s . Click to force refresh." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:163 +msgid "Click to force refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:337 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:93 +msgid "Error" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:338 +#, python-format +msgid "Sorry, there was an error adding slices to this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CodeModal.jsx:35 +msgid "Active Dashboard Filters" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:48 +#, python-format +msgid "Checkout this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:54 +msgid "Force refresh the whole dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:94 +msgid "Edit this dashboard's properties" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:65 +msgid "Load a template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:68 +msgid "Load a CSS template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:80 +#: superset/views/core.py:477 +msgid "CSS" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:86 +msgid "Live CSS Editor" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:19 +msgid "Don't refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:20 +msgid "10 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:21 +msgid "30 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:22 +msgid "1 minute" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:23 +msgid "5 minutes" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:38 +msgid "Refresh Interval" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:41 +msgid "Choose the refresh frequency for this dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:58 +msgid "This dashboard was saved successfully." +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:64 +msgid "Sorry, there was an error saving this dashboard: " +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:94 +msgid "You must pick a name for the new dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:108 +msgid "Save Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:116 +#, python-format +msgid "Overwrite Dashboard [%s]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:123 +msgid "Save as:" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:127 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 +msgid "[dashboard name]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:137 +#: superset/views/core.py:374 +msgid "Name" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:143 +msgid "Viz" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:152 +#: superset/views/core.py:475 superset/views/core.py:539 +msgid "Modified" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:162 +msgid "Add Slices" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:171 +msgid "Add a new slice to the dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:175 +msgid "Add Slices to Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:23 +msgid "Move chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:26 +msgid "Force refresh data" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:30 +msgid "Toggle chart description" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:40 +msgid "Edit chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:45 +msgid "Explore chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:50 +msgid "Remove chart from dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:170 +#, python-format +msgid "%s - untitled" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:276 +msgid "Edit slice properties" +msgstr "" + +#: superset/assets/javascripts/explore/components/ControlHeader.jsx:60 +msgid "Takes effect on chart immediatly" +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:56 +msgid "Error..." +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:92 +msgid "Query" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:76 +msgid "Height" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:90 +msgid "Width" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:32 +msgid "Export to .json" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:42 +msgid "Export to .csv format" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 +msgid "Please enter a slice name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 +msgid "Please select a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 +msgid "Please enter a dashboard name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 +msgid "Save A Slice" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 +#, python-format +msgid "Overwrite slice %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 +msgid "Save as" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 +msgid "[slice name]" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 +msgid "Do not add to a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 +msgid "Add slice to existing dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 +msgid "Add to new dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 +msgid "Save & go to dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:32 +#, python-format +msgid "Check out this slice: %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:55 +msgid "`Min` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:58 +msgid "`Max` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:75 +#: superset/connectors/druid/views.py:50 superset/connectors/sqla/views.py:89 +msgid "Min" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:83 +#: superset/connectors/druid/views.py:51 superset/connectors/sqla/views.py:90 +msgid "Max" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:118 +msgid "Filter value" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select metric" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select column" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:159 +msgid "Select operator" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/FilterControl.jsx:70 +msgid "Add Filter" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/SelectControl.jsx:106 +#, python-format +msgid "Select %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:62 +msgid "textarea" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "Edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "in modal" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:90 +#: superset/assets/javascripts/explore/stores/controls.jsx:46 +msgid "edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:104 +msgid "Select a visualization type" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:114 +msgid "Search / Filter" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:61 +#, python-format +msgid "fetching dashboards failed for %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:100 +msgid "Updating chart was stopped" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:106 +#: superset/assets/javascripts/modules/superset.js:220 +#, python-format +msgid "An error occurred while rendering the visualization: %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:117 +msgid "Query timeout" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:118 +#, python-format +msgid "- visualization query are set to timeout at %s seconds. " +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:119 +msgid "" +"Perhaps your data has grown, your database is under unusual load, or you " +"are simply querying a data source that is to large to be processed within" +" the timeout range. If that is the case, we recommend that you summarize " +"your data further." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:127 +msgid "Network error." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:150 +msgid "Failed to save slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:35 +#: superset/connectors/druid/views.py:45 superset/views/core.py:313 +#: superset/views/core.py:368 +msgid "Datasource" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:55 +#: superset/views/core.py:376 +msgid "Visualization Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:57 +msgid "The type of visualization to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:63 +msgid "Metrics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:72 +#: superset/assets/javascripts/explore/stores/controls.jsx:90 +msgid "One or many metrics to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:79 +msgid "" +"Bounds for the Y axis. When left empty, the bounds are dynamically " +"defined based on the min/max of the data. Note that this feature will " +"only expand the axis range. It won't narrow the data's extent." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:88 +msgid "Ordering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:100 +msgid "Choose the metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:113 +msgid "Right Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:117 +msgid "Choose a metric for right axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:128 +msgid "Stacked Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:140 +msgid "Linear Color Scheme" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:153 +msgid "Normalize Across" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:160 +msgid "" +"Color will be rendered based on a ratio of the cell against the sum of " +"across this criteria" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:167 +msgid "Horizon Color Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:174 +msgid "Defines how the color are attributed." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:179 +msgid "Rendering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:185 +msgid "" +"image-rendering CSS attribute of the canvas object that defines how the " +"browser scales up the image" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:191 +msgid "XScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:194 +msgid "Number of steps to take between ticks when displaying the X scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:200 +msgid "YScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:203 +msgid "Number of steps to take between ticks when displaying the Y scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:209 +msgid "Include Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:210 +msgid "Whether to include the time granularity as defined in the time section" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:216 +msgid "Stacked Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:232 +msgid "Show Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:235 +msgid "Show data points as circle markers on the lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:240 +msgid "Bar Values" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:248 +msgid "Sort Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:250 +msgid "Sort bars by x labels." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:263 +msgid "Extra Controls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:266 +msgid "" +"Whether to show extra controls or not. Extra controls include things like" +" making mulitBar charts stacked or side by side." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:273 +msgid "Reduce X ticks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:276 +msgid "" +"Reduces the number of X axis ticks to be rendered. If true, the x axis " +"wont overflow and labels may be missing. If false, a minimum width will " +"be applied to columns and the width may overflow into an horizontal " +"scroll." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:285 +msgid "Include Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:288 +msgid "Include series name as an axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:293 +msgid "Color Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:295 +msgid "A metric to use for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:302 +msgid "Country Name" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:321 +msgid "The name of country that Superset should display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:325 +msgid "Country Field Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:333 +msgid "" +"The country code standard that Superset should expect to find in the " +"[country] column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:340 +msgid "Group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:342 +msgid "One or many controls to group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:354 +#: superset/assets/javascripts/explore/stores/controls.jsx:368 +msgid "Columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:370 +#: superset/assets/javascripts/explore/stores/controls.jsx:380 +#: superset/assets/javascripts/explore/stores/controls.jsx:390 +msgid "Columns to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:378 +msgid "X" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:388 +msgid "Y" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:399 +msgid "Origin" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:405 +msgid "" +"Defines the origin where time buckets start, accepts natural dates as in " +"`now`, `sunday` or `1970-01-01`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:415 +msgid "Bottom marging, in pixels, allowing for more room for axis labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:421 +msgid "Time Granularity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:438 +msgid "" +"The time granularity for the visualization. Note that you can type and " +"use simple natural language as in `10 seconds`, `1 day` or `56 weeks`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:445 +msgid "Domain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:448 +msgid "The time unit used for the grouping of blocks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:453 +msgid "Subdomain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:456 +msgid "" +"The time unit for each block. Should be a smaller unit than " +"domain_granularity. Should be larger or equal to Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:463 +msgid "Link Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:466 +msgid "Link length in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:472 +msgid "Charge" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:486 +msgid "Charge in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:494 +msgid "" +"The time column for the visualization. Note that you can define arbitrary" +" expression that return a DATETIME column in the table or. Also note that" +" the filter below is applied against this column or expression" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:506 +msgid "Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:508 +msgid "" +"The time granularity for the visualization. This applies a date " +"transformation to alter your time column and defines a new time " +"granularity. The options here are defined on a per database engine basis " +"in the Superset source code." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:521 +msgid "Resample Rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:524 +msgid "Pandas resample rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:530 +msgid "Resample How" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:533 +msgid "Pandas resample how" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:539 +msgid "Resample Fill Method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:542 +msgid "Pandas resample fill method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:548 +msgid "Since" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:560 +msgid "" +"Timestamp from filter. This supports free form typing and natural " +"language as in `1 day ago`, `28 days` or `3 years`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:567 +msgid "Until" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:582 +msgid "Max Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:590 +msgid "Whisker/outlier options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:592 +msgid "Determines how whiskers and outliers are calculated." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:603 +msgid "Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:606 +msgid "Target aspect ratio for treemap tiles." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:612 +#: superset/assets/javascripts/explore/stores/visTypes.js:510 +#: superset/assets/javascripts/explore/stores/visTypes.js:529 +#: superset/assets/javascripts/explore/stores/visTypes.js:654 +msgid "Number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:622 +msgid "Row limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:630 +msgid "Series limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:633 +msgid "Limits the number of time series that get displayed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:638 +msgid "Sort By" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:640 +msgid "Metric used to define the top series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:648 +msgid "Rolling" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:651 +msgid "" +"Defines a rolling window function to apply, works along with the " +"[Periods] text box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:657 +msgid "Periods" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:659 +msgid "" +"Defines the size of the rolling window function, relative to the time " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:665 +#: superset/assets/javascripts/explore/stores/visTypes.js:101 +msgid "Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:667 +msgid "" +"Defines the grouping of entities. Each series is shown as a specific " +"color on the chart and has a legend toggle" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:677 +msgid "Entity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:680 +msgid "This defines the element to be plotted on the chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:688 +#: superset/assets/javascripts/explore/stores/visTypes.js:459 +msgid "X Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:689 +msgid "Metric assigned to the [X] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:702 +#: superset/assets/javascripts/explore/stores/visTypes.js:466 +msgid "Y Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:705 +msgid "Metric assigned to the [Y] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:716 +msgid "Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:729 +msgid "URL" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:730 +msgid "" +"The URL, this control is templated, so you can integrate {{ width }} " +"and/or {{ height }} in your URL string." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:737 +msgid "X Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:744 +msgid "Y Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:751 +msgid "Custom WHERE clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:753 +msgid "" +"The text in this box gets included in your query's WHERE clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:761 +msgid "Custom HAVING clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:763 +msgid "" +"The text in this box gets included in your query's HAVING clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:771 +msgid "Comparison Period Lag" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:773 +msgid "Based on granularity, number of time periods to compare against" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:778 +msgid "Comparison suffix" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:779 +msgid "Suffix to apply after the percentage display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:785 +msgid "Table Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:790 +msgid "Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:796 +msgid "Series Height" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:799 +msgid "Pixel height of each series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:805 +msgid "Page Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:808 +msgid "Rows per page, 0 means no pagination" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:814 +#: superset/assets/javascripts/explore/stores/controls.jsx:824 +msgid "X Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:834 +msgid "Y Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:844 +msgid "Right Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:852 +msgid "Markup Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:857 +msgid "Pick your favorite markup language" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:862 +msgid "Rotation" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:865 +msgid "Rotation to apply to words in the cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:870 +msgid "Line Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:875 +msgid "Line interpolation as defined by d3.js" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:880 +msgid "Label Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:887 +msgid "What should be shown on the label?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:892 +msgid "Code" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:893 +msgid "Put your code here" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:902 +msgid "Aggregation function" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:914 +msgid "" +"Aggregate function to apply when pivoting and computing the total rows " +"and columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:921 +msgid "Font Size From" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:923 +msgid "Font size for the smallest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:929 +msgid "Font Size To" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:931 +msgid "Font size for the biggest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:936 +msgid "Instant Filtering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:940 +msgid "" +"Whether to apply filters as they change, or wait forusers to hit an " +"[Apply] button" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:947 +msgid "Range Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:950 +msgid "Whether to display the time range interactive selector" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:955 +msgid "Date Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:957 +msgid "Whether to include a time filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:962 +msgid "Data Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:964 +msgid "Whether to display the interactive data table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:969 +msgid "Search Box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:972 +msgid "Whether to include a client side search box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:977 +msgid "Table Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:979 +msgid "Whether to apply filter when table cell is clicked" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:984 +msgid "Show Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:987 +msgid "Whether to display bubbles on top of countries" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:992 +msgid "Legend" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:995 +msgid "Whether to display the legend (toggles)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1000 +msgid "X bounds" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1003 +msgid "Whether to display the min and max values of the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1008 +msgid "Rich Tooltip" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1011 +msgid "The rich tooltip shows a list of all series for that point in time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1017 +msgid "Y Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1020 +msgid "Use a log scale for the Y axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1025 +msgid "X Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1028 +msgid "Use a log scale for the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1033 +msgid "Donut" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1036 +msgid "Do you want a donut or a pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1041 +msgid "Put labels outside" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1044 +msgid "Put the labels outside the pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1049 +msgid "Contribution" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1051 +msgid "Compute the contribution to the total" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1056 +msgid "Period Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1059 +msgid "" +"[integer] Number of period to compare against, this is relative to the " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1065 +msgid "Period Ratio Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1068 +msgid "" +"`factor` means (new/previous), `growth` is ((new/previous) - 1), `value` " +"is (new-previous)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1074 +msgid "Time Shift" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1076 +msgid "" +"Overlay a timeseries from a relative time period. Expects relative time " +"delta in natural language (example: 24 hours, 7 days, 56 weeks, 365 " +"days)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1084 +msgid "Subheader" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1085 +msgid "Description text that shows up below your Big Number" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1091 +msgid "label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1093 +msgid "" +"`count` is COUNT(*) if a group by is used. Numerical columns will be " +"aggregated with the aggregator. Non-numerical columns will be used to " +"label points. Leave empty to get a count of points in each cluster." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1104 +msgid "Map Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1114 +msgid "Base layer map style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1120 +msgid "Clustering Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1133 +msgid "" +"The radius (in pixels) the algorithm uses to define a cluster. Choose 0 " +"to turn off clustering, but beware that a large number of points (>1000) " +"will cause lag." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1140 +msgid "Point Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1142 +msgid "" +"The radius of individual points (ones that are not in a cluster). Either " +"a numerical column or `Auto`, which scales the point based on the largest" +" cluster" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1152 +msgid "Point Radius Unit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1155 +msgid "The unit of measure for the specified point radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1160 +msgid "Opacity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1163 +msgid "Opacity of all clusters, points, and labels. Between 0 and 1." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1169 +msgid "Zoom" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1172 +msgid "Zoom level of the map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1178 +msgid "Default latitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1181 +msgid "Latitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1187 +msgid "Default longitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1190 +msgid "Longitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1196 +msgid "Live render" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1198 +msgid "Points and clusters will update as viewport is being changed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1204 +msgid "RGB Color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1214 +msgid "The color for points and clusters in RGB" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1219 +msgid "Ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1221 +msgid "Ranges to highlight with shading" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1226 +msgid "Range labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1228 +msgid "Labels for the ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1233 +msgid "Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1235 +msgid "List of values to mark with triangles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1240 +msgid "Marker labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1242 +msgid "Labels for the markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1247 +msgid "Marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1249 +msgid "List of values to mark with lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1254 +msgid "Marker line labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1256 +msgid "Labels for the marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1283 +msgid "Slice ID" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1285 +msgid "The id of the active slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1290 +msgid "Cache Timeout (seconds)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1292 +msgid "The number of seconds before expiring the cache" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1297 +msgid "Order by entity id" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1298 +msgid "" +"Important! Select this if the table is not already sorted by entity id, " +"else there is no guarantee that all events for each entity are returned." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1306 +msgid "Minimum leaf node event count" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1309 +msgid "" +"Leaf nodes that represent fewer than this number of events will be " +"initially hidden in the visualization" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:7 +#: superset/assets/javascripts/explore/stores/visTypes.js:23 +msgid "Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:8 +#: superset/assets/javascripts/explore/stores/visTypes.js:24 +msgid "Time related form attributes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:15 +msgid "Datasource & Chart Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:36 +msgid "This section exposes ways to include snippets of SQL in your query" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:48 +msgid "Advanced Analytics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:49 +msgid "" +"This section contains options that allow for advanced analytical post " +"processing of query results" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:64 +msgid "" +"Filters are defined using comma delimited strings as in " +"Leave the value control empty to filter empty strings or " +"nullsFor filters with comma in values, wrap them in single quotesas in " +"" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:71 +msgid "Result Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:72 +msgid "" +"The filters to apply after post-aggregation.Leave the value control empty" +" to filter empty strings or nulls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:84 +#: superset/assets/javascripts/explore/stores/visTypes.js:132 +#: superset/assets/javascripts/explore/stores/visTypes.js:163 +#: superset/assets/javascripts/explore/stores/visTypes.js:202 +#: superset/assets/javascripts/explore/stores/visTypes.js:235 +#: superset/assets/javascripts/explore/stores/visTypes.js:256 +#: superset/assets/javascripts/explore/stores/visTypes.js:393 +#: superset/assets/javascripts/explore/stores/visTypes.js:428 +#: superset/assets/javascripts/explore/stores/visTypes.js:447 +#: superset/assets/javascripts/explore/stores/visTypes.js:821 +msgid "Chart Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:104 +msgid "Breakdowns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:105 +msgid "Defines how each series is broken down" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:141 +#: superset/assets/javascripts/explore/stores/visTypes.js:211 +#: superset/assets/javascripts/explore/stores/visTypes.js:265 +msgid "Axes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:159 +msgid "Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:169 +msgid "Y Axis 1" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:175 +msgid "Y Axis 2" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:183 +msgid "Left Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:184 +msgid "Choose a metric for left axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:187 +msgid "Left Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:286 +msgid "GROUP BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:287 +msgid "Use this section if you want a query that aggregates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:294 +msgid "NOT GROUPED BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:295 +msgid "Use this section if you want to query atomic rows" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:302 +msgid "Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:453 +#: superset/assets/javascripts/explore/stores/visTypes.js:707 +msgid "Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:545 +msgid "Histogram Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:553 +msgid "Numeric Column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:554 +msgid "Select the numeric column to draw the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:557 +msgid "No of Bins" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:558 +msgid "Select number of bins for the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:578 +msgid "Primary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:579 +msgid "The primary metric is used to define the arc segment sizes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:582 +msgid "Secondary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:583 +msgid "" +"This secondary metric is used to define the color as a ratio against the " +"primary metric. If the two metrics match, color is mapped level groups" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:588 +msgid "Hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:589 +msgid "This defines the level of the hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:608 +#: superset/assets/javascripts/explore/stores/visTypes.js:635 +msgid "Source / Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:609 +#: superset/assets/javascripts/explore/stores/visTypes.js:636 +msgid "Choose a source and a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:626 +msgid "Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:641 +msgid "Chord Diagram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:655 +msgid "Choose a number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:658 +msgid "Source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:661 +msgid "Choose a source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:664 +msgid "Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:667 +msgid "Choose a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:686 +msgid "ISO 3166-1 codes of region/province/department" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:687 +msgid "" +"It's ISO 3166-1 of your region/province/department in your table. (see " +"documentation for list of ISO 3166-1)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:690 +#: superset/connectors/druid/views.py:106 superset/connectors/sqla/views.py:130 +msgid "Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:691 +msgid "Metric to display bottom title" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:717 +msgid "Country Control" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:718 +msgid "3 letter code of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:721 +msgid "Metric for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:722 +msgid "Metric that defines the color of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:725 +msgid "Bubble size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:726 +msgid "Metric that defines the size of the bubble" msgstr "" -#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:238 -#: superset/db_engine_specs.py:270 superset/db_engine_specs.py:325 -#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:781 -#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:845 -#: superset/db_engine_specs.py:893 -msgid "day" +#: superset/assets/javascripts/explore/stores/visTypes.js:732 +msgid "Filter Box" msgstr "" -#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:244 -#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 -#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:783 -#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 -msgid "week" +#: superset/assets/javascripts/explore/stores/visTypes.js:745 +msgid "Filter controls" msgstr "" -#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:246 -#: superset/db_engine_specs.py:273 superset/db_engine_specs.py:328 -#: superset/db_engine_specs.py:373 superset/db_engine_specs.py:785 -#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:849 -#: superset/db_engine_specs.py:895 -msgid "month" +#: superset/assets/javascripts/explore/stores/visTypes.js:747 +msgid "" +"The controls you want to filter on. Note that only columns checked as " +"\"filterable\" will show up on this list." msgstr "" -#: superset/db_engine_specs.py:201 superset/db_engine_specs.py:248 -#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:375 -#: superset/db_engine_specs.py:787 superset/db_engine_specs.py:817 -#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:897 -msgid "quarter" +#: superset/assets/javascripts/explore/stores/visTypes.js:789 +msgid "Axis & Metrics" msgstr "" -#: superset/db_engine_specs.py:202 superset/db_engine_specs.py:252 -#: superset/db_engine_specs.py:332 superset/db_engine_specs.py:789 -#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:899 -msgid "year" +#: superset/assets/javascripts/explore/stores/visTypes.js:797 +msgid "Heatmap Options" msgstr "" -#: superset/db_engine_specs.py:334 -msgid "week_start_monday" +#: superset/assets/javascripts/explore/stores/visTypes.js:817 +msgid "Horizon" msgstr "" -#: superset/db_engine_specs.py:377 superset/db_engine_specs.py:853 -msgid "week_ending_saturday" +#: superset/assets/javascripts/explore/stores/visTypes.js:843 +msgid "Points" msgstr "" -#: superset/db_engine_specs.py:380 superset/db_engine_specs.py:856 -msgid "week_start_sunday" +#: superset/assets/javascripts/explore/stores/visTypes.js:850 +msgid "Labelling" msgstr "" -#: superset/db_engine_specs.py:775 superset/db_engine_specs.py:887 -msgid "5 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:857 +msgid "Visual Tweaks" msgstr "" -#: superset/db_engine_specs.py:777 -msgid "half hour" +#: superset/assets/javascripts/explore/stores/visTypes.js:865 +msgid "Viewport" msgstr "" -#: superset/db_engine_specs.py:889 -msgid "10 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:875 +msgid "Longitude" msgstr "" -#: superset/utils.py:472 -#, python-format -msgid "[Superset] Access to the datasource %(name)s was granted" +#: superset/assets/javascripts/explore/stores/visTypes.js:876 +msgid "Column containing longitude data" msgstr "" -#: superset/viz.py:311 -msgid "Table View" +#: superset/assets/javascripts/explore/stores/visTypes.js:879 +msgid "Latitude" msgstr "" -#: superset/viz.py:364 -msgid "Pivot Table" +#: superset/assets/javascripts/explore/stores/visTypes.js:880 +msgid "Column containing latitude data" msgstr "" -#: superset/viz.py:413 -msgid "Markup" +#: superset/assets/javascripts/explore/stores/visTypes.js:883 +msgid "Cluster label aggregator" msgstr "" -#: superset/viz.py:432 -msgid "Separator" +#: superset/assets/javascripts/explore/stores/visTypes.js:884 +msgid "" +"Aggregate function applied to the list of points in each cluster to " +"produce the cluster label." msgstr "" -#: superset/viz.py:448 -msgid "Word Cloud" +#: superset/assets/javascripts/explore/stores/visTypes.js:888 +msgid "Tooltip" msgstr "" -#: superset/viz.py:471 -msgid "Treemap" +#: superset/assets/javascripts/explore/stores/visTypes.js:889 +msgid "Show a tooltip when hovering over points and clusters describing the label" msgstr "" -#: superset/viz.py:497 -msgid "Calendar Heatmap" +#: superset/assets/javascripts/explore/stores/visTypes.js:893 +msgid "" +"One or many controls to group by. If grouping, latitude and longitude " +"columns must be present." msgstr "" -#: superset/viz.py:555 -msgid "Box Plot" +#: superset/assets/javascripts/explore/stores/visTypes.js:904 +msgid "Event definition" msgstr "" -#: superset/viz.py:644 -msgid "Bubble Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:914 +msgid "Additional meta data" msgstr "" -#: superset/viz.py:693 -msgid "Bullet Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:922 +msgid "Column containing entity ids" msgstr "" -#: superset/viz.py:742 -msgid "Big Number with Trendline" +#: superset/assets/javascripts/explore/stores/visTypes.js:923 +msgid "e.g., a \"user id\" column" msgstr "" -#: superset/viz.py:771 -msgid "Big Number" +#: superset/assets/javascripts/explore/stores/visTypes.js:926 +msgid "Column containing event names" msgstr "" -#: superset/viz.py:798 -msgid "Time Series - Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:934 +msgid "Event count limit" msgstr "" -#: superset/viz.py:925 -msgid "Time Series - Dual Axis Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:935 +msgid "The maximum number of events to return, equivalent to number of rows" msgstr "" -#: superset/viz.py:1000 -msgid "Time Series - Bar Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:938 +msgid "Meta data" msgstr "" -#: superset/viz.py:1008 -msgid "Time Series - Percent Change" +#: superset/assets/javascripts/explore/stores/visTypes.js:939 +msgid "Select any columns for meta data inspection" msgstr "" -#: superset/viz.py:1016 -msgid "Time Series - Stacked" +#: superset/assets/javascripts/modules/superset.js:134 +msgid "" +"The server could not be reached. You may want to verify your connection " +"and try again." msgstr "" -#: superset/viz.py:1025 -msgid "Distribution - NVD3 - Pie Chart" +#: superset/assets/javascripts/modules/superset.js:137 +#, python-format +msgid "An unknown error occurred. (Status: %s )" msgstr "" -#: superset/viz.py:1043 -msgid "Histogram" +#: superset/assets/javascripts/modules/superset.js:162 +#, python-format +msgid "Query timeout - visualization query are set to time out at %s seconds." msgstr "" -#: superset/viz.py:1068 -msgid "Distribution - Bar Chart" +#: superset/assets/javascripts/profile/components/App.jsx:24 +msgid "Favorites" msgstr "" -#: superset/viz.py:1135 -msgid "Sunburst" +#: superset/assets/javascripts/profile/components/App.jsx:30 +msgid "Created Content" msgstr "" -#: superset/viz.py:1168 -msgid "Sankey" +#: superset/assets/javascripts/profile/components/App.jsx:37 +msgid "Recent Activity" msgstr "" -#: superset/viz.py:1217 -msgid "Directed Force Layout" +#: superset/assets/javascripts/profile/components/App.jsx:42 +msgid "Security & Access" msgstr "" -#: superset/viz.py:1238 -msgid "Country Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:33 +msgid "No slices" msgstr "" -#: superset/viz.py:1267 -msgid "World Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:49 +msgid "No dashboards" msgstr "" -#: superset/viz.py:1317 -msgid "Filters" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:58 +#: superset/assets/javascripts/profile/components/Favorites.jsx:59 +#: superset/templates/superset/welcome.html:20 superset/views/core.py:367 +#: superset/views/core.py:527 +msgid "Dashboards" msgstr "" -#: superset/viz.py:1352 -msgid "iFrame" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:61 +#: superset/assets/javascripts/profile/components/Favorites.jsx:62 +#: superset/views/core.py:403 superset/views/core.py:472 +msgid "Slices" msgstr "" -#: superset/viz.py:1369 -msgid "Parallel Coordinates" +#: superset/assets/javascripts/profile/components/Favorites.jsx:34 +msgid "No favorite slices yet, go click on stars!" msgstr "" -#: superset/viz.py:1394 -msgid "Heatmap" +#: superset/assets/javascripts/profile/components/Favorites.jsx:50 +msgid "No favorite dashboards yet, go click on stars!" msgstr "" -#: superset/viz.py:1445 -msgid "Horizon Charts" +#: superset/assets/javascripts/profile/components/Security.jsx:14 +msgid "Roles" msgstr "" -#: superset/viz.py:1456 -msgid "Mapbox" +#: superset/assets/javascripts/profile/components/Security.jsx:23 +#: superset/views/core.py:279 +msgid "Databases" +msgstr "" + +#: superset/assets/javascripts/profile/components/Security.jsx:34 +msgid "Datasources" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:18 +msgid "Profile picture provided by Gravatar" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:33 +msgid "joined" msgstr "" -#: superset/connectors/druid/models.py:950 +#: superset/assets/javascripts/profile/components/UserInfo.jsx:43 +msgid "id:" +msgstr "" + +#: superset/assets/visualizations/EventFlow.jsx:56 +msgid "Sorry, there appears to be no data" +msgstr "" + +#: superset/assets/visualizations/filter_box.jsx:88 +#, python-format +msgid "Select [%s]" +msgstr "" + +#: superset/connectors/druid/models.py:970 msgid "No data was returned." msgstr "" -#: superset/connectors/druid/views.py:36 superset/connectors/sqla/views.py:73 -msgid "Column" +#: superset/connectors/druid/views.py:28 +msgid "List Druid Column" msgstr "" -#: superset/connectors/druid/views.py:37 superset/connectors/druid/views.py:96 -#: superset/connectors/sqla/views.py:119 -msgid "Type" +#: superset/connectors/druid/views.py:29 +msgid "Show Druid Column" msgstr "" -#: superset/connectors/druid/views.py:38 superset/views/core.py:305 -#: superset/views/core.py:354 -msgid "Datasource" +#: superset/connectors/druid/views.py:30 +msgid "Add Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:31 +msgid "Edit Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 +msgid "Column" +msgstr "" + +#: superset/connectors/druid/views.py:44 superset/connectors/druid/views.py:109 +#: superset/connectors/sqla/views.py:133 +msgid "Type" msgstr "" -#: superset/connectors/druid/views.py:39 superset/connectors/sqla/views.py:76 +#: superset/connectors/druid/views.py:46 superset/connectors/sqla/views.py:84 msgid "Groupable" msgstr "" -#: superset/connectors/druid/views.py:40 superset/connectors/sqla/views.py:77 +#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:85 msgid "Filterable" msgstr "" -#: superset/connectors/druid/views.py:41 superset/connectors/sqla/views.py:79 +#: superset/connectors/druid/views.py:48 superset/connectors/sqla/views.py:87 msgid "Count Distinct" msgstr "" -#: superset/connectors/druid/views.py:42 superset/connectors/sqla/views.py:80 +#: superset/connectors/druid/views.py:49 superset/connectors/sqla/views.py:88 msgid "Sum" msgstr "" -#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 -msgid "Min" +#: superset/connectors/druid/views.py:54 superset/connectors/sqla/views.py:50 +msgid "" +"Whether this column is exposed in the `Filters` section of the explore " +"view." msgstr "" -#: superset/connectors/druid/views.py:44 superset/connectors/sqla/views.py:82 -msgid "Max" +#: superset/connectors/druid/views.py:80 +msgid "List Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:42 -msgid "" -"Whether this column is exposed in the `Filters` section of the explore " -"view." +#: superset/connectors/druid/views.py:81 +msgid "Show Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:82 +msgid "Add Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:83 +msgid "Edit Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:87 superset/connectors/sqla/views.py:101 +#: superset/connectors/druid/views.py:100 superset/connectors/sqla/views.py:115 msgid "" "Whether the access to this metric is restricted to certain roles. Only " "roles with the permission 'metric access on XXX (the name of this " "metric)' are allowed to access this metric" msgstr "" -#: superset/connectors/druid/views.py:93 superset/connectors/sqla/views.py:116 -msgid "Metric" +#: superset/connectors/druid/views.py:108 superset/connectors/sqla/views.py:82 +#: superset/connectors/sqla/views.py:132 +msgid "Verbose Name" msgstr "" -#: superset/connectors/druid/views.py:94 superset/connectors/druid/views.py:204 -#: superset/connectors/sqla/views.py:75 superset/connectors/sqla/views.py:117 -#: superset/views/core.py:355 -msgid "Description" +#: superset/connectors/druid/views.py:110 superset/views/core.py:554 +msgid "JSON" msgstr "" -#: superset/connectors/druid/views.py:95 superset/connectors/sqla/views.py:74 -#: superset/connectors/sqla/views.py:118 -msgid "Verbose Name" +#: superset/connectors/druid/views.py:111 +msgid "Druid Datasource" msgstr "" -#: superset/connectors/druid/views.py:97 superset/views/core.py:534 -msgid "JSON" +#: superset/connectors/druid/views.py:128 +msgid "List Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:98 -msgid "Druid Datasource" +#: superset/connectors/druid/views.py:129 +msgid "Show Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:130 +msgid "Add Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:131 +msgid "Edit Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:123 -#: superset/connectors/druid/views.py:203 +#: superset/connectors/druid/views.py:142 +#: superset/connectors/druid/views.py:228 msgid "Cluster" msgstr "" -#: superset/connectors/druid/views.py:124 +#: superset/connectors/druid/views.py:143 msgid "Coordinator Host" msgstr "" -#: superset/connectors/druid/views.py:125 +#: superset/connectors/druid/views.py:144 msgid "Coordinator Port" msgstr "" -#: superset/connectors/druid/views.py:126 +#: superset/connectors/druid/views.py:145 msgid "Coordinator Endpoint" msgstr "" -#: superset/connectors/druid/views.py:127 +#: superset/connectors/druid/views.py:146 msgid "Broker Host" msgstr "" -#: superset/connectors/druid/views.py:128 +#: superset/connectors/druid/views.py:147 msgid "Broker Port" msgstr "" -#: superset/connectors/druid/views.py:129 +#: superset/connectors/druid/views.py:148 msgid "Broker Endpoint" msgstr "" -#: superset/connectors/druid/views.py:144 +#: superset/connectors/druid/views.py:163 msgid "Druid Clusters" msgstr "" -#: superset/connectors/druid/views.py:147 -#: superset/connectors/druid/views.py:243 -#: superset/connectors/druid/views.py:282 superset/connectors/sqla/views.py:261 -#: superset/views/core.py:274 +#: superset/connectors/druid/views.py:166 +#: superset/connectors/druid/views.py:268 +#: superset/connectors/druid/views.py:307 superset/connectors/sqla/views.py:281 +#: superset/views/core.py:282 msgid "Sources" msgstr "" -#: superset/connectors/druid/views.py:172 superset/connectors/sqla/views.py:155 +#: superset/connectors/druid/views.py:173 +msgid "List Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:174 +msgid "Show Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:175 +msgid "Add Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:176 +msgid "Edit Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:197 superset/connectors/sqla/views.py:175 msgid "" "The list of slices associated with this table. By altering this " "datasource, you may change how these associated slices behave. Also note " @@ -362,11 +2721,11 @@ msgid "" "datasource for a slice, overwrite the slice from the 'explore view'" msgstr "" -#: superset/connectors/druid/views.py:180 superset/connectors/sqla/views.py:163 +#: superset/connectors/druid/views.py:205 superset/connectors/sqla/views.py:183 msgid "Timezone offset (in hours) for this datasource" msgstr "" -#: superset/connectors/druid/views.py:184 +#: superset/connectors/druid/views.py:209 msgid "" "Time expression to use as a predicate when retrieving distinct values to " "populate the filter component. Only applies when `Enable Filter Select` " @@ -374,160 +2733,203 @@ msgid "" "filter will be populated based on the distinct value over the past week" msgstr "" -#: superset/connectors/druid/views.py:191 superset/connectors/sqla/views.py:185 +#: superset/connectors/druid/views.py:216 superset/connectors/sqla/views.py:205 msgid "" "Whether to populate the filter's dropdown in the explore view's filter " "section with a list of distinct values fetched from the backend on the " "fly" msgstr "" -#: superset/connectors/druid/views.py:195 superset/connectors/sqla/views.py:199 +#: superset/connectors/druid/views.py:220 superset/connectors/sqla/views.py:219 msgid "" "Redirects to this endpoint when clicking on the datasource from the " "datasource list" msgstr "" -#: superset/connectors/druid/views.py:201 superset/connectors/sqla/views.py:192 +#: superset/connectors/druid/views.py:226 superset/connectors/sqla/views.py:212 msgid "Associated Slices" msgstr "" -#: superset/connectors/druid/views.py:202 +#: superset/connectors/druid/views.py:227 msgid "Data Source" msgstr "" -#: superset/connectors/druid/views.py:205 +#: superset/connectors/druid/views.py:230 msgid "Owner" msgstr "" -#: superset/connectors/druid/views.py:206 +#: superset/connectors/druid/views.py:231 msgid "Is Hidden" msgstr "" -#: superset/connectors/druid/views.py:207 superset/connectors/sqla/views.py:197 +#: superset/connectors/druid/views.py:232 superset/connectors/sqla/views.py:217 msgid "Enable Filter Select" msgstr "" -#: superset/connectors/druid/views.py:208 +#: superset/connectors/druid/views.py:233 msgid "Default Endpoint" msgstr "" -#: superset/connectors/druid/views.py:209 +#: superset/connectors/druid/views.py:234 msgid "Time Offset" msgstr "" -#: superset/connectors/druid/views.py:210 superset/connectors/sqla/views.py:203 -#: superset/views/core.py:241 superset/views/core.py:351 +#: superset/connectors/druid/views.py:235 superset/connectors/sqla/views.py:223 +#: superset/views/core.py:249 superset/views/core.py:365 msgid "Cache Timeout" msgstr "" -#: superset/connectors/druid/views.py:241 +#: superset/connectors/druid/views.py:266 msgid "Druid Datasources" msgstr "" -#: superset/connectors/druid/views.py:279 +#: superset/connectors/druid/views.py:304 msgid "Refresh Druid Metadata" msgstr "" -#: superset/connectors/sqla/models.py:388 +#: superset/connectors/sqla/models.py:386 msgid "" "Datetime column not provided as part table configuration and is required " "by this type of chart" msgstr "" -#: superset/connectors/sqla/models.py:393 +#: superset/connectors/sqla/models.py:391 msgid "Metric '{}' is not valid" msgstr "" -#: superset/connectors/sqla/views.py:38 +#: superset/connectors/sqla/views.py:28 +msgid "List Columns" +msgstr "" + +#: superset/connectors/sqla/views.py:29 +msgid "Show Column" +msgstr "" + +#: superset/connectors/sqla/views.py:30 +msgid "Add Column" +msgstr "" + +#: superset/connectors/sqla/views.py:31 +msgid "Edit Column" +msgstr "" + +#: superset/connectors/sqla/views.py:46 msgid "" "Whether to make this column available as a [Time Granularity] option, " "column has to be DATETIME or DATETIME-like" msgstr "" -#: superset/connectors/sqla/views.py:45 +#: superset/connectors/sqla/views.py:53 msgid "" "The data type that was inferred by the database. It may be necessary to " "input a type manually for expression-defined columns in some cases. In " "most case users should not need to alter this." msgstr "" -#: superset/connectors/sqla/views.py:78 superset/connectors/sqla/views.py:121 -#: superset/connectors/sqla/views.py:193 superset/views/core.py:361 -msgid "Table" -msgstr "" - -#: superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:91 msgid "Expression" msgstr "" -#: superset/connectors/sqla/views.py:84 +#: superset/connectors/sqla/views.py:92 msgid "Is temporal" msgstr "" -#: superset/connectors/sqla/views.py:85 +#: superset/connectors/sqla/views.py:93 msgid "Datetime Format" msgstr "" -#: superset/connectors/sqla/views.py:86 +#: superset/connectors/sqla/views.py:94 msgid "Database Expression" msgstr "" -#: superset/connectors/sqla/views.py:120 +#: superset/connectors/sqla/views.py:102 +msgid "List Metrics" +msgstr "" + +#: superset/connectors/sqla/views.py:103 +msgid "Show Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:104 +msgid "Add Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:105 +msgid "Edit Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:134 msgid "SQL Expression" msgstr "" -#: superset/connectors/sqla/views.py:164 +#: superset/connectors/sqla/views.py:152 +msgid "List Tables" +msgstr "" + +#: superset/connectors/sqla/views.py:153 +msgid "Show Table" +msgstr "" + +#: superset/connectors/sqla/views.py:154 +msgid "Add Table" +msgstr "" + +#: superset/connectors/sqla/views.py:155 +msgid "Edit Table" +msgstr "" + +#: superset/connectors/sqla/views.py:184 msgid "Name of the table that exists in the source database" msgstr "" -#: superset/connectors/sqla/views.py:166 +#: superset/connectors/sqla/views.py:186 msgid "Schema, as used only in some databases like Postgres, Redshift and DB2" msgstr "" -#: superset/connectors/sqla/views.py:172 +#: superset/connectors/sqla/views.py:192 msgid "" "This fields acts a Superset view, meaning that Superset will run a query " "against this string as a subquery." msgstr "" -#: superset/connectors/sqla/views.py:176 +#: superset/connectors/sqla/views.py:196 msgid "" "Predicate applied when fetching distinct value to populate the filter " "control component. Supports jinja template syntax. Applies only when " "`Enable Filter Select` is on." msgstr "" -#: superset/connectors/sqla/views.py:182 +#: superset/connectors/sqla/views.py:202 msgid "Redirects to this endpoint when clicking on the table from the table list" msgstr "" -#: superset/connectors/sqla/views.py:194 +#: superset/connectors/sqla/views.py:214 msgid "Changed By" msgstr "" -#: superset/connectors/sqla/views.py:195 superset/views/core.py:237 +#: superset/connectors/sqla/views.py:215 superset/views/core.py:245 msgid "Database" msgstr "" -#: superset/connectors/sqla/views.py:196 superset/views/core.py:239 +#: superset/connectors/sqla/views.py:216 superset/views/core.py:247 msgid "Last Changed" msgstr "" -#: superset/connectors/sqla/views.py:198 +#: superset/connectors/sqla/views.py:218 msgid "Schema" msgstr "" -#: superset/connectors/sqla/views.py:202 +#: superset/connectors/sqla/views.py:222 msgid "Offset" msgstr "" -#: superset/connectors/sqla/views.py:235 +#: superset/connectors/sqla/views.py:255 msgid "" "The table was created. As part of this two phase configuration process, " "you should now click the edit button by the new table to configure it." msgstr "" -#: superset/connectors/sqla/views.py:259 +#: superset/connectors/sqla/views.py:279 msgid "Tables" msgstr "" @@ -560,19 +2962,10 @@ msgstr "" msgid "Request Permissions" msgstr "" -#: superset/templates/superset/request_access.html:16 -msgid "Cancel" -msgstr "" - #: superset/templates/superset/welcome.html:10 msgid "Welcome!" msgstr "" -#: superset/templates/superset/welcome.html:20 superset/views/core.py:353 -#: superset/views/core.py:507 -msgid "Dashboards" -msgstr "" - #: superset/templates/superset/models/database/macros.html:4 msgid "Test Connection" msgstr "" @@ -590,144 +2983,172 @@ msgstr "" msgid "Delete all Really?" msgstr "" -#: superset/views/core.py:55 +#: superset/views/core.py:57 msgid "This endpoint requires the `all_datasource_access` permission" msgstr "" -#: superset/views/core.py:57 +#: superset/views/core.py:59 msgid "The datasource seems to have been deleted" msgstr "" -#: superset/views/core.py:58 +#: superset/views/core.py:60 msgid "The access requests seem to have been deleted" msgstr "" -#: superset/views/core.py:60 +#: superset/views/core.py:62 msgid "The user seems to have been deleted" msgstr "" -#: superset/views/core.py:61 +#: superset/views/core.py:63 msgid "You don't have access to this datasource" msgstr "" -#: superset/views/core.py:65 +#: superset/views/core.py:67 #, python-format msgid "" "This view requires the database %(name)s or `all_datasource_access` " "permission" msgstr "" -#: superset/views/core.py:70 +#: superset/views/core.py:72 #, python-format msgid "" "This endpoint requires the datasource %(name)s, database or " "`all_datasource_access` permission" msgstr "" -#: superset/views/core.py:205 +#: superset/views/core.py:175 +msgid "List Databases" +msgstr "" + +#: superset/views/core.py:176 +msgid "Show Database" +msgstr "" + +#: superset/views/core.py:177 +msgid "Add Database" +msgstr "" + +#: superset/views/core.py:178 +msgid "Edit Database" +msgstr "" + +#: superset/views/core.py:213 msgid "Expose this DB in SQL Lab" msgstr "" -#: superset/views/core.py:206 +#: superset/views/core.py:214 msgid "" "Allow users to run synchronous queries, this is the default and should " "work well for queries that can be executed within a web request scope " "(<~1 minute)" msgstr "" -#: superset/views/core.py:210 +#: superset/views/core.py:218 msgid "" "Allow users to run queries, against an async backend. This assumes that " "you have a Celery worker setup as well as a results backend." msgstr "" -#: superset/views/core.py:214 +#: superset/views/core.py:222 msgid "Allow CREATE TABLE AS option in SQL Lab" msgstr "" -#: superset/views/core.py:215 +#: superset/views/core.py:223 msgid "" "Allow users to run non-SELECT statements (UPDATE, DELETE, CREATE, ...) in" " SQL Lab" msgstr "" -#: superset/views/core.py:219 +#: superset/views/core.py:227 msgid "" "When allowing CREATE TABLE AS option in SQL Lab, this option forces the " "table to be created in this schema" msgstr "" -#: superset/views/core.py:233 +#: superset/views/core.py:241 msgid "Expose in SQL Lab" msgstr "" -#: superset/views/core.py:234 +#: superset/views/core.py:242 msgid "Allow CREATE TABLE AS" msgstr "" -#: superset/views/core.py:235 +#: superset/views/core.py:243 msgid "Allow DML" msgstr "" -#: superset/views/core.py:236 +#: superset/views/core.py:244 msgid "CTAS Schema" msgstr "" -#: superset/views/core.py:238 superset/views/core.py:352 -#: superset/views/core.py:454 superset/views/core.py:518 +#: superset/views/core.py:246 superset/views/core.py:366 +#: superset/views/core.py:474 superset/views/core.py:538 msgid "Creator" msgstr "" -#: superset/views/core.py:240 +#: superset/views/core.py:248 msgid "SQLAlchemy URI" msgstr "" -#: superset/views/core.py:242 +#: superset/views/core.py:250 msgid "Extra" msgstr "" -#: superset/views/core.py:260 +#: superset/views/core.py:268 msgid "Import Dashboards" msgstr "" -#: superset/views/core.py:264 superset/views/core.py:2279 -#: superset/views/sql_lab.py:22 +#: superset/views/core.py:272 superset/views/core.py:2318 +#: superset/views/sql_lab.py:23 msgid "Manage" msgstr "" -#: superset/views/core.py:271 -msgid "Databases" -msgstr "" - -#: superset/views/core.py:302 superset/views/core.py:531 +#: superset/views/core.py:310 superset/views/core.py:551 msgid "User" msgstr "" -#: superset/views/core.py:303 +#: superset/views/core.py:311 msgid "User Roles" msgstr "" -#: superset/views/core.py:304 +#: superset/views/core.py:312 msgid "Database URL" msgstr "" -#: superset/views/core.py:306 +#: superset/views/core.py:314 msgid "Roles to grant" msgstr "" -#: superset/views/core.py:307 +#: superset/views/core.py:315 msgid "Created On" msgstr "" -#: superset/views/core.py:313 +#: superset/views/core.py:321 msgid "Access requests" msgstr "" -#: superset/views/core.py:315 superset/views/core.py:542 +#: superset/views/core.py:323 superset/views/core.py:562 msgid "Security" msgstr "" -#: superset/views/core.py:340 +#: superset/views/core.py:330 +msgid "List Slices" +msgstr "" + +#: superset/views/core.py:331 +msgid "Show Slice" +msgstr "" + +#: superset/views/core.py:332 +msgid "Add Slice" +msgstr "" + +#: superset/views/core.py:333 +msgid "Edit Slice" +msgstr "" + +#: superset/views/core.py:354 msgid "" "These parameters are generated dynamically when clicking the save or " "overwrite button in the explore view. This JSON object is exposed here " @@ -735,238 +3156,194 @@ msgid "" "parameters." msgstr "" -#: superset/views/core.py:345 +#: superset/views/core.py:359 msgid "Duration (in seconds) of the caching timeout for this slice." msgstr "" -#: superset/views/core.py:356 +#: superset/views/core.py:370 msgid "Last Modified" msgstr "" -#: superset/views/core.py:357 superset/views/core.py:453 +#: superset/views/core.py:371 superset/views/core.py:473 msgid "Owners" msgstr "" -#: superset/views/core.py:358 +#: superset/views/core.py:372 msgid "Parameters" msgstr "" -#: superset/views/core.py:359 superset/views/core.py:401 +#: superset/views/core.py:373 superset/views/core.py:415 msgid "Slice" msgstr "" -#: superset/views/core.py:360 -msgid "Name" +#: superset/views/core.py:432 +msgid "List Dashboards" msgstr "" -#: superset/views/core.py:362 -msgid "Visualization Type" +#: superset/views/core.py:433 +msgid "Show Dashboard" msgstr "" -#: superset/views/core.py:389 superset/views/core.py:452 -msgid "Slices" +#: superset/views/core.py:434 +msgid "Add Dashboard" +msgstr "" + +#: superset/views/core.py:435 +msgid "Edit Dashboard" msgstr "" -#: superset/views/core.py:426 +#: superset/views/core.py:446 msgid "" "This json object describes the positioning of the widgets in the " "dashboard. It is dynamically generated when adjusting the widgets size " "and positions by using drag & drop in the dashboard view" msgstr "" -#: superset/views/core.py:431 +#: superset/views/core.py:451 msgid "" "The css for individual dashboards can be altered here, or in the " "dashboard view where changes are immediately visible" msgstr "" -#: superset/views/core.py:435 +#: superset/views/core.py:455 msgid "To get a readable URL for your dashboard" msgstr "" -#: superset/views/core.py:436 +#: superset/views/core.py:456 msgid "" "This JSON object is generated dynamically when clicking the save or " "overwrite button in the dashboard view. It is exposed here for reference " "and for power users who may want to alter specific parameters." msgstr "" -#: superset/views/core.py:441 +#: superset/views/core.py:461 msgid "Owners is a list of users who can alter the dashboard." msgstr "" -#: superset/views/core.py:449 superset/views/core.py:516 +#: superset/views/core.py:469 superset/views/core.py:536 msgid "Dashboard" msgstr "" -#: superset/views/core.py:450 superset/views/core.py:517 -msgid "Title" -msgstr "" - -#: superset/views/core.py:451 +#: superset/views/core.py:471 msgid "Slug" msgstr "" -#: superset/views/core.py:455 superset/views/core.py:519 -msgid "Modified" -msgstr "" - -#: superset/views/core.py:456 +#: superset/views/core.py:476 msgid "Position JSON" msgstr "" -#: superset/views/core.py:457 -msgid "CSS" -msgstr "" - -#: superset/views/core.py:458 +#: superset/views/core.py:478 msgid "JSON Metadata" msgstr "" -#: superset/views/core.py:459 +#: superset/views/core.py:479 msgid "Underlying Tables" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export dashboards?" msgstr "" -#: superset/views/core.py:532 +#: superset/views/core.py:552 msgid "Action" msgstr "" -#: superset/views/core.py:533 +#: superset/views/core.py:553 msgid "dttm" msgstr "" -#: superset/views/core.py:540 +#: superset/views/core.py:560 msgid "Action Log" msgstr "" -#: superset/views/core.py:770 +#: superset/views/core.py:790 msgid "Access was requested" msgstr "" -#: superset/views/core.py:831 +#: superset/views/core.py:851 #, python-format msgid "" "%(user)s was granted the role %(role)s that gives access to the " "%(datasource)s" msgstr "" -#: superset/views/core.py:847 +#: superset/views/core.py:867 #, python-format msgid "Role %(r)s was extended to provide the access to the datasource %(ds)s" msgstr "" -#: superset/views/core.py:856 +#: superset/views/core.py:876 msgid "You have no permission to approve this request" msgstr "" -#: superset/views/core.py:1589 +#: superset/views/core.py:1609 msgid "" "Malformed request. slice_id or table_name and db_name arguments are " "expected" msgstr "" -#: superset/views/core.py:1595 +#: superset/views/core.py:1615 #, python-format msgid "Slice %(id)s not found" msgstr "" -#: superset/views/core.py:1607 +#: superset/views/core.py:1627 #, python-format msgid "Table %(t)s wasn't found in the database %(d)s" msgstr "" -#: superset/views/core.py:1741 +#: superset/views/core.py:1761 #, python-format msgid "Can't find User '%(name)s', please ask your admin to create one." msgstr "" -#: superset/views/core.py:1748 +#: superset/views/core.py:1768 #, python-format msgid "Can't find DruidCluster with cluster_name = '%(name)s'" msgstr "" -#: superset/views/core.py:2276 +#: superset/views/core.py:2315 msgid "CSS Templates" msgstr "" -#: superset/views/core.py:2286 +#: superset/views/core.py:2325 msgid "SQL Editor" msgstr "" -#: superset/views/core.py:2291 superset/views/core.py:2300 +#: superset/views/core.py:2330 superset/views/core.py:2339 msgid "SQL Lab" msgstr "" -#: superset/views/core.py:2295 +#: superset/views/core.py:2334 msgid "Query Search" msgstr "" -#: superset/views/sql_lab.py:20 +#: superset/views/sql_lab.py:21 msgid "Queries" msgstr "" -#: superset/views/sql_lab.py:55 -msgid "Saved Queries" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 -msgid "Please enter a slice name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 -msgid "Please select a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 -msgid "Please enter a dashboard name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 -msgid "Save A Slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 -msgid "Overwrite slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 -msgid "Save as" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 -msgid "[slice name]" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 -msgid "Do not add to a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 -msgid "Add slice to existing dashboard" +#: superset/views/sql_lab.py:30 +msgid "List Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 -msgid "Add to new dashboard" +#: superset/views/sql_lab.py:31 +msgid "Show Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 -msgid "[dashboard name]" +#: superset/views/sql_lab.py:32 +msgid "Add Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 -msgid "Save" +#: superset/views/sql_lab.py:33 +msgid "Edit Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 -msgid "Save & go to dashboard" +#: superset/views/sql_lab.py:62 +msgid "Saved Queries" msgstr "" #~ msgid "Databases" diff --git a/superset/translations/fr/LC_MESSAGES/messages.mo b/superset/translations/fr/LC_MESSAGES/messages.mo index 4fa36d625378bfb1fd572fba473690483ba4521a..b72ac0f9a8480359f0ab5caf667886524424ad66 100644 GIT binary patch literal 58906 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 dQ(5IyR!$n\n" "Language: fr\n" @@ -18,342 +18,2701 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:225 -#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:317 -#: superset/db_engine_specs.py:362 superset/db_engine_specs.py:770 -#: superset/db_engine_specs.py:806 superset/db_engine_specs.py:838 -#: superset/db_engine_specs.py:884 +#: superset/assets/javascripts/explore/stores/controls.jsx:491 +#: superset/db_engine_specs.py:192 superset/db_engine_specs.py:223 +#: superset/db_engine_specs.py:267 superset/db_engine_specs.py:315 +#: superset/db_engine_specs.py:360 superset/db_engine_specs.py:810 +#: superset/db_engine_specs.py:846 superset/db_engine_specs.py:878 +#: superset/db_engine_specs.py:924 superset/db_engine_specs.py:961 msgid "Time Column" msgstr "" -#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:226 -#: superset/db_engine_specs.py:318 superset/db_engine_specs.py:363 -#: superset/db_engine_specs.py:771 superset/db_engine_specs.py:839 +#: superset/db_engine_specs.py:193 superset/db_engine_specs.py:224 +#: superset/db_engine_specs.py:316 superset/db_engine_specs.py:361 +#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:879 +#: superset/db_engine_specs.py:962 msgid "second" msgstr "" -#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:229 -#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 -#: superset/db_engine_specs.py:773 superset/db_engine_specs.py:807 -#: superset/db_engine_specs.py:841 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:227 +#: superset/db_engine_specs.py:319 superset/db_engine_specs.py:363 +#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:881 superset/db_engine_specs.py:925 +#: superset/db_engine_specs.py:963 msgid "minute" msgstr "" -#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:233 -#: superset/db_engine_specs.py:323 superset/db_engine_specs.py:367 -#: superset/db_engine_specs.py:779 superset/db_engine_specs.py:809 -#: superset/db_engine_specs.py:843 superset/db_engine_specs.py:891 -msgid "hour" +#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:231 +#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 +#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:849 +#: superset/db_engine_specs.py:883 superset/db_engine_specs.py:931 +#: superset/db_engine_specs.py:964 +msgid "hour" +msgstr "" + +#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:236 +#: superset/db_engine_specs.py:268 superset/db_engine_specs.py:323 +#: superset/db_engine_specs.py:367 superset/db_engine_specs.py:821 +#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:933 superset/db_engine_specs.py:965 +msgid "day" +msgstr "" + +#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:242 +#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:324 +#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:823 +#: superset/db_engine_specs.py:853 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:966 +msgid "week" +msgstr "" + +#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:244 +#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 +#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:825 +#: superset/db_engine_specs.py:855 superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:935 superset/db_engine_specs.py:967 +msgid "month" +msgstr "" + +#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:246 +#: superset/db_engine_specs.py:328 superset/db_engine_specs.py:373 +#: superset/db_engine_specs.py:827 superset/db_engine_specs.py:857 +#: superset/db_engine_specs.py:891 superset/db_engine_specs.py:937 +#: superset/db_engine_specs.py:968 +msgid "quarter" +msgstr "" + +#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:250 +#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:829 +#: superset/db_engine_specs.py:859 superset/db_engine_specs.py:939 +#: superset/db_engine_specs.py:969 +msgid "year" +msgstr "" + +#: superset/db_engine_specs.py:332 +msgid "week_start_monday" +msgstr "" + +#: superset/db_engine_specs.py:375 superset/db_engine_specs.py:893 +msgid "week_ending_saturday" +msgstr "" + +#: superset/db_engine_specs.py:378 superset/db_engine_specs.py:896 +msgid "week_start_sunday" +msgstr "" + +#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:927 +msgid "5 minute" +msgstr "" + +#: superset/db_engine_specs.py:817 +msgid "half hour" +msgstr "" + +#: superset/db_engine_specs.py:929 +msgid "10 minute" +msgstr "" + +#: superset/utils.py:472 +#, python-format +msgid "[Superset] Access to the datasource %(name)s was granted" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:283 +#: superset/viz.py:312 +msgid "Table View" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:334 +#: superset/viz.py:368 +msgid "Pivot Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:321 +#: superset/viz.py:423 +msgid "Markup" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:348 +#: superset/viz.py:442 +msgid "Separator" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:369 +#: superset/viz.py:458 +msgid "Word Cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:383 +#: superset/viz.py:481 +msgid "Treemap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:403 +#: superset/viz.py:507 +msgid "Calendar Heatmap" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:418 +#: superset/viz.py:565 +msgid "Box Plot" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:437 +#: superset/viz.py:654 +msgid "Bubble Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:481 +#: superset/viz.py:704 +msgid "Bullet Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:497 +#: superset/viz.py:753 +msgid "Big Number with Trendline" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:516 +#: superset/viz.py:782 +msgid "Big Number" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:21 +#: superset/assets/javascripts/explore/stores/visTypes.js:127 +#: superset/viz.py:809 +msgid "Time Series - Line Chart" +msgstr "" + +#: superset/viz.py:936 +msgid "Time Series - Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:22 +#: superset/assets/javascripts/explore/stores/visTypes.js:197 +#: superset/viz.py:1011 +msgid "Time Series - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:230 +#: superset/viz.py:1019 +msgid "Time Series - Percent Change" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:251 +#: superset/viz.py:1027 +msgid "Time Series - Stacked" +msgstr "" + +#: superset/viz.py:1036 +msgid "Distribution - NVD3 - Pie Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:535 +#: superset/viz.py:1054 +msgid "Histogram" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:19 +#: superset/assets/javascripts/explore/stores/visTypes.js:81 +#: superset/viz.py:1079 +msgid "Distribution - Bar Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:565 +#: superset/viz.py:1146 +msgid "Sunburst" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:595 +#: superset/viz.py:1179 +msgid "Sankey" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:615 +#: superset/viz.py:1228 superset/viz.py:1249 +msgid "Directed Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:672 +#: superset/viz.py:1282 +msgid "Country Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:696 +#: superset/viz.py:1311 +msgid "World Map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:63 +#: superset/viz.py:1361 +msgid "Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:758 +#: superset/viz.py:1396 +msgid "iFrame" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:770 +#: superset/viz.py:1413 +msgid "Parallel Coordinates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:786 +#: superset/viz.py:1438 +msgid "Heatmap" +msgstr "" + +#: superset/viz.py:1489 +msgid "Horizon Charts" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:830 +#: superset/viz.py:1500 +msgid "Mapbox" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:900 +#: superset/viz.py:1603 +msgid "Event flow" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:55 +msgid "Your query was saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:56 +msgid "Your query could not be saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:109 +msgid "Failed at retrieving results from the results backend" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:155 +msgid "Could not connect to server" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:160 +msgid "Your session timed out, please refresh your page and try again." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:179 +msgid "Query was stopped." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:182 +msgid "Failed at stopping query." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:295 +#: superset/assets/javascripts/SqlLab/actions.js:308 +msgid "Error occurred while fetching table metadata" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:358 +msgid "shared query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:366 +#: superset/assets/javascripts/SqlLab/actions.js:386 +msgid "The query couldn't be loaded" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:419 +msgid "An error occurred while creating the data source" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:29 +msgid "Pick a chart type!" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:30 +msgid "To use this chart type you need at least one column flagged as a date" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:31 +msgid "To use this chart type you need at least one dimension" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:32 +msgid "To use this chart type you need at least one aggregation function" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:49 +#: superset/assets/javascripts/SqlLab/reducers.js:11 +msgid "Untitled Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/reducers.js:44 +#, python-format +msgid "Copy of %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:30 +msgid "share query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:33 +msgid "copy URL to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:56 +msgid "Raw SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:66 +msgid "Source SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:78 +#: superset/assets/javascripts/explore/stores/visTypes.js:31 +msgid "SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryHistory.jsx:28 +msgid "No query history yet..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:106 +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:66 +msgid "It seems you don't have access to any database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:154 +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:90 +msgid "Search Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:160 +msgid "[From]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:171 +msgid "[To]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:181 +msgid "[Query Status]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:190 +msgid "Search" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:114 +msgid "Open in SQL Editor" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:133 +msgid "view results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:136 +msgid "Data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:176 +msgid "Visualize the data out of this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:182 +msgid "Overwrite text in editor with a query on this table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:188 +msgid "Run query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:193 +msgid "Remove query from log" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:68 +msgid ".CSV" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:79 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:235 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:274 +msgid "Visualize" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:151 +msgid "Query was stopped" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +#: superset/connectors/sqla/views.py:86 superset/connectors/sqla/views.py:135 +#: superset/connectors/sqla/views.py:213 superset/views/core.py:375 +msgid "Table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +msgid "was created" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:201 +msgid "Query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:240 +msgid "Fetch data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:244 +msgid "The query returned no data" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Selected Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:22 +msgid "Run query asynchronously" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:56 +msgid "Stop" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:16 +msgid "Undefined" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:66 +msgid "Label" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:71 +msgid "Label for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:81 +#: superset/connectors/druid/views.py:107 +#: superset/connectors/druid/views.py:229 superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:131 superset/views/core.py:369 +msgid "Description" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:85 +msgid "Write a description for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:99 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:139 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 +msgid "Save" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:102 +#: superset/templates/superset/request_access.html:16 +msgid "Cancel" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:123 +msgid "Save Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:80 +msgid "Run a query to display results here" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:85 +#, python-format +msgid "Preview for %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:109 +msgid "Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:115 +msgid "Query History" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:112 +#, python-format +msgid "" +"It appears that the number of rows in the query results displayed was " +"limited on the server side to the %s limit." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:123 +msgid "Create table as with query results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:131 +msgid "new table name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:90 +msgid "Error while fetching table list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:131 +msgid "Error while fetching schema list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:153 +msgid "Error while fetching database list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:159 +msgid "Database:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:163 +msgid "Select a database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:170 +#, python-format +msgid "Select a schema (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:175 +msgid "Schema:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:190 +#, python-format +msgid "Add a table (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:203 +msgid "Type to search ..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:226 +msgid "Reset State" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:105 +msgid "Enter a new title for the tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:124 +#, python-format +msgid "Untitled Query %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:170 +msgid "close tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:173 +msgid "rename tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "expand tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "hide tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:75 +msgid "Copy partition query to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:94 +msgid "latest partition:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:110 +msgid "Keys for table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:119 +#, python-format +msgid "View keys & indexes (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:135 +msgid "Sort columns alphabetically" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:136 +msgid "Original table column order" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:146 +msgid "Copy SELECT statement to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:152 +msgid "Remove table preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:20 +#: superset/assets/javascripts/explore/stores/visTypes.js:111 +msgid "Pie Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:85 +#, python-format +msgid "%s is not right as a column name, please alias it (as in SELECT count(*) " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "AS my_alias" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "using only alphanumeric characters and underscores" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:136 +#, python-format +msgid "This query took %s seconds to run," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:137 +#, python-format +msgid "and the explore view times out at %s seconds," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:138 +msgid "" +"following this flow will most likely lead to your query timing out.We " +"recommend your summarize your data further before following that flow.If " +"activated you can use the " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:140 +msgid "featureto store a summarized data set that you can then explore." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:160 +msgid "Creating a data source and popping a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:190 +msgid "No results available for this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:242 +msgid "Chart Type" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:245 +msgid "[Chart Type]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:253 +msgid "Datasource Name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:257 +msgid "datasource name" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:54 +msgid "Create a new slice" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:59 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:65 +msgid "Choose a datasource" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:71 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:77 +msgid "Choose a visualization type" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:87 +msgid "Create new slice" +msgstr "" + +#: superset/assets/javascripts/components/AsyncSelect.jsx:20 +msgid "Select ..." +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:26 +msgid "Loaded data cached" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:28 +msgid "Loaded from cache" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:33 +msgid "Click to force-refresh" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:21 +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:67 +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:37 +msgid "Copy to clipboard" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:65 +msgid "Not successful" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:68 +msgid "Sorry, your browser does not support copying. Use Ctrl / Cmd + C!" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:79 +msgid "Copied!" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:12 +#: superset/views/core.py:470 superset/views/core.py:537 +msgid "Title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "click to edit title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "You don't have the rights to alter this title." +msgstr "" + +#: superset/assets/javascripts/components/FaveStar.jsx:32 +#: superset/assets/javascripts/modules/superset.js:33 +msgid "Click to favorite/unfavorite" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:36 +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "You have unsaved changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "Click the" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:55 +msgid "button on the top right to save your changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:158 +#, python-format +msgid "Served from data cached %s . Click to force refresh." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:163 +msgid "Click to force refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:337 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:93 +msgid "Error" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:338 +#, python-format +msgid "Sorry, there was an error adding slices to this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CodeModal.jsx:35 +msgid "Active Dashboard Filters" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:48 +#, python-format +msgid "Checkout this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:54 +msgid "Force refresh the whole dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:94 +msgid "Edit this dashboard's properties" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:65 +msgid "Load a template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:68 +msgid "Load a CSS template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:80 +#: superset/views/core.py:477 +msgid "CSS" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:86 +msgid "Live CSS Editor" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:19 +msgid "Don't refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:20 +msgid "10 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:21 +msgid "30 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:22 +msgid "1 minute" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:23 +msgid "5 minutes" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:38 +msgid "Refresh Interval" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:41 +msgid "Choose the refresh frequency for this dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:58 +msgid "This dashboard was saved successfully." +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:64 +msgid "Sorry, there was an error saving this dashboard: " +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:94 +msgid "You must pick a name for the new dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:108 +msgid "Save Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:116 +#, python-format +msgid "Overwrite Dashboard [%s]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:123 +msgid "Save as:" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:127 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 +msgid "[dashboard name]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:137 +#: superset/views/core.py:374 +msgid "Name" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:143 +msgid "Viz" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:152 +#: superset/views/core.py:475 superset/views/core.py:539 +msgid "Modified" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:162 +msgid "Add Slices" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:171 +msgid "Add a new slice to the dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:175 +msgid "Add Slices to Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:23 +msgid "Move chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:26 +msgid "Force refresh data" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:30 +msgid "Toggle chart description" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:40 +msgid "Edit chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:45 +msgid "Explore chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:50 +msgid "Remove chart from dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:170 +#, python-format +msgid "%s - untitled" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:276 +msgid "Edit slice properties" +msgstr "" + +#: superset/assets/javascripts/explore/components/ControlHeader.jsx:60 +msgid "Takes effect on chart immediatly" +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:56 +msgid "Error..." +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:92 +msgid "Query" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:76 +msgid "Height" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:90 +msgid "Width" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:32 +msgid "Export to .json" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:42 +msgid "Export to .csv format" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 +msgid "Please enter a slice name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 +msgid "Please select a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 +msgid "Please enter a dashboard name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 +msgid "Save A Slice" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 +#, python-format +msgid "Overwrite slice %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 +msgid "Save as" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 +msgid "[slice name]" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 +msgid "Do not add to a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 +msgid "Add slice to existing dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 +msgid "Add to new dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 +msgid "Save & go to dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:32 +#, python-format +msgid "Check out this slice: %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:55 +msgid "`Min` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:58 +msgid "`Max` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:75 +#: superset/connectors/druid/views.py:50 superset/connectors/sqla/views.py:89 +msgid "Min" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:83 +#: superset/connectors/druid/views.py:51 superset/connectors/sqla/views.py:90 +msgid "Max" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:118 +msgid "Filter value" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select metric" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select column" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:159 +msgid "Select operator" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/FilterControl.jsx:70 +msgid "Add Filter" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/SelectControl.jsx:106 +#, python-format +msgid "Select %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:62 +msgid "textarea" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "Edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "in modal" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:90 +#: superset/assets/javascripts/explore/stores/controls.jsx:46 +msgid "edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:104 +msgid "Select a visualization type" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:114 +msgid "Search / Filter" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:61 +#, python-format +msgid "fetching dashboards failed for %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:100 +msgid "Updating chart was stopped" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:106 +#: superset/assets/javascripts/modules/superset.js:220 +#, python-format +msgid "An error occurred while rendering the visualization: %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:117 +msgid "Query timeout" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:118 +#, python-format +msgid "- visualization query are set to timeout at %s seconds. " +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:119 +msgid "" +"Perhaps your data has grown, your database is under unusual load, or you " +"are simply querying a data source that is to large to be processed within" +" the timeout range. If that is the case, we recommend that you summarize " +"your data further." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:127 +msgid "Network error." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:150 +msgid "Failed to save slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:35 +#: superset/connectors/druid/views.py:45 superset/views/core.py:313 +#: superset/views/core.py:368 +msgid "Datasource" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:55 +#: superset/views/core.py:376 +msgid "Visualization Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:57 +msgid "The type of visualization to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:63 +msgid "Metrics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:72 +#: superset/assets/javascripts/explore/stores/controls.jsx:90 +msgid "One or many metrics to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:79 +msgid "" +"Bounds for the Y axis. When left empty, the bounds are dynamically " +"defined based on the min/max of the data. Note that this feature will " +"only expand the axis range. It won't narrow the data's extent." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:88 +msgid "Ordering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:100 +msgid "Choose the metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:113 +msgid "Right Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:117 +msgid "Choose a metric for right axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:128 +msgid "Stacked Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:140 +msgid "Linear Color Scheme" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:153 +msgid "Normalize Across" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:160 +msgid "" +"Color will be rendered based on a ratio of the cell against the sum of " +"across this criteria" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:167 +msgid "Horizon Color Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:174 +msgid "Defines how the color are attributed." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:179 +msgid "Rendering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:185 +msgid "" +"image-rendering CSS attribute of the canvas object that defines how the " +"browser scales up the image" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:191 +msgid "XScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:194 +msgid "Number of steps to take between ticks when displaying the X scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:200 +msgid "YScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:203 +msgid "Number of steps to take between ticks when displaying the Y scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:209 +msgid "Include Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:210 +msgid "Whether to include the time granularity as defined in the time section" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:216 +msgid "Stacked Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:232 +msgid "Show Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:235 +msgid "Show data points as circle markers on the lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:240 +msgid "Bar Values" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:248 +msgid "Sort Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:250 +msgid "Sort bars by x labels." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:263 +msgid "Extra Controls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:266 +msgid "" +"Whether to show extra controls or not. Extra controls include things like" +" making mulitBar charts stacked or side by side." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:273 +msgid "Reduce X ticks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:276 +msgid "" +"Reduces the number of X axis ticks to be rendered. If true, the x axis " +"wont overflow and labels may be missing. If false, a minimum width will " +"be applied to columns and the width may overflow into an horizontal " +"scroll." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:285 +msgid "Include Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:288 +msgid "Include series name as an axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:293 +msgid "Color Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:295 +msgid "A metric to use for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:302 +msgid "Country Name" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:321 +msgid "The name of country that Superset should display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:325 +msgid "Country Field Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:333 +msgid "" +"The country code standard that Superset should expect to find in the " +"[country] column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:340 +msgid "Group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:342 +msgid "One or many controls to group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:354 +#: superset/assets/javascripts/explore/stores/controls.jsx:368 +msgid "Columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:370 +#: superset/assets/javascripts/explore/stores/controls.jsx:380 +#: superset/assets/javascripts/explore/stores/controls.jsx:390 +msgid "Columns to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:378 +msgid "X" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:388 +msgid "Y" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:399 +msgid "Origin" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:405 +msgid "" +"Defines the origin where time buckets start, accepts natural dates as in " +"`now`, `sunday` or `1970-01-01`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:415 +msgid "Bottom marging, in pixels, allowing for more room for axis labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:421 +msgid "Time Granularity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:438 +msgid "" +"The time granularity for the visualization. Note that you can type and " +"use simple natural language as in `10 seconds`, `1 day` or `56 weeks`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:445 +msgid "Domain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:448 +msgid "The time unit used for the grouping of blocks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:453 +msgid "Subdomain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:456 +msgid "" +"The time unit for each block. Should be a smaller unit than " +"domain_granularity. Should be larger or equal to Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:463 +msgid "Link Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:466 +msgid "Link length in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:472 +msgid "Charge" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:486 +msgid "Charge in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:494 +msgid "" +"The time column for the visualization. Note that you can define arbitrary" +" expression that return a DATETIME column in the table or. Also note that" +" the filter below is applied against this column or expression" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:506 +msgid "Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:508 +msgid "" +"The time granularity for the visualization. This applies a date " +"transformation to alter your time column and defines a new time " +"granularity. The options here are defined on a per database engine basis " +"in the Superset source code." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:521 +msgid "Resample Rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:524 +msgid "Pandas resample rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:530 +msgid "Resample How" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:533 +msgid "Pandas resample how" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:539 +msgid "Resample Fill Method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:542 +msgid "Pandas resample fill method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:548 +msgid "Since" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:560 +msgid "" +"Timestamp from filter. This supports free form typing and natural " +"language as in `1 day ago`, `28 days` or `3 years`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:567 +msgid "Until" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:582 +msgid "Max Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:590 +msgid "Whisker/outlier options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:592 +msgid "Determines how whiskers and outliers are calculated." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:603 +msgid "Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:606 +msgid "Target aspect ratio for treemap tiles." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:612 +#: superset/assets/javascripts/explore/stores/visTypes.js:510 +#: superset/assets/javascripts/explore/stores/visTypes.js:529 +#: superset/assets/javascripts/explore/stores/visTypes.js:654 +msgid "Number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:622 +msgid "Row limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:630 +msgid "Series limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:633 +msgid "Limits the number of time series that get displayed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:638 +msgid "Sort By" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:640 +msgid "Metric used to define the top series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:648 +msgid "Rolling" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:651 +msgid "" +"Defines a rolling window function to apply, works along with the " +"[Periods] text box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:657 +msgid "Periods" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:659 +msgid "" +"Defines the size of the rolling window function, relative to the time " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:665 +#: superset/assets/javascripts/explore/stores/visTypes.js:101 +msgid "Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:667 +msgid "" +"Defines the grouping of entities. Each series is shown as a specific " +"color on the chart and has a legend toggle" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:677 +msgid "Entity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:680 +msgid "This defines the element to be plotted on the chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:688 +#: superset/assets/javascripts/explore/stores/visTypes.js:459 +msgid "X Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:689 +msgid "Metric assigned to the [X] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:702 +#: superset/assets/javascripts/explore/stores/visTypes.js:466 +msgid "Y Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:705 +msgid "Metric assigned to the [Y] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:716 +msgid "Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:729 +msgid "URL" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:730 +msgid "" +"The URL, this control is templated, so you can integrate {{ width }} " +"and/or {{ height }} in your URL string." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:737 +msgid "X Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:744 +msgid "Y Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:751 +msgid "Custom WHERE clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:753 +msgid "" +"The text in this box gets included in your query's WHERE clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:761 +msgid "Custom HAVING clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:763 +msgid "" +"The text in this box gets included in your query's HAVING clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:771 +msgid "Comparison Period Lag" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:773 +msgid "Based on granularity, number of time periods to compare against" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:778 +msgid "Comparison suffix" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:779 +msgid "Suffix to apply after the percentage display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:785 +msgid "Table Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:790 +msgid "Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:796 +msgid "Series Height" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:799 +msgid "Pixel height of each series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:805 +msgid "Page Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:808 +msgid "Rows per page, 0 means no pagination" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:814 +#: superset/assets/javascripts/explore/stores/controls.jsx:824 +msgid "X Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:834 +msgid "Y Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:844 +msgid "Right Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:852 +msgid "Markup Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:857 +msgid "Pick your favorite markup language" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:862 +msgid "Rotation" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:865 +msgid "Rotation to apply to words in the cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:870 +msgid "Line Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:875 +msgid "Line interpolation as defined by d3.js" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:880 +msgid "Label Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:887 +msgid "What should be shown on the label?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:892 +msgid "Code" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:893 +msgid "Put your code here" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:902 +msgid "Aggregation function" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:914 +msgid "" +"Aggregate function to apply when pivoting and computing the total rows " +"and columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:921 +msgid "Font Size From" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:923 +msgid "Font size for the smallest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:929 +msgid "Font Size To" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:931 +msgid "Font size for the biggest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:936 +msgid "Instant Filtering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:940 +msgid "" +"Whether to apply filters as they change, or wait forusers to hit an " +"[Apply] button" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:947 +msgid "Range Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:950 +msgid "Whether to display the time range interactive selector" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:955 +msgid "Date Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:957 +msgid "Whether to include a time filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:962 +msgid "Data Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:964 +msgid "Whether to display the interactive data table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:969 +msgid "Search Box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:972 +msgid "Whether to include a client side search box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:977 +msgid "Table Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:979 +msgid "Whether to apply filter when table cell is clicked" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:984 +msgid "Show Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:987 +msgid "Whether to display bubbles on top of countries" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:992 +msgid "Legend" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:995 +msgid "Whether to display the legend (toggles)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1000 +msgid "X bounds" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1003 +msgid "Whether to display the min and max values of the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1008 +msgid "Rich Tooltip" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1011 +msgid "The rich tooltip shows a list of all series for that point in time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1017 +msgid "Y Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1020 +msgid "Use a log scale for the Y axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1025 +msgid "X Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1028 +msgid "Use a log scale for the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1033 +msgid "Donut" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1036 +msgid "Do you want a donut or a pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1041 +msgid "Put labels outside" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1044 +msgid "Put the labels outside the pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1049 +msgid "Contribution" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1051 +msgid "Compute the contribution to the total" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1056 +msgid "Period Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1059 +msgid "" +"[integer] Number of period to compare against, this is relative to the " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1065 +msgid "Period Ratio Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1068 +msgid "" +"`factor` means (new/previous), `growth` is ((new/previous) - 1), `value` " +"is (new-previous)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1074 +msgid "Time Shift" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1076 +msgid "" +"Overlay a timeseries from a relative time period. Expects relative time " +"delta in natural language (example: 24 hours, 7 days, 56 weeks, 365 " +"days)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1084 +msgid "Subheader" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1085 +msgid "Description text that shows up below your Big Number" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1091 +msgid "label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1093 +msgid "" +"`count` is COUNT(*) if a group by is used. Numerical columns will be " +"aggregated with the aggregator. Non-numerical columns will be used to " +"label points. Leave empty to get a count of points in each cluster." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1104 +msgid "Map Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1114 +msgid "Base layer map style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1120 +msgid "Clustering Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1133 +msgid "" +"The radius (in pixels) the algorithm uses to define a cluster. Choose 0 " +"to turn off clustering, but beware that a large number of points (>1000) " +"will cause lag." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1140 +msgid "Point Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1142 +msgid "" +"The radius of individual points (ones that are not in a cluster). Either " +"a numerical column or `Auto`, which scales the point based on the largest" +" cluster" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1152 +msgid "Point Radius Unit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1155 +msgid "The unit of measure for the specified point radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1160 +msgid "Opacity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1163 +msgid "Opacity of all clusters, points, and labels. Between 0 and 1." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1169 +msgid "Zoom" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1172 +msgid "Zoom level of the map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1178 +msgid "Default latitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1181 +msgid "Latitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1187 +msgid "Default longitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1190 +msgid "Longitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1196 +msgid "Live render" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1198 +msgid "Points and clusters will update as viewport is being changed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1204 +msgid "RGB Color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1214 +msgid "The color for points and clusters in RGB" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1219 +msgid "Ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1221 +msgid "Ranges to highlight with shading" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1226 +msgid "Range labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1228 +msgid "Labels for the ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1233 +msgid "Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1235 +msgid "List of values to mark with triangles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1240 +msgid "Marker labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1242 +msgid "Labels for the markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1247 +msgid "Marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1249 +msgid "List of values to mark with lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1254 +msgid "Marker line labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1256 +msgid "Labels for the marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1283 +msgid "Slice ID" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1285 +msgid "The id of the active slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1290 +msgid "Cache Timeout (seconds)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1292 +msgid "The number of seconds before expiring the cache" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1297 +msgid "Order by entity id" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1298 +msgid "" +"Important! Select this if the table is not already sorted by entity id, " +"else there is no guarantee that all events for each entity are returned." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1306 +msgid "Minimum leaf node event count" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1309 +msgid "" +"Leaf nodes that represent fewer than this number of events will be " +"initially hidden in the visualization" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:7 +#: superset/assets/javascripts/explore/stores/visTypes.js:23 +msgid "Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:8 +#: superset/assets/javascripts/explore/stores/visTypes.js:24 +msgid "Time related form attributes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:15 +msgid "Datasource & Chart Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:36 +msgid "This section exposes ways to include snippets of SQL in your query" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:48 +msgid "Advanced Analytics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:49 +msgid "" +"This section contains options that allow for advanced analytical post " +"processing of query results" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:64 +msgid "" +"Filters are defined using comma delimited strings as in " +"Leave the value control empty to filter empty strings or " +"nullsFor filters with comma in values, wrap them in single quotesas in " +"" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:71 +msgid "Result Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:72 +msgid "" +"The filters to apply after post-aggregation.Leave the value control empty" +" to filter empty strings or nulls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:84 +#: superset/assets/javascripts/explore/stores/visTypes.js:132 +#: superset/assets/javascripts/explore/stores/visTypes.js:163 +#: superset/assets/javascripts/explore/stores/visTypes.js:202 +#: superset/assets/javascripts/explore/stores/visTypes.js:235 +#: superset/assets/javascripts/explore/stores/visTypes.js:256 +#: superset/assets/javascripts/explore/stores/visTypes.js:393 +#: superset/assets/javascripts/explore/stores/visTypes.js:428 +#: superset/assets/javascripts/explore/stores/visTypes.js:447 +#: superset/assets/javascripts/explore/stores/visTypes.js:821 +msgid "Chart Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:104 +msgid "Breakdowns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:105 +msgid "Defines how each series is broken down" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:141 +#: superset/assets/javascripts/explore/stores/visTypes.js:211 +#: superset/assets/javascripts/explore/stores/visTypes.js:265 +msgid "Axes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:159 +msgid "Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:169 +msgid "Y Axis 1" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:175 +msgid "Y Axis 2" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:183 +msgid "Left Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:184 +msgid "Choose a metric for left axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:187 +msgid "Left Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:286 +msgid "GROUP BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:287 +msgid "Use this section if you want a query that aggregates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:294 +msgid "NOT GROUPED BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:295 +msgid "Use this section if you want to query atomic rows" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:302 +msgid "Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:453 +#: superset/assets/javascripts/explore/stores/visTypes.js:707 +msgid "Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:545 +msgid "Histogram Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:553 +msgid "Numeric Column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:554 +msgid "Select the numeric column to draw the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:557 +msgid "No of Bins" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:558 +msgid "Select number of bins for the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:578 +msgid "Primary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:579 +msgid "The primary metric is used to define the arc segment sizes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:582 +msgid "Secondary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:583 +msgid "" +"This secondary metric is used to define the color as a ratio against the " +"primary metric. If the two metrics match, color is mapped level groups" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:588 +msgid "Hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:589 +msgid "This defines the level of the hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:608 +#: superset/assets/javascripts/explore/stores/visTypes.js:635 +msgid "Source / Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:609 +#: superset/assets/javascripts/explore/stores/visTypes.js:636 +msgid "Choose a source and a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:626 +msgid "Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:641 +msgid "Chord Diagram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:655 +msgid "Choose a number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:658 +msgid "Source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:661 +msgid "Choose a source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:664 +msgid "Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:667 +msgid "Choose a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:686 +msgid "ISO 3166-1 codes of region/province/department" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:687 +msgid "" +"It's ISO 3166-1 of your region/province/department in your table. (see " +"documentation for list of ISO 3166-1)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:690 +#: superset/connectors/druid/views.py:106 superset/connectors/sqla/views.py:130 +msgid "Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:691 +msgid "Metric to display bottom title" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:717 +msgid "Country Control" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:718 +msgid "3 letter code of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:721 +msgid "Metric for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:722 +msgid "Metric that defines the color of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:725 +msgid "Bubble size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:726 +msgid "Metric that defines the size of the bubble" msgstr "" -#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:238 -#: superset/db_engine_specs.py:270 superset/db_engine_specs.py:325 -#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:781 -#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:845 -#: superset/db_engine_specs.py:893 -msgid "day" +#: superset/assets/javascripts/explore/stores/visTypes.js:732 +msgid "Filter Box" msgstr "" -#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:244 -#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 -#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:783 -#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 -msgid "week" +#: superset/assets/javascripts/explore/stores/visTypes.js:745 +msgid "Filter controls" msgstr "" -#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:246 -#: superset/db_engine_specs.py:273 superset/db_engine_specs.py:328 -#: superset/db_engine_specs.py:373 superset/db_engine_specs.py:785 -#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:849 -#: superset/db_engine_specs.py:895 -msgid "month" +#: superset/assets/javascripts/explore/stores/visTypes.js:747 +msgid "" +"The controls you want to filter on. Note that only columns checked as " +"\"filterable\" will show up on this list." msgstr "" -#: superset/db_engine_specs.py:201 superset/db_engine_specs.py:248 -#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:375 -#: superset/db_engine_specs.py:787 superset/db_engine_specs.py:817 -#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:897 -msgid "quarter" +#: superset/assets/javascripts/explore/stores/visTypes.js:789 +msgid "Axis & Metrics" msgstr "" -#: superset/db_engine_specs.py:202 superset/db_engine_specs.py:252 -#: superset/db_engine_specs.py:332 superset/db_engine_specs.py:789 -#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:899 -msgid "year" +#: superset/assets/javascripts/explore/stores/visTypes.js:797 +msgid "Heatmap Options" msgstr "" -#: superset/db_engine_specs.py:334 -msgid "week_start_monday" +#: superset/assets/javascripts/explore/stores/visTypes.js:817 +msgid "Horizon" msgstr "" -#: superset/db_engine_specs.py:377 superset/db_engine_specs.py:853 -msgid "week_ending_saturday" +#: superset/assets/javascripts/explore/stores/visTypes.js:843 +msgid "Points" msgstr "" -#: superset/db_engine_specs.py:380 superset/db_engine_specs.py:856 -msgid "week_start_sunday" +#: superset/assets/javascripts/explore/stores/visTypes.js:850 +msgid "Labelling" msgstr "" -#: superset/db_engine_specs.py:775 superset/db_engine_specs.py:887 -msgid "5 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:857 +msgid "Visual Tweaks" msgstr "" -#: superset/db_engine_specs.py:777 -msgid "half hour" +#: superset/assets/javascripts/explore/stores/visTypes.js:865 +msgid "Viewport" msgstr "" -#: superset/db_engine_specs.py:889 -msgid "10 minute" +#: superset/assets/javascripts/explore/stores/visTypes.js:875 +msgid "Longitude" msgstr "" -#: superset/utils.py:472 -#, python-format -msgid "[Superset] Access to the datasource %(name)s was granted" +#: superset/assets/javascripts/explore/stores/visTypes.js:876 +msgid "Column containing longitude data" msgstr "" -#: superset/viz.py:311 -msgid "Table View" +#: superset/assets/javascripts/explore/stores/visTypes.js:879 +msgid "Latitude" msgstr "" -#: superset/viz.py:364 -msgid "Pivot Table" +#: superset/assets/javascripts/explore/stores/visTypes.js:880 +msgid "Column containing latitude data" msgstr "" -#: superset/viz.py:413 -msgid "Markup" +#: superset/assets/javascripts/explore/stores/visTypes.js:883 +msgid "Cluster label aggregator" msgstr "" -#: superset/viz.py:432 -msgid "Separator" +#: superset/assets/javascripts/explore/stores/visTypes.js:884 +msgid "" +"Aggregate function applied to the list of points in each cluster to " +"produce the cluster label." msgstr "" -#: superset/viz.py:448 -msgid "Word Cloud" +#: superset/assets/javascripts/explore/stores/visTypes.js:888 +msgid "Tooltip" msgstr "" -#: superset/viz.py:471 -msgid "Treemap" +#: superset/assets/javascripts/explore/stores/visTypes.js:889 +msgid "Show a tooltip when hovering over points and clusters describing the label" msgstr "" -#: superset/viz.py:497 -msgid "Calendar Heatmap" +#: superset/assets/javascripts/explore/stores/visTypes.js:893 +msgid "" +"One or many controls to group by. If grouping, latitude and longitude " +"columns must be present." msgstr "" -#: superset/viz.py:555 -msgid "Box Plot" +#: superset/assets/javascripts/explore/stores/visTypes.js:904 +msgid "Event definition" msgstr "" -#: superset/viz.py:644 -msgid "Bubble Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:914 +msgid "Additional meta data" msgstr "" -#: superset/viz.py:693 -msgid "Bullet Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:922 +msgid "Column containing entity ids" msgstr "" -#: superset/viz.py:742 -msgid "Big Number with Trendline" +#: superset/assets/javascripts/explore/stores/visTypes.js:923 +msgid "e.g., a \"user id\" column" msgstr "" -#: superset/viz.py:771 -msgid "Big Number" +#: superset/assets/javascripts/explore/stores/visTypes.js:926 +msgid "Column containing event names" msgstr "" -#: superset/viz.py:798 -msgid "Time Series - Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:934 +msgid "Event count limit" msgstr "" -#: superset/viz.py:925 -msgid "Time Series - Dual Axis Line Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:935 +msgid "The maximum number of events to return, equivalent to number of rows" msgstr "" -#: superset/viz.py:1000 -msgid "Time Series - Bar Chart" +#: superset/assets/javascripts/explore/stores/visTypes.js:938 +msgid "Meta data" msgstr "" -#: superset/viz.py:1008 -msgid "Time Series - Percent Change" +#: superset/assets/javascripts/explore/stores/visTypes.js:939 +msgid "Select any columns for meta data inspection" msgstr "" -#: superset/viz.py:1016 -msgid "Time Series - Stacked" +#: superset/assets/javascripts/modules/superset.js:134 +msgid "" +"The server could not be reached. You may want to verify your connection " +"and try again." msgstr "" -#: superset/viz.py:1025 -msgid "Distribution - NVD3 - Pie Chart" +#: superset/assets/javascripts/modules/superset.js:137 +#, python-format +msgid "An unknown error occurred. (Status: %s )" msgstr "" -#: superset/viz.py:1043 -msgid "Histogram" +#: superset/assets/javascripts/modules/superset.js:162 +#, python-format +msgid "Query timeout - visualization query are set to time out at %s seconds." msgstr "" -#: superset/viz.py:1068 -msgid "Distribution - Bar Chart" +#: superset/assets/javascripts/profile/components/App.jsx:24 +msgid "Favorites" msgstr "" -#: superset/viz.py:1135 -msgid "Sunburst" +#: superset/assets/javascripts/profile/components/App.jsx:30 +msgid "Created Content" msgstr "" -#: superset/viz.py:1168 -msgid "Sankey" +#: superset/assets/javascripts/profile/components/App.jsx:37 +msgid "Recent Activity" msgstr "" -#: superset/viz.py:1217 -msgid "Directed Force Layout" +#: superset/assets/javascripts/profile/components/App.jsx:42 +msgid "Security & Access" msgstr "" -#: superset/viz.py:1238 -msgid "Country Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:33 +msgid "No slices" msgstr "" -#: superset/viz.py:1267 -msgid "World Map" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:49 +msgid "No dashboards" msgstr "" -#: superset/viz.py:1317 -msgid "Filters" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:58 +#: superset/assets/javascripts/profile/components/Favorites.jsx:59 +#: superset/templates/superset/welcome.html:20 superset/views/core.py:367 +#: superset/views/core.py:527 +msgid "Dashboards" msgstr "" -#: superset/viz.py:1352 -msgid "iFrame" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:61 +#: superset/assets/javascripts/profile/components/Favorites.jsx:62 +#: superset/views/core.py:403 superset/views/core.py:472 +msgid "Slices" msgstr "" -#: superset/viz.py:1369 -msgid "Parallel Coordinates" +#: superset/assets/javascripts/profile/components/Favorites.jsx:34 +msgid "No favorite slices yet, go click on stars!" msgstr "" -#: superset/viz.py:1394 -msgid "Heatmap" +#: superset/assets/javascripts/profile/components/Favorites.jsx:50 +msgid "No favorite dashboards yet, go click on stars!" msgstr "" -#: superset/viz.py:1445 -msgid "Horizon Charts" +#: superset/assets/javascripts/profile/components/Security.jsx:14 +msgid "Roles" msgstr "" -#: superset/viz.py:1456 -msgid "Mapbox" +#: superset/assets/javascripts/profile/components/Security.jsx:23 +#: superset/views/core.py:279 +msgid "Databases" +msgstr "" + +#: superset/assets/javascripts/profile/components/Security.jsx:34 +msgid "Datasources" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:18 +msgid "Profile picture provided by Gravatar" +msgstr "" + +#: superset/assets/javascripts/profile/components/UserInfo.jsx:33 +msgid "joined" msgstr "" -#: superset/connectors/druid/models.py:950 +#: superset/assets/javascripts/profile/components/UserInfo.jsx:43 +msgid "id:" +msgstr "" + +#: superset/assets/visualizations/EventFlow.jsx:56 +msgid "Sorry, there appears to be no data" +msgstr "" + +#: superset/assets/visualizations/filter_box.jsx:88 +#, python-format +msgid "Select [%s]" +msgstr "" + +#: superset/connectors/druid/models.py:970 msgid "No data was returned." msgstr "" -#: superset/connectors/druid/views.py:36 superset/connectors/sqla/views.py:73 -msgid "Column" +#: superset/connectors/druid/views.py:28 +msgid "List Druid Column" msgstr "" -#: superset/connectors/druid/views.py:37 superset/connectors/druid/views.py:96 -#: superset/connectors/sqla/views.py:119 -msgid "Type" +#: superset/connectors/druid/views.py:29 +msgid "Show Druid Column" msgstr "" -#: superset/connectors/druid/views.py:38 superset/views/core.py:305 -#: superset/views/core.py:354 -msgid "Datasource" +#: superset/connectors/druid/views.py:30 +msgid "Add Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:31 +msgid "Edit Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 +msgid "Column" +msgstr "" + +#: superset/connectors/druid/views.py:44 superset/connectors/druid/views.py:109 +#: superset/connectors/sqla/views.py:133 +msgid "Type" msgstr "" -#: superset/connectors/druid/views.py:39 superset/connectors/sqla/views.py:76 +#: superset/connectors/druid/views.py:46 superset/connectors/sqla/views.py:84 msgid "Groupable" msgstr "" -#: superset/connectors/druid/views.py:40 superset/connectors/sqla/views.py:77 +#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:85 msgid "Filterable" msgstr "" -#: superset/connectors/druid/views.py:41 superset/connectors/sqla/views.py:79 +#: superset/connectors/druid/views.py:48 superset/connectors/sqla/views.py:87 msgid "Count Distinct" msgstr "" -#: superset/connectors/druid/views.py:42 superset/connectors/sqla/views.py:80 +#: superset/connectors/druid/views.py:49 superset/connectors/sqla/views.py:88 msgid "Sum" msgstr "" -#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 -msgid "Min" +#: superset/connectors/druid/views.py:54 superset/connectors/sqla/views.py:50 +msgid "" +"Whether this column is exposed in the `Filters` section of the explore " +"view." msgstr "" -#: superset/connectors/druid/views.py:44 superset/connectors/sqla/views.py:82 -msgid "Max" +#: superset/connectors/druid/views.py:80 +msgid "List Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:42 -msgid "" -"Whether this column is exposed in the `Filters` section of the explore " -"view." +#: superset/connectors/druid/views.py:81 +msgid "Show Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:82 +msgid "Add Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:83 +msgid "Edit Druid Metric" msgstr "" -#: superset/connectors/druid/views.py:87 superset/connectors/sqla/views.py:101 +#: superset/connectors/druid/views.py:100 superset/connectors/sqla/views.py:115 msgid "" "Whether the access to this metric is restricted to certain roles. Only " "roles with the permission 'metric access on XXX (the name of this " "metric)' are allowed to access this metric" msgstr "" -#: superset/connectors/druid/views.py:93 superset/connectors/sqla/views.py:116 -msgid "Metric" +#: superset/connectors/druid/views.py:108 superset/connectors/sqla/views.py:82 +#: superset/connectors/sqla/views.py:132 +msgid "Verbose Name" msgstr "" -#: superset/connectors/druid/views.py:94 superset/connectors/druid/views.py:204 -#: superset/connectors/sqla/views.py:75 superset/connectors/sqla/views.py:117 -#: superset/views/core.py:355 -msgid "Description" +#: superset/connectors/druid/views.py:110 superset/views/core.py:554 +msgid "JSON" msgstr "" -#: superset/connectors/druid/views.py:95 superset/connectors/sqla/views.py:74 -#: superset/connectors/sqla/views.py:118 -msgid "Verbose Name" +#: superset/connectors/druid/views.py:111 +msgid "Druid Datasource" msgstr "" -#: superset/connectors/druid/views.py:97 superset/views/core.py:534 -msgid "JSON" +#: superset/connectors/druid/views.py:128 +msgid "List Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:98 -msgid "Druid Datasource" +#: superset/connectors/druid/views.py:129 +msgid "Show Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:130 +msgid "Add Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:131 +msgid "Edit Druid Cluster" msgstr "" -#: superset/connectors/druid/views.py:123 -#: superset/connectors/druid/views.py:203 +#: superset/connectors/druid/views.py:142 +#: superset/connectors/druid/views.py:228 msgid "Cluster" msgstr "" -#: superset/connectors/druid/views.py:124 +#: superset/connectors/druid/views.py:143 msgid "Coordinator Host" msgstr "" -#: superset/connectors/druid/views.py:125 +#: superset/connectors/druid/views.py:144 msgid "Coordinator Port" msgstr "" -#: superset/connectors/druid/views.py:126 +#: superset/connectors/druid/views.py:145 msgid "Coordinator Endpoint" msgstr "" -#: superset/connectors/druid/views.py:127 +#: superset/connectors/druid/views.py:146 msgid "Broker Host" msgstr "" -#: superset/connectors/druid/views.py:128 +#: superset/connectors/druid/views.py:147 msgid "Broker Port" msgstr "" -#: superset/connectors/druid/views.py:129 +#: superset/connectors/druid/views.py:148 msgid "Broker Endpoint" msgstr "" -#: superset/connectors/druid/views.py:144 +#: superset/connectors/druid/views.py:163 msgid "Druid Clusters" msgstr "" -#: superset/connectors/druid/views.py:147 -#: superset/connectors/druid/views.py:243 -#: superset/connectors/druid/views.py:282 superset/connectors/sqla/views.py:261 -#: superset/views/core.py:274 +#: superset/connectors/druid/views.py:166 +#: superset/connectors/druid/views.py:268 +#: superset/connectors/druid/views.py:307 superset/connectors/sqla/views.py:281 +#: superset/views/core.py:282 msgid "Sources" msgstr "" -#: superset/connectors/druid/views.py:172 superset/connectors/sqla/views.py:155 +#: superset/connectors/druid/views.py:173 +msgid "List Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:174 +msgid "Show Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:175 +msgid "Add Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:176 +msgid "Edit Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:197 superset/connectors/sqla/views.py:175 msgid "" "The list of slices associated with this table. By altering this " "datasource, you may change how these associated slices behave. Also note " @@ -362,11 +2721,11 @@ msgid "" "datasource for a slice, overwrite the slice from the 'explore view'" msgstr "" -#: superset/connectors/druid/views.py:180 superset/connectors/sqla/views.py:163 +#: superset/connectors/druid/views.py:205 superset/connectors/sqla/views.py:183 msgid "Timezone offset (in hours) for this datasource" msgstr "" -#: superset/connectors/druid/views.py:184 +#: superset/connectors/druid/views.py:209 msgid "" "Time expression to use as a predicate when retrieving distinct values to " "populate the filter component. Only applies when `Enable Filter Select` " @@ -374,160 +2733,203 @@ msgid "" "filter will be populated based on the distinct value over the past week" msgstr "" -#: superset/connectors/druid/views.py:191 superset/connectors/sqla/views.py:185 +#: superset/connectors/druid/views.py:216 superset/connectors/sqla/views.py:205 msgid "" "Whether to populate the filter's dropdown in the explore view's filter " "section with a list of distinct values fetched from the backend on the " "fly" msgstr "" -#: superset/connectors/druid/views.py:195 superset/connectors/sqla/views.py:199 +#: superset/connectors/druid/views.py:220 superset/connectors/sqla/views.py:219 msgid "" "Redirects to this endpoint when clicking on the datasource from the " "datasource list" msgstr "" -#: superset/connectors/druid/views.py:201 superset/connectors/sqla/views.py:192 +#: superset/connectors/druid/views.py:226 superset/connectors/sqla/views.py:212 msgid "Associated Slices" msgstr "" -#: superset/connectors/druid/views.py:202 +#: superset/connectors/druid/views.py:227 msgid "Data Source" msgstr "" -#: superset/connectors/druid/views.py:205 +#: superset/connectors/druid/views.py:230 msgid "Owner" msgstr "" -#: superset/connectors/druid/views.py:206 +#: superset/connectors/druid/views.py:231 msgid "Is Hidden" msgstr "" -#: superset/connectors/druid/views.py:207 superset/connectors/sqla/views.py:197 +#: superset/connectors/druid/views.py:232 superset/connectors/sqla/views.py:217 msgid "Enable Filter Select" msgstr "" -#: superset/connectors/druid/views.py:208 +#: superset/connectors/druid/views.py:233 msgid "Default Endpoint" msgstr "" -#: superset/connectors/druid/views.py:209 +#: superset/connectors/druid/views.py:234 msgid "Time Offset" msgstr "" -#: superset/connectors/druid/views.py:210 superset/connectors/sqla/views.py:203 -#: superset/views/core.py:241 superset/views/core.py:351 +#: superset/connectors/druid/views.py:235 superset/connectors/sqla/views.py:223 +#: superset/views/core.py:249 superset/views/core.py:365 msgid "Cache Timeout" msgstr "" -#: superset/connectors/druid/views.py:241 +#: superset/connectors/druid/views.py:266 msgid "Druid Datasources" msgstr "" -#: superset/connectors/druid/views.py:279 +#: superset/connectors/druid/views.py:304 msgid "Refresh Druid Metadata" msgstr "" -#: superset/connectors/sqla/models.py:388 +#: superset/connectors/sqla/models.py:386 msgid "" "Datetime column not provided as part table configuration and is required " "by this type of chart" msgstr "" -#: superset/connectors/sqla/models.py:393 +#: superset/connectors/sqla/models.py:391 msgid "Metric '{}' is not valid" msgstr "" -#: superset/connectors/sqla/views.py:38 +#: superset/connectors/sqla/views.py:28 +msgid "List Columns" +msgstr "" + +#: superset/connectors/sqla/views.py:29 +msgid "Show Column" +msgstr "" + +#: superset/connectors/sqla/views.py:30 +msgid "Add Column" +msgstr "" + +#: superset/connectors/sqla/views.py:31 +msgid "Edit Column" +msgstr "" + +#: superset/connectors/sqla/views.py:46 msgid "" "Whether to make this column available as a [Time Granularity] option, " "column has to be DATETIME or DATETIME-like" msgstr "" -#: superset/connectors/sqla/views.py:45 +#: superset/connectors/sqla/views.py:53 msgid "" "The data type that was inferred by the database. It may be necessary to " "input a type manually for expression-defined columns in some cases. In " "most case users should not need to alter this." msgstr "" -#: superset/connectors/sqla/views.py:78 superset/connectors/sqla/views.py:121 -#: superset/connectors/sqla/views.py:193 superset/views/core.py:361 -msgid "Table" -msgstr "" - -#: superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:91 msgid "Expression" msgstr "" -#: superset/connectors/sqla/views.py:84 +#: superset/connectors/sqla/views.py:92 msgid "Is temporal" msgstr "" -#: superset/connectors/sqla/views.py:85 +#: superset/connectors/sqla/views.py:93 msgid "Datetime Format" msgstr "" -#: superset/connectors/sqla/views.py:86 +#: superset/connectors/sqla/views.py:94 msgid "Database Expression" msgstr "" -#: superset/connectors/sqla/views.py:120 +#: superset/connectors/sqla/views.py:102 +msgid "List Metrics" +msgstr "" + +#: superset/connectors/sqla/views.py:103 +msgid "Show Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:104 +msgid "Add Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:105 +msgid "Edit Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:134 msgid "SQL Expression" msgstr "" -#: superset/connectors/sqla/views.py:164 +#: superset/connectors/sqla/views.py:152 +msgid "List Tables" +msgstr "" + +#: superset/connectors/sqla/views.py:153 +msgid "Show Table" +msgstr "" + +#: superset/connectors/sqla/views.py:154 +msgid "Add Table" +msgstr "" + +#: superset/connectors/sqla/views.py:155 +msgid "Edit Table" +msgstr "" + +#: superset/connectors/sqla/views.py:184 msgid "Name of the table that exists in the source database" msgstr "" -#: superset/connectors/sqla/views.py:166 +#: superset/connectors/sqla/views.py:186 msgid "Schema, as used only in some databases like Postgres, Redshift and DB2" msgstr "" -#: superset/connectors/sqla/views.py:172 +#: superset/connectors/sqla/views.py:192 msgid "" "This fields acts a Superset view, meaning that Superset will run a query " "against this string as a subquery." msgstr "" -#: superset/connectors/sqla/views.py:176 +#: superset/connectors/sqla/views.py:196 msgid "" "Predicate applied when fetching distinct value to populate the filter " "control component. Supports jinja template syntax. Applies only when " "`Enable Filter Select` is on." msgstr "" -#: superset/connectors/sqla/views.py:182 +#: superset/connectors/sqla/views.py:202 msgid "Redirects to this endpoint when clicking on the table from the table list" msgstr "" -#: superset/connectors/sqla/views.py:194 +#: superset/connectors/sqla/views.py:214 msgid "Changed By" msgstr "" -#: superset/connectors/sqla/views.py:195 superset/views/core.py:237 +#: superset/connectors/sqla/views.py:215 superset/views/core.py:245 msgid "Database" msgstr "" -#: superset/connectors/sqla/views.py:196 superset/views/core.py:239 +#: superset/connectors/sqla/views.py:216 superset/views/core.py:247 msgid "Last Changed" msgstr "" -#: superset/connectors/sqla/views.py:198 +#: superset/connectors/sqla/views.py:218 msgid "Schema" msgstr "" -#: superset/connectors/sqla/views.py:202 +#: superset/connectors/sqla/views.py:222 msgid "Offset" msgstr "" -#: superset/connectors/sqla/views.py:235 +#: superset/connectors/sqla/views.py:255 msgid "" "The table was created. As part of this two phase configuration process, " "you should now click the edit button by the new table to configure it." msgstr "" -#: superset/connectors/sqla/views.py:259 +#: superset/connectors/sqla/views.py:279 msgid "Tables" msgstr "" @@ -560,19 +2962,10 @@ msgstr "" msgid "Request Permissions" msgstr "" -#: superset/templates/superset/request_access.html:16 -msgid "Cancel" -msgstr "" - #: superset/templates/superset/welcome.html:10 msgid "Welcome!" msgstr "" -#: superset/templates/superset/welcome.html:20 superset/views/core.py:353 -#: superset/views/core.py:507 -msgid "Dashboards" -msgstr "" - #: superset/templates/superset/models/database/macros.html:4 msgid "Test Connection" msgstr "" @@ -590,144 +2983,172 @@ msgstr "" msgid "Delete all Really?" msgstr "" -#: superset/views/core.py:55 +#: superset/views/core.py:57 msgid "This endpoint requires the `all_datasource_access` permission" msgstr "" -#: superset/views/core.py:57 +#: superset/views/core.py:59 msgid "The datasource seems to have been deleted" msgstr "" -#: superset/views/core.py:58 +#: superset/views/core.py:60 msgid "The access requests seem to have been deleted" msgstr "" -#: superset/views/core.py:60 +#: superset/views/core.py:62 msgid "The user seems to have been deleted" msgstr "" -#: superset/views/core.py:61 +#: superset/views/core.py:63 msgid "You don't have access to this datasource" msgstr "" -#: superset/views/core.py:65 +#: superset/views/core.py:67 #, python-format msgid "" "This view requires the database %(name)s or `all_datasource_access` " "permission" msgstr "" -#: superset/views/core.py:70 +#: superset/views/core.py:72 #, python-format msgid "" "This endpoint requires the datasource %(name)s, database or " "`all_datasource_access` permission" msgstr "" -#: superset/views/core.py:205 +#: superset/views/core.py:175 +msgid "List Databases" +msgstr "" + +#: superset/views/core.py:176 +msgid "Show Database" +msgstr "" + +#: superset/views/core.py:177 +msgid "Add Database" +msgstr "" + +#: superset/views/core.py:178 +msgid "Edit Database" +msgstr "" + +#: superset/views/core.py:213 msgid "Expose this DB in SQL Lab" msgstr "" -#: superset/views/core.py:206 +#: superset/views/core.py:214 msgid "" "Allow users to run synchronous queries, this is the default and should " "work well for queries that can be executed within a web request scope " "(<~1 minute)" msgstr "" -#: superset/views/core.py:210 +#: superset/views/core.py:218 msgid "" "Allow users to run queries, against an async backend. This assumes that " "you have a Celery worker setup as well as a results backend." msgstr "" -#: superset/views/core.py:214 +#: superset/views/core.py:222 msgid "Allow CREATE TABLE AS option in SQL Lab" msgstr "" -#: superset/views/core.py:215 +#: superset/views/core.py:223 msgid "" "Allow users to run non-SELECT statements (UPDATE, DELETE, CREATE, ...) in" " SQL Lab" msgstr "" -#: superset/views/core.py:219 +#: superset/views/core.py:227 msgid "" "When allowing CREATE TABLE AS option in SQL Lab, this option forces the " "table to be created in this schema" msgstr "" -#: superset/views/core.py:233 +#: superset/views/core.py:241 msgid "Expose in SQL Lab" msgstr "" -#: superset/views/core.py:234 +#: superset/views/core.py:242 msgid "Allow CREATE TABLE AS" msgstr "" -#: superset/views/core.py:235 +#: superset/views/core.py:243 msgid "Allow DML" msgstr "" -#: superset/views/core.py:236 +#: superset/views/core.py:244 msgid "CTAS Schema" msgstr "" -#: superset/views/core.py:238 superset/views/core.py:352 -#: superset/views/core.py:454 superset/views/core.py:518 +#: superset/views/core.py:246 superset/views/core.py:366 +#: superset/views/core.py:474 superset/views/core.py:538 msgid "Creator" msgstr "" -#: superset/views/core.py:240 +#: superset/views/core.py:248 msgid "SQLAlchemy URI" msgstr "" -#: superset/views/core.py:242 +#: superset/views/core.py:250 msgid "Extra" msgstr "" -#: superset/views/core.py:260 +#: superset/views/core.py:268 msgid "Import Dashboards" msgstr "" -#: superset/views/core.py:264 superset/views/core.py:2279 -#: superset/views/sql_lab.py:22 +#: superset/views/core.py:272 superset/views/core.py:2318 +#: superset/views/sql_lab.py:23 msgid "Manage" msgstr "" -#: superset/views/core.py:271 -msgid "Databases" -msgstr "" - -#: superset/views/core.py:302 superset/views/core.py:531 +#: superset/views/core.py:310 superset/views/core.py:551 msgid "User" msgstr "" -#: superset/views/core.py:303 +#: superset/views/core.py:311 msgid "User Roles" msgstr "" -#: superset/views/core.py:304 +#: superset/views/core.py:312 msgid "Database URL" msgstr "" -#: superset/views/core.py:306 +#: superset/views/core.py:314 msgid "Roles to grant" msgstr "" -#: superset/views/core.py:307 +#: superset/views/core.py:315 msgid "Created On" msgstr "" -#: superset/views/core.py:313 +#: superset/views/core.py:321 msgid "Access requests" msgstr "" -#: superset/views/core.py:315 superset/views/core.py:542 +#: superset/views/core.py:323 superset/views/core.py:562 msgid "Security" msgstr "" -#: superset/views/core.py:340 +#: superset/views/core.py:330 +msgid "List Slices" +msgstr "" + +#: superset/views/core.py:331 +msgid "Show Slice" +msgstr "" + +#: superset/views/core.py:332 +msgid "Add Slice" +msgstr "" + +#: superset/views/core.py:333 +msgid "Edit Slice" +msgstr "" + +#: superset/views/core.py:354 msgid "" "These parameters are generated dynamically when clicking the save or " "overwrite button in the explore view. This JSON object is exposed here " @@ -735,238 +3156,194 @@ msgid "" "parameters." msgstr "" -#: superset/views/core.py:345 +#: superset/views/core.py:359 msgid "Duration (in seconds) of the caching timeout for this slice." msgstr "" -#: superset/views/core.py:356 +#: superset/views/core.py:370 msgid "Last Modified" msgstr "" -#: superset/views/core.py:357 superset/views/core.py:453 +#: superset/views/core.py:371 superset/views/core.py:473 msgid "Owners" msgstr "" -#: superset/views/core.py:358 +#: superset/views/core.py:372 msgid "Parameters" msgstr "" -#: superset/views/core.py:359 superset/views/core.py:401 +#: superset/views/core.py:373 superset/views/core.py:415 msgid "Slice" msgstr "" -#: superset/views/core.py:360 -msgid "Name" +#: superset/views/core.py:432 +msgid "List Dashboards" msgstr "" -#: superset/views/core.py:362 -msgid "Visualization Type" +#: superset/views/core.py:433 +msgid "Show Dashboard" msgstr "" -#: superset/views/core.py:389 superset/views/core.py:452 -msgid "Slices" +#: superset/views/core.py:434 +msgid "Add Dashboard" +msgstr "" + +#: superset/views/core.py:435 +msgid "Edit Dashboard" msgstr "" -#: superset/views/core.py:426 +#: superset/views/core.py:446 msgid "" "This json object describes the positioning of the widgets in the " "dashboard. It is dynamically generated when adjusting the widgets size " "and positions by using drag & drop in the dashboard view" msgstr "" -#: superset/views/core.py:431 +#: superset/views/core.py:451 msgid "" "The css for individual dashboards can be altered here, or in the " "dashboard view where changes are immediately visible" msgstr "" -#: superset/views/core.py:435 +#: superset/views/core.py:455 msgid "To get a readable URL for your dashboard" msgstr "" -#: superset/views/core.py:436 +#: superset/views/core.py:456 msgid "" "This JSON object is generated dynamically when clicking the save or " "overwrite button in the dashboard view. It is exposed here for reference " "and for power users who may want to alter specific parameters." msgstr "" -#: superset/views/core.py:441 +#: superset/views/core.py:461 msgid "Owners is a list of users who can alter the dashboard." msgstr "" -#: superset/views/core.py:449 superset/views/core.py:516 +#: superset/views/core.py:469 superset/views/core.py:536 msgid "Dashboard" msgstr "" -#: superset/views/core.py:450 superset/views/core.py:517 -msgid "Title" -msgstr "" - -#: superset/views/core.py:451 +#: superset/views/core.py:471 msgid "Slug" msgstr "" -#: superset/views/core.py:455 superset/views/core.py:519 -msgid "Modified" -msgstr "" - -#: superset/views/core.py:456 +#: superset/views/core.py:476 msgid "Position JSON" msgstr "" -#: superset/views/core.py:457 -msgid "CSS" -msgstr "" - -#: superset/views/core.py:458 +#: superset/views/core.py:478 msgid "JSON Metadata" msgstr "" -#: superset/views/core.py:459 +#: superset/views/core.py:479 msgid "Underlying Tables" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export dashboards?" msgstr "" -#: superset/views/core.py:532 +#: superset/views/core.py:552 msgid "Action" msgstr "" -#: superset/views/core.py:533 +#: superset/views/core.py:553 msgid "dttm" msgstr "" -#: superset/views/core.py:540 +#: superset/views/core.py:560 msgid "Action Log" msgstr "" -#: superset/views/core.py:770 +#: superset/views/core.py:790 msgid "Access was requested" msgstr "" -#: superset/views/core.py:831 +#: superset/views/core.py:851 #, python-format msgid "" "%(user)s was granted the role %(role)s that gives access to the " "%(datasource)s" msgstr "" -#: superset/views/core.py:847 +#: superset/views/core.py:867 #, python-format msgid "Role %(r)s was extended to provide the access to the datasource %(ds)s" msgstr "" -#: superset/views/core.py:856 +#: superset/views/core.py:876 msgid "You have no permission to approve this request" msgstr "" -#: superset/views/core.py:1589 +#: superset/views/core.py:1609 msgid "" "Malformed request. slice_id or table_name and db_name arguments are " "expected" msgstr "" -#: superset/views/core.py:1595 +#: superset/views/core.py:1615 #, python-format msgid "Slice %(id)s not found" msgstr "" -#: superset/views/core.py:1607 +#: superset/views/core.py:1627 #, python-format msgid "Table %(t)s wasn't found in the database %(d)s" msgstr "" -#: superset/views/core.py:1741 +#: superset/views/core.py:1761 #, python-format msgid "Can't find User '%(name)s', please ask your admin to create one." msgstr "" -#: superset/views/core.py:1748 +#: superset/views/core.py:1768 #, python-format msgid "Can't find DruidCluster with cluster_name = '%(name)s'" msgstr "" -#: superset/views/core.py:2276 +#: superset/views/core.py:2315 msgid "CSS Templates" msgstr "" -#: superset/views/core.py:2286 +#: superset/views/core.py:2325 msgid "SQL Editor" msgstr "" -#: superset/views/core.py:2291 superset/views/core.py:2300 +#: superset/views/core.py:2330 superset/views/core.py:2339 msgid "SQL Lab" msgstr "" -#: superset/views/core.py:2295 +#: superset/views/core.py:2334 msgid "Query Search" msgstr "" -#: superset/views/sql_lab.py:20 +#: superset/views/sql_lab.py:21 msgid "Queries" msgstr "" -#: superset/views/sql_lab.py:55 -msgid "Saved Queries" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 -msgid "Please enter a slice name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 -msgid "Please select a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 -msgid "Please enter a dashboard name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 -msgid "Save A Slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 -msgid "Overwrite slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 -msgid "Save as" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 -msgid "[slice name]" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 -msgid "Do not add to a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 -msgid "Add slice to existing dashboard" +#: superset/views/sql_lab.py:30 +msgid "List Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 -msgid "Add to new dashboard" +#: superset/views/sql_lab.py:31 +msgid "Show Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 -msgid "[dashboard name]" +#: superset/views/sql_lab.py:32 +msgid "Add Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 -msgid "Save" +#: superset/views/sql_lab.py:33 +msgid "Edit Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 -msgid "Save & go to dashboard" +#: superset/views/sql_lab.py:62 +msgid "Saved Queries" msgstr "" #~ msgid "Databases" diff --git a/superset/translations/it/LC_MESSAGES/messages.mo b/superset/translations/it/LC_MESSAGES/messages.mo index b38fc85fcb5d6a115ca268ab8f116616536fe8f6..0d6d5c8f5c8337a761c25742c30d6c430f4ecb8e 100644 GIT binary patch literal 59709 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

Ia$^uz`wHPw;L~Fa*!@NlTkkF>e7dP&*<@x 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 delta 5163 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 diff --git a/superset/translations/it/LC_MESSAGES/messages.po b/superset/translations/it/LC_MESSAGES/messages.po index 2ae9574b2b91a..dfdc414a42141 100644 --- a/superset/translations/it/LC_MESSAGES/messages.po +++ b/superset/translations/it/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-06-19 11:56+0800\n" +"POT-Creation-Date: 2017-07-31 11:46+0800\n" "PO-Revision-Date: 2017-06-04 20:36+0200\n" "Last-Translator: Maurizio Napolitano \n" "Language: it\n" @@ -19,91 +19,98 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:225 -#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:317 -#: superset/db_engine_specs.py:362 superset/db_engine_specs.py:770 -#: superset/db_engine_specs.py:806 superset/db_engine_specs.py:838 -#: superset/db_engine_specs.py:884 +#: superset/assets/javascripts/explore/stores/controls.jsx:491 +#: superset/db_engine_specs.py:192 superset/db_engine_specs.py:223 +#: superset/db_engine_specs.py:267 superset/db_engine_specs.py:315 +#: superset/db_engine_specs.py:360 superset/db_engine_specs.py:810 +#: superset/db_engine_specs.py:846 superset/db_engine_specs.py:878 +#: superset/db_engine_specs.py:924 superset/db_engine_specs.py:961 msgid "Time Column" msgstr "Colonna del Tempo" -#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:226 -#: superset/db_engine_specs.py:318 superset/db_engine_specs.py:363 -#: superset/db_engine_specs.py:771 superset/db_engine_specs.py:839 +#: superset/db_engine_specs.py:193 superset/db_engine_specs.py:224 +#: superset/db_engine_specs.py:316 superset/db_engine_specs.py:361 +#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:879 +#: superset/db_engine_specs.py:962 msgid "second" msgstr "secondo" -#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:229 -#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 -#: superset/db_engine_specs.py:773 superset/db_engine_specs.py:807 -#: superset/db_engine_specs.py:841 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:227 +#: superset/db_engine_specs.py:319 superset/db_engine_specs.py:363 +#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:881 superset/db_engine_specs.py:925 +#: superset/db_engine_specs.py:963 msgid "minute" msgstr "minuto" -#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:233 -#: superset/db_engine_specs.py:323 superset/db_engine_specs.py:367 -#: superset/db_engine_specs.py:779 superset/db_engine_specs.py:809 -#: superset/db_engine_specs.py:843 superset/db_engine_specs.py:891 +#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:231 +#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 +#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:849 +#: superset/db_engine_specs.py:883 superset/db_engine_specs.py:931 +#: superset/db_engine_specs.py:964 msgid "hour" msgstr "ora" -#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:238 -#: superset/db_engine_specs.py:270 superset/db_engine_specs.py:325 -#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:781 -#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:845 -#: superset/db_engine_specs.py:893 +#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:236 +#: superset/db_engine_specs.py:268 superset/db_engine_specs.py:323 +#: superset/db_engine_specs.py:367 superset/db_engine_specs.py:821 +#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:933 superset/db_engine_specs.py:965 msgid "day" msgstr "giorno" -#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:244 -#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 -#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:783 -#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:242 +#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:324 +#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:823 +#: superset/db_engine_specs.py:853 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:966 msgid "week" msgstr "settimana" -#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:246 -#: superset/db_engine_specs.py:273 superset/db_engine_specs.py:328 -#: superset/db_engine_specs.py:373 superset/db_engine_specs.py:785 -#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:849 -#: superset/db_engine_specs.py:895 +#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:244 +#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 +#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:825 +#: superset/db_engine_specs.py:855 superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:935 superset/db_engine_specs.py:967 msgid "month" msgstr "mese" -#: superset/db_engine_specs.py:201 superset/db_engine_specs.py:248 -#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:375 -#: superset/db_engine_specs.py:787 superset/db_engine_specs.py:817 -#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:897 +#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:246 +#: superset/db_engine_specs.py:328 superset/db_engine_specs.py:373 +#: superset/db_engine_specs.py:827 superset/db_engine_specs.py:857 +#: superset/db_engine_specs.py:891 superset/db_engine_specs.py:937 +#: superset/db_engine_specs.py:968 msgid "quarter" msgstr "quartile" -#: superset/db_engine_specs.py:202 superset/db_engine_specs.py:252 -#: superset/db_engine_specs.py:332 superset/db_engine_specs.py:789 -#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:899 +#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:250 +#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:829 +#: superset/db_engine_specs.py:859 superset/db_engine_specs.py:939 +#: superset/db_engine_specs.py:969 msgid "year" msgstr "anno" -#: superset/db_engine_specs.py:334 +#: superset/db_engine_specs.py:332 msgid "week_start_monday" msgstr "settimana_inizio_lunedì" -#: superset/db_engine_specs.py:377 superset/db_engine_specs.py:853 +#: superset/db_engine_specs.py:375 superset/db_engine_specs.py:893 msgid "week_ending_saturday" msgstr "settimana_fine_domenica" -#: superset/db_engine_specs.py:380 superset/db_engine_specs.py:856 +#: superset/db_engine_specs.py:378 superset/db_engine_specs.py:896 msgid "week_start_sunday" msgstr "settimana_inizio_domenica" -#: superset/db_engine_specs.py:775 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:927 msgid "5 minute" msgstr "5 minuti" -#: superset/db_engine_specs.py:777 +#: superset/db_engine_specs.py:817 msgid "half hour" msgstr "mezz'ora" -#: superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:929 msgid "10 minute" msgstr "10 minuti" @@ -112,173 +119,2487 @@ msgstr "10 minuti" msgid "[Superset] Access to the datasource %(name)s was granted" msgstr "" -#: superset/viz.py:311 +#: superset/assets/javascripts/explore/stores/visTypes.js:283 +#: superset/viz.py:312 msgid "Table View" msgstr "Vista Tabella" -#: superset/viz.py:364 +#: superset/assets/javascripts/explore/stores/visTypes.js:334 +#: superset/viz.py:368 msgid "Pivot Table" msgstr "Vista Pivot" -#: superset/viz.py:413 +#: superset/assets/javascripts/explore/stores/visTypes.js:321 +#: superset/viz.py:423 msgid "Markup" msgstr "Marcatore" -#: superset/viz.py:432 +#: superset/assets/javascripts/explore/stores/visTypes.js:348 +#: superset/viz.py:442 msgid "Separator" msgstr "Separatore" -#: superset/viz.py:448 +#: superset/assets/javascripts/explore/stores/visTypes.js:369 +#: superset/viz.py:458 msgid "Word Cloud" msgstr "Cloud di Parole" -#: superset/viz.py:471 +#: superset/assets/javascripts/explore/stores/visTypes.js:383 +#: superset/viz.py:481 msgid "Treemap" msgstr "Treemap" -#: superset/viz.py:497 +#: superset/assets/javascripts/explore/stores/visTypes.js:403 +#: superset/viz.py:507 msgid "Calendar Heatmap" msgstr "Calendario di Intensità" -#: superset/viz.py:555 +#: superset/assets/javascripts/explore/stores/visTypes.js:418 +#: superset/viz.py:565 msgid "Box Plot" msgstr "Box Plot" -#: superset/viz.py:644 +#: superset/assets/javascripts/explore/stores/visTypes.js:437 +#: superset/viz.py:654 msgid "Bubble Chart" msgstr "Grafico a Bolle" -#: superset/viz.py:693 +#: superset/assets/javascripts/explore/stores/visTypes.js:481 +#: superset/viz.py:704 msgid "Bullet Chart" msgstr "Grafico a Proiettile" -#: superset/viz.py:742 +#: superset/assets/javascripts/explore/stores/visTypes.js:497 +#: superset/viz.py:753 msgid "Big Number with Trendline" msgstr "Numero Grande con Linea del Trend" -#: superset/viz.py:771 +#: superset/assets/javascripts/explore/stores/visTypes.js:516 +#: superset/viz.py:782 msgid "Big Number" msgstr "Numero Grande" -#: superset/viz.py:798 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:21 +#: superset/assets/javascripts/explore/stores/visTypes.js:127 +#: superset/viz.py:809 msgid "Time Series - Line Chart" msgstr "Serie Temporali - Grafico Lineare" -#: superset/viz.py:925 -msgid "Time Series - Dual Axis Line Chart" -msgstr "Serie Temporali - Grafico Lineare ad Assi Duali" +#: superset/viz.py:936 +msgid "Time Series - Dual Axis Line Chart" +msgstr "Serie Temporali - Grafico Lineare ad Assi Duali" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:22 +#: superset/assets/javascripts/explore/stores/visTypes.js:197 +#: superset/viz.py:1011 +msgid "Time Series - Bar Chart" +msgstr "Serie Temporali - Grafico Barre" + +#: superset/assets/javascripts/explore/stores/visTypes.js:230 +#: superset/viz.py:1019 +msgid "Time Series - Percent Change" +msgstr "Serie Temporali - Cambiamento Percentuale" + +#: superset/assets/javascripts/explore/stores/visTypes.js:251 +#: superset/viz.py:1027 +msgid "Time Series - Stacked" +msgstr "Serie Temporali - Stacked" + +#: superset/viz.py:1036 +msgid "Distribution - NVD3 - Pie Chart" +msgstr "Distribuzione - NVD3 - Grafico Torta" + +#: superset/assets/javascripts/explore/stores/visTypes.js:535 +#: superset/viz.py:1054 +msgid "Histogram" +msgstr "Istogramma" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:19 +#: superset/assets/javascripts/explore/stores/visTypes.js:81 +#: superset/viz.py:1079 +msgid "Distribution - Bar Chart" +msgstr "Distribuzione - Grafico Barre" + +#: superset/assets/javascripts/explore/stores/visTypes.js:565 +#: superset/viz.py:1146 +msgid "Sunburst" +msgstr "Sunburst" + +#: superset/assets/javascripts/explore/stores/visTypes.js:595 +#: superset/viz.py:1179 +msgid "Sankey" +msgstr "Sankey" + +#: superset/assets/javascripts/explore/stores/visTypes.js:615 +#: superset/viz.py:1228 superset/viz.py:1249 +msgid "Directed Force Layout" +msgstr "Disposizione a Forza Diretta" + +#: superset/assets/javascripts/explore/stores/visTypes.js:672 +#: superset/viz.py:1282 +msgid "Country Map" +msgstr "Mappa della Nazione" + +#: superset/assets/javascripts/explore/stores/visTypes.js:696 +#: superset/viz.py:1311 +msgid "World Map" +msgstr "Mappa del Mondo" + +#: superset/assets/javascripts/explore/stores/visTypes.js:63 +#: superset/viz.py:1361 +msgid "Filters" +msgstr "Filtri" + +#: superset/assets/javascripts/explore/stores/visTypes.js:758 +#: superset/viz.py:1396 +msgid "iFrame" +msgstr "iFrame" + +#: superset/assets/javascripts/explore/stores/visTypes.js:770 +#: superset/viz.py:1413 +msgid "Parallel Coordinates" +msgstr "Coordinate Parallele" + +#: superset/assets/javascripts/explore/stores/visTypes.js:786 +#: superset/viz.py:1438 +msgid "Heatmap" +msgstr "Mappa di Intensità" + +#: superset/viz.py:1489 +msgid "Horizon Charts" +msgstr "Grafici d'orizzonte" + +#: superset/assets/javascripts/explore/stores/visTypes.js:830 +#: superset/viz.py:1500 +msgid "Mapbox" +msgstr "Mapbox" + +#: superset/assets/javascripts/explore/stores/visTypes.js:900 +#: superset/viz.py:1603 +msgid "Event flow" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:55 +msgid "Your query was saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:56 +msgid "Your query could not be saved" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:109 +msgid "Failed at retrieving results from the results backend" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:155 +msgid "Could not connect to server" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:160 +msgid "Your session timed out, please refresh your page and try again." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:179 +msgid "Query was stopped." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:182 +msgid "Failed at stopping query." +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:295 +#: superset/assets/javascripts/SqlLab/actions.js:308 +msgid "Error occurred while fetching table metadata" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:358 +msgid "shared query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:366 +#: superset/assets/javascripts/SqlLab/actions.js:386 +msgid "The query couldn't be loaded" +msgstr "" + +#: superset/assets/javascripts/SqlLab/actions.js:419 +msgid "An error occurred while creating the data source" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:29 +msgid "Pick a chart type!" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:30 +msgid "To use this chart type you need at least one column flagged as a date" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:31 +msgid "To use this chart type you need at least one dimension" +msgstr "" + +#: superset/assets/javascripts/SqlLab/constants.js:32 +msgid "To use this chart type you need at least one aggregation function" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:49 +#: superset/assets/javascripts/SqlLab/reducers.js:11 +msgid "Untitled Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/reducers.js:44 +#, python-format +msgid "Copy of %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:30 +msgid "share query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:33 +msgid "copy URL to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:56 +msgid "Raw SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:66 +msgid "Source SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:78 +#: superset/assets/javascripts/explore/stores/visTypes.js:31 +msgid "SQL" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryHistory.jsx:28 +msgid "No query history yet..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:106 +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:66 +msgid "It seems you don't have access to any database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:154 +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:90 +msgid "Search Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:160 +msgid "[From]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:171 +msgid "[To]-" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:181 +msgid "[Query Status]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:190 +msgid "Search" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:114 +msgid "Open in SQL Editor" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:133 +msgid "view results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:136 +msgid "Data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:176 +msgid "Visualize the data out of this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:182 +msgid "Overwrite text in editor with a query on this table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:188 +msgid "Run query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:193 +msgid "Remove query from log" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:68 +msgid ".CSV" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:79 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:235 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:274 +msgid "Visualize" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:151 +msgid "Query was stopped" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +#: superset/connectors/sqla/views.py:86 superset/connectors/sqla/views.py:135 +#: superset/connectors/sqla/views.py:213 superset/views/core.py:375 +msgid "Table" +msgstr "Tabella" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +msgid "was created" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:201 +msgid "Query in a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:240 +msgid "Fetch data preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:244 +msgid "The query returned no data" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Selected Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:22 +msgid "Run query asynchronously" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:56 +msgid "Stop" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:16 +msgid "Undefined" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:66 +msgid "Label" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:71 +msgid "Label for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:81 +#: superset/connectors/druid/views.py:107 +#: superset/connectors/druid/views.py:229 superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:131 superset/views/core.py:369 +msgid "Description" +msgstr "Descrizione" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:85 +msgid "Write a description for your query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:99 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:139 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 +msgid "Save" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:102 +#: superset/templates/superset/request_access.html:16 +msgid "Cancel" +msgstr "Annulla" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:123 +msgid "Save Query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:80 +msgid "Run a query to display results here" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:85 +#, python-format +msgid "Preview for %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:109 +msgid "Results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:115 +msgid "Query History" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:112 +#, python-format +msgid "" +"It appears that the number of rows in the query results displayed was " +"limited on the server side to the %s limit." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:123 +msgid "Create table as with query results" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:131 +msgid "new table name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:90 +msgid "Error while fetching table list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:131 +msgid "Error while fetching schema list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:153 +msgid "Error while fetching database list" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:159 +msgid "Database:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:163 +msgid "Select a database" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:170 +#, python-format +msgid "Select a schema (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:175 +msgid "Schema:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:190 +#, python-format +msgid "Add a table (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:203 +msgid "Type to search ..." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:226 +msgid "Reset State" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:105 +msgid "Enter a new title for the tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:124 +#, python-format +msgid "Untitled Query %s" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:170 +msgid "close tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:173 +msgid "rename tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "expand tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "hide tool bar" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:75 +msgid "Copy partition query to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:94 +msgid "latest partition:" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:110 +msgid "Keys for table" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:119 +#, python-format +msgid "View keys & indexes (%s)" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:135 +msgid "Sort columns alphabetically" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:136 +msgid "Original table column order" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:146 +msgid "Copy SELECT statement to clipboard" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:152 +msgid "Remove table preview" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:20 +#: superset/assets/javascripts/explore/stores/visTypes.js:111 +msgid "Pie Chart" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:85 +#, python-format +msgid "%s is not right as a column name, please alias it (as in SELECT count(*) " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "AS my_alias" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "using only alphanumeric characters and underscores" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:136 +#, python-format +msgid "This query took %s seconds to run," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:137 +#, python-format +msgid "and the explore view times out at %s seconds," +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:138 +msgid "" +"following this flow will most likely lead to your query timing out.We " +"recommend your summarize your data further before following that flow.If " +"activated you can use the " +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:140 +msgid "featureto store a summarized data set that you can then explore." +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:160 +msgid "Creating a data source and popping a new tab" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:190 +msgid "No results available for this query" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:242 +msgid "Chart Type" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:245 +msgid "[Chart Type]" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:253 +msgid "Datasource Name" +msgstr "" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:257 +msgid "datasource name" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:54 +msgid "Create a new slice" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:59 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:65 +msgid "Choose a datasource" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:71 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:77 +msgid "Choose a visualization type" +msgstr "" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:87 +msgid "Create new slice" +msgstr "" + +#: superset/assets/javascripts/components/AsyncSelect.jsx:20 +msgid "Select ..." +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:26 +msgid "Loaded data cached" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:28 +msgid "Loaded from cache" +msgstr "" + +#: superset/assets/javascripts/components/CachedLabel.jsx:33 +msgid "Click to force-refresh" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:21 +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:67 +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:37 +msgid "Copy to clipboard" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:65 +msgid "Not successful" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:68 +msgid "Sorry, your browser does not support copying. Use Ctrl / Cmd + C!" +msgstr "" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:79 +msgid "Copied!" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:12 +#: superset/views/core.py:470 superset/views/core.py:537 +msgid "Title" +msgstr "Titolo" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "click to edit title" +msgstr "" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "You don't have the rights to alter this title." +msgstr "" + +#: superset/assets/javascripts/components/FaveStar.jsx:32 +#: superset/assets/javascripts/modules/superset.js:33 +msgid "Click to favorite/unfavorite" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:36 +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "You have unsaved changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "Click the" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:55 +msgid "button on the top right to save your changes." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:158 +#, python-format +msgid "Served from data cached %s . Click to force refresh." +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:163 +msgid "Click to force refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:337 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:93 +msgid "Error" +msgstr "" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:338 +#, python-format +msgid "Sorry, there was an error adding slices to this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CodeModal.jsx:35 +msgid "Active Dashboard Filters" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:48 +#, python-format +msgid "Checkout this dashboard: %s" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:54 +msgid "Force refresh the whole dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:94 +msgid "Edit this dashboard's properties" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:65 +msgid "Load a template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:68 +msgid "Load a CSS template" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:80 +#: superset/views/core.py:477 +msgid "CSS" +msgstr "CSS" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:86 +msgid "Live CSS Editor" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:19 +msgid "Don't refresh" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:20 +msgid "10 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:21 +msgid "30 seconds" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:22 +msgid "1 minute" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:23 +msgid "5 minutes" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:38 +msgid "Refresh Interval" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:41 +msgid "Choose the refresh frequency for this dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:58 +msgid "This dashboard was saved successfully." +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:64 +msgid "Sorry, there was an error saving this dashboard: " +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:94 +msgid "You must pick a name for the new dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:108 +msgid "Save Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:116 +#, python-format +msgid "Overwrite Dashboard [%s]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:123 +msgid "Save as:" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:127 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 +msgid "[dashboard name]" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:137 +#: superset/views/core.py:374 +msgid "Name" +msgstr "Nome" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:143 +msgid "Viz" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:152 +#: superset/views/core.py:475 superset/views/core.py:539 +msgid "Modified" +msgstr "Modificato" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:162 +msgid "Add Slices" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:171 +msgid "Add a new slice to the dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:175 +msgid "Add Slices to Dashboard" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:23 +msgid "Move chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:26 +msgid "Force refresh data" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:30 +msgid "Toggle chart description" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:40 +msgid "Edit chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:45 +msgid "Explore chart" +msgstr "" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:50 +msgid "Remove chart from dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:170 +#, python-format +msgid "%s - untitled" +msgstr "" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:276 +msgid "Edit slice properties" +msgstr "" + +#: superset/assets/javascripts/explore/components/ControlHeader.jsx:60 +msgid "Takes effect on chart immediatly" +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:56 +msgid "Error..." +msgstr "" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:92 +msgid "Query" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:76 +msgid "Height" +msgstr "" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:90 +msgid "Width" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:32 +msgid "Export to .json" +msgstr "" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:42 +msgid "Export to .csv format" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 +msgid "Please enter a slice name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 +msgid "Please select a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 +msgid "Please enter a dashboard name" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 +msgid "Save A Slice" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 +#, python-format +msgid "Overwrite slice %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 +msgid "Save as" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 +msgid "[slice name]" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 +msgid "Do not add to a dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 +msgid "Add slice to existing dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 +msgid "Add to new dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 +msgid "Save & go to dashboard" +msgstr "" + +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:32 +#, python-format +msgid "Check out this slice: %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:55 +msgid "`Min` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:58 +msgid "`Max` value should be numeric or empty" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:75 +#: superset/connectors/druid/views.py:50 superset/connectors/sqla/views.py:89 +msgid "Min" +msgstr "Min" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:83 +#: superset/connectors/druid/views.py:51 superset/connectors/sqla/views.py:90 +msgid "Max" +msgstr "Max" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:118 +msgid "Filter value" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select metric" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select column" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:159 +msgid "Select operator" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/FilterControl.jsx:70 +msgid "Add Filter" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/SelectControl.jsx:106 +#, python-format +msgid "Select %s" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:62 +msgid "textarea" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "Edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "in modal" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:90 +#: superset/assets/javascripts/explore/stores/controls.jsx:46 +msgid "edit" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:104 +msgid "Select a visualization type" +msgstr "" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:114 +msgid "Search / Filter" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:61 +#, python-format +msgid "fetching dashboards failed for %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:100 +msgid "Updating chart was stopped" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:106 +#: superset/assets/javascripts/modules/superset.js:220 +#, python-format +msgid "An error occurred while rendering the visualization: %s" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:117 +msgid "Query timeout" +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:118 +#, python-format +msgid "- visualization query are set to timeout at %s seconds. " +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:119 +msgid "" +"Perhaps your data has grown, your database is under unusual load, or you " +"are simply querying a data source that is to large to be processed within" +" the timeout range. If that is the case, we recommend that you summarize " +"your data further." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:127 +msgid "Network error." +msgstr "" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:150 +msgid "Failed to save slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:35 +#: superset/connectors/druid/views.py:45 superset/views/core.py:313 +#: superset/views/core.py:368 +msgid "Datasource" +msgstr "Sorgente Dati" + +#: superset/assets/javascripts/explore/stores/controls.jsx:55 +#: superset/views/core.py:376 +msgid "Visualization Type" +msgstr "Tipo di Visualizzazione" + +#: superset/assets/javascripts/explore/stores/controls.jsx:57 +msgid "The type of visualization to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:63 +msgid "Metrics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:72 +#: superset/assets/javascripts/explore/stores/controls.jsx:90 +msgid "One or many metrics to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:79 +msgid "" +"Bounds for the Y axis. When left empty, the bounds are dynamically " +"defined based on the min/max of the data. Note that this feature will " +"only expand the axis range. It won't narrow the data's extent." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:88 +msgid "Ordering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:100 +msgid "Choose the metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:113 +msgid "Right Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:117 +msgid "Choose a metric for right axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:128 +msgid "Stacked Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:140 +msgid "Linear Color Scheme" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:153 +msgid "Normalize Across" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:160 +msgid "" +"Color will be rendered based on a ratio of the cell against the sum of " +"across this criteria" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:167 +msgid "Horizon Color Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:174 +msgid "Defines how the color are attributed." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:179 +msgid "Rendering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:185 +msgid "" +"image-rendering CSS attribute of the canvas object that defines how the " +"browser scales up the image" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:191 +msgid "XScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:194 +msgid "Number of steps to take between ticks when displaying the X scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:200 +msgid "YScale Interval" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:203 +msgid "Number of steps to take between ticks when displaying the Y scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:209 +msgid "Include Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:210 +msgid "Whether to include the time granularity as defined in the time section" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:216 +msgid "Stacked Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:232 +msgid "Show Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:235 +msgid "Show data points as circle markers on the lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:240 +msgid "Bar Values" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:248 +msgid "Sort Bars" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:250 +msgid "Sort bars by x labels." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:263 +msgid "Extra Controls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:266 +msgid "" +"Whether to show extra controls or not. Extra controls include things like" +" making mulitBar charts stacked or side by side." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:273 +msgid "Reduce X ticks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:276 +msgid "" +"Reduces the number of X axis ticks to be rendered. If true, the x axis " +"wont overflow and labels may be missing. If false, a minimum width will " +"be applied to columns and the width may overflow into an horizontal " +"scroll." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:285 +msgid "Include Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:288 +msgid "Include series name as an axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:293 +msgid "Color Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:295 +msgid "A metric to use for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:302 +msgid "Country Name" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:321 +msgid "The name of country that Superset should display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:325 +msgid "Country Field Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:333 +msgid "" +"The country code standard that Superset should expect to find in the " +"[country] column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:340 +msgid "Group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:342 +msgid "One or many controls to group by" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:354 +#: superset/assets/javascripts/explore/stores/controls.jsx:368 +msgid "Columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:370 +#: superset/assets/javascripts/explore/stores/controls.jsx:380 +#: superset/assets/javascripts/explore/stores/controls.jsx:390 +msgid "Columns to display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:378 +msgid "X" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:388 +msgid "Y" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:399 +msgid "Origin" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:405 +msgid "" +"Defines the origin where time buckets start, accepts natural dates as in " +"`now`, `sunday` or `1970-01-01`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:415 +msgid "Bottom marging, in pixels, allowing for more room for axis labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:421 +msgid "Time Granularity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:438 +msgid "" +"The time granularity for the visualization. Note that you can type and " +"use simple natural language as in `10 seconds`, `1 day` or `56 weeks`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:445 +msgid "Domain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:448 +msgid "The time unit used for the grouping of blocks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:453 +msgid "Subdomain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:456 +msgid "" +"The time unit for each block. Should be a smaller unit than " +"domain_granularity. Should be larger or equal to Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:463 +msgid "Link Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:466 +msgid "Link length in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:472 +msgid "Charge" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:486 +msgid "Charge in the force layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:494 +msgid "" +"The time column for the visualization. Note that you can define arbitrary" +" expression that return a DATETIME column in the table or. Also note that" +" the filter below is applied against this column or expression" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:506 +msgid "Time Grain" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:508 +msgid "" +"The time granularity for the visualization. This applies a date " +"transformation to alter your time column and defines a new time " +"granularity. The options here are defined on a per database engine basis " +"in the Superset source code." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:521 +msgid "Resample Rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:524 +msgid "Pandas resample rule" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:530 +msgid "Resample How" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:533 +msgid "Pandas resample how" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:539 +msgid "Resample Fill Method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:542 +msgid "Pandas resample fill method" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:548 +msgid "Since" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:560 +msgid "" +"Timestamp from filter. This supports free form typing and natural " +"language as in `1 day ago`, `28 days` or `3 years`" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:567 +msgid "Until" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:582 +msgid "Max Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:590 +msgid "Whisker/outlier options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:592 +msgid "Determines how whiskers and outliers are calculated." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:603 +msgid "Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:606 +msgid "Target aspect ratio for treemap tiles." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:612 +#: superset/assets/javascripts/explore/stores/visTypes.js:510 +#: superset/assets/javascripts/explore/stores/visTypes.js:529 +#: superset/assets/javascripts/explore/stores/visTypes.js:654 +msgid "Number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:622 +msgid "Row limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:630 +msgid "Series limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:633 +msgid "Limits the number of time series that get displayed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:638 +msgid "Sort By" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:640 +msgid "Metric used to define the top series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:648 +msgid "Rolling" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:651 +msgid "" +"Defines a rolling window function to apply, works along with the " +"[Periods] text box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:657 +msgid "Periods" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:659 +msgid "" +"Defines the size of the rolling window function, relative to the time " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:665 +#: superset/assets/javascripts/explore/stores/visTypes.js:101 +msgid "Series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:667 +msgid "" +"Defines the grouping of entities. Each series is shown as a specific " +"color on the chart and has a legend toggle" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:677 +msgid "Entity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:680 +msgid "This defines the element to be plotted on the chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:688 +#: superset/assets/javascripts/explore/stores/visTypes.js:459 +msgid "X Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:689 +msgid "Metric assigned to the [X] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:702 +#: superset/assets/javascripts/explore/stores/visTypes.js:466 +msgid "Y Axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:705 +msgid "Metric assigned to the [Y] axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:716 +msgid "Bubble Size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:729 +msgid "URL" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:730 +msgid "" +"The URL, this control is templated, so you can integrate {{ width }} " +"and/or {{ height }} in your URL string." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:737 +msgid "X Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:744 +msgid "Y Axis Label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:751 +msgid "Custom WHERE clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:753 +msgid "" +"The text in this box gets included in your query's WHERE clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:761 +msgid "Custom HAVING clause" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:763 +msgid "" +"The text in this box gets included in your query's HAVING clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:771 +msgid "Comparison Period Lag" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:773 +msgid "Based on granularity, number of time periods to compare against" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:778 +msgid "Comparison suffix" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:779 +msgid "Suffix to apply after the percentage display" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:785 +msgid "Table Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:790 +msgid "Timestamp Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:796 +msgid "Series Height" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:799 +msgid "Pixel height of each series" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:805 +msgid "Page Length" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:808 +msgid "Rows per page, 0 means no pagination" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:814 +#: superset/assets/javascripts/explore/stores/controls.jsx:824 +msgid "X Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:834 +msgid "Y Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:844 +msgid "Right Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:852 +msgid "Markup Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:857 +msgid "Pick your favorite markup language" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:862 +msgid "Rotation" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:865 +msgid "Rotation to apply to words in the cloud" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:870 +msgid "Line Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:875 +msgid "Line interpolation as defined by d3.js" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:880 +msgid "Label Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:887 +msgid "What should be shown on the label?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:892 +msgid "Code" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:893 +msgid "Put your code here" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:902 +msgid "Aggregation function" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:914 +msgid "" +"Aggregate function to apply when pivoting and computing the total rows " +"and columns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:921 +msgid "Font Size From" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:923 +msgid "Font size for the smallest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:929 +msgid "Font Size To" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:931 +msgid "Font size for the biggest value in the list" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:936 +msgid "Instant Filtering" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:940 +msgid "" +"Whether to apply filters as they change, or wait forusers to hit an " +"[Apply] button" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:947 +msgid "Range Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:950 +msgid "Whether to display the time range interactive selector" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:955 +msgid "Date Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:957 +msgid "Whether to include a time filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:962 +msgid "Data Table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:964 +msgid "Whether to display the interactive data table" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:969 +msgid "Search Box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:972 +msgid "Whether to include a client side search box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:977 +msgid "Table Filter" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:979 +msgid "Whether to apply filter when table cell is clicked" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:984 +msgid "Show Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:987 +msgid "Whether to display bubbles on top of countries" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:992 +msgid "Legend" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:995 +msgid "Whether to display the legend (toggles)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1000 +msgid "X bounds" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1003 +msgid "Whether to display the min and max values of the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1008 +msgid "Rich Tooltip" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1011 +msgid "The rich tooltip shows a list of all series for that point in time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1017 +msgid "Y Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1020 +msgid "Use a log scale for the Y axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1025 +msgid "X Log Scale" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1028 +msgid "Use a log scale for the X axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1033 +msgid "Donut" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1036 +msgid "Do you want a donut or a pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1041 +msgid "Put labels outside" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1044 +msgid "Put the labels outside the pie?" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1049 +msgid "Contribution" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1051 +msgid "Compute the contribution to the total" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1056 +msgid "Period Ratio" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1059 +msgid "" +"[integer] Number of period to compare against, this is relative to the " +"granularity selected" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1065 +msgid "Period Ratio Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1068 +msgid "" +"`factor` means (new/previous), `growth` is ((new/previous) - 1), `value` " +"is (new-previous)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1074 +msgid "Time Shift" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1076 +msgid "" +"Overlay a timeseries from a relative time period. Expects relative time " +"delta in natural language (example: 24 hours, 7 days, 56 weeks, 365 " +"days)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1084 +msgid "Subheader" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1085 +msgid "Description text that shows up below your Big Number" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1091 +msgid "label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1093 +msgid "" +"`count` is COUNT(*) if a group by is used. Numerical columns will be " +"aggregated with the aggregator. Non-numerical columns will be used to " +"label points. Leave empty to get a count of points in each cluster." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1104 +msgid "Map Style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1114 +msgid "Base layer map style" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1120 +msgid "Clustering Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1133 +msgid "" +"The radius (in pixels) the algorithm uses to define a cluster. Choose 0 " +"to turn off clustering, but beware that a large number of points (>1000) " +"will cause lag." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1140 +msgid "Point Radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1142 +msgid "" +"The radius of individual points (ones that are not in a cluster). Either " +"a numerical column or `Auto`, which scales the point based on the largest" +" cluster" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1152 +msgid "Point Radius Unit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1155 +msgid "The unit of measure for the specified point radius" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1160 +msgid "Opacity" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1163 +msgid "Opacity of all clusters, points, and labels. Between 0 and 1." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1169 +msgid "Zoom" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1172 +msgid "Zoom level of the map" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1178 +msgid "Default latitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1181 +msgid "Latitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1187 +msgid "Default longitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1190 +msgid "Longitude of default viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1196 +msgid "Live render" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1198 +msgid "Points and clusters will update as viewport is being changed" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1204 +msgid "RGB Color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1214 +msgid "The color for points and clusters in RGB" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1219 +msgid "Ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1221 +msgid "Ranges to highlight with shading" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1226 +msgid "Range labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1228 +msgid "Labels for the ranges" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1233 +msgid "Markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1235 +msgid "List of values to mark with triangles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1240 +msgid "Marker labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1242 +msgid "Labels for the markers" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1247 +msgid "Marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1249 +msgid "List of values to mark with lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1254 +msgid "Marker line labels" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1256 +msgid "Labels for the marker lines" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1283 +msgid "Slice ID" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1285 +msgid "The id of the active slice" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1290 +msgid "Cache Timeout (seconds)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1292 +msgid "The number of seconds before expiring the cache" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1297 +msgid "Order by entity id" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1298 +msgid "" +"Important! Select this if the table is not already sorted by entity id, " +"else there is no guarantee that all events for each entity are returned." +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1306 +msgid "Minimum leaf node event count" +msgstr "" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1309 +msgid "" +"Leaf nodes that represent fewer than this number of events will be " +"initially hidden in the visualization" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:7 +#: superset/assets/javascripts/explore/stores/visTypes.js:23 +msgid "Time" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:8 +#: superset/assets/javascripts/explore/stores/visTypes.js:24 +msgid "Time related form attributes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:15 +msgid "Datasource & Chart Type" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:36 +msgid "This section exposes ways to include snippets of SQL in your query" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:48 +msgid "Advanced Analytics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:49 +msgid "" +"This section contains options that allow for advanced analytical post " +"processing of query results" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:64 +msgid "" +"Filters are defined using comma delimited strings as in " +"Leave the value control empty to filter empty strings or " +"nullsFor filters with comma in values, wrap them in single quotesas in " +"" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:71 +msgid "Result Filters" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:72 +msgid "" +"The filters to apply after post-aggregation.Leave the value control empty" +" to filter empty strings or nulls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:84 +#: superset/assets/javascripts/explore/stores/visTypes.js:132 +#: superset/assets/javascripts/explore/stores/visTypes.js:163 +#: superset/assets/javascripts/explore/stores/visTypes.js:202 +#: superset/assets/javascripts/explore/stores/visTypes.js:235 +#: superset/assets/javascripts/explore/stores/visTypes.js:256 +#: superset/assets/javascripts/explore/stores/visTypes.js:393 +#: superset/assets/javascripts/explore/stores/visTypes.js:428 +#: superset/assets/javascripts/explore/stores/visTypes.js:447 +#: superset/assets/javascripts/explore/stores/visTypes.js:821 +msgid "Chart Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:104 +msgid "Breakdowns" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:105 +msgid "Defines how each series is broken down" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:141 +#: superset/assets/javascripts/explore/stores/visTypes.js:211 +#: superset/assets/javascripts/explore/stores/visTypes.js:265 +msgid "Axes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:159 +msgid "Dual Axis Line Chart" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:169 +msgid "Y Axis 1" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:175 +msgid "Y Axis 2" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:183 +msgid "Left Axis Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:184 +msgid "Choose a metric for left axis" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:187 +msgid "Left Axis Format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:286 +msgid "GROUP BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:287 +msgid "Use this section if you want a query that aggregates" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:294 +msgid "NOT GROUPED BY" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:295 +msgid "Use this section if you want to query atomic rows" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:302 +msgid "Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:453 +#: superset/assets/javascripts/explore/stores/visTypes.js:707 +msgid "Bubbles" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:545 +msgid "Histogram Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:553 +msgid "Numeric Column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:554 +msgid "Select the numeric column to draw the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:557 +msgid "No of Bins" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:558 +msgid "Select number of bins for the histogram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:578 +msgid "Primary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:579 +msgid "The primary metric is used to define the arc segment sizes" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:582 +msgid "Secondary Metric" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:583 +msgid "" +"This secondary metric is used to define the color as a ratio against the " +"primary metric. If the two metrics match, color is mapped level groups" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:588 +msgid "Hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:589 +msgid "This defines the level of the hierarchy" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:608 +#: superset/assets/javascripts/explore/stores/visTypes.js:635 +msgid "Source / Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:609 +#: superset/assets/javascripts/explore/stores/visTypes.js:636 +msgid "Choose a source and a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:626 +msgid "Force Layout" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:641 +msgid "Chord Diagram" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:655 +msgid "Choose a number format" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:658 +msgid "Source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:661 +msgid "Choose a source" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:664 +msgid "Target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:667 +msgid "Choose a target" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:686 +msgid "ISO 3166-1 codes of region/province/department" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:687 +msgid "" +"It's ISO 3166-1 of your region/province/department in your table. (see " +"documentation for list of ISO 3166-1)" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:690 +#: superset/connectors/druid/views.py:106 superset/connectors/sqla/views.py:130 +msgid "Metric" +msgstr "Metrica" + +#: superset/assets/javascripts/explore/stores/visTypes.js:691 +msgid "Metric to display bottom title" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:717 +msgid "Country Control" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:718 +msgid "3 letter code of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:721 +msgid "Metric for color" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:722 +msgid "Metric that defines the color of the country" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:725 +msgid "Bubble size" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:726 +msgid "Metric that defines the size of the bubble" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:732 +msgid "Filter Box" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:745 +msgid "Filter controls" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:747 +msgid "" +"The controls you want to filter on. Note that only columns checked as " +"\"filterable\" will show up on this list." +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:789 +msgid "Axis & Metrics" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:797 +msgid "Heatmap Options" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:817 +msgid "Horizon" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:843 +msgid "Points" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:850 +msgid "Labelling" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:857 +msgid "Visual Tweaks" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:865 +msgid "Viewport" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:875 +msgid "Longitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:876 +msgid "Column containing longitude data" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:879 +msgid "Latitude" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:880 +msgid "Column containing latitude data" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:883 +msgid "Cluster label aggregator" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:884 +msgid "" +"Aggregate function applied to the list of points in each cluster to " +"produce the cluster label." +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:888 +msgid "Tooltip" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:889 +msgid "Show a tooltip when hovering over points and clusters describing the label" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:893 +msgid "" +"One or many controls to group by. If grouping, latitude and longitude " +"columns must be present." +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:904 +msgid "Event definition" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:914 +msgid "Additional meta data" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:922 +msgid "Column containing entity ids" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:923 +msgid "e.g., a \"user id\" column" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:926 +msgid "Column containing event names" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:934 +msgid "Event count limit" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:935 +msgid "The maximum number of events to return, equivalent to number of rows" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:938 +msgid "Meta data" +msgstr "" + +#: superset/assets/javascripts/explore/stores/visTypes.js:939 +msgid "Select any columns for meta data inspection" +msgstr "" + +#: superset/assets/javascripts/modules/superset.js:134 +msgid "" +"The server could not be reached. You may want to verify your connection " +"and try again." +msgstr "" + +#: superset/assets/javascripts/modules/superset.js:137 +#, python-format +msgid "An unknown error occurred. (Status: %s )" +msgstr "" + +#: superset/assets/javascripts/modules/superset.js:162 +#, python-format +msgid "Query timeout - visualization query are set to time out at %s seconds." +msgstr "" -#: superset/viz.py:1000 -msgid "Time Series - Bar Chart" -msgstr "Serie Temporali - Grafico Barre" +#: superset/assets/javascripts/profile/components/App.jsx:24 +msgid "Favorites" +msgstr "" -#: superset/viz.py:1008 -msgid "Time Series - Percent Change" -msgstr "Serie Temporali - Cambiamento Percentuale" +#: superset/assets/javascripts/profile/components/App.jsx:30 +msgid "Created Content" +msgstr "" -#: superset/viz.py:1016 -msgid "Time Series - Stacked" -msgstr "Serie Temporali - Stacked" +#: superset/assets/javascripts/profile/components/App.jsx:37 +msgid "Recent Activity" +msgstr "" -#: superset/viz.py:1025 -msgid "Distribution - NVD3 - Pie Chart" -msgstr "Distribuzione - NVD3 - Grafico Torta" +#: superset/assets/javascripts/profile/components/App.jsx:42 +msgid "Security & Access" +msgstr "" -#: superset/viz.py:1043 -msgid "Histogram" -msgstr "Istogramma" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:33 +msgid "No slices" +msgstr "" -#: superset/viz.py:1068 -msgid "Distribution - Bar Chart" -msgstr "Distribuzione - Grafico Barre" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:49 +msgid "No dashboards" +msgstr "" -#: superset/viz.py:1135 -msgid "Sunburst" -msgstr "Sunburst" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:58 +#: superset/assets/javascripts/profile/components/Favorites.jsx:59 +#: superset/templates/superset/welcome.html:20 superset/views/core.py:367 +#: superset/views/core.py:527 +msgid "Dashboards" +msgstr "Elenco Dashboard" -#: superset/viz.py:1168 -msgid "Sankey" -msgstr "Sankey" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:61 +#: superset/assets/javascripts/profile/components/Favorites.jsx:62 +#: superset/views/core.py:403 superset/views/core.py:472 +msgid "Slices" +msgstr "Slice" -#: superset/viz.py:1217 -msgid "Directed Force Layout" -msgstr "Disposizione a Forza Diretta" +#: superset/assets/javascripts/profile/components/Favorites.jsx:34 +msgid "No favorite slices yet, go click on stars!" +msgstr "" -#: superset/viz.py:1238 -msgid "Country Map" -msgstr "Mappa della Nazione" +#: superset/assets/javascripts/profile/components/Favorites.jsx:50 +msgid "No favorite dashboards yet, go click on stars!" +msgstr "" -#: superset/viz.py:1267 -msgid "World Map" -msgstr "Mappa del Mondo" +#: superset/assets/javascripts/profile/components/Security.jsx:14 +msgid "Roles" +msgstr "" -#: superset/viz.py:1317 -msgid "Filters" -msgstr "Filtri" +#: superset/assets/javascripts/profile/components/Security.jsx:23 +#: superset/views/core.py:279 +msgid "Databases" +msgstr "" -#: superset/viz.py:1352 -msgid "iFrame" -msgstr "iFrame" +#: superset/assets/javascripts/profile/components/Security.jsx:34 +msgid "Datasources" +msgstr "" -#: superset/viz.py:1369 -msgid "Parallel Coordinates" -msgstr "Coordinate Parallele" +#: superset/assets/javascripts/profile/components/UserInfo.jsx:18 +msgid "Profile picture provided by Gravatar" +msgstr "" -#: superset/viz.py:1394 -msgid "Heatmap" -msgstr "Mappa di Intensità" +#: superset/assets/javascripts/profile/components/UserInfo.jsx:33 +msgid "joined" +msgstr "" -#: superset/viz.py:1445 -msgid "Horizon Charts" -msgstr "Grafici d'orizzonte" +#: superset/assets/javascripts/profile/components/UserInfo.jsx:43 +msgid "id:" +msgstr "" -#: superset/viz.py:1456 -msgid "Mapbox" -msgstr "Mapbox" +#: superset/assets/visualizations/EventFlow.jsx:56 +msgid "Sorry, there appears to be no data" +msgstr "" + +#: superset/assets/visualizations/filter_box.jsx:88 +#, python-format +msgid "Select [%s]" +msgstr "" -#: superset/connectors/druid/models.py:950 +#: superset/connectors/druid/models.py:970 msgid "No data was returned." msgstr "Nessun dato restituito." -#: superset/connectors/druid/views.py:36 superset/connectors/sqla/views.py:73 +#: superset/connectors/druid/views.py:28 +msgid "List Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:29 +msgid "Show Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:30 +msgid "Add Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:31 +msgid "Edit Druid Column" +msgstr "" + +#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 msgid "Column" msgstr "Colonna" -#: superset/connectors/druid/views.py:37 superset/connectors/druid/views.py:96 -#: superset/connectors/sqla/views.py:119 +#: superset/connectors/druid/views.py:44 superset/connectors/druid/views.py:109 +#: superset/connectors/sqla/views.py:133 msgid "Type" msgstr "Tipo" -#: superset/connectors/druid/views.py:38 superset/views/core.py:305 -#: superset/views/core.py:354 -msgid "Datasource" -msgstr "Sorgente Dati" - -#: superset/connectors/druid/views.py:39 superset/connectors/sqla/views.py:76 +#: superset/connectors/druid/views.py:46 superset/connectors/sqla/views.py:84 msgid "Groupable" msgstr "Raggruppabile" -#: superset/connectors/druid/views.py:40 superset/connectors/sqla/views.py:77 +#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:85 msgid "Filterable" msgstr "Filtrabile" -#: superset/connectors/druid/views.py:41 superset/connectors/sqla/views.py:79 +#: superset/connectors/druid/views.py:48 superset/connectors/sqla/views.py:87 msgid "Count Distinct" msgstr "Count Distinct" -#: superset/connectors/druid/views.py:42 superset/connectors/sqla/views.py:80 +#: superset/connectors/druid/views.py:49 superset/connectors/sqla/views.py:88 msgid "Sum" msgstr "Sum" -#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 -msgid "Min" -msgstr "Min" - -#: superset/connectors/druid/views.py:44 superset/connectors/sqla/views.py:82 -msgid "Max" -msgstr "Max" - -#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:42 +#: superset/connectors/druid/views.py:54 superset/connectors/sqla/views.py:50 msgid "" "Whether this column is exposed in the `Filters` section of the explore " "view." @@ -286,7 +2607,23 @@ msgstr "" "Se questa colonna è esposta nella sezione `Filtri` della vista " "esplorazione." -#: superset/connectors/druid/views.py:87 superset/connectors/sqla/views.py:101 +#: superset/connectors/druid/views.py:80 +msgid "List Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:81 +msgid "Show Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:82 +msgid "Add Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:83 +msgid "Edit Druid Metric" +msgstr "" + +#: superset/connectors/druid/views.py:100 superset/connectors/sqla/views.py:115 msgid "" "Whether the access to this metric is restricted to certain roles. Only " "roles with the permission 'metric access on XXX (the name of this " @@ -296,70 +2633,92 @@ msgstr "" "ruoli con l'autorizzazione 'accesso metrico su XXX (il nome di questa " "metrica)' possono accedervi" -#: superset/connectors/druid/views.py:93 superset/connectors/sqla/views.py:116 -msgid "Metric" -msgstr "Metrica" - -#: superset/connectors/druid/views.py:94 superset/connectors/druid/views.py:204 -#: superset/connectors/sqla/views.py:75 superset/connectors/sqla/views.py:117 -#: superset/views/core.py:355 -msgid "Description" -msgstr "Descrizione" - -#: superset/connectors/druid/views.py:95 superset/connectors/sqla/views.py:74 -#: superset/connectors/sqla/views.py:118 +#: superset/connectors/druid/views.py:108 superset/connectors/sqla/views.py:82 +#: superset/connectors/sqla/views.py:132 msgid "Verbose Name" msgstr "Nome Completo" -#: superset/connectors/druid/views.py:97 superset/views/core.py:534 +#: superset/connectors/druid/views.py:110 superset/views/core.py:554 msgid "JSON" msgstr "JSON" -#: superset/connectors/druid/views.py:98 +#: superset/connectors/druid/views.py:111 msgid "Druid Datasource" msgstr "Sorgente Dati Druid" -#: superset/connectors/druid/views.py:123 -#: superset/connectors/druid/views.py:203 +#: superset/connectors/druid/views.py:128 +msgid "List Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:129 +msgid "Show Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:130 +msgid "Add Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:131 +msgid "Edit Druid Cluster" +msgstr "" + +#: superset/connectors/druid/views.py:142 +#: superset/connectors/druid/views.py:228 msgid "Cluster" msgstr "Cluster" -#: superset/connectors/druid/views.py:124 +#: superset/connectors/druid/views.py:143 msgid "Coordinator Host" msgstr "Host Coordinatore" -#: superset/connectors/druid/views.py:125 +#: superset/connectors/druid/views.py:144 msgid "Coordinator Port" msgstr "Porta Coordinatore" -#: superset/connectors/druid/views.py:126 +#: superset/connectors/druid/views.py:145 msgid "Coordinator Endpoint" msgstr "Endpoint Coordinatore" -#: superset/connectors/druid/views.py:127 +#: superset/connectors/druid/views.py:146 msgid "Broker Host" msgstr "Host Broker" -#: superset/connectors/druid/views.py:128 +#: superset/connectors/druid/views.py:147 msgid "Broker Port" msgstr "Porta Broker" -#: superset/connectors/druid/views.py:129 +#: superset/connectors/druid/views.py:148 msgid "Broker Endpoint" msgstr "Endpoint Broker" -#: superset/connectors/druid/views.py:144 +#: superset/connectors/druid/views.py:163 msgid "Druid Clusters" msgstr "" -#: superset/connectors/druid/views.py:147 -#: superset/connectors/druid/views.py:243 -#: superset/connectors/druid/views.py:282 superset/connectors/sqla/views.py:261 -#: superset/views/core.py:274 +#: superset/connectors/druid/views.py:166 +#: superset/connectors/druid/views.py:268 +#: superset/connectors/druid/views.py:307 superset/connectors/sqla/views.py:281 +#: superset/views/core.py:282 msgid "Sources" msgstr "" -#: superset/connectors/druid/views.py:172 superset/connectors/sqla/views.py:155 +#: superset/connectors/druid/views.py:173 +msgid "List Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:174 +msgid "Show Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:175 +msgid "Add Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:176 +msgid "Edit Druid Datasource" +msgstr "" + +#: superset/connectors/druid/views.py:197 superset/connectors/sqla/views.py:175 msgid "" "The list of slices associated with this table. By altering this " "datasource, you may change how these associated slices behave. Also note " @@ -374,11 +2733,11 @@ msgstr "" "qualora si modifica un'origine dati. Se vuoi modificare l'origine dati " "per una slide, devi sovrascriverla dal 'vista di esplorazione'" -#: superset/connectors/druid/views.py:180 superset/connectors/sqla/views.py:163 +#: superset/connectors/druid/views.py:205 superset/connectors/sqla/views.py:183 msgid "Timezone offset (in hours) for this datasource" msgstr "Timezone offset (in ore) per questa sorgente dati" -#: superset/connectors/druid/views.py:184 +#: superset/connectors/druid/views.py:209 msgid "" "Time expression to use as a predicate when retrieving distinct values to " "populate the filter component. Only applies when `Enable Filter Select` " @@ -391,7 +2750,7 @@ msgstr "" "inserisce `7 giorni fa`, l'elenco distinto di valori nel filtro verrà " "popolato in base al valore distinto della settimana passata" -#: superset/connectors/druid/views.py:191 superset/connectors/sqla/views.py:185 +#: superset/connectors/druid/views.py:216 superset/connectors/sqla/views.py:205 msgid "" "Whether to populate the filter's dropdown in the explore view's filter " "section with a list of distinct values fetched from the backend on the " @@ -400,7 +2759,7 @@ msgstr "" "Usato per popolare la finestra a cascata dei filtri dall'elenco dei " "valori distinti prelevati dal backend al volo" -#: superset/connectors/druid/views.py:195 superset/connectors/sqla/views.py:199 +#: superset/connectors/druid/views.py:220 superset/connectors/sqla/views.py:219 msgid "" "Redirects to this endpoint when clicking on the datasource from the " "datasource list" @@ -408,48 +2767,48 @@ msgstr "" "Rinvia a questo endpoint al clic sulla sorgente dati dall'elenco delle " "sorgenti dati" -#: superset/connectors/druid/views.py:201 superset/connectors/sqla/views.py:192 +#: superset/connectors/druid/views.py:226 superset/connectors/sqla/views.py:212 msgid "Associated Slices" msgstr "Slice associate" -#: superset/connectors/druid/views.py:202 +#: superset/connectors/druid/views.py:227 msgid "Data Source" msgstr "Sorgente Dati" -#: superset/connectors/druid/views.py:205 +#: superset/connectors/druid/views.py:230 msgid "Owner" msgstr "Proprietario" -#: superset/connectors/druid/views.py:206 +#: superset/connectors/druid/views.py:231 msgid "Is Hidden" msgstr "è nascosto" -#: superset/connectors/druid/views.py:207 superset/connectors/sqla/views.py:197 +#: superset/connectors/druid/views.py:232 superset/connectors/sqla/views.py:217 msgid "Enable Filter Select" msgstr "Abilita il filtro di Select" -#: superset/connectors/druid/views.py:208 +#: superset/connectors/druid/views.py:233 msgid "Default Endpoint" msgstr "Endpoint predefinito" -#: superset/connectors/druid/views.py:209 +#: superset/connectors/druid/views.py:234 msgid "Time Offset" msgstr "Offset temporale" -#: superset/connectors/druid/views.py:210 superset/connectors/sqla/views.py:203 -#: superset/views/core.py:241 superset/views/core.py:351 +#: superset/connectors/druid/views.py:235 superset/connectors/sqla/views.py:223 +#: superset/views/core.py:249 superset/views/core.py:365 msgid "Cache Timeout" msgstr "Cache Timeout" -#: superset/connectors/druid/views.py:241 +#: superset/connectors/druid/views.py:266 msgid "Druid Datasources" msgstr "" -#: superset/connectors/druid/views.py:279 +#: superset/connectors/druid/views.py:304 msgid "Refresh Druid Metadata" msgstr "" -#: superset/connectors/sqla/models.py:388 +#: superset/connectors/sqla/models.py:386 msgid "" "Datetime column not provided as part table configuration and is required " "by this type of chart" @@ -457,11 +2816,27 @@ msgstr "" "la colonna Datetime è necessaria per questo tipo di grafico. Nella " "configurazione della tabella però non è stata definita" -#: superset/connectors/sqla/models.py:393 +#: superset/connectors/sqla/models.py:391 msgid "Metric '{}' is not valid" msgstr "Metrica '{}' non valida" -#: superset/connectors/sqla/views.py:38 +#: superset/connectors/sqla/views.py:28 +msgid "List Columns" +msgstr "" + +#: superset/connectors/sqla/views.py:29 +msgid "Show Column" +msgstr "" + +#: superset/connectors/sqla/views.py:30 +msgid "Add Column" +msgstr "" + +#: superset/connectors/sqla/views.py:31 +msgid "Edit Column" +msgstr "" + +#: superset/connectors/sqla/views.py:46 msgid "" "Whether to make this column available as a [Time Granularity] option, " "column has to be DATETIME or DATETIME-like" @@ -469,7 +2844,7 @@ msgstr "" "Se rendere disponibile questa colonna come opzione [Time Granularity], la" " colonna deve essere di tipo DATETIME o simile" -#: superset/connectors/sqla/views.py:45 +#: superset/connectors/sqla/views.py:53 msgid "" "The data type that was inferred by the database. It may be necessary to " "input a type manually for expression-defined columns in some cases. In " @@ -480,42 +2855,69 @@ msgstr "" "dall'espressione. Nella maggior parte dei casi gli utenti non hanno " "bisogno di fare questa modifica." -#: superset/connectors/sqla/views.py:78 superset/connectors/sqla/views.py:121 -#: superset/connectors/sqla/views.py:193 superset/views/core.py:361 -msgid "Table" -msgstr "Tabella" - -#: superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:91 msgid "Expression" msgstr "Espressione" -#: superset/connectors/sqla/views.py:84 +#: superset/connectors/sqla/views.py:92 msgid "Is temporal" msgstr "è temporale" -#: superset/connectors/sqla/views.py:85 +#: superset/connectors/sqla/views.py:93 msgid "Datetime Format" msgstr "Formato Datetime" -#: superset/connectors/sqla/views.py:86 +#: superset/connectors/sqla/views.py:94 msgid "Database Expression" msgstr "Espressione del Database" -#: superset/connectors/sqla/views.py:120 +#: superset/connectors/sqla/views.py:102 +msgid "List Metrics" +msgstr "" + +#: superset/connectors/sqla/views.py:103 +msgid "Show Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:104 +msgid "Add Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:105 +msgid "Edit Metric" +msgstr "" + +#: superset/connectors/sqla/views.py:134 msgid "SQL Expression" msgstr "Espressione SQL" -#: superset/connectors/sqla/views.py:164 +#: superset/connectors/sqla/views.py:152 +msgid "List Tables" +msgstr "" + +#: superset/connectors/sqla/views.py:153 +msgid "Show Table" +msgstr "" + +#: superset/connectors/sqla/views.py:154 +msgid "Add Table" +msgstr "" + +#: superset/connectors/sqla/views.py:155 +msgid "Edit Table" +msgstr "" + +#: superset/connectors/sqla/views.py:184 msgid "Name of the table that exists in the source database" msgstr "Nome delle tabella esistente nella sorgente del database" -#: superset/connectors/sqla/views.py:166 +#: superset/connectors/sqla/views.py:186 msgid "Schema, as used only in some databases like Postgres, Redshift and DB2" msgstr "" "Schema, va utilizzato soltanto in alcuni database come Postgres, Redshift" " e DB2" -#: superset/connectors/sqla/views.py:172 +#: superset/connectors/sqla/views.py:192 msgid "" "This fields acts a Superset view, meaning that Superset will run a query " "against this string as a subquery." @@ -523,7 +2925,7 @@ msgstr "" "Questo campo agisce come una vista Superset, il che vuol dire che " "Superset eseguirà una query su questa stringa come sotto-query." -#: superset/connectors/sqla/views.py:176 +#: superset/connectors/sqla/views.py:196 msgid "" "Predicate applied when fetching distinct value to populate the filter " "control component. Supports jinja template syntax. Applies only when " @@ -534,31 +2936,31 @@ msgstr "" "jinja. È utilizzabile solo quando è abilitata l'opzione \"Abilita " "selezione filtro\"." -#: superset/connectors/sqla/views.py:182 +#: superset/connectors/sqla/views.py:202 msgid "Redirects to this endpoint when clicking on the table from the table list" msgstr "Reinvia a questo endpoint al clic sulla tabella dall'elenco delle tabelle" -#: superset/connectors/sqla/views.py:194 +#: superset/connectors/sqla/views.py:214 msgid "Changed By" msgstr "Modificato da" -#: superset/connectors/sqla/views.py:195 superset/views/core.py:237 +#: superset/connectors/sqla/views.py:215 superset/views/core.py:245 msgid "Database" msgstr "Database" -#: superset/connectors/sqla/views.py:196 superset/views/core.py:239 +#: superset/connectors/sqla/views.py:216 superset/views/core.py:247 msgid "Last Changed" msgstr "Ultima Modifica" -#: superset/connectors/sqla/views.py:198 +#: superset/connectors/sqla/views.py:218 msgid "Schema" msgstr "Schema" -#: superset/connectors/sqla/views.py:202 +#: superset/connectors/sqla/views.py:222 msgid "Offset" msgstr "Offset" -#: superset/connectors/sqla/views.py:235 +#: superset/connectors/sqla/views.py:255 msgid "" "The table was created. As part of this two phase configuration process, " "you should now click the edit button by the new table to configure it." @@ -567,7 +2969,7 @@ msgstr "" "fasi, è necessario andare sul pulsante di modifica della nuova tabella " "per configurarla." -#: superset/connectors/sqla/views.py:259 +#: superset/connectors/sqla/views.py:279 msgid "Tables" msgstr "" @@ -600,19 +3002,10 @@ msgstr "Non hai i permessi per accedere alla/e sorgente/i dati: %(name)s." msgid "Request Permissions" msgstr "Richiesta di Permessi" -#: superset/templates/superset/request_access.html:16 -msgid "Cancel" -msgstr "Annulla" - #: superset/templates/superset/welcome.html:10 msgid "Welcome!" msgstr "" -#: superset/templates/superset/welcome.html:20 superset/views/core.py:353 -#: superset/views/core.py:507 -msgid "Dashboards" -msgstr "Elenco Dashboard" - #: superset/templates/superset/models/database/macros.html:4 msgid "Test Connection" msgstr "Testa la Connessione" @@ -630,45 +3023,61 @@ msgstr "" msgid "Delete all Really?" msgstr "" -#: superset/views/core.py:55 +#: superset/views/core.py:57 msgid "This endpoint requires the `all_datasource_access` permission" msgstr "" -#: superset/views/core.py:57 +#: superset/views/core.py:59 msgid "The datasource seems to have been deleted" msgstr "" -#: superset/views/core.py:58 +#: superset/views/core.py:60 msgid "The access requests seem to have been deleted" msgstr "" -#: superset/views/core.py:60 +#: superset/views/core.py:62 msgid "The user seems to have been deleted" msgstr "" -#: superset/views/core.py:61 +#: superset/views/core.py:63 msgid "You don't have access to this datasource" msgstr "" -#: superset/views/core.py:65 +#: superset/views/core.py:67 #, python-format msgid "" "This view requires the database %(name)s or `all_datasource_access` " "permission" msgstr "" -#: superset/views/core.py:70 +#: superset/views/core.py:72 #, python-format msgid "" "This endpoint requires the datasource %(name)s, database or " "`all_datasource_access` permission" msgstr "" -#: superset/views/core.py:205 +#: superset/views/core.py:175 +msgid "List Databases" +msgstr "" + +#: superset/views/core.py:176 +msgid "Show Database" +msgstr "" + +#: superset/views/core.py:177 +msgid "Add Database" +msgstr "" + +#: superset/views/core.py:178 +msgid "Edit Database" +msgstr "" + +#: superset/views/core.py:213 msgid "Expose this DB in SQL Lab" msgstr "Esponi questo DB in SQL Lab" -#: superset/views/core.py:206 +#: superset/views/core.py:214 msgid "" "Allow users to run synchronous queries, this is the default and should " "work well for queries that can be executed within a web request scope " @@ -678,7 +3087,7 @@ msgstr "" "predefinita e dovrebbe funzionare bene per query che possono essere " "eseguite con una richiesta web (<-1 minuto)" -#: superset/views/core.py:210 +#: superset/views/core.py:218 msgid "" "Allow users to run queries, against an async backend. This assumes that " "you have a Celery worker setup as well as a results backend." @@ -687,11 +3096,11 @@ msgstr "" "Questo presuppone che si abbia una installazione funzionante di Celery " "nel backend." -#: superset/views/core.py:214 +#: superset/views/core.py:222 msgid "Allow CREATE TABLE AS option in SQL Lab" msgstr "Permetti l'opzione CREATE TABLE AS in SQL Lab" -#: superset/views/core.py:215 +#: superset/views/core.py:223 msgid "" "Allow users to run non-SELECT statements (UPDATE, DELETE, CREATE, ...) in" " SQL Lab" @@ -699,7 +3108,7 @@ msgstr "" "Permetti agli utenti di eseguire dichiarazioni diverse da SELECT (UPDATE," " DELETE, CREATE, ...) nel SQL Lab" -#: superset/views/core.py:219 +#: superset/views/core.py:227 msgid "" "When allowing CREATE TABLE AS option in SQL Lab, this option forces the " "table to be created in this schema" @@ -707,77 +3116,89 @@ msgstr "" "Se si abilita l'opzione CREATE TABLE AS in SQL Lab, verrà forzata la " "creazione della tabella con questo schema" -#: superset/views/core.py:233 +#: superset/views/core.py:241 msgid "Expose in SQL Lab" msgstr "Esponi in SQL Lab" -#: superset/views/core.py:234 +#: superset/views/core.py:242 msgid "Allow CREATE TABLE AS" msgstr "Permetti CREATE TABLE AS" -#: superset/views/core.py:235 +#: superset/views/core.py:243 msgid "Allow DML" msgstr "Permetti DML" -#: superset/views/core.py:236 +#: superset/views/core.py:244 msgid "CTAS Schema" msgstr "Schema CTAS" -#: superset/views/core.py:238 superset/views/core.py:352 -#: superset/views/core.py:454 superset/views/core.py:518 +#: superset/views/core.py:246 superset/views/core.py:366 +#: superset/views/core.py:474 superset/views/core.py:538 msgid "Creator" msgstr "Creatore" -#: superset/views/core.py:240 +#: superset/views/core.py:248 msgid "SQLAlchemy URI" msgstr "URI SQLAlchemy" -#: superset/views/core.py:242 +#: superset/views/core.py:250 msgid "Extra" msgstr "Extra" -#: superset/views/core.py:260 +#: superset/views/core.py:268 msgid "Import Dashboards" msgstr "" -#: superset/views/core.py:264 superset/views/core.py:2279 -#: superset/views/sql_lab.py:22 +#: superset/views/core.py:272 superset/views/core.py:2318 +#: superset/views/sql_lab.py:23 msgid "Manage" msgstr "" -#: superset/views/core.py:271 -msgid "Databases" -msgstr "" - -#: superset/views/core.py:302 superset/views/core.py:531 +#: superset/views/core.py:310 superset/views/core.py:551 msgid "User" msgstr "Utente" -#: superset/views/core.py:303 +#: superset/views/core.py:311 msgid "User Roles" msgstr "Ruoli Utente" -#: superset/views/core.py:304 +#: superset/views/core.py:312 msgid "Database URL" msgstr "URL del Database" -#: superset/views/core.py:306 +#: superset/views/core.py:314 msgid "Roles to grant" msgstr "Ruoli per l'accesso" -#: superset/views/core.py:307 +#: superset/views/core.py:315 msgid "Created On" msgstr "Creato il" -#: superset/views/core.py:313 +#: superset/views/core.py:321 msgid "Access requests" msgstr "" -#: superset/views/core.py:315 superset/views/core.py:542 +#: superset/views/core.py:323 superset/views/core.py:562 msgid "Security" msgstr "" -#: superset/views/core.py:340 +#: superset/views/core.py:330 +msgid "List Slices" +msgstr "" + +#: superset/views/core.py:331 +msgid "Show Slice" +msgstr "" + +#: superset/views/core.py:332 +msgid "Add Slice" +msgstr "" + +#: superset/views/core.py:333 +msgid "Edit Slice" +msgstr "" + +#: superset/views/core.py:354 msgid "" "These parameters are generated dynamically when clicking the save or " "overwrite button in the explore view. This JSON object is exposed here " @@ -789,39 +3210,43 @@ msgstr "" "JSON è esposto qui per referenza e per utenti esperti che vogliono " "modificare parametri specifici." -#: superset/views/core.py:345 +#: superset/views/core.py:359 msgid "Duration (in seconds) of the caching timeout for this slice." msgstr "Durata (in secondi) per il timeout della cache per questa slice." -#: superset/views/core.py:356 +#: superset/views/core.py:370 msgid "Last Modified" msgstr "Ultima Modifica" -#: superset/views/core.py:357 superset/views/core.py:453 +#: superset/views/core.py:371 superset/views/core.py:473 msgid "Owners" msgstr "Proprietari" -#: superset/views/core.py:358 +#: superset/views/core.py:372 msgid "Parameters" msgstr "Parametri" -#: superset/views/core.py:359 superset/views/core.py:401 +#: superset/views/core.py:373 superset/views/core.py:415 msgid "Slice" msgstr "Slice" -#: superset/views/core.py:360 -msgid "Name" -msgstr "Nome" +#: superset/views/core.py:432 +msgid "List Dashboards" +msgstr "" -#: superset/views/core.py:362 -msgid "Visualization Type" -msgstr "Tipo di Visualizzazione" +#: superset/views/core.py:433 +msgid "Show Dashboard" +msgstr "" -#: superset/views/core.py:389 superset/views/core.py:452 -msgid "Slices" -msgstr "Slice" +#: superset/views/core.py:434 +msgid "Add Dashboard" +msgstr "" + +#: superset/views/core.py:435 +msgid "Edit Dashboard" +msgstr "" -#: superset/views/core.py:426 +#: superset/views/core.py:446 msgid "" "This json object describes the positioning of the widgets in the " "dashboard. It is dynamically generated when adjusting the widgets size " @@ -832,7 +3257,7 @@ msgstr "" "la dimensione usando la funzione di drag & drop nella vista della " "dashboard. " -#: superset/views/core.py:431 +#: superset/views/core.py:451 msgid "" "The css for individual dashboards can be altered here, or in the " "dashboard view where changes are immediately visible" @@ -840,11 +3265,11 @@ msgstr "" "Il CSS di ogni singola dashboard può essere modificato qui, oppure nella " "vista della dashboard dove i cambiamenti sono visibili immediatamente" -#: superset/views/core.py:435 +#: superset/views/core.py:455 msgid "To get a readable URL for your dashboard" msgstr "ottenere una URL leggibile per la tua dashboard" -#: superset/views/core.py:436 +#: superset/views/core.py:456 msgid "" "This JSON object is generated dynamically when clicking the save or " "overwrite button in the dashboard view. It is exposed here for reference " @@ -855,181 +3280,133 @@ msgstr "" "qui come riferimento e per gli utenti esperti che vogliono modificare " "parametri specifici." -#: superset/views/core.py:441 +#: superset/views/core.py:461 msgid "Owners is a list of users who can alter the dashboard." msgstr "Proprietari è una lista di utenti che può alterare la dashboard." -#: superset/views/core.py:449 superset/views/core.py:516 +#: superset/views/core.py:469 superset/views/core.py:536 msgid "Dashboard" msgstr "Dashboard" -#: superset/views/core.py:450 superset/views/core.py:517 -msgid "Title" -msgstr "Titolo" - -#: superset/views/core.py:451 +#: superset/views/core.py:471 msgid "Slug" msgstr "Slug" -#: superset/views/core.py:455 superset/views/core.py:519 -msgid "Modified" -msgstr "Modificato" - -#: superset/views/core.py:456 +#: superset/views/core.py:476 msgid "Position JSON" msgstr "Posizione del JSON" -#: superset/views/core.py:457 -msgid "CSS" -msgstr "CSS" - -#: superset/views/core.py:458 +#: superset/views/core.py:478 msgid "JSON Metadata" msgstr "Metadati JSON" -#: superset/views/core.py:459 +#: superset/views/core.py:479 msgid "Underlying Tables" msgstr "Tabelle sottostanti" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export" msgstr "" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export dashboards?" msgstr "" -#: superset/views/core.py:532 +#: superset/views/core.py:552 msgid "Action" msgstr "Azione" -#: superset/views/core.py:533 +#: superset/views/core.py:553 msgid "dttm" msgstr "dttm" -#: superset/views/core.py:540 +#: superset/views/core.py:560 msgid "Action Log" msgstr "" -#: superset/views/core.py:770 +#: superset/views/core.py:790 msgid "Access was requested" msgstr "" -#: superset/views/core.py:831 +#: superset/views/core.py:851 #, python-format msgid "" "%(user)s was granted the role %(role)s that gives access to the " "%(datasource)s" msgstr "" -#: superset/views/core.py:847 +#: superset/views/core.py:867 #, python-format msgid "Role %(r)s was extended to provide the access to the datasource %(ds)s" msgstr "" -#: superset/views/core.py:856 +#: superset/views/core.py:876 msgid "You have no permission to approve this request" msgstr "" -#: superset/views/core.py:1589 +#: superset/views/core.py:1609 msgid "" "Malformed request. slice_id or table_name and db_name arguments are " "expected" msgstr "" -#: superset/views/core.py:1595 +#: superset/views/core.py:1615 #, python-format msgid "Slice %(id)s not found" msgstr "" -#: superset/views/core.py:1607 +#: superset/views/core.py:1627 #, python-format msgid "Table %(t)s wasn't found in the database %(d)s" msgstr "" -#: superset/views/core.py:1741 +#: superset/views/core.py:1761 #, python-format msgid "Can't find User '%(name)s', please ask your admin to create one." msgstr "" -#: superset/views/core.py:1748 +#: superset/views/core.py:1768 #, python-format msgid "Can't find DruidCluster with cluster_name = '%(name)s'" msgstr "" -#: superset/views/core.py:2276 +#: superset/views/core.py:2315 msgid "CSS Templates" msgstr "" -#: superset/views/core.py:2286 +#: superset/views/core.py:2325 msgid "SQL Editor" msgstr "Editor SQL" -#: superset/views/core.py:2291 superset/views/core.py:2300 +#: superset/views/core.py:2330 superset/views/core.py:2339 msgid "SQL Lab" msgstr "" -#: superset/views/core.py:2295 +#: superset/views/core.py:2334 msgid "Query Search" msgstr "Ricerca Query" -#: superset/views/sql_lab.py:20 +#: superset/views/sql_lab.py:21 msgid "Queries" msgstr "" -#: superset/views/sql_lab.py:55 -msgid "Saved Queries" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 -msgid "Please enter a slice name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 -msgid "Please select a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 -msgid "Please enter a dashboard name" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 -msgid "Save A Slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 -msgid "Overwrite slice" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 -msgid "Save as" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 -msgid "[slice name]" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 -msgid "Do not add to a dashboard" -msgstr "" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 -msgid "Add slice to existing dashboard" +#: superset/views/sql_lab.py:30 +msgid "List Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 -msgid "Add to new dashboard" +#: superset/views/sql_lab.py:31 +msgid "Show Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 -msgid "[dashboard name]" +#: superset/views/sql_lab.py:32 +msgid "Add Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 -msgid "Save" +#: superset/views/sql_lab.py:33 +msgid "Edit Saved Query" msgstr "" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 -msgid "Save & go to dashboard" +#: superset/views/sql_lab.py:62 +msgid "Saved Queries" msgstr "" diff --git a/superset/translations/zh/LC_MESSAGES/messages.mo b/superset/translations/zh/LC_MESSAGES/messages.mo index a23a0d28bf58ee0132e5327ac50386c99fe59f57..fdb20005aea12276cd328fd23ab3745e8ea623b0 100644 GIT binary patch literal 54463 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\n" "Language: zh\n" @@ -18,516 +18,2922 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:225 -#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:317 -#: superset/db_engine_specs.py:362 superset/db_engine_specs.py:770 -#: superset/db_engine_specs.py:806 superset/db_engine_specs.py:838 -#: superset/db_engine_specs.py:884 +#: superset/assets/javascripts/explore/stores/controls.jsx:491 +#: superset/db_engine_specs.py:192 superset/db_engine_specs.py:223 +#: superset/db_engine_specs.py:267 superset/db_engine_specs.py:315 +#: superset/db_engine_specs.py:360 superset/db_engine_specs.py:810 +#: superset/db_engine_specs.py:846 superset/db_engine_specs.py:878 +#: superset/db_engine_specs.py:924 superset/db_engine_specs.py:961 msgid "Time Column" msgstr "时间字段" -#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:226 -#: superset/db_engine_specs.py:318 superset/db_engine_specs.py:363 -#: superset/db_engine_specs.py:771 superset/db_engine_specs.py:839 +#: superset/db_engine_specs.py:193 superset/db_engine_specs.py:224 +#: superset/db_engine_specs.py:316 superset/db_engine_specs.py:361 +#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:879 +#: superset/db_engine_specs.py:962 msgid "second" msgstr "秒" -#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:229 -#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 -#: superset/db_engine_specs.py:773 superset/db_engine_specs.py:807 -#: superset/db_engine_specs.py:841 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:194 superset/db_engine_specs.py:227 +#: superset/db_engine_specs.py:319 superset/db_engine_specs.py:363 +#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:881 superset/db_engine_specs.py:925 +#: superset/db_engine_specs.py:963 msgid "minute" msgstr "分" -#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:233 -#: superset/db_engine_specs.py:323 superset/db_engine_specs.py:367 -#: superset/db_engine_specs.py:779 superset/db_engine_specs.py:809 -#: superset/db_engine_specs.py:843 superset/db_engine_specs.py:891 +#: superset/db_engine_specs.py:195 superset/db_engine_specs.py:231 +#: superset/db_engine_specs.py:321 superset/db_engine_specs.py:365 +#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:849 +#: superset/db_engine_specs.py:883 superset/db_engine_specs.py:931 +#: superset/db_engine_specs.py:964 msgid "hour" msgstr "小时" -#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:238 -#: superset/db_engine_specs.py:270 superset/db_engine_specs.py:325 -#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:781 -#: superset/db_engine_specs.py:811 superset/db_engine_specs.py:845 -#: superset/db_engine_specs.py:893 +#: superset/db_engine_specs.py:196 superset/db_engine_specs.py:236 +#: superset/db_engine_specs.py:268 superset/db_engine_specs.py:323 +#: superset/db_engine_specs.py:367 superset/db_engine_specs.py:821 +#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:885 +#: superset/db_engine_specs.py:933 superset/db_engine_specs.py:965 msgid "day" msgstr "天" -#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:244 -#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 -#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:783 -#: superset/db_engine_specs.py:813 superset/db_engine_specs.py:847 +#: superset/db_engine_specs.py:197 superset/db_engine_specs.py:242 +#: superset/db_engine_specs.py:269 superset/db_engine_specs.py:324 +#: superset/db_engine_specs.py:369 superset/db_engine_specs.py:823 +#: superset/db_engine_specs.py:853 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:966 msgid "week" msgstr "周" -#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:246 -#: superset/db_engine_specs.py:273 superset/db_engine_specs.py:328 -#: superset/db_engine_specs.py:373 superset/db_engine_specs.py:785 -#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:849 -#: superset/db_engine_specs.py:895 +#: superset/db_engine_specs.py:198 superset/db_engine_specs.py:244 +#: superset/db_engine_specs.py:271 superset/db_engine_specs.py:326 +#: superset/db_engine_specs.py:371 superset/db_engine_specs.py:825 +#: superset/db_engine_specs.py:855 superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:935 superset/db_engine_specs.py:967 msgid "month" msgstr "月" -#: superset/db_engine_specs.py:201 superset/db_engine_specs.py:248 -#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:375 -#: superset/db_engine_specs.py:787 superset/db_engine_specs.py:817 -#: superset/db_engine_specs.py:851 superset/db_engine_specs.py:897 +#: superset/db_engine_specs.py:199 superset/db_engine_specs.py:246 +#: superset/db_engine_specs.py:328 superset/db_engine_specs.py:373 +#: superset/db_engine_specs.py:827 superset/db_engine_specs.py:857 +#: superset/db_engine_specs.py:891 superset/db_engine_specs.py:937 +#: superset/db_engine_specs.py:968 msgid "quarter" msgstr "季度" -#: superset/db_engine_specs.py:202 superset/db_engine_specs.py:252 -#: superset/db_engine_specs.py:332 superset/db_engine_specs.py:789 -#: superset/db_engine_specs.py:819 superset/db_engine_specs.py:899 +#: superset/db_engine_specs.py:200 superset/db_engine_specs.py:250 +#: superset/db_engine_specs.py:330 superset/db_engine_specs.py:829 +#: superset/db_engine_specs.py:859 superset/db_engine_specs.py:939 +#: superset/db_engine_specs.py:969 msgid "year" msgstr "年" -#: superset/db_engine_specs.py:334 +#: superset/db_engine_specs.py:332 msgid "week_start_monday" msgstr "周一为一周开始" -#: superset/db_engine_specs.py:377 superset/db_engine_specs.py:853 +#: superset/db_engine_specs.py:375 superset/db_engine_specs.py:893 msgid "week_ending_saturday" msgstr "周日为一周开始" -#: superset/db_engine_specs.py:380 superset/db_engine_specs.py:856 +#: superset/db_engine_specs.py:378 superset/db_engine_specs.py:896 msgid "week_start_sunday" msgstr "周日为一周结束" -#: superset/db_engine_specs.py:775 superset/db_engine_specs.py:887 +#: superset/db_engine_specs.py:815 superset/db_engine_specs.py:927 msgid "5 minute" msgstr "5 分钟" -#: superset/db_engine_specs.py:777 +#: superset/db_engine_specs.py:817 msgid "half hour" msgstr "半小时" -#: superset/db_engine_specs.py:889 +#: superset/db_engine_specs.py:929 msgid "10 minute" -msgstr "" +msgstr "10 分钟" #: superset/utils.py:472 #, python-format msgid "[Superset] Access to the datasource %(name)s was granted" -msgstr "" +msgstr "[Superset] 允许访问数据源 %(name)s " -#: superset/viz.py:311 +#: superset/assets/javascripts/explore/stores/visTypes.js:283 +#: superset/viz.py:312 msgid "Table View" msgstr "表视图" -#: superset/viz.py:364 +#: superset/assets/javascripts/explore/stores/visTypes.js:334 +#: superset/viz.py:368 msgid "Pivot Table" msgstr "透视表" -#: superset/viz.py:413 +#: superset/assets/javascripts/explore/stores/visTypes.js:321 +#: superset/viz.py:423 msgid "Markup" msgstr "标记" -#: superset/viz.py:432 +#: superset/assets/javascripts/explore/stores/visTypes.js:348 +#: superset/viz.py:442 msgid "Separator" msgstr "分隔符" -#: superset/viz.py:448 +#: superset/assets/javascripts/explore/stores/visTypes.js:369 +#: superset/viz.py:458 msgid "Word Cloud" msgstr "词汇云" -#: superset/viz.py:471 +#: superset/assets/javascripts/explore/stores/visTypes.js:383 +#: superset/viz.py:481 msgid "Treemap" msgstr "树状图" -#: superset/viz.py:497 +#: superset/assets/javascripts/explore/stores/visTypes.js:403 +#: superset/viz.py:507 msgid "Calendar Heatmap" msgstr "时间热力图" -#: superset/viz.py:555 +#: superset/assets/javascripts/explore/stores/visTypes.js:418 +#: superset/viz.py:565 msgid "Box Plot" msgstr "箱线图" -#: superset/viz.py:644 +#: superset/assets/javascripts/explore/stores/visTypes.js:437 +#: superset/viz.py:654 msgid "Bubble Chart" msgstr "气泡图" -#: superset/viz.py:693 +#: superset/assets/javascripts/explore/stores/visTypes.js:481 +#: superset/viz.py:704 msgid "Bullet Chart" msgstr "子弹图" -#: superset/viz.py:742 +#: superset/assets/javascripts/explore/stores/visTypes.js:497 +#: superset/viz.py:753 msgid "Big Number with Trendline" msgstr "数字和趋势线" -#: superset/viz.py:771 +#: superset/assets/javascripts/explore/stores/visTypes.js:516 +#: superset/viz.py:782 msgid "Big Number" msgstr "数字" -#: superset/viz.py:798 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:21 +#: superset/assets/javascripts/explore/stores/visTypes.js:127 +#: superset/viz.py:809 msgid "Time Series - Line Chart" msgstr "时间序列-折线图" -#: superset/viz.py:925 +#: superset/viz.py:936 msgid "Time Series - Dual Axis Line Chart" msgstr "时间序列-双轴线图" -#: superset/viz.py:1000 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:22 +#: superset/assets/javascripts/explore/stores/visTypes.js:197 +#: superset/viz.py:1011 msgid "Time Series - Bar Chart" msgstr "时间序列-柱状图" -#: superset/viz.py:1008 +#: superset/assets/javascripts/explore/stores/visTypes.js:230 +#: superset/viz.py:1019 msgid "Time Series - Percent Change" msgstr "时间序列-百分比变化" -#: superset/viz.py:1016 +#: superset/assets/javascripts/explore/stores/visTypes.js:251 +#: superset/viz.py:1027 msgid "Time Series - Stacked" msgstr "时间序列-堆积图" -#: superset/viz.py:1025 -msgid "Distribution - NVD3 - Pie Chart" -msgstr "分布-饼图" +#: superset/viz.py:1036 +msgid "Distribution - NVD3 - Pie Chart" +msgstr "分布-饼图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:535 +#: superset/viz.py:1054 +msgid "Histogram" +msgstr "直方图" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:19 +#: superset/assets/javascripts/explore/stores/visTypes.js:81 +#: superset/viz.py:1079 +msgid "Distribution - Bar Chart" +msgstr "分布-柱状图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:565 +#: superset/viz.py:1146 +msgid "Sunburst" +msgstr "环状层次图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:595 +#: superset/viz.py:1179 +msgid "Sankey" +msgstr "蛇形图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:615 +#: superset/viz.py:1228 superset/viz.py:1249 +msgid "Directed Force Layout" +msgstr "有向图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:672 +#: superset/viz.py:1282 +msgid "Country Map" +msgstr "国家地图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:696 +#: superset/viz.py:1311 +msgid "World Map" +msgstr "世界地图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:63 +#: superset/viz.py:1361 +msgid "Filters" +msgstr "筛选" + +#: superset/assets/javascripts/explore/stores/visTypes.js:758 +#: superset/viz.py:1396 +msgid "iFrame" +msgstr "内嵌框架" + +#: superset/assets/javascripts/explore/stores/visTypes.js:770 +#: superset/viz.py:1413 +msgid "Parallel Coordinates" +msgstr "平行坐标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:786 +#: superset/viz.py:1438 +msgid "Heatmap" +msgstr "热力图" + +#: superset/viz.py:1489 +msgid "Horizon Charts" +msgstr "水平图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:830 +#: superset/viz.py:1500 +msgid "Mapbox" +msgstr "箱图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:900 +#: superset/viz.py:1603 +msgid "Event flow" +msgstr "事件流" + +#: superset/assets/javascripts/SqlLab/actions.js:55 +msgid "Your query was saved" +msgstr "已保存你的查询" + +#: superset/assets/javascripts/SqlLab/actions.js:56 +msgid "Your query could not be saved" +msgstr "不能保存你的查询" + +#: superset/assets/javascripts/SqlLab/actions.js:109 +msgid "Failed at retrieving results from the results backend" +msgstr "解析后端数据失败" + +#: superset/assets/javascripts/SqlLab/actions.js:155 +msgid "Could not connect to server" +msgstr "无法连接到服务器" + +#: superset/assets/javascripts/SqlLab/actions.js:160 +msgid "Your session timed out, please refresh your page and try again." +msgstr "您的请求超时,请刷新您的页面,再试一次." + +#: superset/assets/javascripts/SqlLab/actions.js:179 +msgid "Query was stopped." +msgstr "查询已停止." + +#: superset/assets/javascripts/SqlLab/actions.js:182 +msgid "Failed at stopping query." +msgstr "停止查询失败" + +#: superset/assets/javascripts/SqlLab/actions.js:295 +#: superset/assets/javascripts/SqlLab/actions.js:308 +msgid "Error occurred while fetching table metadata" +msgstr "获取表数据时发生错误" + +#: superset/assets/javascripts/SqlLab/actions.js:358 +msgid "shared query" +msgstr "共享查询" + +#: superset/assets/javascripts/SqlLab/actions.js:366 +#: superset/assets/javascripts/SqlLab/actions.js:386 +msgid "The query couldn't be loaded" +msgstr "无法加载查询" + +#: superset/assets/javascripts/SqlLab/actions.js:419 +msgid "An error occurred while creating the data source" +msgstr "创建数据源时发生错误" + +#: superset/assets/javascripts/SqlLab/constants.js:29 +msgid "Pick a chart type!" +msgstr "选择一个图表类型!" + +#: superset/assets/javascripts/SqlLab/constants.js:30 +msgid "To use this chart type you need at least one column flagged as a date" +msgstr "您至少需要标记一个列作为日期来使用这个图表类型" + +#: superset/assets/javascripts/SqlLab/constants.js:31 +msgid "To use this chart type you need at least one dimension" +msgstr "您至少需要设置一个维度来使用这个图表类型" + +#: superset/assets/javascripts/SqlLab/constants.js:32 +msgid "To use this chart type you need at least one aggregation function" +msgstr "您至少需要一个聚合函数来使用这个图表类型" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:49 +#: superset/assets/javascripts/SqlLab/reducers.js:11 +msgid "Untitled Query" +msgstr "无标题的查询" + +#: superset/assets/javascripts/SqlLab/reducers.js:44 +#, python-format +msgid "Copy of %s" +msgstr "复制 %s" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:30 +msgid "share query" +msgstr "共享查询" + +#: superset/assets/javascripts/SqlLab/components/CopyQueryTabUrl.jsx:33 +msgid "copy URL to clipboard" +msgstr "将URL复制到剪贴板" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:56 +msgid "Raw SQL" +msgstr "原始SQL" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:66 +msgid "Source SQL" +msgstr "源SQL" + +#: superset/assets/javascripts/SqlLab/components/HighlightedSql.jsx:78 +#: superset/assets/javascripts/explore/stores/visTypes.js:31 +msgid "SQL" +msgstr "SQL" + +#: superset/assets/javascripts/SqlLab/components/QueryHistory.jsx:28 +msgid "No query history yet..." +msgstr "没有查询记录..." + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:106 +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:66 +msgid "It seems you don't have access to any database" +msgstr "您没有访问任何数据库" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:154 +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:90 +msgid "Search Results" +msgstr "搜索结果" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:160 +msgid "[From]-" +msgstr "[开始日期]-" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:171 +msgid "[To]-" +msgstr "[截止日期]-" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:181 +msgid "[Query Status]" +msgstr "[查询状态]" + +#: superset/assets/javascripts/SqlLab/components/QuerySearch.jsx:190 +msgid "Search" +msgstr "搜索" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:114 +msgid "Open in SQL Editor" +msgstr "在SQL编辑器中打开" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:133 +msgid "view results" +msgstr "查看结果" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:136 +msgid "Data preview" +msgstr "预览数据" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:176 +msgid "Visualize the data out of this query" +msgstr "可视化此查询中的数据" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:182 +msgid "Overwrite text in editor with a query on this table" +msgstr "使用此表上的查询覆盖编辑器中的文本" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:188 +msgid "Run query in a new tab" +msgstr "在新标签中运行查询" + +#: superset/assets/javascripts/SqlLab/components/QueryTable.jsx:193 +msgid "Remove query from log" +msgstr "从日志中删除查询" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:68 +msgid ".CSV" +msgstr ".CSV" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:79 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:235 +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:274 +msgid "Visualize" +msgstr "可视化选项" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:151 +msgid "Query was stopped" +msgstr "查询已停止" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +#: superset/connectors/sqla/views.py:86 superset/connectors/sqla/views.py:135 +#: superset/connectors/sqla/views.py:213 superset/views/core.py:375 +msgid "Table" +msgstr "表" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:194 +msgid "was created" +msgstr "被创建" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:201 +msgid "Query in a new tab" +msgstr "在新标签中查询" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:240 +msgid "Fetch data preview" +msgstr "获取预览数据" + +#: superset/assets/javascripts/SqlLab/components/ResultSet.jsx:244 +msgid "The query returned no data" +msgstr "该查询没有返回任何数据" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Selected Query" +msgstr "运行选择的查询" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:19 +msgid "Run Query" +msgstr "运行查询" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:22 +msgid "Run query asynchronously" +msgstr "异步运行查询" + +#: superset/assets/javascripts/SqlLab/components/RunQueryActionButton.jsx:56 +msgid "Stop" +msgstr "停止" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:16 +msgid "Undefined" +msgstr "未定义" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:66 +msgid "Label" +msgstr "标签" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:71 +msgid "Label for your query" +msgstr "为你的查询设置标签" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:81 +#: superset/connectors/druid/views.py:107 +#: superset/connectors/druid/views.py:229 superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:131 superset/views/core.py:369 +msgid "Description" +msgstr "描述" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:85 +msgid "Write a description for your query" +msgstr "为你的查询写一个描述" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:99 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:139 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 +msgid "Save" +msgstr "保存" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:102 +#: superset/templates/superset/request_access.html:16 +msgid "Cancel" +msgstr "取消" + +#: superset/assets/javascripts/SqlLab/components/SaveQuery.jsx:123 +msgid "Save Query" +msgstr "保存查询" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:80 +msgid "Run a query to display results here" +msgstr "运行查询以在此显示结果" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:85 +#, python-format +msgid "Preview for %s" +msgstr "预览 %s" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:109 +msgid "Results" +msgstr "结果" + +#: superset/assets/javascripts/SqlLab/components/SouthPane.jsx:115 +msgid "Query History" +msgstr "查询历史" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:112 +#, python-format +msgid "" +"It appears that the number of rows in the query results displayed was " +"limited on the server side to the %s limit." +msgstr "显示的查询结果中的行数在服务器端限制为 %s 行" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:123 +msgid "Create table as with query results" +msgstr "使用查询结果创建表" + +#: superset/assets/javascripts/SqlLab/components/SqlEditor.jsx:131 +msgid "new table name" +msgstr "新表名" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:90 +msgid "Error while fetching table list" +msgstr "获取表列表时出错" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:131 +msgid "Error while fetching schema list" +msgstr "获取模式列表时出错" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:153 +msgid "Error while fetching database list" +msgstr "获取数据库列表时出错" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:159 +msgid "Database:" +msgstr "数据库:" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:163 +msgid "Select a database" +msgstr "选择一个数据库" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:170 +#, python-format +msgid "Select a schema (%s)" +msgstr "选择一个模式 %s" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:175 +msgid "Schema:" +msgstr "模式:" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:190 +#, python-format +msgid "Add a table (%s)" +msgstr "添加一个表 %s" + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:203 +msgid "Type to search ..." +msgstr "类型搜索 ..." + +#: superset/assets/javascripts/SqlLab/components/SqlEditorLeftBar.jsx:226 +msgid "Reset State" +msgstr "重置状态" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:105 +msgid "Enter a new title for the tab" +msgstr "输入标签的新标题" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:124 +#, python-format +msgid "Untitled Query %s" +msgstr "无标题的查询 %s" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:170 +msgid "close tab" +msgstr "关闭标签" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:173 +msgid "rename tab" +msgstr "重命名标签" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "expand tool bar" +msgstr "展开工具栏" + +#: superset/assets/javascripts/SqlLab/components/TabbedSqlEditors.jsx:181 +msgid "hide tool bar" +msgstr "隐藏工具栏" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:75 +msgid "Copy partition query to clipboard" +msgstr "将分区查询复制到剪贴板" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:94 +msgid "latest partition:" +msgstr "最新的分区:" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:110 +msgid "Keys for table" +msgstr "键表" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:119 +#, python-format +msgid "View keys & indexes (%s)" +msgstr "查看键和索引 (%s)" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:135 +msgid "Sort columns alphabetically" +msgstr "按字母顺序排列列" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:136 +msgid "Original table column order" +msgstr "原始表列顺序" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:146 +msgid "Copy SELECT statement to clipboard" +msgstr "将查询语句复制到剪贴板" + +#: superset/assets/javascripts/SqlLab/components/TableElement.jsx:152 +msgid "Remove table preview" +msgstr "删除表预览" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:20 +#: superset/assets/javascripts/explore/stores/visTypes.js:111 +msgid "Pie Chart" +msgstr "饼图" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:85 +#, python-format +msgid "%s is not right as a column name, please alias it (as in SELECT count(*) " +msgstr "%s 作为列名不正确,请换别的列名(如在SELECT count(*)中查询)" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "AS my_alias" +msgstr "作为我别的名字" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:86 +msgid "using only alphanumeric characters and underscores" +msgstr "仅使用字母数字和下划线" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:136 +#, python-format +msgid "This query took %s seconds to run," +msgstr "这个查询要使用 %s 秒的时间才能运行," + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:137 +#, python-format +msgid "and the explore view times out at %s seconds," +msgstr "并且浏览视图在 %s 秒超时," + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:138 +msgid "" +"following this flow will most likely lead to your query timing out.We " +"recommend your summarize your data further before following that flow.If " +"activated you can use the " +msgstr "以下这个流程很可能导致你的查询超时。我们建议您在执行该流程之前进一步整理您的数据。如果已执行,您可以使用" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:140 +msgid "featureto store a summarized data set that you can then explore." +msgstr "存储汇总数据集,然后您可以浏览。" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:160 +msgid "Creating a data source and popping a new tab" +msgstr "创建数据源并弹出新标签" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:190 +msgid "No results available for this query" +msgstr "此查询没有可用的结果" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:242 +msgid "Chart Type" +msgstr "图表类型" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:245 +msgid "[Chart Type]" +msgstr "[图表类型]" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:253 +msgid "Datasource Name" +msgstr "数据源名称" + +#: superset/assets/javascripts/SqlLab/components/VisualizeModal.jsx:257 +msgid "datasource name" +msgstr "数据源名称" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:54 +msgid "Create a new slice" +msgstr "创建一个新的切片" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:59 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:65 +msgid "Choose a datasource" +msgstr "选择一个数据源" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:71 +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:77 +msgid "Choose a visualization type" +msgstr "选择一个可视化类型" + +#: superset/assets/javascripts/addSlice/AddSliceContainer.jsx:87 +msgid "Create new slice" +msgstr "创建新的切片" + +#: superset/assets/javascripts/components/AsyncSelect.jsx:20 +msgid "Select ..." +msgstr "选择 ..." + +#: superset/assets/javascripts/components/CachedLabel.jsx:26 +msgid "Loaded data cached" +msgstr "加载数据缓存" + +#: superset/assets/javascripts/components/CachedLabel.jsx:28 +msgid "Loaded from cache" +msgstr "从缓存加载" + +#: superset/assets/javascripts/components/CachedLabel.jsx:33 +msgid "Click to force-refresh" +msgstr "点击强制刷新" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:21 +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:67 +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:37 +msgid "Copy to clipboard" +msgstr "复制到剪贴板" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:65 +msgid "Not successful" +msgstr "不成功" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:68 +msgid "Sorry, your browser does not support copying. Use Ctrl / Cmd + C!" +msgstr "对不起,您的浏览器不支持复制。使用Ctrl/Cmd + C!" + +#: superset/assets/javascripts/components/CopyToClipboard.jsx:79 +msgid "Copied!" +msgstr "复制!" + +#: superset/assets/javascripts/components/EditableTitle.jsx:12 +#: superset/views/core.py:470 superset/views/core.py:537 +msgid "Title" +msgstr "标题" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "click to edit title" +msgstr "点击编辑标题" + +#: superset/assets/javascripts/components/EditableTitle.jsx:75 +msgid "You don't have the rights to alter this title." +msgstr "你没有权限修改这个标题." + +#: superset/assets/javascripts/components/FaveStar.jsx:32 +#: superset/assets/javascripts/modules/superset.js:33 +msgid "Click to favorite/unfavorite" +msgstr "点击收藏/取消收藏" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:36 +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "You have unsaved changes." +msgstr "您有未保存的更改。" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:53 +msgid "Click the" +msgstr "点击" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:55 +msgid "button on the top right to save your changes." +msgstr "右上角的按钮保存更改。" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:158 +#, python-format +msgid "Served from data cached %s . Click to force refresh." +msgstr "服务于数据缓存 %s .点击强制刷新." + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:163 +msgid "Click to force refresh" +msgstr "点击强制刷新" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:337 +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:93 +msgid "Error" +msgstr "错误" + +#: superset/assets/javascripts/dashboard/Dashboard.jsx:338 +#, python-format +msgid "Sorry, there was an error adding slices to this dashboard: %s" +msgstr "抱歉,在仪表盘: %s 上添加切片出错" + +#: superset/assets/javascripts/dashboard/components/CodeModal.jsx:35 +msgid "Active Dashboard Filters" +msgstr "仪表盘过滤器" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:48 +#, python-format +msgid "Checkout this dashboard: %s" +msgstr "查看仪表盘: %s" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:54 +msgid "Force refresh the whole dashboard" +msgstr "强制刷新整个仪表盘" + +#: superset/assets/javascripts/dashboard/components/Controls.jsx:94 +msgid "Edit this dashboard's properties" +msgstr "编辑仪表盘的属性" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:65 +msgid "Load a template" +msgstr "加载一个模板" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:68 +msgid "Load a CSS template" +msgstr "加载一个CSS模板" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:80 +#: superset/views/core.py:477 +msgid "CSS" +msgstr "CSS" + +#: superset/assets/javascripts/dashboard/components/CssEditor.jsx:86 +msgid "Live CSS Editor" +msgstr "实时CSS编辑器" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:19 +msgid "Don't refresh" +msgstr "不刷新" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:20 +msgid "10 seconds" +msgstr "10秒" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:21 +msgid "30 seconds" +msgstr "30秒" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:22 +msgid "1 minute" +msgstr "1分钟" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:23 +msgid "5 minutes" +msgstr "5分钟" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:38 +msgid "Refresh Interval" +msgstr "刷新间隔" + +#: superset/assets/javascripts/dashboard/components/RefreshIntervalModal.jsx:41 +msgid "Choose the refresh frequency for this dashboard" +msgstr "选择仪表盘的刷新频率" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:58 +msgid "This dashboard was saved successfully." +msgstr "成功保存此仪表盘。" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:64 +msgid "Sorry, there was an error saving this dashboard: " +msgstr "对不起,这个仪表盘有一个错误保存:" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:94 +msgid "You must pick a name for the new dashboard" +msgstr "您必须为新的仪表盘选择一个名称" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:108 +msgid "Save Dashboard" +msgstr "保存仪表盘" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:116 +#, python-format +msgid "Overwrite Dashboard [%s]" +msgstr "覆盖仪表盘 [%s]" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:123 +msgid "Save as:" +msgstr "保存为:" + +#: superset/assets/javascripts/dashboard/components/SaveModal.jsx:127 +#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 +msgid "[dashboard name]" +msgstr "[仪表盘名称]" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:137 +#: superset/views/core.py:374 +msgid "Name" +msgstr "名字" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:143 +msgid "Viz" +msgstr "Viz" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:152 +#: superset/views/core.py:475 superset/views/core.py:539 +msgid "Modified" +msgstr "已修改" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:162 +msgid "Add Slices" +msgstr "添加切片" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:171 +msgid "Add a new slice to the dashboard" +msgstr "向仪表盘添加一个新的切片" + +#: superset/assets/javascripts/dashboard/components/SliceAdder.jsx:175 +msgid "Add Slices to Dashboard" +msgstr "添加切片到仪表盘" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:23 +msgid "Move chart" +msgstr "移动图表" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:26 +msgid "Force refresh data" +msgstr "强制刷新数据" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:30 +msgid "Toggle chart description" +msgstr "是否显示图表描述" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:40 +msgid "Edit chart" +msgstr "编辑图表" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:45 +msgid "Explore chart" +msgstr "检索图表" + +#: superset/assets/javascripts/dashboard/components/SliceCell.jsx:50 +msgid "Remove chart from dashboard" +msgstr "从仪表盘删除图表" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:170 +#, python-format +msgid "%s - untitled" +msgstr "%s - 无标题" + +#: superset/assets/javascripts/explore/components/ChartContainer.jsx:276 +msgid "Edit slice properties" +msgstr "编辑切片属性" + +#: superset/assets/javascripts/explore/components/ControlHeader.jsx:60 +msgid "Takes effect on chart immediatly" +msgstr "立即生效" + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:56 +msgid "Error..." +msgstr "错误..." + +#: superset/assets/javascripts/explore/components/DisplayQueryButton.jsx:92 +msgid "Query" +msgstr "查询" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:76 +msgid "Height" +msgstr "高度" + +#: superset/assets/javascripts/explore/components/EmbedCodeButton.jsx:90 +msgid "Width" +msgstr "宽度" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:32 +msgid "Export to .json" +msgstr "导出为.json格式" + +#: superset/assets/javascripts/explore/components/ExploreActionButtons.jsx:42 +msgid "Export to .csv format" +msgstr "导出为.csv格式" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 +msgid "Please enter a slice name" +msgstr "请输入切片名称" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 +msgid "Please select a dashboard" +msgstr "请选择一个仪表盘" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 +msgid "Please enter a dashboard name" +msgstr "请输入仪表盘名称" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 +msgid "Save A Slice" +msgstr "保存一个切片" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 +#, python-format +msgid "Overwrite slice %s" +msgstr "覆盖切片 %s" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 +msgid "Save as" +msgstr "另存为" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 +msgid "[slice name]" +msgstr "[切片名称]" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 +msgid "Do not add to a dashboard" +msgstr "不要添加到仪表盘" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 +msgid "Add slice to existing dashboard" +msgstr "将切片添加到现有仪表盘" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 +msgid "Add to new dashboard" +msgstr "添加到新的仪表盘" + +#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 +msgid "Save & go to dashboard" +msgstr "保存并转到仪表盘" + +#: superset/assets/javascripts/explore/components/URLShortLinkButton.jsx:32 +#, python-format +msgid "Check out this slice: %s" +msgstr "查看切片: %s" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:55 +msgid "`Min` value should be numeric or empty" +msgstr "最小值应该是数字或空" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:58 +msgid "`Max` value should be numeric or empty" +msgstr "最大值应该是数字或空" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:75 +#: superset/connectors/druid/views.py:50 superset/connectors/sqla/views.py:89 +msgid "Min" +msgstr "最小值" + +#: superset/assets/javascripts/explore/components/controls/BoundsControl.jsx:83 +#: superset/connectors/druid/views.py:51 superset/connectors/sqla/views.py:90 +msgid "Max" +msgstr "最大值" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:118 +msgid "Filter value" +msgstr "过滤值" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select metric" +msgstr "选择指标" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:147 +msgid "Select column" +msgstr "选择过滤字段" + +#: superset/assets/javascripts/explore/components/controls/Filter.jsx:159 +msgid "Select operator" +msgstr "选择过滤方式" + +#: superset/assets/javascripts/explore/components/controls/FilterControl.jsx:70 +msgid "Add Filter" +msgstr "增加过滤条件" + +#: superset/assets/javascripts/explore/components/controls/SelectControl.jsx:106 +#, python-format +msgid "Select %s" +msgstr "查询 %s" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:62 +msgid "textarea" +msgstr "文本区域" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "Edit" +msgstr "编辑" + +#: superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx:80 +msgid "in modal" +msgstr "在模型中" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:90 +#: superset/assets/javascripts/explore/stores/controls.jsx:46 +msgid "edit" +msgstr "编辑" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:104 +msgid "Select a visualization type" +msgstr "选择可视化类型" + +#: superset/assets/javascripts/explore/components/controls/VizTypeControl.jsx:114 +msgid "Search / Filter" +msgstr "搜索/过滤" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:61 +#, python-format +msgid "fetching dashboards failed for %s" +msgstr "获取仪表盘 %s 失败" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:100 +msgid "Updating chart was stopped" +msgstr "更新图表已停止" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:106 +#: superset/assets/javascripts/modules/superset.js:220 +#, python-format +msgid "An error occurred while rendering the visualization: %s" +msgstr "在呈现可视化时发生了一个错误: %s" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:117 +msgid "Query timeout" +msgstr "查询超时" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:118 +#, python-format +msgid "- visualization query are set to timeout at %s seconds. " +msgstr "- 可视化查询设置 %s 秒超时。" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:119 +msgid "" +"Perhaps your data has grown, your database is under unusual load, or you " +"are simply querying a data source that is to large to be processed within" +" the timeout range. If that is the case, we recommend that you summarize " +"your data further." +msgstr "也许您的数据增长,您的数据库处于异常负载状态,或者您在超时范围内要查询处理的数据过大。如果是这样,我们建议您进一步整理您的数据。" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:127 +msgid "Network error." +msgstr "网络错误。" + +#: superset/assets/javascripts/explore/reducers/exploreReducer.js:150 +msgid "Failed to save slice" +msgstr "无法保存切片" + +#: superset/assets/javascripts/explore/stores/controls.jsx:35 +#: superset/connectors/druid/views.py:45 superset/views/core.py:313 +#: superset/views/core.py:368 +msgid "Datasource" +msgstr "数据源" + +#: superset/assets/javascripts/explore/stores/controls.jsx:55 +#: superset/views/core.py:376 +msgid "Visualization Type" +msgstr "图表类型" + +#: superset/assets/javascripts/explore/stores/controls.jsx:57 +msgid "The type of visualization to display" +msgstr "要显示的可视化类型" + +#: superset/assets/javascripts/explore/stores/controls.jsx:63 +msgid "Metrics" +msgstr "指标" + +#: superset/assets/javascripts/explore/stores/controls.jsx:72 +#: superset/assets/javascripts/explore/stores/controls.jsx:90 +msgid "One or many metrics to display" +msgstr "显示的一个或多个指标" + +#: superset/assets/javascripts/explore/stores/controls.jsx:79 +msgid "" +"Bounds for the Y axis. When left empty, the bounds are dynamically " +"defined based on the min/max of the data. Note that this feature will " +"only expand the axis range. It won't narrow the data's extent." +msgstr "Y轴的边界。当左侧空时,根据数据的min / max动态定义边界。注意,这个特性只会扩展轴的范围。它不会缩小数据的范围" + +#: superset/assets/javascripts/explore/stores/controls.jsx:88 +msgid "Ordering" +msgstr "排序" + +#: superset/assets/javascripts/explore/stores/controls.jsx:100 +msgid "Choose the metric" +msgstr "选择指标" + +#: superset/assets/javascripts/explore/stores/controls.jsx:113 +msgid "Right Axis Metric" +msgstr "右轴指制" + +#: superset/assets/javascripts/explore/stores/controls.jsx:117 +msgid "Choose a metric for right axis" +msgstr "为右轴选择一个指标" + +#: superset/assets/javascripts/explore/stores/controls.jsx:128 +msgid "Stacked Style" +msgstr "堆叠样式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:140 +msgid "Linear Color Scheme" +msgstr "线性颜色方案" + +#: superset/assets/javascripts/explore/stores/controls.jsx:153 +msgid "Normalize Across" +msgstr "标准化" + +#: superset/assets/javascripts/explore/stores/controls.jsx:160 +msgid "" +"Color will be rendered based on a ratio of the cell against the sum of " +"across this criteria" +msgstr "颜色将根据比例进行渲染" + +#: superset/assets/javascripts/explore/stores/controls.jsx:167 +msgid "Horizon Color Scale" +msgstr "地平线色标" + +#: superset/assets/javascripts/explore/stores/controls.jsx:174 +msgid "Defines how the color are attributed." +msgstr "定义颜色的属性。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:179 +msgid "Rendering" +msgstr "渲染" + +#: superset/assets/javascripts/explore/stores/controls.jsx:185 +msgid "" +"image-rendering CSS attribute of the canvas object that defines how the " +"browser scales up the image" +msgstr "浏览器渲染图片的方式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:191 +msgid "XScale Interval" +msgstr "X轴步长" + +#: superset/assets/javascripts/explore/stores/controls.jsx:194 +msgid "Number of steps to take between ticks when displaying the X scale" +msgstr "X轴每个刻度的单位长度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:200 +msgid "YScale Interval" +msgstr "Y轴步长" + +#: superset/assets/javascripts/explore/stores/controls.jsx:203 +msgid "Number of steps to take between ticks when displaying the Y scale" +msgstr "Y轴每个刻度的单位长度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:209 +msgid "Include Time" +msgstr "包括时间" + +#: superset/assets/javascripts/explore/stores/controls.jsx:210 +msgid "Whether to include the time granularity as defined in the time section" +msgstr "是否包含在时间段中定义的时间粒度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:216 +msgid "Stacked Bars" +msgstr "堆积" + +#: superset/assets/javascripts/explore/stores/controls.jsx:232 +msgid "Show Markers" +msgstr "显示标记" + +#: superset/assets/javascripts/explore/stores/controls.jsx:235 +msgid "Show data points as circle markers on the lines" +msgstr "将数据点显示为线上的圆圈标记" + +#: superset/assets/javascripts/explore/stores/controls.jsx:240 +msgid "Bar Values" +msgstr "柱状图的值" + +#: superset/assets/javascripts/explore/stores/controls.jsx:248 +msgid "Sort Bars" +msgstr "是否排序" + +#: superset/assets/javascripts/explore/stores/controls.jsx:250 +msgid "Sort bars by x labels." +msgstr "根据X轴排序" + +#: superset/assets/javascripts/explore/stores/controls.jsx:263 +msgid "Extra Controls" +msgstr "扩展控件" + +#: superset/assets/javascripts/explore/stores/controls.jsx:266 +msgid "" +"Whether to show extra controls or not. Extra controls include things like" +" making mulitBar charts stacked or side by side." +msgstr "是否显示扩展控件,扩展的控件可以使mulitBar图堆叠或并排。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:273 +msgid "Reduce X ticks" +msgstr "X轴自适应" + +#: superset/assets/javascripts/explore/stores/controls.jsx:276 +msgid "" +"Reduces the number of X axis ticks to be rendered. If true, the x axis " +"wont overflow and labels may be missing. If false, a minimum width will " +"be applied to columns and the width may overflow into an horizontal " +"scroll." +msgstr "减少要渲染的X轴刻度的数量。 如果为真,则x轴不会溢出,标签可能会丢失。如果为false,则最小宽度将应用于列,并且宽度可能会溢出到水平滚动。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:285 +msgid "Include Series" +msgstr "显示项目" + +#: superset/assets/javascripts/explore/stores/controls.jsx:288 +msgid "Include series name as an axis" +msgstr "坐标上显示项目名称" + +#: superset/assets/javascripts/explore/stores/controls.jsx:293 +msgid "Color Metric" +msgstr "颜色度量" + +#: superset/assets/javascripts/explore/stores/controls.jsx:295 +msgid "A metric to use for color" +msgstr "颜色度量项目" + +#: superset/assets/javascripts/explore/stores/controls.jsx:302 +msgid "Country Name" +msgstr "国家名" + +#: superset/assets/javascripts/explore/stores/controls.jsx:321 +msgid "The name of country that Superset should display" +msgstr "Superset应显示的国家/地区的名称" + +#: superset/assets/javascripts/explore/stores/controls.jsx:325 +msgid "Country Field Type" +msgstr "国家字段类型" + +#: superset/assets/javascripts/explore/stores/controls.jsx:333 +msgid "" +"The country code standard that Superset should expect to find in the " +"[country] column" +msgstr "Superset期望在[country]列中找到国家/地区的代码标准" + +#: superset/assets/javascripts/explore/stores/controls.jsx:340 +msgid "Group by" +msgstr "分组" + +#: superset/assets/javascripts/explore/stores/controls.jsx:342 +msgid "One or many controls to group by" +msgstr "根据一个或多个字段分组" + +#: superset/assets/javascripts/explore/stores/controls.jsx:354 +#: superset/assets/javascripts/explore/stores/controls.jsx:368 +msgid "Columns" +msgstr "列" + +#: superset/assets/javascripts/explore/stores/controls.jsx:370 +#: superset/assets/javascripts/explore/stores/controls.jsx:380 +#: superset/assets/javascripts/explore/stores/controls.jsx:390 +msgid "Columns to display" +msgstr "显示列" + +#: superset/assets/javascripts/explore/stores/controls.jsx:378 +msgid "X" +msgstr "X" + +#: superset/assets/javascripts/explore/stores/controls.jsx:388 +msgid "Y" +msgstr "Y" + +#: superset/assets/javascripts/explore/stores/controls.jsx:399 +msgid "Origin" +msgstr "起点" + +#: superset/assets/javascripts/explore/stores/controls.jsx:405 +msgid "" +"Defines the origin where time buckets start, accepts natural dates as in " +"`now`, `sunday` or `1970-01-01`" +msgstr "定义时间起点,支持`now`, `sunday` 或 `1970-01-01`等" + +#: superset/assets/javascripts/explore/stores/controls.jsx:415 +msgid "Bottom marging, in pixels, allowing for more room for axis labels" +msgstr "底部留白的像素大小" + +#: superset/assets/javascripts/explore/stores/controls.jsx:421 +msgid "Time Granularity" +msgstr "时间粒度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:438 +msgid "" +"The time granularity for the visualization. Note that you can type and " +"use simple natural language as in `10 seconds`, `1 day` or `56 weeks`" +msgstr "图表时间粒度。可以使用`10 seconds`, `1 day`, `56 weeks`等" + +#: superset/assets/javascripts/explore/stores/controls.jsx:445 +msgid "Domain" +msgstr "区域" + +#: superset/assets/javascripts/explore/stores/controls.jsx:448 +msgid "The time unit used for the grouping of blocks" +msgstr "每个区域表示的时间段" + +#: superset/assets/javascripts/explore/stores/controls.jsx:453 +msgid "Subdomain" +msgstr "方块" + +#: superset/assets/javascripts/explore/stores/controls.jsx:456 +msgid "" +"The time unit for each block. Should be a smaller unit than " +"domain_granularity. Should be larger or equal to Time Grain" +msgstr "每个区域内方块表示的时间段。必须比区域时间段小,比时间粒度大。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:463 +msgid "Link Length" +msgstr "链接长度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:466 +msgid "Link length in the force layout" +msgstr "有向图中的链接长度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:472 +msgid "Charge" +msgstr "缩放" + +#: superset/assets/javascripts/explore/stores/controls.jsx:486 +msgid "Charge in the force layout" +msgstr "在有向图中缩放大小" + +#: superset/assets/javascripts/explore/stores/controls.jsx:494 +msgid "" +"The time column for the visualization. Note that you can define arbitrary" +" expression that return a DATETIME column in the table or. Also note that" +" the filter below is applied against this column or expression" +msgstr "图表中的时间字段。可以在表格编辑器中返回任意DATETIME列。另请注意,下面的过滤方式应用于此列或表达" + +#: superset/assets/javascripts/explore/stores/controls.jsx:506 +msgid "Time Grain" +msgstr "时间粒度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:508 +msgid "" +"The time granularity for the visualization. This applies a date " +"transformation to alter your time column and defines a new time " +"granularity. The options here are defined on a per database engine basis " +"in the Superset source code." +msgstr "图表中的时间粒度。用于替换时间字段默认的时间粒度。这些选项在Superset源代码中基于每个数据库引擎进行定义。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:521 +msgid "Resample Rule" +msgstr "重新采样规则" + +#: superset/assets/javascripts/explore/stores/controls.jsx:524 +msgid "Pandas resample rule" +msgstr "重新采样规则" + +#: superset/assets/javascripts/explore/stores/controls.jsx:530 +msgid "Resample How" +msgstr "重采样方式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:533 +msgid "Pandas resample how" +msgstr "重采样方式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:539 +msgid "Resample Fill Method" +msgstr "插值方式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:542 +msgid "Pandas resample fill method" +msgstr "插值方式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:548 +msgid "Since" +msgstr "起始时间" + +#: superset/assets/javascripts/explore/stores/controls.jsx:560 +msgid "" +"Timestamp from filter. This supports free form typing and natural " +"language as in `1 day ago`, `28 days` or `3 years`" +msgstr "时间范围。这支持`1天前`,`28天`或`3年`中的自由形式打字和自然语言" + +#: superset/assets/javascripts/explore/stores/controls.jsx:567 +msgid "Until" +msgstr "结束时间" + +#: superset/assets/javascripts/explore/stores/controls.jsx:582 +msgid "Max Bubble Size" +msgstr "气泡最大尺寸" + +#: superset/assets/javascripts/explore/stores/controls.jsx:590 +msgid "Whisker/outlier options" +msgstr "非异常值选项" + +#: superset/assets/javascripts/explore/stores/controls.jsx:592 +msgid "Determines how whiskers and outliers are calculated." +msgstr "计算最大/最小非异常值的方法" + +#: superset/assets/javascripts/explore/stores/controls.jsx:603 +msgid "Ratio" +msgstr "比例" + +#: superset/assets/javascripts/explore/stores/controls.jsx:606 +msgid "Target aspect ratio for treemap tiles." +msgstr "树状图中方块的比例" + +#: superset/assets/javascripts/explore/stores/controls.jsx:612 +#: superset/assets/javascripts/explore/stores/visTypes.js:510 +#: superset/assets/javascripts/explore/stores/visTypes.js:529 +#: superset/assets/javascripts/explore/stores/visTypes.js:654 +msgid "Number format" +msgstr "数字格式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:622 +msgid "Row limit" +msgstr "行数上限" + +#: superset/assets/javascripts/explore/stores/controls.jsx:630 +msgid "Series limit" +msgstr "项目上限" + +#: superset/assets/javascripts/explore/stores/controls.jsx:633 +msgid "Limits the number of time series that get displayed" +msgstr "限制显示的时间序列数" + +#: superset/assets/javascripts/explore/stores/controls.jsx:638 +msgid "Sort By" +msgstr "排序" + +#: superset/assets/javascripts/explore/stores/controls.jsx:640 +msgid "Metric used to define the top series" +msgstr "指标用于定义顶级项目" + +#: superset/assets/javascripts/explore/stores/controls.jsx:648 +msgid "Rolling" +msgstr "滚动" + +#: superset/assets/javascripts/explore/stores/controls.jsx:651 +msgid "" +"Defines a rolling window function to apply, works along with the " +"[Periods] text box" +msgstr "设置显示项目的数量上限" + +#: superset/assets/javascripts/explore/stores/controls.jsx:657 +msgid "Periods" +msgstr "周期" + +#: superset/assets/javascripts/explore/stores/controls.jsx:659 +msgid "" +"Defines the size of the rolling window function, relative to the time " +"granularity selected" +msgstr "滚动窗口大小,取值和时间粒度相关" + +#: superset/assets/javascripts/explore/stores/controls.jsx:665 +#: superset/assets/javascripts/explore/stores/visTypes.js:101 +msgid "Series" +msgstr "项目" + +#: superset/assets/javascripts/explore/stores/controls.jsx:667 +msgid "" +"Defines the grouping of entities. Each series is shown as a specific " +"color on the chart and has a legend toggle" +msgstr "定义分组实体。每个项目有特定的颜色和图例。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:677 +msgid "Entity" +msgstr "实体" + +#: superset/assets/javascripts/explore/stores/controls.jsx:680 +msgid "This defines the element to be plotted on the chart" +msgstr "这定义了要在图表上绘制的元素" + +#: superset/assets/javascripts/explore/stores/controls.jsx:688 +#: superset/assets/javascripts/explore/stores/visTypes.js:459 +msgid "X Axis" +msgstr "X轴" + +#: superset/assets/javascripts/explore/stores/controls.jsx:689 +msgid "Metric assigned to the [X] axis" +msgstr "X轴对应的项目" + +#: superset/assets/javascripts/explore/stores/controls.jsx:702 +#: superset/assets/javascripts/explore/stores/visTypes.js:466 +msgid "Y Axis" +msgstr "Y轴" + +#: superset/assets/javascripts/explore/stores/controls.jsx:705 +msgid "Metric assigned to the [Y] axis" +msgstr "Y轴对应的项目" + +#: superset/assets/javascripts/explore/stores/controls.jsx:716 +msgid "Bubble Size" +msgstr "气泡大小" + +#: superset/assets/javascripts/explore/stores/controls.jsx:729 +msgid "URL" +msgstr "URL" + +#: superset/assets/javascripts/explore/stores/controls.jsx:730 +msgid "" +"The URL, this control is templated, so you can integrate {{ width }} " +"and/or {{ height }} in your URL string." +msgstr "URL,此字段是模板化的,因此您可以集成{{width}}和/或{{height}}您的URL字符串中。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:737 +msgid "X Axis Label" +msgstr "X轴名称" + +#: superset/assets/javascripts/explore/stores/controls.jsx:744 +msgid "Y Axis Label" +msgstr "\"Y轴名" + +#: superset/assets/javascripts/explore/stores/controls.jsx:751 +msgid "Custom WHERE clause" +msgstr "WHERE语句" + +#: superset/assets/javascripts/explore/stores/controls.jsx:753 +msgid "" +"The text in this box gets included in your query's WHERE clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "语句将包含到WHERE子句中,并用AND连接到其他条件。您可以包括复杂的表达式,括号和其后面所支持的其他任何东西" + +#: superset/assets/javascripts/explore/stores/controls.jsx:761 +msgid "Custom HAVING clause" +msgstr "HAVING语句" + +#: superset/assets/javascripts/explore/stores/controls.jsx:763 +msgid "" +"The text in this box gets included in your query's HAVING clause, as an " +"AND to other criteria. You can include complex expression, parenthesis " +"and anything else supported by the backend it is directed towards." +msgstr "语句将包含到WHERE子句中,并用AND连接到其他条件。您可以包括复杂的表达式,括号和其后面所支持的其他任何东西" + +#: superset/assets/javascripts/explore/stores/controls.jsx:771 +msgid "Comparison Period Lag" +msgstr "滞后比较周期" + +#: superset/assets/javascripts/explore/stores/controls.jsx:773 +msgid "Based on granularity, number of time periods to compare against" +msgstr "比较的时间周期,基于时间粒度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:778 +msgid "Comparison suffix" +msgstr "后缀文字" + +#: superset/assets/javascripts/explore/stores/controls.jsx:779 +msgid "Suffix to apply after the percentage display" +msgstr "百分比后面显示的文本" + +#: superset/assets/javascripts/explore/stores/controls.jsx:785 +msgid "Table Timestamp Format" +msgstr "时间格式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:790 +msgid "Timestamp Format" +msgstr "时间格式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:796 +msgid "Series Height" +msgstr "项目高度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:799 +msgid "Pixel height of each series" +msgstr "每个项目的像素高度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:805 +msgid "Page Length" +msgstr "页面长度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:808 +msgid "Rows per page, 0 means no pagination" +msgstr "每页行数,0表示无分页" + +#: superset/assets/javascripts/explore/stores/controls.jsx:814 +#: superset/assets/javascripts/explore/stores/controls.jsx:824 +msgid "X Axis Format" +msgstr "X轴数值格式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:834 +msgid "Y Axis Format" +msgstr "Y轴数值格式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:844 +msgid "Right Axis Format" +msgstr "右轴格式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:852 +msgid "Markup Type" +msgstr "标记类型" + +#: superset/assets/javascripts/explore/stores/controls.jsx:857 +msgid "Pick your favorite markup language" +msgstr "选择标记语言" + +#: superset/assets/javascripts/explore/stores/controls.jsx:862 +msgid "Rotation" +msgstr "旋转" + +#: superset/assets/javascripts/explore/stores/controls.jsx:865 +msgid "Rotation to apply to words in the cloud" +msgstr "词汇云中词语的旋转方式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:870 +msgid "Line Style" +msgstr "线形" + +#: superset/assets/javascripts/explore/stores/controls.jsx:875 +msgid "Line interpolation as defined by d3.js" +msgstr "定义线形" + +#: superset/assets/javascripts/explore/stores/controls.jsx:880 +msgid "Label Type" +msgstr "标签类型" + +#: superset/assets/javascripts/explore/stores/controls.jsx:887 +msgid "What should be shown on the label?" +msgstr "标签上应该显示什么?" + +#: superset/assets/javascripts/explore/stores/controls.jsx:892 +msgid "Code" +msgstr "代码" + +#: superset/assets/javascripts/explore/stores/controls.jsx:893 +msgid "Put your code here" +msgstr "输入代码" + +#: superset/assets/javascripts/explore/stores/controls.jsx:902 +msgid "Aggregation function" +msgstr "聚合函数" + +#: superset/assets/javascripts/explore/stores/controls.jsx:914 +msgid "" +"Aggregate function to apply when pivoting and computing the total rows " +"and columns" +msgstr "透视时计算行和列的聚合函数" + +#: superset/assets/javascripts/explore/stores/controls.jsx:921 +msgid "Font Size From" +msgstr "最小字体" + +#: superset/assets/javascripts/explore/stores/controls.jsx:923 +msgid "Font size for the smallest value in the list" +msgstr "列表中最小值的字体大小" + +#: superset/assets/javascripts/explore/stores/controls.jsx:929 +msgid "Font Size To" +msgstr "最大字体" + +#: superset/assets/javascripts/explore/stores/controls.jsx:931 +msgid "Font size for the biggest value in the list" +msgstr "列表中最大值的字体大小" + +#: superset/assets/javascripts/explore/stores/controls.jsx:936 +msgid "Instant Filtering" +msgstr "即时过滤" + +#: superset/assets/javascripts/explore/stores/controls.jsx:940 +msgid "" +"Whether to apply filters as they change, or wait forusers to hit an " +"[Apply] button" +msgstr "是否在更改过滤器时应用,或者等待用户点击[应用]按钮" + +#: superset/assets/javascripts/explore/stores/controls.jsx:947 +msgid "Range Filter" +msgstr "区间过滤" + +#: superset/assets/javascripts/explore/stores/controls.jsx:950 +msgid "Whether to display the time range interactive selector" +msgstr "是否显示时间区间选择控件" + +#: superset/assets/javascripts/explore/stores/controls.jsx:955 +msgid "Date Filter" +msgstr "时间过滤器" + +#: superset/assets/javascripts/explore/stores/controls.jsx:957 +msgid "Whether to include a time filter" +msgstr "是否包含时间过滤器" + +#: superset/assets/javascripts/explore/stores/controls.jsx:962 +msgid "Data Table" +msgstr "明细表" + +#: superset/assets/javascripts/explore/stores/controls.jsx:964 +msgid "Whether to display the interactive data table" +msgstr "是否显示明细表" + +#: superset/assets/javascripts/explore/stores/controls.jsx:969 +msgid "Search Box" +msgstr "搜索框" + +#: superset/assets/javascripts/explore/stores/controls.jsx:972 +msgid "Whether to include a client side search box" +msgstr "是否显示搜索框" + +#: superset/assets/javascripts/explore/stores/controls.jsx:977 +msgid "Table Filter" +msgstr "表格过滤器" + +#: superset/assets/javascripts/explore/stores/controls.jsx:979 +msgid "Whether to apply filter when table cell is clicked" +msgstr "是否应用表格过滤器" + +#: superset/assets/javascripts/explore/stores/controls.jsx:984 +msgid "Show Bubbles" +msgstr "显示气泡" + +#: superset/assets/javascripts/explore/stores/controls.jsx:987 +msgid "Whether to display bubbles on top of countries" +msgstr "是否在国家上显示气泡" + +#: superset/assets/javascripts/explore/stores/controls.jsx:992 +msgid "Legend" +msgstr "图例" + +#: superset/assets/javascripts/explore/stores/controls.jsx:995 +msgid "Whether to display the legend (toggles)" +msgstr "是否显示图例" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1000 +msgid "X bounds" +msgstr "X轴边界" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1003 +msgid "Whether to display the min and max values of the X axis" +msgstr "是否显示X轴的最大最小值" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1008 +msgid "Rich Tooltip" +msgstr "详细信息" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1011 +msgid "The rich tooltip shows a list of all series for that point in time" +msgstr "显示特定时间点的所有项目" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1017 +msgid "Y Log Scale" +msgstr "Y轴对数" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1020 +msgid "Use a log scale for the Y axis" +msgstr "对Y轴使用对数刻度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1025 +msgid "X Log Scale" +msgstr "X轴对数" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1028 +msgid "Use a log scale for the X axis" +msgstr "对X轴使用对数刻度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1033 +msgid "Donut" +msgstr "环形图" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1036 +msgid "Do you want a donut or a pie?" +msgstr "使用环形图或饼图" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1041 +msgid "Put labels outside" +msgstr "把标签放在外面" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1044 +msgid "Put the labels outside the pie?" +msgstr "是否把标签放在饼图外面" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1049 +msgid "Contribution" +msgstr "贡献值" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1051 +msgid "Compute the contribution to the total" +msgstr "在总和中的贡献值" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1056 +msgid "Period Ratio" +msgstr "周期比" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1059 +msgid "" +"[integer] Number of period to compare against, this is relative to the " +"granularity selected" +msgstr "[整数]要比较的周期数,和粒度有关" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1065 +msgid "Period Ratio Type" +msgstr "周期比类型" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1068 +msgid "" +"`factor` means (new/previous), `growth` is ((new/previous) - 1), `value` " +"is (new-previous)" +msgstr "" +"`factor因子` 表示(new / previous),`growth`是((new / previous) - 1),'`value`是" +"(new-previous)" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1074 +msgid "Time Shift" +msgstr "时间飘移" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1076 +msgid "" +"Overlay a timeseries from a relative time period. Expects relative time " +"delta in natural language (example: 24 hours, 7 days, 56 weeks, 365 " +"days)" +msgstr "相关时间周期内的时间偏移。相对时间,如: 24 hours, 7 days, 56 weeks, 365 days" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1084 +msgid "Subheader" +msgstr "子标题" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1085 +msgid "Description text that shows up below your Big Number" +msgstr "在数字下显示的文本" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1091 +msgid "label" +msgstr "标签" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1093 +msgid "" +"`count` is COUNT(*) if a group by is used. Numerical columns will be " +"aggregated with the aggregator. Non-numerical columns will be used to " +"label points. Leave empty to get a count of points in each cluster." +msgstr "如果使用group by,则`count`为COUNT(*)。数字列将与聚合器聚合。非数字列用于标记点。留空以获取每个群集中的点数。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1104 +msgid "Map Style" +msgstr "图层样式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1114 +msgid "Base layer map style" +msgstr "基本图层样式" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1120 +msgid "Clustering Radius" +msgstr "簇半径" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1133 +msgid "" +"The radius (in pixels) the algorithm uses to define a cluster. Choose 0 " +"to turn off clustering, but beware that a large number of points (>1000) " +"will cause lag." +msgstr "定义簇的半径大小(单位为像素)。0表示不显示簇。大量的点(>1000)会导致显示缓慢。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1140 +msgid "Point Radius" +msgstr "点半径" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1142 +msgid "" +"The radius of individual points (ones that are not in a cluster). Either " +"a numerical column or `Auto`, which scales the point based on the largest" +" cluster" +msgstr "不在簇中点的半径。选择`Auto`时根据最大的簇自动调整。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1152 +msgid "Point Radius Unit" +msgstr "点半径单位" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1155 +msgid "The unit of measure for the specified point radius" +msgstr "点半径的测量单位" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1160 +msgid "Opacity" +msgstr "不透明度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1163 +msgid "Opacity of all clusters, points, and labels. Between 0 and 1." +msgstr "所有簇、点和标签的不透明度。在1和0之间。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1169 +msgid "Zoom" +msgstr "縮放" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1172 +msgid "Zoom level of the map" +msgstr "地图的缩放级别" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1178 +msgid "Default latitude" +msgstr "默认纬度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1181 +msgid "Latitude of default viewport" +msgstr "视窗默认纬度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1187 +msgid "Default longitude" +msgstr "默认经度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1190 +msgid "Longitude of default viewport" +msgstr "视窗默认经度" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1196 +msgid "Live render" +msgstr "实时更新" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1198 +msgid "Points and clusters will update as viewport is being changed" +msgstr "视窗发生改变时,点和簇实时更新" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1204 +msgid "RGB Color" +msgstr "RGB 颜色" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1214 +msgid "The color for points and clusters in RGB" +msgstr "RGB 分簇的颜色" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1219 +msgid "Ranges" +msgstr "范围" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1221 +msgid "Ranges to highlight with shading" +msgstr "范围用阴影高亮显示" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1226 +msgid "Range labels" +msgstr "范围标签" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1228 +msgid "Labels for the ranges" +msgstr "范围标签" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1233 +msgid "Markers" +msgstr "标记" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1235 +msgid "List of values to mark with triangles" +msgstr "用三角形标记的值列表" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1240 +msgid "Marker labels" +msgstr "标记标签" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1242 +msgid "Labels for the markers" +msgstr "标记标签" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1247 +msgid "Marker lines" +msgstr "标记线" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1249 +msgid "List of values to mark with lines" +msgstr "用线条标记的值列表" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1254 +msgid "Marker line labels" +msgstr "线条标记的标签" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1256 +msgid "Labels for the marker lines" +msgstr "标记线的标签" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1283 +msgid "Slice ID" +msgstr "切片ID" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1285 +msgid "The id of the active slice" +msgstr "切片的ID" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1290 +msgid "Cache Timeout (seconds)" +msgstr "缓存超时(秒)" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1292 +msgid "The number of seconds before expiring the cache" +msgstr "缓存到期之前的秒数" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1297 +msgid "Order by entity id" +msgstr "按实体ID排序" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1298 +msgid "" +"Important! Select this if the table is not already sorted by entity id, " +"else there is no guarantee that all events for each entity are returned." +msgstr "重要!如果表未按实体id排序,则选择此选项,否则无法保证返回每个实体的所有事件。" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1306 +msgid "Minimum leaf node event count" +msgstr "最小叶子节点事件计数" + +#: superset/assets/javascripts/explore/stores/controls.jsx:1309 +msgid "" +"Leaf nodes that represent fewer than this number of events will be " +"initially hidden in the visualization" +msgstr "少于此事件数的叶子节点将隐藏在可视化中" + +#: superset/assets/javascripts/explore/stores/visTypes.js:7 +#: superset/assets/javascripts/explore/stores/visTypes.js:23 +msgid "Time" +msgstr "时间" + +#: superset/assets/javascripts/explore/stores/visTypes.js:8 +#: superset/assets/javascripts/explore/stores/visTypes.js:24 +msgid "Time related form attributes" +msgstr "时间相关的属性" + +#: superset/assets/javascripts/explore/stores/visTypes.js:15 +msgid "Datasource & Chart Type" +msgstr "数据源和图表类型" + +#: superset/assets/javascripts/explore/stores/visTypes.js:36 +msgid "This section exposes ways to include snippets of SQL in your query" +msgstr "用于定制SQL语句" + +#: superset/assets/javascripts/explore/stores/visTypes.js:48 +msgid "Advanced Analytics" +msgstr "高级分析" + +#: superset/assets/javascripts/explore/stores/visTypes.js:49 +msgid "" +"This section contains options that allow for advanced analytical post " +"processing of query results" +msgstr "允许对查询结果进行高级分析处理选项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:64 +msgid "" +"Filters are defined using comma delimited strings as in " +"Leave the value control empty to filter empty strings or " +"nullsFor filters with comma in values, wrap them in single quotesas in " +"" +msgstr "" +"使用逗号分隔多个过滤条件,如`US,FR,Other`,将值控件留空以过滤空字符串或null,对于具有值的逗号的过滤器,将其包含在中的单引号中" + +#: superset/assets/javascripts/explore/stores/visTypes.js:71 +msgid "Result Filters" +msgstr "结果过滤器" + +#: superset/assets/javascripts/explore/stores/visTypes.js:72 +msgid "" +"The filters to apply after post-aggregation.Leave the value control empty" +" to filter empty strings or nulls" +msgstr "在post-aggregation之后应用的过滤器。将值字段留空以过滤空字符串或空值" + +#: superset/assets/javascripts/explore/stores/visTypes.js:84 +#: superset/assets/javascripts/explore/stores/visTypes.js:132 +#: superset/assets/javascripts/explore/stores/visTypes.js:163 +#: superset/assets/javascripts/explore/stores/visTypes.js:202 +#: superset/assets/javascripts/explore/stores/visTypes.js:235 +#: superset/assets/javascripts/explore/stores/visTypes.js:256 +#: superset/assets/javascripts/explore/stores/visTypes.js:393 +#: superset/assets/javascripts/explore/stores/visTypes.js:428 +#: superset/assets/javascripts/explore/stores/visTypes.js:447 +#: superset/assets/javascripts/explore/stores/visTypes.js:821 +msgid "Chart Options" +msgstr "图表选项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:104 +msgid "Breakdowns" +msgstr "拆分" + +#: superset/assets/javascripts/explore/stores/visTypes.js:105 +msgid "Defines how each series is broken down" +msgstr "定义每个项目的拆分方式" + +#: superset/assets/javascripts/explore/stores/visTypes.js:141 +#: superset/assets/javascripts/explore/stores/visTypes.js:211 +#: superset/assets/javascripts/explore/stores/visTypes.js:265 +msgid "Axes" +msgstr "轴" + +#: superset/assets/javascripts/explore/stores/visTypes.js:159 +msgid "Dual Axis Line Chart" +msgstr "双轴线图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:169 +msgid "Y Axis 1" +msgstr "Y轴从1开始" + +#: superset/assets/javascripts/explore/stores/visTypes.js:175 +msgid "Y Axis 2" +msgstr "Y轴从2开始" + +#: superset/assets/javascripts/explore/stores/visTypes.js:183 +msgid "Left Axis Metric" +msgstr "左轴指标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:184 +msgid "Choose a metric for left axis" +msgstr "为左轴选择指标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:187 +msgid "Left Axis Format" +msgstr "左轴格式" + +#: superset/assets/javascripts/explore/stores/visTypes.js:286 +msgid "GROUP BY" +msgstr "GROUP BY" + +#: superset/assets/javascripts/explore/stores/visTypes.js:287 +msgid "Use this section if you want a query that aggregates" +msgstr "进行聚合查询" + +#: superset/assets/javascripts/explore/stores/visTypes.js:294 +msgid "NOT GROUPED BY" +msgstr "NOT GROUPED BY" + +#: superset/assets/javascripts/explore/stores/visTypes.js:295 +msgid "Use this section if you want to query atomic rows" +msgstr "进行原始行查询" + +#: superset/assets/javascripts/explore/stores/visTypes.js:302 +msgid "Options" +msgstr "选项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:453 +#: superset/assets/javascripts/explore/stores/visTypes.js:707 +msgid "Bubbles" +msgstr "气泡" + +#: superset/assets/javascripts/explore/stores/visTypes.js:545 +msgid "Histogram Options" +msgstr "直方图选项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:553 +msgid "Numeric Column" +msgstr "数字列" + +#: superset/assets/javascripts/explore/stores/visTypes.js:554 +msgid "Select the numeric column to draw the histogram" +msgstr "选择数字列来绘制直方图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:557 +msgid "No of Bins" +msgstr "不分组" + +#: superset/assets/javascripts/explore/stores/visTypes.js:558 +msgid "Select number of bins for the histogram" +msgstr "选择直方图的数量" + +#: superset/assets/javascripts/explore/stores/visTypes.js:578 +msgid "Primary Metric" +msgstr "主指标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:579 +msgid "The primary metric is used to define the arc segment sizes" +msgstr "主要指标用来定义弧段尺寸" + +#: superset/assets/javascripts/explore/stores/visTypes.js:582 +msgid "Secondary Metric" +msgstr "次指标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:583 +msgid "" +"This secondary metric is used to define the color as a ratio against the " +"primary metric. If the two metrics match, color is mapped level groups" +msgstr "次指标用于定义相对主指标的颜色" + +#: superset/assets/javascripts/explore/stores/visTypes.js:588 +msgid "Hierarchy" +msgstr "层次" + +#: superset/assets/javascripts/explore/stores/visTypes.js:589 +msgid "This defines the level of the hierarchy" +msgstr "定义层次" + +#: superset/assets/javascripts/explore/stores/visTypes.js:608 +#: superset/assets/javascripts/explore/stores/visTypes.js:635 +msgid "Source / Target" +msgstr "源/目标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:609 +#: superset/assets/javascripts/explore/stores/visTypes.js:636 +msgid "Choose a source and a target" +msgstr "选择源和目标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:626 +msgid "Force Layout" +msgstr "有向图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:641 +msgid "Chord Diagram" +msgstr "弦图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:655 +msgid "Choose a number format" +msgstr "选择数字格式" + +#: superset/assets/javascripts/explore/stores/visTypes.js:658 +msgid "Source" +msgstr "源" + +#: superset/assets/javascripts/explore/stores/visTypes.js:661 +msgid "Choose a source" +msgstr "选择源" + +#: superset/assets/javascripts/explore/stores/visTypes.js:664 +msgid "Target" +msgstr "目标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:667 +msgid "Choose a target" +msgstr "选择目标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:686 +msgid "ISO 3166-1 codes of region/province/department" +msgstr "区域/省/部门的ISO 3166-1规范" + +#: superset/assets/javascripts/explore/stores/visTypes.js:687 +msgid "" +"It's ISO 3166-1 of your region/province/department in your table. (see " +"documentation for list of ISO 3166-1)" +msgstr "您的地区/省/部门在您的表中符合ISO 3166-1规范。(参见ISO 3166-1的规范文件)" + +#: superset/assets/javascripts/explore/stores/visTypes.js:690 +#: superset/connectors/druid/views.py:106 superset/connectors/sqla/views.py:130 +msgid "Metric" +msgstr "度量" + +#: superset/assets/javascripts/explore/stores/visTypes.js:691 +msgid "Metric to display bottom title" +msgstr "显示底部标题的指标" + +#: superset/assets/javascripts/explore/stores/visTypes.js:717 +msgid "Country Control" +msgstr "国家控件" + +#: superset/assets/javascripts/explore/stores/visTypes.js:718 +msgid "3 letter code of the country" +msgstr "国家的3个字母代码" + +#: superset/assets/javascripts/explore/stores/visTypes.js:721 +msgid "Metric for color" +msgstr "色彩度量项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:722 +msgid "Metric that defines the color of the country" +msgstr "国家颜色表示的统计项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:725 +msgid "Bubble size" +msgstr "气泡大小" + +#: superset/assets/javascripts/explore/stores/visTypes.js:726 +msgid "Metric that defines the size of the bubble" +msgstr "气泡大小表示的度量项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:732 +msgid "Filter Box" +msgstr "提示器" + +#: superset/assets/javascripts/explore/stores/visTypes.js:745 +msgid "Filter controls" +msgstr "过滤器控件" + +#: superset/assets/javascripts/explore/stores/visTypes.js:747 +msgid "" +"The controls you want to filter on. Note that only columns checked as " +"\"filterable\" will show up on this list." +msgstr "您要过滤的控件。注意,只有被检查为\"filterable\"的列才会出现在这个列表中。" + +#: superset/assets/javascripts/explore/stores/visTypes.js:789 +msgid "Axis & Metrics" +msgstr "轴和度量" + +#: superset/assets/javascripts/explore/stores/visTypes.js:797 +msgid "Heatmap Options" +msgstr "热力图选项" + +#: superset/assets/javascripts/explore/stores/visTypes.js:817 +msgid "Horizon" +msgstr "热力图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:843 +msgid "Points" +msgstr "点" + +#: superset/assets/javascripts/explore/stores/visTypes.js:850 +msgid "Labelling" +msgstr "标记" + +#: superset/assets/javascripts/explore/stores/visTypes.js:857 +msgid "Visual Tweaks" +msgstr "视觉调整" + +#: superset/assets/javascripts/explore/stores/visTypes.js:865 +msgid "Viewport" +msgstr "视图" + +#: superset/assets/javascripts/explore/stores/visTypes.js:875 +msgid "Longitude" +msgstr "经度" + +#: superset/assets/javascripts/explore/stores/visTypes.js:876 +msgid "Column containing longitude data" +msgstr "表示经度的列" + +#: superset/assets/javascripts/explore/stores/visTypes.js:879 +msgid "Latitude" +msgstr "纬度" + +#: superset/assets/javascripts/explore/stores/visTypes.js:880 +msgid "Column containing latitude data" +msgstr "表示纬度的列" + +#: superset/assets/javascripts/explore/stores/visTypes.js:883 +msgid "Cluster label aggregator" +msgstr "聚合标签" + +#: superset/assets/javascripts/explore/stores/visTypes.js:884 +msgid "" +"Aggregate function applied to the list of points in each cluster to " +"produce the cluster label." +msgstr "聚合函数用于集群标签" + +#: superset/assets/javascripts/explore/stores/visTypes.js:888 +msgid "Tooltip" +msgstr "提示" + +#: superset/assets/javascripts/explore/stores/visTypes.js:889 +msgid "Show a tooltip when hovering over points and clusters describing the label" +msgstr "鼠标放在集群上时显示的提示信息" + +#: superset/assets/javascripts/explore/stores/visTypes.js:893 +msgid "" +"One or many controls to group by. If grouping, latitude and longitude " +"columns must be present." +msgstr "一个或多个控件组合。如果分组,纬度和经度列必须存在。" + +#: superset/assets/javascripts/explore/stores/visTypes.js:904 +msgid "Event definition" +msgstr "事件定义" + +#: superset/assets/javascripts/explore/stores/visTypes.js:914 +msgid "Additional meta data" +msgstr "其他元数据" + +#: superset/assets/javascripts/explore/stores/visTypes.js:922 +msgid "Column containing entity ids" +msgstr "包含实体ID的列" + +#: superset/assets/javascripts/explore/stores/visTypes.js:923 +msgid "e.g., a \"user id\" column" +msgstr "例如,`用户ID`列" + +#: superset/assets/javascripts/explore/stores/visTypes.js:926 +msgid "Column containing event names" +msgstr "包含事件名称的列" + +#: superset/assets/javascripts/explore/stores/visTypes.js:934 +msgid "Event count limit" +msgstr "事件计数限制" + +#: superset/assets/javascripts/explore/stores/visTypes.js:935 +msgid "The maximum number of events to return, equivalent to number of rows" +msgstr "返回事件的最大数目,等于行数" + +#: superset/assets/javascripts/explore/stores/visTypes.js:938 +msgid "Meta data" +msgstr "元数据" + +#: superset/assets/javascripts/explore/stores/visTypes.js:939 +msgid "Select any columns for meta data inspection" +msgstr "选择任何列进行元数据检查" + +#: superset/assets/javascripts/modules/superset.js:134 +msgid "" +"The server could not be reached. You may want to verify your connection " +"and try again." +msgstr "服务器无法成功连接.您可能需要验证您的连接并再次尝试。" + +#: superset/assets/javascripts/modules/superset.js:137 +#, python-format +msgid "An unknown error occurred. (Status: %s )" +msgstr "一个未知的错误发生.(状态: %s )" + +#: superset/assets/javascripts/modules/superset.js:162 +#, python-format +msgid "Query timeout - visualization query are set to time out at %s seconds." +msgstr "查询超时 - 可视化查询设置为超时 %s 秒." + +#: superset/assets/javascripts/profile/components/App.jsx:24 +msgid "Favorites" +msgstr "收藏" + +#: superset/assets/javascripts/profile/components/App.jsx:30 +msgid "Created Content" +msgstr "创建内容" + +#: superset/assets/javascripts/profile/components/App.jsx:37 +msgid "Recent Activity" +msgstr "近期活动" + +#: superset/assets/javascripts/profile/components/App.jsx:42 +msgid "Security & Access" +msgstr "安全 & 访问" -#: superset/viz.py:1043 -msgid "Histogram" -msgstr "直方图" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:33 +msgid "No slices" +msgstr "没有切片" -#: superset/viz.py:1068 -msgid "Distribution - Bar Chart" -msgstr "分布-柱状图" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:49 +msgid "No dashboards" +msgstr "没有仪表盘" -#: superset/viz.py:1135 -msgid "Sunburst" -msgstr "环状层次图" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:58 +#: superset/assets/javascripts/profile/components/Favorites.jsx:59 +#: superset/templates/superset/welcome.html:20 superset/views/core.py:367 +#: superset/views/core.py:527 +msgid "Dashboards" +msgstr "看板" -#: superset/viz.py:1168 -msgid "Sankey" -msgstr "蛇形图" +#: superset/assets/javascripts/profile/components/CreatedContent.jsx:61 +#: superset/assets/javascripts/profile/components/Favorites.jsx:62 +#: superset/views/core.py:403 superset/views/core.py:472 +msgid "Slices" +msgstr "切片" -#: superset/viz.py:1217 -msgid "Directed Force Layout" -msgstr "有向图" +#: superset/assets/javascripts/profile/components/Favorites.jsx:34 +msgid "No favorite slices yet, go click on stars!" +msgstr "没有收藏的切片,去点击星星收藏!" -#: superset/viz.py:1238 -msgid "Country Map" -msgstr "" +#: superset/assets/javascripts/profile/components/Favorites.jsx:50 +msgid "No favorite dashboards yet, go click on stars!" +msgstr "没有收藏的仪表盘,去点击星星收藏!" -#: superset/viz.py:1267 -msgid "World Map" -msgstr "世界地图" +#: superset/assets/javascripts/profile/components/Security.jsx:14 +msgid "Roles" +msgstr "角色" -#: superset/viz.py:1317 -msgid "Filters" -msgstr "筛选" +#: superset/assets/javascripts/profile/components/Security.jsx:23 +#: superset/views/core.py:279 +msgid "Databases" +msgstr "数据库" -#: superset/viz.py:1352 -msgid "iFrame" -msgstr "内嵌框架" +#: superset/assets/javascripts/profile/components/Security.jsx:34 +msgid "Datasources" +msgstr "数据源" -#: superset/viz.py:1369 -msgid "Parallel Coordinates" -msgstr "平行坐标" +#: superset/assets/javascripts/profile/components/UserInfo.jsx:18 +msgid "Profile picture provided by Gravatar" +msgstr "Gravatar提供的个人资料图片" -#: superset/viz.py:1394 -msgid "Heatmap" -msgstr "热力图" +#: superset/assets/javascripts/profile/components/UserInfo.jsx:33 +msgid "joined" +msgstr "加入" -#: superset/viz.py:1445 -msgid "Horizon Charts" -msgstr "水平图" +#: superset/assets/javascripts/profile/components/UserInfo.jsx:43 +msgid "id:" +msgstr "id:" -#: superset/viz.py:1456 -msgid "Mapbox" -msgstr "箱图" +#: superset/assets/visualizations/EventFlow.jsx:56 +msgid "Sorry, there appears to be no data" +msgstr "对不起,似乎没有数据" + +#: superset/assets/visualizations/filter_box.jsx:88 +#, python-format +msgid "Select [%s]" +msgstr "选择 [%s]" -#: superset/connectors/druid/models.py:950 +#: superset/connectors/druid/models.py:970 msgid "No data was returned." msgstr "没有数据" -#: superset/connectors/druid/views.py:36 superset/connectors/sqla/views.py:73 +#: superset/connectors/druid/views.py:28 +msgid "List Druid Column" +msgstr "Druid列的列表" + +#: superset/connectors/druid/views.py:29 +msgid "Show Druid Column" +msgstr "显示Druid列" + +#: superset/connectors/druid/views.py:30 +msgid "Add Druid Column" +msgstr "添加Druid列" + +#: superset/connectors/druid/views.py:31 +msgid "Edit Druid Column" +msgstr "编辑Druid列" + +#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 msgid "Column" msgstr "列" -#: superset/connectors/druid/views.py:37 superset/connectors/druid/views.py:96 -#: superset/connectors/sqla/views.py:119 +#: superset/connectors/druid/views.py:44 superset/connectors/druid/views.py:109 +#: superset/connectors/sqla/views.py:133 msgid "Type" msgstr "类型" -#: superset/connectors/druid/views.py:38 superset/views/core.py:305 -#: superset/views/core.py:354 -msgid "Datasource" -msgstr "数据源" - -#: superset/connectors/druid/views.py:39 superset/connectors/sqla/views.py:76 +#: superset/connectors/druid/views.py:46 superset/connectors/sqla/views.py:84 msgid "Groupable" msgstr "可分组" -#: superset/connectors/druid/views.py:40 superset/connectors/sqla/views.py:77 +#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:85 msgid "Filterable" msgstr "可筛选" -#: superset/connectors/druid/views.py:41 superset/connectors/sqla/views.py:79 +#: superset/connectors/druid/views.py:48 superset/connectors/sqla/views.py:87 msgid "Count Distinct" msgstr "计数" -#: superset/connectors/druid/views.py:42 superset/connectors/sqla/views.py:80 +#: superset/connectors/druid/views.py:49 superset/connectors/sqla/views.py:88 msgid "Sum" msgstr "求和" -#: superset/connectors/druid/views.py:43 superset/connectors/sqla/views.py:81 -msgid "Min" -msgstr "最小值" - -#: superset/connectors/druid/views.py:44 superset/connectors/sqla/views.py:82 -msgid "Max" -msgstr "最大值" - -#: superset/connectors/druid/views.py:47 superset/connectors/sqla/views.py:42 +#: superset/connectors/druid/views.py:54 superset/connectors/sqla/views.py:50 msgid "" "Whether this column is exposed in the `Filters` section of the explore " "view." -msgstr "" +msgstr "该列是否在浏览视图的`过滤器`部分显示。" + +#: superset/connectors/druid/views.py:80 +msgid "List Druid Metric" +msgstr "Druid指标列表" + +#: superset/connectors/druid/views.py:81 +msgid "Show Druid Metric" +msgstr "显示Druid指标" -#: superset/connectors/druid/views.py:87 superset/connectors/sqla/views.py:101 +#: superset/connectors/druid/views.py:82 +msgid "Add Druid Metric" +msgstr "添加Druid指标" + +#: superset/connectors/druid/views.py:83 +msgid "Edit Druid Metric" +msgstr "编辑Druid指标" + +#: superset/connectors/druid/views.py:100 superset/connectors/sqla/views.py:115 msgid "" "Whether the access to this metric is restricted to certain roles. Only " "roles with the permission 'metric access on XXX (the name of this " "metric)' are allowed to access this metric" msgstr "是否访问受限。只有有权限的用户才能访问。" -#: superset/connectors/druid/views.py:93 superset/connectors/sqla/views.py:116 -msgid "Metric" -msgstr "度量" - -#: superset/connectors/druid/views.py:94 superset/connectors/druid/views.py:204 -#: superset/connectors/sqla/views.py:75 superset/connectors/sqla/views.py:117 -#: superset/views/core.py:355 -msgid "Description" -msgstr "描述" - -#: superset/connectors/druid/views.py:95 superset/connectors/sqla/views.py:74 -#: superset/connectors/sqla/views.py:118 +#: superset/connectors/druid/views.py:108 superset/connectors/sqla/views.py:82 +#: superset/connectors/sqla/views.py:132 msgid "Verbose Name" msgstr "全称" -#: superset/connectors/druid/views.py:97 superset/views/core.py:534 +#: superset/connectors/druid/views.py:110 superset/views/core.py:554 msgid "JSON" -msgstr "" +msgstr "JSON" -#: superset/connectors/druid/views.py:98 +#: superset/connectors/druid/views.py:111 msgid "Druid Datasource" msgstr "Druid数据源" -#: superset/connectors/druid/views.py:123 -#: superset/connectors/druid/views.py:203 +#: superset/connectors/druid/views.py:128 +msgid "List Druid Cluster" +msgstr "Druid集群列表" + +#: superset/connectors/druid/views.py:129 +msgid "Show Druid Cluster" +msgstr "显示Druid集群" + +#: superset/connectors/druid/views.py:130 +msgid "Add Druid Cluster" +msgstr "添加Druid集群" + +#: superset/connectors/druid/views.py:131 +msgid "Edit Druid Cluster" +msgstr "编辑Druid集群" + +#: superset/connectors/druid/views.py:142 +#: superset/connectors/druid/views.py:228 msgid "Cluster" msgstr "集群" -#: superset/connectors/druid/views.py:124 +#: superset/connectors/druid/views.py:143 msgid "Coordinator Host" -msgstr "" +msgstr "协调器主机" -#: superset/connectors/druid/views.py:125 +#: superset/connectors/druid/views.py:144 msgid "Coordinator Port" -msgstr "" +msgstr "协调器端口" -#: superset/connectors/druid/views.py:126 +#: superset/connectors/druid/views.py:145 msgid "Coordinator Endpoint" -msgstr "" +msgstr "协调器端点" -#: superset/connectors/druid/views.py:127 +#: superset/connectors/druid/views.py:146 msgid "Broker Host" -msgstr "" +msgstr "代理主机" -#: superset/connectors/druid/views.py:128 +#: superset/connectors/druid/views.py:147 msgid "Broker Port" -msgstr "" +msgstr "代理端口" -#: superset/connectors/druid/views.py:129 +#: superset/connectors/druid/views.py:148 msgid "Broker Endpoint" -msgstr "" +msgstr "代理端点" -#: superset/connectors/druid/views.py:144 +#: superset/connectors/druid/views.py:163 msgid "Druid Clusters" msgstr "Druid集群" -#: superset/connectors/druid/views.py:147 -#: superset/connectors/druid/views.py:243 -#: superset/connectors/druid/views.py:282 superset/connectors/sqla/views.py:261 -#: superset/views/core.py:274 +#: superset/connectors/druid/views.py:166 +#: superset/connectors/druid/views.py:268 +#: superset/connectors/druid/views.py:307 superset/connectors/sqla/views.py:281 +#: superset/views/core.py:282 msgid "Sources" msgstr "数据源" -#: superset/connectors/druid/views.py:172 superset/connectors/sqla/views.py:155 +#: superset/connectors/druid/views.py:173 +msgid "List Druid Datasource" +msgstr "Druid数据源列表" + +#: superset/connectors/druid/views.py:174 +msgid "Show Druid Datasource" +msgstr "显示Druid数据源" + +#: superset/connectors/druid/views.py:175 +msgid "Add Druid Datasource" +msgstr "添加Druid数据源" + +#: superset/connectors/druid/views.py:176 +msgid "Edit Druid Datasource" +msgstr "编辑Druid数据源" + +#: superset/connectors/druid/views.py:197 superset/connectors/sqla/views.py:175 msgid "" "The list of slices associated with this table. By altering this " "datasource, you may change how these associated slices behave. Also note " "that slices need to point to a datasource, so this form will fail at " "saving if removing slices from a datasource. If you want to change the " "datasource for a slice, overwrite the slice from the 'explore view'" -msgstr "" +msgstr "与此表关联的切片列表。通过更改此数据源,您可以更改相关的切片。还要注意,切片需要指向数据源,因此如果从数据源中删除切片,则此形式将无法保存。如果要更改切片的数据源,请从`浏览视图`覆盖切片," -#: superset/connectors/druid/views.py:180 superset/connectors/sqla/views.py:163 +#: superset/connectors/druid/views.py:205 superset/connectors/sqla/views.py:183 msgid "Timezone offset (in hours) for this datasource" msgstr "数据源的时差(单位:小时)" -#: superset/connectors/druid/views.py:184 +#: superset/connectors/druid/views.py:209 msgid "" "Time expression to use as a predicate when retrieving distinct values to " "populate the filter component. Only applies when `Enable Filter Select` " "is on. If you enter `7 days ago`, the distinct list of values in the " "filter will be populated based on the distinct value over the past week" -msgstr "" +msgstr "当检索不同的值以填充过滤器组件时,时间表达式用作条件。只适用于`启用过滤器选择`。如果您输入`7天前`,将根据过去一周的不同值来填充ilter中不同的值列表" -#: superset/connectors/druid/views.py:191 superset/connectors/sqla/views.py:185 +#: superset/connectors/druid/views.py:216 superset/connectors/sqla/views.py:205 msgid "" "Whether to populate the filter's dropdown in the explore view's filter " "section with a list of distinct values fetched from the backend on the " "fly" -msgstr "" +msgstr "是否在浏览视图的过滤器部分中填充过滤器的下拉列表,并提供从后端获取的不同值的列表" -#: superset/connectors/druid/views.py:195 superset/connectors/sqla/views.py:199 +#: superset/connectors/druid/views.py:220 superset/connectors/sqla/views.py:219 msgid "" "Redirects to this endpoint when clicking on the datasource from the " "datasource list" -msgstr "" +msgstr "在数据源列表中点击数据源将重定向到此端点" -#: superset/connectors/druid/views.py:201 superset/connectors/sqla/views.py:192 +#: superset/connectors/druid/views.py:226 superset/connectors/sqla/views.py:212 msgid "Associated Slices" -msgstr "" +msgstr "相关切片" -#: superset/connectors/druid/views.py:202 +#: superset/connectors/druid/views.py:227 msgid "Data Source" msgstr "数据源" -#: superset/connectors/druid/views.py:205 +#: superset/connectors/druid/views.py:230 msgid "Owner" msgstr "所有者" -#: superset/connectors/druid/views.py:206 +#: superset/connectors/druid/views.py:231 msgid "Is Hidden" msgstr "隐藏" -#: superset/connectors/druid/views.py:207 superset/connectors/sqla/views.py:197 +#: superset/connectors/druid/views.py:232 superset/connectors/sqla/views.py:217 msgid "Enable Filter Select" -msgstr "" +msgstr "启用过滤器选择" -#: superset/connectors/druid/views.py:208 +#: superset/connectors/druid/views.py:233 msgid "Default Endpoint" -msgstr "" +msgstr "默认端点" -#: superset/connectors/druid/views.py:209 +#: superset/connectors/druid/views.py:234 msgid "Time Offset" msgstr "时间偏移" -#: superset/connectors/druid/views.py:210 superset/connectors/sqla/views.py:203 -#: superset/views/core.py:241 superset/views/core.py:351 +#: superset/connectors/druid/views.py:235 superset/connectors/sqla/views.py:223 +#: superset/views/core.py:249 superset/views/core.py:365 msgid "Cache Timeout" msgstr "缓存时间" -#: superset/connectors/druid/views.py:241 +#: superset/connectors/druid/views.py:266 msgid "Druid Datasources" msgstr "Druid数据源" -#: superset/connectors/druid/views.py:279 +#: superset/connectors/druid/views.py:304 msgid "Refresh Druid Metadata" msgstr "刷新Druid元数据" -#: superset/connectors/sqla/models.py:388 +#: superset/connectors/sqla/models.py:386 msgid "" "Datetime column not provided as part table configuration and is required " "by this type of chart" msgstr "缺少时间字段" -#: superset/connectors/sqla/models.py:393 +#: superset/connectors/sqla/models.py:391 msgid "Metric '{}' is not valid" -msgstr "" +msgstr "'{}'是无效的" + +#: superset/connectors/sqla/views.py:28 +msgid "List Columns" +msgstr "列列表" + +#: superset/connectors/sqla/views.py:29 +msgid "Show Column" +msgstr "显示列" + +#: superset/connectors/sqla/views.py:30 +msgid "Add Column" +msgstr "添加列" -#: superset/connectors/sqla/views.py:38 +#: superset/connectors/sqla/views.py:31 +msgid "Edit Column" +msgstr "编辑列" + +#: superset/connectors/sqla/views.py:46 msgid "" "Whether to make this column available as a [Time Granularity] option, " "column has to be DATETIME or DATETIME-like" msgstr "是否将此列作为[时间粒度]选项, 列中的数据类型必须是DATETIME" -#: superset/connectors/sqla/views.py:45 +#: superset/connectors/sqla/views.py:53 msgid "" "The data type that was inferred by the database. It may be necessary to " "input a type manually for expression-defined columns in some cases. In " "most case users should not need to alter this." -msgstr "" - -#: superset/connectors/sqla/views.py:78 superset/connectors/sqla/views.py:121 -#: superset/connectors/sqla/views.py:193 superset/views/core.py:361 -msgid "Table" -msgstr "表" +msgstr "由数据库推断的数据类型。在某些情况下,可能需要为表达式定义的列手工输入一个类型。在大多数情况下,用户不需要修改这个数据类型。" -#: superset/connectors/sqla/views.py:83 +#: superset/connectors/sqla/views.py:91 msgid "Expression" msgstr "表达式" -#: superset/connectors/sqla/views.py:84 +#: superset/connectors/sqla/views.py:92 msgid "Is temporal" msgstr "表示时间" -#: superset/connectors/sqla/views.py:85 +#: superset/connectors/sqla/views.py:93 msgid "Datetime Format" msgstr "时间格式" -#: superset/connectors/sqla/views.py:86 +#: superset/connectors/sqla/views.py:94 msgid "Database Expression" msgstr "数据库表达式" -#: superset/connectors/sqla/views.py:120 +#: superset/connectors/sqla/views.py:102 +msgid "List Metrics" +msgstr "指标列" + +#: superset/connectors/sqla/views.py:103 +msgid "Show Metric" +msgstr "显示指标" + +#: superset/connectors/sqla/views.py:104 +msgid "Add Metric" +msgstr "添加指标" + +#: superset/connectors/sqla/views.py:105 +msgid "Edit Metric" +msgstr "编辑指标" + +#: superset/connectors/sqla/views.py:134 msgid "SQL Expression" msgstr "SQL表达式" -#: superset/connectors/sqla/views.py:164 +#: superset/connectors/sqla/views.py:152 +msgid "List Tables" +msgstr "表列表" + +#: superset/connectors/sqla/views.py:153 +msgid "Show Table" +msgstr "显示表" + +#: superset/connectors/sqla/views.py:154 +msgid "Add Table" +msgstr "添加表" + +#: superset/connectors/sqla/views.py:155 +msgid "Edit Table" +msgstr "编辑表" + +#: superset/connectors/sqla/views.py:184 msgid "Name of the table that exists in the source database" -msgstr "" +msgstr "源数据库中存在的表的名称" -#: superset/connectors/sqla/views.py:166 +#: superset/connectors/sqla/views.py:186 msgid "Schema, as used only in some databases like Postgres, Redshift and DB2" -msgstr "" +msgstr "模式,只在一些数据库中使用,比如Postgres、Redshift和DB2" -#: superset/connectors/sqla/views.py:172 +#: superset/connectors/sqla/views.py:192 msgid "" "This fields acts a Superset view, meaning that Superset will run a query " "against this string as a subquery." -msgstr "" +msgstr "这个字段执行Superset视图时,意味着Superset将以子查询的形式对字符串运行查询。" -#: superset/connectors/sqla/views.py:176 +#: superset/connectors/sqla/views.py:196 msgid "" "Predicate applied when fetching distinct value to populate the filter " "control component. Supports jinja template syntax. Applies only when " "`Enable Filter Select` is on." -msgstr "" +msgstr "当获取不同的值来填充过滤器组件应用时。支持jinja的模板语法。只在`启用过滤器选择`时应用。" -#: superset/connectors/sqla/views.py:182 +#: superset/connectors/sqla/views.py:202 msgid "Redirects to this endpoint when clicking on the table from the table list" -msgstr "" +msgstr "点击表列表中的表时将重定向到此端点" -#: superset/connectors/sqla/views.py:194 +#: superset/connectors/sqla/views.py:214 msgid "Changed By" msgstr "修改人" -#: superset/connectors/sqla/views.py:195 superset/views/core.py:237 +#: superset/connectors/sqla/views.py:215 superset/views/core.py:245 msgid "Database" msgstr "数据库" -#: superset/connectors/sqla/views.py:196 superset/views/core.py:239 +#: superset/connectors/sqla/views.py:216 superset/views/core.py:247 msgid "Last Changed" msgstr "更新时间" -#: superset/connectors/sqla/views.py:198 +#: superset/connectors/sqla/views.py:218 msgid "Schema" msgstr "模式" -#: superset/connectors/sqla/views.py:202 +#: superset/connectors/sqla/views.py:222 msgid "Offset" msgstr "偏移" -#: superset/connectors/sqla/views.py:235 +#: superset/connectors/sqla/views.py:255 msgid "" "The table was created. As part of this two phase configuration process, " "you should now click the edit button by the new table to configure it." -msgstr "" +msgstr "表被创建。作为这两个阶段配置过程的一部分,您现在应该单击新表的编辑按钮来配置它。" -#: superset/connectors/sqla/views.py:259 +#: superset/connectors/sqla/views.py:279 msgid "Tables" msgstr "数据表" @@ -549,30 +2955,21 @@ msgstr "导入" #: superset/templates/superset/request_access.html:2 msgid "No Access!" -msgstr "" +msgstr "不能访问!" #: superset/templates/superset/request_access.html:7 #, python-format msgid "You do not have permissions to access the datasource(s): %(name)s." -msgstr "" +msgstr "您没有权限访问数据源(s): %(name)s" #: superset/templates/superset/request_access.html:13 msgid "Request Permissions" -msgstr "" - -#: superset/templates/superset/request_access.html:16 -msgid "Cancel" -msgstr "取消" +msgstr "请求权限" #: superset/templates/superset/welcome.html:10 msgid "Welcome!" msgstr "欢迎!" -#: superset/templates/superset/welcome.html:20 superset/views/core.py:353 -#: superset/views/core.py:507 -msgid "Dashboards" -msgstr "看板" - #: superset/templates/superset/models/database/macros.html:4 msgid "Test Connection" msgstr "测试连接" @@ -584,150 +2981,178 @@ msgstr "数据源%(name)s 已存在" #: superset/views/base.py:256 msgid "Delete" -msgstr "" +msgstr "删除" #: superset/views/base.py:257 msgid "Delete all Really?" -msgstr "" +msgstr "确定删除全部?" -#: superset/views/core.py:55 +#: superset/views/core.py:57 msgid "This endpoint requires the `all_datasource_access` permission" -msgstr "" +msgstr "这个端点需要“all_datasource_access”的权限" -#: superset/views/core.py:57 +#: superset/views/core.py:59 msgid "The datasource seems to have been deleted" -msgstr "" +msgstr "数据源已经被删除" -#: superset/views/core.py:58 +#: superset/views/core.py:60 msgid "The access requests seem to have been deleted" -msgstr "" +msgstr "访问请求已被删除" -#: superset/views/core.py:60 +#: superset/views/core.py:62 msgid "The user seems to have been deleted" -msgstr "" +msgstr "用户已经被删除" -#: superset/views/core.py:61 +#: superset/views/core.py:63 msgid "You don't have access to this datasource" -msgstr "" +msgstr "你不能访问这个数据源" -#: superset/views/core.py:65 +#: superset/views/core.py:67 #, python-format msgid "" "This view requires the database %(name)s or `all_datasource_access` " "permission" -msgstr "" +msgstr "此视图需要数据库 %(name)s或“all_datasource_access”权限" -#: superset/views/core.py:70 +#: superset/views/core.py:72 #, python-format msgid "" "This endpoint requires the datasource %(name)s, database or " "`all_datasource_access` permission" -msgstr "" +msgstr "此端点需要数据源 %(name)s、数据库或“all_datasource_access”权限" -#: superset/views/core.py:205 +#: superset/views/core.py:175 +msgid "List Databases" +msgstr "数据库列表" + +#: superset/views/core.py:176 +msgid "Show Database" +msgstr "显示数据库" + +#: superset/views/core.py:177 +msgid "Add Database" +msgstr "添加数据库" + +#: superset/views/core.py:178 +msgid "Edit Database" +msgstr "编辑数据库" + +#: superset/views/core.py:213 msgid "Expose this DB in SQL Lab" -msgstr "" +msgstr "在SQL工具箱中公开这个数据库" -#: superset/views/core.py:206 +#: superset/views/core.py:214 msgid "" "Allow users to run synchronous queries, this is the default and should " "work well for queries that can be executed within a web request scope " "(<~1 minute)" -msgstr "" +msgstr "允许用户运行同步查询,这是默认值,可以很好地处理在web请求范围内执行的查询(<~1分钟)" -#: superset/views/core.py:210 +#: superset/views/core.py:218 msgid "" "Allow users to run queries, against an async backend. This assumes that " "you have a Celery worker setup as well as a results backend." -msgstr "" +msgstr "允许用户对异步后端运行查询。 假设您有一个Celery工作者设置以及后端结果。" -#: superset/views/core.py:214 +#: superset/views/core.py:222 msgid "Allow CREATE TABLE AS option in SQL Lab" -msgstr "" +msgstr "在SQL编辑器中允许CREATE TABLE AS选项" -#: superset/views/core.py:215 +#: superset/views/core.py:223 msgid "" "Allow users to run non-SELECT statements (UPDATE, DELETE, CREATE, ...) in" " SQL Lab" -msgstr "" +msgstr "允许用户在SQL编辑器中运行非SELECT语句(UPDATE,DELETE,CREATE,...)" -#: superset/views/core.py:219 +#: superset/views/core.py:227 msgid "" "When allowing CREATE TABLE AS option in SQL Lab, this option forces the " "table to be created in this schema" -msgstr "" +msgstr "当在SQL编辑器中允许CREATE TABLE AS选项时,此选项可以此模式中强制创建表" -#: superset/views/core.py:233 +#: superset/views/core.py:241 msgid "Expose in SQL Lab" -msgstr "" +msgstr "在SQL工具箱中公开" -#: superset/views/core.py:234 +#: superset/views/core.py:242 msgid "Allow CREATE TABLE AS" -msgstr "" +msgstr "允许 CREATE TABLE AS" -#: superset/views/core.py:235 +#: superset/views/core.py:243 msgid "Allow DML" -msgstr "" +msgstr "允许 DML" -#: superset/views/core.py:236 +#: superset/views/core.py:244 msgid "CTAS Schema" -msgstr "" +msgstr "CTAS模式" -#: superset/views/core.py:238 superset/views/core.py:352 -#: superset/views/core.py:454 superset/views/core.py:518 +#: superset/views/core.py:246 superset/views/core.py:366 +#: superset/views/core.py:474 superset/views/core.py:538 msgid "Creator" msgstr "作者" -#: superset/views/core.py:240 +#: superset/views/core.py:248 msgid "SQLAlchemy URI" -msgstr "" +msgstr "SQLAlchemy URI" -#: superset/views/core.py:242 +#: superset/views/core.py:250 msgid "Extra" msgstr "扩展" -#: superset/views/core.py:260 +#: superset/views/core.py:268 msgid "Import Dashboards" msgstr "导入仪表盘" -#: superset/views/core.py:264 superset/views/core.py:2279 -#: superset/views/sql_lab.py:22 +#: superset/views/core.py:272 superset/views/core.py:2318 +#: superset/views/sql_lab.py:23 msgid "Manage" msgstr "管理" -#: superset/views/core.py:271 -msgid "Databases" -msgstr "数据库" - -#: superset/views/core.py:302 superset/views/core.py:531 +#: superset/views/core.py:310 superset/views/core.py:551 msgid "User" msgstr "用户" -#: superset/views/core.py:303 +#: superset/views/core.py:311 msgid "User Roles" msgstr "用户角色" -#: superset/views/core.py:304 +#: superset/views/core.py:312 msgid "Database URL" msgstr "数据库URL" -#: superset/views/core.py:306 +#: superset/views/core.py:314 msgid "Roles to grant" -msgstr "" +msgstr "角色授权" -#: superset/views/core.py:307 +#: superset/views/core.py:315 msgid "Created On" msgstr "创建日期" -#: superset/views/core.py:313 +#: superset/views/core.py:321 msgid "Access requests" msgstr "访问请求" -#: superset/views/core.py:315 superset/views/core.py:542 +#: superset/views/core.py:323 superset/views/core.py:562 msgid "Security" msgstr "安全" -#: superset/views/core.py:340 +#: superset/views/core.py:330 +msgid "List Slices" +msgstr "切片列表" + +#: superset/views/core.py:331 +msgid "Show Slice" +msgstr "显示切片" + +#: superset/views/core.py:332 +msgid "Add Slice" +msgstr "添加切片" + +#: superset/views/core.py:333 +msgid "Edit Slice" +msgstr "编辑切片" + +#: superset/views/core.py:354 msgid "" "These parameters are generated dynamically when clicking the save or " "overwrite button in the explore view. This JSON object is exposed here " @@ -735,237 +3160,193 @@ msgid "" "parameters." msgstr "当单击“保存”或“覆盖”按钮时,这些参数会在视图中动态生成。高级用户可以在这里改变特定的参数。" -#: superset/views/core.py:345 +#: superset/views/core.py:359 msgid "Duration (in seconds) of the caching timeout for this slice." msgstr "切片数据过期时间(秒)" -#: superset/views/core.py:356 +#: superset/views/core.py:370 msgid "Last Modified" msgstr "最后修改" -#: superset/views/core.py:357 superset/views/core.py:453 +#: superset/views/core.py:371 superset/views/core.py:473 msgid "Owners" msgstr "所有者" -#: superset/views/core.py:358 +#: superset/views/core.py:372 msgid "Parameters" msgstr "参数" -#: superset/views/core.py:359 superset/views/core.py:401 +#: superset/views/core.py:373 superset/views/core.py:415 msgid "Slice" msgstr "切片" -#: superset/views/core.py:360 -msgid "Name" -msgstr "名字" +#: superset/views/core.py:432 +msgid "List Dashboards" +msgstr "仪表盘列表" -#: superset/views/core.py:362 -msgid "Visualization Type" -msgstr "图表类型" +#: superset/views/core.py:433 +msgid "Show Dashboard" +msgstr "显示仪表盘" -#: superset/views/core.py:389 superset/views/core.py:452 -msgid "Slices" -msgstr "切片" +#: superset/views/core.py:434 +msgid "Add Dashboard" +msgstr "添加仪表盘" + +#: superset/views/core.py:435 +msgid "Edit Dashboard" +msgstr "编辑仪表盘" -#: superset/views/core.py:426 +#: superset/views/core.py:446 msgid "" "This json object describes the positioning of the widgets in the " "dashboard. It is dynamically generated when adjusting the widgets size " "and positions by using drag & drop in the dashboard view" msgstr "这个JSON对象描述了部件在看板中的位置。它是动态生成的,可以通过拖放,在看板中调整整部件的大小和位置。" -#: superset/views/core.py:431 +#: superset/views/core.py:451 msgid "" "The css for individual dashboards can be altered here, or in the " "dashboard view where changes are immediately visible" msgstr "可以在这里或者在看板视图修改单个看板的CSS样式" -#: superset/views/core.py:435 +#: superset/views/core.py:455 msgid "To get a readable URL for your dashboard" msgstr "为看板生成一个可读的URL" -#: superset/views/core.py:436 +#: superset/views/core.py:456 msgid "" "This JSON object is generated dynamically when clicking the save or " "overwrite button in the dashboard view. It is exposed here for reference " "and for power users who may want to alter specific parameters." msgstr "当在看板视图中单击“保存”或“覆盖”按钮时,这些参数会在视图中动态生成。高级用户可以在这里改变特定的参数。" -#: superset/views/core.py:441 +#: superset/views/core.py:461 msgid "Owners is a list of users who can alter the dashboard." msgstr "“所有者”是一组可以修改看板的用户列表" -#: superset/views/core.py:449 superset/views/core.py:516 +#: superset/views/core.py:469 superset/views/core.py:536 msgid "Dashboard" msgstr "看板" -#: superset/views/core.py:450 superset/views/core.py:517 -msgid "Title" -msgstr "标题" - -#: superset/views/core.py:451 +#: superset/views/core.py:471 msgid "Slug" -msgstr "" +msgstr "Slug" -#: superset/views/core.py:455 superset/views/core.py:519 -msgid "Modified" -msgstr "已修改" - -#: superset/views/core.py:456 +#: superset/views/core.py:476 msgid "Position JSON" msgstr "位置参数" -#: superset/views/core.py:457 -msgid "CSS" -msgstr "" - -#: superset/views/core.py:458 +#: superset/views/core.py:478 msgid "JSON Metadata" msgstr "JSON模板" -#: superset/views/core.py:459 +#: superset/views/core.py:479 msgid "Underlying Tables" msgstr "底层表" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export" -msgstr "" +msgstr "导出" -#: superset/views/core.py:482 +#: superset/views/core.py:502 msgid "Export dashboards?" -msgstr "" +msgstr "导出仪表盘?" -#: superset/views/core.py:532 +#: superset/views/core.py:552 msgid "Action" msgstr "操作" -#: superset/views/core.py:533 +#: superset/views/core.py:553 msgid "dttm" msgstr "DTTM" -#: superset/views/core.py:540 +#: superset/views/core.py:560 msgid "Action Log" msgstr "操作日志" -#: superset/views/core.py:770 +#: superset/views/core.py:790 msgid "Access was requested" -msgstr "" +msgstr "请求访问" -#: superset/views/core.py:831 +#: superset/views/core.py:851 #, python-format msgid "" "%(user)s was granted the role %(role)s that gives access to the " "%(datasource)s" -msgstr "" +msgstr "授予 %(user)s %(role)s 角色来访问 %(datasource)s 数据库" -#: superset/views/core.py:847 +#: superset/views/core.py:867 #, python-format msgid "Role %(r)s was extended to provide the access to the datasource %(ds)s" -msgstr "" +msgstr "扩展角色 %(r)s以提供对datasource %(ds)s的访问" -#: superset/views/core.py:856 +#: superset/views/core.py:876 msgid "You have no permission to approve this request" -msgstr "" +msgstr "您没有权限批准此请求" -#: superset/views/core.py:1589 +#: superset/views/core.py:1609 msgid "" "Malformed request. slice_id or table_name and db_name arguments are " "expected" -msgstr "" +msgstr "格式错误的请求。需要使用slice_id或table_name和db_name参数" -#: superset/views/core.py:1595 +#: superset/views/core.py:1615 #, python-format msgid "Slice %(id)s not found" -msgstr "" +msgstr "切片 %(id)s 没有找到" -#: superset/views/core.py:1607 +#: superset/views/core.py:1627 #, python-format msgid "Table %(t)s wasn't found in the database %(d)s" -msgstr "" +msgstr "在数据库 %(d)s中找不到表 %(t)s" -#: superset/views/core.py:1741 +#: superset/views/core.py:1761 #, python-format msgid "Can't find User '%(name)s', please ask your admin to create one." -msgstr "" +msgstr "找不到用户'%(name)',请您让管理员创建一个。" -#: superset/views/core.py:1748 +#: superset/views/core.py:1768 #, python-format msgid "Can't find DruidCluster with cluster_name = '%(name)s'" -msgstr "" +msgstr "不能找到具有cluster_name = '%(name)s'的Druid集群" -#: superset/views/core.py:2276 +#: superset/views/core.py:2315 msgid "CSS Templates" msgstr "CSS模板" -#: superset/views/core.py:2286 +#: superset/views/core.py:2325 msgid "SQL Editor" msgstr "SQL编辑器" -#: superset/views/core.py:2291 superset/views/core.py:2300 +#: superset/views/core.py:2330 superset/views/core.py:2339 msgid "SQL Lab" msgstr "SQL工具箱" -#: superset/views/core.py:2295 +#: superset/views/core.py:2334 msgid "Query Search" msgstr "查询搜索" -#: superset/views/sql_lab.py:20 +#: superset/views/sql_lab.py:21 msgid "Queries" msgstr "查询" -#: superset/views/sql_lab.py:55 -msgid "Saved Queries" -msgstr "已保存查询" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:73 -msgid "Please enter a slice name" -msgstr "请输入切片名称" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:88 -msgid "Please select a dashboard" -msgstr "请选择一个仪表盘" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:96 -msgid "Please enter a dashboard name" -msgstr "请输入仪表盘名称" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:134 -msgid "Save A Slice" -msgstr "保存一个切片" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:155 -msgid "Overwrite slice" -msgstr "覆盖切片" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:164 -msgid "Save as" -msgstr "另存为" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:168 -msgid "[slice name]" -msgstr "[切片名称]" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:181 -msgid "Do not add to a dashboard" -msgstr "不要添加到仪表盘" - -#: superset/assets/javascripts/explore/components/SaveModal.jsx:189 -msgid "Add slice to existing dashboard" -msgstr "将切片添加到现有仪表盘" +#: superset/views/sql_lab.py:30 +msgid "List Saved Query" +msgstr "保存的查询列表" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:203 -msgid "Add to new dashboard" -msgstr "添加到新的仪表盘" +#: superset/views/sql_lab.py:31 +msgid "Show Saved Query" +msgstr "显示保存的查询" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:208 -msgid "[dashboard name]" -msgstr "[仪表盘名称]" +#: superset/views/sql_lab.py:32 +msgid "Add Saved Query" +msgstr "添加保存的查询" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:220 -msgid "Save" -msgstr "保存" +#: superset/views/sql_lab.py:33 +msgid "Edit Saved Query" +msgstr "编辑保存的查询" -#: superset/assets/javascripts/explore/components/SaveModal.jsx:229 -msgid "Save & go to dashboard" -msgstr "保存并转到仪表盘" +#: superset/views/sql_lab.py:62 +msgid "Saved Queries" +msgstr "已保存查询" diff --git a/superset/views/core.py b/superset/views/core.py index 4a09517fad58b..f2e12526c3b4f 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -171,6 +171,12 @@ def generate_download_headers(extension): class DatabaseView(SupersetModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.Database) + + list_title = _('List Databases') + show_title = _('Show Database') + add_title = _('Add Database') + edit_title = _('Edit Database') + list_columns = [ 'database_name', 'backend', 'allow_run_sync', 'allow_run_async', 'allow_dml', 'creator', 'modified'] @@ -320,6 +326,12 @@ class AccessRequestsModelView(SupersetModelView, DeleteMixin): class SliceModelView(SupersetModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.Slice) + + list_title = _('List Slices') + show_title = _('Show Slice') + add_title = _('Add Slice') + edit_title = _('Edit Slice') + can_add = False label_columns = { 'datasource_link': 'Datasource', @@ -416,6 +428,12 @@ class SliceAddView(SliceModelView): # noqa class DashboardModelView(SupersetModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.Dashboard) + + list_title = _('List Dashboards') + show_title = _('Show Dashboard') + add_title = _('Add Dashboard') + edit_title = _('Edit Dashboard') + list_columns = ['dashboard_link', 'creator', 'modified'] edit_columns = [ 'dashboard_title', 'slug', 'slices', 'owners', 'position_json', 'css', @@ -683,7 +701,8 @@ def json_response(self, obj, status=200): @expose("/datasources/") def datasources(self): datasources = ConnectorRegistry.get_all_datasources(db.session) - datasources = [(str(o.id) + '__' + o.type, repr(o)) for o in datasources] + datasources = [o.short_data for o in datasources] + datasources = sorted(datasources, key=lambda o: o['name']) return self.json_response(datasources) @has_access_api @@ -2013,6 +2032,7 @@ def sql_json(self): # Async request. if async: + logging.info("Running query on a Celery worker") # Ignore the celery future object and the request may time out. try: sql_lab.get_sql_results.delay( @@ -2272,7 +2292,7 @@ def sqllab(self): @has_access @expose("/rest/api/get_locale", methods=['GET', 'POST']) - def getLocale(self): + def get_locale(self): return json_success(json.dumps({ 'language': str(get_locale()), })) diff --git a/superset/views/sql_lab.py b/superset/views/sql_lab.py index 16a8dd21c9477..03f382e9cc79d 100644 --- a/superset/views/sql_lab.py +++ b/superset/views/sql_lab.py @@ -4,6 +4,7 @@ from flask_appbuilder.models.sqla.interface import SQLAInterface from flask_babel import gettext as __ +from flask_babel import lazy_gettext as _ from superset import appbuilder from superset.models.sql_lab import Query, SavedQuery @@ -25,6 +26,12 @@ class QueryView(SupersetModelView): class SavedQueryView(SupersetModelView, DeleteMixin): datamodel = SQLAInterface(SavedQuery) + + list_title = _('List Saved Query') + show_title = _('Show Saved Query') + add_title = _('Add Saved Query') + edit_title = _('Edit Saved Query') + list_columns = [ 'label', 'user', 'database', 'schema', 'description', 'modified', 'pop_tab_link'] diff --git a/superset/viz.py b/superset/viz.py index 1ae42b369aab8..de1f635ec533f 100755 --- a/superset/viz.py +++ b/superset/viz.py @@ -353,6 +353,12 @@ def get_data(self, df): columns=list(df.columns), ) + def json_dumps(self, obj): + if self.form_data.get('all_columns'): + return json.dumps(obj, default=utils.json_iso_dttm_ser) + else: + return super(TableViz, self).json_dumps(obj) + class PivotTableViz(BaseViz): @@ -394,8 +400,11 @@ def get_data(self, df): columns=self.form_data.get('columns'), values=self.form_data.get('metrics'), aggfunc=self.form_data.get('pandas_aggfunc'), - margins=True, + margins=self.form_data.get('pivot_margins'), ) + # Display metrics side by side with each column + if self.form_data.get('combine_metric'): + df = df.stack(0).unstack() return dict( columns=list(df.columns), html=df.to_html( diff --git a/tests/db_engine_specs_test.py b/tests/db_engine_specs_test.py index 626a97bb3f9c3..a3038132c0a8c 100644 --- a/tests/db_engine_specs_test.py +++ b/tests/db_engine_specs_test.py @@ -5,7 +5,7 @@ import unittest -from superset import db_engine_specs +from superset.db_engine_specs import HiveEngineSpec class DbEngineSpecsTestCase(unittest.TestCase): @@ -13,36 +13,38 @@ def test_0_progress(self): log = """ 17/02/07 18:26:27 INFO log.PerfLogger: 17/02/07 18:26:27 INFO log.PerfLogger: - """ - self.assertEquals(0, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals( + 0, HiveEngineSpec.progress(log)) def test_0_progress(self): log = """ 17/02/07 18:26:27 INFO log.PerfLogger: 17/02/07 18:26:27 INFO log.PerfLogger: - """ - self.assertEquals(0, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals( + 0, HiveEngineSpec.progress(log)) def test_number_of_jobs_progress(self): log = """ 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2 - """ - self.assertEquals(0, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals(0, HiveEngineSpec.progress(log)) def test_job_1_launched_progress(self): log = """ 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2 - """ - self.assertEquals(0, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals(0, HiveEngineSpec.progress(log)) def test_job_1_launched_stage_1_0_progress(self): log = """ 17/02/07 19:15:55 INFO ql.Driver: Total jobs = 2 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0% - """ - self.assertEquals(0, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals(0, HiveEngineSpec.progress(log)) def test_job_1_launched_stage_1_map_40_progress(self): log = """ @@ -50,8 +52,8 @@ def test_job_1_launched_stage_1_map_40_progress(self): 17/02/07 19:15:55 INFO ql.Driver: Launching Job 1 out of 2 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0% 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 40%, reduce = 0% - """ - self.assertEquals(10, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals(10, HiveEngineSpec.progress(log)) def test_job_1_launched_stage_1_map_80_reduce_40_progress(self): log = """ @@ -60,8 +62,8 @@ def test_job_1_launched_stage_1_map_80_reduce_40_progress(self): 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0% 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 40%, reduce = 0% 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 80%, reduce = 40% - """ - self.assertEquals(30, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals(30, HiveEngineSpec.progress(log)) def test_job_1_launched_stage_2_stages_progress(self): log = """ @@ -72,8 +74,8 @@ def test_job_1_launched_stage_2_stages_progress(self): 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 80%, reduce = 40% 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-2 map = 0%, reduce = 0% 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 100%, reduce = 0% - """ - self.assertEquals(12, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals(12, HiveEngineSpec.progress(log)) def test_job_2_launched_stage_2_stages_progress(self): log = """ @@ -83,5 +85,5 @@ def test_job_2_launched_stage_2_stages_progress(self): 17/02/07 19:15:55 INFO ql.Driver: Launching Job 2 out of 2 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 0%, reduce = 0% 17/02/07 19:16:09 INFO exec.Task: 2017-02-07 19:16:09,173 Stage-1 map = 40%, reduce = 0% - """ - self.assertEquals(60, db_engine_specs.HiveEngineSpec.progress(log)) + """.split('\n') + self.assertEquals(60, HiveEngineSpec.progress(log)) diff --git a/tests/druid_tests.py b/tests/druid_tests.py index d7b93dee0638e..637afe984ce02 100644 --- a/tests/druid_tests.py +++ b/tests/druid_tests.py @@ -11,8 +11,8 @@ from mock import Mock, patch from superset import db, sm, security -from superset.connectors.druid.models import DruidCluster, DruidDatasource -from superset.connectors.druid.models import PyDruid +from superset.connectors.druid.models import DruidMetric, DruidCluster, DruidDatasource +from superset.connectors.druid.models import PyDruid, Quantile, Postaggregator from .base_tests import SupersetTestCase @@ -38,7 +38,7 @@ "metric1": { "type": "longSum", "name": "metric1", - "fieldName": "metric1"} + "fieldName": "metric1"}, }, "size": 300000, "numRows": 5000000 @@ -318,6 +318,77 @@ def test_sync_druid_perm(self, PyDruid): permission=permission, view_menu=view_menu).first() assert pv is not None + def test_metrics_and_post_aggs(self): + """ + Test generation of metrics and post-aggregations from an initial list + of superset metrics (which may include the results of either). This + primarily tests that specifying a post-aggregator metric will also + require the raw aggregation of the associated druid metric column. + """ + metrics_dict = { + 'unused_count': DruidMetric( + metric_name='unused_count', + verbose_name='COUNT(*)', + metric_type='count', + json=json.dumps({'type': 'count', 'name': 'unused_count'})), + 'some_sum': DruidMetric( + metric_name='some_sum', + verbose_name='SUM(*)', + metric_type='sum', + json=json.dumps({'type': 'sum', 'name': 'sum'})), + 'a_histogram': DruidMetric( + metric_name='a_histogram', + verbose_name='APPROXIMATE_HISTOGRAM(*)', + metric_type='approxHistogramFold', + json=json.dumps({'type': 'approxHistogramFold', 'name': 'a_histogram'})), + 'aCustomMetric': DruidMetric( + metric_name='aCustomMetric', + verbose_name='MY_AWESOME_METRIC(*)', + metric_type='aCustomType', + json=json.dumps({'type': 'customMetric', 'name': 'aCustomMetric'})), + 'quantile_p95': DruidMetric( + metric_name='quantile_p95', + verbose_name='P95(*)', + metric_type='postagg', + json=json.dumps({ + 'type': 'quantile', + 'probability': 0.95, + 'name': 'p95', + 'fieldName': 'a_histogram'})), + 'aCustomPostAgg': DruidMetric( + metric_name='aCustomPostAgg', + verbose_name='CUSTOM_POST_AGG(*)', + metric_type='postagg', + json=json.dumps({ + 'type': 'customPostAgg', + 'name': 'aCustomPostAgg', + 'field': { + 'type': 'fieldAccess', + 'fieldName': 'aCustomMetric'}})), + } + + metrics = ['some_sum'] + all_metrics, post_aggs = DruidDatasource._metrics_and_post_aggs( + metrics, metrics_dict) + + assert all_metrics == ['some_sum'] + assert post_aggs == {} + + metrics = ['quantile_p95'] + all_metrics, post_aggs = DruidDatasource._metrics_and_post_aggs( + metrics, metrics_dict) + + result_postaggs = set(['quantile_p95']) + assert all_metrics == ['a_histogram'] + assert set(post_aggs.keys()) == result_postaggs + + metrics = ['aCustomPostAgg'] + all_metrics, post_aggs = DruidDatasource._metrics_and_post_aggs( + metrics, metrics_dict) + + result_postaggs = set(['aCustomPostAgg']) + assert all_metrics == ['aCustomMetric'] + assert set(post_aggs.keys()) == result_postaggs if __name__ == '__main__': diff --git a/tests/sqllab_tests.py b/tests/sqllab_tests.py index 9e59adc7dd952..29d74f4dc3502 100644 --- a/tests/sqllab_tests.py +++ b/tests/sqllab_tests.py @@ -189,12 +189,9 @@ def test_search_query_on_time(self): from_time = 'from={}'.format(int(first_query_time)) to_time = 'to={}'.format(int(second_query_time)) params = [from_time, to_time] - resp = self.get_resp('/superset/search_queries?'+'&'.join(params)) + resp = self.get_resp('/superset/search_queries?' + '&'.join(params)) data = json.loads(resp) self.assertEquals(2, len(data)) - for k in data: - self.assertLess(int(first_query_time), k['startDttm']) - self.assertLess(k['startDttm'], int(second_query_time)) def test_alias_duplicate(self): self.run_sql(