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 de0bef3434f6d..aa77f074331cd 100644 Binary files a/superset/translations/en/LC_MESSAGES/messages.mo and b/superset/translations/en/LC_MESSAGES/messages.mo differ diff --git a/superset/translations/en/LC_MESSAGES/messages.po b/superset/translations/en/LC_MESSAGES/messages.po index 9c543161028b0..4f40f9a000f10 100644 --- a/superset/translations/en/LC_MESSAGES/messages.po +++ b/superset/translations/en/LC_MESSAGES/messages.po @@ -7,7 +7,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: 2016-05-02 08:49-0700\n" "Last-Translator: FULL NAME \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 580a31fcab3e9..9036b9dc10fef 100644 Binary files a/superset/translations/es/LC_MESSAGES/messages.mo and b/superset/translations/es/LC_MESSAGES/messages.mo differ diff --git a/superset/translations/es/LC_MESSAGES/messages.po b/superset/translations/es/LC_MESSAGES/messages.po index 569c5b9a16bd7..e68b953a75e04 100644 --- a/superset/translations/es/LC_MESSAGES/messages.po +++ b/superset/translations/es/LC_MESSAGES/messages.po @@ -7,7 +7,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: 2016-05-02 08:49-0700\n" "Last-Translator: FULL NAME \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 4fa36d625378b..b72ac0f9a8480 100644 Binary files a/superset/translations/fr/LC_MESSAGES/messages.mo and b/superset/translations/fr/LC_MESSAGES/messages.mo differ diff --git a/superset/translations/fr/LC_MESSAGES/messages.po b/superset/translations/fr/LC_MESSAGES/messages.po index a45d5bacd1982..84edc003520ea 100644 --- a/superset/translations/fr/LC_MESSAGES/messages.po +++ b/superset/translations/fr/LC_MESSAGES/messages.po @@ -7,7 +7,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: 2016-05-01 23:07-0700\n" "Last-Translator: FULL NAME \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 b38fc85fcb5d6..0d6d5c8f5c833 100644 Binary files a/superset/translations/it/LC_MESSAGES/messages.mo and b/superset/translations/it/LC_MESSAGES/messages.mo differ 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 a23a0d28bf58e..fdb20005aea12 100644 Binary files a/superset/translations/zh/LC_MESSAGES/messages.mo and b/superset/translations/zh/LC_MESSAGES/messages.mo differ diff --git a/superset/translations/zh/LC_MESSAGES/messages.po b/superset/translations/zh/LC_MESSAGES/messages.po index 6dbc3202a69b7..cd160828c2ee7 100644 --- a/superset/translations/zh/LC_MESSAGES/messages.po +++ b/superset/translations/zh/LC_MESSAGES/messages.po @@ -7,7 +7,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: 2016-05-01 23:07-0700\n" "Last-Translator: FULL NAME \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(