From 6bba5ac1514a2f89440d511dbd3bfc095b61404a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 29 Dec 2025 07:24:14 +0000 Subject: [PATCH] chore: resolve merge conflicts with main branch Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com> --- .claude/skills/component-refactoring/SKILL.md | 2 +- .../translate-i18n-base-on-english.yml | 6 +- .../jinja2/jinja2_transformer.py | 34 +- .../code_executor/template_transformer.py | 9 + .../nodes/code_executor/test_code_jinja2.py | 65 +- .../nodes/code_executor/test_code_jinja2.py | 34 +- web/__tests__/i18n-upload-features.test.ts | 51 +- .../(appDetailLayout)/[appId]/layout-main.tsx | 12 +- .../[appId]/overview/card-view.tsx | 15 +- .../[appId]/overview/chart-view.tsx | 11 +- .../overview/long-time-range-picker.tsx | 11 +- .../overview/time-range-picker/index.tsx | 5 +- .../time-range-picker/range-selector.tsx | 9 +- .../[appId]/overview/tracing/config-popup.tsx | 16 +- .../[appId]/overview/tracing/panel.tsx | 8 +- .../tracing/provider-config-modal.tsx | 148 +- .../overview/tracing/provider-panel.tsx | 10 +- .../app/(appDetailLayout)/layout.tsx | 2 +- .../[datasetId]/layout-main.tsx | 10 +- .../[datasetId]/settings/page.tsx | 3 +- web/app/(commonLayout)/explore/layout.tsx | 2 +- web/app/(commonLayout)/layout.tsx | 6 +- web/app/(commonLayout)/tools/page.tsx | 2 +- .../components/authenticated-layout.tsx | 2 +- web/app/(shareLayout)/components/splash.tsx | 4 +- .../webapp-reset-password/check-code/page.tsx | 18 +- .../webapp-reset-password/page.tsx | 18 +- .../set-password/page.tsx | 26 +- .../webapp-signin/check-code/page.tsx | 20 +- .../components/mail-and-code-auth.tsx | 10 +- .../components/mail-and-password-auth.tsx | 20 +- .../webapp-signin/components/sso-auth.tsx | 2 +- .../(shareLayout)/webapp-signin/layout.tsx | 2 +- .../webapp-signin/normalForm.tsx | 36 +- web/app/(shareLayout)/webapp-signin/page.tsx | 6 +- .../account-page/AvatarWithEdit.tsx | 16 +- .../account-page/email-change-modal.tsx | 56 +- .../(commonLayout)/account-page/index.tsx | 54 +- web/app/account/(commonLayout)/avatar.tsx | 2 +- .../delete-account/components/check-email.tsx | 14 +- .../delete-account/components/feed-back.tsx | 12 +- .../components/verify-email.tsx | 14 +- .../(commonLayout)/delete-account/index.tsx | 2 +- web/app/account/(commonLayout)/header.tsx | 4 +- web/app/account/(commonLayout)/layout.tsx | 6 +- web/app/account/(commonLayout)/page.tsx | 2 +- web/app/account/oauth/authorize/page.tsx | 32 +- web/app/activate/activateForm.tsx | 4 +- ...wr-initializer.tsx => app-initializer.tsx} | 25 +- web/app/components/app-sidebar/app-info.tsx | 48 +- .../components/app-sidebar/app-operations.tsx | 4 +- .../app-sidebar/app-sidebar-dropdown.tsx | 2 +- web/app/components/app-sidebar/basic.tsx | 2 +- .../app-sidebar/dataset-info/dropdown.tsx | 8 +- .../app-sidebar/dataset-info/index.tsx | 4 +- .../app-sidebar/dataset-info/menu.tsx | 6 +- .../app-sidebar/dataset-sidebar-dropdown.tsx | 4 +- .../components/app-sidebar/toggle-button.tsx | 2 +- .../add-annotation-modal/edit-item/index.tsx | 4 +- .../annotation/add-annotation-modal/index.tsx | 12 +- .../app/annotation/batch-action.tsx | 12 +- .../csv-downloader.tsx | 16 +- .../csv-uploader.tsx | 8 +- .../batch-add-annotation-modal/index.tsx | 14 +- .../index.spec.tsx | 13 +- .../index.tsx | 2 +- .../edit-annotation-modal/edit-item/index.tsx | 14 +- .../edit-annotation-modal/index.tsx | 14 +- .../app/annotation/empty-element.tsx | 4 +- web/app/components/app/annotation/filter.tsx | 2 +- .../app/annotation/header-opts/index.tsx | 8 +- web/app/components/app/annotation/index.tsx | 18 +- web/app/components/app/annotation/list.tsx | 12 +- .../index.spec.tsx | 13 +- .../remove-annotation-confirm-modal/index.tsx | 2 +- .../hit-history-no-data.tsx | 2 +- .../view-annotation-modal/index.tsx | 30 +- .../add-member-or-group-pop.tsx | 12 +- .../app/app-access-control/index.tsx | 18 +- .../specific-groups-or-members.tsx | 12 +- .../app/app-publisher/features-wrapper.tsx | 4 +- .../components/app/app-publisher/index.tsx | 53 +- .../publish-with-multiple-model.tsx | 4 +- .../app/app-publisher/version-info-modal.tsx | 18 +- .../base/operation-btn/index.tsx | 2 +- .../warning-mask/cannot-query-dataset.tsx | 6 +- .../base/warning-mask/formatting-changed.tsx | 8 +- .../base/warning-mask/has-not-set-api.tsx | 6 +- .../config-prompt/advanced-prompt-input.tsx | 10 +- .../config-prompt/confirm-add-var/index.tsx | 6 +- .../conversation-history/edit-modal.tsx | 12 +- .../conversation-history/history-panel.tsx | 8 +- .../app/configuration/config-prompt/index.tsx | 2 +- .../config-prompt/simple-prompt-input.tsx | 6 +- .../config-var/config-modal/field.tsx | 2 +- .../config-var/config-modal/index.tsx | 80 +- .../config-var/config-select/index.tsx | 2 +- .../app/configuration/config-var/index.tsx | 28 +- .../configuration/config-var/modal-foot.tsx | 4 +- .../config-var/select-type-item/index.tsx | 8 +- .../config-var/select-var-type.tsx | 12 +- .../app/configuration/config-vision/index.tsx | 4 +- .../config-vision/param-config-content.tsx | 20 +- .../config-vision/param-config.tsx | 2 +- .../config/agent-setting-button.spec.tsx | 5 +- .../config/agent-setting-button.tsx | 2 +- .../config/agent/agent-setting/index.tsx | 18 +- .../config/agent/agent-tools/index.tsx | 16 +- .../agent-tools/setting-built-in-tool.tsx | 20 +- .../config/agent/prompt-editor.tsx | 6 +- .../config/assistant-type-picker/index.tsx | 16 +- .../config/automatic/automatic-btn.tsx | 2 +- .../config/automatic/get-automatic-res.tsx | 36 +- .../config/automatic/idea-output.tsx | 8 +- .../config/automatic/instruction-editor.tsx | 20 +- .../automatic/prompt-res-in-workflow.tsx | 2 +- .../config/automatic/prompt-toast.tsx | 2 +- .../config/automatic/res-placeholder.tsx | 2 +- .../configuration/config/automatic/result.tsx | 6 +- .../config/automatic/version-selector.tsx | 8 +- .../code-generator/get-code-generator-res.tsx | 23 +- .../config/config-audio.spec.tsx | 5 +- .../app/configuration/config/config-audio.tsx | 4 +- .../configuration/config/config-document.tsx | 4 +- .../configuration/ctrl-btn-group/index.tsx | 4 +- .../dataset-config/card-item/index.tsx | 2 +- .../dataset-config/context-var/index.tsx | 4 +- .../dataset-config/context-var/var-picker.tsx | 6 +- .../configuration/dataset-config/index.tsx | 4 +- .../params-config/config-content.tsx | 34 +- .../dataset-config/params-config/index.tsx | 8 +- .../params-config/weighted-score.tsx | 8 +- .../dataset-config/select-dataset/index.tsx | 16 +- .../dataset-config/settings-modal/index.tsx | 34 +- .../settings-modal/retrieval-section.spec.tsx | 5 +- .../settings-modal/retrieval-section.tsx | 12 +- .../configuration/debug/chat-user-input.tsx | 2 +- .../debug-with-multiple-model/debug-item.tsx | 6 +- .../model-parameter-trigger.tsx | 2 +- .../app/configuration/debug/index.tsx | 22 +- .../components/app/configuration/index.tsx | 24 +- .../prompt-value-panel/index.tsx | 16 +- .../tools/external-data-tool-modal.tsx | 36 +- .../app/configuration/tools/index.tsx | 14 +- .../app/create-app-dialog/app-card/index.tsx | 2 +- .../app/create-app-dialog/app-list/index.tsx | 14 +- .../create-app-dialog/app-list/sidebar.tsx | 6 +- .../components/app/create-app-modal/index.tsx | 72 +- .../dsl-confirm-modal.tsx | 14 +- .../app/create-from-dsl-modal/index.tsx | 40 +- .../app/create-from-dsl-modal/uploader.tsx | 6 +- .../components/app/duplicate-modal/index.tsx | 10 +- .../components/app/log-annotation/index.tsx | 6 +- web/app/components/app/log/empty-element.tsx | 2 +- web/app/components/app/log/filter.tsx | 19 +- web/app/components/app/log/index.tsx | 2 +- web/app/components/app/log/list.tsx | 60 +- web/app/components/app/log/model-info.tsx | 2 +- web/app/components/app/log/var-panel.tsx | 4 +- .../app/overview/apikey-info-panel/index.tsx | 12 +- web/app/components/app/overview/app-card.tsx | 60 +- web/app/components/app/overview/app-chart.tsx | 30 +- .../app/overview/customize/index.tsx | 32 +- .../app/overview/embedded/index.tsx | 14 +- .../app/overview/settings/index.spec.tsx | 7 +- .../app/overview/settings/index.tsx | 70 +- .../components/app/overview/trigger-card.tsx | 15 +- .../components/app/switch-app-modal/index.tsx | 26 +- .../app/text-generate/item/index.tsx | 16 +- .../app/text-generate/saved-items/index.tsx | 4 +- .../saved-items/no-data/index.tsx | 6 +- .../components/app/type-selector/index.tsx | 14 +- .../components/app/workflow-log/detail.tsx | 6 +- .../components/app/workflow-log/filter.tsx | 9 +- web/app/components/app/workflow-log/index.tsx | 4 +- web/app/components/app/workflow-log/list.tsx | 14 +- .../app/workflow-log/trigger-by-display.tsx | 14 +- web/app/components/apps/app-card.tsx | 48 +- web/app/components/apps/empty.tsx | 2 +- web/app/components/apps/footer.tsx | 4 +- web/app/components/apps/index.tsx | 2 +- web/app/components/apps/list.tsx | 18 +- web/app/components/apps/new-app-card.tsx | 8 +- .../base/agent-log-modal/detail.tsx | 4 +- .../components/base/agent-log-modal/index.tsx | 2 +- .../base/agent-log-modal/iteration.tsx | 4 +- .../base/agent-log-modal/result.tsx | 22 +- .../base/app-icon-picker/ImageInput.tsx | 6 +- .../components/base/app-icon-picker/index.tsx | 8 +- web/app/components/base/app-unavailable.tsx | 2 +- web/app/components/base/audio-btn/index.tsx | 10 +- .../base/audio-gallery/AudioPlayer.tsx | 2 +- web/app/components/base/block-input/index.tsx | 6 +- .../chat-with-history/header-in-mobile.tsx | 6 +- .../chat/chat-with-history/header/index.tsx | 8 +- .../header/mobile-operation-dropdown.tsx | 4 +- .../chat-with-history/header/operation.tsx | 6 +- .../chat/chat-with-history/hooks.spec.tsx | 270 ++++ .../base/chat/chat-with-history/hooks.tsx | 96 +- .../chat-with-history/inputs-form/content.tsx | 4 +- .../chat-with-history/inputs-form/index.tsx | 8 +- .../inputs-form/view-form-dropdown.tsx | 2 +- .../chat/chat-with-history/sidebar/index.tsx | 12 +- .../chat-with-history/sidebar/operation.tsx | 6 +- .../sidebar/rename-modal.tsx | 10 +- .../base/chat/chat/answer/index.tsx | 2 +- .../components/base/chat/chat/answer/more.tsx | 8 +- .../base/chat/chat/answer/operation.tsx | 22 +- .../base/chat/chat/answer/tool-detail.tsx | 8 +- .../chat/chat/answer/workflow-process.tsx | 2 +- .../base/chat/chat/chat-input-area/index.tsx | 10 +- .../base/chat/chat/check-input-forms-hooks.ts | 4 +- .../base/chat/chat/citation/index.tsx | 2 +- .../base/chat/chat/citation/popup.tsx | 8 +- .../chat/chat/citation/progress-tooltip.tsx | 2 +- web/app/components/base/chat/chat/hooks.ts | 2 +- web/app/components/base/chat/chat/index.tsx | 2 +- .../components/base/chat/chat/question.tsx | 6 +- .../components/base/chat/chat/try-to-ask.tsx | 2 +- .../chat/embedded-chatbot/header/index.tsx | 10 +- .../base/chat/embedded-chatbot/hooks.spec.tsx | 257 ++++ .../base/chat/embedded-chatbot/hooks.tsx | 59 +- .../base/chat/embedded-chatbot/index.tsx | 2 +- .../embedded-chatbot/inputs-form/content.tsx | 4 +- .../embedded-chatbot/inputs-form/index.tsx | 8 +- .../inputs-form/view-form-dropdown.tsx | 2 +- .../components/base/checkbox-list/index.tsx | 14 +- web/app/components/base/confirm/index.tsx | 4 +- .../components/base/copy-feedback/index.tsx | 10 +- web/app/components/base/copy-icon/index.tsx | 6 +- .../date-picker/footer.tsx | 6 +- .../date-picker/index.tsx | 4 +- .../base/date-and-time-picker/hooks.ts | 38 +- .../time-picker/footer.tsx | 4 +- .../time-picker/header.tsx | 2 +- .../time-picker/index.spec.tsx | 13 +- .../time-picker/index.tsx | 4 +- .../year-and-month-picker/footer.tsx | 4 +- web/app/components/base/drawer/index.tsx | 4 +- .../components/base/emoji-picker/index.tsx | 4 +- .../base/encrypted-bottom/index.tsx | 16 +- .../annotation-ctrl-button.tsx | 6 +- .../annotation-reply/config-param-modal.tsx | 16 +- .../annotation-reply/index.tsx | 12 +- .../annotation-reply/score-slider/index.tsx | 4 +- .../features/new-feature-panel/citation.tsx | 4 +- .../conversation-opener/index.tsx | 8 +- .../conversation-opener/modal.tsx | 14 +- .../new-feature-panel/feature-bar.tsx | 24 +- .../new-feature-panel/file-upload/index.tsx | 10 +- .../file-upload/setting-content.tsx | 6 +- .../features/new-feature-panel/follow-up.tsx | 4 +- .../new-feature-panel/image-upload/index.tsx | 10 +- .../base/features/new-feature-panel/index.tsx | 8 +- .../new-feature-panel/moderation/index.tsx | 22 +- .../moderation/moderation-content.tsx | 6 +- .../moderation/moderation-setting-modal.tsx | 54 +- .../new-feature-panel/more-like-this.tsx | 6 +- .../new-feature-panel/speech-to-text.tsx | 4 +- .../text-to-speech/index.tsx | 16 +- .../text-to-speech/param-config-content.tsx | 24 +- .../file-from-link-or-local/index.tsx | 8 +- .../base/file-uploader/file-list-in-log.tsx | 4 +- .../file-uploader-in-attachment/index.tsx | 4 +- .../components/base/file-uploader/hooks.ts | 26 +- .../base/file-uploader/pdf-preview.tsx | 6 +- .../components/base/file-uploader/utils.ts | 5 +- .../base/form/components/base/base-field.tsx | 8 +- .../field/input-type-select/hooks.tsx | 14 +- .../field/input-type-select/trigger.tsx | 2 +- .../form/components/field/upload-method.tsx | 4 +- .../base/form/components/form/actions.tsx | 2 +- .../components/base/form/components/label.tsx | 2 +- .../base/form/hooks/use-get-validators.ts | 6 +- .../image-uploader/chat-image-uploader.tsx | 2 +- .../components/base/image-uploader/hooks.ts | 8 +- .../base/image-uploader/image-link-input.tsx | 4 +- .../base/image-uploader/image-list.tsx | 2 +- .../base/image-uploader/image-preview.tsx | 16 +- .../text-generation-image-uploader.tsx | 4 +- .../components/base/image-uploader/utils.ts | 5 +- .../base/inline-delete-confirm/index.spec.tsx | 18 +- .../base/inline-delete-confirm/index.tsx | 8 +- .../base/input-with-copy/index.spec.tsx | 15 +- .../components/base/input-with-copy/index.tsx | 6 +- web/app/components/base/input/index.spec.tsx | 11 +- web/app/components/base/input/index.tsx | 4 +- web/app/components/base/loading/index.tsx | 2 +- .../base/markdown-blocks/think-block.tsx | 2 +- web/app/components/base/mermaid/index.tsx | 8 +- .../base/message-log-modal/index.tsx | 2 +- .../components/base/modal-like-wrap/index.tsx | 4 +- web/app/components/base/modal/modal.tsx | 6 +- .../base/new-audio-button/index.tsx | 10 +- .../base/notion-connector/index.tsx | 6 +- .../page-selector/index.tsx | 4 +- .../search-input/index.tsx | 2 +- web/app/components/base/pagination/index.tsx | 2 +- .../base/param-item/score-threshold-item.tsx | 4 +- .../components/base/param-item/top-k-item.tsx | 4 +- .../plugins/component-picker-block/hooks.tsx | 20 +- .../plugins/context-block/component.tsx | 8 +- .../plugins/history-block/component.tsx | 10 +- .../prompt-editor/plugins/placeholder.tsx | 2 +- .../plugins/query-block/component.tsx | 2 +- .../workflow-variable-block/component.tsx | 2 +- web/app/components/base/qrcode/index.tsx | 8 +- .../components/base/search-input/index.tsx | 2 +- web/app/components/base/select/custom.tsx | 2 +- web/app/components/base/select/index.tsx | 4 +- web/app/components/base/select/pure.tsx | 4 +- web/app/components/base/sort/index.tsx | 2 +- web/app/components/base/tag-input/index.tsx | 8 +- .../components/base/tag-management/filter.tsx | 6 +- .../components/base/tag-management/index.tsx | 8 +- .../components/base/tag-management/panel.tsx | 20 +- .../base/tag-management/tag-item-editor.tsx | 14 +- .../base/tag-management/tag-remove-modal.tsx | 8 +- .../base/tag-management/trigger.tsx | 2 +- .../components/base/text-generation/hooks.ts | 2 +- web/app/components/base/theme-selector.tsx | 6 +- web/app/components/base/voice-input/index.tsx | 4 +- .../billing/annotation-full/index.tsx | 4 +- .../billing/annotation-full/modal.tsx | 4 +- .../billing/annotation-full/usage.tsx | 2 +- .../billing/apps-full-in-dialog/index.tsx | 12 +- .../components/billing/billing-page/index.tsx | 6 +- .../billing/plan-upgrade-modal/index.tsx | 4 +- web/app/components/billing/plan/index.tsx | 24 +- .../billing/pricing/footer.spec.tsx | 7 +- web/app/components/billing/pricing/footer.tsx | 6 +- .../billing/pricing/header.spec.tsx | 7 +- web/app/components/billing/pricing/header.tsx | 4 +- .../components/billing/pricing/index.spec.tsx | 7 +- .../pricing/plan-switcher/index.spec.tsx | 11 +- .../billing/pricing/plan-switcher/index.tsx | 4 +- .../plan-range-switcher.spec.tsx | 7 +- .../plan-switcher/plan-range-switcher.tsx | 2 +- .../pricing/plans/cloud-plan-item/index.tsx | 24 +- .../plans/cloud-plan-item/list/index.tsx | 60 +- .../plans/self-hosted-plan-item/button.tsx | 4 +- .../self-hosted-plan-item/index.spec.tsx | 7 +- .../plans/self-hosted-plan-item/index.tsx | 14 +- .../self-hosted-plan-item/list/index.spec.tsx | 5 +- .../self-hosted-plan-item/list/index.tsx | 7 +- .../billing/priority-label/index.tsx | 13 +- .../trigger-events-limit-modal/index.tsx | 6 +- .../billing/upgrade-btn/index.spec.tsx | 12 +- .../components/billing/upgrade-btn/index.tsx | 9 +- .../billing/usage-info/apps-info.tsx | 2 +- .../components/billing/usage-info/index.tsx | 4 +- .../billing/usage-info/vector-space-info.tsx | 4 +- .../billing/vector-space-full/index.tsx | 4 +- .../components/custom/custom-page/index.tsx | 12 +- .../custom/custom-web-app-brand/index.tsx | 26 +- .../datasets/common/chunking-mode-label.tsx | 2 +- .../datasets/common/document-picker/index.tsx | 8 +- .../preview-document-picker.spec.tsx | 5 +- .../preview-document-picker.tsx | 2 +- .../auto-disabled-document.tsx | 6 +- .../index-failed.tsx | 4 +- .../index.tsx | 4 +- .../common/image-uploader/hooks/use-upload.ts | 12 +- .../image-uploader-in-chunk/image-input.tsx | 7 +- .../image-input.tsx | 6 +- .../index.tsx | 2 +- .../common/retrieval-method-config/index.tsx | 12 +- .../common/retrieval-method-info/index.tsx | 10 +- .../common/retrieval-param-config/index.tsx | 20 +- .../dsl-confirm-modal.tsx | 14 +- .../create-from-dsl-modal/header.tsx | 2 +- .../create-from-dsl-modal/index.tsx | 34 +- .../create-from-dsl-modal/tab/index.tsx | 4 +- .../create-from-dsl-modal/uploader.tsx | 6 +- .../datasets/create-from-pipeline/footer.tsx | 2 +- .../datasets/create-from-pipeline/header.tsx | 2 +- .../create-from-pipeline/list/create-card.tsx | 8 +- .../list/customized-list.tsx | 2 +- .../list/template-card/actions.tsx | 4 +- .../list/template-card/content.tsx | 2 +- .../list/template-card/details/hooks.tsx | 6 +- .../list/template-card/details/index.tsx | 9 +- .../list/template-card/edit-pipeline-info.tsx | 14 +- .../list/template-card/index.tsx | 14 +- .../list/template-card/operations.tsx | 6 +- .../create/embedding-process/index.tsx | 42 +- .../empty-dataset-creation-modal/index.tsx | 18 +- .../datasets/create/file-preview/index.tsx | 2 +- .../datasets/create/file-uploader/index.tsx | 17 +- .../components/datasets/create/index.spec.tsx | 5 +- web/app/components/datasets/create/index.tsx | 9 +- .../create/notion-page-preview/index.tsx | 2 +- .../datasets/create/step-one/index.tsx | 26 +- .../datasets/create/step-one/upgrade-card.tsx | 6 +- .../datasets/create/step-three/index.spec.tsx | 3 +- .../datasets/create/step-three/index.tsx | 21 +- .../datasets/create/step-two/index.tsx | 127 +- .../datasets/create/step-two/inputs.tsx | 14 +- .../create/step-two/preview-item/index.tsx | 2 +- .../create/stop-embedding-modal/index.tsx | 8 +- .../datasets/create/top-bar/index.tsx | 14 +- .../website/base/crawled-result-item.tsx | 2 +- .../create/website/base/crawled-result.tsx | 5 +- .../datasets/create/website/base/crawling.tsx | 2 +- .../create/website/base/options-wrap.tsx | 4 +- .../create/website/base/url-input.tsx | 4 +- .../create/website/firecrawl/index.tsx | 22 +- .../create/website/firecrawl/options.tsx | 16 +- .../datasets/create/website/index.tsx | 2 +- .../website/jina-reader/base/url-input.tsx | 4 +- .../create/website/jina-reader/index.tsx | 22 +- .../create/website/jina-reader/options.tsx | 10 +- .../datasets/create/website/no-data.tsx | 16 +- .../datasets/create/website/preview.tsx | 2 +- .../create/website/watercrawl/index.tsx | 22 +- .../create/website/watercrawl/options.tsx | 16 +- .../create-from-pipeline/actions/index.tsx | 6 +- .../data-source/base/header.tsx | 2 +- .../data-source/local-file/index.tsx | 15 +- .../online-documents/page-selector/index.tsx | 2 +- .../online-documents/page-selector/item.tsx | 2 +- .../data-source/online-documents/title.tsx | 2 +- .../online-drive/connect/index.tsx | 6 +- .../file-list/header/breadcrumbs/bucket.tsx | 2 +- .../file-list/header/breadcrumbs/drive.tsx | 2 +- .../file-list/header/breadcrumbs/index.tsx | 5 +- .../online-drive/file-list/header/index.tsx | 2 +- .../file-list/list/empty-folder.tsx | 2 +- .../file-list/list/empty-search-result.tsx | 4 +- .../online-drive/file-list/list/index.tsx | 2 +- .../online-drive/file-list/list/item.tsx | 2 +- .../base/crawled-result-item.tsx | 2 +- .../website-crawl/base/crawled-result.tsx | 5 +- .../website-crawl/base/crawling.tsx | 2 +- .../website-crawl/base/options/index.tsx | 6 +- .../data-source/website-crawl/index.tsx | 6 +- .../documents/create-from-pipeline/hooks.ts | 6 +- .../documents/create-from-pipeline/index.tsx | 11 +- .../preview/chunk-preview.tsx | 9 +- .../preview/file-preview.tsx | 4 +- .../preview/online-document-preview.tsx | 4 +- .../preview/web-preview.tsx | 4 +- .../process-documents/actions.tsx | 4 +- .../process-documents/header.tsx | 6 +- .../processing/embedding-process/index.tsx | 8 +- .../embedding-process/rule-detail.tsx | 18 +- .../processing/index.spec.tsx | 5 +- .../create-from-pipeline/processing/index.tsx | 6 +- .../detail/batch-modal/csv-downloader.tsx | 22 +- .../detail/batch-modal/csv-uploader.tsx | 14 +- .../documents/detail/batch-modal/index.tsx | 6 +- .../detail/completed/child-segment-detail.tsx | 10 +- .../detail/completed/child-segment-list.tsx | 8 +- .../completed/common/action-buttons.tsx | 6 +- .../detail/completed/common/add-another.tsx | 2 +- .../detail/completed/common/batch-action.tsx | 24 +- .../detail/completed/common/chunk-content.tsx | 6 +- .../detail/completed/common/empty.tsx | 4 +- .../detail/completed/common/keywords.tsx | 2 +- .../completed/common/regeneration-modal.tsx | 20 +- .../detail/completed/display-toggle.tsx | 2 +- .../documents/detail/completed/index.tsx | 40 +- .../detail/completed/new-child-segment.tsx | 12 +- .../completed/segment-card/index.spec.tsx | 9 +- .../detail/completed/segment-card/index.tsx | 14 +- .../detail/completed/segment-detail.tsx | 6 +- .../skeleton/parent-chunk-card-skeleton.tsx | 2 +- .../documents/detail/embedding/index.tsx | 48 +- .../datasets/documents/detail/index.tsx | 6 +- .../documents/detail/metadata/index.tsx | 34 +- .../datasets/documents/detail/new-segment.tsx | 16 +- .../documents/detail/segment-add/index.tsx | 18 +- .../detail/settings/document-settings.tsx | 2 +- .../settings/pipeline-settings/index.tsx | 4 +- .../pipeline-settings/left-header.tsx | 4 +- .../process-documents/actions.tsx | 2 +- .../components/datasets/documents/index.tsx | 28 +- .../components/datasets/documents/list.tsx | 26 +- .../datasets/documents/operations.tsx | 28 +- .../datasets/documents/rename-modal.tsx | 10 +- .../datasets/documents/status-item/hooks.ts | 16 +- .../datasets/documents/status-item/index.tsx | 6 +- .../external-api/external-api-modal/Form.tsx | 2 +- .../external-api/external-api-modal/index.tsx | 20 +- .../external-api/external-api-panel/index.tsx | 8 +- .../external-knowledge-api-card/index.tsx | 6 +- .../create/ExternalApiSelect.tsx | 4 +- .../create/ExternalApiSelection.tsx | 8 +- .../create/InfoPanel.tsx | 10 +- .../create/KnowledgeBaseInfo.tsx | 8 +- .../create/RetrievalSettings.tsx | 2 +- .../external-knowledge-base/create/index.tsx | 16 +- .../datasets/extra-info/service-api/card.tsx | 12 +- .../datasets/extra-info/service-api/index.tsx | 2 +- .../datasets/extra-info/statistics.tsx | 4 +- .../components/chunk-detail-modal.tsx | 10 +- .../hit-testing/components/empty-records.tsx | 2 +- .../components/query-input/index.tsx | 8 +- .../components/query-input/textarea.tsx | 4 +- .../hit-testing/components/records.tsx | 8 +- .../components/result-item-external.tsx | 4 +- .../components/result-item-footer.tsx | 4 +- .../components/result-item-meta.tsx | 2 +- .../hit-testing/components/result-item.tsx | 4 +- .../components/datasets/hit-testing/index.tsx | 10 +- .../modify-external-retrieval-modal.tsx | 6 +- .../hit-testing/modify-retrieval-modal.tsx | 14 +- .../datasets/list/dataset-card/index.tsx | 32 +- .../datasets/list/dataset-card/operations.tsx | 6 +- .../datasets/list/dataset-footer/index.tsx | 14 +- web/app/components/datasets/list/datasets.tsx | 2 +- web/app/components/datasets/list/index.tsx | 8 +- .../datasets/list/new-dataset-card/index.tsx | 6 +- .../datasets/metadata/add-metadata-button.tsx | 2 +- .../datasets/metadata/base/date-picker.tsx | 2 +- .../edit-metadata-batch/edited-beacon.tsx | 2 +- .../input-has-set-multiple-value.tsx | 2 +- .../metadata/edit-metadata-batch/modal.tsx | 18 +- .../hooks/use-batch-edit-document-metadata.ts | 2 +- .../metadata/hooks/use-check-metadata-name.ts | 8 +- .../hooks/use-edit-dataset-metadata.ts | 2 +- .../metadata/hooks/use-metadata-document.ts | 4 +- .../metadata-dataset/create-content.tsx | 12 +- .../dataset-metadata-drawer.tsx | 34 +- .../metadata-dataset/select-metadata.tsx | 8 +- .../metadata/metadata-document/index.tsx | 16 +- .../metadata/metadata-document/info-group.tsx | 2 +- .../metadata/metadata-document/no-data.tsx | 6 +- .../datasets/no-linked-apps-panel.tsx | 4 +- .../datasets/rename-modal/index.tsx | 20 +- .../settings/chunk-structure/hooks.tsx | 6 +- .../datasets/settings/form/index.tsx | 42 +- .../datasets/settings/index-method/index.tsx | 10 +- .../settings/index-method/keyword-number.tsx | 2 +- .../datasets/settings/option-card.tsx | 2 +- .../settings/permission-selector/index.tsx | 12 +- .../permission-selector/member-item.tsx | 2 +- web/app/components/develop/ApiServer.tsx | 4 +- web/app/components/develop/doc.tsx | 4 +- .../develop/secret-key/input-copy.tsx | 2 +- .../develop/secret-key/secret-key-button.tsx | 2 +- .../secret-key/secret-key-generate.tsx | 6 +- .../develop/secret-key/secret-key-modal.tsx | 20 +- web/app/components/explore/app-card/index.tsx | 12 +- web/app/components/explore/app-list/index.tsx | 6 +- web/app/components/explore/category.tsx | 8 +- .../explore/create-app-modal/index.spec.tsx | 12 +- .../explore/create-app-modal/index.tsx | 28 +- web/app/components/explore/index.tsx | 2 +- .../explore/item-operation/index.tsx | 6 +- web/app/components/explore/sidebar/index.tsx | 12 +- .../actions/commands/account.tsx | 4 +- .../actions/commands/community.tsx | 4 +- .../goto-anything/actions/commands/docs.tsx | 4 +- .../goto-anything/actions/commands/forum.tsx | 4 +- .../actions/commands/language.tsx | 2 +- .../goto-anything/actions/commands/slash.tsx | 4 +- .../goto-anything/actions/commands/theme.tsx | 23 +- .../goto-anything/actions/commands/zen.tsx | 4 +- .../goto-anything/command-selector.tsx | 40 +- web/app/components/goto-anything/index.tsx | 74 +- .../components/header/account-about/index.tsx | 8 +- .../header/account-dropdown/compliance.tsx | 22 +- .../header/account-dropdown/index.tsx | 16 +- .../header/account-dropdown/support.tsx | 10 +- .../workplace-selector/index.tsx | 6 +- .../Integrations-page/index.tsx | 12 +- .../api-based-extension-page/empty.tsx | 4 +- .../api-based-extension-page/index.tsx | 2 +- .../api-based-extension-page/item.tsx | 8 +- .../api-based-extension-page/modal.tsx | 26 +- .../api-based-extension-page/selector.tsx | 8 +- .../data-source-page-new/card.tsx | 6 +- .../data-source-page-new/configure.tsx | 6 +- .../install-from-marketplace.tsx | 6 +- .../data-source-page-new/item.tsx | 6 +- .../data-source-page-new/operator.tsx | 10 +- .../data-source-notion/index.tsx | 2 +- .../data-source-notion/operate/index.tsx | 10 +- .../config-firecrawl-modal.tsx | 23 +- .../config-jina-reader-modal.tsx | 21 +- .../config-watercrawl-modal.tsx | 23 +- .../data-source-website/index.tsx | 2 +- .../data-source-page/panel/config-item.tsx | 4 +- .../data-source-page/panel/index.tsx | 14 +- .../header/account-setting/index.tsx | 22 +- .../account-setting/key-validator/Operate.tsx | 10 +- .../key-validator/ValidateStatus.tsx | 4 +- .../account-setting/language-page/index.tsx | 8 +- .../edit-workspace-modal/index.tsx | 14 +- .../account-setting/members-page/index.tsx | 30 +- .../members-page/invite-modal/index.tsx | 19 +- .../invite-modal/role-selector.tsx | 33 +- .../members-page/invited-modal/index.tsx | 12 +- .../invited-modal/invitation-link.tsx | 4 +- .../members-page/operation/index.tsx | 38 +- .../operation/transfer-ownership.tsx | 4 +- .../transfer-ownership-modal/index.tsx | 40 +- .../member-selector.tsx | 2 +- .../model-provider-page/index.tsx | 10 +- .../install-from-marketplace.tsx | 6 +- .../add-credential-in-load-balancing.tsx | 6 +- .../model-auth/add-custom-model.tsx | 6 +- .../model-auth/authorized/credential-item.tsx | 6 +- .../model-auth/authorized/index.tsx | 6 +- .../model-auth/config-model.tsx | 8 +- .../model-auth/config-provider.tsx | 6 +- .../model-auth/credential-selector.tsx | 6 +- .../model-auth/hooks/use-auth.ts | 6 +- .../hooks/use-model-form-schemas.ts | 2 +- .../manage-custom-model-credentials.tsx | 6 +- .../switch-credential-in-load-balancing.tsx | 8 +- .../model-provider-page/model-modal/index.tsx | 26 +- .../agent-model-trigger.tsx | 2 +- .../configuration-button.tsx | 2 +- .../model-parameter-modal/index.tsx | 8 +- .../presets-parameter.tsx | 11 +- .../status-indicators.tsx | 18 +- .../model-parameter-modal/trigger.tsx | 2 +- .../deprecated-model-trigger.tsx | 2 +- .../model-selector/empty-trigger.tsx | 2 +- .../model-selector/feature-icon.tsx | 8 +- .../model-selector/popup-item.tsx | 4 +- .../model-selector/popup.tsx | 4 +- .../provider-added-card/add-model-button.tsx | 2 +- .../provider-added-card/cooldown-timer.tsx | 2 +- .../provider-added-card/credential-panel.tsx | 6 +- .../provider-added-card/index.tsx | 10 +- .../provider-added-card/model-list-item.tsx | 2 +- .../provider-added-card/model-list.tsx | 4 +- .../model-load-balancing-configs.tsx | 18 +- .../model-load-balancing-modal.tsx | 22 +- .../provider-added-card/priority-selector.tsx | 6 +- .../provider-added-card/priority-use-tip.tsx | 2 +- .../provider-added-card/quota-panel.tsx | 10 +- .../system-model-selector/index.tsx | 28 +- .../plugin-page/SerpapiPlugin.tsx | 8 +- .../account-setting/plugin-page/index.tsx | 4 +- web/app/components/header/app-back/index.tsx | 2 +- web/app/components/header/app-nav/index.tsx | 4 +- .../components/header/app-selector/index.tsx | 2 +- .../components/header/dataset-nav/index.tsx | 4 +- web/app/components/header/env-nav/index.tsx | 4 +- .../components/header/explore-nav/index.tsx | 2 +- .../components/header/license-env/index.tsx | 4 +- .../header/nav/nav-selector/index.tsx | 6 +- .../components/header/plan-badge/index.tsx | 2 +- .../components/header/plugins-nav/index.tsx | 2 +- web/app/components/header/tools-nav/index.tsx | 2 +- .../plugins/base/deprecation-notice.tsx | 31 +- .../plugins/base/key-value-item.tsx | 2 +- web/app/components/plugins/card/index.tsx | 6 +- web/app/components/plugins/constants.ts | 8 +- web/app/components/plugins/hooks.ts | 17 +- .../plugins/install-plugin/base/installed.tsx | 4 +- .../install-plugin/base/loading-error.tsx | 4 +- .../install-plugin/install-bundle/index.tsx | 8 +- .../install-bundle/steps/install.tsx | 10 +- .../install-bundle/steps/installed.tsx | 2 +- .../install-from-github/index.tsx | 18 +- .../install-from-github/steps/loaded.tsx | 8 +- .../steps/selectPackage.tsx | 16 +- .../install-from-github/steps/setURL.tsx | 6 +- .../install-from-local-package/index.tsx | 12 +- .../steps/install.tsx | 10 +- .../steps/uploading.tsx | 7 +- .../install-from-marketplace/index.tsx | 10 +- .../steps/install.tsx | 10 +- .../plugins/marketplace/context.tsx | 3 +- .../plugins/marketplace/description/index.tsx | 1 + .../plugins/marketplace/empty/index.tsx | 2 +- .../plugins/marketplace/list/card-wrapper.tsx | 4 +- .../marketplace/list/list-with-collection.tsx | 2 +- .../plugins/marketplace/list/list-wrapper.tsx | 2 +- .../marketplace/plugin-type-switch.tsx | 16 +- .../search-box/search-box-wrapper.tsx | 2 +- .../marketplace/search-box/tags-filter.tsx | 2 +- .../search-box/trigger/marketplace.tsx | 2 +- .../marketplace/sort-dropdown/index.tsx | 10 +- .../authorize/add-oauth-button.tsx | 12 +- .../plugin-auth/authorize/api-key-modal.tsx | 8 +- .../plugins/plugin-auth/authorize/index.tsx | 12 +- .../authorize/oauth-client-settings.tsx | 14 +- .../authorized-in-data-source-node.tsx | 4 +- .../plugin-auth/authorized-in-node.tsx | 8 +- .../plugins/plugin-auth/authorized/index.tsx | 14 +- .../plugins/plugin-auth/authorized/item.tsx | 18 +- .../hooks/use-plugin-auth-action.ts | 6 +- .../plugin-auth/plugin-auth-in-agent.tsx | 8 +- .../plugin-auth-in-datasource-node.tsx | 2 +- .../plugin-detail-panel/action-list.tsx | 2 +- .../agent-strategy-list.tsx | 2 +- .../app-selector/app-inputs-form.tsx | 2 +- .../app-selector/app-inputs-panel.tsx | 4 +- .../app-selector/app-picker.tsx | 2 +- .../app-selector/app-trigger.tsx | 2 +- .../app-selector/index.tsx | 2 +- .../datasource-action-list.tsx | 2 +- .../plugin-detail-panel/detail-header.tsx | 22 +- .../plugin-detail-panel/endpoint-card.tsx | 22 +- .../plugin-detail-panel/endpoint-list.tsx | 10 +- .../plugin-detail-panel/endpoint-modal.tsx | 12 +- .../plugin-detail-panel/model-list.tsx | 2 +- .../model-selector/index.tsx | 6 +- .../model-selector/llm-params-panel.tsx | 2 +- .../model-selector/tts-params-panel.tsx | 4 +- .../multiple-tool-selector/index.tsx | 4 +- .../operation-dropdown.tsx | 8 +- .../plugin-detail-panel/strategy-detail.tsx | 10 +- .../subscription-list/create/common-modal.tsx | 46 +- .../subscription-list/create/index.tsx | 30 +- .../subscription-list/create/oauth-client.tsx | 34 +- .../subscription-list/delete-confirm.tsx | 20 +- .../edit/apikey-edit-modal.tsx | 30 +- .../edit/manual-edit-modal.tsx | 18 +- .../edit/oauth-edit-modal.tsx | 18 +- .../subscription-list/list-view.tsx | 4 +- .../subscription-list/log-viewer.tsx | 4 +- .../subscription-list/selector-entry.tsx | 8 +- .../subscription-list/selector-view.tsx | 4 +- .../subscription-list/subscription-card.tsx | 2 +- .../tool-selector/index.tsx | 30 +- .../tool-selector/reasoning-config-form.tsx | 6 +- .../tool-selector/schema-modal.tsx | 2 +- .../tool-selector/tool-credentials-form.tsx | 8 +- .../tool-selector/tool-item.tsx | 8 +- .../tool-selector/tool-trigger.tsx | 2 +- .../trigger/event-detail-drawer.tsx | 16 +- .../trigger/event-list.tsx | 2 +- .../components/plugins/plugin-item/action.tsx | 14 +- .../components/plugins/plugin-item/index.tsx | 14 +- .../plugins/plugin-page/debug-info.tsx | 6 +- .../plugins/plugin-page/empty/index.tsx | 10 +- .../filter-management/category-filter.tsx | 4 +- .../filter-management/search-box.tsx | 2 +- .../filter-management/tag-filter.tsx | 4 +- .../components/plugins/plugin-page/index.tsx | 10 +- .../plugin-page/install-plugin-dropdown.tsx | 10 +- .../plugins/plugin-page/plugin-info.tsx | 10 +- .../plugin-page/plugin-tasks/index.tsx | 28 +- .../plugins/plugin-page/plugins-panel.tsx | 4 +- .../plugin-page/use-reference-setting.ts | 2 +- web/app/components/plugins/provider-card.tsx | 4 +- .../plugins/readme-panel/entrance.tsx | 2 +- .../components/plugins/readme-panel/index.tsx | 6 +- .../auto-update-setting/index.tsx | 18 +- .../no-data-placeholder.tsx | 2 +- .../no-plugin-selected.tsx | 2 +- .../auto-update-setting/plugins-picker.tsx | 8 +- .../auto-update-setting/strategy-picker.tsx | 14 +- .../auto-update-setting/tool-picker.tsx | 18 +- .../plugins/reference-setting-modal/modal.tsx | 14 +- .../update-plugin/downgrade-warning.tsx | 12 +- .../update-plugin/from-market-place.tsx | 14 +- .../update-plugin/plugin-version-picker.tsx | 4 +- web/app/components/plugins/utils.ts | 7 +- .../components/chunk-card-list/chunk-card.tsx | 2 +- .../rag-pipeline/components/conversion.tsx | 20 +- .../panel/input-field/editor/form/hooks.ts | 101 +- .../panel/input-field/editor/form/index.tsx | 2 +- .../panel/input-field/editor/form/schema.ts | 14 +- .../editor/form/show-all-settings.tsx | 2 +- .../panel/input-field/editor/index.tsx | 2 +- .../input-field/field-list/field-item.tsx | 2 +- .../panel/input-field/field-list/hooks.ts | 2 +- .../components/panel/input-field/index.tsx | 10 +- .../label-right-content/global-inputs.tsx | 4 +- .../panel/input-field/preview/data-source.tsx | 2 +- .../panel/input-field/preview/index.tsx | 2 +- .../input-field/preview/process-documents.tsx | 2 +- .../components/panel/test-run/header.tsx | 2 +- .../test-run/preparation/actions/index.tsx | 2 +- .../document-processing/actions.tsx | 4 +- .../test-run/preparation/footer-tips.tsx | 2 +- .../panel/test-run/preparation/hooks.ts | 4 +- .../test-run/result/result-preview/index.tsx | 10 +- .../panel/test-run/result/tabs/index.tsx | 6 +- .../publish-as-knowledge-pipeline-modal.tsx | 14 +- .../rag-pipeline/components/publish-toast.tsx | 4 +- .../input-field-button.tsx | 2 +- .../rag-pipeline-header/publisher/index.tsx | 2 +- .../rag-pipeline-header/publisher/popup.tsx | 36 +- .../rag-pipeline-header/run-mode.tsx | 6 +- .../components/update-dsl-modal.tsx | 44 +- .../components/rag-pipeline/hooks/use-DSL.ts | 4 +- .../hooks/use-available-nodes-meta-data.ts | 4 +- .../hooks/use-pipeline-template.ts | 2 +- .../share/text-generation/index.tsx | 38 +- .../share/text-generation/menu-dropdown.tsx | 8 +- .../share/text-generation/no-data/index.tsx | 2 +- .../share/text-generation/result/header.tsx | 4 +- .../share/text-generation/result/index.tsx | 16 +- .../run-batch/csv-download/index.tsx | 6 +- .../run-batch/csv-reader/index.tsx | 4 +- .../share/text-generation/run-batch/index.tsx | 2 +- .../run-batch/res-download/index.tsx | 2 +- .../share/text-generation/run-once/index.tsx | 10 +- web/app/components/signin/countdown.tsx | 4 +- .../config-credentials.tsx | 42 +- .../edit-custom-collection-modal/examples.ts | 2 +- .../get-schema.tsx | 12 +- .../edit-custom-collection-modal/index.tsx | 50 +- .../edit-custom-collection-modal/test-api.tsx | 18 +- web/app/components/tools/labels/filter.tsx | 4 +- web/app/components/tools/labels/selector.tsx | 4 +- .../components/tools/marketplace/index.tsx | 24 +- web/app/components/tools/mcp/create-card.tsx | 4 +- .../components/tools/mcp/detail/content.tsx | 38 +- .../tools/mcp/detail/operation-dropdown.tsx | 4 +- .../components/tools/mcp/detail/tool-item.tsx | 4 +- .../components/tools/mcp/headers-input.tsx | 16 +- .../components/tools/mcp/mcp-server-modal.tsx | 14 +- .../tools/mcp/mcp-server-param-item.tsx | 2 +- .../components/tools/mcp/mcp-service-card.tsx | 22 +- web/app/components/tools/mcp/modal.tsx | 54 +- .../components/tools/mcp/provider-card.tsx | 12 +- web/app/components/tools/provider-list.tsx | 8 +- .../tools/provider/custom-create-card.tsx | 6 +- web/app/components/tools/provider/detail.tsx | 38 +- web/app/components/tools/provider/empty.tsx | 10 +- .../setting/build-in/config-credentials.tsx | 14 +- .../tools/workflow-tool/configure-button.tsx | 20 +- .../workflow-tool/confirm-modal/index.tsx | 8 +- .../components/tools/workflow-tool/index.tsx | 66 +- .../tools/workflow-tool/method-selector.tsx | 10 +- .../workflow-header/features-trigger.tsx | 6 +- .../workflow-onboarding-modal/index.tsx | 14 +- .../start-node-selection-panel.tsx | 8 +- .../components/workflow-app/hooks/use-DSL.ts | 4 +- .../hooks/use-available-nodes-meta-data.ts | 4 +- .../hooks/use-workflow-template.ts | 6 +- .../block-selector/all-start-blocks.tsx | 8 +- .../workflow/block-selector/all-tools.tsx | 8 +- .../workflow/block-selector/blocks.tsx | 10 +- .../workflow/block-selector/constants.tsx | 12 +- .../block-selector/featured-tools.tsx | 10 +- .../block-selector/featured-triggers.tsx | 10 +- .../workflow/block-selector/hooks.ts | 20 +- .../workflow/block-selector/main.tsx | 10 +- .../market-place-plugin/action.tsx | 4 +- .../market-place-plugin/item.tsx | 4 +- .../market-place-plugin/list.tsx | 8 +- .../rag-tool-recommendations/index.tsx | 4 +- .../uninstalled-item.tsx | 2 +- .../workflow/block-selector/start-blocks.tsx | 20 +- .../workflow/block-selector/tabs.tsx | 2 +- .../workflow/block-selector/tool-picker.tsx | 4 +- .../block-selector/tool/action-item.tsx | 2 +- .../tool/tool-list-tree-view/list.tsx | 6 +- .../workflow/block-selector/tool/tool.tsx | 10 +- .../trigger-plugin/action-item.tsx | 2 +- .../block-selector/trigger-plugin/item.tsx | 4 +- .../workflow/dsl-export-confirm-modal.tsx | 8 +- .../components/workflow/header/checklist.tsx | 10 +- .../workflow/header/editing-title.tsx | 8 +- .../workflow/header/header-in-restoring.tsx | 8 +- .../header/header-in-view-history.tsx | 2 +- .../workflow/header/restoring-title.tsx | 8 +- .../workflow/header/run-and-history.tsx | 2 +- .../components/workflow/header/run-mode.tsx | 6 +- .../workflow/header/running-title.tsx | 2 +- .../header/scroll-to-selected-node-button.tsx | 2 +- .../workflow/header/test-run-menu.tsx | 2 +- .../components/workflow/header/undo-redo.tsx | 4 +- .../header/version-history-button.tsx | 2 +- .../workflow/header/view-history.tsx | 8 +- .../workflow/header/view-workflow-history.tsx | 20 +- .../workflow/hooks/use-checklist.ts | 32 +- .../hooks/use-dynamic-test-run-options.tsx | 12 +- .../workflow/hooks/use-nodes-interactions.ts | 8 +- .../workflow/hooks/use-workflow-history.ts | 26 +- .../_base/components/add-variable-popup.tsx | 2 +- .../components/agent-strategy-selector.tsx | 18 +- .../nodes/_base/components/agent-strategy.tsx | 6 +- .../components/before-run-form/bool-input.tsx | 2 +- .../components/before-run-form/form-item.tsx | 6 +- .../components/before-run-form/index.tsx | 10 +- .../components/before-run-form/panel-wrap.tsx | 4 +- .../nodes/_base/components/config-vision.tsx | 8 +- .../code-editor/editor-support-vars.tsx | 2 +- .../_base/components/entry-node-container.tsx | 2 +- .../components/error-handle/default-value.tsx | 4 +- .../error-handle/error-handle-on-node.tsx | 6 +- .../error-handle/error-handle-on-panel.tsx | 4 +- .../error-handle/error-handle-tip.tsx | 4 +- .../error-handle-type-selector.tsx | 12 +- .../error-handle/fail-branch-card.tsx | 6 +- .../nodes/_base/components/file-type-item.tsx | 8 +- .../_base/components/file-upload-setting.tsx | 15 +- .../components/form-input-type-switch.tsx | 4 +- .../nodes/_base/components/help-link.tsx | 2 +- .../components/input-support-select-var.tsx | 4 +- .../components/install-plugin-button.tsx | 2 +- .../mcp-tool-not-support-tooltip.tsx | 2 +- .../nodes/_base/components/memory-config.tsx | 14 +- .../mixed-variable-text-input/index.tsx | 2 +- .../mixed-variable-text-input/placeholder.tsx | 4 +- .../nodes/_base/components/next-step/add.tsx | 6 +- .../_base/components/next-step/index.tsx | 4 +- .../nodes/_base/components/next-step/item.tsx | 2 +- .../_base/components/next-step/operator.tsx | 6 +- .../nodes/_base/components/node-control.tsx | 2 +- .../nodes/_base/components/node-handle.tsx | 8 +- .../nodes/_base/components/output-vars.tsx | 2 +- .../panel-operator/change-block.tsx | 2 +- .../panel-operator/panel-operator-popup.tsx | 16 +- .../nodes/_base/components/prompt/editor.tsx | 8 +- .../components/remove-effect-var-confirm.tsx | 6 +- .../_base/components/retry/retry-on-node.tsx | 8 +- .../_base/components/retry/retry-on-panel.tsx | 10 +- .../components/switch-plugin-version.tsx | 10 +- .../components/title-description-input.tsx | 4 +- .../nodes/_base/components/variable-tag.tsx | 2 +- .../variable/assigned-var-reference-popup.tsx | 4 +- .../variable/manage-input-field.tsx | 4 +- .../object-child-tree-panel/picker/field.tsx | 2 +- .../object-child-tree-panel/show/field.tsx | 2 +- .../object-child-tree-panel/show/index.tsx | 2 +- .../components/variable/output-var-list.tsx | 8 +- .../nodes/_base/components/variable/utils.ts | 2 +- .../_base/components/variable/var-list.tsx | 10 +- .../variable/var-reference-picker.tsx | 6 +- .../variable/var-reference-popup.tsx | 10 +- .../variable/var-reference-vars.tsx | 6 +- .../_base/components/workflow-panel/index.tsx | 6 +- .../workflow-panel/last-run/no-data.tsx | 4 +- .../_base/components/workflow-panel/tab.tsx | 4 +- .../components/workflow/nodes/_base/node.tsx | 12 +- .../nodes/agent/components/model-bar.tsx | 4 +- .../nodes/agent/components/tool-icon.tsx | 4 +- .../workflow/nodes/agent/default.ts | 24 +- .../components/workflow/nodes/agent/node.tsx | 11 +- .../components/workflow/nodes/agent/panel.tsx | 14 +- .../nodes/agent/use-single-run-form-params.ts | 2 +- .../workflow/nodes/answer/default.ts | 2 +- .../components/workflow/nodes/answer/node.tsx | 2 +- .../workflow/nodes/answer/panel.tsx | 4 +- .../components/operation-selector.tsx | 18 +- .../assigner/components/var-list/index.tsx | 6 +- .../workflow/nodes/assigner/default.ts | 8 +- .../workflow/nodes/assigner/node.tsx | 12 +- .../workflow/nodes/assigner/panel.tsx | 4 +- .../workflow/nodes/assigner/utils.ts | 12 +- .../components/workflow/nodes/code/default.ts | 8 +- .../workflow/nodes/code/dependency-picker.tsx | 2 +- .../components/workflow/nodes/code/panel.tsx | 8 +- .../components/workflow/nodes/constants.ts | 10 +- .../nodes/data-source-empty/index.tsx | 4 +- .../nodes/data-source/before-run-form.tsx | 4 +- .../workflow/nodes/data-source/default.ts | 10 +- .../workflow/nodes/data-source/panel.tsx | 6 +- .../nodes/document-extractor/default.ts | 4 +- .../nodes/document-extractor/node.tsx | 4 +- .../nodes/document-extractor/panel.tsx | 10 +- .../use-single-run-form-params.ts | 4 +- .../components/workflow/nodes/end/default.ts | 4 +- .../components/workflow/nodes/end/panel.tsx | 4 +- .../nodes/http/components/api-input.tsx | 2 +- .../http/components/authorization/index.tsx | 26 +- .../nodes/http/components/curl-panel.tsx | 8 +- .../components/key-value/bulk-edit/index.tsx | 6 +- .../key-value/key-value-edit/index.tsx | 8 +- .../key-value/key-value-edit/input-item.tsx | 4 +- .../key-value/key-value-edit/item.tsx | 6 +- .../nodes/http/components/timeout/index.tsx | 22 +- .../components/workflow/nodes/http/default.ts | 4 +- .../components/workflow/nodes/http/panel.tsx | 28 +- .../if-else/components/condition-add.tsx | 2 +- .../components/condition-files-list-value.tsx | 28 +- .../condition-list/condition-input.tsx | 4 +- .../condition-list/condition-item.tsx | 8 +- .../condition-list/condition-operator.tsx | 6 +- .../components/condition-number-input.tsx | 4 +- .../if-else/components/condition-value.tsx | 4 +- .../if-else/components/condition-wrap.tsx | 6 +- .../workflow/nodes/if-else/default.ts | 14 +- .../workflow/nodes/if-else/node.tsx | 6 +- .../workflow/nodes/if-else/panel.tsx | 6 +- .../workflow/nodes/if-else/utils.ts | 13 +- .../workflow/nodes/iteration-start/index.tsx | 4 +- .../workflow/nodes/iteration/add-block.tsx | 2 +- .../workflow/nodes/iteration/default.ts | 12 +- .../workflow/nodes/iteration/node.tsx | 4 +- .../workflow/nodes/iteration/panel.tsx | 22 +- .../nodes/iteration/use-interactions.ts | 2 +- .../iteration/use-single-run-form-params.ts | 4 +- .../components/chunk-structure/hooks.tsx | 10 +- .../components/chunk-structure/index.tsx | 6 +- .../chunk-structure/instruction/index.tsx | 6 +- .../components/chunk-structure/selector.tsx | 4 +- .../components/embedding-model.tsx | 2 +- .../components/index-method.tsx | 12 +- .../knowledge-base/components/option-card.tsx | 2 +- .../components/retrieval-setting/hooks.tsx | 24 +- .../components/retrieval-setting/index.tsx | 6 +- .../search-method-option.tsx | 6 +- .../top-k-and-score-threshold.tsx | 8 +- .../workflow/nodes/knowledge-base/default.ts | 16 +- .../hooks/use-settings-display.ts | 12 +- .../workflow/nodes/knowledge-base/node.tsx | 4 +- .../workflow/nodes/knowledge-base/panel.tsx | 4 +- .../use-single-run-form-params.ts | 2 +- .../components/dataset-item.tsx | 2 +- .../components/dataset-list.tsx | 2 +- .../components/metadata/add-condition.tsx | 4 +- .../condition-common-variable-selector.tsx | 2 +- .../condition-list/condition-date.tsx | 2 +- .../condition-list/condition-number.tsx | 2 +- .../condition-list/condition-operator.tsx | 6 +- .../condition-list/condition-string.tsx | 2 +- .../condition-variable-selector.tsx | 2 +- .../metadata/condition-list/utils.ts | 11 +- .../metadata/metadata-filter/index.tsx | 6 +- .../metadata-filter-selector.tsx | 12 +- .../components/metadata/metadata-panel.tsx | 2 +- .../components/metadata/metadata-trigger.tsx | 2 +- .../components/retrieval-config.tsx | 2 +- .../nodes/knowledge-retrieval/default.ts | 8 +- .../nodes/knowledge-retrieval/panel.tsx | 22 +- .../use-single-run-form-params.ts | 6 +- .../components/extract-input.tsx | 2 +- .../components/filter-condition.tsx | 8 +- .../list-operator/components/limit-config.tsx | 4 +- .../components/sub-variable-picker.tsx | 4 +- .../workflow/nodes/list-operator/default.ts | 10 +- .../workflow/nodes/list-operator/node.tsx | 4 +- .../workflow/nodes/list-operator/panel.tsx | 20 +- .../llm/components/config-prompt-item.tsx | 4 +- .../nodes/llm/components/config-prompt.tsx | 6 +- .../json-schema-config-modal/code-editor.tsx | 4 +- .../json-importer.tsx | 8 +- .../json-schema-config.tsx | 12 +- .../generated-result.tsx | 12 +- .../json-schema-generator/prompt-editor.tsx | 16 +- .../visual-editor/add-field.tsx | 2 +- .../visual-editor/card.tsx | 2 +- .../visual-editor/edit-card/actions.tsx | 6 +- .../edit-card/advanced-actions.tsx | 4 +- .../edit-card/advanced-options.tsx | 2 +- .../visual-editor/edit-card/index.tsx | 6 +- .../edit-card/required-switch.tsx | 2 +- .../components/reasoning-format-config.tsx | 4 +- .../llm/components/resolution-picker.tsx | 8 +- .../nodes/llm/components/structure-output.tsx | 4 +- .../components/workflow/nodes/llm/default.ts | 14 +- .../components/workflow/nodes/llm/panel.tsx | 40 +- .../nodes/llm/use-single-run-form-params.ts | 8 +- .../workflow/nodes/loop-start/index.tsx | 4 +- .../workflow/nodes/loop/add-block.tsx | 2 +- .../nodes/loop/components/condition-add.tsx | 2 +- .../components/condition-files-list-value.tsx | 10 +- .../condition-list/condition-input.tsx | 4 +- .../condition-list/condition-item.tsx | 8 +- .../condition-list/condition-operator.tsx | 6 +- .../components/condition-number-input.tsx | 4 +- .../nodes/loop/components/condition-value.tsx | 4 +- .../nodes/loop/components/condition-wrap.tsx | 2 +- .../loop/components/loop-variables/empty.tsx | 2 +- .../components/loop-variables/form-item.tsx | 2 +- .../loop-variables/input-mode-selec.tsx | 2 +- .../loop/components/loop-variables/item.tsx | 4 +- .../components/workflow/nodes/loop/default.ts | 24 +- .../components/workflow/nodes/loop/panel.tsx | 10 +- .../components/workflow/nodes/loop/utils.ts | 11 +- .../extract-parameter/import-from-tool.tsx | 4 +- .../components/extract-parameter/item.tsx | 4 +- .../components/extract-parameter/list.tsx | 4 +- .../components/extract-parameter/update.tsx | 34 +- .../components/reasoning-mode-picker.tsx | 6 +- .../nodes/parameter-extractor/default.ts | 16 +- .../nodes/parameter-extractor/panel.tsx | 22 +- .../use-single-run-form-params.ts | 8 +- .../components/advanced-setting.tsx | 6 +- .../components/class-item.tsx | 6 +- .../components/class-list.tsx | 6 +- .../nodes/question-classifier/default.ts | 12 +- .../nodes/question-classifier/node.tsx | 4 +- .../nodes/question-classifier/panel.tsx | 12 +- .../use-single-run-form-params.ts | 8 +- .../nodes/start/components/var-item.tsx | 2 +- .../nodes/start/components/var-list.tsx | 18 +- .../components/workflow/nodes/start/node.tsx | 4 +- .../components/workflow/nodes/start/panel.tsx | 4 +- .../workflow/nodes/start/use-config.ts | 16 +- .../nodes/start/use-single-run-form-params.ts | 2 +- .../nodes/template-transform/default.ts | 8 +- .../nodes/template-transform/panel.tsx | 10 +- .../nodes/tool/components/copy-id.tsx | 6 +- .../nodes/tool/components/input-var-list.tsx | 2 +- .../mixed-variable-text-input/index.tsx | 2 +- .../mixed-variable-text-input/placeholder.tsx | 4 +- .../components/workflow/nodes/tool/default.ts | 14 +- .../components/workflow/nodes/tool/panel.tsx | 12 +- .../workflow/nodes/tool/use-config.ts | 2 +- .../workflow/nodes/trigger-plugin/default.ts | 8 +- .../workflow/nodes/trigger-plugin/node.tsx | 2 +- .../components/frequency-selector.tsx | 12 +- .../components/mode-switcher.tsx | 4 +- .../components/mode-toggle.tsx | 4 +- .../components/monthly-days-selector.tsx | 8 +- .../components/next-execution-times.tsx | 2 +- .../components/on-minute-selector.tsx | 2 +- .../components/weekday-selector.tsx | 2 +- .../nodes/trigger-schedule/default.ts | 34 +- .../workflow/nodes/trigger-schedule/node.tsx | 4 +- .../workflow/nodes/trigger-schedule/panel.tsx | 12 +- .../components/header-table.tsx | 8 +- .../components/parameter-table.tsx | 12 +- .../workflow/nodes/trigger-webhook/default.ts | 5 +- .../workflow/nodes/trigger-webhook/panel.tsx | 28 +- .../nodes/trigger-webhook/use-config.ts | 20 +- .../components/node-group-item.tsx | 4 +- .../components/node-variable-item.tsx | 7 +- .../components/var-group-item.tsx | 6 +- .../components/var-list/index.tsx | 2 +- .../nodes/variable-assigner/default.ts | 14 +- .../workflow/nodes/variable-assigner/node.tsx | 4 +- .../nodes/variable-assigner/panel.tsx | 9 +- .../components/workflow/note-node/index.tsx | 2 +- .../plugins/link-editor-plugin/component.tsx | 10 +- .../plugins/link-editor-plugin/hooks.ts | 2 +- .../note-node/note-editor/toolbar/command.tsx | 10 +- .../toolbar/font-size-selector.tsx | 8 +- .../note-editor/toolbar/operator.tsx | 8 +- .../workflow/operator/add-block.tsx | 2 +- .../components/workflow/operator/control.tsx | 10 +- .../workflow/operator/more-actions.tsx | 20 +- .../workflow/operator/zoom-in-out.tsx | 6 +- .../components/workflow/panel-contextmenu.tsx | 12 +- .../workflow/panel/chat-record/user-input.tsx | 2 +- .../components/array-bool-list.tsx | 2 +- .../components/array-value-list.tsx | 4 +- .../components/object-value-item.tsx | 4 +- .../components/object-value-list.tsx | 6 +- .../components/variable-modal-trigger.tsx | 2 +- .../components/variable-modal.tsx | 28 +- .../panel/chat-variable-panel/index.tsx | 10 +- .../conversation-variable-modal.tsx | 8 +- .../panel/debug-and-preview/empty.tsx | 2 +- .../workflow/panel/debug-and-preview/hooks.ts | 2 +- .../panel/debug-and-preview/index.tsx | 6 +- .../workflow/panel/env-panel/index.tsx | 4 +- .../panel/env-panel/variable-modal.tsx | 26 +- .../panel/env-panel/variable-trigger.tsx | 2 +- .../panel/global-variable-panel/index.tsx | 18 +- .../workflow/panel/inputs-panel.tsx | 2 +- .../context-menu/use-context-menu.ts | 12 +- .../delete-confirm-modal.tsx | 8 +- .../panel/version-history-panel/empty.tsx | 4 +- .../filter/filter-switch.tsx | 2 +- .../filter/use-filter.ts | 4 +- .../panel/version-history-panel/index.tsx | 18 +- .../restore-confirm-modal.tsx | 8 +- .../version-history-item.tsx | 4 +- .../workflow/panel/workflow-preview.tsx | 12 +- .../workflow/run/agent-log/agent-log-nav.tsx | 4 +- .../run/agent-log/agent-log-trigger.tsx | 4 +- .../run/agent-log/agent-result-panel.tsx | 2 +- web/app/components/workflow/run/index.tsx | 6 +- .../iteration-log/iteration-log-trigger.tsx | 6 +- .../iteration-log/iteration-result-panel.tsx | 6 +- .../run/loop-log/loop-log-trigger.tsx | 6 +- .../run/loop-log/loop-result-panel.tsx | 8 +- .../workflow/run/loop-result-panel.tsx | 8 +- web/app/components/workflow/run/meta.tsx | 16 +- web/app/components/workflow/run/node.tsx | 14 +- .../components/workflow/run/result-panel.tsx | 6 +- .../components/workflow/run/result-text.tsx | 8 +- .../run/retry-log/retry-log-trigger.tsx | 2 +- .../run/retry-log/retry-result-panel.tsx | 4 +- web/app/components/workflow/run/status.tsx | 12 +- .../run/utils/format-log/parallel/index.ts | 4 +- .../workflow/selection-contextmenu.tsx | 20 +- .../components/workflow/update-dsl-modal.tsx | 48 +- .../variable-inspect/display-content.tsx | 4 +- .../workflow/variable-inspect/empty.tsx | 6 +- .../workflow/variable-inspect/group.tsx | 10 +- .../variable-inspect/large-data-alert.tsx | 4 +- .../workflow/variable-inspect/left.tsx | 4 +- .../workflow/variable-inspect/listening.tsx | 33 +- .../workflow/variable-inspect/panel.tsx | 4 +- .../workflow/variable-inspect/right.tsx | 10 +- .../workflow/variable-inspect/trigger.tsx | 10 +- .../components/error-handle-on-node.tsx | 6 +- .../components/nodes/base.tsx | 6 +- .../components/nodes/if-else/node.tsx | 6 +- .../nodes/iteration-start/index.tsx | 2 +- .../components/nodes/loop-start/index.tsx | 2 +- .../nodes/question-classifier/node.tsx | 4 +- .../components/note-node/index.tsx | 2 +- .../components/zoom-in-out.tsx | 6 +- .../education-apply/education-apply-page.tsx | 38 +- .../education-apply/expire-notice-modal.tsx | 26 +- web/app/education-apply/role-selector.tsx | 6 +- web/app/education-apply/search-input.tsx | 2 +- web/app/education-apply/user-info.tsx | 4 +- .../education-apply/verify-state-modal.tsx | 6 +- .../forgot-password/ChangePasswordForm.tsx | 30 +- .../forgot-password/ForgotPasswordForm.tsx | 16 +- web/app/init/InitPasswordPopup.tsx | 4 +- web/app/install/installForm.tsx | 38 +- web/app/reset-password/check-code/page.tsx | 18 +- web/app/reset-password/page.tsx | 16 +- web/app/reset-password/set-password/page.tsx | 26 +- web/app/signin/check-code/page.tsx | 18 +- .../signin/components/mail-and-code-auth.tsx | 10 +- .../components/mail-and-password-auth.tsx | 20 +- web/app/signin/components/social-auth.tsx | 4 +- web/app/signin/components/sso-auth.tsx | 2 +- web/app/signin/invite-settings/page.tsx | 22 +- web/app/signin/normal-form.tsx | 46 +- web/app/signin/one-more-step.tsx | 24 +- web/app/signup/check-code/page.tsx | 20 +- web/app/signup/components/input-mail.tsx | 20 +- web/app/signup/page.tsx | 4 +- web/app/signup/set-password/page.tsx | 24 +- web/config/index.ts | 3 +- web/context/provider-context.tsx | 2 +- web/eslint-rules/index.js | 18 + web/eslint-rules/namespaces.js | 87 ++ web/eslint-rules/rules/no-as-any-in-t.js | 110 ++ .../rules/no-legacy-namespace-prefix.js | 432 ++++++ web/eslint-rules/rules/require-ns-option.js | 56 + web/eslint.config.mjs | 16 + web/hooks/use-import-dsl.ts | 14 +- web/hooks/use-knowledge.ts | 16 +- web/hooks/use-metadata.ts | 363 ++--- web/hooks/use-pay.tsx | 6 +- web/i18n-config/DEV.md | 13 +- web/i18n-config/README.md | 71 +- web/i18n-config/auto-gen-i18n.js | 145 +- web/i18n-config/check-i18n.js | 185 +-- web/i18n-config/i18next-config.ts | 115 +- web/i18n-config/server.ts | 17 +- web/i18n/ar-TN/app-annotation.json | 70 + web/i18n/ar-TN/app-annotation.ts | 98 -- web/i18n/ar-TN/app-api.json | 72 + web/i18n/ar-TN/app-api.ts | 85 -- web/i18n/ar-TN/app-debug.json | 391 +++++ web/i18n/ar-TN/app-debug.ts | 571 ------- web/i18n/ar-TN/app-log.json | 84 + web/i18n/ar-TN/app-log.ts | 112 -- web/i18n/ar-TN/app-overview.json | 121 ++ web/i18n/ar-TN/app-overview.ts | 189 --- web/i18n/ar-TN/app.json | 283 ++++ web/i18n/ar-TN/app.ts | 351 ----- web/i18n/ar-TN/billing.json | 184 +++ web/i18n/ar-TN/billing.ts | 221 --- web/i18n/ar-TN/common.json | 622 ++++++++ web/i18n/ar-TN/common.ts | 792 ---------- web/i18n/ar-TN/custom.json | 22 + web/i18n/ar-TN/custom.ts | 32 - web/i18n/ar-TN/dataset-creation.json | 185 +++ web/i18n/ar-TN/dataset-creation.ts | 217 --- web/i18n/ar-TN/dataset-documents.json | 331 ++++ web/i18n/ar-TN/dataset-documents.ts | 408 ----- web/i18n/ar-TN/dataset-hit-testing.json | 28 + web/i18n/ar-TN/dataset-hit-testing.ts | 40 - web/i18n/ar-TN/dataset-pipeline.json | 95 ++ web/i18n/ar-TN/dataset-pipeline.ts | 165 -- web/i18n/ar-TN/dataset-settings.json | 44 + web/i18n/ar-TN/dataset-settings.ts | 52 - web/i18n/ar-TN/dataset.json | 181 +++ web/i18n/ar-TN/dataset.ts | 251 --- web/i18n/ar-TN/education.json | 44 + web/i18n/ar-TN/education.ts | 76 - web/i18n/ar-TN/explore.json | 28 + web/i18n/ar-TN/explore.ts | 44 - web/i18n/ar-TN/layout.json | 4 + web/i18n/ar-TN/layout.ts | 8 - web/i18n/ar-TN/login.json | 115 ++ web/i18n/ar-TN/login.ts | 126 -- web/i18n/ar-TN/oauth.json | 19 + web/i18n/ar-TN/oauth.ts | 27 - web/i18n/ar-TN/pipeline.json | 24 + web/i18n/ar-TN/pipeline.ts | 40 - web/i18n/ar-TN/plugin-tags.json | 22 + web/i18n/ar-TN/plugin-tags.ts | 26 - web/i18n/ar-TN/plugin-trigger.json | 118 ++ web/i18n/ar-TN/plugin-trigger.ts | 186 --- web/i18n/ar-TN/plugin.json | 251 +++ web/i18n/ar-TN/plugin.ts | 325 ---- web/i18n/ar-TN/register.json | 1 + web/i18n/ar-TN/register.ts | 4 - web/i18n/ar-TN/run-log.json | 23 + web/i18n/ar-TN/run-log.ts | 31 - web/i18n/ar-TN/share.json | 62 + web/i18n/ar-TN/share.ts | 86 -- web/i18n/ar-TN/time.json | 32 + web/i18n/ar-TN/time.ts | 45 - web/i18n/ar-TN/tools.json | 205 +++ web/i18n/ar-TN/tools.ts | 264 ---- web/i18n/ar-TN/workflow.json | 1041 +++++++++++++ web/i18n/ar-TN/workflow.ts | 1296 ---------------- web/i18n/de-DE/app-annotation.json | 70 + web/i18n/de-DE/app-annotation.ts | 98 -- web/i18n/de-DE/app-api.json | 72 + web/i18n/de-DE/app-api.ts | 85 -- web/i18n/de-DE/app-debug.json | 391 +++++ web/i18n/de-DE/app-debug.ts | 573 ------- web/i18n/de-DE/app-log.json | 84 + web/i18n/de-DE/app-log.ts | 112 -- web/i18n/de-DE/app-overview.json | 121 ++ web/i18n/de-DE/app-overview.ts | 189 --- web/i18n/de-DE/app.json | 283 ++++ web/i18n/de-DE/app.ts | 353 ----- web/i18n/de-DE/billing.json | 184 +++ web/i18n/de-DE/billing.ts | 221 --- web/i18n/de-DE/common.json | 622 ++++++++ web/i18n/de-DE/common.ts | 792 ---------- web/i18n/de-DE/custom.json | 22 + web/i18n/de-DE/custom.ts | 32 - web/i18n/de-DE/dataset-creation.json | 185 +++ web/i18n/de-DE/dataset-creation.ts | 217 --- web/i18n/de-DE/dataset-documents.json | 331 ++++ web/i18n/de-DE/dataset-documents.ts | 408 ----- web/i18n/de-DE/dataset-hit-testing.json | 28 + web/i18n/de-DE/dataset-hit-testing.ts | 40 - web/i18n/de-DE/dataset-pipeline.json | 95 ++ web/i18n/de-DE/dataset-pipeline.ts | 163 -- web/i18n/de-DE/dataset-settings.json | 44 + web/i18n/de-DE/dataset-settings.ts | 52 - web/i18n/de-DE/dataset.json | 181 +++ web/i18n/de-DE/dataset.ts | 253 ---- web/i18n/de-DE/education.json | 44 + web/i18n/de-DE/education.ts | 76 - web/i18n/de-DE/explore.json | 28 + web/i18n/de-DE/explore.ts | 44 - web/i18n/de-DE/layout.json | 4 + web/i18n/de-DE/layout.ts | 8 - web/i18n/de-DE/login.json | 115 ++ web/i18n/de-DE/login.ts | 126 -- web/i18n/de-DE/oauth.json | 19 + web/i18n/de-DE/oauth.ts | 27 - web/i18n/de-DE/pipeline.json | 24 + web/i18n/de-DE/pipeline.ts | 40 - web/i18n/de-DE/plugin-tags.json | 22 + web/i18n/de-DE/plugin-tags.ts | 26 - web/i18n/de-DE/plugin-trigger.json | 118 ++ web/i18n/de-DE/plugin-trigger.ts | 186 --- web/i18n/de-DE/plugin.json | 251 +++ web/i18n/de-DE/plugin.ts | 358 ----- web/i18n/de-DE/register.json | 1 + web/i18n/de-DE/register.ts | 4 - web/i18n/de-DE/run-log.json | 23 + web/i18n/de-DE/run-log.ts | 31 - web/i18n/de-DE/share.json | 62 + web/i18n/de-DE/share.ts | 86 -- web/i18n/de-DE/time.json | 32 + web/i18n/de-DE/time.ts | 44 - web/i18n/de-DE/tools.json | 205 +++ web/i18n/de-DE/tools.ts | 264 ---- web/i18n/de-DE/workflow.json | 1041 +++++++++++++ web/i18n/de-DE/workflow.ts | 1296 ---------------- web/i18n/en-US/app-annotation.json | 70 + web/i18n/en-US/app-annotation.ts | 98 -- web/i18n/en-US/app-api.json | 72 + web/i18n/en-US/app-api.ts | 86 -- web/i18n/en-US/app-debug.json | 391 +++++ web/i18n/en-US/app-debug.ts | 576 ------- web/i18n/en-US/app-log.json | 84 + web/i18n/en-US/app-log.ts | 112 -- web/i18n/en-US/app-overview.json | 121 ++ web/i18n/en-US/app-overview.ts | 189 --- web/i18n/en-US/app.json | 283 ++++ web/i18n/en-US/app.ts | 357 ----- web/i18n/en-US/billing.json | 185 +++ web/i18n/en-US/billing.ts | 240 --- web/i18n/en-US/common.json | 622 ++++++++ web/i18n/en-US/common.ts | 799 ---------- web/i18n/en-US/custom.json | 22 + web/i18n/en-US/custom.ts | 32 - web/i18n/en-US/dataset-creation.json | 185 +++ web/i18n/en-US/dataset-creation.ts | 217 --- web/i18n/en-US/dataset-documents.json | 332 ++++ web/i18n/en-US/dataset-documents.ts | 408 ----- web/i18n/en-US/dataset-hit-testing.json | 28 + web/i18n/en-US/dataset-hit-testing.ts | 40 - web/i18n/en-US/dataset-pipeline.json | 95 ++ web/i18n/en-US/dataset-pipeline.ts | 163 -- web/i18n/en-US/dataset-settings.json | 44 + web/i18n/en-US/dataset-settings.ts | 52 - web/i18n/en-US/dataset.json | 185 +++ web/i18n/en-US/dataset.ts | 253 ---- web/i18n/en-US/education.json | 44 + web/i18n/en-US/education.ts | 76 - web/i18n/en-US/explore.json | 29 + web/i18n/en-US/explore.ts | 44 - web/i18n/en-US/layout.json | 4 + web/i18n/en-US/layout.ts | 8 - web/i18n/en-US/login.json | 115 ++ web/i18n/en-US/login.ts | 127 -- web/i18n/en-US/oauth.json | 19 + web/i18n/en-US/oauth.ts | 27 - web/i18n/en-US/pipeline.json | 24 + web/i18n/en-US/pipeline.ts | 40 - web/i18n/en-US/plugin-tags.json | 22 + web/i18n/en-US/plugin-tags.ts | 26 - web/i18n/en-US/plugin-trigger.json | 118 ++ web/i18n/en-US/plugin-trigger.ts | 192 --- web/i18n/en-US/plugin.json | 251 +++ web/i18n/en-US/plugin.ts | 325 ---- web/i18n/en-US/register.json | 1 + web/i18n/en-US/register.ts | 4 - web/i18n/en-US/run-log.json | 23 + web/i18n/en-US/run-log.ts | 31 - web/i18n/en-US/share.json | 62 + web/i18n/en-US/share.ts | 86 -- web/i18n/en-US/time.json | 32 + web/i18n/en-US/time.ts | 45 - web/i18n/en-US/tools.json | 211 +++ web/i18n/en-US/tools.ts | 265 ---- web/i18n/en-US/workflow.json | 1051 +++++++++++++ web/i18n/en-US/workflow.ts | 1299 ---------------- web/i18n/es-ES/app-annotation.json | 70 + web/i18n/es-ES/app-annotation.ts | 98 -- web/i18n/es-ES/app-api.json | 72 + web/i18n/es-ES/app-api.ts | 85 -- web/i18n/es-ES/app-debug.json | 391 +++++ web/i18n/es-ES/app-debug.ts | 566 ------- web/i18n/es-ES/app-log.json | 84 + web/i18n/es-ES/app-log.ts | 112 -- web/i18n/es-ES/app-overview.json | 121 ++ web/i18n/es-ES/app-overview.ts | 189 --- web/i18n/es-ES/app.json | 283 ++++ web/i18n/es-ES/app.ts | 351 ----- web/i18n/es-ES/billing.json | 184 +++ web/i18n/es-ES/billing.ts | 221 --- web/i18n/es-ES/common.json | 622 ++++++++ web/i18n/es-ES/common.ts | 792 ---------- web/i18n/es-ES/custom.json | 22 + web/i18n/es-ES/custom.ts | 32 - web/i18n/es-ES/dataset-creation.json | 185 +++ web/i18n/es-ES/dataset-creation.ts | 217 --- web/i18n/es-ES/dataset-documents.json | 331 ++++ web/i18n/es-ES/dataset-documents.ts | 408 ----- web/i18n/es-ES/dataset-hit-testing.json | 28 + web/i18n/es-ES/dataset-hit-testing.ts | 40 - web/i18n/es-ES/dataset-pipeline.json | 95 ++ web/i18n/es-ES/dataset-pipeline.ts | 163 -- web/i18n/es-ES/dataset-settings.json | 44 + web/i18n/es-ES/dataset-settings.ts | 52 - web/i18n/es-ES/dataset.json | 181 +++ web/i18n/es-ES/dataset.ts | 253 ---- web/i18n/es-ES/education.json | 44 + web/i18n/es-ES/education.ts | 76 - web/i18n/es-ES/explore.json | 28 + web/i18n/es-ES/explore.ts | 44 - web/i18n/es-ES/layout.json | 4 + web/i18n/es-ES/layout.ts | 8 - web/i18n/es-ES/login.json | 115 ++ web/i18n/es-ES/login.ts | 126 -- web/i18n/es-ES/oauth.json | 19 + web/i18n/es-ES/oauth.ts | 27 - web/i18n/es-ES/pipeline.json | 24 + web/i18n/es-ES/pipeline.ts | 40 - web/i18n/es-ES/plugin-tags.json | 22 + web/i18n/es-ES/plugin-tags.ts | 26 - web/i18n/es-ES/plugin-trigger.json | 118 ++ web/i18n/es-ES/plugin-trigger.ts | 186 --- web/i18n/es-ES/plugin.json | 251 +++ web/i18n/es-ES/plugin.ts | 359 ----- web/i18n/es-ES/register.json | 1 + web/i18n/es-ES/register.ts | 4 - web/i18n/es-ES/run-log.json | 23 + web/i18n/es-ES/run-log.ts | 31 - web/i18n/es-ES/share.json | 62 + web/i18n/es-ES/share.ts | 86 -- web/i18n/es-ES/time.json | 32 + web/i18n/es-ES/time.ts | 44 - web/i18n/es-ES/tools.json | 205 +++ web/i18n/es-ES/tools.ts | 264 ---- web/i18n/es-ES/workflow.json | 1041 +++++++++++++ web/i18n/es-ES/workflow.ts | 1296 ---------------- web/i18n/fa-IR/app-annotation.json | 70 + web/i18n/fa-IR/app-annotation.ts | 98 -- web/i18n/fa-IR/app-api.json | 72 + web/i18n/fa-IR/app-api.ts | 85 -- web/i18n/fa-IR/app-debug.json | 391 +++++ web/i18n/fa-IR/app-debug.ts | 564 ------- web/i18n/fa-IR/app-log.json | 84 + web/i18n/fa-IR/app-log.ts | 112 -- web/i18n/fa-IR/app-overview.json | 121 ++ web/i18n/fa-IR/app-overview.ts | 189 --- web/i18n/fa-IR/app.json | 283 ++++ web/i18n/fa-IR/app.ts | 351 ----- web/i18n/fa-IR/billing.json | 184 +++ web/i18n/fa-IR/billing.ts | 221 --- web/i18n/fa-IR/common.json | 622 ++++++++ web/i18n/fa-IR/common.ts | 792 ---------- web/i18n/fa-IR/custom.json | 22 + web/i18n/fa-IR/custom.ts | 32 - web/i18n/fa-IR/dataset-creation.json | 185 +++ web/i18n/fa-IR/dataset-creation.ts | 217 --- web/i18n/fa-IR/dataset-documents.json | 331 ++++ web/i18n/fa-IR/dataset-documents.ts | 407 ----- web/i18n/fa-IR/dataset-hit-testing.json | 28 + web/i18n/fa-IR/dataset-hit-testing.ts | 40 - web/i18n/fa-IR/dataset-pipeline.json | 95 ++ web/i18n/fa-IR/dataset-pipeline.ts | 163 -- web/i18n/fa-IR/dataset-settings.json | 44 + web/i18n/fa-IR/dataset-settings.ts | 52 - web/i18n/fa-IR/dataset.json | 181 +++ web/i18n/fa-IR/dataset.ts | 253 ---- web/i18n/fa-IR/education.json | 44 + web/i18n/fa-IR/education.ts | 76 - web/i18n/fa-IR/explore.json | 28 + web/i18n/fa-IR/explore.ts | 44 - web/i18n/fa-IR/layout.json | 4 + web/i18n/fa-IR/layout.ts | 8 - web/i18n/fa-IR/login.json | 115 ++ web/i18n/fa-IR/login.ts | 126 -- web/i18n/fa-IR/oauth.json | 19 + web/i18n/fa-IR/oauth.ts | 27 - web/i18n/fa-IR/pipeline.json | 24 + web/i18n/fa-IR/pipeline.ts | 40 - web/i18n/fa-IR/plugin-tags.json | 22 + web/i18n/fa-IR/plugin-tags.ts | 26 - web/i18n/fa-IR/plugin-trigger.json | 118 ++ web/i18n/fa-IR/plugin-trigger.ts | 186 --- web/i18n/fa-IR/plugin.json | 251 +++ web/i18n/fa-IR/plugin.ts | 351 ----- web/i18n/fa-IR/register.json | 1 + web/i18n/fa-IR/register.ts | 4 - web/i18n/fa-IR/run-log.json | 23 + web/i18n/fa-IR/run-log.ts | 31 - web/i18n/fa-IR/share.json | 62 + web/i18n/fa-IR/share.ts | 82 - web/i18n/fa-IR/time.json | 32 + web/i18n/fa-IR/time.ts | 44 - web/i18n/fa-IR/tools.json | 205 +++ web/i18n/fa-IR/tools.ts | 264 ---- web/i18n/fa-IR/workflow.json | 1041 +++++++++++++ web/i18n/fa-IR/workflow.ts | 1296 ---------------- web/i18n/fr-FR/app-annotation.json | 70 + web/i18n/fr-FR/app-annotation.ts | 98 -- web/i18n/fr-FR/app-api.json | 72 + web/i18n/fr-FR/app-api.ts | 85 -- web/i18n/fr-FR/app-debug.json | 391 +++++ web/i18n/fr-FR/app-debug.ts | 573 ------- web/i18n/fr-FR/app-log.json | 84 + web/i18n/fr-FR/app-log.ts | 112 -- web/i18n/fr-FR/app-overview.json | 121 ++ web/i18n/fr-FR/app-overview.ts | 189 --- web/i18n/fr-FR/app.json | 283 ++++ web/i18n/fr-FR/app.ts | 351 ----- web/i18n/fr-FR/billing.json | 184 +++ web/i18n/fr-FR/billing.ts | 221 --- web/i18n/fr-FR/common.json | 622 ++++++++ web/i18n/fr-FR/common.ts | 792 ---------- web/i18n/fr-FR/custom.json | 22 + web/i18n/fr-FR/custom.ts | 32 - web/i18n/fr-FR/dataset-creation.json | 185 +++ web/i18n/fr-FR/dataset-creation.ts | 217 --- web/i18n/fr-FR/dataset-documents.json | 331 ++++ web/i18n/fr-FR/dataset-documents.ts | 408 ----- web/i18n/fr-FR/dataset-hit-testing.json | 28 + web/i18n/fr-FR/dataset-hit-testing.ts | 40 - web/i18n/fr-FR/dataset-pipeline.json | 95 ++ web/i18n/fr-FR/dataset-pipeline.ts | 163 -- web/i18n/fr-FR/dataset-settings.json | 44 + web/i18n/fr-FR/dataset-settings.ts | 52 - web/i18n/fr-FR/dataset.json | 181 +++ web/i18n/fr-FR/dataset.ts | 253 ---- web/i18n/fr-FR/education.json | 44 + web/i18n/fr-FR/education.ts | 76 - web/i18n/fr-FR/explore.json | 28 + web/i18n/fr-FR/explore.ts | 44 - web/i18n/fr-FR/layout.json | 4 + web/i18n/fr-FR/layout.ts | 8 - web/i18n/fr-FR/login.json | 115 ++ web/i18n/fr-FR/login.ts | 126 -- web/i18n/fr-FR/oauth.json | 19 + web/i18n/fr-FR/oauth.ts | 27 - web/i18n/fr-FR/pipeline.json | 24 + web/i18n/fr-FR/pipeline.ts | 40 - web/i18n/fr-FR/plugin-tags.json | 22 + web/i18n/fr-FR/plugin-tags.ts | 26 - web/i18n/fr-FR/plugin-trigger.json | 118 ++ web/i18n/fr-FR/plugin-trigger.ts | 186 --- web/i18n/fr-FR/plugin.json | 251 +++ web/i18n/fr-FR/plugin.ts | 358 ----- web/i18n/fr-FR/register.json | 1 + web/i18n/fr-FR/register.ts | 4 - web/i18n/fr-FR/run-log.json | 23 + web/i18n/fr-FR/run-log.ts | 31 - web/i18n/fr-FR/share.json | 62 + web/i18n/fr-FR/share.ts | 86 -- web/i18n/fr-FR/time.json | 32 + web/i18n/fr-FR/time.ts | 44 - web/i18n/fr-FR/tools.json | 205 +++ web/i18n/fr-FR/tools.ts | 264 ---- web/i18n/fr-FR/workflow.json | 1041 +++++++++++++ web/i18n/fr-FR/workflow.ts | 1296 ---------------- web/i18n/hi-IN/app-annotation.json | 70 + web/i18n/hi-IN/app-annotation.ts | 98 -- web/i18n/hi-IN/app-api.json | 72 + web/i18n/hi-IN/app-api.ts | 85 -- web/i18n/hi-IN/app-debug.json | 391 +++++ web/i18n/hi-IN/app-debug.ts | 624 -------- web/i18n/hi-IN/app-log.json | 84 + web/i18n/hi-IN/app-log.ts | 114 -- web/i18n/hi-IN/app-overview.json | 121 ++ web/i18n/hi-IN/app-overview.ts | 207 --- web/i18n/hi-IN/app.json | 283 ++++ web/i18n/hi-IN/app.ts | 351 ----- web/i18n/hi-IN/billing.json | 184 +++ web/i18n/hi-IN/billing.ts | 232 --- web/i18n/hi-IN/common.json | 622 ++++++++ web/i18n/hi-IN/common.ts | 814 ---------- web/i18n/hi-IN/custom.json | 22 + web/i18n/hi-IN/custom.ts | 32 - web/i18n/hi-IN/dataset-creation.json | 185 +++ web/i18n/hi-IN/dataset-creation.ts | 236 --- web/i18n/hi-IN/dataset-documents.json | 331 ++++ web/i18n/hi-IN/dataset-documents.ts | 409 ----- web/i18n/hi-IN/dataset-hit-testing.json | 28 + web/i18n/hi-IN/dataset-hit-testing.ts | 40 - web/i18n/hi-IN/dataset-pipeline.json | 95 ++ web/i18n/hi-IN/dataset-pipeline.ts | 163 -- web/i18n/hi-IN/dataset-settings.json | 44 + web/i18n/hi-IN/dataset-settings.ts | 57 - web/i18n/hi-IN/dataset.json | 181 +++ web/i18n/hi-IN/dataset.ts | 258 ---- web/i18n/hi-IN/education.json | 44 + web/i18n/hi-IN/education.ts | 76 - web/i18n/hi-IN/explore.json | 28 + web/i18n/hi-IN/explore.ts | 45 - web/i18n/hi-IN/layout.json | 4 + web/i18n/hi-IN/layout.ts | 8 - web/i18n/hi-IN/login.json | 115 ++ web/i18n/hi-IN/login.ts | 131 -- web/i18n/hi-IN/oauth.json | 19 + web/i18n/hi-IN/oauth.ts | 27 - web/i18n/hi-IN/pipeline.json | 24 + web/i18n/hi-IN/pipeline.ts | 40 - web/i18n/hi-IN/plugin-tags.json | 22 + web/i18n/hi-IN/plugin-tags.ts | 26 - web/i18n/hi-IN/plugin-trigger.json | 118 ++ web/i18n/hi-IN/plugin-trigger.ts | 186 --- web/i18n/hi-IN/plugin.json | 251 +++ web/i18n/hi-IN/plugin.ts | 355 ----- web/i18n/hi-IN/register.json | 1 + web/i18n/hi-IN/register.ts | 3 - web/i18n/hi-IN/run-log.json | 23 + web/i18n/hi-IN/run-log.ts | 31 - web/i18n/hi-IN/share.json | 62 + web/i18n/hi-IN/share.ts | 86 -- web/i18n/hi-IN/time.json | 32 + web/i18n/hi-IN/time.ts | 44 - web/i18n/hi-IN/tools.json | 205 +++ web/i18n/hi-IN/tools.ts | 269 ---- web/i18n/hi-IN/workflow.json | 1041 +++++++++++++ web/i18n/hi-IN/workflow.ts | 1316 ---------------- web/i18n/id-ID/app-annotation.json | 70 + web/i18n/id-ID/app-annotation.ts | 98 -- web/i18n/id-ID/app-api.json | 72 + web/i18n/id-ID/app-api.ts | 85 -- web/i18n/id-ID/app-debug.json | 391 +++++ web/i18n/id-ID/app-debug.ts | 564 ------- web/i18n/id-ID/app-log.json | 84 + web/i18n/id-ID/app-log.ts | 112 -- web/i18n/id-ID/app-overview.json | 121 ++ web/i18n/id-ID/app-overview.ts | 189 --- web/i18n/id-ID/app.json | 283 ++++ web/i18n/id-ID/app.ts | 347 ----- web/i18n/id-ID/billing.json | 184 +++ web/i18n/id-ID/billing.ts | 221 --- web/i18n/id-ID/common.json | 622 ++++++++ web/i18n/id-ID/common.ts | 787 ---------- web/i18n/id-ID/custom.json | 22 + web/i18n/id-ID/custom.ts | 32 - web/i18n/id-ID/dataset-creation.json | 185 +++ web/i18n/id-ID/dataset-creation.ts | 217 --- web/i18n/id-ID/dataset-documents.json | 331 ++++ web/i18n/id-ID/dataset-documents.ts | 407 ----- web/i18n/id-ID/dataset-hit-testing.json | 28 + web/i18n/id-ID/dataset-hit-testing.ts | 40 - web/i18n/id-ID/dataset-pipeline.json | 95 ++ web/i18n/id-ID/dataset-pipeline.ts | 163 -- web/i18n/id-ID/dataset-settings.json | 44 + web/i18n/id-ID/dataset-settings.ts | 52 - web/i18n/id-ID/dataset.json | 181 +++ web/i18n/id-ID/dataset.ts | 252 --- web/i18n/id-ID/education.json | 44 + web/i18n/id-ID/education.ts | 76 - web/i18n/id-ID/explore.json | 28 + web/i18n/id-ID/explore.ts | 44 - web/i18n/id-ID/layout.json | 4 + web/i18n/id-ID/layout.ts | 8 - web/i18n/id-ID/login.json | 115 ++ web/i18n/id-ID/login.ts | 126 -- web/i18n/id-ID/oauth.json | 19 + web/i18n/id-ID/oauth.ts | 27 - web/i18n/id-ID/pipeline.json | 24 + web/i18n/id-ID/pipeline.ts | 40 - web/i18n/id-ID/plugin-tags.json | 22 + web/i18n/id-ID/plugin-tags.ts | 26 - web/i18n/id-ID/plugin-trigger.json | 118 ++ web/i18n/id-ID/plugin-trigger.ts | 186 --- web/i18n/id-ID/plugin.json | 251 +++ web/i18n/id-ID/plugin.ts | 325 ---- web/i18n/id-ID/register.json | 1 + web/i18n/id-ID/register.ts | 4 - web/i18n/id-ID/run-log.json | 23 + web/i18n/id-ID/run-log.ts | 31 - web/i18n/id-ID/share.json | 62 + web/i18n/id-ID/share.ts | 82 - web/i18n/id-ID/time.json | 32 + web/i18n/id-ID/time.ts | 44 - web/i18n/id-ID/tools.json | 205 +++ web/i18n/id-ID/tools.ts | 264 ---- web/i18n/id-ID/workflow.json | 1041 +++++++++++++ web/i18n/id-ID/workflow.ts | 1296 ---------------- web/i18n/it-IT/app-annotation.json | 70 + web/i18n/it-IT/app-annotation.ts | 100 -- web/i18n/it-IT/app-api.json | 72 + web/i18n/it-IT/app-api.ts | 106 -- web/i18n/it-IT/app-debug.json | 391 +++++ web/i18n/it-IT/app-debug.ts | 614 -------- web/i18n/it-IT/app-log.json | 84 + web/i18n/it-IT/app-log.ts | 116 -- web/i18n/it-IT/app-overview.json | 121 ++ web/i18n/it-IT/app-overview.ts | 209 --- web/i18n/it-IT/app.json | 283 ++++ web/i18n/it-IT/app.ts | 357 ----- web/i18n/it-IT/billing.json | 184 +++ web/i18n/it-IT/billing.ts | 232 --- web/i18n/it-IT/common.json | 622 ++++++++ web/i18n/it-IT/common.ts | 822 ---------- web/i18n/it-IT/custom.json | 22 + web/i18n/it-IT/custom.ts | 33 - web/i18n/it-IT/dataset-creation.json | 185 +++ web/i18n/it-IT/dataset-creation.ts | 239 --- web/i18n/it-IT/dataset-documents.json | 331 ++++ web/i18n/it-IT/dataset-documents.ts | 410 ----- web/i18n/it-IT/dataset-hit-testing.json | 28 + web/i18n/it-IT/dataset-hit-testing.ts | 41 - web/i18n/it-IT/dataset-pipeline.json | 95 ++ web/i18n/it-IT/dataset-pipeline.ts | 163 -- web/i18n/it-IT/dataset-settings.json | 44 + web/i18n/it-IT/dataset-settings.ts | 57 - web/i18n/it-IT/dataset.json | 181 +++ web/i18n/it-IT/dataset.ts | 258 ---- web/i18n/it-IT/education.json | 44 + web/i18n/it-IT/education.ts | 76 - web/i18n/it-IT/explore.json | 28 + web/i18n/it-IT/explore.ts | 45 - web/i18n/it-IT/layout.json | 4 + web/i18n/it-IT/layout.ts | 8 - web/i18n/it-IT/login.json | 115 ++ web/i18n/it-IT/login.ts | 136 -- web/i18n/it-IT/oauth.json | 19 + web/i18n/it-IT/oauth.ts | 27 - web/i18n/it-IT/pipeline.json | 24 + web/i18n/it-IT/pipeline.ts | 40 - web/i18n/it-IT/plugin-tags.json | 22 + web/i18n/it-IT/plugin-tags.ts | 26 - web/i18n/it-IT/plugin-trigger.json | 118 ++ web/i18n/it-IT/plugin-trigger.ts | 186 --- web/i18n/it-IT/plugin.json | 251 +++ web/i18n/it-IT/plugin.ts | 325 ---- web/i18n/it-IT/register.json | 1 + web/i18n/it-IT/register.ts | 4 - web/i18n/it-IT/run-log.json | 23 + web/i18n/it-IT/run-log.ts | 31 - web/i18n/it-IT/share.json | 62 + web/i18n/it-IT/share.ts | 88 -- web/i18n/it-IT/time.json | 32 + web/i18n/it-IT/time.ts | 44 - web/i18n/it-IT/tools.json | 205 +++ web/i18n/it-IT/tools.ts | 274 ---- web/i18n/it-IT/workflow.json | 1041 +++++++++++++ web/i18n/it-IT/workflow.ts | 1322 ---------------- web/i18n/ja-JP/app-annotation.json | 70 + web/i18n/ja-JP/app-annotation.ts | 98 -- web/i18n/ja-JP/app-api.json | 72 + web/i18n/ja-JP/app-api.ts | 86 -- web/i18n/ja-JP/app-debug.json | 391 +++++ web/i18n/ja-JP/app-debug.ts | 568 ------- web/i18n/ja-JP/app-log.json | 84 + web/i18n/ja-JP/app-log.ts | 112 -- web/i18n/ja-JP/app-overview.json | 121 ++ web/i18n/ja-JP/app-overview.ts | 189 --- web/i18n/ja-JP/app.json | 283 ++++ web/i18n/ja-JP/app.ts | 356 ----- web/i18n/ja-JP/billing.json | 184 +++ web/i18n/ja-JP/billing.ts | 221 --- web/i18n/ja-JP/common.json | 622 ++++++++ web/i18n/ja-JP/common.ts | 798 ---------- web/i18n/ja-JP/custom.json | 22 + web/i18n/ja-JP/custom.ts | 32 - web/i18n/ja-JP/dataset-creation.json | 185 +++ web/i18n/ja-JP/dataset-creation.ts | 217 --- web/i18n/ja-JP/dataset-documents.json | 331 ++++ web/i18n/ja-JP/dataset-documents.ts | 408 ----- web/i18n/ja-JP/dataset-hit-testing.json | 28 + web/i18n/ja-JP/dataset-hit-testing.ts | 40 - web/i18n/ja-JP/dataset-pipeline.json | 95 ++ web/i18n/ja-JP/dataset-pipeline.ts | 163 -- web/i18n/ja-JP/dataset-settings.json | 44 + web/i18n/ja-JP/dataset-settings.ts | 52 - web/i18n/ja-JP/dataset.json | 181 +++ web/i18n/ja-JP/dataset.ts | 252 --- web/i18n/ja-JP/education.json | 44 + web/i18n/ja-JP/education.ts | 76 - web/i18n/ja-JP/explore.json | 28 + web/i18n/ja-JP/explore.ts | 44 - web/i18n/ja-JP/layout.json | 4 + web/i18n/ja-JP/layout.ts | 8 - web/i18n/ja-JP/login.json | 115 ++ web/i18n/ja-JP/login.ts | 127 -- web/i18n/ja-JP/oauth.json | 19 + web/i18n/ja-JP/oauth.ts | 27 - web/i18n/ja-JP/pipeline.json | 24 + web/i18n/ja-JP/pipeline.ts | 40 - web/i18n/ja-JP/plugin-tags.json | 22 + web/i18n/ja-JP/plugin-tags.ts | 26 - web/i18n/ja-JP/plugin-trigger.json | 118 ++ web/i18n/ja-JP/plugin-trigger.ts | 193 --- web/i18n/ja-JP/plugin.json | 251 +++ web/i18n/ja-JP/plugin.ts | 325 ---- web/i18n/ja-JP/register.json | 1 + web/i18n/ja-JP/register.ts | 4 - web/i18n/ja-JP/run-log.json | 23 + web/i18n/ja-JP/run-log.ts | 31 - web/i18n/ja-JP/share.json | 62 + web/i18n/ja-JP/share.ts | 82 - web/i18n/ja-JP/time.json | 32 + web/i18n/ja-JP/time.ts | 45 - web/i18n/ja-JP/tools.json | 205 +++ web/i18n/ja-JP/tools.ts | 265 ---- web/i18n/ja-JP/workflow.json | 1041 +++++++++++++ web/i18n/ja-JP/workflow.ts | 1299 ---------------- web/i18n/ko-KR/app-annotation.json | 70 + web/i18n/ko-KR/app-annotation.ts | 98 -- web/i18n/ko-KR/app-api.json | 72 + web/i18n/ko-KR/app-api.ts | 87 -- web/i18n/ko-KR/app-debug.json | 391 +++++ web/i18n/ko-KR/app-debug.ts | 566 ------- web/i18n/ko-KR/app-log.json | 84 + web/i18n/ko-KR/app-log.ts | 113 -- web/i18n/ko-KR/app-overview.json | 121 ++ web/i18n/ko-KR/app-overview.ts | 189 --- web/i18n/ko-KR/app.json | 283 ++++ web/i18n/ko-KR/app.ts | 371 ----- web/i18n/ko-KR/billing.json | 184 +++ web/i18n/ko-KR/billing.ts | 234 --- web/i18n/ko-KR/common.json | 622 ++++++++ web/i18n/ko-KR/common.ts | 788 ---------- web/i18n/ko-KR/custom.json | 22 + web/i18n/ko-KR/custom.ts | 32 - web/i18n/ko-KR/dataset-creation.json | 185 +++ web/i18n/ko-KR/dataset-creation.ts | 218 --- web/i18n/ko-KR/dataset-documents.json | 331 ++++ web/i18n/ko-KR/dataset-documents.ts | 407 ----- web/i18n/ko-KR/dataset-hit-testing.json | 28 + web/i18n/ko-KR/dataset-hit-testing.ts | 40 - web/i18n/ko-KR/dataset-pipeline.json | 95 ++ web/i18n/ko-KR/dataset-pipeline.ts | 163 -- web/i18n/ko-KR/dataset-settings.json | 44 + web/i18n/ko-KR/dataset-settings.ts | 52 - web/i18n/ko-KR/dataset.json | 181 +++ web/i18n/ko-KR/dataset.ts | 252 --- web/i18n/ko-KR/education.json | 44 + web/i18n/ko-KR/education.ts | 80 - web/i18n/ko-KR/explore.json | 28 + web/i18n/ko-KR/explore.ts | 44 - web/i18n/ko-KR/layout.json | 4 + web/i18n/ko-KR/layout.ts | 8 - web/i18n/ko-KR/login.json | 115 ++ web/i18n/ko-KR/login.ts | 126 -- web/i18n/ko-KR/oauth.json | 19 + web/i18n/ko-KR/oauth.ts | 27 - web/i18n/ko-KR/pipeline.json | 24 + web/i18n/ko-KR/pipeline.ts | 40 - web/i18n/ko-KR/plugin-tags.json | 22 + web/i18n/ko-KR/plugin-tags.ts | 26 - web/i18n/ko-KR/plugin-trigger.json | 118 ++ web/i18n/ko-KR/plugin-trigger.ts | 186 --- web/i18n/ko-KR/plugin.json | 251 +++ web/i18n/ko-KR/plugin.ts | 325 ---- web/i18n/ko-KR/register.json | 1 + web/i18n/ko-KR/register.ts | 3 - web/i18n/ko-KR/run-log.json | 23 + web/i18n/ko-KR/run-log.ts | 31 - web/i18n/ko-KR/share.json | 62 + web/i18n/ko-KR/share.ts | 82 - web/i18n/ko-KR/time.json | 32 + web/i18n/ko-KR/time.ts | 44 - web/i18n/ko-KR/tools.json | 205 +++ web/i18n/ko-KR/tools.ts | 264 ---- web/i18n/ko-KR/workflow.json | 1041 +++++++++++++ web/i18n/ko-KR/workflow.ts | 1347 ----------------- web/i18n/pl-PL/app-annotation.json | 70 + web/i18n/pl-PL/app-annotation.ts | 100 -- web/i18n/pl-PL/app-api.json | 72 + web/i18n/pl-PL/app-api.ts | 104 -- web/i18n/pl-PL/app-debug.json | 391 +++++ web/i18n/pl-PL/app-debug.ts | 609 -------- web/i18n/pl-PL/app-log.json | 84 + web/i18n/pl-PL/app-log.ts | 116 -- web/i18n/pl-PL/app-overview.json | 121 ++ web/i18n/pl-PL/app-overview.ts | 207 --- web/i18n/pl-PL/app.json | 283 ++++ web/i18n/pl-PL/app.ts | 352 ----- web/i18n/pl-PL/billing.json | 184 +++ web/i18n/pl-PL/billing.ts | 231 --- web/i18n/pl-PL/common.json | 622 ++++++++ web/i18n/pl-PL/common.ts | 810 ---------- web/i18n/pl-PL/custom.json | 22 + web/i18n/pl-PL/custom.ts | 33 - web/i18n/pl-PL/dataset-creation.json | 185 +++ web/i18n/pl-PL/dataset-creation.ts | 233 --- web/i18n/pl-PL/dataset-documents.json | 331 ++++ web/i18n/pl-PL/dataset-documents.ts | 409 ----- web/i18n/pl-PL/dataset-hit-testing.json | 28 + web/i18n/pl-PL/dataset-hit-testing.ts | 40 - web/i18n/pl-PL/dataset-pipeline.json | 95 ++ web/i18n/pl-PL/dataset-pipeline.ts | 163 -- web/i18n/pl-PL/dataset-settings.json | 44 + web/i18n/pl-PL/dataset-settings.ts | 57 - web/i18n/pl-PL/dataset.json | 181 +++ web/i18n/pl-PL/dataset.ts | 257 ---- web/i18n/pl-PL/education.json | 44 + web/i18n/pl-PL/education.ts | 76 - web/i18n/pl-PL/explore.json | 28 + web/i18n/pl-PL/explore.ts | 45 - web/i18n/pl-PL/layout.json | 4 + web/i18n/pl-PL/layout.ts | 8 - web/i18n/pl-PL/login.json | 115 ++ web/i18n/pl-PL/login.ts | 131 -- web/i18n/pl-PL/oauth.json | 19 + web/i18n/pl-PL/oauth.ts | 27 - web/i18n/pl-PL/pipeline.json | 24 + web/i18n/pl-PL/pipeline.ts | 40 - web/i18n/pl-PL/plugin-tags.json | 22 + web/i18n/pl-PL/plugin-tags.ts | 26 - web/i18n/pl-PL/plugin-trigger.json | 118 ++ web/i18n/pl-PL/plugin-trigger.ts | 186 --- web/i18n/pl-PL/plugin.json | 251 +++ web/i18n/pl-PL/plugin.ts | 325 ---- web/i18n/pl-PL/register.json | 1 + web/i18n/pl-PL/register.ts | 4 - web/i18n/pl-PL/run-log.json | 23 + web/i18n/pl-PL/run-log.ts | 31 - web/i18n/pl-PL/share.json | 62 + web/i18n/pl-PL/share.ts | 87 -- web/i18n/pl-PL/time.json | 32 + web/i18n/pl-PL/time.ts | 44 - web/i18n/pl-PL/tools.json | 205 +++ web/i18n/pl-PL/tools.ts | 268 ---- web/i18n/pl-PL/workflow.json | 1041 +++++++++++++ web/i18n/pl-PL/workflow.ts | 1296 ---------------- web/i18n/pt-BR/app-annotation.json | 70 + web/i18n/pt-BR/app-annotation.ts | 98 -- web/i18n/pt-BR/app-api.json | 72 + web/i18n/pt-BR/app-api.ts | 85 -- web/i18n/pt-BR/app-debug.json | 391 +++++ web/i18n/pt-BR/app-debug.ts | 575 ------- web/i18n/pt-BR/app-log.json | 84 + web/i18n/pt-BR/app-log.ts | 114 -- web/i18n/pt-BR/app-overview.json | 121 ++ web/i18n/pt-BR/app-overview.ts | 189 --- web/i18n/pt-BR/app.json | 283 ++++ web/i18n/pt-BR/app.ts | 351 ----- web/i18n/pt-BR/billing.json | 184 +++ web/i18n/pt-BR/billing.ts | 221 --- web/i18n/pt-BR/common.json | 622 ++++++++ web/i18n/pt-BR/common.ts | 792 ---------- web/i18n/pt-BR/custom.json | 22 + web/i18n/pt-BR/custom.ts | 32 - web/i18n/pt-BR/dataset-creation.json | 185 +++ web/i18n/pt-BR/dataset-creation.ts | 217 --- web/i18n/pt-BR/dataset-documents.json | 331 ++++ web/i18n/pt-BR/dataset-documents.ts | 408 ----- web/i18n/pt-BR/dataset-hit-testing.json | 28 + web/i18n/pt-BR/dataset-hit-testing.ts | 40 - web/i18n/pt-BR/dataset-pipeline.json | 95 ++ web/i18n/pt-BR/dataset-pipeline.ts | 163 -- web/i18n/pt-BR/dataset-settings.json | 44 + web/i18n/pt-BR/dataset-settings.ts | 52 - web/i18n/pt-BR/dataset.json | 181 +++ web/i18n/pt-BR/dataset.ts | 253 ---- web/i18n/pt-BR/education.json | 44 + web/i18n/pt-BR/education.ts | 76 - web/i18n/pt-BR/explore.json | 28 + web/i18n/pt-BR/explore.ts | 44 - web/i18n/pt-BR/layout.json | 4 + web/i18n/pt-BR/layout.ts | 8 - web/i18n/pt-BR/login.json | 115 ++ web/i18n/pt-BR/login.ts | 126 -- web/i18n/pt-BR/oauth.json | 19 + web/i18n/pt-BR/oauth.ts | 27 - web/i18n/pt-BR/pipeline.json | 24 + web/i18n/pt-BR/pipeline.ts | 40 - web/i18n/pt-BR/plugin-tags.json | 22 + web/i18n/pt-BR/plugin-tags.ts | 26 - web/i18n/pt-BR/plugin-trigger.json | 118 ++ web/i18n/pt-BR/plugin-trigger.ts | 186 --- web/i18n/pt-BR/plugin.json | 251 +++ web/i18n/pt-BR/plugin.ts | 325 ---- web/i18n/pt-BR/register.json | 1 + web/i18n/pt-BR/register.ts | 4 - web/i18n/pt-BR/run-log.json | 23 + web/i18n/pt-BR/run-log.ts | 31 - web/i18n/pt-BR/share.json | 62 + web/i18n/pt-BR/share.ts | 86 -- web/i18n/pt-BR/time.json | 32 + web/i18n/pt-BR/time.ts | 44 - web/i18n/pt-BR/tools.json | 205 +++ web/i18n/pt-BR/tools.ts | 264 ---- web/i18n/pt-BR/workflow.json | 1041 +++++++++++++ web/i18n/pt-BR/workflow.ts | 1296 ---------------- web/i18n/ro-RO/app-annotation.json | 70 + web/i18n/ro-RO/app-annotation.ts | 98 -- web/i18n/ro-RO/app-api.json | 72 + web/i18n/ro-RO/app-api.ts | 85 -- web/i18n/ro-RO/app-debug.json | 391 +++++ web/i18n/ro-RO/app-debug.ts | 575 ------- web/i18n/ro-RO/app-log.json | 84 + web/i18n/ro-RO/app-log.ts | 112 -- web/i18n/ro-RO/app-overview.json | 121 ++ web/i18n/ro-RO/app-overview.ts | 189 --- web/i18n/ro-RO/app.json | 283 ++++ web/i18n/ro-RO/app.ts | 351 ----- web/i18n/ro-RO/billing.json | 184 +++ web/i18n/ro-RO/billing.ts | 221 --- web/i18n/ro-RO/common.json | 622 ++++++++ web/i18n/ro-RO/common.ts | 792 ---------- web/i18n/ro-RO/custom.json | 22 + web/i18n/ro-RO/custom.ts | 32 - web/i18n/ro-RO/dataset-creation.json | 185 +++ web/i18n/ro-RO/dataset-creation.ts | 217 --- web/i18n/ro-RO/dataset-documents.json | 331 ++++ web/i18n/ro-RO/dataset-documents.ts | 408 ----- web/i18n/ro-RO/dataset-hit-testing.json | 28 + web/i18n/ro-RO/dataset-hit-testing.ts | 40 - web/i18n/ro-RO/dataset-pipeline.json | 95 ++ web/i18n/ro-RO/dataset-pipeline.ts | 163 -- web/i18n/ro-RO/dataset-settings.json | 44 + web/i18n/ro-RO/dataset-settings.ts | 52 - web/i18n/ro-RO/dataset.json | 181 +++ web/i18n/ro-RO/dataset.ts | 253 ---- web/i18n/ro-RO/education.json | 44 + web/i18n/ro-RO/education.ts | 76 - web/i18n/ro-RO/explore.json | 28 + web/i18n/ro-RO/explore.ts | 44 - web/i18n/ro-RO/layout.json | 4 + web/i18n/ro-RO/layout.ts | 8 - web/i18n/ro-RO/login.json | 115 ++ web/i18n/ro-RO/login.ts | 126 -- web/i18n/ro-RO/oauth.json | 19 + web/i18n/ro-RO/oauth.ts | 27 - web/i18n/ro-RO/pipeline.json | 24 + web/i18n/ro-RO/pipeline.ts | 40 - web/i18n/ro-RO/plugin-tags.json | 22 + web/i18n/ro-RO/plugin-tags.ts | 26 - web/i18n/ro-RO/plugin-trigger.json | 118 ++ web/i18n/ro-RO/plugin-trigger.ts | 186 --- web/i18n/ro-RO/plugin.json | 251 +++ web/i18n/ro-RO/plugin.ts | 325 ---- web/i18n/ro-RO/register.json | 1 + web/i18n/ro-RO/register.ts | 4 - web/i18n/ro-RO/run-log.json | 23 + web/i18n/ro-RO/run-log.ts | 31 - web/i18n/ro-RO/share.json | 62 + web/i18n/ro-RO/share.ts | 86 -- web/i18n/ro-RO/time.json | 32 + web/i18n/ro-RO/time.ts | 44 - web/i18n/ro-RO/tools.json | 205 +++ web/i18n/ro-RO/tools.ts | 264 ---- web/i18n/ro-RO/workflow.json | 1041 +++++++++++++ web/i18n/ro-RO/workflow.ts | 1296 ---------------- web/i18n/ru-RU/app-annotation.json | 70 + web/i18n/ru-RU/app-annotation.ts | 98 -- web/i18n/ru-RU/app-api.json | 72 + web/i18n/ru-RU/app-api.ts | 85 -- web/i18n/ru-RU/app-debug.json | 391 +++++ web/i18n/ru-RU/app-debug.ts | 573 ------- web/i18n/ru-RU/app-log.json | 84 + web/i18n/ru-RU/app-log.ts | 112 -- web/i18n/ru-RU/app-overview.json | 121 ++ web/i18n/ru-RU/app-overview.ts | 189 --- web/i18n/ru-RU/app.json | 283 ++++ web/i18n/ru-RU/app.ts | 351 ----- web/i18n/ru-RU/billing.json | 184 +++ web/i18n/ru-RU/billing.ts | 221 --- web/i18n/ru-RU/common.json | 622 ++++++++ web/i18n/ru-RU/common.ts | 792 ---------- web/i18n/ru-RU/custom.json | 22 + web/i18n/ru-RU/custom.ts | 32 - web/i18n/ru-RU/dataset-creation.json | 185 +++ web/i18n/ru-RU/dataset-creation.ts | 217 --- web/i18n/ru-RU/dataset-documents.json | 331 ++++ web/i18n/ru-RU/dataset-documents.ts | 408 ----- web/i18n/ru-RU/dataset-hit-testing.json | 28 + web/i18n/ru-RU/dataset-hit-testing.ts | 40 - web/i18n/ru-RU/dataset-pipeline.json | 95 ++ web/i18n/ru-RU/dataset-pipeline.ts | 163 -- web/i18n/ru-RU/dataset-settings.json | 44 + web/i18n/ru-RU/dataset-settings.ts | 52 - web/i18n/ru-RU/dataset.json | 181 +++ web/i18n/ru-RU/dataset.ts | 253 ---- web/i18n/ru-RU/education.json | 44 + web/i18n/ru-RU/education.ts | 76 - web/i18n/ru-RU/explore.json | 28 + web/i18n/ru-RU/explore.ts | 44 - web/i18n/ru-RU/layout.json | 4 + web/i18n/ru-RU/layout.ts | 8 - web/i18n/ru-RU/login.json | 115 ++ web/i18n/ru-RU/login.ts | 126 -- web/i18n/ru-RU/oauth.json | 19 + web/i18n/ru-RU/oauth.ts | 27 - web/i18n/ru-RU/pipeline.json | 24 + web/i18n/ru-RU/pipeline.ts | 40 - web/i18n/ru-RU/plugin-tags.json | 22 + web/i18n/ru-RU/plugin-tags.ts | 26 - web/i18n/ru-RU/plugin-trigger.json | 118 ++ web/i18n/ru-RU/plugin-trigger.ts | 186 --- web/i18n/ru-RU/plugin.json | 251 +++ web/i18n/ru-RU/plugin.ts | 325 ---- web/i18n/ru-RU/register.json | 1 + web/i18n/ru-RU/register.ts | 4 - web/i18n/ru-RU/run-log.json | 23 + web/i18n/ru-RU/run-log.ts | 31 - web/i18n/ru-RU/share.json | 62 + web/i18n/ru-RU/share.ts | 86 -- web/i18n/ru-RU/time.json | 32 + web/i18n/ru-RU/time.ts | 44 - web/i18n/ru-RU/tools.json | 205 +++ web/i18n/ru-RU/tools.ts | 264 ---- web/i18n/ru-RU/workflow.json | 1041 +++++++++++++ web/i18n/ru-RU/workflow.ts | 1296 ---------------- web/i18n/sl-SI/app-annotation.json | 70 + web/i18n/sl-SI/app-annotation.ts | 98 -- web/i18n/sl-SI/app-api.json | 72 + web/i18n/sl-SI/app-api.ts | 85 -- web/i18n/sl-SI/app-debug.json | 391 +++++ web/i18n/sl-SI/app-debug.ts | 586 ------- web/i18n/sl-SI/app-log.json | 84 + web/i18n/sl-SI/app-log.ts | 112 -- web/i18n/sl-SI/app-overview.json | 121 ++ web/i18n/sl-SI/app-overview.ts | 189 --- web/i18n/sl-SI/app.json | 283 ++++ web/i18n/sl-SI/app.ts | 351 ----- web/i18n/sl-SI/billing.json | 184 +++ web/i18n/sl-SI/billing.ts | 221 --- web/i18n/sl-SI/common.json | 622 ++++++++ web/i18n/sl-SI/common.ts | 792 ---------- web/i18n/sl-SI/custom.json | 22 + web/i18n/sl-SI/custom.ts | 32 - web/i18n/sl-SI/dataset-creation.json | 185 +++ web/i18n/sl-SI/dataset-creation.ts | 217 --- web/i18n/sl-SI/dataset-documents.json | 331 ++++ web/i18n/sl-SI/dataset-documents.ts | 408 ----- web/i18n/sl-SI/dataset-hit-testing.json | 28 + web/i18n/sl-SI/dataset-hit-testing.ts | 40 - web/i18n/sl-SI/dataset-pipeline.json | 95 ++ web/i18n/sl-SI/dataset-pipeline.ts | 163 -- web/i18n/sl-SI/dataset-settings.json | 44 + web/i18n/sl-SI/dataset-settings.ts | 52 - web/i18n/sl-SI/dataset.json | 181 +++ web/i18n/sl-SI/dataset.ts | 253 ---- web/i18n/sl-SI/education.json | 44 + web/i18n/sl-SI/education.ts | 76 - web/i18n/sl-SI/explore.json | 28 + web/i18n/sl-SI/explore.ts | 44 - web/i18n/sl-SI/layout.json | 4 + web/i18n/sl-SI/layout.ts | 8 - web/i18n/sl-SI/login.json | 115 ++ web/i18n/sl-SI/login.ts | 126 -- web/i18n/sl-SI/oauth.json | 19 + web/i18n/sl-SI/oauth.ts | 27 - web/i18n/sl-SI/pipeline.json | 24 + web/i18n/sl-SI/pipeline.ts | 40 - web/i18n/sl-SI/plugin-tags.json | 22 + web/i18n/sl-SI/plugin-tags.ts | 26 - web/i18n/sl-SI/plugin-trigger.json | 118 ++ web/i18n/sl-SI/plugin-trigger.ts | 186 --- web/i18n/sl-SI/plugin.json | 251 +++ web/i18n/sl-SI/plugin.ts | 325 ---- web/i18n/sl-SI/register.json | 1 + web/i18n/sl-SI/register.ts | 4 - web/i18n/sl-SI/run-log.json | 23 + web/i18n/sl-SI/run-log.ts | 31 - web/i18n/sl-SI/share.json | 62 + web/i18n/sl-SI/share.ts | 83 - web/i18n/sl-SI/time.json | 32 + web/i18n/sl-SI/time.ts | 44 - web/i18n/sl-SI/tools.json | 205 +++ web/i18n/sl-SI/tools.ts | 264 ---- web/i18n/sl-SI/workflow.json | 1041 +++++++++++++ web/i18n/sl-SI/workflow.ts | 1296 ---------------- web/i18n/th-TH/app-annotation.json | 70 + web/i18n/th-TH/app-annotation.ts | 98 -- web/i18n/th-TH/app-api.json | 72 + web/i18n/th-TH/app-api.ts | 85 -- web/i18n/th-TH/app-debug.json | 391 +++++ web/i18n/th-TH/app-debug.ts | 564 ------- web/i18n/th-TH/app-log.json | 84 + web/i18n/th-TH/app-log.ts | 112 -- web/i18n/th-TH/app-overview.json | 121 ++ web/i18n/th-TH/app-overview.ts | 189 --- web/i18n/th-TH/app.json | 283 ++++ web/i18n/th-TH/app.ts | 347 ----- web/i18n/th-TH/billing.json | 184 +++ web/i18n/th-TH/billing.ts | 221 --- web/i18n/th-TH/common.json | 622 ++++++++ web/i18n/th-TH/common.ts | 787 ---------- web/i18n/th-TH/custom.json | 22 + web/i18n/th-TH/custom.ts | 32 - web/i18n/th-TH/dataset-creation.json | 185 +++ web/i18n/th-TH/dataset-creation.ts | 217 --- web/i18n/th-TH/dataset-documents.json | 331 ++++ web/i18n/th-TH/dataset-documents.ts | 407 ----- web/i18n/th-TH/dataset-hit-testing.json | 28 + web/i18n/th-TH/dataset-hit-testing.ts | 40 - web/i18n/th-TH/dataset-pipeline.json | 95 ++ web/i18n/th-TH/dataset-pipeline.ts | 163 -- web/i18n/th-TH/dataset-settings.json | 44 + web/i18n/th-TH/dataset-settings.ts | 52 - web/i18n/th-TH/dataset.json | 181 +++ web/i18n/th-TH/dataset.ts | 252 --- web/i18n/th-TH/education.json | 44 + web/i18n/th-TH/education.ts | 76 - web/i18n/th-TH/explore.json | 28 + web/i18n/th-TH/explore.ts | 44 - web/i18n/th-TH/layout.json | 4 + web/i18n/th-TH/layout.ts | 8 - web/i18n/th-TH/login.json | 115 ++ web/i18n/th-TH/login.ts | 126 -- web/i18n/th-TH/oauth.json | 19 + web/i18n/th-TH/oauth.ts | 27 - web/i18n/th-TH/pipeline.json | 24 + web/i18n/th-TH/pipeline.ts | 40 - web/i18n/th-TH/plugin-tags.json | 22 + web/i18n/th-TH/plugin-tags.ts | 26 - web/i18n/th-TH/plugin-trigger.json | 118 ++ web/i18n/th-TH/plugin-trigger.ts | 186 --- web/i18n/th-TH/plugin.json | 251 +++ web/i18n/th-TH/plugin.ts | 325 ---- web/i18n/th-TH/register.json | 1 + web/i18n/th-TH/register.ts | 3 - web/i18n/th-TH/run-log.json | 23 + web/i18n/th-TH/run-log.ts | 31 - web/i18n/th-TH/share.json | 62 + web/i18n/th-TH/share.ts | 82 - web/i18n/th-TH/time.json | 32 + web/i18n/th-TH/time.ts | 44 - web/i18n/th-TH/tools.json | 205 +++ web/i18n/th-TH/tools.ts | 264 ---- web/i18n/th-TH/workflow.json | 1041 +++++++++++++ web/i18n/th-TH/workflow.ts | 1296 ---------------- web/i18n/tr-TR/app-annotation.json | 70 + web/i18n/tr-TR/app-annotation.ts | 98 -- web/i18n/tr-TR/app-api.json | 72 + web/i18n/tr-TR/app-api.ts | 85 -- web/i18n/tr-TR/app-debug.json | 391 +++++ web/i18n/tr-TR/app-debug.ts | 571 ------- web/i18n/tr-TR/app-log.json | 84 + web/i18n/tr-TR/app-log.ts | 112 -- web/i18n/tr-TR/app-overview.json | 121 ++ web/i18n/tr-TR/app-overview.ts | 189 --- web/i18n/tr-TR/app.json | 283 ++++ web/i18n/tr-TR/app.ts | 347 ----- web/i18n/tr-TR/billing.json | 184 +++ web/i18n/tr-TR/billing.ts | 221 --- web/i18n/tr-TR/common.json | 622 ++++++++ web/i18n/tr-TR/common.ts | 792 ---------- web/i18n/tr-TR/custom.json | 22 + web/i18n/tr-TR/custom.ts | 32 - web/i18n/tr-TR/dataset-creation.json | 185 +++ web/i18n/tr-TR/dataset-creation.ts | 217 --- web/i18n/tr-TR/dataset-documents.json | 331 ++++ web/i18n/tr-TR/dataset-documents.ts | 407 ----- web/i18n/tr-TR/dataset-hit-testing.json | 28 + web/i18n/tr-TR/dataset-hit-testing.ts | 40 - web/i18n/tr-TR/dataset-pipeline.json | 95 ++ web/i18n/tr-TR/dataset-pipeline.ts | 163 -- web/i18n/tr-TR/dataset-settings.json | 44 + web/i18n/tr-TR/dataset-settings.ts | 52 - web/i18n/tr-TR/dataset.json | 181 +++ web/i18n/tr-TR/dataset.ts | 253 ---- web/i18n/tr-TR/education.json | 44 + web/i18n/tr-TR/education.ts | 76 - web/i18n/tr-TR/explore.json | 28 + web/i18n/tr-TR/explore.ts | 44 - web/i18n/tr-TR/layout.json | 4 + web/i18n/tr-TR/layout.ts | 8 - web/i18n/tr-TR/login.json | 115 ++ web/i18n/tr-TR/login.ts | 126 -- web/i18n/tr-TR/oauth.json | 19 + web/i18n/tr-TR/oauth.ts | 27 - web/i18n/tr-TR/pipeline.json | 24 + web/i18n/tr-TR/pipeline.ts | 40 - web/i18n/tr-TR/plugin-tags.json | 22 + web/i18n/tr-TR/plugin-tags.ts | 26 - web/i18n/tr-TR/plugin-trigger.json | 118 ++ web/i18n/tr-TR/plugin-trigger.ts | 186 --- web/i18n/tr-TR/plugin.json | 251 +++ web/i18n/tr-TR/plugin.ts | 325 ---- web/i18n/tr-TR/register.json | 1 + web/i18n/tr-TR/register.ts | 3 - web/i18n/tr-TR/run-log.json | 23 + web/i18n/tr-TR/run-log.ts | 31 - web/i18n/tr-TR/share.json | 62 + web/i18n/tr-TR/share.ts | 82 - web/i18n/tr-TR/time.json | 32 + web/i18n/tr-TR/time.ts | 44 - web/i18n/tr-TR/tools.json | 205 +++ web/i18n/tr-TR/tools.ts | 264 ---- web/i18n/tr-TR/workflow.json | 1041 +++++++++++++ web/i18n/tr-TR/workflow.ts | 1296 ---------------- web/i18n/uk-UA/app-annotation.json | 70 + web/i18n/uk-UA/app-annotation.ts | 98 -- web/i18n/uk-UA/app-api.json | 72 + web/i18n/uk-UA/app-api.ts | 85 -- web/i18n/uk-UA/app-debug.json | 391 +++++ web/i18n/uk-UA/app-debug.ts | 597 -------- web/i18n/uk-UA/app-log.json | 84 + web/i18n/uk-UA/app-log.ts | 112 -- web/i18n/uk-UA/app-overview.json | 121 ++ web/i18n/uk-UA/app-overview.ts | 189 --- web/i18n/uk-UA/app.json | 283 ++++ web/i18n/uk-UA/app.ts | 351 ----- web/i18n/uk-UA/billing.json | 184 +++ web/i18n/uk-UA/billing.ts | 221 --- web/i18n/uk-UA/common.json | 622 ++++++++ web/i18n/uk-UA/common.ts | 793 ---------- web/i18n/uk-UA/custom.json | 22 + web/i18n/uk-UA/custom.ts | 32 - web/i18n/uk-UA/dataset-creation.json | 185 +++ web/i18n/uk-UA/dataset-creation.ts | 217 --- web/i18n/uk-UA/dataset-documents.json | 331 ++++ web/i18n/uk-UA/dataset-documents.ts | 407 ----- web/i18n/uk-UA/dataset-hit-testing.json | 28 + web/i18n/uk-UA/dataset-hit-testing.ts | 40 - web/i18n/uk-UA/dataset-pipeline.json | 95 ++ web/i18n/uk-UA/dataset-pipeline.ts | 163 -- web/i18n/uk-UA/dataset-settings.json | 44 + web/i18n/uk-UA/dataset-settings.ts | 52 - web/i18n/uk-UA/dataset.json | 181 +++ web/i18n/uk-UA/dataset.ts | 254 ---- web/i18n/uk-UA/education.json | 44 + web/i18n/uk-UA/education.ts | 76 - web/i18n/uk-UA/explore.json | 28 + web/i18n/uk-UA/explore.ts | 44 - web/i18n/uk-UA/layout.json | 4 + web/i18n/uk-UA/layout.ts | 8 - web/i18n/uk-UA/login.json | 115 ++ web/i18n/uk-UA/login.ts | 126 -- web/i18n/uk-UA/oauth.json | 19 + web/i18n/uk-UA/oauth.ts | 27 - web/i18n/uk-UA/pipeline.json | 24 + web/i18n/uk-UA/pipeline.ts | 40 - web/i18n/uk-UA/plugin-tags.json | 22 + web/i18n/uk-UA/plugin-tags.ts | 26 - web/i18n/uk-UA/plugin-trigger.json | 118 ++ web/i18n/uk-UA/plugin-trigger.ts | 186 --- web/i18n/uk-UA/plugin.json | 251 +++ web/i18n/uk-UA/plugin.ts | 325 ---- web/i18n/uk-UA/register.json | 1 + web/i18n/uk-UA/register.ts | 4 - web/i18n/uk-UA/run-log.json | 23 + web/i18n/uk-UA/run-log.ts | 31 - web/i18n/uk-UA/share.json | 62 + web/i18n/uk-UA/share.ts | 82 - web/i18n/uk-UA/time.json | 32 + web/i18n/uk-UA/time.ts | 44 - web/i18n/uk-UA/tools.json | 205 +++ web/i18n/uk-UA/tools.ts | 264 ---- web/i18n/uk-UA/workflow.json | 1041 +++++++++++++ web/i18n/uk-UA/workflow.ts | 1296 ---------------- web/i18n/vi-VN/app-annotation.json | 70 + web/i18n/vi-VN/app-annotation.ts | 98 -- web/i18n/vi-VN/app-api.json | 72 + web/i18n/vi-VN/app-api.ts | 85 -- web/i18n/vi-VN/app-debug.json | 391 +++++ web/i18n/vi-VN/app-debug.ts | 566 ------- web/i18n/vi-VN/app-log.json | 84 + web/i18n/vi-VN/app-log.ts | 112 -- web/i18n/vi-VN/app-overview.json | 121 ++ web/i18n/vi-VN/app-overview.ts | 189 --- web/i18n/vi-VN/app.json | 283 ++++ web/i18n/vi-VN/app.ts | 351 ----- web/i18n/vi-VN/billing.json | 184 +++ web/i18n/vi-VN/billing.ts | 221 --- web/i18n/vi-VN/common.json | 622 ++++++++ web/i18n/vi-VN/common.ts | 792 ---------- web/i18n/vi-VN/custom.json | 22 + web/i18n/vi-VN/custom.ts | 32 - web/i18n/vi-VN/dataset-creation.json | 185 +++ web/i18n/vi-VN/dataset-creation.ts | 217 --- web/i18n/vi-VN/dataset-documents.json | 331 ++++ web/i18n/vi-VN/dataset-documents.ts | 407 ----- web/i18n/vi-VN/dataset-hit-testing.json | 28 + web/i18n/vi-VN/dataset-hit-testing.ts | 40 - web/i18n/vi-VN/dataset-pipeline.json | 95 ++ web/i18n/vi-VN/dataset-pipeline.ts | 163 -- web/i18n/vi-VN/dataset-settings.json | 44 + web/i18n/vi-VN/dataset-settings.ts | 52 - web/i18n/vi-VN/dataset.json | 181 +++ web/i18n/vi-VN/dataset.ts | 253 ---- web/i18n/vi-VN/education.json | 44 + web/i18n/vi-VN/education.ts | 76 - web/i18n/vi-VN/explore.json | 28 + web/i18n/vi-VN/explore.ts | 44 - web/i18n/vi-VN/layout.json | 4 + web/i18n/vi-VN/layout.ts | 8 - web/i18n/vi-VN/login.json | 115 ++ web/i18n/vi-VN/login.ts | 126 -- web/i18n/vi-VN/oauth.json | 19 + web/i18n/vi-VN/oauth.ts | 27 - web/i18n/vi-VN/pipeline.json | 24 + web/i18n/vi-VN/pipeline.ts | 40 - web/i18n/vi-VN/plugin-tags.json | 22 + web/i18n/vi-VN/plugin-tags.ts | 26 - web/i18n/vi-VN/plugin-trigger.json | 118 ++ web/i18n/vi-VN/plugin-trigger.ts | 186 --- web/i18n/vi-VN/plugin.json | 251 +++ web/i18n/vi-VN/plugin.ts | 325 ---- web/i18n/vi-VN/register.json | 1 + web/i18n/vi-VN/register.ts | 4 - web/i18n/vi-VN/run-log.json | 23 + web/i18n/vi-VN/run-log.ts | 31 - web/i18n/vi-VN/share.json | 62 + web/i18n/vi-VN/share.ts | 82 - web/i18n/vi-VN/time.json | 32 + web/i18n/vi-VN/time.ts | 44 - web/i18n/vi-VN/tools.json | 205 +++ web/i18n/vi-VN/tools.ts | 264 ---- web/i18n/vi-VN/workflow.json | 1041 +++++++++++++ web/i18n/vi-VN/workflow.ts | 1296 ---------------- web/i18n/zh-Hans/app-annotation.json | 70 + web/i18n/zh-Hans/app-annotation.ts | 98 -- web/i18n/zh-Hans/app-api.json | 72 + web/i18n/zh-Hans/app-api.ts | 86 -- web/i18n/zh-Hans/app-debug.json | 391 +++++ web/i18n/zh-Hans/app-debug.ts | 570 ------- web/i18n/zh-Hans/app-log.json | 84 + web/i18n/zh-Hans/app-log.ts | 112 -- web/i18n/zh-Hans/app-overview.json | 121 ++ web/i18n/zh-Hans/app-overview.ts | 189 --- web/i18n/zh-Hans/app.json | 283 ++++ web/i18n/zh-Hans/app.ts | 356 ----- web/i18n/zh-Hans/billing.json | 184 +++ web/i18n/zh-Hans/billing.ts | 221 --- web/i18n/zh-Hans/common.json | 622 ++++++++ web/i18n/zh-Hans/common.ts | 798 ---------- web/i18n/zh-Hans/custom.json | 22 + web/i18n/zh-Hans/custom.ts | 32 - web/i18n/zh-Hans/dataset-creation.json | 185 +++ web/i18n/zh-Hans/dataset-creation.ts | 217 --- web/i18n/zh-Hans/dataset-documents.json | 331 ++++ web/i18n/zh-Hans/dataset-documents.ts | 407 ----- web/i18n/zh-Hans/dataset-hit-testing.json | 28 + web/i18n/zh-Hans/dataset-hit-testing.ts | 40 - web/i18n/zh-Hans/dataset-pipeline.json | 95 ++ web/i18n/zh-Hans/dataset-pipeline.ts | 163 -- web/i18n/zh-Hans/dataset-settings.json | 44 + web/i18n/zh-Hans/dataset-settings.ts | 52 - web/i18n/zh-Hans/dataset.json | 182 +++ web/i18n/zh-Hans/dataset.ts | 253 ---- web/i18n/zh-Hans/education.json | 44 + web/i18n/zh-Hans/education.ts | 76 - web/i18n/zh-Hans/explore.json | 28 + web/i18n/zh-Hans/explore.ts | 44 - web/i18n/zh-Hans/layout.json | 4 + web/i18n/zh-Hans/layout.ts | 8 - web/i18n/zh-Hans/login.json | 115 ++ web/i18n/zh-Hans/login.ts | 127 -- web/i18n/zh-Hans/oauth.json | 19 + web/i18n/zh-Hans/oauth.ts | 27 - web/i18n/zh-Hans/pipeline.json | 24 + web/i18n/zh-Hans/pipeline.ts | 40 - web/i18n/zh-Hans/plugin-tags.json | 22 + web/i18n/zh-Hans/plugin-tags.ts | 26 - web/i18n/zh-Hans/plugin-trigger.json | 118 ++ web/i18n/zh-Hans/plugin-trigger.ts | 187 --- web/i18n/zh-Hans/plugin.json | 251 +++ web/i18n/zh-Hans/plugin.ts | 325 ---- web/i18n/zh-Hans/register.json | 1 + web/i18n/zh-Hans/register.ts | 4 - web/i18n/zh-Hans/run-log.json | 23 + web/i18n/zh-Hans/run-log.ts | 31 - web/i18n/zh-Hans/share.json | 62 + web/i18n/zh-Hans/share.ts | 82 - web/i18n/zh-Hans/time.json | 32 + web/i18n/zh-Hans/time.ts | 45 - web/i18n/zh-Hans/tools.json | 205 +++ web/i18n/zh-Hans/tools.ts | 265 ---- web/i18n/zh-Hans/workflow.json | 1041 +++++++++++++ web/i18n/zh-Hans/workflow.ts | 1299 ---------------- web/i18n/zh-Hant/app-annotation.json | 70 + web/i18n/zh-Hant/app-annotation.ts | 98 -- web/i18n/zh-Hant/app-api.json | 72 + web/i18n/zh-Hant/app-api.ts | 85 -- web/i18n/zh-Hant/app-debug.json | 391 +++++ web/i18n/zh-Hant/app-debug.ts | 567 ------- web/i18n/zh-Hant/app-log.json | 84 + web/i18n/zh-Hant/app-log.ts | 112 -- web/i18n/zh-Hant/app-overview.json | 121 ++ web/i18n/zh-Hant/app-overview.ts | 189 --- web/i18n/zh-Hant/app.json | 283 ++++ web/i18n/zh-Hant/app.ts | 350 ----- web/i18n/zh-Hant/billing.json | 184 +++ web/i18n/zh-Hant/billing.ts | 221 --- web/i18n/zh-Hant/common.json | 622 ++++++++ web/i18n/zh-Hant/common.ts | 792 ---------- web/i18n/zh-Hant/custom.json | 22 + web/i18n/zh-Hant/custom.ts | 32 - web/i18n/zh-Hant/dataset-creation.json | 185 +++ web/i18n/zh-Hant/dataset-creation.ts | 217 --- web/i18n/zh-Hant/dataset-documents.json | 331 ++++ web/i18n/zh-Hant/dataset-documents.ts | 407 ----- web/i18n/zh-Hant/dataset-hit-testing.json | 28 + web/i18n/zh-Hant/dataset-hit-testing.ts | 40 - web/i18n/zh-Hant/dataset-pipeline.json | 95 ++ web/i18n/zh-Hant/dataset-pipeline.ts | 163 -- web/i18n/zh-Hant/dataset-settings.json | 44 + web/i18n/zh-Hant/dataset-settings.ts | 52 - web/i18n/zh-Hant/dataset.json | 181 +++ web/i18n/zh-Hant/dataset.ts | 253 ---- web/i18n/zh-Hant/education.json | 44 + web/i18n/zh-Hant/education.ts | 76 - web/i18n/zh-Hant/explore.json | 28 + web/i18n/zh-Hant/explore.ts | 44 - web/i18n/zh-Hant/layout.json | 4 + web/i18n/zh-Hant/layout.ts | 8 - web/i18n/zh-Hant/login.json | 115 ++ web/i18n/zh-Hant/login.ts | 126 -- web/i18n/zh-Hant/oauth.json | 19 + web/i18n/zh-Hant/oauth.ts | 27 - web/i18n/zh-Hant/pipeline.json | 24 + web/i18n/zh-Hant/pipeline.ts | 40 - web/i18n/zh-Hant/plugin-tags.json | 22 + web/i18n/zh-Hant/plugin-tags.ts | 26 - web/i18n/zh-Hant/plugin-trigger.json | 118 ++ web/i18n/zh-Hant/plugin-trigger.ts | 186 --- web/i18n/zh-Hant/plugin.json | 251 +++ web/i18n/zh-Hant/plugin.ts | 325 ---- web/i18n/zh-Hant/register.json | 1 + web/i18n/zh-Hant/register.ts | 4 - web/i18n/zh-Hant/run-log.json | 23 + web/i18n/zh-Hant/run-log.ts | 31 - web/i18n/zh-Hant/share.json | 62 + web/i18n/zh-Hant/share.ts | 82 - web/i18n/zh-Hant/time.json | 32 + web/i18n/zh-Hant/time.ts | 44 - web/i18n/zh-Hant/tools.json | 205 +++ web/i18n/zh-Hant/tools.ts | 264 ---- web/i18n/zh-Hant/workflow.json | 1041 +++++++++++++ web/i18n/zh-Hant/workflow.ts | 1296 ---------------- web/knip.config.ts | 3 +- web/models/datasets.ts | 5 +- web/package.json | 5 +- web/pnpm-lock.yaml | 144 +- web/scripts/analyze-component.js | 3 +- web/scripts/analyze-i18n-diff.ts | 406 +++++ web/scripts/component-analyzer.js | 6 +- web/scripts/refactor-component.js | 9 +- web/service/annotation.ts | 5 +- web/service/apps.ts | 1 - web/service/plugins.ts | 5 +- web/service/use-common.ts | 2 +- web/service/use-share.spec.tsx | 231 +++ web/service/use-share.ts | 115 +- web/types/i18n.d.ts | 45 +- web/utils/var.ts | 15 +- web/vitest.setup.ts | 11 +- 2571 files changed, 112276 insertions(+), 143074 deletions(-) rename web/app/components/{swr-initializer.tsx => app-initializer.tsx} (80%) create mode 100644 web/app/components/base/chat/chat-with-history/hooks.spec.tsx create mode 100644 web/app/components/base/chat/embedded-chatbot/hooks.spec.tsx create mode 100644 web/eslint-rules/index.js create mode 100644 web/eslint-rules/namespaces.js create mode 100644 web/eslint-rules/rules/no-as-any-in-t.js create mode 100644 web/eslint-rules/rules/no-legacy-namespace-prefix.js create mode 100644 web/eslint-rules/rules/require-ns-option.js create mode 100644 web/i18n/ar-TN/app-annotation.json delete mode 100644 web/i18n/ar-TN/app-annotation.ts create mode 100644 web/i18n/ar-TN/app-api.json delete mode 100644 web/i18n/ar-TN/app-api.ts create mode 100644 web/i18n/ar-TN/app-debug.json delete mode 100644 web/i18n/ar-TN/app-debug.ts create mode 100644 web/i18n/ar-TN/app-log.json delete mode 100644 web/i18n/ar-TN/app-log.ts create mode 100644 web/i18n/ar-TN/app-overview.json delete mode 100644 web/i18n/ar-TN/app-overview.ts create mode 100644 web/i18n/ar-TN/app.json delete mode 100644 web/i18n/ar-TN/app.ts create mode 100644 web/i18n/ar-TN/billing.json delete mode 100644 web/i18n/ar-TN/billing.ts create mode 100644 web/i18n/ar-TN/common.json delete mode 100644 web/i18n/ar-TN/common.ts create mode 100644 web/i18n/ar-TN/custom.json delete mode 100644 web/i18n/ar-TN/custom.ts create mode 100644 web/i18n/ar-TN/dataset-creation.json delete mode 100644 web/i18n/ar-TN/dataset-creation.ts create mode 100644 web/i18n/ar-TN/dataset-documents.json delete mode 100644 web/i18n/ar-TN/dataset-documents.ts create mode 100644 web/i18n/ar-TN/dataset-hit-testing.json delete mode 100644 web/i18n/ar-TN/dataset-hit-testing.ts create mode 100644 web/i18n/ar-TN/dataset-pipeline.json delete mode 100644 web/i18n/ar-TN/dataset-pipeline.ts create mode 100644 web/i18n/ar-TN/dataset-settings.json delete mode 100644 web/i18n/ar-TN/dataset-settings.ts create mode 100644 web/i18n/ar-TN/dataset.json delete mode 100644 web/i18n/ar-TN/dataset.ts create mode 100644 web/i18n/ar-TN/education.json delete mode 100644 web/i18n/ar-TN/education.ts create mode 100644 web/i18n/ar-TN/explore.json delete mode 100644 web/i18n/ar-TN/explore.ts create mode 100644 web/i18n/ar-TN/layout.json delete mode 100644 web/i18n/ar-TN/layout.ts create mode 100644 web/i18n/ar-TN/login.json delete mode 100644 web/i18n/ar-TN/login.ts create mode 100644 web/i18n/ar-TN/oauth.json delete mode 100644 web/i18n/ar-TN/oauth.ts create mode 100644 web/i18n/ar-TN/pipeline.json delete mode 100644 web/i18n/ar-TN/pipeline.ts create mode 100644 web/i18n/ar-TN/plugin-tags.json delete mode 100644 web/i18n/ar-TN/plugin-tags.ts create mode 100644 web/i18n/ar-TN/plugin-trigger.json delete mode 100644 web/i18n/ar-TN/plugin-trigger.ts create mode 100644 web/i18n/ar-TN/plugin.json delete mode 100644 web/i18n/ar-TN/plugin.ts create mode 100644 web/i18n/ar-TN/register.json delete mode 100644 web/i18n/ar-TN/register.ts create mode 100644 web/i18n/ar-TN/run-log.json delete mode 100644 web/i18n/ar-TN/run-log.ts create mode 100644 web/i18n/ar-TN/share.json delete mode 100644 web/i18n/ar-TN/share.ts create mode 100644 web/i18n/ar-TN/time.json delete mode 100644 web/i18n/ar-TN/time.ts create mode 100644 web/i18n/ar-TN/tools.json delete mode 100644 web/i18n/ar-TN/tools.ts create mode 100644 web/i18n/ar-TN/workflow.json delete mode 100644 web/i18n/ar-TN/workflow.ts create mode 100644 web/i18n/de-DE/app-annotation.json delete mode 100644 web/i18n/de-DE/app-annotation.ts create mode 100644 web/i18n/de-DE/app-api.json delete mode 100644 web/i18n/de-DE/app-api.ts create mode 100644 web/i18n/de-DE/app-debug.json delete mode 100644 web/i18n/de-DE/app-debug.ts create mode 100644 web/i18n/de-DE/app-log.json delete mode 100644 web/i18n/de-DE/app-log.ts create mode 100644 web/i18n/de-DE/app-overview.json delete mode 100644 web/i18n/de-DE/app-overview.ts create mode 100644 web/i18n/de-DE/app.json delete mode 100644 web/i18n/de-DE/app.ts create mode 100644 web/i18n/de-DE/billing.json delete mode 100644 web/i18n/de-DE/billing.ts create mode 100644 web/i18n/de-DE/common.json delete mode 100644 web/i18n/de-DE/common.ts create mode 100644 web/i18n/de-DE/custom.json delete mode 100644 web/i18n/de-DE/custom.ts create mode 100644 web/i18n/de-DE/dataset-creation.json delete mode 100644 web/i18n/de-DE/dataset-creation.ts create mode 100644 web/i18n/de-DE/dataset-documents.json delete mode 100644 web/i18n/de-DE/dataset-documents.ts create mode 100644 web/i18n/de-DE/dataset-hit-testing.json delete mode 100644 web/i18n/de-DE/dataset-hit-testing.ts create mode 100644 web/i18n/de-DE/dataset-pipeline.json delete mode 100644 web/i18n/de-DE/dataset-pipeline.ts create mode 100644 web/i18n/de-DE/dataset-settings.json delete mode 100644 web/i18n/de-DE/dataset-settings.ts create mode 100644 web/i18n/de-DE/dataset.json delete mode 100644 web/i18n/de-DE/dataset.ts create mode 100644 web/i18n/de-DE/education.json delete mode 100644 web/i18n/de-DE/education.ts create mode 100644 web/i18n/de-DE/explore.json delete mode 100644 web/i18n/de-DE/explore.ts create mode 100644 web/i18n/de-DE/layout.json delete mode 100644 web/i18n/de-DE/layout.ts create mode 100644 web/i18n/de-DE/login.json delete mode 100644 web/i18n/de-DE/login.ts create mode 100644 web/i18n/de-DE/oauth.json delete mode 100644 web/i18n/de-DE/oauth.ts create mode 100644 web/i18n/de-DE/pipeline.json delete mode 100644 web/i18n/de-DE/pipeline.ts create mode 100644 web/i18n/de-DE/plugin-tags.json delete mode 100644 web/i18n/de-DE/plugin-tags.ts create mode 100644 web/i18n/de-DE/plugin-trigger.json delete mode 100644 web/i18n/de-DE/plugin-trigger.ts create mode 100644 web/i18n/de-DE/plugin.json delete mode 100644 web/i18n/de-DE/plugin.ts create mode 100644 web/i18n/de-DE/register.json delete mode 100644 web/i18n/de-DE/register.ts create mode 100644 web/i18n/de-DE/run-log.json delete mode 100644 web/i18n/de-DE/run-log.ts create mode 100644 web/i18n/de-DE/share.json delete mode 100644 web/i18n/de-DE/share.ts create mode 100644 web/i18n/de-DE/time.json delete mode 100644 web/i18n/de-DE/time.ts create mode 100644 web/i18n/de-DE/tools.json delete mode 100644 web/i18n/de-DE/tools.ts create mode 100644 web/i18n/de-DE/workflow.json delete mode 100644 web/i18n/de-DE/workflow.ts create mode 100644 web/i18n/en-US/app-annotation.json delete mode 100644 web/i18n/en-US/app-annotation.ts create mode 100644 web/i18n/en-US/app-api.json delete mode 100644 web/i18n/en-US/app-api.ts create mode 100644 web/i18n/en-US/app-debug.json delete mode 100644 web/i18n/en-US/app-debug.ts create mode 100644 web/i18n/en-US/app-log.json delete mode 100644 web/i18n/en-US/app-log.ts create mode 100644 web/i18n/en-US/app-overview.json delete mode 100644 web/i18n/en-US/app-overview.ts create mode 100644 web/i18n/en-US/app.json delete mode 100644 web/i18n/en-US/app.ts create mode 100644 web/i18n/en-US/billing.json delete mode 100644 web/i18n/en-US/billing.ts create mode 100644 web/i18n/en-US/common.json delete mode 100644 web/i18n/en-US/common.ts create mode 100644 web/i18n/en-US/custom.json delete mode 100644 web/i18n/en-US/custom.ts create mode 100644 web/i18n/en-US/dataset-creation.json delete mode 100644 web/i18n/en-US/dataset-creation.ts create mode 100644 web/i18n/en-US/dataset-documents.json delete mode 100644 web/i18n/en-US/dataset-documents.ts create mode 100644 web/i18n/en-US/dataset-hit-testing.json delete mode 100644 web/i18n/en-US/dataset-hit-testing.ts create mode 100644 web/i18n/en-US/dataset-pipeline.json delete mode 100644 web/i18n/en-US/dataset-pipeline.ts create mode 100644 web/i18n/en-US/dataset-settings.json delete mode 100644 web/i18n/en-US/dataset-settings.ts create mode 100644 web/i18n/en-US/dataset.json delete mode 100644 web/i18n/en-US/dataset.ts create mode 100644 web/i18n/en-US/education.json delete mode 100644 web/i18n/en-US/education.ts create mode 100644 web/i18n/en-US/explore.json delete mode 100644 web/i18n/en-US/explore.ts create mode 100644 web/i18n/en-US/layout.json delete mode 100644 web/i18n/en-US/layout.ts create mode 100644 web/i18n/en-US/login.json delete mode 100644 web/i18n/en-US/login.ts create mode 100644 web/i18n/en-US/oauth.json delete mode 100644 web/i18n/en-US/oauth.ts create mode 100644 web/i18n/en-US/pipeline.json delete mode 100644 web/i18n/en-US/pipeline.ts create mode 100644 web/i18n/en-US/plugin-tags.json delete mode 100644 web/i18n/en-US/plugin-tags.ts create mode 100644 web/i18n/en-US/plugin-trigger.json delete mode 100644 web/i18n/en-US/plugin-trigger.ts create mode 100644 web/i18n/en-US/plugin.json delete mode 100644 web/i18n/en-US/plugin.ts create mode 100644 web/i18n/en-US/register.json delete mode 100644 web/i18n/en-US/register.ts create mode 100644 web/i18n/en-US/run-log.json delete mode 100644 web/i18n/en-US/run-log.ts create mode 100644 web/i18n/en-US/share.json delete mode 100644 web/i18n/en-US/share.ts create mode 100644 web/i18n/en-US/time.json delete mode 100644 web/i18n/en-US/time.ts create mode 100644 web/i18n/en-US/tools.json delete mode 100644 web/i18n/en-US/tools.ts create mode 100644 web/i18n/en-US/workflow.json delete mode 100644 web/i18n/en-US/workflow.ts create mode 100644 web/i18n/es-ES/app-annotation.json delete mode 100644 web/i18n/es-ES/app-annotation.ts create mode 100644 web/i18n/es-ES/app-api.json delete mode 100644 web/i18n/es-ES/app-api.ts create mode 100644 web/i18n/es-ES/app-debug.json delete mode 100644 web/i18n/es-ES/app-debug.ts create mode 100644 web/i18n/es-ES/app-log.json delete mode 100644 web/i18n/es-ES/app-log.ts create mode 100644 web/i18n/es-ES/app-overview.json delete mode 100644 web/i18n/es-ES/app-overview.ts create mode 100644 web/i18n/es-ES/app.json delete mode 100644 web/i18n/es-ES/app.ts create mode 100644 web/i18n/es-ES/billing.json delete mode 100644 web/i18n/es-ES/billing.ts create mode 100644 web/i18n/es-ES/common.json delete mode 100644 web/i18n/es-ES/common.ts create mode 100644 web/i18n/es-ES/custom.json delete mode 100644 web/i18n/es-ES/custom.ts create mode 100644 web/i18n/es-ES/dataset-creation.json delete mode 100644 web/i18n/es-ES/dataset-creation.ts create mode 100644 web/i18n/es-ES/dataset-documents.json delete mode 100644 web/i18n/es-ES/dataset-documents.ts create mode 100644 web/i18n/es-ES/dataset-hit-testing.json delete mode 100644 web/i18n/es-ES/dataset-hit-testing.ts create mode 100644 web/i18n/es-ES/dataset-pipeline.json delete mode 100644 web/i18n/es-ES/dataset-pipeline.ts create mode 100644 web/i18n/es-ES/dataset-settings.json delete mode 100644 web/i18n/es-ES/dataset-settings.ts create mode 100644 web/i18n/es-ES/dataset.json delete mode 100644 web/i18n/es-ES/dataset.ts create mode 100644 web/i18n/es-ES/education.json delete mode 100644 web/i18n/es-ES/education.ts create mode 100644 web/i18n/es-ES/explore.json delete mode 100644 web/i18n/es-ES/explore.ts create mode 100644 web/i18n/es-ES/layout.json delete mode 100644 web/i18n/es-ES/layout.ts create mode 100644 web/i18n/es-ES/login.json delete mode 100644 web/i18n/es-ES/login.ts create mode 100644 web/i18n/es-ES/oauth.json delete mode 100644 web/i18n/es-ES/oauth.ts create mode 100644 web/i18n/es-ES/pipeline.json delete mode 100644 web/i18n/es-ES/pipeline.ts create mode 100644 web/i18n/es-ES/plugin-tags.json delete mode 100644 web/i18n/es-ES/plugin-tags.ts create mode 100644 web/i18n/es-ES/plugin-trigger.json delete mode 100644 web/i18n/es-ES/plugin-trigger.ts create mode 100644 web/i18n/es-ES/plugin.json delete mode 100644 web/i18n/es-ES/plugin.ts create mode 100644 web/i18n/es-ES/register.json delete mode 100644 web/i18n/es-ES/register.ts create mode 100644 web/i18n/es-ES/run-log.json delete mode 100644 web/i18n/es-ES/run-log.ts create mode 100644 web/i18n/es-ES/share.json delete mode 100644 web/i18n/es-ES/share.ts create mode 100644 web/i18n/es-ES/time.json delete mode 100644 web/i18n/es-ES/time.ts create mode 100644 web/i18n/es-ES/tools.json delete mode 100644 web/i18n/es-ES/tools.ts create mode 100644 web/i18n/es-ES/workflow.json delete mode 100644 web/i18n/es-ES/workflow.ts create mode 100644 web/i18n/fa-IR/app-annotation.json delete mode 100644 web/i18n/fa-IR/app-annotation.ts create mode 100644 web/i18n/fa-IR/app-api.json delete mode 100644 web/i18n/fa-IR/app-api.ts create mode 100644 web/i18n/fa-IR/app-debug.json delete mode 100644 web/i18n/fa-IR/app-debug.ts create mode 100644 web/i18n/fa-IR/app-log.json delete mode 100644 web/i18n/fa-IR/app-log.ts create mode 100644 web/i18n/fa-IR/app-overview.json delete mode 100644 web/i18n/fa-IR/app-overview.ts create mode 100644 web/i18n/fa-IR/app.json delete mode 100644 web/i18n/fa-IR/app.ts create mode 100644 web/i18n/fa-IR/billing.json delete mode 100644 web/i18n/fa-IR/billing.ts create mode 100644 web/i18n/fa-IR/common.json delete mode 100644 web/i18n/fa-IR/common.ts create mode 100644 web/i18n/fa-IR/custom.json delete mode 100644 web/i18n/fa-IR/custom.ts create mode 100644 web/i18n/fa-IR/dataset-creation.json delete mode 100644 web/i18n/fa-IR/dataset-creation.ts create mode 100644 web/i18n/fa-IR/dataset-documents.json delete mode 100644 web/i18n/fa-IR/dataset-documents.ts create mode 100644 web/i18n/fa-IR/dataset-hit-testing.json delete mode 100644 web/i18n/fa-IR/dataset-hit-testing.ts create mode 100644 web/i18n/fa-IR/dataset-pipeline.json delete mode 100644 web/i18n/fa-IR/dataset-pipeline.ts create mode 100644 web/i18n/fa-IR/dataset-settings.json delete mode 100644 web/i18n/fa-IR/dataset-settings.ts create mode 100644 web/i18n/fa-IR/dataset.json delete mode 100644 web/i18n/fa-IR/dataset.ts create mode 100644 web/i18n/fa-IR/education.json delete mode 100644 web/i18n/fa-IR/education.ts create mode 100644 web/i18n/fa-IR/explore.json delete mode 100644 web/i18n/fa-IR/explore.ts create mode 100644 web/i18n/fa-IR/layout.json delete mode 100644 web/i18n/fa-IR/layout.ts create mode 100644 web/i18n/fa-IR/login.json delete mode 100644 web/i18n/fa-IR/login.ts create mode 100644 web/i18n/fa-IR/oauth.json delete mode 100644 web/i18n/fa-IR/oauth.ts create mode 100644 web/i18n/fa-IR/pipeline.json delete mode 100644 web/i18n/fa-IR/pipeline.ts create mode 100644 web/i18n/fa-IR/plugin-tags.json delete mode 100644 web/i18n/fa-IR/plugin-tags.ts create mode 100644 web/i18n/fa-IR/plugin-trigger.json delete mode 100644 web/i18n/fa-IR/plugin-trigger.ts create mode 100644 web/i18n/fa-IR/plugin.json delete mode 100644 web/i18n/fa-IR/plugin.ts create mode 100644 web/i18n/fa-IR/register.json delete mode 100644 web/i18n/fa-IR/register.ts create mode 100644 web/i18n/fa-IR/run-log.json delete mode 100644 web/i18n/fa-IR/run-log.ts create mode 100644 web/i18n/fa-IR/share.json delete mode 100644 web/i18n/fa-IR/share.ts create mode 100644 web/i18n/fa-IR/time.json delete mode 100644 web/i18n/fa-IR/time.ts create mode 100644 web/i18n/fa-IR/tools.json delete mode 100644 web/i18n/fa-IR/tools.ts create mode 100644 web/i18n/fa-IR/workflow.json delete mode 100644 web/i18n/fa-IR/workflow.ts create mode 100644 web/i18n/fr-FR/app-annotation.json delete mode 100644 web/i18n/fr-FR/app-annotation.ts create mode 100644 web/i18n/fr-FR/app-api.json delete mode 100644 web/i18n/fr-FR/app-api.ts create mode 100644 web/i18n/fr-FR/app-debug.json delete mode 100644 web/i18n/fr-FR/app-debug.ts create mode 100644 web/i18n/fr-FR/app-log.json delete mode 100644 web/i18n/fr-FR/app-log.ts create mode 100644 web/i18n/fr-FR/app-overview.json delete mode 100644 web/i18n/fr-FR/app-overview.ts create mode 100644 web/i18n/fr-FR/app.json delete mode 100644 web/i18n/fr-FR/app.ts create mode 100644 web/i18n/fr-FR/billing.json delete mode 100644 web/i18n/fr-FR/billing.ts create mode 100644 web/i18n/fr-FR/common.json delete mode 100644 web/i18n/fr-FR/common.ts create mode 100644 web/i18n/fr-FR/custom.json delete mode 100644 web/i18n/fr-FR/custom.ts create mode 100644 web/i18n/fr-FR/dataset-creation.json delete mode 100644 web/i18n/fr-FR/dataset-creation.ts create mode 100644 web/i18n/fr-FR/dataset-documents.json delete mode 100644 web/i18n/fr-FR/dataset-documents.ts create mode 100644 web/i18n/fr-FR/dataset-hit-testing.json delete mode 100644 web/i18n/fr-FR/dataset-hit-testing.ts create mode 100644 web/i18n/fr-FR/dataset-pipeline.json delete mode 100644 web/i18n/fr-FR/dataset-pipeline.ts create mode 100644 web/i18n/fr-FR/dataset-settings.json delete mode 100644 web/i18n/fr-FR/dataset-settings.ts create mode 100644 web/i18n/fr-FR/dataset.json delete mode 100644 web/i18n/fr-FR/dataset.ts create mode 100644 web/i18n/fr-FR/education.json delete mode 100644 web/i18n/fr-FR/education.ts create mode 100644 web/i18n/fr-FR/explore.json delete mode 100644 web/i18n/fr-FR/explore.ts create mode 100644 web/i18n/fr-FR/layout.json delete mode 100644 web/i18n/fr-FR/layout.ts create mode 100644 web/i18n/fr-FR/login.json delete mode 100644 web/i18n/fr-FR/login.ts create mode 100644 web/i18n/fr-FR/oauth.json delete mode 100644 web/i18n/fr-FR/oauth.ts create mode 100644 web/i18n/fr-FR/pipeline.json delete mode 100644 web/i18n/fr-FR/pipeline.ts create mode 100644 web/i18n/fr-FR/plugin-tags.json delete mode 100644 web/i18n/fr-FR/plugin-tags.ts create mode 100644 web/i18n/fr-FR/plugin-trigger.json delete mode 100644 web/i18n/fr-FR/plugin-trigger.ts create mode 100644 web/i18n/fr-FR/plugin.json delete mode 100644 web/i18n/fr-FR/plugin.ts create mode 100644 web/i18n/fr-FR/register.json delete mode 100644 web/i18n/fr-FR/register.ts create mode 100644 web/i18n/fr-FR/run-log.json delete mode 100644 web/i18n/fr-FR/run-log.ts create mode 100644 web/i18n/fr-FR/share.json delete mode 100644 web/i18n/fr-FR/share.ts create mode 100644 web/i18n/fr-FR/time.json delete mode 100644 web/i18n/fr-FR/time.ts create mode 100644 web/i18n/fr-FR/tools.json delete mode 100644 web/i18n/fr-FR/tools.ts create mode 100644 web/i18n/fr-FR/workflow.json delete mode 100644 web/i18n/fr-FR/workflow.ts create mode 100644 web/i18n/hi-IN/app-annotation.json delete mode 100644 web/i18n/hi-IN/app-annotation.ts create mode 100644 web/i18n/hi-IN/app-api.json delete mode 100644 web/i18n/hi-IN/app-api.ts create mode 100644 web/i18n/hi-IN/app-debug.json delete mode 100644 web/i18n/hi-IN/app-debug.ts create mode 100644 web/i18n/hi-IN/app-log.json delete mode 100644 web/i18n/hi-IN/app-log.ts create mode 100644 web/i18n/hi-IN/app-overview.json delete mode 100644 web/i18n/hi-IN/app-overview.ts create mode 100644 web/i18n/hi-IN/app.json delete mode 100644 web/i18n/hi-IN/app.ts create mode 100644 web/i18n/hi-IN/billing.json delete mode 100644 web/i18n/hi-IN/billing.ts create mode 100644 web/i18n/hi-IN/common.json delete mode 100644 web/i18n/hi-IN/common.ts create mode 100644 web/i18n/hi-IN/custom.json delete mode 100644 web/i18n/hi-IN/custom.ts create mode 100644 web/i18n/hi-IN/dataset-creation.json delete mode 100644 web/i18n/hi-IN/dataset-creation.ts create mode 100644 web/i18n/hi-IN/dataset-documents.json delete mode 100644 web/i18n/hi-IN/dataset-documents.ts create mode 100644 web/i18n/hi-IN/dataset-hit-testing.json delete mode 100644 web/i18n/hi-IN/dataset-hit-testing.ts create mode 100644 web/i18n/hi-IN/dataset-pipeline.json delete mode 100644 web/i18n/hi-IN/dataset-pipeline.ts create mode 100644 web/i18n/hi-IN/dataset-settings.json delete mode 100644 web/i18n/hi-IN/dataset-settings.ts create mode 100644 web/i18n/hi-IN/dataset.json delete mode 100644 web/i18n/hi-IN/dataset.ts create mode 100644 web/i18n/hi-IN/education.json delete mode 100644 web/i18n/hi-IN/education.ts create mode 100644 web/i18n/hi-IN/explore.json delete mode 100644 web/i18n/hi-IN/explore.ts create mode 100644 web/i18n/hi-IN/layout.json delete mode 100644 web/i18n/hi-IN/layout.ts create mode 100644 web/i18n/hi-IN/login.json delete mode 100644 web/i18n/hi-IN/login.ts create mode 100644 web/i18n/hi-IN/oauth.json delete mode 100644 web/i18n/hi-IN/oauth.ts create mode 100644 web/i18n/hi-IN/pipeline.json delete mode 100644 web/i18n/hi-IN/pipeline.ts create mode 100644 web/i18n/hi-IN/plugin-tags.json delete mode 100644 web/i18n/hi-IN/plugin-tags.ts create mode 100644 web/i18n/hi-IN/plugin-trigger.json delete mode 100644 web/i18n/hi-IN/plugin-trigger.ts create mode 100644 web/i18n/hi-IN/plugin.json delete mode 100644 web/i18n/hi-IN/plugin.ts create mode 100644 web/i18n/hi-IN/register.json delete mode 100644 web/i18n/hi-IN/register.ts create mode 100644 web/i18n/hi-IN/run-log.json delete mode 100644 web/i18n/hi-IN/run-log.ts create mode 100644 web/i18n/hi-IN/share.json delete mode 100644 web/i18n/hi-IN/share.ts create mode 100644 web/i18n/hi-IN/time.json delete mode 100644 web/i18n/hi-IN/time.ts create mode 100644 web/i18n/hi-IN/tools.json delete mode 100644 web/i18n/hi-IN/tools.ts create mode 100644 web/i18n/hi-IN/workflow.json delete mode 100644 web/i18n/hi-IN/workflow.ts create mode 100644 web/i18n/id-ID/app-annotation.json delete mode 100644 web/i18n/id-ID/app-annotation.ts create mode 100644 web/i18n/id-ID/app-api.json delete mode 100644 web/i18n/id-ID/app-api.ts create mode 100644 web/i18n/id-ID/app-debug.json delete mode 100644 web/i18n/id-ID/app-debug.ts create mode 100644 web/i18n/id-ID/app-log.json delete mode 100644 web/i18n/id-ID/app-log.ts create mode 100644 web/i18n/id-ID/app-overview.json delete mode 100644 web/i18n/id-ID/app-overview.ts create mode 100644 web/i18n/id-ID/app.json delete mode 100644 web/i18n/id-ID/app.ts create mode 100644 web/i18n/id-ID/billing.json delete mode 100644 web/i18n/id-ID/billing.ts create mode 100644 web/i18n/id-ID/common.json delete mode 100644 web/i18n/id-ID/common.ts create mode 100644 web/i18n/id-ID/custom.json delete mode 100644 web/i18n/id-ID/custom.ts create mode 100644 web/i18n/id-ID/dataset-creation.json delete mode 100644 web/i18n/id-ID/dataset-creation.ts create mode 100644 web/i18n/id-ID/dataset-documents.json delete mode 100644 web/i18n/id-ID/dataset-documents.ts create mode 100644 web/i18n/id-ID/dataset-hit-testing.json delete mode 100644 web/i18n/id-ID/dataset-hit-testing.ts create mode 100644 web/i18n/id-ID/dataset-pipeline.json delete mode 100644 web/i18n/id-ID/dataset-pipeline.ts create mode 100644 web/i18n/id-ID/dataset-settings.json delete mode 100644 web/i18n/id-ID/dataset-settings.ts create mode 100644 web/i18n/id-ID/dataset.json delete mode 100644 web/i18n/id-ID/dataset.ts create mode 100644 web/i18n/id-ID/education.json delete mode 100644 web/i18n/id-ID/education.ts create mode 100644 web/i18n/id-ID/explore.json delete mode 100644 web/i18n/id-ID/explore.ts create mode 100644 web/i18n/id-ID/layout.json delete mode 100644 web/i18n/id-ID/layout.ts create mode 100644 web/i18n/id-ID/login.json delete mode 100644 web/i18n/id-ID/login.ts create mode 100644 web/i18n/id-ID/oauth.json delete mode 100644 web/i18n/id-ID/oauth.ts create mode 100644 web/i18n/id-ID/pipeline.json delete mode 100644 web/i18n/id-ID/pipeline.ts create mode 100644 web/i18n/id-ID/plugin-tags.json delete mode 100644 web/i18n/id-ID/plugin-tags.ts create mode 100644 web/i18n/id-ID/plugin-trigger.json delete mode 100644 web/i18n/id-ID/plugin-trigger.ts create mode 100644 web/i18n/id-ID/plugin.json delete mode 100644 web/i18n/id-ID/plugin.ts create mode 100644 web/i18n/id-ID/register.json delete mode 100644 web/i18n/id-ID/register.ts create mode 100644 web/i18n/id-ID/run-log.json delete mode 100644 web/i18n/id-ID/run-log.ts create mode 100644 web/i18n/id-ID/share.json delete mode 100644 web/i18n/id-ID/share.ts create mode 100644 web/i18n/id-ID/time.json delete mode 100644 web/i18n/id-ID/time.ts create mode 100644 web/i18n/id-ID/tools.json delete mode 100644 web/i18n/id-ID/tools.ts create mode 100644 web/i18n/id-ID/workflow.json delete mode 100644 web/i18n/id-ID/workflow.ts create mode 100644 web/i18n/it-IT/app-annotation.json delete mode 100644 web/i18n/it-IT/app-annotation.ts create mode 100644 web/i18n/it-IT/app-api.json delete mode 100644 web/i18n/it-IT/app-api.ts create mode 100644 web/i18n/it-IT/app-debug.json delete mode 100644 web/i18n/it-IT/app-debug.ts create mode 100644 web/i18n/it-IT/app-log.json delete mode 100644 web/i18n/it-IT/app-log.ts create mode 100644 web/i18n/it-IT/app-overview.json delete mode 100644 web/i18n/it-IT/app-overview.ts create mode 100644 web/i18n/it-IT/app.json delete mode 100644 web/i18n/it-IT/app.ts create mode 100644 web/i18n/it-IT/billing.json delete mode 100644 web/i18n/it-IT/billing.ts create mode 100644 web/i18n/it-IT/common.json delete mode 100644 web/i18n/it-IT/common.ts create mode 100644 web/i18n/it-IT/custom.json delete mode 100644 web/i18n/it-IT/custom.ts create mode 100644 web/i18n/it-IT/dataset-creation.json delete mode 100644 web/i18n/it-IT/dataset-creation.ts create mode 100644 web/i18n/it-IT/dataset-documents.json delete mode 100644 web/i18n/it-IT/dataset-documents.ts create mode 100644 web/i18n/it-IT/dataset-hit-testing.json delete mode 100644 web/i18n/it-IT/dataset-hit-testing.ts create mode 100644 web/i18n/it-IT/dataset-pipeline.json delete mode 100644 web/i18n/it-IT/dataset-pipeline.ts create mode 100644 web/i18n/it-IT/dataset-settings.json delete mode 100644 web/i18n/it-IT/dataset-settings.ts create mode 100644 web/i18n/it-IT/dataset.json delete mode 100644 web/i18n/it-IT/dataset.ts create mode 100644 web/i18n/it-IT/education.json delete mode 100644 web/i18n/it-IT/education.ts create mode 100644 web/i18n/it-IT/explore.json delete mode 100644 web/i18n/it-IT/explore.ts create mode 100644 web/i18n/it-IT/layout.json delete mode 100644 web/i18n/it-IT/layout.ts create mode 100644 web/i18n/it-IT/login.json delete mode 100644 web/i18n/it-IT/login.ts create mode 100644 web/i18n/it-IT/oauth.json delete mode 100644 web/i18n/it-IT/oauth.ts create mode 100644 web/i18n/it-IT/pipeline.json delete mode 100644 web/i18n/it-IT/pipeline.ts create mode 100644 web/i18n/it-IT/plugin-tags.json delete mode 100644 web/i18n/it-IT/plugin-tags.ts create mode 100644 web/i18n/it-IT/plugin-trigger.json delete mode 100644 web/i18n/it-IT/plugin-trigger.ts create mode 100644 web/i18n/it-IT/plugin.json delete mode 100644 web/i18n/it-IT/plugin.ts create mode 100644 web/i18n/it-IT/register.json delete mode 100644 web/i18n/it-IT/register.ts create mode 100644 web/i18n/it-IT/run-log.json delete mode 100644 web/i18n/it-IT/run-log.ts create mode 100644 web/i18n/it-IT/share.json delete mode 100644 web/i18n/it-IT/share.ts create mode 100644 web/i18n/it-IT/time.json delete mode 100644 web/i18n/it-IT/time.ts create mode 100644 web/i18n/it-IT/tools.json delete mode 100644 web/i18n/it-IT/tools.ts create mode 100644 web/i18n/it-IT/workflow.json delete mode 100644 web/i18n/it-IT/workflow.ts create mode 100644 web/i18n/ja-JP/app-annotation.json delete mode 100644 web/i18n/ja-JP/app-annotation.ts create mode 100644 web/i18n/ja-JP/app-api.json delete mode 100644 web/i18n/ja-JP/app-api.ts create mode 100644 web/i18n/ja-JP/app-debug.json delete mode 100644 web/i18n/ja-JP/app-debug.ts create mode 100644 web/i18n/ja-JP/app-log.json delete mode 100644 web/i18n/ja-JP/app-log.ts create mode 100644 web/i18n/ja-JP/app-overview.json delete mode 100644 web/i18n/ja-JP/app-overview.ts create mode 100644 web/i18n/ja-JP/app.json delete mode 100644 web/i18n/ja-JP/app.ts create mode 100644 web/i18n/ja-JP/billing.json delete mode 100644 web/i18n/ja-JP/billing.ts create mode 100644 web/i18n/ja-JP/common.json delete mode 100644 web/i18n/ja-JP/common.ts create mode 100644 web/i18n/ja-JP/custom.json delete mode 100644 web/i18n/ja-JP/custom.ts create mode 100644 web/i18n/ja-JP/dataset-creation.json delete mode 100644 web/i18n/ja-JP/dataset-creation.ts create mode 100644 web/i18n/ja-JP/dataset-documents.json delete mode 100644 web/i18n/ja-JP/dataset-documents.ts create mode 100644 web/i18n/ja-JP/dataset-hit-testing.json delete mode 100644 web/i18n/ja-JP/dataset-hit-testing.ts create mode 100644 web/i18n/ja-JP/dataset-pipeline.json delete mode 100644 web/i18n/ja-JP/dataset-pipeline.ts create mode 100644 web/i18n/ja-JP/dataset-settings.json delete mode 100644 web/i18n/ja-JP/dataset-settings.ts create mode 100644 web/i18n/ja-JP/dataset.json delete mode 100644 web/i18n/ja-JP/dataset.ts create mode 100644 web/i18n/ja-JP/education.json delete mode 100644 web/i18n/ja-JP/education.ts create mode 100644 web/i18n/ja-JP/explore.json delete mode 100644 web/i18n/ja-JP/explore.ts create mode 100644 web/i18n/ja-JP/layout.json delete mode 100644 web/i18n/ja-JP/layout.ts create mode 100644 web/i18n/ja-JP/login.json delete mode 100644 web/i18n/ja-JP/login.ts create mode 100644 web/i18n/ja-JP/oauth.json delete mode 100644 web/i18n/ja-JP/oauth.ts create mode 100644 web/i18n/ja-JP/pipeline.json delete mode 100644 web/i18n/ja-JP/pipeline.ts create mode 100644 web/i18n/ja-JP/plugin-tags.json delete mode 100644 web/i18n/ja-JP/plugin-tags.ts create mode 100644 web/i18n/ja-JP/plugin-trigger.json delete mode 100644 web/i18n/ja-JP/plugin-trigger.ts create mode 100644 web/i18n/ja-JP/plugin.json delete mode 100644 web/i18n/ja-JP/plugin.ts create mode 100644 web/i18n/ja-JP/register.json delete mode 100644 web/i18n/ja-JP/register.ts create mode 100644 web/i18n/ja-JP/run-log.json delete mode 100644 web/i18n/ja-JP/run-log.ts create mode 100644 web/i18n/ja-JP/share.json delete mode 100644 web/i18n/ja-JP/share.ts create mode 100644 web/i18n/ja-JP/time.json delete mode 100644 web/i18n/ja-JP/time.ts create mode 100644 web/i18n/ja-JP/tools.json delete mode 100644 web/i18n/ja-JP/tools.ts create mode 100644 web/i18n/ja-JP/workflow.json delete mode 100644 web/i18n/ja-JP/workflow.ts create mode 100644 web/i18n/ko-KR/app-annotation.json delete mode 100644 web/i18n/ko-KR/app-annotation.ts create mode 100644 web/i18n/ko-KR/app-api.json delete mode 100644 web/i18n/ko-KR/app-api.ts create mode 100644 web/i18n/ko-KR/app-debug.json delete mode 100644 web/i18n/ko-KR/app-debug.ts create mode 100644 web/i18n/ko-KR/app-log.json delete mode 100644 web/i18n/ko-KR/app-log.ts create mode 100644 web/i18n/ko-KR/app-overview.json delete mode 100644 web/i18n/ko-KR/app-overview.ts create mode 100644 web/i18n/ko-KR/app.json delete mode 100644 web/i18n/ko-KR/app.ts create mode 100644 web/i18n/ko-KR/billing.json delete mode 100644 web/i18n/ko-KR/billing.ts create mode 100644 web/i18n/ko-KR/common.json delete mode 100644 web/i18n/ko-KR/common.ts create mode 100644 web/i18n/ko-KR/custom.json delete mode 100644 web/i18n/ko-KR/custom.ts create mode 100644 web/i18n/ko-KR/dataset-creation.json delete mode 100644 web/i18n/ko-KR/dataset-creation.ts create mode 100644 web/i18n/ko-KR/dataset-documents.json delete mode 100644 web/i18n/ko-KR/dataset-documents.ts create mode 100644 web/i18n/ko-KR/dataset-hit-testing.json delete mode 100644 web/i18n/ko-KR/dataset-hit-testing.ts create mode 100644 web/i18n/ko-KR/dataset-pipeline.json delete mode 100644 web/i18n/ko-KR/dataset-pipeline.ts create mode 100644 web/i18n/ko-KR/dataset-settings.json delete mode 100644 web/i18n/ko-KR/dataset-settings.ts create mode 100644 web/i18n/ko-KR/dataset.json delete mode 100644 web/i18n/ko-KR/dataset.ts create mode 100644 web/i18n/ko-KR/education.json delete mode 100644 web/i18n/ko-KR/education.ts create mode 100644 web/i18n/ko-KR/explore.json delete mode 100644 web/i18n/ko-KR/explore.ts create mode 100644 web/i18n/ko-KR/layout.json delete mode 100644 web/i18n/ko-KR/layout.ts create mode 100644 web/i18n/ko-KR/login.json delete mode 100644 web/i18n/ko-KR/login.ts create mode 100644 web/i18n/ko-KR/oauth.json delete mode 100644 web/i18n/ko-KR/oauth.ts create mode 100644 web/i18n/ko-KR/pipeline.json delete mode 100644 web/i18n/ko-KR/pipeline.ts create mode 100644 web/i18n/ko-KR/plugin-tags.json delete mode 100644 web/i18n/ko-KR/plugin-tags.ts create mode 100644 web/i18n/ko-KR/plugin-trigger.json delete mode 100644 web/i18n/ko-KR/plugin-trigger.ts create mode 100644 web/i18n/ko-KR/plugin.json delete mode 100644 web/i18n/ko-KR/plugin.ts create mode 100644 web/i18n/ko-KR/register.json delete mode 100644 web/i18n/ko-KR/register.ts create mode 100644 web/i18n/ko-KR/run-log.json delete mode 100644 web/i18n/ko-KR/run-log.ts create mode 100644 web/i18n/ko-KR/share.json delete mode 100644 web/i18n/ko-KR/share.ts create mode 100644 web/i18n/ko-KR/time.json delete mode 100644 web/i18n/ko-KR/time.ts create mode 100644 web/i18n/ko-KR/tools.json delete mode 100644 web/i18n/ko-KR/tools.ts create mode 100644 web/i18n/ko-KR/workflow.json delete mode 100644 web/i18n/ko-KR/workflow.ts create mode 100644 web/i18n/pl-PL/app-annotation.json delete mode 100644 web/i18n/pl-PL/app-annotation.ts create mode 100644 web/i18n/pl-PL/app-api.json delete mode 100644 web/i18n/pl-PL/app-api.ts create mode 100644 web/i18n/pl-PL/app-debug.json delete mode 100644 web/i18n/pl-PL/app-debug.ts create mode 100644 web/i18n/pl-PL/app-log.json delete mode 100644 web/i18n/pl-PL/app-log.ts create mode 100644 web/i18n/pl-PL/app-overview.json delete mode 100644 web/i18n/pl-PL/app-overview.ts create mode 100644 web/i18n/pl-PL/app.json delete mode 100644 web/i18n/pl-PL/app.ts create mode 100644 web/i18n/pl-PL/billing.json delete mode 100644 web/i18n/pl-PL/billing.ts create mode 100644 web/i18n/pl-PL/common.json delete mode 100644 web/i18n/pl-PL/common.ts create mode 100644 web/i18n/pl-PL/custom.json delete mode 100644 web/i18n/pl-PL/custom.ts create mode 100644 web/i18n/pl-PL/dataset-creation.json delete mode 100644 web/i18n/pl-PL/dataset-creation.ts create mode 100644 web/i18n/pl-PL/dataset-documents.json delete mode 100644 web/i18n/pl-PL/dataset-documents.ts create mode 100644 web/i18n/pl-PL/dataset-hit-testing.json delete mode 100644 web/i18n/pl-PL/dataset-hit-testing.ts create mode 100644 web/i18n/pl-PL/dataset-pipeline.json delete mode 100644 web/i18n/pl-PL/dataset-pipeline.ts create mode 100644 web/i18n/pl-PL/dataset-settings.json delete mode 100644 web/i18n/pl-PL/dataset-settings.ts create mode 100644 web/i18n/pl-PL/dataset.json delete mode 100644 web/i18n/pl-PL/dataset.ts create mode 100644 web/i18n/pl-PL/education.json delete mode 100644 web/i18n/pl-PL/education.ts create mode 100644 web/i18n/pl-PL/explore.json delete mode 100644 web/i18n/pl-PL/explore.ts create mode 100644 web/i18n/pl-PL/layout.json delete mode 100644 web/i18n/pl-PL/layout.ts create mode 100644 web/i18n/pl-PL/login.json delete mode 100644 web/i18n/pl-PL/login.ts create mode 100644 web/i18n/pl-PL/oauth.json delete mode 100644 web/i18n/pl-PL/oauth.ts create mode 100644 web/i18n/pl-PL/pipeline.json delete mode 100644 web/i18n/pl-PL/pipeline.ts create mode 100644 web/i18n/pl-PL/plugin-tags.json delete mode 100644 web/i18n/pl-PL/plugin-tags.ts create mode 100644 web/i18n/pl-PL/plugin-trigger.json delete mode 100644 web/i18n/pl-PL/plugin-trigger.ts create mode 100644 web/i18n/pl-PL/plugin.json delete mode 100644 web/i18n/pl-PL/plugin.ts create mode 100644 web/i18n/pl-PL/register.json delete mode 100644 web/i18n/pl-PL/register.ts create mode 100644 web/i18n/pl-PL/run-log.json delete mode 100644 web/i18n/pl-PL/run-log.ts create mode 100644 web/i18n/pl-PL/share.json delete mode 100644 web/i18n/pl-PL/share.ts create mode 100644 web/i18n/pl-PL/time.json delete mode 100644 web/i18n/pl-PL/time.ts create mode 100644 web/i18n/pl-PL/tools.json delete mode 100644 web/i18n/pl-PL/tools.ts create mode 100644 web/i18n/pl-PL/workflow.json delete mode 100644 web/i18n/pl-PL/workflow.ts create mode 100644 web/i18n/pt-BR/app-annotation.json delete mode 100644 web/i18n/pt-BR/app-annotation.ts create mode 100644 web/i18n/pt-BR/app-api.json delete mode 100644 web/i18n/pt-BR/app-api.ts create mode 100644 web/i18n/pt-BR/app-debug.json delete mode 100644 web/i18n/pt-BR/app-debug.ts create mode 100644 web/i18n/pt-BR/app-log.json delete mode 100644 web/i18n/pt-BR/app-log.ts create mode 100644 web/i18n/pt-BR/app-overview.json delete mode 100644 web/i18n/pt-BR/app-overview.ts create mode 100644 web/i18n/pt-BR/app.json delete mode 100644 web/i18n/pt-BR/app.ts create mode 100644 web/i18n/pt-BR/billing.json delete mode 100644 web/i18n/pt-BR/billing.ts create mode 100644 web/i18n/pt-BR/common.json delete mode 100644 web/i18n/pt-BR/common.ts create mode 100644 web/i18n/pt-BR/custom.json delete mode 100644 web/i18n/pt-BR/custom.ts create mode 100644 web/i18n/pt-BR/dataset-creation.json delete mode 100644 web/i18n/pt-BR/dataset-creation.ts create mode 100644 web/i18n/pt-BR/dataset-documents.json delete mode 100644 web/i18n/pt-BR/dataset-documents.ts create mode 100644 web/i18n/pt-BR/dataset-hit-testing.json delete mode 100644 web/i18n/pt-BR/dataset-hit-testing.ts create mode 100644 web/i18n/pt-BR/dataset-pipeline.json delete mode 100644 web/i18n/pt-BR/dataset-pipeline.ts create mode 100644 web/i18n/pt-BR/dataset-settings.json delete mode 100644 web/i18n/pt-BR/dataset-settings.ts create mode 100644 web/i18n/pt-BR/dataset.json delete mode 100644 web/i18n/pt-BR/dataset.ts create mode 100644 web/i18n/pt-BR/education.json delete mode 100644 web/i18n/pt-BR/education.ts create mode 100644 web/i18n/pt-BR/explore.json delete mode 100644 web/i18n/pt-BR/explore.ts create mode 100644 web/i18n/pt-BR/layout.json delete mode 100644 web/i18n/pt-BR/layout.ts create mode 100644 web/i18n/pt-BR/login.json delete mode 100644 web/i18n/pt-BR/login.ts create mode 100644 web/i18n/pt-BR/oauth.json delete mode 100644 web/i18n/pt-BR/oauth.ts create mode 100644 web/i18n/pt-BR/pipeline.json delete mode 100644 web/i18n/pt-BR/pipeline.ts create mode 100644 web/i18n/pt-BR/plugin-tags.json delete mode 100644 web/i18n/pt-BR/plugin-tags.ts create mode 100644 web/i18n/pt-BR/plugin-trigger.json delete mode 100644 web/i18n/pt-BR/plugin-trigger.ts create mode 100644 web/i18n/pt-BR/plugin.json delete mode 100644 web/i18n/pt-BR/plugin.ts create mode 100644 web/i18n/pt-BR/register.json delete mode 100644 web/i18n/pt-BR/register.ts create mode 100644 web/i18n/pt-BR/run-log.json delete mode 100644 web/i18n/pt-BR/run-log.ts create mode 100644 web/i18n/pt-BR/share.json delete mode 100644 web/i18n/pt-BR/share.ts create mode 100644 web/i18n/pt-BR/time.json delete mode 100644 web/i18n/pt-BR/time.ts create mode 100644 web/i18n/pt-BR/tools.json delete mode 100644 web/i18n/pt-BR/tools.ts create mode 100644 web/i18n/pt-BR/workflow.json delete mode 100644 web/i18n/pt-BR/workflow.ts create mode 100644 web/i18n/ro-RO/app-annotation.json delete mode 100644 web/i18n/ro-RO/app-annotation.ts create mode 100644 web/i18n/ro-RO/app-api.json delete mode 100644 web/i18n/ro-RO/app-api.ts create mode 100644 web/i18n/ro-RO/app-debug.json delete mode 100644 web/i18n/ro-RO/app-debug.ts create mode 100644 web/i18n/ro-RO/app-log.json delete mode 100644 web/i18n/ro-RO/app-log.ts create mode 100644 web/i18n/ro-RO/app-overview.json delete mode 100644 web/i18n/ro-RO/app-overview.ts create mode 100644 web/i18n/ro-RO/app.json delete mode 100644 web/i18n/ro-RO/app.ts create mode 100644 web/i18n/ro-RO/billing.json delete mode 100644 web/i18n/ro-RO/billing.ts create mode 100644 web/i18n/ro-RO/common.json delete mode 100644 web/i18n/ro-RO/common.ts create mode 100644 web/i18n/ro-RO/custom.json delete mode 100644 web/i18n/ro-RO/custom.ts create mode 100644 web/i18n/ro-RO/dataset-creation.json delete mode 100644 web/i18n/ro-RO/dataset-creation.ts create mode 100644 web/i18n/ro-RO/dataset-documents.json delete mode 100644 web/i18n/ro-RO/dataset-documents.ts create mode 100644 web/i18n/ro-RO/dataset-hit-testing.json delete mode 100644 web/i18n/ro-RO/dataset-hit-testing.ts create mode 100644 web/i18n/ro-RO/dataset-pipeline.json delete mode 100644 web/i18n/ro-RO/dataset-pipeline.ts create mode 100644 web/i18n/ro-RO/dataset-settings.json delete mode 100644 web/i18n/ro-RO/dataset-settings.ts create mode 100644 web/i18n/ro-RO/dataset.json delete mode 100644 web/i18n/ro-RO/dataset.ts create mode 100644 web/i18n/ro-RO/education.json delete mode 100644 web/i18n/ro-RO/education.ts create mode 100644 web/i18n/ro-RO/explore.json delete mode 100644 web/i18n/ro-RO/explore.ts create mode 100644 web/i18n/ro-RO/layout.json delete mode 100644 web/i18n/ro-RO/layout.ts create mode 100644 web/i18n/ro-RO/login.json delete mode 100644 web/i18n/ro-RO/login.ts create mode 100644 web/i18n/ro-RO/oauth.json delete mode 100644 web/i18n/ro-RO/oauth.ts create mode 100644 web/i18n/ro-RO/pipeline.json delete mode 100644 web/i18n/ro-RO/pipeline.ts create mode 100644 web/i18n/ro-RO/plugin-tags.json delete mode 100644 web/i18n/ro-RO/plugin-tags.ts create mode 100644 web/i18n/ro-RO/plugin-trigger.json delete mode 100644 web/i18n/ro-RO/plugin-trigger.ts create mode 100644 web/i18n/ro-RO/plugin.json delete mode 100644 web/i18n/ro-RO/plugin.ts create mode 100644 web/i18n/ro-RO/register.json delete mode 100644 web/i18n/ro-RO/register.ts create mode 100644 web/i18n/ro-RO/run-log.json delete mode 100644 web/i18n/ro-RO/run-log.ts create mode 100644 web/i18n/ro-RO/share.json delete mode 100644 web/i18n/ro-RO/share.ts create mode 100644 web/i18n/ro-RO/time.json delete mode 100644 web/i18n/ro-RO/time.ts create mode 100644 web/i18n/ro-RO/tools.json delete mode 100644 web/i18n/ro-RO/tools.ts create mode 100644 web/i18n/ro-RO/workflow.json delete mode 100644 web/i18n/ro-RO/workflow.ts create mode 100644 web/i18n/ru-RU/app-annotation.json delete mode 100644 web/i18n/ru-RU/app-annotation.ts create mode 100644 web/i18n/ru-RU/app-api.json delete mode 100644 web/i18n/ru-RU/app-api.ts create mode 100644 web/i18n/ru-RU/app-debug.json delete mode 100644 web/i18n/ru-RU/app-debug.ts create mode 100644 web/i18n/ru-RU/app-log.json delete mode 100644 web/i18n/ru-RU/app-log.ts create mode 100644 web/i18n/ru-RU/app-overview.json delete mode 100644 web/i18n/ru-RU/app-overview.ts create mode 100644 web/i18n/ru-RU/app.json delete mode 100644 web/i18n/ru-RU/app.ts create mode 100644 web/i18n/ru-RU/billing.json delete mode 100644 web/i18n/ru-RU/billing.ts create mode 100644 web/i18n/ru-RU/common.json delete mode 100644 web/i18n/ru-RU/common.ts create mode 100644 web/i18n/ru-RU/custom.json delete mode 100644 web/i18n/ru-RU/custom.ts create mode 100644 web/i18n/ru-RU/dataset-creation.json delete mode 100644 web/i18n/ru-RU/dataset-creation.ts create mode 100644 web/i18n/ru-RU/dataset-documents.json delete mode 100644 web/i18n/ru-RU/dataset-documents.ts create mode 100644 web/i18n/ru-RU/dataset-hit-testing.json delete mode 100644 web/i18n/ru-RU/dataset-hit-testing.ts create mode 100644 web/i18n/ru-RU/dataset-pipeline.json delete mode 100644 web/i18n/ru-RU/dataset-pipeline.ts create mode 100644 web/i18n/ru-RU/dataset-settings.json delete mode 100644 web/i18n/ru-RU/dataset-settings.ts create mode 100644 web/i18n/ru-RU/dataset.json delete mode 100644 web/i18n/ru-RU/dataset.ts create mode 100644 web/i18n/ru-RU/education.json delete mode 100644 web/i18n/ru-RU/education.ts create mode 100644 web/i18n/ru-RU/explore.json delete mode 100644 web/i18n/ru-RU/explore.ts create mode 100644 web/i18n/ru-RU/layout.json delete mode 100644 web/i18n/ru-RU/layout.ts create mode 100644 web/i18n/ru-RU/login.json delete mode 100644 web/i18n/ru-RU/login.ts create mode 100644 web/i18n/ru-RU/oauth.json delete mode 100644 web/i18n/ru-RU/oauth.ts create mode 100644 web/i18n/ru-RU/pipeline.json delete mode 100644 web/i18n/ru-RU/pipeline.ts create mode 100644 web/i18n/ru-RU/plugin-tags.json delete mode 100644 web/i18n/ru-RU/plugin-tags.ts create mode 100644 web/i18n/ru-RU/plugin-trigger.json delete mode 100644 web/i18n/ru-RU/plugin-trigger.ts create mode 100644 web/i18n/ru-RU/plugin.json delete mode 100644 web/i18n/ru-RU/plugin.ts create mode 100644 web/i18n/ru-RU/register.json delete mode 100644 web/i18n/ru-RU/register.ts create mode 100644 web/i18n/ru-RU/run-log.json delete mode 100644 web/i18n/ru-RU/run-log.ts create mode 100644 web/i18n/ru-RU/share.json delete mode 100644 web/i18n/ru-RU/share.ts create mode 100644 web/i18n/ru-RU/time.json delete mode 100644 web/i18n/ru-RU/time.ts create mode 100644 web/i18n/ru-RU/tools.json delete mode 100644 web/i18n/ru-RU/tools.ts create mode 100644 web/i18n/ru-RU/workflow.json delete mode 100644 web/i18n/ru-RU/workflow.ts create mode 100644 web/i18n/sl-SI/app-annotation.json delete mode 100644 web/i18n/sl-SI/app-annotation.ts create mode 100644 web/i18n/sl-SI/app-api.json delete mode 100644 web/i18n/sl-SI/app-api.ts create mode 100644 web/i18n/sl-SI/app-debug.json delete mode 100644 web/i18n/sl-SI/app-debug.ts create mode 100644 web/i18n/sl-SI/app-log.json delete mode 100644 web/i18n/sl-SI/app-log.ts create mode 100644 web/i18n/sl-SI/app-overview.json delete mode 100644 web/i18n/sl-SI/app-overview.ts create mode 100644 web/i18n/sl-SI/app.json delete mode 100644 web/i18n/sl-SI/app.ts create mode 100644 web/i18n/sl-SI/billing.json delete mode 100644 web/i18n/sl-SI/billing.ts create mode 100644 web/i18n/sl-SI/common.json delete mode 100644 web/i18n/sl-SI/common.ts create mode 100644 web/i18n/sl-SI/custom.json delete mode 100644 web/i18n/sl-SI/custom.ts create mode 100644 web/i18n/sl-SI/dataset-creation.json delete mode 100644 web/i18n/sl-SI/dataset-creation.ts create mode 100644 web/i18n/sl-SI/dataset-documents.json delete mode 100644 web/i18n/sl-SI/dataset-documents.ts create mode 100644 web/i18n/sl-SI/dataset-hit-testing.json delete mode 100644 web/i18n/sl-SI/dataset-hit-testing.ts create mode 100644 web/i18n/sl-SI/dataset-pipeline.json delete mode 100644 web/i18n/sl-SI/dataset-pipeline.ts create mode 100644 web/i18n/sl-SI/dataset-settings.json delete mode 100644 web/i18n/sl-SI/dataset-settings.ts create mode 100644 web/i18n/sl-SI/dataset.json delete mode 100644 web/i18n/sl-SI/dataset.ts create mode 100644 web/i18n/sl-SI/education.json delete mode 100644 web/i18n/sl-SI/education.ts create mode 100644 web/i18n/sl-SI/explore.json delete mode 100644 web/i18n/sl-SI/explore.ts create mode 100644 web/i18n/sl-SI/layout.json delete mode 100644 web/i18n/sl-SI/layout.ts create mode 100644 web/i18n/sl-SI/login.json delete mode 100644 web/i18n/sl-SI/login.ts create mode 100644 web/i18n/sl-SI/oauth.json delete mode 100644 web/i18n/sl-SI/oauth.ts create mode 100644 web/i18n/sl-SI/pipeline.json delete mode 100644 web/i18n/sl-SI/pipeline.ts create mode 100644 web/i18n/sl-SI/plugin-tags.json delete mode 100644 web/i18n/sl-SI/plugin-tags.ts create mode 100644 web/i18n/sl-SI/plugin-trigger.json delete mode 100644 web/i18n/sl-SI/plugin-trigger.ts create mode 100644 web/i18n/sl-SI/plugin.json delete mode 100644 web/i18n/sl-SI/plugin.ts create mode 100644 web/i18n/sl-SI/register.json delete mode 100644 web/i18n/sl-SI/register.ts create mode 100644 web/i18n/sl-SI/run-log.json delete mode 100644 web/i18n/sl-SI/run-log.ts create mode 100644 web/i18n/sl-SI/share.json delete mode 100644 web/i18n/sl-SI/share.ts create mode 100644 web/i18n/sl-SI/time.json delete mode 100644 web/i18n/sl-SI/time.ts create mode 100644 web/i18n/sl-SI/tools.json delete mode 100644 web/i18n/sl-SI/tools.ts create mode 100644 web/i18n/sl-SI/workflow.json delete mode 100644 web/i18n/sl-SI/workflow.ts create mode 100644 web/i18n/th-TH/app-annotation.json delete mode 100644 web/i18n/th-TH/app-annotation.ts create mode 100644 web/i18n/th-TH/app-api.json delete mode 100644 web/i18n/th-TH/app-api.ts create mode 100644 web/i18n/th-TH/app-debug.json delete mode 100644 web/i18n/th-TH/app-debug.ts create mode 100644 web/i18n/th-TH/app-log.json delete mode 100644 web/i18n/th-TH/app-log.ts create mode 100644 web/i18n/th-TH/app-overview.json delete mode 100644 web/i18n/th-TH/app-overview.ts create mode 100644 web/i18n/th-TH/app.json delete mode 100644 web/i18n/th-TH/app.ts create mode 100644 web/i18n/th-TH/billing.json delete mode 100644 web/i18n/th-TH/billing.ts create mode 100644 web/i18n/th-TH/common.json delete mode 100644 web/i18n/th-TH/common.ts create mode 100644 web/i18n/th-TH/custom.json delete mode 100644 web/i18n/th-TH/custom.ts create mode 100644 web/i18n/th-TH/dataset-creation.json delete mode 100644 web/i18n/th-TH/dataset-creation.ts create mode 100644 web/i18n/th-TH/dataset-documents.json delete mode 100644 web/i18n/th-TH/dataset-documents.ts create mode 100644 web/i18n/th-TH/dataset-hit-testing.json delete mode 100644 web/i18n/th-TH/dataset-hit-testing.ts create mode 100644 web/i18n/th-TH/dataset-pipeline.json delete mode 100644 web/i18n/th-TH/dataset-pipeline.ts create mode 100644 web/i18n/th-TH/dataset-settings.json delete mode 100644 web/i18n/th-TH/dataset-settings.ts create mode 100644 web/i18n/th-TH/dataset.json delete mode 100644 web/i18n/th-TH/dataset.ts create mode 100644 web/i18n/th-TH/education.json delete mode 100644 web/i18n/th-TH/education.ts create mode 100644 web/i18n/th-TH/explore.json delete mode 100644 web/i18n/th-TH/explore.ts create mode 100644 web/i18n/th-TH/layout.json delete mode 100644 web/i18n/th-TH/layout.ts create mode 100644 web/i18n/th-TH/login.json delete mode 100644 web/i18n/th-TH/login.ts create mode 100644 web/i18n/th-TH/oauth.json delete mode 100644 web/i18n/th-TH/oauth.ts create mode 100644 web/i18n/th-TH/pipeline.json delete mode 100644 web/i18n/th-TH/pipeline.ts create mode 100644 web/i18n/th-TH/plugin-tags.json delete mode 100644 web/i18n/th-TH/plugin-tags.ts create mode 100644 web/i18n/th-TH/plugin-trigger.json delete mode 100644 web/i18n/th-TH/plugin-trigger.ts create mode 100644 web/i18n/th-TH/plugin.json delete mode 100644 web/i18n/th-TH/plugin.ts create mode 100644 web/i18n/th-TH/register.json delete mode 100644 web/i18n/th-TH/register.ts create mode 100644 web/i18n/th-TH/run-log.json delete mode 100644 web/i18n/th-TH/run-log.ts create mode 100644 web/i18n/th-TH/share.json delete mode 100644 web/i18n/th-TH/share.ts create mode 100644 web/i18n/th-TH/time.json delete mode 100644 web/i18n/th-TH/time.ts create mode 100644 web/i18n/th-TH/tools.json delete mode 100644 web/i18n/th-TH/tools.ts create mode 100644 web/i18n/th-TH/workflow.json delete mode 100644 web/i18n/th-TH/workflow.ts create mode 100644 web/i18n/tr-TR/app-annotation.json delete mode 100644 web/i18n/tr-TR/app-annotation.ts create mode 100644 web/i18n/tr-TR/app-api.json delete mode 100644 web/i18n/tr-TR/app-api.ts create mode 100644 web/i18n/tr-TR/app-debug.json delete mode 100644 web/i18n/tr-TR/app-debug.ts create mode 100644 web/i18n/tr-TR/app-log.json delete mode 100644 web/i18n/tr-TR/app-log.ts create mode 100644 web/i18n/tr-TR/app-overview.json delete mode 100644 web/i18n/tr-TR/app-overview.ts create mode 100644 web/i18n/tr-TR/app.json delete mode 100644 web/i18n/tr-TR/app.ts create mode 100644 web/i18n/tr-TR/billing.json delete mode 100644 web/i18n/tr-TR/billing.ts create mode 100644 web/i18n/tr-TR/common.json delete mode 100644 web/i18n/tr-TR/common.ts create mode 100644 web/i18n/tr-TR/custom.json delete mode 100644 web/i18n/tr-TR/custom.ts create mode 100644 web/i18n/tr-TR/dataset-creation.json delete mode 100644 web/i18n/tr-TR/dataset-creation.ts create mode 100644 web/i18n/tr-TR/dataset-documents.json delete mode 100644 web/i18n/tr-TR/dataset-documents.ts create mode 100644 web/i18n/tr-TR/dataset-hit-testing.json delete mode 100644 web/i18n/tr-TR/dataset-hit-testing.ts create mode 100644 web/i18n/tr-TR/dataset-pipeline.json delete mode 100644 web/i18n/tr-TR/dataset-pipeline.ts create mode 100644 web/i18n/tr-TR/dataset-settings.json delete mode 100644 web/i18n/tr-TR/dataset-settings.ts create mode 100644 web/i18n/tr-TR/dataset.json delete mode 100644 web/i18n/tr-TR/dataset.ts create mode 100644 web/i18n/tr-TR/education.json delete mode 100644 web/i18n/tr-TR/education.ts create mode 100644 web/i18n/tr-TR/explore.json delete mode 100644 web/i18n/tr-TR/explore.ts create mode 100644 web/i18n/tr-TR/layout.json delete mode 100644 web/i18n/tr-TR/layout.ts create mode 100644 web/i18n/tr-TR/login.json delete mode 100644 web/i18n/tr-TR/login.ts create mode 100644 web/i18n/tr-TR/oauth.json delete mode 100644 web/i18n/tr-TR/oauth.ts create mode 100644 web/i18n/tr-TR/pipeline.json delete mode 100644 web/i18n/tr-TR/pipeline.ts create mode 100644 web/i18n/tr-TR/plugin-tags.json delete mode 100644 web/i18n/tr-TR/plugin-tags.ts create mode 100644 web/i18n/tr-TR/plugin-trigger.json delete mode 100644 web/i18n/tr-TR/plugin-trigger.ts create mode 100644 web/i18n/tr-TR/plugin.json delete mode 100644 web/i18n/tr-TR/plugin.ts create mode 100644 web/i18n/tr-TR/register.json delete mode 100644 web/i18n/tr-TR/register.ts create mode 100644 web/i18n/tr-TR/run-log.json delete mode 100644 web/i18n/tr-TR/run-log.ts create mode 100644 web/i18n/tr-TR/share.json delete mode 100644 web/i18n/tr-TR/share.ts create mode 100644 web/i18n/tr-TR/time.json delete mode 100644 web/i18n/tr-TR/time.ts create mode 100644 web/i18n/tr-TR/tools.json delete mode 100644 web/i18n/tr-TR/tools.ts create mode 100644 web/i18n/tr-TR/workflow.json delete mode 100644 web/i18n/tr-TR/workflow.ts create mode 100644 web/i18n/uk-UA/app-annotation.json delete mode 100644 web/i18n/uk-UA/app-annotation.ts create mode 100644 web/i18n/uk-UA/app-api.json delete mode 100644 web/i18n/uk-UA/app-api.ts create mode 100644 web/i18n/uk-UA/app-debug.json delete mode 100644 web/i18n/uk-UA/app-debug.ts create mode 100644 web/i18n/uk-UA/app-log.json delete mode 100644 web/i18n/uk-UA/app-log.ts create mode 100644 web/i18n/uk-UA/app-overview.json delete mode 100644 web/i18n/uk-UA/app-overview.ts create mode 100644 web/i18n/uk-UA/app.json delete mode 100644 web/i18n/uk-UA/app.ts create mode 100644 web/i18n/uk-UA/billing.json delete mode 100644 web/i18n/uk-UA/billing.ts create mode 100644 web/i18n/uk-UA/common.json delete mode 100644 web/i18n/uk-UA/common.ts create mode 100644 web/i18n/uk-UA/custom.json delete mode 100644 web/i18n/uk-UA/custom.ts create mode 100644 web/i18n/uk-UA/dataset-creation.json delete mode 100644 web/i18n/uk-UA/dataset-creation.ts create mode 100644 web/i18n/uk-UA/dataset-documents.json delete mode 100644 web/i18n/uk-UA/dataset-documents.ts create mode 100644 web/i18n/uk-UA/dataset-hit-testing.json delete mode 100644 web/i18n/uk-UA/dataset-hit-testing.ts create mode 100644 web/i18n/uk-UA/dataset-pipeline.json delete mode 100644 web/i18n/uk-UA/dataset-pipeline.ts create mode 100644 web/i18n/uk-UA/dataset-settings.json delete mode 100644 web/i18n/uk-UA/dataset-settings.ts create mode 100644 web/i18n/uk-UA/dataset.json delete mode 100644 web/i18n/uk-UA/dataset.ts create mode 100644 web/i18n/uk-UA/education.json delete mode 100644 web/i18n/uk-UA/education.ts create mode 100644 web/i18n/uk-UA/explore.json delete mode 100644 web/i18n/uk-UA/explore.ts create mode 100644 web/i18n/uk-UA/layout.json delete mode 100644 web/i18n/uk-UA/layout.ts create mode 100644 web/i18n/uk-UA/login.json delete mode 100644 web/i18n/uk-UA/login.ts create mode 100644 web/i18n/uk-UA/oauth.json delete mode 100644 web/i18n/uk-UA/oauth.ts create mode 100644 web/i18n/uk-UA/pipeline.json delete mode 100644 web/i18n/uk-UA/pipeline.ts create mode 100644 web/i18n/uk-UA/plugin-tags.json delete mode 100644 web/i18n/uk-UA/plugin-tags.ts create mode 100644 web/i18n/uk-UA/plugin-trigger.json delete mode 100644 web/i18n/uk-UA/plugin-trigger.ts create mode 100644 web/i18n/uk-UA/plugin.json delete mode 100644 web/i18n/uk-UA/plugin.ts create mode 100644 web/i18n/uk-UA/register.json delete mode 100644 web/i18n/uk-UA/register.ts create mode 100644 web/i18n/uk-UA/run-log.json delete mode 100644 web/i18n/uk-UA/run-log.ts create mode 100644 web/i18n/uk-UA/share.json delete mode 100644 web/i18n/uk-UA/share.ts create mode 100644 web/i18n/uk-UA/time.json delete mode 100644 web/i18n/uk-UA/time.ts create mode 100644 web/i18n/uk-UA/tools.json delete mode 100644 web/i18n/uk-UA/tools.ts create mode 100644 web/i18n/uk-UA/workflow.json delete mode 100644 web/i18n/uk-UA/workflow.ts create mode 100644 web/i18n/vi-VN/app-annotation.json delete mode 100644 web/i18n/vi-VN/app-annotation.ts create mode 100644 web/i18n/vi-VN/app-api.json delete mode 100644 web/i18n/vi-VN/app-api.ts create mode 100644 web/i18n/vi-VN/app-debug.json delete mode 100644 web/i18n/vi-VN/app-debug.ts create mode 100644 web/i18n/vi-VN/app-log.json delete mode 100644 web/i18n/vi-VN/app-log.ts create mode 100644 web/i18n/vi-VN/app-overview.json delete mode 100644 web/i18n/vi-VN/app-overview.ts create mode 100644 web/i18n/vi-VN/app.json delete mode 100644 web/i18n/vi-VN/app.ts create mode 100644 web/i18n/vi-VN/billing.json delete mode 100644 web/i18n/vi-VN/billing.ts create mode 100644 web/i18n/vi-VN/common.json delete mode 100644 web/i18n/vi-VN/common.ts create mode 100644 web/i18n/vi-VN/custom.json delete mode 100644 web/i18n/vi-VN/custom.ts create mode 100644 web/i18n/vi-VN/dataset-creation.json delete mode 100644 web/i18n/vi-VN/dataset-creation.ts create mode 100644 web/i18n/vi-VN/dataset-documents.json delete mode 100644 web/i18n/vi-VN/dataset-documents.ts create mode 100644 web/i18n/vi-VN/dataset-hit-testing.json delete mode 100644 web/i18n/vi-VN/dataset-hit-testing.ts create mode 100644 web/i18n/vi-VN/dataset-pipeline.json delete mode 100644 web/i18n/vi-VN/dataset-pipeline.ts create mode 100644 web/i18n/vi-VN/dataset-settings.json delete mode 100644 web/i18n/vi-VN/dataset-settings.ts create mode 100644 web/i18n/vi-VN/dataset.json delete mode 100644 web/i18n/vi-VN/dataset.ts create mode 100644 web/i18n/vi-VN/education.json delete mode 100644 web/i18n/vi-VN/education.ts create mode 100644 web/i18n/vi-VN/explore.json delete mode 100644 web/i18n/vi-VN/explore.ts create mode 100644 web/i18n/vi-VN/layout.json delete mode 100644 web/i18n/vi-VN/layout.ts create mode 100644 web/i18n/vi-VN/login.json delete mode 100644 web/i18n/vi-VN/login.ts create mode 100644 web/i18n/vi-VN/oauth.json delete mode 100644 web/i18n/vi-VN/oauth.ts create mode 100644 web/i18n/vi-VN/pipeline.json delete mode 100644 web/i18n/vi-VN/pipeline.ts create mode 100644 web/i18n/vi-VN/plugin-tags.json delete mode 100644 web/i18n/vi-VN/plugin-tags.ts create mode 100644 web/i18n/vi-VN/plugin-trigger.json delete mode 100644 web/i18n/vi-VN/plugin-trigger.ts create mode 100644 web/i18n/vi-VN/plugin.json delete mode 100644 web/i18n/vi-VN/plugin.ts create mode 100644 web/i18n/vi-VN/register.json delete mode 100644 web/i18n/vi-VN/register.ts create mode 100644 web/i18n/vi-VN/run-log.json delete mode 100644 web/i18n/vi-VN/run-log.ts create mode 100644 web/i18n/vi-VN/share.json delete mode 100644 web/i18n/vi-VN/share.ts create mode 100644 web/i18n/vi-VN/time.json delete mode 100644 web/i18n/vi-VN/time.ts create mode 100644 web/i18n/vi-VN/tools.json delete mode 100644 web/i18n/vi-VN/tools.ts create mode 100644 web/i18n/vi-VN/workflow.json delete mode 100644 web/i18n/vi-VN/workflow.ts create mode 100644 web/i18n/zh-Hans/app-annotation.json delete mode 100644 web/i18n/zh-Hans/app-annotation.ts create mode 100644 web/i18n/zh-Hans/app-api.json delete mode 100644 web/i18n/zh-Hans/app-api.ts create mode 100644 web/i18n/zh-Hans/app-debug.json delete mode 100644 web/i18n/zh-Hans/app-debug.ts create mode 100644 web/i18n/zh-Hans/app-log.json delete mode 100644 web/i18n/zh-Hans/app-log.ts create mode 100644 web/i18n/zh-Hans/app-overview.json delete mode 100644 web/i18n/zh-Hans/app-overview.ts create mode 100644 web/i18n/zh-Hans/app.json delete mode 100644 web/i18n/zh-Hans/app.ts create mode 100644 web/i18n/zh-Hans/billing.json delete mode 100644 web/i18n/zh-Hans/billing.ts create mode 100644 web/i18n/zh-Hans/common.json delete mode 100644 web/i18n/zh-Hans/common.ts create mode 100644 web/i18n/zh-Hans/custom.json delete mode 100644 web/i18n/zh-Hans/custom.ts create mode 100644 web/i18n/zh-Hans/dataset-creation.json delete mode 100644 web/i18n/zh-Hans/dataset-creation.ts create mode 100644 web/i18n/zh-Hans/dataset-documents.json delete mode 100644 web/i18n/zh-Hans/dataset-documents.ts create mode 100644 web/i18n/zh-Hans/dataset-hit-testing.json delete mode 100644 web/i18n/zh-Hans/dataset-hit-testing.ts create mode 100644 web/i18n/zh-Hans/dataset-pipeline.json delete mode 100644 web/i18n/zh-Hans/dataset-pipeline.ts create mode 100644 web/i18n/zh-Hans/dataset-settings.json delete mode 100644 web/i18n/zh-Hans/dataset-settings.ts create mode 100644 web/i18n/zh-Hans/dataset.json delete mode 100644 web/i18n/zh-Hans/dataset.ts create mode 100644 web/i18n/zh-Hans/education.json delete mode 100644 web/i18n/zh-Hans/education.ts create mode 100644 web/i18n/zh-Hans/explore.json delete mode 100644 web/i18n/zh-Hans/explore.ts create mode 100644 web/i18n/zh-Hans/layout.json delete mode 100644 web/i18n/zh-Hans/layout.ts create mode 100644 web/i18n/zh-Hans/login.json delete mode 100644 web/i18n/zh-Hans/login.ts create mode 100644 web/i18n/zh-Hans/oauth.json delete mode 100644 web/i18n/zh-Hans/oauth.ts create mode 100644 web/i18n/zh-Hans/pipeline.json delete mode 100644 web/i18n/zh-Hans/pipeline.ts create mode 100644 web/i18n/zh-Hans/plugin-tags.json delete mode 100644 web/i18n/zh-Hans/plugin-tags.ts create mode 100644 web/i18n/zh-Hans/plugin-trigger.json delete mode 100644 web/i18n/zh-Hans/plugin-trigger.ts create mode 100644 web/i18n/zh-Hans/plugin.json delete mode 100644 web/i18n/zh-Hans/plugin.ts create mode 100644 web/i18n/zh-Hans/register.json delete mode 100644 web/i18n/zh-Hans/register.ts create mode 100644 web/i18n/zh-Hans/run-log.json delete mode 100644 web/i18n/zh-Hans/run-log.ts create mode 100644 web/i18n/zh-Hans/share.json delete mode 100644 web/i18n/zh-Hans/share.ts create mode 100644 web/i18n/zh-Hans/time.json delete mode 100644 web/i18n/zh-Hans/time.ts create mode 100644 web/i18n/zh-Hans/tools.json delete mode 100644 web/i18n/zh-Hans/tools.ts create mode 100644 web/i18n/zh-Hans/workflow.json delete mode 100644 web/i18n/zh-Hans/workflow.ts create mode 100644 web/i18n/zh-Hant/app-annotation.json delete mode 100644 web/i18n/zh-Hant/app-annotation.ts create mode 100644 web/i18n/zh-Hant/app-api.json delete mode 100644 web/i18n/zh-Hant/app-api.ts create mode 100644 web/i18n/zh-Hant/app-debug.json delete mode 100644 web/i18n/zh-Hant/app-debug.ts create mode 100644 web/i18n/zh-Hant/app-log.json delete mode 100644 web/i18n/zh-Hant/app-log.ts create mode 100644 web/i18n/zh-Hant/app-overview.json delete mode 100644 web/i18n/zh-Hant/app-overview.ts create mode 100644 web/i18n/zh-Hant/app.json delete mode 100644 web/i18n/zh-Hant/app.ts create mode 100644 web/i18n/zh-Hant/billing.json delete mode 100644 web/i18n/zh-Hant/billing.ts create mode 100644 web/i18n/zh-Hant/common.json delete mode 100644 web/i18n/zh-Hant/common.ts create mode 100644 web/i18n/zh-Hant/custom.json delete mode 100644 web/i18n/zh-Hant/custom.ts create mode 100644 web/i18n/zh-Hant/dataset-creation.json delete mode 100644 web/i18n/zh-Hant/dataset-creation.ts create mode 100644 web/i18n/zh-Hant/dataset-documents.json delete mode 100644 web/i18n/zh-Hant/dataset-documents.ts create mode 100644 web/i18n/zh-Hant/dataset-hit-testing.json delete mode 100644 web/i18n/zh-Hant/dataset-hit-testing.ts create mode 100644 web/i18n/zh-Hant/dataset-pipeline.json delete mode 100644 web/i18n/zh-Hant/dataset-pipeline.ts create mode 100644 web/i18n/zh-Hant/dataset-settings.json delete mode 100644 web/i18n/zh-Hant/dataset-settings.ts create mode 100644 web/i18n/zh-Hant/dataset.json delete mode 100644 web/i18n/zh-Hant/dataset.ts create mode 100644 web/i18n/zh-Hant/education.json delete mode 100644 web/i18n/zh-Hant/education.ts create mode 100644 web/i18n/zh-Hant/explore.json delete mode 100644 web/i18n/zh-Hant/explore.ts create mode 100644 web/i18n/zh-Hant/layout.json delete mode 100644 web/i18n/zh-Hant/layout.ts create mode 100644 web/i18n/zh-Hant/login.json delete mode 100644 web/i18n/zh-Hant/login.ts create mode 100644 web/i18n/zh-Hant/oauth.json delete mode 100644 web/i18n/zh-Hant/oauth.ts create mode 100644 web/i18n/zh-Hant/pipeline.json delete mode 100644 web/i18n/zh-Hant/pipeline.ts create mode 100644 web/i18n/zh-Hant/plugin-tags.json delete mode 100644 web/i18n/zh-Hant/plugin-tags.ts create mode 100644 web/i18n/zh-Hant/plugin-trigger.json delete mode 100644 web/i18n/zh-Hant/plugin-trigger.ts create mode 100644 web/i18n/zh-Hant/plugin.json delete mode 100644 web/i18n/zh-Hant/plugin.ts create mode 100644 web/i18n/zh-Hant/register.json delete mode 100644 web/i18n/zh-Hant/register.ts create mode 100644 web/i18n/zh-Hant/run-log.json delete mode 100644 web/i18n/zh-Hant/run-log.ts create mode 100644 web/i18n/zh-Hant/share.json delete mode 100644 web/i18n/zh-Hant/share.ts create mode 100644 web/i18n/zh-Hant/time.json delete mode 100644 web/i18n/zh-Hant/time.ts create mode 100644 web/i18n/zh-Hant/tools.json delete mode 100644 web/i18n/zh-Hant/tools.ts create mode 100644 web/i18n/zh-Hant/workflow.json delete mode 100644 web/i18n/zh-Hant/workflow.ts create mode 100644 web/scripts/analyze-i18n-diff.ts create mode 100644 web/service/use-share.spec.tsx diff --git a/.claude/skills/component-refactoring/SKILL.md b/.claude/skills/component-refactoring/SKILL.md index ea695ea442..7006c382c8 100644 --- a/.claude/skills/component-refactoring/SKILL.md +++ b/.claude/skills/component-refactoring/SKILL.md @@ -187,7 +187,7 @@ const Template = useMemo(() => { **When**: Component directly handles API calls, data transformation, or complex async operations. -**Dify Convention**: Use `@tanstack/react-query` hooks from `web/service/use-*.ts` or create custom data hooks. Project is migrating from SWR to React Query. +**Dify Convention**: Use `@tanstack/react-query` hooks from `web/service/use-*.ts` or create custom data hooks. ```typescript // ❌ Before: API logic in component diff --git a/.github/workflows/translate-i18n-base-on-english.yml b/.github/workflows/translate-i18n-base-on-english.yml index 58cd18371f..06227859dd 100644 --- a/.github/workflows/translate-i18n-base-on-english.yml +++ b/.github/workflows/translate-i18n-base-on-english.yml @@ -4,7 +4,7 @@ on: push: branches: [main] paths: - - 'web/i18n/en-US/*.ts' + - 'web/i18n/en-US/*.json' permissions: contents: write @@ -28,13 +28,13 @@ jobs: run: | git fetch origin "${{ github.event.before }}" || true git fetch origin "${{ github.sha }}" || true - changed_files=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- 'i18n/en-US/*.ts') + changed_files=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- 'i18n/en-US/*.json') echo "Changed files: $changed_files" if [ -n "$changed_files" ]; then echo "FILES_CHANGED=true" >> $GITHUB_ENV file_args="" for file in $changed_files; do - filename=$(basename "$file" .ts) + filename=$(basename "$file" .json) file_args="$file_args --file $filename" done echo "FILE_ARGS=$file_args" >> $GITHUB_ENV diff --git a/api/core/helper/code_executor/jinja2/jinja2_transformer.py b/api/core/helper/code_executor/jinja2/jinja2_transformer.py index 969125d2f7..5e4807401e 100644 --- a/api/core/helper/code_executor/jinja2/jinja2_transformer.py +++ b/api/core/helper/code_executor/jinja2/jinja2_transformer.py @@ -1,9 +1,14 @@ +from collections.abc import Mapping from textwrap import dedent +from typing import Any from core.helper.code_executor.template_transformer import TemplateTransformer class Jinja2TemplateTransformer(TemplateTransformer): + # Use separate placeholder for base64-encoded template to avoid confusion + _template_b64_placeholder: str = "{{template_b64}}" + @classmethod def transform_response(cls, response: str): """ @@ -13,18 +18,35 @@ class Jinja2TemplateTransformer(TemplateTransformer): """ return {"result": cls.extract_result_str_from_response(response)} + @classmethod + def assemble_runner_script(cls, code: str, inputs: Mapping[str, Any]) -> str: + """ + Override base class to use base64 encoding for template code. + This prevents issues with special characters (quotes, newlines) in templates + breaking the generated Python script. Fixes #26818. + """ + script = cls.get_runner_script() + # Encode template as base64 to safely embed any content including quotes + code_b64 = cls.serialize_code(code) + script = script.replace(cls._template_b64_placeholder, code_b64) + inputs_str = cls.serialize_inputs(inputs) + script = script.replace(cls._inputs_placeholder, inputs_str) + return script + @classmethod def get_runner_script(cls) -> str: runner_script = dedent(f""" - # declare main function - def main(**inputs): - import jinja2 - template = jinja2.Template('''{cls._code_placeholder}''') - return template.render(**inputs) - + import jinja2 import json from base64 import b64decode + # declare main function + def main(**inputs): + # Decode base64-encoded template to handle special characters safely + template_code = b64decode('{cls._template_b64_placeholder}').decode('utf-8') + template = jinja2.Template(template_code) + return template.render(**inputs) + # decode and prepare input dict inputs_obj = json.loads(b64decode('{cls._inputs_placeholder}').decode('utf-8')) diff --git a/api/core/helper/code_executor/template_transformer.py b/api/core/helper/code_executor/template_transformer.py index 3965f8cb31..6fda073913 100644 --- a/api/core/helper/code_executor/template_transformer.py +++ b/api/core/helper/code_executor/template_transformer.py @@ -13,6 +13,15 @@ class TemplateTransformer(ABC): _inputs_placeholder: str = "{{inputs}}" _result_tag: str = "<>" + @classmethod + def serialize_code(cls, code: str) -> str: + """ + Serialize template code to base64 to safely embed in generated script. + This prevents issues with special characters like quotes breaking the script. + """ + code_bytes = code.encode("utf-8") + return b64encode(code_bytes).decode("utf-8") + @classmethod def transform_caller(cls, code: str, inputs: Mapping[str, Any]) -> tuple[str, str]: """ diff --git a/api/tests/integration_tests/workflow/nodes/code_executor/test_code_jinja2.py b/api/tests/integration_tests/workflow/nodes/code_executor/test_code_jinja2.py index 94903cf796..c8eb9ec3e4 100644 --- a/api/tests/integration_tests/workflow/nodes/code_executor/test_code_jinja2.py +++ b/api/tests/integration_tests/workflow/nodes/code_executor/test_code_jinja2.py @@ -7,11 +7,14 @@ CODE_LANGUAGE = CodeLanguage.JINJA2 def test_jinja2(): + """Test basic Jinja2 template rendering.""" template = "Hello {{template}}" + # Template must be base64 encoded to match the new safe embedding approach + template_b64 = base64.b64encode(template.encode("utf-8")).decode("utf-8") inputs = base64.b64encode(b'{"template": "World"}').decode("utf-8") code = ( Jinja2TemplateTransformer.get_runner_script() - .replace(Jinja2TemplateTransformer._code_placeholder, template) + .replace(Jinja2TemplateTransformer._template_b64_placeholder, template_b64) .replace(Jinja2TemplateTransformer._inputs_placeholder, inputs) ) result = CodeExecutor.execute_code( @@ -21,6 +24,7 @@ def test_jinja2(): def test_jinja2_with_code_template(): + """Test template rendering via the high-level workflow API.""" result = CodeExecutor.execute_workflow_code_template( language=CODE_LANGUAGE, code="Hello {{template}}", inputs={"template": "World"} ) @@ -28,7 +32,64 @@ def test_jinja2_with_code_template(): def test_jinja2_get_runner_script(): + """Test that runner script contains required placeholders.""" runner_script = Jinja2TemplateTransformer.get_runner_script() - assert runner_script.count(Jinja2TemplateTransformer._code_placeholder) == 1 + assert runner_script.count(Jinja2TemplateTransformer._template_b64_placeholder) == 1 assert runner_script.count(Jinja2TemplateTransformer._inputs_placeholder) == 1 assert runner_script.count(Jinja2TemplateTransformer._result_tag) == 2 + + +def test_jinja2_template_with_special_characters(): + """ + Test that templates with special characters (quotes, newlines) render correctly. + This is a regression test for issue #26818 where textarea pre-fill values + containing special characters would break template rendering. + """ + # Template with triple quotes, single quotes, double quotes, and newlines + template = """ + + + +

Status: "{{ status }}"

+
'''code block'''
+ +""" + inputs = {"task": {"Task ID": "TASK-123", "Issues": "Line 1\nLine 2\nLine 3"}, "status": "completed"} + + result = CodeExecutor.execute_workflow_code_template(language=CODE_LANGUAGE, code=template, inputs=inputs) + + # Verify the template rendered correctly with all special characters + output = result["result"] + assert 'value="TASK-123"' in output + assert "" in output + assert 'Status: "completed"' in output + assert "'''code block'''" in output + + +def test_jinja2_template_with_html_textarea_prefill(): + """ + Specific test for HTML textarea with Jinja2 variable pre-fill. + Verifies fix for issue #26818. + """ + template = "" + notes_content = "This is a multi-line note.\nWith special chars: 'single' and \"double\" quotes." + inputs = {"notes": notes_content} + + result = CodeExecutor.execute_workflow_code_template(language=CODE_LANGUAGE, code=template, inputs=inputs) + + expected_output = f"" + assert result["result"] == expected_output + + +def test_jinja2_assemble_runner_script_encodes_template(): + """Test that assemble_runner_script properly base64 encodes the template.""" + template = "Hello {{ name }}!" + inputs = {"name": "World"} + + script = Jinja2TemplateTransformer.assemble_runner_script(template, inputs) + + # The template should be base64 encoded in the script + template_b64 = base64.b64encode(template.encode("utf-8")).decode("utf-8") + assert template_b64 in script + # The raw template should NOT appear in the script (it's encoded) + assert "Hello {{ name }}!" not in script diff --git a/api/tests/test_containers_integration_tests/workflow/nodes/code_executor/test_code_jinja2.py b/api/tests/test_containers_integration_tests/workflow/nodes/code_executor/test_code_jinja2.py index c764801170..ddb079f00c 100644 --- a/api/tests/test_containers_integration_tests/workflow/nodes/code_executor/test_code_jinja2.py +++ b/api/tests/test_containers_integration_tests/workflow/nodes/code_executor/test_code_jinja2.py @@ -12,10 +12,12 @@ class TestJinja2CodeExecutor(CodeExecutorTestMixin): _, Jinja2TemplateTransformer = self.jinja2_imports template = "Hello {{template}}" + # Template must be base64 encoded to match the new safe embedding approach + template_b64 = base64.b64encode(template.encode("utf-8")).decode("utf-8") inputs = base64.b64encode(b'{"template": "World"}').decode("utf-8") code = ( Jinja2TemplateTransformer.get_runner_script() - .replace(Jinja2TemplateTransformer._code_placeholder, template) + .replace(Jinja2TemplateTransformer._template_b64_placeholder, template_b64) .replace(Jinja2TemplateTransformer._inputs_placeholder, inputs) ) result = CodeExecutor.execute_code( @@ -37,6 +39,34 @@ class TestJinja2CodeExecutor(CodeExecutorTestMixin): _, Jinja2TemplateTransformer = self.jinja2_imports runner_script = Jinja2TemplateTransformer.get_runner_script() - assert runner_script.count(Jinja2TemplateTransformer._code_placeholder) == 1 + assert runner_script.count(Jinja2TemplateTransformer._template_b64_placeholder) == 1 assert runner_script.count(Jinja2TemplateTransformer._inputs_placeholder) == 1 assert runner_script.count(Jinja2TemplateTransformer._result_tag) == 2 + + def test_jinja2_template_with_special_characters(self, flask_app_with_containers): + """ + Test that templates with special characters (quotes, newlines) render correctly. + This is a regression test for issue #26818 where textarea pre-fill values + containing special characters would break template rendering. + """ + CodeExecutor, CodeLanguage = self.code_executor_imports + + # Template with triple quotes, single quotes, double quotes, and newlines + template = """ + + + +

Status: "{{ status }}"

+
'''code block'''
+ +""" + inputs = {"task": {"Task ID": "TASK-123", "Issues": "Line 1\nLine 2\nLine 3"}, "status": "completed"} + + result = CodeExecutor.execute_workflow_code_template(language=CodeLanguage.JINJA2, code=template, inputs=inputs) + + # Verify the template rendered correctly with all special characters + output = result["result"] + assert 'value="TASK-123"' in output + assert "" in output + assert 'Status: "completed"' in output + assert "'''code block'''" in output diff --git a/web/__tests__/i18n-upload-features.test.ts b/web/__tests__/i18n-upload-features.test.ts index af418262d6..3d0f1d30dd 100644 --- a/web/__tests__/i18n-upload-features.test.ts +++ b/web/__tests__/i18n-upload-features.test.ts @@ -16,7 +16,7 @@ const getSupportedLocales = (): string[] => { // Helper function to load translation file content const loadTranslationContent = (locale: string): string => { - const filePath = path.join(I18N_DIR, locale, 'app-debug.ts') + const filePath = path.join(I18N_DIR, locale, 'app-debug.json') if (!fs.existsSync(filePath)) throw new Error(`Translation file not found: ${filePath}`) @@ -24,14 +24,14 @@ const loadTranslationContent = (locale: string): string => { return fs.readFileSync(filePath, 'utf-8') } -// Helper function to check if upload features exist +// Helper function to check if upload features exist (supports flattened JSON) const hasUploadFeatures = (content: string): { [key: string]: boolean } => { return { - fileUpload: /fileUpload\s*:\s*\{/.test(content), - imageUpload: /imageUpload\s*:\s*\{/.test(content), - documentUpload: /documentUpload\s*:\s*\{/.test(content), - audioUpload: /audioUpload\s*:\s*\{/.test(content), - featureBar: /bar\s*:\s*\{/.test(content), + fileUpload: /"feature\.fileUpload\.title"/.test(content), + imageUpload: /"feature\.imageUpload\.title"/.test(content), + documentUpload: /"feature\.documentUpload\.title"/.test(content), + audioUpload: /"feature\.audioUpload\.title"/.test(content), + featureBar: /"feature\.bar\.empty"/.test(content), } } @@ -45,7 +45,7 @@ describe('Upload Features i18n Translations - Issue #23062', () => { it('all locales should have translation files', () => { supportedLocales.forEach((locale) => { - const filePath = path.join(I18N_DIR, locale, 'app-debug.ts') + const filePath = path.join(I18N_DIR, locale, 'app-debug.json') expect(fs.existsSync(filePath)).toBe(true) }) }) @@ -76,12 +76,9 @@ describe('Upload Features i18n Translations - Issue #23062', () => { previouslyMissingLocales.forEach((locale) => { const content = loadTranslationContent(locale) - // Verify audioUpload exists - expect(/audioUpload\s*:\s*\{/.test(content)).toBe(true) - - // Verify it has title and description - expect(/audioUpload[^}]*title\s*:/.test(content)).toBe(true) - expect(/audioUpload[^}]*description\s*:/.test(content)).toBe(true) + // Verify audioUpload exists with title and description (flattened JSON format) + expect(/"feature\.audioUpload\.title"/.test(content)).toBe(true) + expect(/"feature\.audioUpload\.description"/.test(content)).toBe(true) console.log(`✅ ${locale} - Issue #23062 resolved: audioUpload feature present`) }) @@ -91,28 +88,28 @@ describe('Upload Features i18n Translations - Issue #23062', () => { supportedLocales.forEach((locale) => { const content = loadTranslationContent(locale) - // Check fileUpload has required properties - if (/fileUpload\s*:\s*\{/.test(content)) { - expect(/fileUpload[^}]*title\s*:/.test(content)).toBe(true) - expect(/fileUpload[^}]*description\s*:/.test(content)).toBe(true) + // Check fileUpload has required properties (flattened JSON format) + if (/"feature\.fileUpload\.title"/.test(content)) { + expect(/"feature\.fileUpload\.title"/.test(content)).toBe(true) + expect(/"feature\.fileUpload\.description"/.test(content)).toBe(true) } // Check imageUpload has required properties - if (/imageUpload\s*:\s*\{/.test(content)) { - expect(/imageUpload[^}]*title\s*:/.test(content)).toBe(true) - expect(/imageUpload[^}]*description\s*:/.test(content)).toBe(true) + if (/"feature\.imageUpload\.title"/.test(content)) { + expect(/"feature\.imageUpload\.title"/.test(content)).toBe(true) + expect(/"feature\.imageUpload\.description"/.test(content)).toBe(true) } // Check documentUpload has required properties - if (/documentUpload\s*:\s*\{/.test(content)) { - expect(/documentUpload[^}]*title\s*:/.test(content)).toBe(true) - expect(/documentUpload[^}]*description\s*:/.test(content)).toBe(true) + if (/"feature\.documentUpload\.title"/.test(content)) { + expect(/"feature\.documentUpload\.title"/.test(content)).toBe(true) + expect(/"feature\.documentUpload\.description"/.test(content)).toBe(true) } // Check audioUpload has required properties - if (/audioUpload\s*:\s*\{/.test(content)) { - expect(/audioUpload[^}]*title\s*:/.test(content)).toBe(true) - expect(/audioUpload[^}]*description\s*:/.test(content)).toBe(true) + if (/"feature\.audioUpload\.title"/.test(content)) { + expect(/"feature\.audioUpload\.title"/.test(content)).toBe(true) + expect(/"feature\.audioUpload\.description"/.test(content)).toBe(true) } }) }) diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout-main.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout-main.tsx index c1feb3ea5d..470f4477fa 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout-main.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout-main.tsx @@ -70,7 +70,7 @@ const AppDetailLayout: FC = (props) => { const navConfig = [ ...(isCurrentWorkspaceEditor ? [{ - name: t('common.appMenus.promptEng'), + name: t('appMenus.promptEng', { ns: 'common' }), href: `/app/${appId}/${(mode === AppModeEnum.WORKFLOW || mode === AppModeEnum.ADVANCED_CHAT) ? 'workflow' : 'configuration'}`, icon: RiTerminalWindowLine, selectedIcon: RiTerminalWindowFill, @@ -78,7 +78,7 @@ const AppDetailLayout: FC = (props) => { : [] ), { - name: t('common.appMenus.apiAccess'), + name: t('appMenus.apiAccess', { ns: 'common' }), href: `/app/${appId}/develop`, icon: RiTerminalBoxLine, selectedIcon: RiTerminalBoxFill, @@ -86,8 +86,8 @@ const AppDetailLayout: FC = (props) => { ...(isCurrentWorkspaceEditor ? [{ name: mode !== AppModeEnum.WORKFLOW - ? t('common.appMenus.logAndAnn') - : t('common.appMenus.logs'), + ? t('appMenus.logAndAnn', { ns: 'common' }) + : t('appMenus.logs', { ns: 'common' }), href: `/app/${appId}/logs`, icon: RiFileList3Line, selectedIcon: RiFileList3Fill, @@ -95,7 +95,7 @@ const AppDetailLayout: FC = (props) => { : [] ), { - name: t('common.appMenus.overview'), + name: t('appMenus.overview', { ns: 'common' }), href: `/app/${appId}/overview`, icon: RiDashboard2Line, selectedIcon: RiDashboard2Fill, @@ -104,7 +104,7 @@ const AppDetailLayout: FC = (props) => { return navConfig }, [t]) - useDocumentTitle(appDetail?.name || t('common.menus.appDetail')) + useDocumentTitle(appDetail?.name || t('menus.appDetail', { ns: 'common' })) useEffect(() => { if (appDetail) { diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx index 34bb0f82f8..939e4e9fe6 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx @@ -4,6 +4,7 @@ import type { IAppCardProps } from '@/app/components/app/overview/app-card' import type { BlockEnum } from '@/app/components/workflow/types' import type { UpdateAppSiteCodeResponse } from '@/models/app' import type { App } from '@/types/app' +import type { I18nKeysByPrefix } from '@/types/i18n' import * as React from 'react' import { useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' @@ -62,7 +63,7 @@ const CardView: FC = ({ appId, isInPanel, className }) => { const buildTriggerModeMessage = useCallback((featureName: string) => (
- {t('appOverview.overview.disableTooltip.triggerMode', { feature: featureName })} + {t('overview.disableTooltip.triggerMode', { ns: 'appOverview', feature: featureName })}
= ({ appId, isInPanel, className }) => { window.open(triggerDocUrl, '_blank') }} > - {t('appOverview.overview.appInfo.enableTooltip.learnMore')} + {t('overview.appInfo.enableTooltip.learnMore', { ns: 'appOverview' })}
), [t, triggerDocUrl]) const disableWebAppTooltip = disableAppCards - ? buildTriggerModeMessage(t('appOverview.overview.appInfo.title')) + ? buildTriggerModeMessage(t('overview.appInfo.title', { ns: 'appOverview' })) : null const disableApiTooltip = disableAppCards - ? buildTriggerModeMessage(t('appOverview.overview.apiInfo.title')) + ? buildTriggerModeMessage(t('overview.apiInfo.title', { ns: 'appOverview' })) : null const disableMcpTooltip = disableAppCards - ? buildTriggerModeMessage(t('tools.mcp.server.title')) + ? buildTriggerModeMessage(t('mcp.server.title', { ns: 'tools' })) : null const updateAppDetail = async () => { @@ -94,7 +95,7 @@ const CardView: FC = ({ appId, isInPanel, className }) => { catch (error) { console.error(error) } } - const handleCallbackResult = (err: Error | null, message?: string) => { + const handleCallbackResult = (err: Error | null, message?: I18nKeysByPrefix<'common', 'actionMsg.'>) => { const type = err ? 'error' : 'success' message ||= (type === 'success' ? 'modifiedSuccessfully' : 'modifiedUnsuccessfully') @@ -104,7 +105,7 @@ const CardView: FC = ({ appId, isInPanel, className }) => { notify({ type, - message: t(`common.actionMsg.${message}` as any) as string, + message: t(`actionMsg.${message}`, { ns: 'common' }) as string, }) } diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx index e1fca90c5d..b6e902f456 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx @@ -1,5 +1,6 @@ 'use client' import type { PeriodParams } from '@/app/components/app/overview/app-chart' +import type { I18nKeysByPrefix } from '@/types/i18n' import dayjs from 'dayjs' import quarterOfYear from 'dayjs/plugin/quarterOfYear' import * as React from 'react' @@ -16,7 +17,9 @@ dayjs.extend(quarterOfYear) const today = dayjs() -const TIME_PERIOD_MAPPING = [ +type TimePeriodName = I18nKeysByPrefix<'appLog', 'filter.period.'> + +const TIME_PERIOD_MAPPING: { value: number, name: TimePeriodName }[] = [ { value: 0, name: 'today' }, { value: 7, name: 'last7days' }, { value: 30, name: 'last30days' }, @@ -35,8 +38,8 @@ export default function ChartView({ appId, headerRight }: IChartViewProps) { const isChatApp = appDetail?.mode !== 'completion' && appDetail?.mode !== 'workflow' const isWorkflow = appDetail?.mode === 'workflow' const [period, setPeriod] = useState(IS_CLOUD_EDITION - ? { name: t('appLog.filter.period.today'), query: { start: today.startOf('day').format(queryDateFormat), end: today.endOf('day').format(queryDateFormat) } } - : { name: t('appLog.filter.period.last7days'), query: { start: today.subtract(7, 'day').startOf('day').format(queryDateFormat), end: today.endOf('day').format(queryDateFormat) } }, + ? { name: t('filter.period.today', { ns: 'appLog' }), query: { start: today.startOf('day').format(queryDateFormat), end: today.endOf('day').format(queryDateFormat) } } + : { name: t('filter.period.last7days', { ns: 'appLog' }), query: { start: today.subtract(7, 'day').startOf('day').format(queryDateFormat), end: today.endOf('day').format(queryDateFormat) } }, ) if (!appDetail) @@ -45,7 +48,7 @@ export default function ChartView({ appId, headerRight }: IChartViewProps) { return (
-
{t('common.appMenus.overview')}
+
{t('appMenus.overview', { ns: 'common' })}
{IS_CLOUD_EDITION ? ( diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/long-time-range-picker.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/long-time-range-picker.tsx index 55ed906a45..f7178d7ac2 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/long-time-range-picker.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/long-time-range-picker.tsx @@ -2,13 +2,16 @@ import type { FC } from 'react' import type { PeriodParams } from '@/app/components/app/overview/app-chart' import type { Item } from '@/app/components/base/select' +import type { I18nKeysByPrefix } from '@/types/i18n' import dayjs from 'dayjs' import * as React from 'react' import { useTranslation } from 'react-i18next' import { SimpleSelect } from '@/app/components/base/select' +type TimePeriodName = I18nKeysByPrefix<'appLog', 'filter.period.'> + type Props = { - periodMapping: { [key: string]: { value: number, name: string } } + periodMapping: { [key: string]: { value: number, name: TimePeriodName } } onSelect: (payload: PeriodParams) => void queryDateFormat: string } @@ -25,9 +28,9 @@ const LongTimeRangePicker: FC = ({ const handleSelect = React.useCallback((item: Item) => { const id = item.value const value = periodMapping[id]?.value ?? '-1' - const name = item.name || t('appLog.filter.period.allTime') + const name = item.name || t('filter.period.allTime', { ns: 'appLog' }) if (value === -1) { - onSelect({ name: t('appLog.filter.period.allTime'), query: undefined }) + onSelect({ name: t('filter.period.allTime', { ns: 'appLog' }), query: undefined }) } else if (value === 0) { const startOfToday = today.startOf('day').format(queryDateFormat) @@ -53,7 +56,7 @@ const LongTimeRangePicker: FC = ({ return ( ({ value: k, name: t(`appLog.filter.period.${v.name}` as any) as string }))} + items={Object.entries(periodMapping).map(([k, v]) => ({ value: k, name: t(`filter.period.${v.name}`, { ns: 'appLog' }) }))} className="mt-0 !w-40" notClearable={true} onSelect={handleSelect} diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/index.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/index.tsx index 469bc97737..10209de97b 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/index.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/index.tsx @@ -2,6 +2,7 @@ import type { Dayjs } from 'dayjs' import type { FC } from 'react' import type { PeriodParams, PeriodParamsWithTimeRange } from '@/app/components/app/overview/app-chart' +import type { I18nKeysByPrefix } from '@/types/i18n' import dayjs from 'dayjs' import * as React from 'react' import { useCallback, useState } from 'react' @@ -13,8 +14,10 @@ import RangeSelector from './range-selector' const today = dayjs() +type TimePeriodName = I18nKeysByPrefix<'appLog', 'filter.period.'> + type Props = { - ranges: { value: number, name: string }[] + ranges: { value: number, name: TimePeriodName }[] onSelect: (payload: PeriodParams) => void queryDateFormat: string } diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/range-selector.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/range-selector.tsx index 88cb79ce0d..986170728f 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/range-selector.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker/range-selector.tsx @@ -2,6 +2,7 @@ import type { FC } from 'react' import type { PeriodParamsWithTimeRange, TimeRange } from '@/app/components/app/overview/app-chart' import type { Item } from '@/app/components/base/select' +import type { I18nKeysByPrefix } from '@/types/i18n' import { RiArrowDownSLine, RiCheckLine } from '@remixicon/react' import dayjs from 'dayjs' import * as React from 'react' @@ -12,9 +13,11 @@ import { cn } from '@/utils/classnames' const today = dayjs() +type TimePeriodName = I18nKeysByPrefix<'appLog', 'filter.period.'> + type Props = { isCustomRange: boolean - ranges: { value: number, name: string }[] + ranges: { value: number, name: TimePeriodName }[] onSelect: (payload: PeriodParamsWithTimeRange) => void } @@ -42,7 +45,7 @@ const RangeSelector: FC = ({ const renderTrigger = useCallback((item: Item | null, isOpen: boolean) => { return (
-
{isCustomRange ? t('appLog.filter.period.custom') : item?.name}
+
{isCustomRange ? t('filter.period.custom', { ns: 'appLog' }) : item?.name}
) @@ -66,7 +69,7 @@ const RangeSelector: FC = ({ }, []) return ( ({ ...v, name: t(`appLog.filter.period.${v.name}` as any) as string }))} + items={ranges.map(v => ({ ...v, name: t(`filter.period.${v.name}`, { ns: 'appLog' }) }))} className="mt-0 !w-40" notClearable={true} onSelect={handleSelectRange} diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx index 35ab8a61ec..4469459b52 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx @@ -15,7 +15,7 @@ import ProviderPanel from './provider-panel' import TracingIcon from './tracing-icon' import { TracingProvider } from './type' -const I18N_PREFIX = 'app.tracing' +const I18N_PREFIX = 'tracing' export type PopupProps = { appId: string @@ -327,19 +327,19 @@ const ConfigPopup: FC = ({
-
{t(`${I18N_PREFIX}.tracing`)}
+
{t(`${I18N_PREFIX}.tracing`, { ns: 'app' })}
- {t(`${I18N_PREFIX}.${enabled ? 'enabled' : 'disabled'}`)} + {t(`${I18N_PREFIX}.${enabled ? 'enabled' : 'disabled'}`, { ns: 'app' })}
{!readOnly && ( <> {providerAllNotConfigured ? ( {switchContent} @@ -351,14 +351,14 @@ const ConfigPopup: FC = ({
- {t(`${I18N_PREFIX}.tracingDescription`)} + {t(`${I18N_PREFIX}.tracingDescription`, { ns: 'app' })}
{(providerAllConfigured || providerAllNotConfigured) ? ( <> -
{t(`${I18N_PREFIX}.configProviderTitle.${providerAllConfigured ? 'configured' : 'notConfigured'}`)}
+
{t(`${I18N_PREFIX}.configProviderTitle.${providerAllConfigured ? 'configured' : 'notConfigured'}`, { ns: 'app' })}
{langfusePanel} {langSmithPanel} @@ -375,11 +375,11 @@ const ConfigPopup: FC = ({ ) : ( <> -
{t(`${I18N_PREFIX}.configProviderTitle.configured`)}
+
{t(`${I18N_PREFIX}.configProviderTitle.configured`, { ns: 'app' })}
{configuredProviderPanel()}
-
{t(`${I18N_PREFIX}.configProviderTitle.moreProvider`)}
+
{t(`${I18N_PREFIX}.configProviderTitle.moreProvider`, { ns: 'app' })}
{moreProviderPanel()}
diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx index 438dbddfb8..5e7d98d191 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx @@ -23,7 +23,7 @@ import ConfigButton from './config-button' import TracingIcon from './tracing-icon' import { TracingProvider } from './type' -const I18N_PREFIX = 'app.tracing' +const I18N_PREFIX = 'tracing' const Panel: FC = () => { const { t } = useTranslation() @@ -45,7 +45,7 @@ const Panel: FC = () => { if (!noToast) { Toast.notify({ type: 'success', - message: t('common.api.success'), + message: t('api.success', { ns: 'common' }), }) } } @@ -254,7 +254,7 @@ const Panel: FC = () => { )} > -
{t(`${I18N_PREFIX}.title`)}
+
{t(`${I18N_PREFIX}.title`, { ns: 'app' })}
@@ -295,7 +295,7 @@ const Panel: FC = () => {
- {t(`${I18N_PREFIX}.${enabled ? 'enabled' : 'disabled'}`)} + {t(`${I18N_PREFIX}.${enabled ? 'enabled' : 'disabled'}`, { ns: 'app' })}
{InUseProviderIcon && } diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-config-modal.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-config-modal.tsx index 0ef97e6970..ff78712c3c 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-config-modal.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-config-modal.tsx @@ -30,7 +30,7 @@ type Props = { onChosen: (provider: TracingProvider) => void } -const I18N_PREFIX = 'app.tracing.configProvider' +const I18N_PREFIX = 'tracing.configProvider' const arizeConfigTemplate = { api_key: '', @@ -157,7 +157,7 @@ const ProviderConfigModal: FC = ({ }) Toast.notify({ type: 'success', - message: t('common.api.remove'), + message: t('api.remove', { ns: 'common' }), }) onRemoved() hideRemoveConfirm() @@ -177,37 +177,37 @@ const ProviderConfigModal: FC = ({ if (type === TracingProvider.arize) { const postData = config as ArizeConfig if (!postData.api_key) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'API Key' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'API Key' }) if (!postData.space_id) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Space ID' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Space ID' }) if (!errorMessage && !postData.project) - errorMessage = t('common.errorMsg.fieldRequired', { field: t(`${I18N_PREFIX}.project`) }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t(`${I18N_PREFIX}.project`, { ns: 'app' }) }) } if (type === TracingProvider.phoenix) { const postData = config as PhoenixConfig if (!postData.api_key) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'API Key' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'API Key' }) if (!errorMessage && !postData.project) - errorMessage = t('common.errorMsg.fieldRequired', { field: t(`${I18N_PREFIX}.project`) }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t(`${I18N_PREFIX}.project`, { ns: 'app' }) }) } if (type === TracingProvider.langSmith) { const postData = config as LangSmithConfig if (!postData.api_key) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'API Key' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'API Key' }) if (!errorMessage && !postData.project) - errorMessage = t('common.errorMsg.fieldRequired', { field: t(`${I18N_PREFIX}.project`) }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t(`${I18N_PREFIX}.project`, { ns: 'app' }) }) } if (type === TracingProvider.langfuse) { const postData = config as LangFuseConfig if (!errorMessage && !postData.secret_key) - errorMessage = t('common.errorMsg.fieldRequired', { field: t(`${I18N_PREFIX}.secretKey`) }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t(`${I18N_PREFIX}.secretKey`, { ns: 'app' }) }) if (!errorMessage && !postData.public_key) - errorMessage = t('common.errorMsg.fieldRequired', { field: t(`${I18N_PREFIX}.publicKey`) }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t(`${I18N_PREFIX}.publicKey`, { ns: 'app' }) }) if (!errorMessage && !postData.host) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Host' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Host' }) } if (type === TracingProvider.opik) { @@ -218,43 +218,43 @@ const ProviderConfigModal: FC = ({ if (type === TracingProvider.weave) { const postData = config as WeaveConfig if (!errorMessage && !postData.api_key) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'API Key' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'API Key' }) if (!errorMessage && !postData.project) - errorMessage = t('common.errorMsg.fieldRequired', { field: t(`${I18N_PREFIX}.project`) }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t(`${I18N_PREFIX}.project`, { ns: 'app' }) }) } if (type === TracingProvider.aliyun) { const postData = config as AliyunConfig if (!errorMessage && !postData.app_name) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'App Name' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'App Name' }) if (!errorMessage && !postData.license_key) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'License Key' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'License Key' }) if (!errorMessage && !postData.endpoint) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Endpoint' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Endpoint' }) } if (type === TracingProvider.mlflow) { const postData = config as MLflowConfig if (!errorMessage && !postData.tracking_uri) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Tracking URI' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Tracking URI' }) } if (type === TracingProvider.databricks) { const postData = config as DatabricksConfig if (!errorMessage && !postData.experiment_id) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Experiment ID' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Experiment ID' }) if (!errorMessage && !postData.host) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Host' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Host' }) } if (type === TracingProvider.tencent) { const postData = config as TencentConfig if (!errorMessage && !postData.token) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Token' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Token' }) if (!errorMessage && !postData.endpoint) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Endpoint' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Endpoint' }) if (!errorMessage && !postData.service_name) - errorMessage = t('common.errorMsg.fieldRequired', { field: 'Service Name' }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: 'Service Name' }) } return errorMessage @@ -281,7 +281,7 @@ const ProviderConfigModal: FC = ({ }) Toast.notify({ type: 'success', - message: t('common.api.success'), + message: t('api.success', { ns: 'common' }), }) onSaved(config) if (isAdd) @@ -303,8 +303,8 @@ const ProviderConfigModal: FC = ({
- {t(`${I18N_PREFIX}.title`)} - {t(`app.tracing.${type}.title`)} + {t(`${I18N_PREFIX}.title`, { ns: 'app' })} + {t(`tracing.${type}.title`, { ns: 'app' })}
@@ -317,7 +317,7 @@ const ProviderConfigModal: FC = ({ isRequired value={(config as ArizeConfig).api_key} onChange={handleConfigChange('api_key')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'API Key' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'API Key' })!} /> = ({ isRequired value={(config as ArizeConfig).space_id} onChange={handleConfigChange('space_id')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'Space ID' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'Space ID' })!} /> = ({ isRequired value={(config as PhoenixConfig).api_key} onChange={handleConfigChange('api_key')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'API Key' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'API Key' })!} /> = ({ isRequired value={(config as AliyunConfig).license_key} onChange={handleConfigChange('license_key')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'License Key' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'License Key' })!} /> = ({ isRequired value={(config as TencentConfig).token} onChange={handleConfigChange('token')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'Token' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'Token' })!} /> = ({ isRequired value={(config as WeaveConfig).api_key} onChange={handleConfigChange('api_key')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'API Key' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'API Key' })!} /> = ({ isRequired value={(config as LangSmithConfig).api_key} onChange={handleConfigChange('api_key')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'API Key' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'API Key' })!} /> = ({ {type === TracingProvider.langfuse && ( <> = ({ labelClassName="!text-sm" value={(config as OpikConfig).api_key} onChange={handleConfigChange('api_key')} - placeholder={t(`${I18N_PREFIX}.placeholder`, { key: 'API Key' })!} + placeholder={t(`${I18N_PREFIX}.placeholder`, { ns: 'app', key: 'API Key' })!} /> = ({ {type === TracingProvider.mlflow && ( <> = ({ placeholder="http://localhost:5000" /> )} {type === TracingProvider.databricks && ( <> )} @@ -634,7 +634,7 @@ const ProviderConfigModal: FC = ({ target="_blank" href={docURL[type]} > - {t(`${I18N_PREFIX}.viewDocsLink`, { key: t(`app.tracing.${type}.title`) })} + {t(`${I18N_PREFIX}.viewDocsLink`, { ns: 'app', key: t(`tracing.${type}.title`, { ns: 'app' }) })}
@@ -644,7 +644,7 @@ const ProviderConfigModal: FC = ({ className="h-9 text-sm font-medium text-text-secondary" onClick={showRemoveConfirm} > - {t('common.operation.remove')} + {t('operation.remove', { ns: 'common' })} @@ -653,7 +653,7 @@ const ProviderConfigModal: FC = ({ className="mr-2 h-9 text-sm font-medium text-text-secondary" onClick={onCancel} > - {t('common.operation.cancel')} + {t('operation.cancel', { ns: 'common' })}
@@ -670,7 +670,7 @@ const ProviderConfigModal: FC = ({
- {t('common.modelProvider.encrypted.front')} + {t('modelProvider.encrypted.front', { ns: 'common' })} = ({ > PKCS1_OAEP - {t('common.modelProvider.encrypted.back')} + {t('modelProvider.encrypted.back', { ns: 'common' })}
@@ -691,8 +691,8 @@ const ProviderConfigModal: FC = ({ diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx index 6c66b19ad3..dc0fe2fbbc 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx @@ -11,7 +11,7 @@ import { Eye as View } from '@/app/components/base/icons/src/vender/solid/genera import { cn } from '@/utils/classnames' import { TracingProvider } from './type' -const I18N_PREFIX = 'app.tracing' +const I18N_PREFIX = 'tracing' type Props = { type: TracingProvider @@ -82,14 +82,14 @@ const ProviderPanel: FC = ({
- {isChosen &&
{t(`${I18N_PREFIX}.inUse`)}
} + {isChosen &&
{t(`${I18N_PREFIX}.inUse`, { ns: 'app' })}
}
{!readOnly && (
{hasConfigured && (
-
{t(`${I18N_PREFIX}.view`)}
+
{t(`${I18N_PREFIX}.view`, { ns: 'app' })}
)}
= ({ onClick={handleConfigBtnClick} > -
{t(`${I18N_PREFIX}.config`)}
+
{t(`${I18N_PREFIX}.config`, { ns: 'app' })}
)}
- {t(`${I18N_PREFIX}.${type}.description`)} + {t(`${I18N_PREFIX}.${type}.description`, { ns: 'app' })}
) diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/layout.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/layout.tsx index 4135482dd9..a918ae2786 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/layout.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/layout.tsx @@ -15,7 +15,7 @@ const AppDetail: FC = ({ children }) => { const router = useRouter() const { isCurrentWorkspaceDatasetOperator } = useAppContext() const { t } = useTranslation() - useDocumentTitle(t('common.menus.appDetail')) + useDocumentTitle(t('menus.appDetail', { ns: 'common' })) useEffect(() => { if (isCurrentWorkspaceDatasetOperator) diff --git a/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/layout-main.tsx b/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/layout-main.tsx index 10a12d75e1..1c5434924f 100644 --- a/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/layout-main.tsx +++ b/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/layout-main.tsx @@ -70,14 +70,14 @@ const DatasetDetailLayout: FC = (props) => { const navigation = useMemo(() => { const baseNavigation = [ { - name: t('common.datasetMenus.hitTesting'), + name: t('datasetMenus.hitTesting', { ns: 'common' }), href: `/datasets/${datasetId}/hitTesting`, icon: RiFocus2Line, selectedIcon: RiFocus2Fill, disabled: isButtonDisabledWithPipeline, }, { - name: t('common.datasetMenus.settings'), + name: t('datasetMenus.settings', { ns: 'common' }), href: `/datasets/${datasetId}/settings`, icon: RiEqualizer2Line, selectedIcon: RiEqualizer2Fill, @@ -87,14 +87,14 @@ const DatasetDetailLayout: FC = (props) => { if (datasetRes?.provider !== 'external') { baseNavigation.unshift({ - name: t('common.datasetMenus.pipeline'), + name: t('datasetMenus.pipeline', { ns: 'common' }), href: `/datasets/${datasetId}/pipeline`, icon: PipelineLine as RemixiconComponentType, selectedIcon: PipelineFill as RemixiconComponentType, disabled: false, }) baseNavigation.unshift({ - name: t('common.datasetMenus.documents'), + name: t('datasetMenus.documents', { ns: 'common' }), href: `/datasets/${datasetId}/documents`, icon: RiFileTextLine, selectedIcon: RiFileTextFill, @@ -105,7 +105,7 @@ const DatasetDetailLayout: FC = (props) => { return baseNavigation }, [t, datasetId, isButtonDisabledWithPipeline, datasetRes?.provider]) - useDocumentTitle(datasetRes?.name || t('common.menus.datasets')) + useDocumentTitle(datasetRes?.name || t('menus.datasets', { ns: 'common' })) const setAppSidebarExpand = useStore(state => state.setAppSidebarExpand) diff --git a/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/settings/page.tsx b/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/settings/page.tsx index aa64df3449..8080b565cd 100644 --- a/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/settings/page.tsx +++ b/web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/settings/page.tsx @@ -1,3 +1,4 @@ +/* eslint-disable dify-i18n/require-ns-option */ import * as React from 'react' import Form from '@/app/components/datasets/settings/form' import { getLocaleOnServer, getTranslation } from '@/i18n-config/server' @@ -9,7 +10,7 @@ const Settings = async () => { return (
-
{t('title') as any}
+
{t('title')}
{t('desc')}
diff --git a/web/app/(commonLayout)/explore/layout.tsx b/web/app/(commonLayout)/explore/layout.tsx index 5928308cdc..7d59d397f9 100644 --- a/web/app/(commonLayout)/explore/layout.tsx +++ b/web/app/(commonLayout)/explore/layout.tsx @@ -7,7 +7,7 @@ import useDocumentTitle from '@/hooks/use-document-title' const ExploreLayout: FC = ({ children }) => { const { t } = useTranslation() - useDocumentTitle(t('common.menus.explore')) + useDocumentTitle(t('menus.explore', { ns: 'common' })) return ( {children} diff --git a/web/app/(commonLayout)/layout.tsx b/web/app/(commonLayout)/layout.tsx index 91bdb3f99a..a0ccde957d 100644 --- a/web/app/(commonLayout)/layout.tsx +++ b/web/app/(commonLayout)/layout.tsx @@ -1,5 +1,6 @@ import type { ReactNode } from 'react' import * as React from 'react' +import { AppInitializer } from '@/app/components/app-initializer' import AmplitudeProvider from '@/app/components/base/amplitude' import GA, { GaType } from '@/app/components/base/ga' import Zendesk from '@/app/components/base/zendesk' @@ -7,7 +8,6 @@ import GotoAnything from '@/app/components/goto-anything' import Header from '@/app/components/header' import HeaderWrapper from '@/app/components/header/header-wrapper' import ReadmePanel from '@/app/components/plugins/readme-panel' -import SwrInitializer from '@/app/components/swr-initializer' import { AppContextProvider } from '@/context/app-context' import { EventEmitterContextProvider } from '@/context/event-emitter' import { ModalContextProvider } from '@/context/modal-context' @@ -20,7 +20,7 @@ const Layout = ({ children }: { children: ReactNode }) => { <> - + @@ -38,7 +38,7 @@ const Layout = ({ children }: { children: ReactNode }) => { - + ) } diff --git a/web/app/(commonLayout)/tools/page.tsx b/web/app/(commonLayout)/tools/page.tsx index 2d5c1a8e44..3e88050eba 100644 --- a/web/app/(commonLayout)/tools/page.tsx +++ b/web/app/(commonLayout)/tools/page.tsx @@ -12,7 +12,7 @@ const ToolsList: FC = () => { const router = useRouter() const { isCurrentWorkspaceDatasetOperator } = useAppContext() const { t } = useTranslation() - useDocumentTitle(t('common.menus.tools')) + useDocumentTitle(t('menus.tools', { ns: 'common' })) useEffect(() => { if (isCurrentWorkspaceDatasetOperator) diff --git a/web/app/(shareLayout)/components/authenticated-layout.tsx b/web/app/(shareLayout)/components/authenticated-layout.tsx index 00288b7a61..113f3b5680 100644 --- a/web/app/(shareLayout)/components/authenticated-layout.tsx +++ b/web/app/(shareLayout)/components/authenticated-layout.tsx @@ -81,7 +81,7 @@ const AuthenticatedLayout = ({ children }: { children: React.ReactNode }) => { return (
- {t('common.userProfile.logout')} + {t('userProfile.logout', { ns: 'common' })}
) } diff --git a/web/app/(shareLayout)/components/splash.tsx b/web/app/(shareLayout)/components/splash.tsx index b8ea1b2e56..9f89a03993 100644 --- a/web/app/(shareLayout)/components/splash.tsx +++ b/web/app/(shareLayout)/components/splash.tsx @@ -94,8 +94,8 @@ const Splash: FC = ({ children }) => { if (message) { return (
- - {code === '403' ? t('common.userProfile.logout') : t('share.login.backToHome')} + + {code === '403' ? t('userProfile.logout', { ns: 'common' }) : t('login.backToHome', { ns: 'share' })}
) } diff --git a/web/app/(shareLayout)/webapp-reset-password/check-code/page.tsx b/web/app/(shareLayout)/webapp-reset-password/check-code/page.tsx index 9ce058340c..ac15f1df6d 100644 --- a/web/app/(shareLayout)/webapp-reset-password/check-code/page.tsx +++ b/web/app/(shareLayout)/webapp-reset-password/check-code/page.tsx @@ -26,14 +26,14 @@ export default function CheckCode() { if (!code.trim()) { Toast.notify({ type: 'error', - message: t('login.checkCode.emptyCode'), + message: t('checkCode.emptyCode', { ns: 'login' }), }) return } if (!/\d{6}/.test(code)) { Toast.notify({ type: 'error', - message: t('login.checkCode.invalidCode'), + message: t('checkCode.invalidCode', { ns: 'login' }), }) return } @@ -69,22 +69,22 @@ export default function CheckCode() {
-

{t('login.checkCode.checkYourEmail')}

+

{t('checkCode.checkYourEmail', { ns: 'login' })}

- {t('login.checkCode.tipsPrefix')} + {t('checkCode.tipsPrefix', { ns: 'login' })} {email}
- {t('login.checkCode.validTime')} + {t('checkCode.validTime', { ns: 'login' })}

- - setVerifyCode(e.target.value)} maxLength={6} className="mt-1" placeholder={t('login.checkCode.verificationCodePlaceholder') || ''} /> - + + setVerifyCode(e.target.value)} maxLength={6} className="mt-1" placeholder={t('checkCode.verificationCodePlaceholder', { ns: 'login' }) || ''} /> +
@@ -94,7 +94,7 @@ export default function CheckCode() {
- {t('login.back')} + {t('back', { ns: 'login' })}
) diff --git a/web/app/(shareLayout)/webapp-reset-password/page.tsx b/web/app/(shareLayout)/webapp-reset-password/page.tsx index b5d89cdf68..0d2dd88fdc 100644 --- a/web/app/(shareLayout)/webapp-reset-password/page.tsx +++ b/web/app/(shareLayout)/webapp-reset-password/page.tsx @@ -27,14 +27,14 @@ export default function CheckCode() { const handleGetEMailVerificationCode = async () => { try { if (!email) { - Toast.notify({ type: 'error', message: t('login.error.emailEmpty') }) + Toast.notify({ type: 'error', message: t('error.emailEmpty', { ns: 'login' }) }) return } if (!emailRegex.test(email)) { Toast.notify({ type: 'error', - message: t('login.error.emailInValid'), + message: t('error.emailInValid', { ns: 'login' }), }) return } @@ -50,7 +50,7 @@ export default function CheckCode() { else if (res.code === 'account_not_found') { Toast.notify({ type: 'error', - message: t('login.error.registrationNotAllowed'), + message: t('error.registrationNotAllowed', { ns: 'login' }), }) } else { @@ -74,21 +74,21 @@ export default function CheckCode() {
-

{t('login.resetPassword')}

+

{t('resetPassword', { ns: 'login' })}

- {t('login.resetPasswordDesc')} + {t('resetPasswordDesc', { ns: 'login' })}

- +
- setEmail(e.target.value)} /> + setEmail(e.target.value)} />
- +
@@ -99,7 +99,7 @@ export default function CheckCode() {
- {t('login.backToLogin')} + {t('backToLogin', { ns: 'login' })}
) diff --git a/web/app/(shareLayout)/webapp-reset-password/set-password/page.tsx b/web/app/(shareLayout)/webapp-reset-password/set-password/page.tsx index bfb71d9c6f..9f59e8f9eb 100644 --- a/web/app/(shareLayout)/webapp-reset-password/set-password/page.tsx +++ b/web/app/(shareLayout)/webapp-reset-password/set-password/page.tsx @@ -45,15 +45,15 @@ const ChangePasswordForm = () => { const valid = useCallback(() => { if (!password.trim()) { - showErrorMessage(t('login.error.passwordEmpty')) + showErrorMessage(t('error.passwordEmpty', { ns: 'login' })) return false } if (!validPassword.test(password)) { - showErrorMessage(t('login.error.passwordInvalid')) + showErrorMessage(t('error.passwordInvalid', { ns: 'login' })) return false } if (password !== confirmPassword) { - showErrorMessage(t('common.account.notEqual')) + showErrorMessage(t('account.notEqual', { ns: 'common' })) return false } return true @@ -92,10 +92,10 @@ const ChangePasswordForm = () => {

- {t('login.changePassword')} + {t('changePassword', { ns: 'login' })}

- {t('login.changePasswordTip')} + {t('changePasswordTip', { ns: 'login' })}

@@ -104,7 +104,7 @@ const ChangePasswordForm = () => { {/* Password */}
{ type={showPassword ? 'text' : 'password'} value={password} onChange={e => setPassword(e.target.value)} - placeholder={t('login.passwordPlaceholder') || ''} + placeholder={t('passwordPlaceholder', { ns: 'login' }) || ''} />
@@ -125,12 +125,12 @@ const ChangePasswordForm = () => {
-
{t('login.error.passwordInvalid')}
+
{t('error.passwordInvalid', { ns: 'login' })}
{/* Confirm Password */}
{ type={showConfirmPassword ? 'text' : 'password'} value={confirmPassword} onChange={e => setConfirmPassword(e.target.value)} - placeholder={t('login.confirmPasswordPlaceholder') || ''} + placeholder={t('confirmPasswordPlaceholder', { ns: 'login' }) || ''} />
@@ -171,7 +171,7 @@ const ChangePasswordForm = () => {

- {t('login.passwordChangedTip')} + {t('passwordChangedTip', { ns: 'login' })}

@@ -183,7 +183,7 @@ const ChangePasswordForm = () => { router.replace(getSignInUrl()) }} > - {t('login.passwordChanged')} + {t('passwordChanged', { ns: 'login' })} {' '} ( {Math.round(countdown / 1000)} diff --git a/web/app/(shareLayout)/webapp-signin/check-code/page.tsx b/web/app/(shareLayout)/webapp-signin/check-code/page.tsx index ee7fc22bea..0ef63dcbd2 100644 --- a/web/app/(shareLayout)/webapp-signin/check-code/page.tsx +++ b/web/app/(shareLayout)/webapp-signin/check-code/page.tsx @@ -45,21 +45,21 @@ export default function CheckCode() { if (!code.trim()) { Toast.notify({ type: 'error', - message: t('login.checkCode.emptyCode'), + message: t('checkCode.emptyCode', { ns: 'login' }), }) return } if (!/\d{6}/.test(code)) { Toast.notify({ type: 'error', - message: t('login.checkCode.invalidCode'), + message: t('checkCode.invalidCode', { ns: 'login' }), }) return } if (!redirectUrl || !appCode) { Toast.notify({ type: 'error', - message: t('login.error.redirectUrlMissing'), + message: t('error.redirectUrlMissing', { ns: 'login' }), }) return } @@ -108,19 +108,19 @@ export default function CheckCode() {
-

{t('login.checkCode.checkYourEmail')}

+

{t('checkCode.checkYourEmail', { ns: 'login' })}

- {t('login.checkCode.tipsPrefix')} + {t('checkCode.tipsPrefix', { ns: 'login' })} {email}
- {t('login.checkCode.validTime')} + {t('checkCode.validTime', { ns: 'login' })}

- + setVerifyCode(e.target.value)} maxLength={6} className="mt-1" - placeholder={t('login.checkCode.verificationCodePlaceholder') || ''} + placeholder={t('checkCode.verificationCodePlaceholder', { ns: 'login' }) || ''} /> - +
@@ -140,7 +140,7 @@ export default function CheckCode() {
- {t('login.back')} + {t('back', { ns: 'login' })}
) diff --git a/web/app/(shareLayout)/webapp-signin/components/mail-and-code-auth.tsx b/web/app/(shareLayout)/webapp-signin/components/mail-and-code-auth.tsx index 69929acdf8..247b383511 100644 --- a/web/app/(shareLayout)/webapp-signin/components/mail-and-code-auth.tsx +++ b/web/app/(shareLayout)/webapp-signin/components/mail-and-code-auth.tsx @@ -23,14 +23,14 @@ export default function MailAndCodeAuth() { const handleGetEMailVerificationCode = async () => { try { if (!email) { - Toast.notify({ type: 'error', message: t('login.error.emailEmpty') }) + Toast.notify({ type: 'error', message: t('error.emailEmpty', { ns: 'login' }) }) return } if (!emailRegex.test(email)) { Toast.notify({ type: 'error', - message: t('login.error.emailInValid'), + message: t('error.emailInValid', { ns: 'login' }), }) return } @@ -56,12 +56,12 @@ export default function MailAndCodeAuth() {
- +
- setEmail(e.target.value)} /> + setEmail(e.target.value)} />
- +
diff --git a/web/app/(shareLayout)/webapp-signin/components/mail-and-password-auth.tsx b/web/app/(shareLayout)/webapp-signin/components/mail-and-password-auth.tsx index 91bff4a318..f756e49842 100644 --- a/web/app/(shareLayout)/webapp-signin/components/mail-and-password-auth.tsx +++ b/web/app/(shareLayout)/webapp-signin/components/mail-and-password-auth.tsx @@ -46,25 +46,25 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut const appCode = getAppCodeFromRedirectUrl() const handleEmailPasswordLogin = async () => { if (!email) { - Toast.notify({ type: 'error', message: t('login.error.emailEmpty') }) + Toast.notify({ type: 'error', message: t('error.emailEmpty', { ns: 'login' }) }) return } if (!emailRegex.test(email)) { Toast.notify({ type: 'error', - message: t('login.error.emailInValid'), + message: t('error.emailInValid', { ns: 'login' }), }) return } if (!password?.trim()) { - Toast.notify({ type: 'error', message: t('login.error.passwordEmpty') }) + Toast.notify({ type: 'error', message: t('error.passwordEmpty', { ns: 'login' }) }) return } if (!redirectUrl || !appCode) { Toast.notify({ type: 'error', - message: t('login.error.redirectUrlMissing'), + message: t('error.redirectUrlMissing', { ns: 'login' }), }) return } @@ -111,7 +111,7 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut
@@ -128,14 +128,14 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut
@@ -149,7 +149,7 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut }} type={showPassword ? 'text' : 'password'} autoComplete="current-password" - placeholder={t('login.passwordPlaceholder') || ''} + placeholder={t('passwordPlaceholder', { ns: 'login' }) || ''} tabIndex={2} />
@@ -172,7 +172,7 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut disabled={isLoading || !email || !password} className="w-full" > - {t('login.signBtn')} + {t('signBtn', { ns: 'login' })}
diff --git a/web/app/(shareLayout)/webapp-signin/components/sso-auth.tsx b/web/app/(shareLayout)/webapp-signin/components/sso-auth.tsx index 472952c2c8..d8f3854868 100644 --- a/web/app/(shareLayout)/webapp-signin/components/sso-auth.tsx +++ b/web/app/(shareLayout)/webapp-signin/components/sso-auth.tsx @@ -82,7 +82,7 @@ const SSOAuth: FC = ({ className="w-full" > - {t('login.withSSO')} + {t('withSSO', { ns: 'login' })} ) } diff --git a/web/app/(shareLayout)/webapp-signin/layout.tsx b/web/app/(shareLayout)/webapp-signin/layout.tsx index dd4510a541..21cb0e1f57 100644 --- a/web/app/(shareLayout)/webapp-signin/layout.tsx +++ b/web/app/(shareLayout)/webapp-signin/layout.tsx @@ -9,7 +9,7 @@ import { cn } from '@/utils/classnames' export default function SignInLayout({ children }: PropsWithChildren) { const { t } = useTranslation() const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) - useDocumentTitle(t('login.webapp.login')) + useDocumentTitle(t('webapp.login', { ns: 'login' })) return ( <>
diff --git a/web/app/(shareLayout)/webapp-signin/normalForm.tsx b/web/app/(shareLayout)/webapp-signin/normalForm.tsx index 40d34dcaf5..b15145346f 100644 --- a/web/app/(shareLayout)/webapp-signin/normalForm.tsx +++ b/web/app/(shareLayout)/webapp-signin/normalForm.tsx @@ -60,8 +60,8 @@ const NormalForm = () => {
-

{t('login.licenseLost')}

-

{t('login.licenseLostTip')}

+

{t('licenseLost', { ns: 'login' })}

+

{t('licenseLostTip', { ns: 'login' })}

@@ -76,8 +76,8 @@ const NormalForm = () => {
-

{t('login.licenseExpired')}

-

{t('login.licenseExpiredTip')}

+

{t('licenseExpired', { ns: 'login' })}

+

{t('licenseExpiredTip', { ns: 'login' })}

@@ -92,8 +92,8 @@ const NormalForm = () => { -

{t('login.licenseInactive')}

-

{t('login.licenseInactiveTip')}

+

{t('licenseInactive', { ns: 'login' })}

+

{t('licenseInactiveTip', { ns: 'login' })}

@@ -104,8 +104,8 @@ const NormalForm = () => { <>
-

{systemFeatures.branding.enabled ? t('login.pageTitleForE') : t('login.pageTitle')}

-

{t('login.welcome')}

+

{systemFeatures.branding.enabled ? t('pageTitleForE', { ns: 'login' }) : t('pageTitle', { ns: 'login' })}

+

{t('welcome', { ns: 'login' })}

@@ -122,7 +122,7 @@ const NormalForm = () => {
- {t('login.or')} + {t('or', { ns: 'login' })}
)} @@ -134,7 +134,7 @@ const NormalForm = () => { {systemFeatures.enable_email_password_login && (
{ updateAuthType('password') }}> - {t('login.usePassword')} + {t('usePassword', { ns: 'login' })}
)} @@ -144,7 +144,7 @@ const NormalForm = () => { {systemFeatures.enable_email_code_login && (
{ updateAuthType('code') }}> - {t('login.useVerificationCode')} + {t('useVerificationCode', { ns: 'login' })}
)} @@ -158,8 +158,8 @@ const NormalForm = () => {
-

{t('login.noLoginMethod')}

-

{t('login.noLoginMethodTip')}

+

{t('noLoginMethod', { ns: 'login' })}

+

{t('noLoginMethodTip', { ns: 'login' })}

{step === STEP.start && ( <> -
{t('common.account.changeEmail.title')}
+
{t('account.changeEmail.title', { ns: 'common' })}
-
{t('common.account.changeEmail.authTip')}
+
{t('account.changeEmail.authTip', { ns: 'common' })}
{ variant="primary" onClick={sendCodeToOriginEmail} > - {t('common.account.changeEmail.sendVerifyCode')} + {t('account.changeEmail.sendVerifyCode', { ns: 'common' })}
)} {step === STEP.verifyOrigin && ( <> -
{t('common.account.changeEmail.verifyEmail')}
+
{t('account.changeEmail.verifyEmail', { ns: 'common' })}
{
-
{t('common.account.changeEmail.codeLabel')}
+
{t('account.changeEmail.codeLabel', { ns: 'common' })}
setCode(e.target.value)} maxLength={6} @@ -267,46 +267,46 @@ const EmailChangeModal = ({ onClose, email, show }: Props) => { variant="primary" onClick={handleVerifyOriginEmail} > - {t('common.account.changeEmail.continue')} + {t('account.changeEmail.continue', { ns: 'common' })}
- {t('common.account.changeEmail.resendTip')} + {t('account.changeEmail.resendTip', { ns: 'common' })} {time > 0 && ( - {t('common.account.changeEmail.resendCount', { count: time })} + {t('account.changeEmail.resendCount', { ns: 'common', count: time })} )} {!time && ( - {t('common.account.changeEmail.resend')} + {t('account.changeEmail.resend', { ns: 'common' })} )}
)} {step === STEP.newEmail && ( <> -
{t('common.account.changeEmail.newEmail')}
+
{t('account.changeEmail.newEmail', { ns: 'common' })}
-
{t('common.account.changeEmail.content3')}
+
{t('account.changeEmail.content3', { ns: 'common' })}
-
{t('common.account.changeEmail.emailLabel')}
+
{t('account.changeEmail.emailLabel', { ns: 'common' })}
handleNewEmailValueChange(e.target.value)} destructive={newEmailExited || unAvailableEmail} /> {newEmailExited && ( -
{t('common.account.changeEmail.existingEmail')}
+
{t('account.changeEmail.existingEmail', { ns: 'common' })}
)} {unAvailableEmail && ( -
{t('common.account.changeEmail.unAvailableEmail')}
+
{t('account.changeEmail.unAvailableEmail', { ns: 'common' })}
)}
@@ -316,20 +316,20 @@ const EmailChangeModal = ({ onClose, email, show }: Props) => { variant="primary" onClick={sendCodeToNewEmail} > - {t('common.account.changeEmail.sendVerifyCode')} + {t('account.changeEmail.sendVerifyCode', { ns: 'common' })}
)} {step === STEP.verifyNew && ( <> -
{t('common.account.changeEmail.verifyNew')}
+
{t('account.changeEmail.verifyNew', { ns: 'common' })}
{
-
{t('common.account.changeEmail.codeLabel')}
+
{t('account.changeEmail.codeLabel', { ns: 'common' })}
setCode(e.target.value)} maxLength={6} @@ -356,22 +356,22 @@ const EmailChangeModal = ({ onClose, email, show }: Props) => { variant="primary" onClick={submitNewEmail} > - {t('common.account.changeEmail.changeTo', { email: mail })} + {t('account.changeEmail.changeTo', { ns: 'common', email: mail })}
- {t('common.account.changeEmail.resendTip')} + {t('account.changeEmail.resendTip', { ns: 'common' })} {time > 0 && ( - {t('common.account.changeEmail.resendCount', { count: time })} + {t('account.changeEmail.resendCount', { ns: 'common', count: time })} )} {!time && ( - {t('common.account.changeEmail.resend')} + {t('account.changeEmail.resend', { ns: 'common' })} )}
diff --git a/web/app/account/(commonLayout)/account-page/index.tsx b/web/app/account/(commonLayout)/account-page/index.tsx index baa9759ffe..f01efc002c 100644 --- a/web/app/account/(commonLayout)/account-page/index.tsx +++ b/web/app/account/(commonLayout)/account-page/index.tsx @@ -61,7 +61,7 @@ export default function AccountPage() { try { setEditing(true) await updateUserProfile({ url: 'account/name', body: { name: editName } }) - notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) + notify({ type: 'success', message: t('actionMsg.modifiedSuccessfully', { ns: 'common' }) }) mutateUserProfile() setEditNameModalVisible(false) setEditing(false) @@ -80,15 +80,15 @@ export default function AccountPage() { } const valid = () => { if (!password.trim()) { - showErrorMessage(t('login.error.passwordEmpty')) + showErrorMessage(t('error.passwordEmpty', { ns: 'login' })) return false } if (!validPassword.test(password)) { - showErrorMessage(t('login.error.passwordInvalid')) + showErrorMessage(t('error.passwordInvalid', { ns: 'login' })) return false } if (password !== confirmPassword) { - showErrorMessage(t('common.account.notEqual')) + showErrorMessage(t('account.notEqual', { ns: 'common' })) return false } @@ -112,7 +112,7 @@ export default function AccountPage() { repeat_new_password: confirmPassword, }, }) - notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) + notify({ type: 'success', message: t('actionMsg.modifiedSuccessfully', { ns: 'common' }) }) mutateUserProfile() setEditPasswordModalVisible(false) resetPasswordForm() @@ -146,7 +146,7 @@ export default function AccountPage() { return ( <>
-

{t('common.account.myAccount')}

+

{t('account.myAccount', { ns: 'common' })}

@@ -164,25 +164,25 @@ export default function AccountPage() {
-
{t('common.account.name')}
+
{t('account.name', { ns: 'common' })}
{userProfile.name}
- {t('common.operation.edit')} + {t('operation.edit', { ns: 'common' })}
-
{t('common.account.email')}
+
{t('account.email', { ns: 'common' })}
{userProfile.email}
{systemFeatures.enable_change_email && (
setShowUpdateEmail(true)}> - {t('common.operation.change')} + {t('operation.change', { ns: 'common' })}
)}
@@ -191,26 +191,26 @@ export default function AccountPage() { systemFeatures.enable_email_password_login && (
-
{t('common.account.password')}
-
{t('common.account.passwordTip')}
+
{t('account.password', { ns: 'common' })}
+
{t('account.passwordTip', { ns: 'common' })}
- +
) }
-
{t('common.account.langGeniusAccount')}
-
{t('common.account.langGeniusAccountTip')}
+
{t('account.langGeniusAccount', { ns: 'common' })}
+
{t('account.langGeniusAccountTip', { ns: 'common' })}
{!!apps.length && ( ({ ...app, key: app.id, name: app.name }))} renderItem={renderAppItem} wrapperClassName="mt-2" /> )} - {!IS_CE_EDITION && } + {!IS_CE_EDITION && }
{ editNameModalVisible && ( @@ -219,21 +219,21 @@ export default function AccountPage() { onClose={() => setEditNameModalVisible(false)} className="!w-[420px] !p-6" > -
{t('common.account.editName')}
-
{t('common.account.name')}
+
{t('account.editName', { ns: 'common' })}
+
{t('account.name', { ns: 'common' })}
setEditName(e.target.value)} />
- +
@@ -249,10 +249,10 @@ export default function AccountPage() { }} className="!w-[420px] !p-6" > -
{userProfile.is_password_set ? t('common.account.resetPassword') : t('common.account.setPassword')}
+
{userProfile.is_password_set ? t('account.resetPassword', { ns: 'common' }) : t('account.setPassword', { ns: 'common' })}
{userProfile.is_password_set && ( <> -
{t('common.account.currentPassword')}
+
{t('account.currentPassword', { ns: 'common' })}
)}
- {userProfile.is_password_set ? t('common.account.newPassword') : t('common.account.password')} + {userProfile.is_password_set ? t('account.newPassword', { ns: 'common' }) : t('account.password', { ns: 'common' })}
-
{t('common.account.confirmPassword')}
+
{t('account.confirmPassword', { ns: 'common' })}
- {t('common.operation.cancel')} + {t('operation.cancel', { ns: 'common' })}
diff --git a/web/app/account/(commonLayout)/avatar.tsx b/web/app/account/(commonLayout)/avatar.tsx index 3cbbb47a76..8ea29e8e45 100644 --- a/web/app/account/(commonLayout)/avatar.tsx +++ b/web/app/account/(commonLayout)/avatar.tsx @@ -94,7 +94,7 @@ export default function AppSelector() { className="group flex h-9 cursor-pointer items-center justify-start rounded-lg px-3 hover:bg-state-base-hover" > -
{t('common.userProfile.logout')}
+
{t('userProfile.logout', { ns: 'common' })}
diff --git a/web/app/account/(commonLayout)/delete-account/components/check-email.tsx b/web/app/account/(commonLayout)/delete-account/components/check-email.tsx index c0bbf4422a..65a58c936e 100644 --- a/web/app/account/(commonLayout)/delete-account/components/check-email.tsx +++ b/web/app/account/(commonLayout)/delete-account/components/check-email.tsx @@ -31,22 +31,22 @@ export default function CheckEmail(props: DeleteAccountProps) { return ( <>
- {t('common.account.deleteTip')} + {t('account.deleteTip', { ns: 'common' })}
- {t('common.account.deletePrivacyLinkTip')} - {t('common.account.deletePrivacyLink')} + {t('account.deletePrivacyLinkTip', { ns: 'common' })} + {t('account.deletePrivacyLink', { ns: 'common' })}
- + { setUserInputEmail(e.target.value) }} />
- - + +
) diff --git a/web/app/account/(commonLayout)/delete-account/components/feed-back.tsx b/web/app/account/(commonLayout)/delete-account/components/feed-back.tsx index 4a1b41cb20..67fea3c141 100644 --- a/web/app/account/(commonLayout)/delete-account/components/feed-back.tsx +++ b/web/app/account/(commonLayout)/delete-account/components/feed-back.tsx @@ -28,7 +28,7 @@ export default function FeedBack(props: DeleteAccountProps) { await logout() // Tokens are now stored in cookies and cleared by backend router.push('/signin') - Toast.notify({ type: 'info', message: t('common.account.deleteSuccessTip') }) + Toast.notify({ type: 'info', message: t('account.deleteSuccessTip', { ns: 'common' }) }) } catch (error) { console.error(error) } }, [router, t]) @@ -50,22 +50,22 @@ export default function FeedBack(props: DeleteAccountProps) { - + @@ -116,10 +116,10 @@ const MCPServerModal = ({ {latestParams.length > 0 && (
-
{t('tools.mcp.server.modal.parameters')}
+
{t('mcp.server.modal.parameters', { ns: 'tools' })}
-
{t('tools.mcp.server.modal.parametersTip')}
+
{t('mcp.server.modal.parametersTip', { ns: 'tools' })}
{latestParams.map(paramItem => (
- - + +
) diff --git a/web/app/components/tools/mcp/mcp-server-param-item.tsx b/web/app/components/tools/mcp/mcp-server-param-item.tsx index d951f19caa..db27cfdf98 100644 --- a/web/app/components/tools/mcp/mcp-server-param-item.tsx +++ b/web/app/components/tools/mcp/mcp-server-param-item.tsx @@ -27,7 +27,7 @@ const MCPServerParamItem = ({ diff --git a/web/app/components/tools/mcp/mcp-service-card.tsx b/web/app/components/tools/mcp/mcp-service-card.tsx index 07aa5e0168..fc6de3bc3d 100644 --- a/web/app/components/tools/mcp/mcp-service-card.tsx +++ b/web/app/components/tools/mcp/mcp-service-card.tsx @@ -172,7 +172,7 @@ function MCPServiceCard({
- {t('tools.mcp.server.title')} + {t('mcp.server.title', { ns: 'tools' })}
@@ -180,8 +180,8 @@ function MCPServiceCard({
{serverActivated - ? t('appOverview.overview.status.running') - : t('appOverview.overview.status.disable')} + ? t('overview.status.running', { ns: 'appOverview' }) + : t('overview.status.disable', { ns: 'appOverview' })}
- {t('appOverview.overview.appInfo.enableTooltip.description')} + {t('overview.appInfo.enableTooltip.description', { ns: 'appOverview' })}
window.open(docLink('/guides/workflow/node/user-input'), '_blank')} > - {t('appOverview.overview.appInfo.enableTooltip.learnMore')} + {t('overview.appInfo.enableTooltip.learnMore', { ns: 'appOverview' })}
) @@ -222,7 +222,7 @@ function MCPServiceCard({ {!isMinimalState && (
- {t('tools.mcp.server.url')} + {t('mcp.server.url', { ns: 'tools' })}
@@ -239,7 +239,7 @@ function MCPServiceCard({ {isCurrentWorkspaceManager && (
-
{serverPublished ? t('tools.mcp.server.edit') : t('tools.mcp.server.addDescription')}
+
{serverPublished ? t('mcp.server.edit', { ns: 'tools' }) : t('mcp.server.addDescription', { ns: 'tools' })}
@@ -287,8 +287,8 @@ function MCPServiceCard({ {showConfirmDelete && ( { onGenCode() diff --git a/web/app/components/tools/mcp/modal.tsx b/web/app/components/tools/mcp/modal.tsx index a23c72eead..413a2d3948 100644 --- a/web/app/components/tools/mcp/modal.tsx +++ b/web/app/components/tools/mcp/modal.tsx @@ -81,15 +81,15 @@ const MCPModal = ({ const authMethods = [ { - text: t('tools.mcp.modal.authentication'), + text: t('mcp.modal.authentication', { ns: 'tools' }), value: MCPAuthMethod.authentication, }, { - text: t('tools.mcp.modal.headers'), + text: t('mcp.modal.headers', { ns: 'tools' }), value: MCPAuthMethod.headers, }, { - text: t('tools.mcp.modal.configurations'), + text: t('mcp.modal.configurations', { ns: 'tools' }), value: MCPAuthMethod.configurations, }, ] @@ -231,33 +231,33 @@ const MCPModal = ({
-
{!isCreate ? t('tools.mcp.modal.editTitle') : t('tools.mcp.modal.title')}
+
{!isCreate ? t('mcp.modal.editTitle', { ns: 'tools' }) : t('mcp.modal.title', { ns: 'tools' })}
- {t('tools.mcp.modal.serverUrl')} + {t('mcp.modal.serverUrl', { ns: 'tools' })}
setUrl(e.target.value)} onBlur={e => handleBlur(e.target.value.trim())} - placeholder={t('tools.mcp.modal.serverUrlPlaceholder')} + placeholder={t('mcp.modal.serverUrlPlaceholder', { ns: 'tools' })} /> {originalServerUrl && originalServerUrl !== url && (
- {t('tools.mcp.modal.serverUrlWarning')} + {t('mcp.modal.serverUrlWarning', { ns: 'tools' })}
)}
- {t('tools.mcp.modal.name')} + {t('mcp.modal.name', { ns: 'tools' })}
setName(e.target.value)} - placeholder={t('tools.mcp.modal.namePlaceholder')} + placeholder={t('mcp.modal.namePlaceholder', { ns: 'tools' })} />
@@ -284,17 +284,17 @@ const MCPModal = ({
- {t('tools.mcp.modal.serverIdentifier')} + {t('mcp.modal.serverIdentifier', { ns: 'tools' })}
-
{t('tools.mcp.modal.serverIdentifierTip')}
+
{t('mcp.modal.serverIdentifierTip', { ns: 'tools' })}
setServerIdentifier(e.target.value)} - placeholder={t('tools.mcp.modal.serverIdentifierPlaceholder')} + placeholder={t('mcp.modal.serverIdentifierPlaceholder', { ns: 'tools' })} /> {originalServerID && originalServerID !== serverIdentifier && (
- {t('tools.mcp.modal.serverIdentifierWarning')} + {t('mcp.modal.serverIdentifierWarning', { ns: 'tools' })}
)}
@@ -317,13 +317,13 @@ const MCPModal = ({ defaultValue={isDynamicRegistration} onChange={setIsDynamicRegistration} /> - {t('tools.mcp.modal.useDynamicClientRegistration')} + {t('mcp.modal.useDynamicClientRegistration', { ns: 'tools' })}
{!isDynamicRegistration && (
-
{t('tools.mcp.modal.redirectUrlWarning')}
+
{t('mcp.modal.redirectUrlWarning', { ns: 'tools' })}
{`${API_PREFIX}/mcp/oauth/callback`} @@ -333,25 +333,25 @@ const MCPModal = ({
- {t('tools.mcp.modal.clientID')} + {t('mcp.modal.clientID', { ns: 'tools' })}
setClientID(e.target.value)} onBlur={e => handleBlur(e.target.value.trim())} - placeholder={t('tools.mcp.modal.clientID')} + placeholder={t('mcp.modal.clientID', { ns: 'tools' })} disabled={isDynamicRegistration} />
- {t('tools.mcp.modal.clientSecret')} + {t('mcp.modal.clientSecret', { ns: 'tools' })}
setCredentials(e.target.value)} onBlur={e => handleBlur(e.target.value.trim())} - placeholder={t('tools.mcp.modal.clientSecretPlaceholder')} + placeholder={t('mcp.modal.clientSecretPlaceholder', { ns: 'tools' })} disabled={isDynamicRegistration} />
@@ -362,9 +362,9 @@ const MCPModal = ({ authMethod === MCPAuthMethod.headers && (
- {t('tools.mcp.modal.headers')} + {t('mcp.modal.headers', { ns: 'tools' })}
-
{t('tools.mcp.modal.headersTip')}
+
{t('mcp.modal.headersTip', { ns: 'tools' })}
- {t('tools.mcp.modal.timeout')} + {t('mcp.modal.timeout', { ns: 'tools' })}
setMcpTimeout(Number(e.target.value))} onBlur={e => handleBlur(e.target.value.trim())} - placeholder={t('tools.mcp.modal.timeoutPlaceholder')} + placeholder={t('mcp.modal.timeoutPlaceholder', { ns: 'tools' })} />
- {t('tools.mcp.modal.sseReadTimeout')} + {t('mcp.modal.sseReadTimeout', { ns: 'tools' })}
setSseReadTimeout(Number(e.target.value))} onBlur={e => handleBlur(e.target.value.trim())} - placeholder={t('tools.mcp.modal.timeoutPlaceholder')} + placeholder={t('mcp.modal.timeoutPlaceholder', { ns: 'tools' })} />
@@ -406,8 +406,8 @@ const MCPModal = ({ }
- - + +
{showAppIconPicker && ( diff --git a/web/app/components/tools/mcp/provider-card.tsx b/web/app/components/tools/mcp/provider-card.tsx index a7b092e0c0..d8a8e71a82 100644 --- a/web/app/components/tools/mcp/provider-card.tsx +++ b/web/app/components/tools/mcp/provider-card.tsx @@ -96,19 +96,19 @@ const MCPCard = ({
{data.tools.length > 0 && ( -
{t('tools.mcp.toolsCount', { count: data.tools.length })}
+
{t('mcp.toolsCount', { ns: 'tools', count: data.tools.length })}
)} {!data.tools.length && ( -
{t('tools.mcp.noTools')}
+
{t('mcp.noTools', { ns: 'tools' })}
)}
/
-
{`${t('tools.mcp.updateTime')} ${formatTimeFromNow(data.updated_at! * 1000)}`}
+
{`${t('mcp.updateTime', { ns: 'tools' })} ${formatTimeFromNow(data.updated_at! * 1000)}`}
{data.is_team_authorization && data.tools.length > 0 && } {(!data.is_team_authorization || !data.tools.length) && (
- {t('tools.mcp.noConfigured')} + {t('mcp.noConfigured', { ns: 'tools' })}
)} @@ -134,10 +134,10 @@ const MCPCard = ({ {isShowDeleteConfirm && ( - {t('tools.mcp.deleteConfirmTitle', { mcp: data.name })} + {t('mcp.deleteConfirmTitle', { ns: 'tools', mcp: data.name })}
)} onCancel={hideDeleteConfirm} diff --git a/web/app/components/tools/provider-list.tsx b/web/app/components/tools/provider-list.tsx index 95f36afcc3..48fd4ef29d 100644 --- a/web/app/components/tools/provider-list.tsx +++ b/web/app/components/tools/provider-list.tsx @@ -49,9 +49,9 @@ const ProviderList = () => { defaultValue: 'builtin', }) const options = [ - { value: 'builtin', text: t('tools.type.builtIn') }, - { value: 'api', text: t('tools.type.custom') }, - { value: 'workflow', text: t('tools.type.workflow') }, + { value: 'builtin', text: t('type.builtIn', { ns: 'tools' }) }, + { value: 'api', text: t('type.custom', { ns: 'tools' }) }, + { value: 'workflow', text: t('type.workflow', { ns: 'tools' }) }, { value: 'mcp', text: 'MCP' }, ] const [tagFilterValue, setTagFilterValue] = useState([]) @@ -194,7 +194,7 @@ const ProviderList = () => {
)} {!filteredCollectionList.length && activeTab === 'builtin' && ( - + )}
{enable_marketplace && activeTab === 'builtin' && ( diff --git a/web/app/components/tools/provider/custom-create-card.tsx b/web/app/components/tools/provider/custom-create-card.tsx index ba0c9e6449..56ce3845f2 100644 --- a/web/app/components/tools/provider/custom-create-card.tsx +++ b/web/app/components/tools/provider/custom-create-card.tsx @@ -37,7 +37,7 @@ const Contribute = ({ onRefreshData }: Props) => { await createCustomCollection(data) Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) setIsShowEditCustomCollectionModal(false) onRefreshData() @@ -52,13 +52,13 @@ const Contribute = ({ onRefreshData }: Props) => {
-
{t('tools.createCustomTool')}
+
{t('createCustomTool', { ns: 'tools' })}
diff --git a/web/app/components/tools/provider/detail.tsx b/web/app/components/tools/provider/detail.tsx index e0a2281696..70d65f02bc 100644 --- a/web/app/components/tools/provider/detail.tsx +++ b/web/app/components/tools/provider/detail.tsx @@ -124,7 +124,7 @@ const ProviderDetail = ({ setCustomCollection(prev => prev ? { ...prev, labels: data.labels } : null) Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) setIsShowEditCustomCollectionModal(false) } @@ -133,7 +133,7 @@ const ProviderDetail = ({ onRefreshData() Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) setIsShowEditCustomCollectionModal(false) } @@ -163,7 +163,7 @@ const ProviderDetail = ({ onRefreshData() Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) setIsShowEditWorkflowToolModal(false) } @@ -177,7 +177,7 @@ const ProviderDetail = ({ getWorkflowToolProvider() Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) setIsShowEditWorkflowToolModal(false) } @@ -275,7 +275,7 @@ const ProviderDetail = ({ onClick={() => setIsShowEditCustomCollectionModal(true)} > -
{t('tools.createTool.editAction')}
+
{t('createTool.editAction', { ns: 'tools' })}
)} {collection.type === CollectionType.workflow && !isDetailLoading && customCollection && ( @@ -285,7 +285,7 @@ const ProviderDetail = ({ className={cn('my-3 w-[183px] shrink-0')} > -
{t('tools.openInStudio')}
+
{t('openInStudio', { ns: 'tools' })}
@@ -294,7 +294,7 @@ const ProviderDetail = ({ onClick={() => setIsShowEditWorkflowToolModal(true)} disabled={!isCurrentWorkspaceManager} > -
{t('tools.createTool.editAction')}
+
{t('createTool.editAction', { ns: 'tools' })}
)} @@ -306,7 +306,7 @@ const ProviderDetail = ({
{(collection.type === CollectionType.builtIn || collection.type === CollectionType.model) && isAuthed && (
- {t('plugin.detailPanel.actionNum', { num: toolList.length, action: toolList.length > 1 ? 'actions' : 'action' })} + {t('detailPanel.actionNum', { ns: 'plugin', num: toolList.length, action: toolList.length > 1 ? 'actions' : 'action' })} {needAuth && ( )}
@@ -326,9 +326,9 @@ const ProviderDetail = ({ {(collection.type === CollectionType.builtIn || collection.type === CollectionType.model) && needAuth && !isAuthed && ( <>
- {t('tools.includeToolNum', { num: toolList.length, action: toolList.length > 1 ? 'actions' : 'action' }).toLocaleUpperCase()} + {t('includeToolNum', { ns: 'tools', num: toolList.length, action: toolList.length > 1 ? 'actions' : 'action' }).toLocaleUpperCase()} · - {t('tools.auth.setup').toLocaleUpperCase()} + {t('auth.setup', { ns: 'tools' }).toLocaleUpperCase()}
)} {(collection.type === CollectionType.custom) && (
- {t('tools.includeToolNum', { num: toolList.length, action: toolList.length > 1 ? 'actions' : 'action' }).toLocaleUpperCase()} + {t('includeToolNum', { ns: 'tools', num: toolList.length, action: toolList.length > 1 ? 'actions' : 'action' }).toLocaleUpperCase()}
)} {(collection.type === CollectionType.workflow) && (
- {t('tools.createTool.toolInput.title').toLocaleUpperCase()} + {t('createTool.toolInput.title', { ns: 'tools' }).toLocaleUpperCase()}
)}
@@ -370,7 +370,7 @@ const ProviderDetail = ({
{item.name} {item.type} - {item.required ? t('tools.createTool.toolInput.required') : ''} + {item.required ? t('createTool.toolInput.required', { ns: 'tools' }) : ''}
{item.llm_description}
@@ -387,7 +387,7 @@ const ProviderDetail = ({ await updateBuiltInToolCredential(collection.name, value) Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) await onRefreshData() setShowSettingAuth(false) @@ -396,7 +396,7 @@ const ProviderDetail = ({ await removeBuiltInToolCredential(collection.name) Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) await onRefreshData() setShowSettingAuth(false) @@ -421,8 +421,8 @@ const ProviderDetail = ({ )} {showConfirmDelete && ( setShowConfirmDelete(false)} diff --git a/web/app/components/tools/provider/empty.tsx b/web/app/components/tools/provider/empty.tsx index e79607751e..4940dd6fc5 100644 --- a/web/app/components/tools/provider/empty.tsx +++ b/web/app/components/tools/provider/empty.tsx @@ -32,18 +32,18 @@ const Empty = ({ const hasLink = type && [ToolTypeEnum.Custom, ToolTypeEnum.MCP].includes(type) const Comp = (hasLink ? Link : 'div') as any const linkProps = hasLink ? { href: getLink(type), target: '_blank' } : {} - const renderType = isAgent ? 'agent' : type - const hasTitle = t(`tools.addToolModal.${renderType}.title` as any) as string !== `tools.addToolModal.${renderType}.title` + const renderType = isAgent ? 'agent' as const : type + const hasTitle = renderType && t(`addToolModal.${renderType}.title`, { ns: 'tools' }) !== `addToolModal.${renderType}.title` return (
- {hasTitle ? t(`tools.addToolModal.${renderType}.title` as any) as string : 'No tools available'} + {(hasTitle && renderType) ? t(`addToolModal.${renderType}.title`, { ns: 'tools' }) : 'No tools available'}
- {(!isAgent && hasTitle) && ( + {(!isAgent && hasTitle && renderType) && ( - {t(`tools.addToolModal.${renderType}.tip` as any) as string} + {t(`addToolModal.${renderType}.tip`, { ns: 'tools' })} {' '} {hasLink && } diff --git a/web/app/components/tools/setting/build-in/config-credentials.tsx b/web/app/components/tools/setting/build-in/config-credentials.tsx index 644fd8d320..863b3ba352 100644 --- a/web/app/components/tools/setting/build-in/config-credentials.tsx +++ b/web/app/components/tools/setting/build-in/config-credentials.tsx @@ -53,7 +53,7 @@ const ConfigCredential: FC = ({ const handleSave = async () => { for (const field of credentialSchema) { if (field.required && !tempCredential[field.name]) { - Toast.notify({ type: 'error', message: t('common.errorMsg.fieldRequired', { field: field.label[language] || field.label.en_US }) }) + Toast.notify({ type: 'error', message: t('errorMsg.fieldRequired', { ns: 'common', field: field.label[language] || field.label.en_US }) }) return } } @@ -71,8 +71,8 @@ const ConfigCredential: FC = ({ = ({ rel="noopener noreferrer" className="inline-flex items-center text-xs text-text-accent" > - {t('tools.howToGet')} + {t('howToGet', { ns: 'tools' })} ) @@ -111,12 +111,12 @@ const ConfigCredential: FC = ({
{ (collection.is_team_authorization && !isHideRemoveBtn) && ( - + ) }
- - + +
diff --git a/web/app/components/tools/workflow-tool/configure-button.tsx b/web/app/components/tools/workflow-tool/configure-button.tsx index f142989ff6..6526722b63 100644 --- a/web/app/components/tools/workflow-tool/configure-button.tsx +++ b/web/app/components/tools/workflow-tool/configure-button.tsx @@ -166,7 +166,7 @@ const WorkflowToolConfigureButton = ({ getDetail(workflowAppId) Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) setShowModal(false) } @@ -187,7 +187,7 @@ const WorkflowToolConfigureButton = ({ getDetail(workflowAppId) Toast.notify({ type: 'success', - message: t('common.api.actionSuccess'), + message: t('api.actionSuccess', { ns: 'common' }), }) setShowModal(false) } @@ -214,14 +214,14 @@ const WorkflowToolConfigureButton = ({ >
- {t('workflow.common.workflowAsTool')} + {t('common.workflowAsTool', { ns: 'workflow' })}
{!published && ( - {t('workflow.common.configureRequired')} + {t('common.configureRequired', { ns: 'workflow' })} )}
@@ -232,10 +232,10 @@ const WorkflowToolConfigureButton = ({ >
- {t('workflow.common.workflowAsTool')} + {t('common.workflowAsTool', { ns: 'workflow' })}
)} @@ -253,7 +253,7 @@ const WorkflowToolConfigureButton = ({ onClick={() => setShowModal(true)} disabled={!isCurrentWorkspaceManager || disabled} > - {t('workflow.common.configure')} + {t('common.configure', { ns: 'workflow' })} {outdated && } {outdated && (
- {t('workflow.common.workflowAsToolTip')} + {t('common.workflowAsToolTip', { ns: 'workflow' })}
)} diff --git a/web/app/components/tools/workflow-tool/confirm-modal/index.tsx b/web/app/components/tools/workflow-tool/confirm-modal/index.tsx index b3dd99e405..0c7e083a56 100644 --- a/web/app/components/tools/workflow-tool/confirm-modal/index.tsx +++ b/web/app/components/tools/workflow-tool/confirm-modal/index.tsx @@ -29,14 +29,14 @@ const ConfirmModal = ({ show, onConfirm, onClose }: ConfirmModalProps) => {
-
{t('tools.createTool.confirmTitle')}
+
{t('createTool.confirmTitle', { ns: 'tools' })}
- {t('tools.createTool.confirmTip')} + {t('createTool.confirmTip', { ns: 'tools' })}
- - + +
diff --git a/web/app/components/tools/workflow-tool/index.tsx b/web/app/components/tools/workflow-tool/index.tsx index 8804a4128d..9a2c6a4c4c 100644 --- a/web/app/components/tools/workflow-tool/index.tsx +++ b/web/app/components/tools/workflow-tool/index.tsx @@ -55,19 +55,19 @@ const WorkflowToolAsModal: FC = ({ const reservedOutputParameters: WorkflowToolProviderOutputParameter[] = [ { name: 'text', - description: t('workflow.nodes.tool.outputVars.text'), + description: t('nodes.tool.outputVars.text', { ns: 'workflow' }), type: VarType.string, reserved: true, }, { name: 'files', - description: t('workflow.nodes.tool.outputVars.files.title'), + description: t('nodes.tool.outputVars.files.title', { ns: 'workflow' }), type: VarType.arrayFile, reserved: true, }, { name: 'json', - description: t('workflow.nodes.tool.outputVars.json'), + description: t('nodes.tool.outputVars.json', { ns: 'workflow' }), type: VarType.arrayObject, reserved: true, }, @@ -104,13 +104,13 @@ const WorkflowToolAsModal: FC = ({ const onConfirm = () => { let errorMessage = '' if (!label) - errorMessage = t('common.errorMsg.fieldRequired', { field: t('tools.createTool.name') }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t('createTool.name', { ns: 'tools' }) }) if (!name) - errorMessage = t('common.errorMsg.fieldRequired', { field: t('tools.createTool.nameForToolCall') }) + errorMessage = t('errorMsg.fieldRequired', { ns: 'common', field: t('createTool.nameForToolCall', { ns: 'tools' }) }) if (!isNameValid(name)) - errorMessage = t('tools.createTool.nameForToolCall') + t('tools.createTool.nameForToolCallTip') + errorMessage = t('createTool.nameForToolCall', { ns: 'tools' }) + t('createTool.nameForToolCallTip', { ns: 'tools' }) if (errorMessage) { Toast.notify({ @@ -152,7 +152,7 @@ const WorkflowToolAsModal: FC = ({ = ({ {/* name & icon */}
- {t('tools.createTool.name')} + {t('createTool.name', { ns: 'tools' })} {' '} *
@@ -171,7 +171,7 @@ const WorkflowToolAsModal: FC = ({ { setShowEmojiPicker(true) }} className="cursor-pointer" iconType="emoji" icon={emoji.content} background={emoji.background} /> setLabel(e.target.value)} /> @@ -180,46 +180,46 @@ const WorkflowToolAsModal: FC = ({ {/* name for tool call */}
- {t('tools.createTool.nameForToolCall')} + {t('createTool.nameForToolCall', { ns: 'tools' })} {' '} * - {t('tools.createTool.nameForToolCallPlaceHolder')} + {t('createTool.nameForToolCallPlaceHolder', { ns: 'tools' })}
)} />
setName(e.target.value)} /> {!isNameValid(name) && ( -
{t('tools.createTool.nameForToolCallTip')}
+
{t('createTool.nameForToolCallTip', { ns: 'tools' })}
)}
{/* description */}
-
{t('tools.createTool.description')}
+
{t('createTool.description', { ns: 'tools' })}