diff --git a/src/legacy/core_plugins/kibana/public/visualize/editor/editor.html b/src/legacy/core_plugins/kibana/public/visualize/editor/editor.html index 06c058d37da5a..5a31a97c56966 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/editor/editor.html +++ b/src/legacy/core_plugins/kibana/public/visualize/editor/editor.html @@ -19,7 +19,7 @@ class="fullWidth" >
- Linked to Saved Search + {{ ::'kbn.visualize.linkedToSearchInfoText' | i18n: { defaultMessage: 'Linked to Saved Search' } }} @@ -30,7 +30,7 @@ data-test-subj="unlinkSavedSearch" href="" ng-dblclick="unlink()" - tooltip="Double click to unlink from Saved Search" + tooltip="{{ ::'kbn.visualize.linkedToSearch.unlinkButtonTooltip' | i18n: { defaultMessage: 'Double click to unlink from Saved Search' } }}" > diff --git a/src/legacy/core_plugins/kibana/public/visualize/editor/editor.js b/src/legacy/core_plugins/kibana/public/visualize/editor/editor.js index 5f1de5cd29558..f63596151c0c7 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/editor/editor.js +++ b/src/legacy/core_plugins/kibana/public/visualize/editor/editor.js @@ -52,13 +52,17 @@ uiRoutes .when(VisualizeConstants.CREATE_PATH, { template: editorTemplate, resolve: { - savedVis: function (savedVisualizations, redirectWhenMissing, $route, Private) { + savedVis: function (savedVisualizations, redirectWhenMissing, $route, Private, i18n) { const visTypes = Private(VisTypesRegistryProvider); const visType = _.find(visTypes, { name: $route.current.params.type }); const shouldHaveIndex = visType.requiresSearch && visType.options.showIndexSelection; const hasIndex = $route.current.params.indexPattern || $route.current.params.savedSearchId; if (shouldHaveIndex && !hasIndex) { - throw new Error('You must provide either an indexPattern or a savedSearchId'); + throw new Error( + i18n('kbn.visualize.createVisualization.noIndexPatternOrSavedSearchIdErrorMessage', { + defaultMessage: 'You must provide either an indexPattern or a savedSearchId', + }) + ); } return savedVisualizations.get($route.current.params) @@ -115,7 +119,8 @@ function VisEditor( Promise, config, kbnBaseUrl, - localStorage + localStorage, + i18n ) { const docTitle = Private(DocTitleProvider); const queryFilter = Private(FilterBarQueryFilterProvider); @@ -135,15 +140,19 @@ function VisEditor( }; $scope.topNavMenu = [{ - key: 'save', - description: 'Save Visualization', + key: i18n('kbn.topNavMenu.saveVisualizationButtonLabel', { defaultMessage: 'save' }), + description: i18n('kbn.visualize.topNavMenu.saveVisualizationButtonAriaLabel', { + defaultMessage: 'Save Visualization', + }), testId: 'visualizeSaveButton', disableButton() { return Boolean(vis.dirty); }, tooltip() { if (vis.dirty) { - return 'Apply or Discard your changes before saving'; + return i18n('kbn.visualize.topNavMenu.saveVisualizationDisabledButtonTooltip', { + defaultMessage: 'Apply or Discard your changes before saving' + }); } }, run: async () => { @@ -176,8 +185,10 @@ function VisEditor( showSaveModal(saveModal); } }, { - key: 'share', - description: 'Share Visualization', + key: i18n('kbn.topNavMenu.shareVisualizationButtonLabel', { defaultMessage: 'share' }), + description: i18n('kbn.visualize.topNavMenu.shareVisualizationButtonAriaLabel', { + defaultMessage: 'Share Visualization', + }), testId: 'shareTopNavButton', run: (menuItem, navController, anchorElement) => { const hasUnappliedChanges = vis.dirty; @@ -196,8 +207,10 @@ function VisEditor( }); } }, { - key: 'inspect', - description: 'Open Inspector for visualization', + key: i18n('kbn.topNavMenu.openInspectorButtonLabel', { defaultMessage: 'inspect' }), + description: i18n('kbn.visualize.topNavMenu.openInspectorButtonAriaLabel', { + defaultMessage: 'Open Inspector for visualization', + }), testId: 'openInspectorButton', disableButton() { return !vis.hasInspector || !vis.hasInspector(); @@ -207,12 +220,16 @@ function VisEditor( }, tooltip() { if (!vis.hasInspector || !vis.hasInspector()) { - return 'This visualization doesn\'t support any inspectors.'; + return i18n('kbn.visualize.topNavMenu.openInspectorDisabledButtonTooltip', { + defaultMessage: `This visualization doesn't support any inspectors.`, + }); } } }, { - key: 'refresh', - description: 'Refresh', + key: i18n('kbn.topNavMenu.refreshButtonLabel', { defaultMessage: 'refresh' }), + description: i18n('kbn.visualize.topNavMenu.refreshButtonAriaLabel', { + defaultMessage: 'Refresh', + }), run: function () { vis.forceReload(); }, @@ -288,7 +305,12 @@ function VisEditor( $state.replace(); $scope.getVisualizationTitle = function getVisualizationTitle() { - return savedVis.lastSavedTitle || `${savedVis.title} (unsaved)`; + return savedVis.lastSavedTitle || i18n('kbn.visualize.topNavMenu.unsavedVisualizationTitle', { + defaultMessage: '{visTitle} (unsaved)', + values: { + visTitle: savedVis.title, + }, + }); }; $scope.$watchMulti([ @@ -374,7 +396,12 @@ function VisEditor( if (id) { toastNotifications.addSuccess({ - title: `Saved '${savedVis.title}'`, + title: i18n('kbn.visualize.topNavMenu.saveVisualization.successNotificationText', { + defaultMessage: `Saved '{visTitle}'`, + values: { + visTitle: savedVis.title, + }, + }), 'data-test-subj': 'saveVisualizationSuccess', }); @@ -407,7 +434,12 @@ function VisEditor( // eslint-disable-next-line console.error(error); toastNotifications.addDanger({ - title: `Error on saving '${savedVis.title}'`, + title: i18n('kbn.visualize.topNavMenu.saveVisualization.failureNotificationText', { + defaultMessage: `Error on saving '{visTitle}'`, + values: { + visTitle: savedVis.title, + }, + }), text: error.message, 'data-test-subj': 'saveVisualizationError', }); @@ -431,14 +463,26 @@ function VisEditor( searchSource.setField('index', searchSourceParent.getField('index')); searchSource.setParent(searchSourceGrandparent); - toastNotifications.addSuccess(`Unlinked from saved search '${savedVis.savedSearch.title}'`); + toastNotifications.addSuccess( + i18n('kbn.visualize.linkedToSearch.unlinkSuccessNotificationText', { + defaultMessage: `Unlinked from saved search '{searchTitle}'`, + values: { + searchTitle: savedVis.savedSearch.title + } + }) + ); $scope.fetch(); }; $scope.getAdditionalMessage = () => { - return ` This visualization is marked as experimental. ${vis.type.feedbackMessage}`; + return ( + '' + + i18n('kbn.visualize.experimentalVisInfoText', { defaultMessage: 'This visualization is marked as experimental.' }) + + ' ' + + vis.type.feedbackMessage + ); }; init(); diff --git a/src/legacy/core_plugins/kibana/public/visualize/embeddable/visualize_lab_disabled.html b/src/legacy/core_plugins/kibana/public/visualize/embeddable/visualize_lab_disabled.html index 790c2710ada13..00c77dc06bd19 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/embeddable/visualize_lab_disabled.html +++ b/src/legacy/core_plugins/kibana/public/visualize/embeddable/visualize_lab_disabled.html @@ -1,5 +1,15 @@
-
is a lab visualization.
-
Please turn on lab-mode in the advanced settings to see lab visualizations.
+
+ {{ ::'kbn.visualize.embeddableVisualization.labVisualizationInfoText' | i18n: { + defaultMessage: 'is a lab visualization.', + description: 'Part of "{visTitle} is a lab visualization."' } }} +
+
diff --git a/src/legacy/core_plugins/kibana/public/visualize/index.js b/src/legacy/core_plugins/kibana/public/visualize/index.js index 274e1bbf33837..ee9db96b1f59f 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/index.js +++ b/src/legacy/core_plugins/kibana/public/visualize/index.js @@ -57,11 +57,16 @@ uiRoutes redirectTo: VisualizeConstants.WIZARD_STEP_1_PAGE_PATH, }); -FeatureCatalogueRegistryProvider.register(() => { +FeatureCatalogueRegistryProvider.register(i18n => { return { id: 'visualize', title: 'Visualize', - description: 'Create visualizations and aggregate data stores in your Elasticsearch indices.', + description: i18n( + 'kbn.visualize.visualizeDescription', + { + defaultMessage: 'Create visualizations and aggregate data stores in your Elasticsearch indices.', + } + ), icon: 'visualizeApp', path: `/app/kibana#${VisualizeConstants.LANDING_PAGE_PATH}`, showOnHomePage: true, diff --git a/src/legacy/core_plugins/kibana/public/visualize/listing/no_visualizations_prompt.js b/src/legacy/core_plugins/kibana/public/visualize/listing/no_visualizations_prompt.js index a710e582120ef..54a6048a22daf 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/listing/no_visualizations_prompt.js +++ b/src/legacy/core_plugins/kibana/public/visualize/listing/no_visualizations_prompt.js @@ -18,6 +18,7 @@ */ import React from 'react'; +import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; import { KuiEmptyTablePrompt, @@ -26,7 +27,7 @@ import { KuiButtonIcon, } from '@kbn/ui-framework/components'; -export function NoVisualizationsPrompt({ onCreateVis }) { +function NoVisualizationsPromptUi({ onCreateVis, intl }) { return ( } > - Create a visualization + } - message="Looks like you don't have any visualizations. Let's create some!" + message={intl.formatMessage({ + id: 'kbn.visualize.listing.noVisualizationsText', + defaultMessage: `Looks like you don't have any visualizations. Let's create some!`, + })} /> ); } + +export const NoVisualizationsPrompt = injectI18n(NoVisualizationsPromptUi); diff --git a/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.html b/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.html index a81f6036b401c..e03c957e2bc91 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.html +++ b/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.html @@ -10,9 +10,10 @@ class="kuiLocalTitle" role="heading" aria-level="1" - ng-if="listingController.showPluginBreadcrumbs"> - Visualize -
+ ng-if="listingController.showPluginBreadcrumbs" + i18n-id="kbn.visualize.listing.topLeftCornerTitle" + i18n-default-message="Visualize" + > @@ -24,7 +25,26 @@
- You have {{ listingController.totalItems }} visualizations, but your "listingLimit" setting prevents the table below from displaying more than {{ listingController.listingLimit }}. You can change this setting under Advanced Settings. + + .
diff --git a/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.js b/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.js index cbc137b71a198..b47d15cfa4302 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.js +++ b/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing.js @@ -23,17 +23,17 @@ import 'ui/pager'; import { uiModules } from 'ui/modules'; import { timefilter } from 'ui/timefilter'; import { VisTypesRegistryProvider } from 'ui/registry/vis_types'; -import { i18n } from '@kbn/i18n'; import chrome from 'ui/chrome'; import { VisualizeListingTable } from './visualize_listing_table'; import { NewVisModal } from '../wizard/new_vis_modal'; import { VisualizeConstants } from '../visualize_constants'; +import { i18n } from '@kbn/i18n'; import { injectI18nProvider } from '@kbn/i18n/react'; const app = uiModules.get('app/visualize', ['ngRoute', 'react']); -app.directive('visualizeListingTable', reactDirective => reactDirective(VisualizeListingTable)); +app.directive('visualizeListingTable', reactDirective => reactDirective(injectI18nProvider(VisualizeListingTable))); app.directive('newVisModal', reactDirective => reactDirective(injectI18nProvider(NewVisModal))); export function VisualizeListingController($injector, createNewVis) { diff --git a/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing_table.js b/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing_table.js index f8795175d42e4..d68c7a30f7562 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing_table.js +++ b/src/legacy/core_plugins/kibana/public/visualize/listing/visualize_listing_table.js @@ -20,6 +20,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import _ from 'lodash'; +import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; import { Pager } from 'ui/pager'; import { NoVisualizationsPrompt } from './no_visualizations_prompt'; @@ -40,7 +41,7 @@ import { EuiIcon, } from '@elastic/eui'; -export class VisualizeListingTable extends Component { +class VisualizeListingTableUi extends Component { constructor(props) { super(props); @@ -232,13 +233,27 @@ export class VisualizeListingTable extends Component { return ( -

{`You can't recover deleted visualizations.`}

+

+ +

); @@ -266,8 +281,21 @@ export class VisualizeListingTable extends Component { renderToolBarActions() { return this.state.selectedRowIds.length > 0 ? - : - ; + : + ; } renderPager() { @@ -320,8 +348,10 @@ export class VisualizeListingTable extends Component { } } -VisualizeListingTable.propTypes = { +VisualizeListingTableUi.propTypes = { deleteSelectedItems: PropTypes.func, fetchItems: PropTypes.func, onCreateVis: PropTypes.func.isRequired, }; + +export const VisualizeListingTable = injectI18n(VisualizeListingTableUi); diff --git a/src/legacy/core_plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js b/src/legacy/core_plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js index 0e31ccf313863..0e7dc49b938b5 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js +++ b/src/legacy/core_plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js @@ -34,7 +34,7 @@ import { SavedObjectProvider } from 'ui/courier'; uiModules .get('app/visualize') - .factory('SavedVis', function (config, $injector, Promise, savedSearches, Private) { + .factory('SavedVis', function (config, $injector, Promise, savedSearches, Private, i18n) { const Vis = Private(VisProvider); const SavedObject = Private(SavedObjectProvider); createLegacyClass(SavedVis).inherits(SavedObject); @@ -51,7 +51,9 @@ uiModules id: opts.id, indexPattern: opts.indexPattern, defaults: { - title: 'New Visualization', + title: i18n('kbn.visualize.defaultVisualizationTitle', { + defaultMessage: 'New Visualization', + }), visState: (function () { if (!opts.type) return null; const def = {}; diff --git a/src/legacy/core_plugins/kibana/public/visualize/wizard/step_2.html b/src/legacy/core_plugins/kibana/public/visualize/wizard/step_2.html index 6a0a368a2fe5b..a1d62e5689547 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/wizard/step_2.html +++ b/src/legacy/core_plugins/kibana/public/visualize/wizard/step_2.html @@ -7,7 +7,7 @@ data-transclude-slot="topLeftCorner" use-links="true" omit-current-page="true" - page-title="'Choose search source'" + page-title="::'kbn.visualize.newVisWizard.pageTitle' | i18n: { defaultMessage: 'Choose search source' }" > @@ -15,9 +15,11 @@
-

- From a New Search, Select Index -

+

-

- Or, From a Saved Search -

+