New platform move doc table and doc viewer to kibana\discover (#34231)

* Moved doc table to kibana/discover

* moved doc viewer to Kibana app (used by docs and discover)

* Moved
- saved object finder
- paginated selectable list
from partiasls to directives/partials

* Moved paginate controls directive to directives/partials
This commit is contained in:
Liza Katz 2019-04-07 14:13:04 +03:00 committed by GitHub
parent 7ff4134c6d
commit 4dd7f1788d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
52 changed files with 92 additions and 90 deletions

View file

@ -49,7 +49,7 @@ import { showOptionsPopover } from './top_nav/show_options_popover';
import { showNewVisModal } from '../visualize/wizard';
import { showShareContextMenu, ShareContextMenuExtensionsRegistryProvider } from 'ui/share';
import { migrateLegacyQuery } from 'ui/utils/migrate_legacy_query';
import * as filterActions from 'ui/doc_table/actions/filter';
import * as filterActions from 'plugins/kibana/discover/doc_table/actions/filter';
import { FilterManagerProvider } from 'ui/filter_manager';
import { EmbeddableFactoriesRegistryProvider } from 'ui/embeddable/embeddable_factories_registry';
import { ContextMenuActionsRegistryProvider } from 'ui/embeddable';

View file

@ -10,6 +10,7 @@
@import 'components/fetch_error/index';
@import 'components/field_chooser/index';
@import 'directives/index';
@import 'doc_table/index';
@import 'hacks';

View file

@ -21,11 +21,14 @@ import _ from 'lodash';
import React from 'react';
import angular from 'angular';
import chrome from 'ui/chrome';
import { getSort } from 'ui/doc_table/lib/get_sort';
import * as columnActions from 'ui/doc_table/actions/columns';
import * as filterActions from 'ui/doc_table/actions/filter';
import dateMath from '@elastic/datemath';
import 'ui/doc_table';
// doc table
import '../doc_table';
import { getSort } from '../doc_table/lib/get_sort';
import * as columnActions from '../doc_table/actions/columns';
import * as filterActions from '../doc_table/actions/filter';
import 'ui/listen';
import 'ui/visualize';
import 'ui/fixed_scroll';

View file

@ -18,7 +18,7 @@
*/
import { addFilter } from '../../actions/filter';
import { FilterManagerProvider } from '../../../filter_manager';
import { FilterManagerProvider } from 'ui/filter_manager';
import StubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern';
import NoDigestPromises from 'test_utils/no_digest_promises';
import expect from '@kbn/expect';

View file

@ -21,7 +21,7 @@ import angular from 'angular';
import expect from '@kbn/expect';
import _ from 'lodash';
import ngMock from 'ng_mock';
import '../../private';
import 'ui/private';
import '..';
import FixturesStubbedSearchSourceProvider from 'fixtures/stubbed_search_source';

View file

@ -7,7 +7,7 @@
>
<span>
<span
i18n-id="common.ui.docTable.tableHeader.timeHeaderCellTitle"
i18n-id="kbn.docTable.tableHeader.timeHeaderCellTitle"
i18n-default-message="Time"
></span>
<button
@ -17,7 +17,7 @@
ng-class="headerClass(indexPattern.timeFieldName)"
role="button"
ng-click="cycleSortOrder(indexPattern.timeFieldName)"
tooltip="{{ ::'common.ui.docTable.tableHeader.sortByTimeTooltip' | i18n: {defaultMessage: 'Sort by time'} }}"
tooltip="{{ ::'kbn.docTable.tableHeader.sortByTimeTooltip' | i18n: {defaultMessage: 'Sort by time'} }}"
></button>
</span>
</th>
@ -46,8 +46,8 @@
ng-click="onRemoveColumn(name)"
ng-if="canRemoveColumn(name)"
tooltip-append-to-body="1"
tooltip="{{ ::'common.ui.docTable.tableHeader.removeColumnButtonTooltip' | i18n: {defaultMessage: 'Remove column'} }}"
aria-label="{{ 'common.ui.docTable.tableHeader.removeColumnButtonAriaLabel' | i18n: {
tooltip="{{ ::'kbn.docTable.tableHeader.removeColumnButtonTooltip' | i18n: {defaultMessage: 'Remove column'} }}"
aria-label="{{ 'kbn.docTable.tableHeader.removeColumnButtonAriaLabel' | i18n: {
defaultMessage: 'Remove {columnName} column',
values: {columnName: name}
} }}"
@ -58,8 +58,8 @@
ng-click="moveColumnLeft(name)"
ng-if="canMoveColumnLeft(name)"
tooltip-append-to-body="1"
tooltip="{{ ::'common.ui.docTable.tableHeader.moveColumnLeftButtonTooltip' | i18n: {defaultMessage: 'Move column to the left'} }}"
aria-label="{{ 'common.ui.docTable.tableHeader.moveColumnLeftButtonAriaLabel' | i18n: {
tooltip="{{ ::'kbn.docTable.tableHeader.moveColumnLeftButtonTooltip' | i18n: {defaultMessage: 'Move column to the left'} }}"
aria-label="{{ 'kbn.docTable.tableHeader.moveColumnLeftButtonAriaLabel' | i18n: {
defaultMessage: 'Move {columnName} column to the left',
values: {columnName: name}
} }}"
@ -69,8 +69,8 @@
ng-click="moveColumnRight(name)"
ng-if="canMoveColumnRight(name)"
tooltip-append-to-body="1"
tooltip="{{ ::'common.ui.docTable.tableHeader.moveColumnRightButtonTooltip' | i18n: {defaultMessage: 'Move column to the right'} }}"
aria-label="{{ 'common.ui.docTable.tableHeader.moveColumnRightButtonAriaLabel' | i18n: {
tooltip="{{ ::'kbn.docTable.tableHeader.moveColumnRightButtonTooltip' | i18n: {defaultMessage: 'Move column to the right'} }}"
aria-label="{{ 'kbn.docTable.tableHeader.moveColumnRightButtonAriaLabel' | i18n: {
defaultMessage: 'Move {columnName} column to the right',
values: {columnName: name}
} }}"

View file

@ -18,9 +18,9 @@
*/
import _ from 'lodash';
import '../../filters/short_dots';
import 'ui/filters/short_dots';
import headerHtml from './table_header.html';
import { uiModules } from '../../modules';
import { uiModules } from 'ui/modules';
const module = uiModules.get('app/discover');
@ -49,7 +49,7 @@ module.directive('kbnTableHeader', function (shortDotsFilter, i18n) {
$scope.tooltip = function (column) {
if (!$scope.isSortableColumn(column)) return '';
return i18n('common.ui.docTable.tableHeader.sortByColumnTooltip', {
return i18n('kbn.docTable.tableHeader.sortByColumnTooltip', {
defaultMessage: 'Sort by {columnName}',
values: { columnName: shortDotsFilter(column) },
});
@ -126,12 +126,12 @@ module.directive('kbnTableHeader', function (shortDotsFilter, i18n) {
const [currentColumnName, currentDirection = 'asc'] = $scope.sortOrder;
if(name === currentColumnName && currentDirection === 'asc') {
return i18n('common.ui.docTable.tableHeader.sortByColumnDescendingAriaLabel', {
return i18n('kbn.docTable.tableHeader.sortByColumnDescendingAriaLabel', {
defaultMessage: 'Sort {columnName} descending',
values: { columnName: name },
});
}
return i18n('common.ui.docTable.tableHeader.sortByColumnAscendingAriaLabel', {
return i18n('kbn.docTable.tableHeader.sortByColumnAscendingAriaLabel', {
defaultMessage: 'Sort {columnName} ascending',
values: { columnName: name },
});

View file

@ -20,15 +20,15 @@
import _ from 'lodash';
import $ from 'jquery';
import rison from 'rison-node';
import '../../doc_viewer';
import '../../filters/uriescape';
import '../../filters/short_dots';
import { noWhiteSpace } from '../../../../core_plugins/kibana/common/utils/no_white_space';
import 'plugins/kibana/doc_viewer';
import 'ui/filters/uriescape';
import 'ui/filters/short_dots';
import { noWhiteSpace } from '../../../../common/utils/no_white_space';
import openRowHtml from './table_row/open.html';
import detailsHtml from './table_row/details.html';
import { uiModules } from '../../modules';
import { uiModules } from 'ui/modules';
import { disableFilter } from '@kbn/es-query';
import { dispatchRenderComplete } from '../../render_complete';
import { dispatchRenderComplete } from 'ui/render_complete';
const module = uiModules.get('app/discover');
@ -46,8 +46,8 @@ const MIN_LINE_LENGTH = 20;
* ```
*/
module.directive('kbnTableRow', function ($compile, $httpParamSerializer, kbnUrl, config) {
const cellTemplate = _.template(noWhiteSpace(require('ui/doc_table/components/table_row/cell.html')));
const truncateByHeightTemplate = _.template(noWhiteSpace(require('ui/partials/truncate_by_height.html')));
const cellTemplate = _.template(noWhiteSpace(require('../components/table_row/cell.html')));
const truncateByHeightTemplate = _.template(noWhiteSpace(require('../components/table_row/truncate_by_height.html')));
return {
restrict: 'A',

View file

@ -17,16 +17,16 @@ if (timefield) {
class="fa fa-search-plus kbnDocTableRowFilterButton"
data-column="<%- column %>"
tooltip-append-to-body="1"
tooltip="{{ ::'common.ui.docTable.tableRow.filterForValueButtonTooltip' | i18n: {defaultMessage: 'Filter for value'} }}"
aria-label="{{ ::'common.ui.docTable.tableRow.filterForValueButtonAriaLabel' | i18n: {defaultMessage: 'Filter for value'} }}"
tooltip="{{ ::'kbn.docTable.tableRow.filterForValueButtonTooltip' | i18n: {defaultMessage: 'Filter for value'} }}"
aria-label="{{ ::'kbn.docTable.tableRow.filterForValueButtonAriaLabel' | i18n: {defaultMessage: 'Filter for value'} }}"
></button>
<button
ng-click="inlineFilter($event, '-')"
class="fa fa-search-minus kbnDocTableRowFilterButton"
data-column="<%- column %>"
tooltip="{{ ::'common.ui.docTable.tableRow.filterOutValueButtonTooltip' | i18n: {defaultMessage: 'Filter out value'} }}"
aria-label="{{ ::'common.ui.docTable.tableRow.filterOutValueButtonAriaLabel' | i18n: {defaultMessage: 'Filter out value'} }}"
tooltip="{{ ::'kbn.docTable.tableRow.filterOutValueButtonTooltip' | i18n: {defaultMessage: 'Filter out value'} }}"
aria-label="{{ ::'kbn.docTable.tableRow.filterOutValueButtonAriaLabel' | i18n: {defaultMessage: 'Filter out value'} }}"
tooltip-append-to-body="1"
></button>
<% } %>

View file

@ -8,7 +8,7 @@
<div class="euiFlexItem euiFlexItem--flexGrowZero">
<h4
class="euiTitle euiTitle--xsmall"
i18n-id="common.ui.docTable.tableRow.detailHeading"
i18n-id="kbn.docTable.tableRow.detailHeading"
i18n-default-message="Expanded document"
></h4>
</div>
@ -22,7 +22,7 @@
data-test-subj="docTableRowAction"
ng-href="{{ getContextAppHref() }}"
ng-if="indexPattern.isTimeBased()"
i18n-id="common.ui.docTable.tableRow.viewSurroundingDocumentsLinkText"
i18n-id="kbn.docTable.tableRow.viewSurroundingDocumentsLinkText"
i18n-default-message="View surrounding documents"
></a>
</div>
@ -31,7 +31,7 @@
class="euiLink"
data-test-subj="docTableRowAction"
ng-href="#/doc/{{indexPattern.id}}/{{row._index}}/{{row._type}}/?id={{row._id | uriescape}}"
i18n-id="common.ui.docTable.tableRow.viewSingleDocumentLinkText"
i18n-id="kbn.docTable.tableRow.viewSingleDocumentLinkText"
i18n-default-message="View single document"
></a>
</div>

View file

@ -2,7 +2,7 @@
<button
class="euiButtonIcon euiButtonIcon--text"
aria-expanded="{{!!open}}"
aria-label="{{ ::'common.ui.docTable.tableRow.toggleRowDetailsButtonAriaLabel' | i18n: {defaultMessage: 'Toggle row details'} }}"
aria-label="{{ ::'kbn.docTable.tableRow.toggleRowDetailsButtonAriaLabel' | i18n: {defaultMessage: 'Toggle row details'} }}"
>
<icon ng-if="open" type="'arrowDown'" size="'s'"></icon>
<icon ng-if="!open" type="'arrowRight'" size="'s'"></icon>

View file

@ -113,7 +113,7 @@
<div class="euiSpacer euiSpacer--m"></div>
<p
i18n-id="common.ui.docTable.noResultsTitle"
i18n-id="kbn.docTable.noResultsTitle"
i18n-default-message="No results found"
>
</p>

View file

@ -23,13 +23,15 @@ import { getSort } from './lib/get_sort';
import './infinite_scroll';
import './components/table_header';
import './components/table_row';
import { dispatchRenderComplete } from '../render_complete';
import { uiModules } from '../modules';
import { getRequestInspectorStats, getResponseInspectorStats } from '../courier/utils/courier_inspector_utils';
import { dispatchRenderComplete } from 'ui/render_complete';
import { uiModules } from 'ui/modules';
import 'ui/pager_control';
import 'ui/pager';
import { getRequestInspectorStats, getResponseInspectorStats } from 'ui/courier/utils/courier_inspector_utils';
import { getLimitedSearchResultsMessage } from './doc_table_strings';
uiModules.get('kibana')
uiModules.get('app/discover')
.directive('docTable', function (config, Notifier, getAppState, pagerFactory, $filter, courier, i18n) {
return {
restrict: 'E',
@ -135,10 +137,10 @@ uiModules.get('kibana')
let inspectorRequest = undefined;
if (_.has($scope, 'inspectorAdapters.requests')) {
$scope.inspectorAdapters.requests.reset();
const title = i18n('common.ui.docTable.inspectorRequestDataTitle', {
const title = i18n('kbn.docTable.inspectorRequestDataTitle', {
defaultMessage: 'Data',
});
const description = i18n('common.ui.docTable.inspectorRequestDescription', {
const description = i18n('kbn.docTable.inspectorRequestDescription', {
defaultMessage: 'This request queries Elasticsearch to fetch the data for the search.',
});
inspectorRequest = $scope.inspectorAdapters.requests.start(title, { description });

View file

@ -25,7 +25,7 @@ import { i18n } from '@kbn/i18n';
* @param resultCount {Number}
*/
export function getLimitedSearchResultsMessage(resultCount) {
return i18n.translate('common.ui.docTable.limitedSearchResultLabel',
return i18n.translate('kbn.docTable.limitedSearchResultLabel',
{ defaultMessage: 'Limited to {resultCount} results. Refine your search.', values: { resultCount } }
);
}

View file

@ -18,7 +18,7 @@
*/
import $ from 'jquery';
import { uiModules } from '../modules';
import { uiModules } from 'ui/modules';
const module = uiModules.get('app/discover');
module.directive('kbnInfiniteScroll', function () {

View file

@ -20,7 +20,6 @@
import angular from 'angular';
import _ from 'lodash';
import { SearchSource } from 'ui/courier';
import * as columnActions from 'ui/doc_table/actions/columns';
import {
ContainerState,
Embeddable,
@ -32,6 +31,7 @@ import { Filters, Query } from 'ui/embeddable/types';
import { RequestAdapter } from 'ui/inspector/adapters';
import { Adapters } from 'ui/inspector/types';
import { getTime } from 'ui/timefilter/get_time';
import * as columnActions from '../doc_table/actions/columns';
import { SavedSearch } from '../types';
import searchTemplate from './search_template.html';

View file

@ -17,7 +17,7 @@
* under the License.
*/
import 'ui/doc_table';
import '../doc_table';
import { i18n } from '@kbn/i18n';
import { EmbeddableFactory } from 'ui/embeddable';

View file

@ -22,7 +22,7 @@ import './directives';
import 'ui/collapsible_sidebar';
import './components/field_chooser/field_chooser';
import './controllers/discover';
import 'ui/doc_table/components/table_row';
import './doc_table/components/table_row';
import { FeatureCatalogueRegistryProvider, FeatureCatalogueCategory } from 'ui/registry/feature_catalogue';
FeatureCatalogueRegistryProvider.register(i18n => {

View file

@ -19,13 +19,13 @@
import 'ui/notify';
import 'ui/courier';
import 'ui/doc_viewer';
import 'ui/index_patterns';
import html from '../index.html';
import uiRoutes from 'ui/routes';
import { uiModules } from 'ui/modules';
import { timefilter } from 'ui/timefilter';
import { getRootBreadcrumbs } from '../../discover/breadcrumbs';
import 'plugins/kibana/doc_viewer';
import { getRootBreadcrumbs } from 'plugins/kibana/discover/breadcrumbs';
const app = uiModules.get('apps/doc', [
'kibana/notify',

View file

@ -21,11 +21,10 @@ import angular from 'angular';
import _ from 'lodash';
import expect from '@kbn/expect';
import ngMock from 'ng_mock';
import '../../private';
import 'ui/private';
import { DocViewsRegistryProvider } from '../../registry/doc_views';
import { uiRegistry } from '../../registry/_registry';
import '..';
import { DocViewsRegistryProvider } from 'ui/registry/doc_views';
import { uiRegistry } from 'ui/registry/_registry';
describe('docViewer', function () {
let stubRegistry;

View file

@ -18,12 +18,12 @@
*/
import $ from 'jquery';
import { uiModules } from '../modules';
import { DocViewsRegistryProvider } from '../registry/doc_views';
import { uiModules } from 'ui/modules';
import { DocViewsRegistryProvider } from 'ui/registry/doc_views';
import '../render_directive';
import 'ui/render_directive';
uiModules.get('kibana')
uiModules.get('apps/discover')
.directive('docViewer', function (config, Private) {
const docViews = Private(DocViewsRegistryProvider);
return {

View file

@ -24,6 +24,9 @@
// Management styles
@import './management/index';
// Doc Viewer
@import './doc_viewer/index';
// Dashboard styles
// MUST STAY AT THE BOTTOM BECAUSE OF DARK THEME IMPORTS
@import './dashboard/index';

View file

@ -18,8 +18,6 @@
*/
import { SavedObjectRegistryProvider } from 'ui/saved_objects/saved_object_registry';
import 'ui/pager_control';
import 'ui/pager';
import 'ui/directives/kbn_href';
import { uiModules } from 'ui/modules';
import { timefilter } from 'ui/timefilter';

View file

@ -12,8 +12,6 @@
@import './chrome/index';
@import './collapsible_sidebar/index';
@import './directives/index';
@import './doc_table/index';
@import './doc_viewer/index';
@import './error_allow_explicit_index/index';
@import './error_auto_create_index/index';
@import './error_url_overflow/index';
@ -24,7 +22,6 @@
// @import './timepicker/index';
@import './markdown/index';
@import './notify/index';
@import './partials/index';
@import './query_bar/index';
@import './share/index';
@import './filter_bar/index';

View file

@ -1 +1,2 @@
@import './input_datetime';
@import './saved_object_paginated_selectable'

View file

@ -19,7 +19,7 @@
import _ from 'lodash';
import { uiModules } from '../modules';
import paginateControlsTemplate from '../partials/paginate_controls.html';
import paginateControlsTemplate from './partials/paginate_controls.html';
uiModules.get('kibana')
.directive('paginate', function ($parse, $compile, i18n) {

View file

@ -21,7 +21,7 @@ import _ from 'lodash';
import { uiModules } from '../modules';
import './paginate';
import './kbn_href';
import paginatedSelectableListTemplate from '../partials/paginated_selectable_list.html';
import paginatedSelectableListTemplate from './partials/paginated_selectable_list.html';
const module = uiModules.get('kibana');

View file

@ -23,7 +23,7 @@ import { keyMap } from '../utils/key_map';
import { SavedObjectRegistryProvider } from '../saved_objects/saved_object_registry';
import { uiModules } from '../modules';
import '../filters/label';
import savedObjectFinderTemplate from '../partials/saved_object_finder.html';
import savedObjectFinderTemplate from './partials/saved_object_finder.html';
import './input_focus';
import './paginate';

View file

@ -36,8 +36,6 @@ import 'ui/vislib';
import 'ui/agg_response';
import 'ui/agg_types';
import 'ui/timepicker';
import 'ui/pager';
import 'ui/pager_control';
import 'leaflet';
import { showAppRedirectNotification } from 'ui/notify';

View file

@ -299,28 +299,6 @@
"common.ui.directives.paginate.size.allDropDownOptionLabel": "全部",
"common.ui.directives.truncated.showLessLinkText": "更少",
"common.ui.directives.truncated.showMoreLinkText": "更多",
"common.ui.docTable.inspectorRequestDataTitle": "数据",
"common.ui.docTable.inspectorRequestDescription": "此请求将查询 Elasticsearch 以获取搜索的数据。",
"common.ui.docTable.limitedSearchResultLabel": "仅限 {resultCount} 个结果。优化您的搜索。",
"common.ui.docTable.noResultsTitle": "找不到结果",
"common.ui.docTable.tableHeader.moveColumnLeftButtonAriaLabel": "向左移动“{columnName}”列",
"common.ui.docTable.tableHeader.moveColumnLeftButtonTooltip": "向左移动列",
"common.ui.docTable.tableHeader.moveColumnRightButtonAriaLabel": "向右移动“{columnName}”列",
"common.ui.docTable.tableHeader.moveColumnRightButtonTooltip": "向右移动列",
"common.ui.docTable.tableHeader.removeColumnButtonAriaLabel": "删除“{columnName}”列",
"common.ui.docTable.tableHeader.removeColumnButtonTooltip": "删除列",
"common.ui.docTable.tableHeader.sortByColumnAscendingAriaLabel": "升序排序 {columnName}",
"common.ui.docTable.tableHeader.sortByColumnDescendingAriaLabel": "降序排序 {columnName}",
"common.ui.docTable.tableHeader.sortByColumnTooltip": "按“{columnName}”排序",
"common.ui.docTable.tableHeader.sortByTimeTooltip": "按时间排序",
"common.ui.docTable.tableHeader.timeHeaderCellTitle": "时间",
"common.ui.docTable.tableRow.filterForValueButtonAriaLabel": "筛留值",
"common.ui.docTable.tableRow.filterForValueButtonTooltip": "筛留值",
"common.ui.docTable.tableRow.filterOutValueButtonAriaLabel": "筛除值",
"common.ui.docTable.tableRow.filterOutValueButtonTooltip": "筛除值",
"common.ui.docTable.tableRow.toggleRowDetailsButtonAriaLabel": "切换行详细信息",
"common.ui.docTable.tableRow.viewSingleDocumentLinkText": "查看单个文档",
"common.ui.docTable.tableRow.viewSurroundingDocumentsLinkText": "查看周围文档",
"common.ui.errorAllowExplicitIndex.errorDescription": "似乎您的 Elasticsearch 集群已将设置 {allowExplicitIndexConfig} 设置为 {allowExplicitIndexValue},这使 Kibana 无法执行搜索请求。使用此功能,我们可以向 Elasticsearch 发送单个请求来搜索多个索引,这样,当仪表板上有多个面板时,面板可快速且一致地加载。",
"common.ui.errorAllowExplicitIndex.errorDisclaimer": "但是,只有解决了此问题后,您才能使用 Kibana 中的某些应用,如 Discover、Visualize 和仪表板。",
"common.ui.errorAllowExplicitIndex.errorTitle": "糟糕!",
@ -1310,6 +1288,28 @@
"kbn.doc.failedToLocateDocumentDescription": "无法找到文档",
"kbn.doc.loadingDescription": "正在加载……",
"kbn.doc.somethingWentWrongDescription": "哎呦。出了问题。不是我找不到您的文档,而是无法尝试。索引缺失或类型缺失。去问问 Elasticsearch似乎哪里不对劲。",
"kbn.docTable.inspectorRequestDataTitle": "数据",
"kbn.docTable.inspectorRequestDescription": "此请求将查询 Elasticsearch 以获取搜索的数据。",
"kbn.docTable.limitedSearchResultLabel": "仅限 {resultCount} 个结果。优化您的搜索。",
"kbn.docTable.noResultsTitle": "找不到结果",
"kbn.docTable.tableHeader.moveColumnLeftButtonAriaLabel": "向左移动“{columnName}”列",
"kbn.docTable.tableHeader.moveColumnLeftButtonTooltip": "向左移动列",
"kbn.docTable.tableHeader.moveColumnRightButtonAriaLabel": "向右移动“{columnName}”列",
"kbn.docTable.tableHeader.moveColumnRightButtonTooltip": "向右移动列",
"kbn.docTable.tableHeader.removeColumnButtonAriaLabel": "删除“{columnName}”列",
"kbn.docTable.tableHeader.removeColumnButtonTooltip": "删除列",
"kbn.docTable.tableHeader.sortByColumnAscendingAriaLabel": "升序排序 {columnName}",
"kbn.docTable.tableHeader.sortByColumnDescendingAriaLabel": "降序排序 {columnName}",
"kbn.docTable.tableHeader.sortByColumnTooltip": "按“{columnName}”排序",
"kbn.docTable.tableHeader.sortByTimeTooltip": "按时间排序",
"kbn.docTable.tableHeader.timeHeaderCellTitle": "时间",
"kbn.docTable.tableRow.filterForValueButtonAriaLabel": "筛留值",
"kbn.docTable.tableRow.filterForValueButtonTooltip": "筛留值",
"kbn.docTable.tableRow.filterOutValueButtonAriaLabel": "筛除值",
"kbn.docTable.tableRow.filterOutValueButtonTooltip": "筛除值",
"kbn.docTable.tableRow.toggleRowDetailsButtonAriaLabel": "切换行详细信息",
"kbn.docTable.tableRow.viewSingleDocumentLinkText": "查看单个文档",
"kbn.docTable.tableRow.viewSurroundingDocumentsLinkText": "查看周围文档",
"kbn.home.addData.addDataToKibanaDescription": "使用这些解决方案可快速将您的数据转换成预构建的仪表板和监测系统。",
"kbn.home.addData.addDataToKibanaTitle": "将数据添加到 Kibana",
"kbn.home.addData.apm.addApmButtonLabel": "添加 APM",