From dbfca5c0a0437b5d1fe36d3332c8b4fb90690755 Mon Sep 17 00:00:00 2001 From: Ahmad Bamieh Date: Fri, 23 Jul 2021 00:26:54 +0300 Subject: [PATCH] [i18n] Test EUI i18n tokens coverage (#106377) --- .../__snapshots__/i18n_service.test.tsx.snap | 8 +- src/core/public/i18n/i18n_eui_mapping.test.ts | 100 +++++++++ src/core/public/i18n/i18n_eui_mapping.tsx | 123 +++++------ .../translations/translations/ja-JP.json | 195 ++-------------- .../translations/translations/zh-CN.json | 208 ++---------------- 5 files changed, 194 insertions(+), 440 deletions(-) create mode 100644 src/core/public/i18n/i18n_eui_mapping.test.ts diff --git a/src/core/public/i18n/__snapshots__/i18n_service.test.tsx.snap b/src/core/public/i18n/__snapshots__/i18n_service.test.tsx.snap index 16504cf97366e..95f5d1953b761 100644 --- a/src/core/public/i18n/__snapshots__/i18n_service.test.tsx.snap +++ b/src/core/public/i18n/__snapshots__/i18n_service.test.tsx.snap @@ -93,8 +93,8 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiDataGridSchema.booleanSortTextDesc": "True-False", "euiDataGridSchema.currencySortTextAsc": "Low-High", "euiDataGridSchema.currencySortTextDesc": "High-Low", - "euiDataGridSchema.dateSortTextAsc": "New-Old", - "euiDataGridSchema.dateSortTextDesc": "Old-New", + "euiDataGridSchema.dateSortTextAsc": "Old-New", + "euiDataGridSchema.dateSortTextDesc": "New-Old", "euiDataGridSchema.jsonSortTextAsc": "Small-Large", "euiDataGridSchema.jsonSortTextDesc": "Large-Small", "euiDataGridSchema.numberSortTextAsc": "Low-High", @@ -180,11 +180,11 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiSaturation.roleDescription": "HSV color mode saturation and value selection", "euiSaturation.screenReaderAnnouncement": "Use the arrow keys to navigate the square color gradient. The coordinates resulting from each key press will be used to calculate HSV color mode \\"saturation\\" and \\"value\\" numbers, in the range of 0 to 1. Left and right decrease and increase (respectively) the \\"saturation\\" value. Up and down decrease and increase (respectively) the \\"value\\" value.", "euiSelectable.loadingOptions": "Loading options", - "euiSelectable.noAvailableOptions": "There aren't any options available", + "euiSelectable.noAvailableOptions": "No options available", "euiSelectable.noMatchingOptions": [Function], "euiSelectable.placeholderName": "Filter options", "euiSelectableListItem.excludedOption": "Excluded option.", - "euiSelectableListItem.excludedOptionInstructions": "To deselect this option, press enter", + "euiSelectableListItem.excludedOptionInstructions": "To deselect this option, press enter.", "euiSelectableListItem.includedOption": "Included option.", "euiSelectableListItem.includedOptionInstructions": "To exclude this option, press enter.", "euiSelectableTemplateSitewide.loadingResults": "Loading results", diff --git a/src/core/public/i18n/i18n_eui_mapping.test.ts b/src/core/public/i18n/i18n_eui_mapping.test.ts new file mode 100644 index 0000000000000..1b80257266d4c --- /dev/null +++ b/src/core/public/i18n/i18n_eui_mapping.test.ts @@ -0,0 +1,100 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +jest.mock('@kbn/i18n'); + +import { i18n } from '@kbn/i18n'; + +import i18ntokens from '@elastic/eui/i18ntokens.json'; +import { getEuiContextMapping } from './i18n_eui_mapping'; + +/** Regexp to find {values} usage */ +const VALUES_REGEXP = /\{\w+\}/; + +describe('@elastic/eui i18n tokens', () => { + const i18nTranslateMock = jest + .fn() + .mockImplementation((id, { defaultMessage }) => defaultMessage); + i18n.translate = i18nTranslateMock; + + const euiContextMapping = getEuiContextMapping(); + + test('all tokens are mapped', () => { + // Extract the tokens from the EUI library: We need to uniq them because they might be duplicated + const euiTokensFromLib = [...new Set(i18ntokens.map(({ token }) => token))]; + const euiTokensFromMapping = Object.keys(euiContextMapping); + + expect(euiTokensFromMapping.sort()).toStrictEqual(euiTokensFromLib.sort()); + }); + + test('tokens that include {word} should be mapped to functions', () => { + const euiTokensFromLibWithValues = i18ntokens.filter(({ defString }) => + VALUES_REGEXP.test(defString) + ); + const euiTokensFromLib = [...new Set(euiTokensFromLibWithValues.map(({ token }) => token))]; + const euiTokensFromMapping = Object.entries(euiContextMapping) + .filter(([, value]) => typeof value === 'function') + .map(([key]) => key); + + expect(euiTokensFromMapping.sort()).toStrictEqual(euiTokensFromLib.sort()); + }); + + i18ntokens.forEach(({ token, defString }) => { + describe(`Token "${token}"`, () => { + let i18nTranslateCall: [ + string, + { defaultMessage: string; values?: object; description?: string } + ]; + + beforeAll(() => { + // If it's a function, call it, so we have the mock to register the call. + const entry = euiContextMapping[token as keyof typeof euiContextMapping]; + const translationOutput = typeof entry === 'function' ? entry({}) : entry; + + // If it's a string, it comes from i18n.translate call + if (typeof translationOutput === 'string') { + // find the call in the mocks + i18nTranslateCall = i18nTranslateMock.mock.calls.find( + ([kbnToken]) => kbnToken === `core.${token}` + ); + } else { + // Otherwise, it's a fn returning `FormattedMessage` component => read the props + const { id, defaultMessage, values } = translationOutput.props; + i18nTranslateCall = [id, { defaultMessage, values }]; + } + }); + + test('a translation should be registered as `core.{TOKEN}`', () => { + expect(i18nTranslateCall).not.toBeUndefined(); + }); + + test('defaultMessage is in sync with defString', () => { + // Clean up typical errors from the `@elastic/eui` extraction token tool + const normalizedDefString = defString + // Quoted words should use double-quotes + .replace(/\s'/g, ' "') + .replace(/'\s/g, '" ') + // Should not include break-lines + .replace(/\n/g, '') + // Should trim extra spaces + .replace(/\s{2,}/g, ' ') + .trim(); + + expect(i18nTranslateCall[1].defaultMessage).toBe(normalizedDefString); + }); + + test('values should match', () => { + const valuesFromEuiLib = defString.match(new RegExp(VALUES_REGEXP, 'g')) || []; + const receivedValuesInMock = Object.keys(i18nTranslateCall[1].values ?? {}).map( + (key) => `{${key}}` + ); + expect(receivedValuesInMock.sort()).toStrictEqual(valuesFromEuiLib.sort()); + }); + }); + }); +}); diff --git a/src/core/public/i18n/i18n_eui_mapping.tsx b/src/core/public/i18n/i18n_eui_mapping.tsx index b7fbf8f91cc4e..beed0deced35c 100644 --- a/src/core/public/i18n/i18n_eui_mapping.tsx +++ b/src/core/public/i18n/i18n_eui_mapping.tsx @@ -15,8 +15,8 @@ interface EuiValues { [key: string]: any; } -export const getEuiContextMapping = () => { - const euiContextMapping: EuiTokensObject = { +export const getEuiContextMapping = (): EuiTokensObject => { + return { 'euiAccordion.isLoading': i18n.translate('core.euiAccordion.isLoading', { defaultMessage: 'Loading', }), @@ -40,7 +40,7 @@ export const getEuiContextMapping = () => { page, pageCount, }: EuiValues) => - i18n.translate('core.euiBasicTable.tableDescriptionWithoutPagination', { + i18n.translate('core.euiBasicTable.tableAutoCaptionWithPagination', { defaultMessage: 'This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.', values: { itemCount, totalItemCount, page, pageCount }, @@ -219,6 +219,9 @@ export const getEuiContextMapping = () => { description: 'Screen reader text to describe the composite behavior of the color stops component.', }), + 'euiColumnActions.hideColumn': i18n.translate('core.euiColumnActions.hideColumn', { + defaultMessage: 'Hide column', + }), 'euiColumnActions.sort': ({ schemaLabel }: EuiValues) => i18n.translate('core.euiColumnActions.sort', { defaultMessage: 'Sort {schemaLabel}', @@ -230,9 +233,6 @@ export const getEuiContextMapping = () => { 'euiColumnActions.moveRight': i18n.translate('core.euiColumnActions.moveRight', { defaultMessage: 'Move right', }), - 'euiColumnActions.hideColumn': i18n.translate('core.euiColumnActions.hideColumn', { - defaultMessage: 'Hide column', - }), 'euiColumnSelector.hideAll': i18n.translate('core.euiColumnSelector.hideAll', { defaultMessage: 'Hide all', }), @@ -369,12 +369,6 @@ export const getEuiContextMapping = () => { 'euiControlBar.screenReaderHeading': i18n.translate('core.euiControlBar.screenReaderHeading', { defaultMessage: 'Page level controls', }), - 'euiControlBar.customScreenReaderAnnouncement': ({ landmarkHeading }: EuiValues) => - i18n.translate('core.euiControlBar.customScreenReaderAnnouncement', { - defaultMessage: - 'There is a new region landmark called {landmarkHeading} with page level controls at the end of the document.', - values: { landmarkHeading }, - }), 'euiControlBar.screenReaderAnnouncement': i18n.translate( 'core.euiControlBar.screenReaderAnnouncement', { @@ -382,6 +376,12 @@ export const getEuiContextMapping = () => { 'There is a new region landmark with page level controls at the end of the document.', } ), + 'euiControlBar.customScreenReaderAnnouncement': ({ landmarkHeading }: EuiValues) => + i18n.translate('core.euiControlBar.customScreenReaderAnnouncement', { + defaultMessage: + 'There is a new region landmark called {landmarkHeading} with page level controls at the end of the document.', + values: { landmarkHeading }, + }), 'euiDataGrid.screenReaderNotice': i18n.translate('core.euiDataGrid.screenReaderNotice', { defaultMessage: 'Cell contains interactive content.', }), @@ -466,13 +466,13 @@ export const getEuiContextMapping = () => { } ), 'euiDataGridSchema.dateSortTextAsc': i18n.translate('core.euiDataGridSchema.dateSortTextAsc', { - defaultMessage: 'New-Old', + defaultMessage: 'Old-New', description: 'Ascending date label', }), 'euiDataGridSchema.dateSortTextDesc': i18n.translate( 'core.euiDataGridSchema.dateSortTextDesc', { - defaultMessage: 'Old-New', + defaultMessage: 'New-Old', description: 'Descending date label', } ), @@ -519,8 +519,8 @@ export const getEuiContextMapping = () => { }), 'euiFilterButton.filterBadge': ({ count, hasActiveFilters }: EuiValues) => i18n.translate('core.euiFilterButton.filterBadge', { - defaultMessage: '${count} ${filterCountLabel} filters', - values: { count, filterCountLabel: hasActiveFilters ? 'active' : 'available' }, + defaultMessage: '{count} {hasActiveFilters} filters', + values: { count, hasActiveFilters: hasActiveFilters ? 'active' : 'available' }, }), 'euiFlyout.closeAriaLabel': i18n.translate('core.euiFlyout.closeAriaLabel', { defaultMessage: 'Close this dialog', @@ -642,19 +642,19 @@ export const getEuiContextMapping = () => { 'euiModal.closeModal': i18n.translate('core.euiModal.closeModal', { defaultMessage: 'Closes this modal window', }), - 'euiNotificationEventMessages.accordionButtonText': ({ + 'euiNotificationEventMessages.accordionButtonText': ({ messagesLength }: EuiValues) => + i18n.translate('core.euiNotificationEventMessages.accordionButtonText', { + defaultMessage: '+ {messagesLength} more', + values: { messagesLength }, + }), + 'euiNotificationEventMessages.accordionAriaLabelButtonText': ({ messagesLength, eventName, }: EuiValues) => - i18n.translate('core.euiNotificationEventMessages.accordionButtonText', { + i18n.translate('core.euiNotificationEventMessages.accordionAriaLabelButtonText', { defaultMessage: '+ {messagesLength} messages for {eventName}', values: { messagesLength, eventName }, }), - 'euiNotificationEventMessages.accordionAriaLabelButtonText': ({ messagesLength }: EuiValues) => - i18n.translate('core.euiNotificationEventMessages.accordionAriaLabelButtonText', { - defaultMessage: '+ {messagesLength} more', - values: { messagesLength }, - }), 'euiNotificationEventMeta.contextMenuButton': ({ eventName }: EuiValues) => i18n.translate('core.euiNotificationEventMeta.contextMenuButton', { defaultMessage: 'Menu for {eventName}', @@ -682,25 +682,6 @@ export const getEuiContextMapping = () => { defaultMessage: 'Mark as unread', } ), - 'euiNotificationEventReadIcon.readAria': ({ eventName }: EuiValues) => - i18n.translate('core.euiNotificationEventReadIcon.readAria', { - defaultMessage: '{eventName} is read', - values: { eventName }, - }), - 'euiNotificationEventReadIcon.unreadAria': ({ eventName }: EuiValues) => - i18n.translate('core.euiNotificationEventReadIcon.unreadAria', { - defaultMessage: '{eventName} is unread', - values: { eventName }, - }), - 'euiNotificationEventReadIcon.read': i18n.translate('core.euiNotificationEventReadIcon.read', { - defaultMessage: 'Read', - }), - 'euiNotificationEventReadIcon.unread': i18n.translate( - 'core.euiNotificationEventReadIcon.unread', - { - defaultMessage: 'Unread', - } - ), 'euiNotificationEventMessages.accordionHideText': i18n.translate( 'core.euiNotificationEventMessages.accordionHideText', { @@ -712,13 +693,11 @@ export const getEuiContextMapping = () => { defaultMessage: 'Next page, {page}', values: { page }, }), - 'euiPagination.pageOfTotalCompressed': ({ page, total }: EuiValues) => ( - - ), + 'euiPagination.pageOfTotalCompressed': ({ page, total }: EuiValues) => + i18n.translate('core.euiPagination.pageOfTotalCompressed', { + defaultMessage: '{page} of {total}', + values: { page, total }, + }), 'euiPagination.previousPage': ({ page }: EuiValues) => i18n.translate('core.euiPagination.previousPage', { defaultMessage: 'Previous page, {page}', @@ -881,7 +860,7 @@ export const getEuiContextMapping = () => { description: 'Placeholder message while data is asynchronously loaded', }), 'euiSelectable.noAvailableOptions': i18n.translate('core.euiSelectable.noAvailableOptions', { - defaultMessage: "There aren't any options available", + defaultMessage: 'No options available', }), 'euiSelectable.noMatchingOptions': ({ searchValue }: EuiValues) => ( { 'euiSelectableListItem.excludedOptionInstructions': i18n.translate( 'core.euiSelectableListItem.excludedOptionInstructions', { - defaultMessage: 'To deselect this option, press enter', + defaultMessage: 'To deselect this option, press enter.', } ), 'euiSelectableTemplateSitewide.loadingResults': i18n.translate( @@ -1039,7 +1018,7 @@ export const getEuiContextMapping = () => { 'euiSuperSelect.screenReaderAnnouncement': ({ optionsCount }: EuiValues) => i18n.translate('core.euiSuperSelect.screenReaderAnnouncement', { defaultMessage: - 'You are in a form selector of {optionsCount} items and must select a single option. Use the Up and Down keys to navigate or Escape to close.', + 'You are in a form selector of {optionsCount} items and must select a single option. Use the up and down keys to navigate or escape to close.', values: { optionsCount }, }), 'euiSuperSelectControl.selectAnOption': ({ selectedValue }: EuiValues) => @@ -1086,6 +1065,7 @@ export const getEuiContextMapping = () => { i18n.translate('core.euiTableHeaderCell.titleTextWithDesc', { defaultMessage: '{innerText}; {description}', values: { innerText, description }, + description: 'Displayed in a cell in the header of the table to describe the field', }), 'euiTablePagination.rowsPerPage': i18n.translate('core.euiTablePagination.rowsPerPage', { defaultMessage: 'Rows per page', @@ -1111,6 +1091,15 @@ export const getEuiContextMapping = () => { defaultMessage: 'Notification', description: 'ARIA label on an element containing a notification', }), + 'euiTourStep.endTour': i18n.translate('core.euiTourStep.endTour', { + defaultMessage: 'End tour', + }), + 'euiTourStep.skipTour': i18n.translate('core.euiTourStep.skipTour', { + defaultMessage: 'Skip tour', + }), + 'euiTourStep.closeTour': i18n.translate('core.euiTourStep.closeTour', { + defaultMessage: 'Close tour', + }), 'euiTourStepIndicator.isActive': i18n.translate('core.euiTourStepIndicator.isActive', { defaultMessage: 'active', description: 'Text for an active tour step', @@ -1123,15 +1112,6 @@ export const getEuiContextMapping = () => { defaultMessage: 'incomplete', description: 'Text for an incomplete tour step', }), - 'euiTourStep.endTour': i18n.translate('core.euiTourStep.endTour', { - defaultMessage: 'End tour', - }), - 'euiTourStep.skipTour': i18n.translate('core.euiTourStep.skipTour', { - defaultMessage: 'Skip tour', - }), - 'euiTourStep.closeTour': i18n.translate('core.euiTourStep.closeTour', { - defaultMessage: 'Close tour', - }), 'euiTourStepIndicator.ariaLabel': ({ status, number }: EuiValues) => i18n.translate('core.euiTourStepIndicator.ariaLabel', { defaultMessage: 'Step {number} {status}', @@ -1149,7 +1129,24 @@ export const getEuiContextMapping = () => { defaultMessage: 'You can quickly navigate this list using arrow keys.', } ), + 'euiNotificationEventReadIcon.read': i18n.translate('core.euiNotificationEventReadIcon.read', { + defaultMessage: 'Read', + }), + 'euiNotificationEventReadIcon.readAria': ({ eventName }: EuiValues) => + i18n.translate('core.euiNotificationEventReadIcon.readAria', { + defaultMessage: '{eventName} is read', + values: { eventName }, + }), + 'euiNotificationEventReadIcon.unread': i18n.translate( + 'core.euiNotificationEventReadIcon.unread', + { + defaultMessage: 'Unread', + } + ), + 'euiNotificationEventReadIcon.unreadAria': ({ eventName }: EuiValues) => + i18n.translate('core.euiNotificationEventReadIcon.unreadAria', { + defaultMessage: '{eventName} is unread', + values: { eventName }, + }), }; - - return euiContextMapping; }; diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 2d37576bae1fd..d406dd9b688d0 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -250,7 +250,6 @@ "core.euiBasicTable.selectThisRow": "この行を選択", "core.euiBasicTable.tableAutoCaptionWithoutPagination": "この表には{itemCount}行あります。", "core.euiBasicTable.tableCaptionWithPagination": "{tableCaption}; {page}/{pageCount}ページ。", - "core.euiBasicTable.tableDescriptionWithoutPagination": "この表には{totalItemCount}行中{itemCount}行あります; {page}/{pageCount}ページ。", "core.euiBasicTable.tablePagination": "前の表のページネーション: {tableCaption}", "core.euiBasicTable.tableSimpleAutoCaptionWithPagination": "この表には{itemCount}行あります; {page}/{pageCount}ページ。", "core.euiBottomBar.customScreenReaderAnnouncement": "ドキュメントの最後には、新しいリージョンランドマーク{landmarkHeading}とページレベルのコントロールがあります。", @@ -338,7 +337,6 @@ "core.euiFieldPassword.showPassword": "プレーンテキストとしてパスワードを表示します。注記:パスワードは画面上に見えるように表示されます。", "core.euiFilePicker.clearSelectedFiles": "選択したファイルを消去", "core.euiFilePicker.filesSelected": "選択されたファイル", - "core.euiFilterButton.filterBadge": "${count} ${filterCountLabel} 個のフィルター", "core.euiFlyout.closeAriaLabel": "このダイアログを閉じる", "core.euiForm.addressFormErrors": "ハイライトされたエラーを修正してください。", "core.euiFormControlLayoutClearButton.label": "インプットを消去", @@ -363,8 +361,6 @@ "core.euiMarkdownEditorToolbar.editor": "エディター", "core.euiMarkdownEditorToolbar.previewMarkdown": "プレビュー", "core.euiModal.closeModal": "このモーダルウィンドウを閉じます", - "core.euiNotificationEventMessages.accordionAriaLabelButtonText": "+ {messagesLength}以上", - "core.euiNotificationEventMessages.accordionButtonText": "+ {eventName}の{messagesLength}メスえーいj", "core.euiNotificationEventMessages.accordionHideText": "非表示", "core.euiNotificationEventMeta.contextMenuButton": "{eventName}のメニュー", "core.euiNotificationEventReadButton.markAsRead": "既読に設定", @@ -7460,184 +7456,19 @@ "xpack.canvas.workpadTemplates.table.descriptionColumnTitle": "説明", "xpack.canvas.workpadTemplates.table.nameColumnTitle": "テンプレート名", "xpack.canvas.workpadTemplates.table.tagsColumnTitle": "タグ", - "expressionShape.functions.shape.args.borderHelpText": "図形の外郭の {SVG} カラーです。", - "expressionShape.functions.shape.args.borderWidthHelpText": "境界の太さです。", - "expressionShape.functions.shape.args.fillHelpText": "図形を塗りつぶす {SVG} カラーです。", - "expressionShape.functions.shape.args.maintainAspectHelpText": "図形の元の横縦比を維持しますか?", - "expressionShape.functions.shape.args.shapeHelpText": "図形を選択します。", - "expressionShape.functions.shapeHelpText": "図形を作成します。", - "expressionShape.renderer.shape.displayName": "形状", - "expressionShape.renderer.shape.helpDescription": "基本的な図形をレンダリングします", - "xpack.cases.addConnector.title": "コネクターの追加", - "xpack.cases.allCases.actions": "アクション", - "xpack.cases.allCases.comments": "コメント", - "xpack.cases.allCases.noTagsAvailable": "利用可能なタグがありません", - "xpack.cases.caseTable.addNewCase": "新規ケースの追加", - "xpack.cases.caseTable.bulkActions": "一斉アクション", - "xpack.cases.caseTable.bulkActions.closeSelectedTitle": "選択した項目を閉じる", - "xpack.cases.caseTable.bulkActions.deleteSelectedTitle": "選択した項目を削除", - "xpack.cases.caseTable.bulkActions.markInProgressTitle": "実行中に設定", - "xpack.cases.caseTable.bulkActions.openSelectedTitle": "選択した項目を開く", - "xpack.cases.caseTable.caseDetailsLinkAria": "クリックすると、タイトル{detailName}のケースを表示します", - "xpack.cases.caseTable.changeStatus": "ステータスの変更", - "xpack.cases.caseTable.closed": "終了", - "xpack.cases.caseTable.closedCases": "終了したケース", - "xpack.cases.caseTable.delete": "削除", - "xpack.cases.caseTable.incidentSystem": "インシデント管理システム", - "xpack.cases.caseTable.inProgressCases": "進行中のケース", - "xpack.cases.caseTable.noCases.body": "表示するケースがありません。新しいケースを作成するか、または上記のフィルター設定を変更してください。", - "xpack.cases.caseTable.noCases.readonly.body": "表示するケースがありません。上のフィルター設定を変更してください。", - "xpack.cases.caseTable.noCases.title": "ケースなし", - "xpack.cases.caseTable.notPushed": "プッシュされません", - "xpack.cases.caseTable.openCases": "ケースを開く", - "xpack.cases.caseTable.pushLinkAria": "クリックすると、{ thirdPartyName }でインシデントを表示します。", - "xpack.cases.caseTable.refreshTitle": "更新", - "xpack.cases.caseTable.requiresUpdate": " 更新が必要", - "xpack.cases.caseTable.searchAriaLabel": "ケースの検索", - "xpack.cases.caseTable.searchPlaceholder": "例:ケース名", - "xpack.cases.caseTable.selectedCasesTitle": "{totalRules} {totalRules, plural, other {ケース}} を選択しました", - "xpack.cases.caseTable.snIncident": "外部インシデント", - "xpack.cases.caseTable.status": "ステータス", - "xpack.cases.caseTable.upToDate": " は最新です", - "xpack.cases.caseView.actionLabel.addDescription": "説明を追加しました", - "xpack.cases.caseView.actionLabel.addedField": "追加しました", - "xpack.cases.caseView.actionLabel.changededField": "変更しました", - "xpack.cases.caseView.actionLabel.editedField": "編集しました", - "xpack.cases.caseView.actionLabel.on": "日付", - "xpack.cases.caseView.actionLabel.pushedNewIncident": "新しいインシデントとしてプッシュしました", - "xpack.cases.caseView.actionLabel.removedField": "削除しました", - "xpack.cases.caseView.actionLabel.removedThirdParty": "外部のインシデント管理システムを削除しました", - "xpack.cases.caseView.actionLabel.selectedThirdParty": "インシデント管理システムとして{ thirdParty }を選択しました", - "xpack.cases.caseView.actionLabel.updateIncident": "インシデントを更新しました", - "xpack.cases.caseView.actionLabel.viewIncident": "{incidentNumber}を表示", - "xpack.cases.caseView.alertCommentLabelTitle": "アラートを追加しました", - "xpack.cases.caseView.alreadyPushedToExternalService": "すでに{ externalService }インシデントにプッシュしました", - "xpack.cases.caseView.appropiateLicense": "適切なライセンス", - "xpack.cases.caseView.backLabel": "ケースに戻る", - "xpack.cases.caseView.cancel": "キャンセル", - "xpack.cases.caseView.case": "ケース", - "xpack.cases.caseView.caseClosed": "ケースを閉じました", - "xpack.cases.caseView.caseInProgress": "進行中のケース", - "xpack.cases.caseView.caseName": "ケース名", - "xpack.cases.caseView.caseOpened": "ケースを開きました", - "xpack.cases.caseView.caseRefresh": "ケースを更新", - "xpack.cases.caseView.closeCase": "ケースを閉じる", - "xpack.cases.caseView.closedOn": "終了日", - "xpack.cases.caseView.cloudDeploymentLink": "クラウド展開", - "xpack.cases.caseView.comment": "コメント", - "xpack.cases.caseView.comment.addComment": "コメントを追加", - "xpack.cases.caseView.comment.addCommentHelpText": "新しいコメントを追加...", - "xpack.cases.caseView.commentFieldRequiredError": "コメントが必要です。", - "xpack.cases.caseView.connectors": "外部インシデント管理システム", - "xpack.cases.caseView.copyCommentLinkAria": "参照リンクをコピー", - "xpack.cases.caseView.create": "新規ケースを作成", - "xpack.cases.caseView.createCase": "ケースを作成", - "xpack.cases.caseView.description": "説明", - "xpack.cases.caseView.description.save": "保存", - "xpack.cases.caseView.doesNotExist.button": "ケースに戻る", - "xpack.cases.caseView.doesNotExist.description": "ID {caseId} のケースが見つかりませんでした。一般的には、これはケースが削除されたか、IDが正しくないことを意味します。", - "xpack.cases.caseView.doesNotExist.title": "このケースは存在しません", - "xpack.cases.caseView.edit": "編集", - "xpack.cases.caseView.edit.comment": "コメントを編集", - "xpack.cases.caseView.edit.description": "説明を編集", - "xpack.cases.caseView.edit.quote": "お客様の声", - "xpack.cases.caseView.editActionsLinkAria": "クリックすると、すべてのアクションを表示します", - "xpack.cases.caseView.editTagsLinkAria": "クリックすると、タグを編集します", - "xpack.cases.caseView.emailBody": "ケースリファレンス:{caseUrl}", - "xpack.cases.caseView.emailSubject": "セキュリティケース - {caseTitle}", - "xpack.cases.caseView.errorsPushServiceCallOutTitle": "外部コネクターを選択", - "xpack.cases.caseView.fieldChanged": "変更されたコネクターフィールド", - "xpack.cases.caseView.fieldRequiredError": "必須フィールド", - "xpack.cases.caseView.generatedAlertCommentLabelTitle": "から追加されました", - "xpack.cases.caseView.isolatedHost": "分離されたホスト", - "xpack.cases.caseView.lockedIncidentDesc": "更新は必要ありません", - "xpack.cases.caseView.lockedIncidentTitle": "{ thirdParty }インシデントは最新です", - "xpack.cases.caseView.lockedIncidentTitleNone": "外部インシデントは最新です", - "xpack.cases.caseView.markedCaseAs": "ケースを設定", - "xpack.cases.caseView.markInProgress": "実行中に設定", - "xpack.cases.caseView.moveToCommentAria": "参照されたコメントをハイライト", - "xpack.cases.caseView.name": "名前", - "xpack.cases.caseView.noReportersAvailable": "利用可能なレポートがありません。", - "xpack.cases.caseView.noTags": "現在、このケースにタグは割り当てられていません。", - "xpack.cases.caseView.openCase": "ケースを開く", - "xpack.cases.caseView.openedOn": "開始日", - "xpack.cases.caseView.optional": "オプション", - "xpack.cases.caseView.particpantsLabel": "参加者", - "xpack.cases.caseView.pushNamedIncident": "{ thirdParty }インシデントとしてプッシュ", - "xpack.cases.caseView.pushThirdPartyIncident": "外部インシデントとしてプッシュ", - "xpack.cases.caseView.pushToService.configureConnector": "外部システムでケースを開いて更新するには、このケースの外部インシデント管理システムを選択する必要があります。", - "xpack.cases.caseView.pushToServiceDisableBecauseCaseClosedDescription": "終了したケースは外部システムに送信できません。外部システムでケースを開始または更新したい場合にはケースを再開します。", - "xpack.cases.caseView.pushToServiceDisableBecauseCaseClosedTitle": "ケースを再開する", - "xpack.cases.caseView.pushToServiceDisableByConfigDescription": "kibana.ymlファイルは、特定のコネクターのみを許可するように構成されています。外部システムでケースを開けるようにするには、xpack.actions.enabledActiontypes設定に.[actionTypeId] (例:.servicenow | .jira) を追加します。詳細は{link}をご覧ください。", - "xpack.cases.caseView.pushToServiceDisableByConfigTitle": "Kibanaの構成ファイルで外部サービスを有効にする", - "xpack.cases.caseView.pushToServiceDisableByInvalidConnector": "外部サービスに更新を送信するために使用されるコネクターが削除されました。外部システムでケースを更新するには、別のコネクターを選択するか、新しいコネクターを作成してください。", - "xpack.cases.caseView.pushToServiceDisableByLicenseDescription": "{appropriateLicense}があるか、{cloud}を使用しているか、無償試用版をテストしているときには、外部システムでケースを開くことができます。", - "xpack.cases.caseView.pushToServiceDisableByLicenseTitle": "適切なライセンスにアップグレード", - "xpack.cases.caseView.releasedHost": "リリースされたホスト", - "xpack.cases.caseView.reopenCase": "ケースを再開", - "xpack.cases.caseView.reporterLabel": "報告者", - "xpack.cases.caseView.requiredUpdateToExternalService": "{ externalService }インシデントの更新が必要です", - "xpack.cases.caseView.sendEmalLinkAria": "クリックすると、{user}に電子メールを送信します", - "xpack.cases.caseView.showAlertTooltip": "アラートの詳細を表示", - "xpack.cases.caseView.statusLabel": "ステータス", - "xpack.cases.caseView.syncAlertsLabel": "アラートの同期", - "xpack.cases.caseView.tags": "タグ", - "xpack.cases.caseView.to": "に", - "xpack.cases.caseView.unknown": "不明", - "xpack.cases.caseView.unknownRule.label": "不明なルール", - "xpack.cases.caseView.updateNamedIncident": "{ thirdParty }インシデントを更新", - "xpack.cases.caseView.updateThirdPartyIncident": "外部インシデントを更新", - "xpack.cases.common.alertAddedToCase": "ケースに追加しました", - "xpack.cases.common.alertLabel": "アラート", - "xpack.cases.common.alertsLabel": "アラート", - "xpack.cases.common.allCases.caseModal.title": "ケースを選択", - "xpack.cases.common.allCases.table.selectableMessageCollections": "ケースとサブケースを選択することはできません", - "xpack.cases.common.noConnector": "コネクターを選択していません", - "xpack.cases.components.connectors.cases.actionTypeTitle": "ケース", - "xpack.cases.components.connectors.cases.addNewCaseOption": "新規ケースの追加", - "xpack.cases.components.connectors.cases.callOutMsg": "ケースには複数のサブケースを追加して、生成されたアラートをグループ化できます。サブケースではこのような生成されたアラートのステータスをより高い粒度で制御でき、1つのケースに関連付けられるアラートが多くなりすぎないようにします。", - "xpack.cases.components.connectors.cases.callOutTitle": "生成されたアラートはサブケースに関連付けられます", - "xpack.cases.components.connectors.cases.caseRequired": "ケースの選択が必要です。", - "xpack.cases.components.connectors.cases.casesDropdownRowLabel": "サブケースを許可するケース", - "xpack.cases.components.connectors.cases.createCaseLabel": "ケースを作成", - "xpack.cases.components.connectors.cases.optionAddToExistingCase": "既存のケースに追加", - "xpack.cases.components.connectors.cases.selectMessageText": "ケースを作成または更新します。", - "xpack.cases.components.create.syncAlertHelpText": "このオプションを有効にすると、このケースのアラートのステータスをケースステータスと同期します。", - "xpack.cases.configure.readPermissionsErrorDescription": "コネクターを表示するアクセス権がありません。このケースに関連付けら他コネクターを表示する場合は、Kibana管理者に連絡してください。", - "xpack.cases.configure.successSaveToast": "保存された外部接続設定", - "xpack.cases.configureCases.addNewConnector": "新しいコネクターを追加", - "xpack.cases.configureCases.cancelButton": "キャンセル", - "xpack.cases.configureCases.caseClosureOptionsDesc": "ケースの終了方法を定義します。自動終了のためには、外部のインシデント管理システムへの接続を確立する必要があります。", - "xpack.cases.configureCases.caseClosureOptionsLabel": "ケース終了オプション", - "xpack.cases.configureCases.caseClosureOptionsManual": "ケースを手動で終了する", - "xpack.cases.configureCases.caseClosureOptionsNewIncident": "新しいインシデントを外部システムにプッシュするときにケースを自動的に終了する", - "xpack.cases.configureCases.caseClosureOptionsSubCases": "サブケースの自動終了はサポートされていません。", - "xpack.cases.configureCases.caseClosureOptionsTitle": "ケースの終了", - "xpack.cases.configureCases.commentMapping": "コメント", - "xpack.cases.configureCases.fieldMappingDesc": "データを{ thirdPartyName }にプッシュするときに、ケースフィールドを{ thirdPartyName }フィールドにマッピングします。フィールドマッピングでは、{ thirdPartyName } への接続を確立する必要があります。", - "xpack.cases.configureCases.fieldMappingDescErr": "{ thirdPartyName }のマッピングを取得できませんでした。", - "xpack.cases.configureCases.fieldMappingEditAppend": "末尾に追加", - "xpack.cases.configureCases.fieldMappingFirstCol": "Kibanaケースフィールド", - "xpack.cases.configureCases.fieldMappingSecondCol": "{ thirdPartyName } フィールド", - "xpack.cases.configureCases.fieldMappingThirdCol": "編集時と更新時", - "xpack.cases.configureCases.fieldMappingTitle": "{ thirdPartyName } フィールドマッピング", - "xpack.cases.configureCases.headerTitle": "ケースを構成", - "xpack.cases.configureCases.incidentManagementSystemDesc": "ケースを外部のインシデント管理システムに接続します。その後にサードパーティシステムでケースデータをインシデントとしてプッシュできます。", - "xpack.cases.configureCases.incidentManagementSystemLabel": "インシデント管理システム", - "xpack.cases.configureCases.incidentManagementSystemTitle": "外部インシデント管理システム", - "xpack.cases.configureCases.requiredMappings": "1 つ以上のケースフィールドを次の { connectorName } フィールドにマッピングする必要があります:{ fields }", - "xpack.cases.configureCases.saveAndCloseButton": "保存して閉じる", - "xpack.cases.configureCases.saveButton": "保存", - "xpack.cases.configureCases.updateConnector": "フィールドマッピングを更新", - "xpack.cases.configureCases.updateSelectedConnector": "{ connectorName }を更新", - "xpack.cases.configureCases.warningMessage": "選択したコネクターが削除されました。別のコネクターを選択するか、新しいコネクターを作成してください。", - "xpack.cases.configureCases.warningTitle": "警告", - "xpack.cases.configureCasesButton": "外部接続を編集", - "xpack.cases.confirmDeleteCase.confirmQuestion": "{quantity, plural, =1 {このケース} other {これらのケース}}を削除すると、関連するすべてのケースデータが完全に削除され、外部インシデント管理システムにデータをプッシュできなくなります。続行していいですか?", - "xpack.cases.confirmDeleteCase.deleteTitle": "「{caseTitle}」を削除", - "xpack.cases.confirmDeleteCase.selectedCases": "\"{quantity, plural, =1 {{title}} other {選択した{quantity}個のケース}}\"を削除", - "xpack.cases.connecors.get.missingCaseConnectorErrorMessage": "オブジェクトタイプ「{id}」は登録されていません。", - "xpack.cases.connecors.register.duplicateCaseConnectorErrorMessage": "オブジェクトタイプ「{id}」はすでに登録されています。", + "expressionError.errorComponent.description": "表現が失敗し次のメッセージが返されました:", + "expressionError.errorComponent.title": "おっと!表現が失敗しました", + "expressionError.renderer.debug.displayName": "デバッグ", + "expressionError.renderer.debug.helpDescription": "デバッグアウトプットをフォーマットされた {JSON} としてレンダリングします", + "expressionError.renderer.error.displayName": "エラー情報", + "expressionError.renderer.error.helpDescription": "エラーデータをユーザーにわかるようにレンダリングします", + "expressionRevealImage.functions.revealImage.args.emptyImageHelpText": "表示される背景画像です。画像アセットは「{BASE64}」データ {URL} として提供するか、部分式で渡します。", + "expressionRevealImage.functions.revealImage.args.imageHelpText": "表示する画像です。画像アセットは{BASE64}データ{URL}として提供するか、部分式で渡します。", + "expressionRevealImage.functions.revealImage.args.originHelpText": "画像で埋め始める位置です。たとえば、{list}、または {end}です。", + "expressionRevealImage.functions.revealImage.invalidPercentErrorMessage": "無効な値:「{percent}」。パーセンテージは 0 と 1 の間でなければなりません ", + "expressionRevealImage.functions.revealImageHelpText": "画像表示エレメントを構成します。", + "expressionRevealImage.renderer.revealImage.displayName": "画像の部分表示", + "expressionRevealImage.renderer.revealImage.helpDescription": "カスタムゲージスタイルチャートを作成するため、画像のパーセンテージを表示します", "xpack.cases.connectors.cases.externalIncidentAdded": " ({date}に{user}が追加) ", "xpack.cases.connectors.cases.externalIncidentCreated": " ({date}に{user}が作成) ", "xpack.cases.connectors.cases.externalIncidentDefault": " ({date}に{user}が作成) ", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index e7975c969e0da..dbe67290bbe3a 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -253,7 +253,6 @@ "core.euiBasicTable.selectThisRow": "选择此行", "core.euiBasicTable.tableAutoCaptionWithoutPagination": "此表包含 {itemCount} 行。", "core.euiBasicTable.tableCaptionWithPagination": "{tableCaption};第 {page} 页,共 {pageCount} 页。", - "core.euiBasicTable.tableDescriptionWithoutPagination": "此表包含 {itemCount} 行,共有 {totalItemCount} 行;第 {page} 页,共 {pageCount} 页。", "core.euiBasicTable.tablePagination": "前表分页:{tableCaption}", "core.euiBasicTable.tableSimpleAutoCaptionWithPagination": "此表包含 {itemCount} 行;第 {page} 页,共 {pageCount} 页。", "core.euiBottomBar.customScreenReaderAnnouncement": "有称作 {landmarkHeading} 且页面级别控件位于文档结尾的新地区地标。", @@ -341,7 +340,6 @@ "core.euiFieldPassword.showPassword": "将密码显示为纯文本。注意:这会将您的密码暴露在屏幕上。", "core.euiFilePicker.clearSelectedFiles": "清除选定的文件", "core.euiFilePicker.filesSelected": "个文件已选择", - "core.euiFilterButton.filterBadge": "{count} 个 {filterCountLabel} 筛选", "core.euiFlyout.closeAriaLabel": "关闭此对话框", "core.euiForm.addressFormErrors": "请解决突出显示的错误。", "core.euiFormControlLayoutClearButton.label": "清除输入", @@ -366,8 +364,6 @@ "core.euiMarkdownEditorToolbar.editor": "编辑器", "core.euiMarkdownEditorToolbar.previewMarkdown": "预览", "core.euiModal.closeModal": "关闭此模式窗口", - "core.euiNotificationEventMessages.accordionAriaLabelButtonText": "+ 另外 {messagesLength} 条", - "core.euiNotificationEventMessages.accordionButtonText": "+ {eventName} 的 {messagesLength} 条消息", "core.euiNotificationEventMessages.accordionHideText": "隐藏", "core.euiNotificationEventMeta.contextMenuButton": "{eventName} 的菜单", "core.euiNotificationEventReadButton.markAsRead": "标记为已读", @@ -7509,193 +7505,23 @@ "xpack.canvas.workpadTemplates.table.descriptionColumnTitle": "描述", "xpack.canvas.workpadTemplates.table.nameColumnTitle": "模板名称", "xpack.canvas.workpadTemplates.table.tagsColumnTitle": "标签", - "expressionShape.functions.shape.args.borderHelpText": "形状轮廓边框的 {SVG} 颜色。", - "expressionShape.functions.shape.args.borderWidthHelpText": "边框的粗细。", - "expressionShape.functions.shape.args.fillHelpText": "填充形状的 {SVG} 颜色。", - "expressionShape.functions.shape.args.maintainAspectHelpText": "维持形状的原始纵横比?", - "expressionShape.functions.shape.args.shapeHelpText": "选取形状。", - "expressionShape.functions.shapeHelpText": "创建形状。", - "expressionShape.renderer.shape.displayName": "形状", - "expressionShape.renderer.shape.helpDescription": "呈现基本形状", - "xpack.cases.addConnector.title": "添加连接器", - "xpack.cases.allCases.actions": "操作", - "xpack.cases.allCases.comments": "注释", - "xpack.cases.allCases.noTagsAvailable": "没有可用标记", - "xpack.cases.caseTable.addNewCase": "添加新案例", - "xpack.cases.caseTable.bulkActions": "批处理操作", - "xpack.cases.caseTable.bulkActions.closeSelectedTitle": "关闭所选", - "xpack.cases.caseTable.bulkActions.deleteSelectedTitle": "删除所选", - "xpack.cases.caseTable.bulkActions.markInProgressTitle": "标记为进行中", - "xpack.cases.caseTable.bulkActions.openSelectedTitle": "打开所选", - "xpack.cases.caseTable.caseDetailsLinkAria": "单击以访问标题为 {detailName} 的案例", - "xpack.cases.caseTable.changeStatus": "更改状态", - "xpack.cases.caseTable.closed": "已关闭", - "xpack.cases.caseTable.closedCases": "已关闭案例", - "xpack.cases.caseTable.delete": "删除", - "xpack.cases.caseTable.incidentSystem": "事件管理系统", - "xpack.cases.caseTable.inProgressCases": "进行中的案例", - "xpack.cases.caseTable.noCases.body": "没有可显示的案例。请创建新案例或在上面更改您的筛选设置。", - "xpack.cases.caseTable.noCases.readonly.body": "没有可显示的案例。请在上面更改您的筛选设置。", - "xpack.cases.caseTable.noCases.title": "无案例", - "xpack.cases.caseTable.notPushed": "未推送", - "xpack.cases.caseTable.openCases": "未结案例", - "xpack.cases.caseTable.pushLinkAria": "单击可在 { thirdPartyName } 上查看该事件。", - "xpack.cases.caseTable.refreshTitle": "刷新", - "xpack.cases.caseTable.requiresUpdate": " 需要更新", - "xpack.cases.caseTable.searchAriaLabel": "搜索案例", - "xpack.cases.caseTable.searchPlaceholder": "例如案例名", - "xpack.cases.caseTable.selectedCasesTitle": "已选择 {totalRules} 个{totalRules, plural, other {案例}}", - "xpack.cases.caseTable.showingCasesTitle": "正在显示 {totalRules} 个{totalRules, plural, other {案例}}", - "xpack.cases.caseTable.snIncident": "外部事件", - "xpack.cases.caseTable.status": "状态", - "xpack.cases.caseTable.unit": "{totalCount, plural, other {案例}}", - "xpack.cases.caseTable.upToDate": " 是最新的", - "xpack.cases.caseView.actionLabel.addDescription": "添加了描述", - "xpack.cases.caseView.actionLabel.addedField": "添加了", - "xpack.cases.caseView.actionLabel.changededField": "更改了", - "xpack.cases.caseView.actionLabel.editedField": "编辑了", - "xpack.cases.caseView.actionLabel.on": "在", - "xpack.cases.caseView.actionLabel.pushedNewIncident": "已推送为新事件", - "xpack.cases.caseView.actionLabel.removedField": "移除了", - "xpack.cases.caseView.actionLabel.removedThirdParty": "已移除外部事件管理系统", - "xpack.cases.caseView.actionLabel.selectedThirdParty": "已选择 { thirdParty } 作为事件管理系统", - "xpack.cases.caseView.actionLabel.updateIncident": "更新了事件", - "xpack.cases.caseView.actionLabel.viewIncident": "查看 {incidentNumber}", - "xpack.cases.caseView.alertCommentLabelTitle": "添加了告警,从", - "xpack.cases.caseView.alreadyPushedToExternalService": "已推送到 { externalService } 事件", - "xpack.cases.caseView.appropiateLicense": "适当的许可证", - "xpack.cases.caseView.backLabel": "返回到案例", - "xpack.cases.caseView.cancel": "取消", - "xpack.cases.caseView.case": "案例", - "xpack.cases.caseView.caseClosed": "案例已关闭", - "xpack.cases.caseView.caseInProgress": "案例进行中", - "xpack.cases.caseView.caseName": "案例名称", - "xpack.cases.caseView.caseOpened": "案例已打开", - "xpack.cases.caseView.caseRefresh": "刷新案例", - "xpack.cases.caseView.closeCase": "关闭案例", - "xpack.cases.caseView.closedOn": "关闭日期", - "xpack.cases.caseView.cloudDeploymentLink": "云部署", - "xpack.cases.caseView.comment": "注释", - "xpack.cases.caseView.comment.addComment": "添加注释", - "xpack.cases.caseView.comment.addCommentHelpText": "添加新注释......", - "xpack.cases.caseView.commentFieldRequiredError": "注释必填。", - "xpack.cases.caseView.connectors": "外部事件管理系统", - "xpack.cases.caseView.copyCommentLinkAria": "复制参考链接", - "xpack.cases.caseView.create": "创建新案例", - "xpack.cases.caseView.createCase": "创建案例", - "xpack.cases.caseView.description": "描述", - "xpack.cases.caseView.description.save": "保存", - "xpack.cases.caseView.doesNotExist.button": "返回到案例", - "xpack.cases.caseView.doesNotExist.description": "找不到 ID 为 {caseId} 的案例。这很可能意味着案例已删除或 ID 不正确。", - "xpack.cases.caseView.doesNotExist.title": "此案例不存在", - "xpack.cases.caseView.edit": "编辑", - "xpack.cases.caseView.edit.comment": "编辑注释", - "xpack.cases.caseView.edit.description": "编辑描述", - "xpack.cases.caseView.edit.quote": "引述", - "xpack.cases.caseView.editActionsLinkAria": "单击可查看所有操作", - "xpack.cases.caseView.editTagsLinkAria": "单击可编辑标签", - "xpack.cases.caseView.emailBody": "案例参考:{caseUrl}", - "xpack.cases.caseView.emailSubject": "Security 案例 - {caseTitle}", - "xpack.cases.caseView.errorsPushServiceCallOutTitle": "选择外部连接器", - "xpack.cases.caseView.fieldChanged": "已更改连接器字段", - "xpack.cases.caseView.fieldRequiredError": "必填字段", - "xpack.cases.caseView.generatedAlertCommentLabelTitle": "添加自", - "xpack.cases.caseView.generatedAlertCountCommentLabelTitle": "{totalCount} 个{totalCount, plural, other {告警}}", - "xpack.cases.caseView.isolatedHost": "已隔离主机", - "xpack.cases.caseView.lockedIncidentDesc": "不需要任何更新", - "xpack.cases.caseView.lockedIncidentTitle": "{ thirdParty } 事件是最新的", - "xpack.cases.caseView.lockedIncidentTitleNone": "外部事件是最新的", - "xpack.cases.caseView.markedCaseAs": "将案例标记为", - "xpack.cases.caseView.markInProgress": "标记为进行中", - "xpack.cases.caseView.moveToCommentAria": "高亮显示引用的注释", - "xpack.cases.caseView.name": "名称", - "xpack.cases.caseView.noReportersAvailable": "没有报告者。", - "xpack.cases.caseView.noTags": "当前没有为此案例分配标签。", - "xpack.cases.caseView.openCase": "创建案例", - "xpack.cases.caseView.openedOn": "打开时间", - "xpack.cases.caseView.optional": "可选", - "xpack.cases.caseView.otherEndpoints": " 以及{endpoints, plural, other {其他}} {endpoints} 个", - "xpack.cases.caseView.particpantsLabel": "参与者", - "xpack.cases.caseView.pushNamedIncident": "推送为 { thirdParty } 事件", - "xpack.cases.caseView.pushThirdPartyIncident": "推送为外部事件", - "xpack.cases.caseView.pushToService.configureConnector": "要在外部系统中打开和更新案例,必须为此案例选择外部事件管理系统。", - "xpack.cases.caseView.pushToServiceDisableBecauseCaseClosedDescription": "关闭的案例无法发送到外部系统。如果希望在外部系统中打开或更新案例,请重新打开案例。", - "xpack.cases.caseView.pushToServiceDisableBecauseCaseClosedTitle": "重新打开案例", - "xpack.cases.caseView.pushToServiceDisableByConfigDescription": "kibana.yml 文件已配置为仅允许特定连接器。要在外部系统中打开案例,请将 .[actionTypeId](例如:.servicenow | .jira)添加到 xpack.actions.enabledActiontypes 设置。有关更多信息,请参阅{link}。", - "xpack.cases.caseView.pushToServiceDisableByConfigTitle": "在 Kibana 配置文件中启用外部服务", - "xpack.cases.caseView.pushToServiceDisableByInvalidConnector": "用于将更新发送到外部服务的连接器已删除。要在外部系统中更新案例,请选择不同的连接器或创建新的连接器。", - "xpack.cases.caseView.pushToServiceDisableByLicenseDescription": "有{appropriateLicense}、正使用{cloud}或正在免费试用时,可在外部系统中创建案例。", - "xpack.cases.caseView.pushToServiceDisableByLicenseTitle": "升级适当的许可", - "xpack.cases.caseView.releasedHost": "已释放主机", - "xpack.cases.caseView.reopenCase": "重新打开案例", - "xpack.cases.caseView.reporterLabel": "报告者", - "xpack.cases.caseView.requiredUpdateToExternalService": "需要更新 { externalService } 事件", - "xpack.cases.caseView.sendEmalLinkAria": "单击可向 {user} 发送电子邮件", - "xpack.cases.caseView.showAlertTooltip": "显示告警详情", - "xpack.cases.caseView.statusLabel": "状态", - "xpack.cases.caseView.syncAlertsLabel": "同步告警", - "xpack.cases.caseView.tags": "标签", - "xpack.cases.caseView.to": "到", - "xpack.cases.caseView.unknown": "未知", - "xpack.cases.caseView.unknownRule.label": "未知规则", - "xpack.cases.caseView.updateNamedIncident": "更新 { thirdParty } 事件", - "xpack.cases.caseView.updateThirdPartyIncident": "更新外部事件", - "xpack.cases.common.alertAddedToCase": "已添加到案例", - "xpack.cases.common.alertLabel": "告警", - "xpack.cases.common.alertsLabel": "告警", - "xpack.cases.common.allCases.caseModal.title": "选择案例", - "xpack.cases.common.allCases.table.selectableMessageCollections": "无法选择具有子案例的案例", - "xpack.cases.common.noConnector": "未选择任何连接器", - "xpack.cases.components.connectors.cases.actionTypeTitle": "案例", - "xpack.cases.components.connectors.cases.addNewCaseOption": "添加新案例", - "xpack.cases.components.connectors.cases.callOutMsg": "案例可以包含多个子案例以允许分组生成的告警。子案例将为这些已生成告警的状态提供更精细的控制,从而防止在一个案例上附加过多的告警。", - "xpack.cases.components.connectors.cases.callOutTitle": "已生成告警将附加到子案例", - "xpack.cases.components.connectors.cases.caseRequired": "必须选择策略。", - "xpack.cases.components.connectors.cases.casesDropdownRowLabel": "允许有子案例的案例", - "xpack.cases.components.connectors.cases.createCaseLabel": "创建案例", - "xpack.cases.components.connectors.cases.optionAddToExistingCase": "添加到现有案例", - "xpack.cases.components.connectors.cases.selectMessageText": "创建或更新案例。", - "xpack.cases.components.create.syncAlertHelpText": "启用此选项将使本案例中的告警状态与案例状态同步。", - "xpack.cases.configure.readPermissionsErrorDescription": "您无权查看连接器。如果要查看与此案例关联的连接器,请联系Kibana 管理员。", - "xpack.cases.configure.successSaveToast": "已保存外部连接设置", - "xpack.cases.configureCases.addNewConnector": "添加新连接器", - "xpack.cases.configureCases.cancelButton": "取消", - "xpack.cases.configureCases.caseClosureOptionsDesc": "定义如何关闭案例。要自动关闭,需要与外部事件管理系统建立连接。", - "xpack.cases.configureCases.caseClosureOptionsLabel": "案例关闭选项", - "xpack.cases.configureCases.caseClosureOptionsManual": "手动关闭案例", - "xpack.cases.configureCases.caseClosureOptionsNewIncident": "将新事件推送到外部系统时自动关闭案例", - "xpack.cases.configureCases.caseClosureOptionsSubCases": "不支持自动关闭子案例。", - "xpack.cases.configureCases.caseClosureOptionsTitle": "案例关闭", - "xpack.cases.configureCases.commentMapping": "注释", - "xpack.cases.configureCases.fieldMappingDesc": "将数据推送到 { thirdPartyName } 时,将案例字段映射到 { thirdPartyName } 字段。字段映射需要与 { thirdPartyName } 建立连接。", - "xpack.cases.configureCases.fieldMappingDescErr": "无法检索 { thirdPartyName } 的映射。", - "xpack.cases.configureCases.fieldMappingEditAppend": "追加", - "xpack.cases.configureCases.fieldMappingFirstCol": "Kibana 案例字段", - "xpack.cases.configureCases.fieldMappingSecondCol": "{ thirdPartyName } 字段", - "xpack.cases.configureCases.fieldMappingThirdCol": "编辑和更新时", - "xpack.cases.configureCases.fieldMappingTitle": "{ thirdPartyName } 字段映射", - "xpack.cases.configureCases.headerTitle": "配置案例", - "xpack.cases.configureCases.incidentManagementSystemDesc": "将您的案例连接到外部事件管理系统。然后,您便可以将案例数据推送为第三方系统中的事件。", - "xpack.cases.configureCases.incidentManagementSystemLabel": "事件管理系统", - "xpack.cases.configureCases.incidentManagementSystemTitle": "外部事件管理系统", - "xpack.cases.configureCases.requiredMappings": "至少有一个案例字段需要映射到以下所需的 { connectorName } 字段:{ fields }", - "xpack.cases.configureCases.saveAndCloseButton": "保存并关闭", - "xpack.cases.configureCases.saveButton": "保存", - "xpack.cases.configureCases.updateConnector": "更新字段映射", - "xpack.cases.configureCases.updateSelectedConnector": "更新 { connectorName }", - "xpack.cases.configureCases.warningMessage": "选定的连接器已删除。选择不同的连接器或创建新的连接器。", - "xpack.cases.configureCases.warningTitle": "警告", - "xpack.cases.configureCasesButton": "编辑外部连接", - "xpack.cases.confirmDeleteCase.confirmQuestion": "删除{quantity, plural, =1 {此案例} other {这些案例}}即会永久移除所有相关案例数据,而且您将无法再将数据推送到外部事件管理系统。是否确定要继续?", - "xpack.cases.confirmDeleteCase.deleteCase": "删除{quantity, plural, other {案例}}", - "xpack.cases.confirmDeleteCase.deleteTitle": "删除“{caseTitle}”", - "xpack.cases.confirmDeleteCase.selectedCases": "删除“{quantity, plural, =1 {{title}} other {选定的 {quantity} 个案例}}”", - "xpack.cases.connecors.get.missingCaseConnectorErrorMessage": "对象类型“{id}”未注册。", - "xpack.cases.connecors.register.duplicateCaseConnectorErrorMessage": "已注册对象类型“{id}”。", - "xpack.cases.connectors.cases.externalIncidentAdded": "(由 {user} 于 {date}添加)", - "xpack.cases.connectors.cases.externalIncidentCreated": "(由 {user} 于 {date}创建)", - "xpack.cases.connectors.cases.externalIncidentDefault": "(由 {user} 于 {date}创建)", - "xpack.cases.connectors.cases.externalIncidentUpdated": "(由 {user} 于 {date}更新)", + "expressionError.errorComponent.description": "表达式失败,并显示消息:", + "expressionError.errorComponent.title": "哎哟!表达式失败", + "expressionError.renderer.debug.displayName": "故障排查", + "expressionError.renderer.debug.helpDescription": "将故障排查输出呈现为带格式的 {JSON}", + "expressionError.renderer.error.displayName": "错误信息", + "expressionError.renderer.error.helpDescription": "以用户友好的方式呈现错误数据", + "expressionRevealImage.functions.revealImage.args.emptyImageHelpText": "要显示的可选背景图像。以 `{BASE64}` 数据 {URL} 的形式提供图像资产或传入子表达式。", + "expressionRevealImage.functions.revealImage.args.imageHelpText": "要显示的图像。以 {BASE64} 数据 {URL} 的形式提供图像资产或传入子表达式。", + "expressionRevealImage.functions.revealImage.args.originHelpText": "要开始图像填充的位置。例如 {list} 或 {end}。", + "expressionRevealImage.functions.revealImage.invalidPercentErrorMessage": "无效值:“{percent}”。百分比必须介于 0 和 1 之间", + "expressionRevealImage.functions.revealImageHelpText": "配置图像显示元素。", + "expressionRevealImage.renderer.revealImage.displayName": "图像显示", + "expressionRevealImage.renderer.revealImage.helpDescription": "显示一定百分比的图像,以制作定制的仪表样式图表", + "xpack.cases.connectors.cases.externalIncidentAdded": " (由 {user} 于 {date}添加) ", + "xpack.cases.connectors.cases.externalIncidentCreated": " (由 {user} 于 {date}创建) ", + "xpack.cases.connectors.cases.externalIncidentDefault": " (由 {user} 于 {date}创建) ", + "xpack.cases.connectors.cases.externalIncidentUpdated": " (由 {user} 于 {date}更新) ", "xpack.cases.connectors.cases.title": "案例", "xpack.cases.connectors.jira.issueTypesSelectFieldLabel": "问题类型", "xpack.cases.connectors.jira.parentIssueSearchLabel": "父问题",