diff --git a/superset/assets/src/dashboard/components/SliceAdder.jsx b/superset/assets/src/dashboard/components/SliceAdder.jsx
index f237a06dd20..31ad79745ca 100644
--- a/superset/assets/src/dashboard/components/SliceAdder.jsx
+++ b/superset/assets/src/dashboard/components/SliceAdder.jsx
@@ -12,6 +12,7 @@ import Loading from '../../components/Loading';
import { CHART_TYPE, NEW_COMPONENT_SOURCE_TYPE } from '../util/componentTypes';
import { NEW_CHART_ID, NEW_COMPONENTS_SOURCE_ID } from '../util/constants';
import { slicePropShape } from '../util/propShapes';
+import { t } from '../../locales';
const propTypes = {
fetchAllSlices: PropTypes.func.isRequired,
@@ -204,7 +205,7 @@ class SliceAdder extends React.Component {
View query}
+ triggerNode={{t('View query')}}
modalTitle={t('View query')}
bsSize="large"
beforeOpen={this.beforeOpen}
@@ -152,7 +152,7 @@ export default class DisplayQueryButton extends React.PureComponent {
View results}
+ triggerNode={{t('View results')}}
modalTitle={t('View results')}
bsSize="large"
beforeOpen={this.beforeOpen}
@@ -163,7 +163,7 @@ export default class DisplayQueryButton extends React.PureComponent {
eventKey="3"
onClick={this.redirectSQLLab.bind(this)}
>
- Run in SQL Lab
+ {t('Run in SQL Lab')}
}
);
diff --git a/superset/assets/src/explore/components/controls/AnnotationLayer.jsx b/superset/assets/src/explore/components/controls/AnnotationLayer.jsx
index 6cb2f2d2090..9e31e6c8568 100644
--- a/superset/assets/src/explore/components/controls/AnnotationLayer.jsx
+++ b/superset/assets/src/explore/components/controls/AnnotationLayer.jsx
@@ -26,6 +26,8 @@ import ControlHeader from '../ControlHeader';
import { nonEmpty } from '../../validators';
import vizTypes from '../../visTypes';
+import { t } from '../../../locales';
+
const AUTOMATIC_COLOR = '';
const propTypes = {
@@ -485,12 +487,12 @@ export default class AnnotationLayer extends React.PureComponent {
{}}
- title="Display configuration"
- info="Configure your how you overlay is displayed here."
+ title={t('Display configuration')}
+ info={t('Configure your how you overlay is displayed here.')}
>
this.setState({ opacity: v })}
/>
-
+
this.setState({ width: v })}
@@ -580,27 +582,27 @@ export default class AnnotationLayer extends React.PureComponent {
{}}
- title="Layer Configuration"
- info="Configure the basics of your Annotation Layer."
+ title={t('Layer Configuration')}
+ info={t('Configure the basics of your Annotation Layer.')}
>
this.setState({ name: v })}
- validationErrors={!name ? ['Mandatory'] : []}
+ validationErrors={!name ? [t('Mandatory')] : []}
/>
this.setState({ show: !v })}
/>
({ value: x, label: getAnnotationTypeLabel(x) }))}
@@ -630,7 +632,7 @@ export default class AnnotationLayer extends React.PureComponent {
bsSize="sm"
onClick={this.deleteAnnotation}
>
- { !isNew ? 'Remove' : 'Cancel' }
+ { !isNew ? t('Remove') : t('Cancel') }
diff --git a/superset/assets/src/explore/components/controls/AnnotationLayerControl.jsx b/superset/assets/src/explore/components/controls/AnnotationLayerControl.jsx
index 3e4cd24e31c..b33dab01957 100644
--- a/superset/assets/src/explore/components/controls/AnnotationLayerControl.jsx
+++ b/superset/assets/src/explore/components/controls/AnnotationLayerControl.jsx
@@ -75,7 +75,7 @@ class AnnotationLayerControl extends React.PureComponent {
return (
Moving Average],
+ [{t('Moving Average')}
],
['rolling_type', 'rolling_periods', 'min_periods'],
- [Time Comparison
],
+ [{t('Time Comparison')}
],
['time_compare', 'comparison_type'],
- [Python Functions
],
+ [{t('Python Functions')}
],
[pandas.resample
],
['resample_how', 'resample_rule', 'resample_fillmethod'],
],
@@ -1833,7 +1833,7 @@ export const visTypes = {
},
partition: {
- label: 'Partition Diagram',
+ label: t('Partition Diagram'),
showOnExplore: true,
controlPanelSections: [
sections.NVD3TimeSeries[0],
diff --git a/superset/connectors/druid/views.py b/superset/connectors/druid/views.py
index 5e5ba0da93e..cc0cea9a08c 100644
--- a/superset/connectors/druid/views.py
+++ b/superset/connectors/druid/views.py
@@ -56,6 +56,8 @@ class DruidColumnInlineView(CompactCRUDMixin, SupersetModelView): # noqa
'sum': _('Sum'),
'min': _('Min'),
'max': _('Max'),
+ 'verbose_name': _('Verbose Name'),
+ 'description': _('Description'),
}
description_columns = {
'filterable': _(
@@ -137,6 +139,7 @@ class DruidMetricInlineView(CompactCRUDMixin, SupersetModelView): # noqa
'json': _('JSON'),
'datasource': _('Druid Datasource'),
'warning_text': _('Warning Message'),
+ 'is_restricted': _('Is Restricted'),
}
def post_add(self, metric):
@@ -175,6 +178,9 @@ class DruidClusterModelView(SupersetModelView, DeleteMixin, YamlExportMixin): #
'broker_host': _('Broker Host'),
'broker_port': _('Broker Port'),
'broker_endpoint': _('Broker Endpoint'),
+ 'verbose_name': _('Verbose Name'),
+ 'cache_timeout': _('Cache Timeout'),
+ 'metadata_last_refreshed': _('Metadata Last Refreshed'),
}
description_columns = {
'cache_timeout': _(
@@ -272,6 +278,10 @@ class DruidDatasourceModelView(DatasourceModelView, DeleteMixin, YamlExportMixin
'default_endpoint': _('Default Endpoint'),
'offset': _('Time Offset'),
'cache_timeout': _('Cache Timeout'),
+ 'datasource_name': _('Datasource Name'),
+ 'fetch_values_from': _('Fetch Values From'),
+ 'changed_by_': _('Changed By'),
+ 'modified': _('Modified'),
}
def pre_add(self, datasource):
diff --git a/superset/connectors/sqla/views.py b/superset/connectors/sqla/views.py
index 45143616deb..2766385d514 100644
--- a/superset/connectors/sqla/views.py
+++ b/superset/connectors/sqla/views.py
@@ -242,6 +242,7 @@ class TableModelView(DatasourceModelView, DeleteMixin, YamlExportMixin): # noqa
'description': _('Description'),
'is_sqllab_view': _('SQL Lab View'),
'template_params': _('Template parameters'),
+ 'modified': _('Modified'),
}
def pre_add(self, table):
diff --git a/superset/views/annotations.py b/superset/views/annotations.py
index e2aaf888da7..648be25881b 100644
--- a/superset/views/annotations.py
+++ b/superset/views/annotations.py
@@ -7,6 +7,7 @@ from __future__ import unicode_literals
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.annotations import Annotation, AnnotationLayer
@@ -15,11 +16,25 @@ from .base import DeleteMixin, SupersetModelView
class AnnotationModelView(SupersetModelView, DeleteMixin): # noqa
datamodel = SQLAInterface(Annotation)
+
+ list_title = _('List Annotation')
+ show_title = _('Show Annotation')
+ add_title = _('Add Annotation')
+ edit_title = _('Edit Annotation')
+
list_columns = ['layer', 'short_descr', 'start_dttm', 'end_dttm']
edit_columns = [
'layer', 'short_descr', 'long_descr', 'start_dttm', 'end_dttm']
add_columns = edit_columns
+ label_columns = {
+ 'layer': _('Layer'),
+ 'short_descr': _('Short Descr'),
+ 'start_dttm': _('Start Dttm'),
+ 'end_dttm': _('End Dttm'),
+ 'long_descr': _('Long Descr'),
+ }
+
def pre_add(self, obj):
if not obj.layer:
raise Exception('Annotation layer is required.')
@@ -38,10 +53,21 @@ class AnnotationModelView(SupersetModelView, DeleteMixin): # noqa
class AnnotationLayerModelView(SupersetModelView, DeleteMixin):
datamodel = SQLAInterface(AnnotationLayer)
+
+ list_title = _('List Annotation Layer')
+ show_title = _('Show Annotation Layer')
+ add_title = _('Add Annotation Layer')
+ edit_title = _('Edit Annotation Layer')
+
list_columns = ['id', 'name']
edit_columns = ['name', 'descr']
add_columns = edit_columns
+ label_columns = {
+ 'name': _('Name'),
+ 'descr': _('Description'),
+ }
+
appbuilder.add_view(
AnnotationLayerModelView,
diff --git a/superset/views/core.py b/superset/views/core.py
index e6f29039e79..71f6ff1f218 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -240,6 +240,10 @@ class DatabaseView(SupersetModelView, DeleteMixin, YamlExportMixin): # noqa
'allow_run_sync': _('Allow Run Sync'),
'allow_run_async': _('Allow Run Async'),
'impersonate_user': _('Impersonate the logged on user'),
+ 'allow_csv_upload': _('Allow Csv Upload'),
+ 'modified': _('Modified'),
+ 'allow_multi_schema_metadata_fetch': _('Allow Multi Schema Metadata Fetch'),
+ 'backend': _('Backend'),
}
def pre_add(self, db):
@@ -624,6 +628,12 @@ appbuilder.add_view_no_menu(DashboardAddView)
class LogModelView(SupersetModelView):
datamodel = SQLAInterface(models.Log)
+
+ list_title = _('List Log')
+ show_title = _('Show Log')
+ add_title = _('Add Log')
+ edit_title = _('Edit Log')
+
list_columns = ('user', 'action', 'dttm')
edit_columns = ('user', 'action', 'dttm', 'json')
base_order = ('dttm', 'desc')
@@ -2725,6 +2735,12 @@ appbuilder.add_view_no_menu(Superset)
class CssTemplateModelView(SupersetModelView, DeleteMixin):
datamodel = SQLAInterface(models.CssTemplate)
+
+ list_title = _('List Css Template')
+ show_title = _('Show Css Template')
+ add_title = _('Add Css Template')
+ edit_title = _('Edit Css Template')
+
list_columns = ['template_name']
edit_columns = ['template_name', 'css']
add_columns = edit_columns