diff --git a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx index 747c17d80bfc..cf44a7f13140 100644 --- a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx +++ b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx @@ -53,6 +53,7 @@ import { Dataset } from '../types'; import TableControls from './DrillDetailTableControls'; import { getDrillPayload } from './utils'; import { ResultsPage } from './types'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; const PAGE_SIZE = 50; @@ -303,7 +304,7 @@ export default function DrillDetailPane({ tableContent = ; } else if (resultsPage?.total === 0) { // Render empty state if no results are returned for page - const title = t('No rows were returned for this dataset'); + const title = t('No rows were returned for this %s', datasetLabelLower()); tableContent = ; } else { // Render table if at least one page has successfully loaded diff --git a/superset-frontend/src/components/DatabaseSelector/index.tsx b/superset-frontend/src/components/DatabaseSelector/index.tsx index ee5f39b9979d..361f63dc75ac 100644 --- a/superset-frontend/src/components/DatabaseSelector/index.tsx +++ b/superset-frontend/src/components/DatabaseSelector/index.tsx @@ -52,6 +52,10 @@ import type { DatabaseObject, } from './types'; import { StyledFormLabel } from './styles'; +import { + databaseLabel, + databasesLabelLower, +} from 'src/utils/semanticLayerLabels'; const DatabaseSelectorWrapper = styled.div<{ horizontal?: boolean }>` ${({ theme, horizontal }) => @@ -431,7 +435,11 @@ export function DatabaseSelector({ function renderDatabaseSelect() { if (sqlLabMode) { return renderSelectRow( - t('Select database or type to search databases'), + t( + 'Select %s or type to search %s', + databaseLabel().toLowerCase(), + databasesLabelLower(), + ), null, null, { @@ -448,16 +456,24 @@ export function DatabaseSelector({ return (
{renderSelectRow( - t('Database'), + databaseLabel(), = ({ const { state: { loading, resourceCollection, resourceCount }, fetchData, - } = useListViewResource('dataset', t('dataset'), addDangerToast); + } = useListViewResource( + 'dataset', + datasetLabelLower(), + addDangerToast, + ); const selectDatasource = useCallback((datasource: Datasource) => { setConfirmChange(true); @@ -187,7 +192,7 @@ const ChangeDatasourceModal: FunctionComponent = ({ ); }); onHide(); - addSuccessToast(t('Successfully changed dataset!')); + addSuccessToast(t('Successfully changed %s!', datasetLabelLower())); }; const handlerCancelConfirm = () => { @@ -253,7 +258,7 @@ const ChangeDatasourceModal: FunctionComponent = ({ onHide={onHide} responsive name="Swap dataset" - title={t('Swap dataset')} + title={t('Swap %s', datasetLabelLower())} width={confirmChange ? '432px' : ''} height={confirmChange ? 'auto' : '540px'} hideFooter={!confirmChange} diff --git a/superset-frontend/src/components/ErrorMessage/DatasetNotFoundErrorMessage.tsx b/superset-frontend/src/components/ErrorMessage/DatasetNotFoundErrorMessage.tsx index e74da4d0649b..26cd6e4f8cd3 100644 --- a/superset-frontend/src/components/ErrorMessage/DatasetNotFoundErrorMessage.tsx +++ b/superset-frontend/src/components/ErrorMessage/DatasetNotFoundErrorMessage.tsx @@ -20,6 +20,7 @@ import { t } from '@apache-superset/core/translation'; import type { ErrorMessageComponentProps } from './types'; import { ErrorAlert } from './ErrorAlert'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; export function DatasetNotFoundErrorMessage({ error, @@ -29,7 +30,7 @@ export function DatasetNotFoundErrorMessage({ const { level, message } = error; return ( diff --git a/superset-frontend/src/dashboard/components/SliceAdder.tsx b/superset-frontend/src/dashboard/components/SliceAdder.tsx index 8ad34e3c0658..49fd3ce9ff9c 100644 --- a/superset-frontend/src/dashboard/components/SliceAdder.tsx +++ b/superset-frontend/src/dashboard/components/SliceAdder.tsx @@ -55,6 +55,7 @@ import type { ConnectDragSource } from 'react-dnd'; import AddSliceCard from './AddSliceCard'; import AddSliceDragPreview from './dnd/AddSliceDragPreview'; import { DragDroppable } from './dnd/DragDroppable'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; export type SliceAdderProps = { theme: Theme; @@ -88,7 +89,7 @@ const KEYS_TO_FILTERS = ['slice_name', 'viz_type', 'datasource_name']; const KEYS_TO_SORT = { slice_name: t('name'), viz_type: t('viz type'), - datasource_name: t('dataset'), + datasource_name: datasetLabelLower(), changed_on: t('recent'), }; diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/GroupByFilterCard.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/GroupByFilterCard.tsx index b079f133af9d..c6ce6629f826 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/GroupByFilterCard.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/GroupByFilterCard.tsx @@ -51,6 +51,7 @@ import { addDangerToast } from 'src/components/MessageToasts/actions'; import { cachedSupersetGet } from 'src/utils/cachedSupersetGet'; import { dispatchChartCustomizationHoverAction } from './utils'; import { mergeExtraFormData } from '../../utils'; +import { datasetLabel as getDatasetLabel, datasetLabelLower } from 'src/utils/semanticLayerLabels'; interface ColumnApiResponse { column_name?: string; @@ -262,7 +263,7 @@ const GroupByFilterCardContent: FC<{ - {t('Dataset')} + {getDatasetLabel()} {typeof datasetLabel === 'string' ? datasetLabel : 'Dataset'} @@ -475,7 +476,13 @@ const GroupByFilterCard: FC = ({ } catch (error) { setColumnOptions([]); dispatch( - addDangerToast(t('Failed to load columns for dataset %s', datasetId)), + addDangerToast( + t( + 'Failed to load columns for %s %s', + datasetLabelLower(), + datasetId, + ), + ), ); } finally { setLoading(false); diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx index f48e6dc039f8..f77c8e84cbd6 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/DatasetSelect.tsx @@ -30,6 +30,11 @@ import { Dataset, DatasetSelectLabel, } from 'src/features/datasets/DatasetSelectLabel'; +import { + datasetLabel, + datasetLabelLower, + datasetsLabelLower, +} from 'src/utils/semanticLayerLabels'; interface DatasetSelectProps { onChange: (value: { label: string | ReactNode; value: number }) => void; @@ -101,13 +106,13 @@ const DatasetSelect = ({ return ( ); }; diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx index ab6a9f22e695..ddf41f39fd35 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx @@ -115,6 +115,7 @@ import { INPUT_WIDTH, } from './constants'; import DependencyList from './DependencyList'; +import { datasetLabel } from 'src/utils/semanticLayerLabels'; const FORM_ITEM_WIDTH = 260; @@ -972,7 +973,7 @@ const FiltersConfigForm = ( {t('Dataset')}} + label={{datasetLabel()}} initialValue={ datasetDetails ? { @@ -992,7 +993,7 @@ const FiltersConfigForm = ( rules={[ { required: !isRemoved, - message: t('Dataset is required'), + message: t('%s is required', datasetLabel()), }, ]} {...getFiltersConfigModalTestId('datasource-input')} @@ -1018,7 +1019,7 @@ const FiltersConfigForm = ( ) : ( {t('Dataset')}} + label={{datasetLabel()}} > diff --git a/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx b/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx index 1c58bd9ae692..d79d3d537dea 100644 --- a/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx +++ b/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx @@ -19,6 +19,7 @@ import { useState, useEffect, useMemo, useCallback } from 'react'; import { t } from '@apache-superset/core/translation'; import { ensureIsArray } from '@superset-ui/core'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; import { styled } from '@apache-superset/core/theme'; import { TableView, @@ -135,7 +136,10 @@ export const SamplesPane = ({ } if (data.length === 0) { - const title = t('No samples were returned for this dataset'); + const title = t( + 'No samples were returned for this %s', + datasetLabelLower(), + ); return ; } diff --git a/superset-frontend/src/explore/components/controls/DatasourceControl/index.tsx b/superset-frontend/src/explore/components/controls/DatasourceControl/index.tsx index 76136b8b483b..512795b2d3e4 100644 --- a/superset-frontend/src/explore/components/controls/DatasourceControl/index.tsx +++ b/superset-frontend/src/explore/components/controls/DatasourceControl/index.tsx @@ -45,6 +45,7 @@ import { Icons } from '@superset-ui/core/components/Icons'; import WarningIconWithTooltip from '@superset-ui/core/components/WarningIconWithTooltip'; import { URL_PARAMS } from 'src/constants'; import { getDatasourceAsSaveableDataset } from 'src/utils/datasourceUtils'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; import { userHasPermission, isUserAdmin, @@ -375,7 +376,7 @@ class DatasourceControl extends PureComponent< const canAccessSqlLab = userHasPermission(user, 'SQL Lab', 'menu_access'); - const editText = t('Edit dataset'); + const editText = t('Edit %s', datasetLabelLower()); const requestedQuery = { datasourceKey: `${datasource.id}__${datasource.type}`, sql: datasource.sql, @@ -387,7 +388,9 @@ class DatasourceControl extends PureComponent< label: !allowEdit ? ( {editText} @@ -402,7 +405,7 @@ class DatasourceControl extends PureComponent< defaultDatasourceMenuItems.push({ key: CHANGE_DATASET, - label: t('Swap dataset'), + label: t('Swap %s', datasetLabelLower()), }); if (!isMissingDatasource && canAccessSqlLab) { @@ -481,7 +484,7 @@ class DatasourceControl extends PureComponent< queryDatasourceMenuItems.push({ key: SAVE_AS_DATASET, - label: {t('Save as dataset')}, + label: {t('Save as %s', datasetLabelLower())}, }); const queryDatasourceMenu = ( @@ -495,7 +498,7 @@ class DatasourceControl extends PureComponent< const titleText = isMissingDatasource && !datasource.name - ? t('Missing dataset') + ? t('Missing %s', datasetLabelLower()) : getDatasourceTitle(datasource); const tooltip = titleText; @@ -561,14 +564,15 @@ class DatasourceControl extends PureComponent< ) : (

{t( - 'The dataset linked to this chart may have been deleted.', + 'The %s linked to this chart may have been deleted.', + datasetLabelLower(), )}

@@ -578,7 +582,7 @@ class DatasourceControl extends PureComponent< this.handleMenuItemClick({ key: CHANGE_DATASET }) } > - {t('Swap dataset')} + {t('Swap %s', datasetLabelLower())}

diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndAdhocFilterOption.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndAdhocFilterOption.tsx index 857b098003be..96024e6fa0d6 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndAdhocFilterOption.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndAdhocFilterOption.tsx @@ -23,6 +23,7 @@ import AdhocFilter from 'src/explore/components/controls/FilterControl/AdhocFilt import { OptionSortType } from 'src/explore/types'; import { useGetTimeRangeLabel } from 'src/explore/components/controls/FilterControl/utils'; import OptionWrapper from './OptionWrapper'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; export interface DndAdhocFilterOptionProps { adhocFilter: AdhocFilter; @@ -68,7 +69,10 @@ export default function DndAdhocFilterOption({ isExtra={adhocFilter.isExtra} datasourceWarningMessage={ adhocFilter.datasourceWarning - ? t('This filter might be incompatible with current dataset') + ? t( + 'This filter might be incompatible with current %s', + datasetLabelLower(), + ) : undefined } /> diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx index 126d699ddff1..1f81bbb9a85b 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx @@ -38,6 +38,7 @@ import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetr import MetricDefinitionValue from 'src/explore/components/controls/MetricControl/MetricDefinitionValue'; import ColumnSelectPopoverTrigger from './ColumnSelectPopoverTrigger'; import { DndControlProps } from './types'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; const AGGREGATED_DECK_GL_CHART_TYPES = [ 'deck_screengrid', @@ -326,7 +327,10 @@ function DndColumnMetricSelect(props: DndColumnMetricSelectProps) { typeof item === 'object' && 'error_text' in item && item.error_text) - ? t('This metric might be incompatible with current dataset') + ? t( + 'This metric might be incompatible with current %s', + datasetLabelLower(), + ) : undefined; return ( diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx index 6e474e552cfd..2987d41e3bee 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx @@ -29,6 +29,7 @@ import { DatasourcePanelDndItem } from 'src/explore/components/DatasourcePanel/t import { DndItemType } from 'src/explore/components/DndItemType'; import ColumnSelectPopoverTrigger from './ColumnSelectPopoverTrigger'; import { DndControlProps } from './types'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; export type DndColumnSelectProps = DndControlProps & { options: ColumnMeta[]; @@ -103,7 +104,10 @@ function DndColumnSelect(props: DndColumnSelectProps) { optionSelector.values.map((column, idx) => { const datasourceWarningMessage = isAdhocColumn(column) && column.datasourceWarning - ? t('This column might be incompatible with current dataset') + ? t( + 'This column might be incompatible with current %s', + datasetLabelLower(), + ) : undefined; const withCaret = isAdhocColumn(column) || !column.error_text; diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx index 0dd1074acec7..de5608c03e29 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndMetricSelect.tsx @@ -41,6 +41,7 @@ import { DndItemType } from 'src/explore/components/DndItemType'; import DndSelectLabel from 'src/explore/components/controls/DndColumnSelectControl/DndSelectLabel'; import { savedMetricType } from 'src/explore/components/controls/MetricControl/types'; import { AGGREGATES } from 'src/explore/constants'; +import { datasetLabelLower } from 'src/utils/semanticLayerLabels'; const EMPTY_OBJECT = {}; const DND_ACCEPTED_TYPES = [DndItemType.Column, DndItemType.Metric]; @@ -77,7 +78,10 @@ const coerceMetrics = ( ) { return { metric_name: metric, - error_text: t('This metric might be incompatible with current dataset'), + error_text: t( + 'This metric might be incompatible with current %s', + datasetLabelLower(), + ), uuid: nanoid(), }; } @@ -296,7 +300,10 @@ const DndMetricSelect = (props: any) => { multi={multi} datasourceWarningMessage={ option instanceof AdhocMetric && option.datasourceWarning - ? t('This metric might be incompatible with current dataset') + ? t( + 'This metric might be incompatible with current %s', + datasetLabelLower(), + ) : undefined } /> diff --git a/superset-frontend/src/explore/controls.tsx b/superset-frontend/src/explore/controls.tsx index 91e91de68678..b58808feebea 100644 --- a/superset-frontend/src/explore/controls.tsx +++ b/superset-frontend/src/explore/controls.tsx @@ -64,6 +64,7 @@ import { validateNonEmpty, } from '@superset-ui/core'; import { t } from '@apache-superset/core/translation'; +import { datasetLabel } from 'src/utils/semanticLayerLabels'; import { formatSelectOptions } from 'src/explore/exploreUtils'; import { TIME_FILTER_LABELS } from './constants'; import { StyledColumnOption } from './components/optionRenderers'; @@ -214,7 +215,7 @@ export const controls = { datasource: { type: 'DatasourceControl', - label: t('Dataset'), + label: datasetLabel(), default: null, description: null, mapStateToProps: ({ datasource }: ControlState) => ({ diff --git a/superset-frontend/src/pages/ChartCreation/index.tsx b/superset-frontend/src/pages/ChartCreation/index.tsx index bea1756ab535..ab8b102098b7 100644 --- a/superset-frontend/src/pages/ChartCreation/index.tsx +++ b/superset-frontend/src/pages/ChartCreation/index.tsx @@ -44,6 +44,7 @@ import { DatasetSelectLabel, } from 'src/features/datasets/DatasetSelectLabel'; import { Icons } from '@superset-ui/core/components/Icons'; +import { datasetLabel, datasetLabelLower } from 'src/utils/semanticLayerLabels'; export interface ChartCreationProps extends RouteComponentProps { user: UserWithPermissionsAndRoles; @@ -332,18 +333,22 @@ export class ChartCreation extends PureComponent<

{t('Create a new chart')}

{t('Choose a dataset')}} + title={ + + {t('Choose a %s', datasetLabelLower())} + + } status={this.state.datasource?.value ? 'finish' : 'process'} description={ @@ -370,7 +375,10 @@ export class ChartCreation extends PureComponent<
{isButtonDisabled && ( - {t('Please select both a Dataset and a Chart type to proceed')} + {t( + 'Please select both a %s and a Chart type to proceed', + datasetLabel(), + )} )}