diff --git a/packages/frontend/@n8n/i18n/src/index.ts b/packages/frontend/@n8n/i18n/src/index.ts
index 1d51bb8416..313007e453 100644
--- a/packages/frontend/@n8n/i18n/src/index.ts
+++ b/packages/frontend/@n8n/i18n/src/index.ts
@@ -14,10 +14,11 @@ import {
export * from './types';
export const i18nInstance = createI18n({
+ legacy: false,
locale: 'en',
fallbackLocale: 'en',
messages: { en: englishBaseText },
- warnHtmlInMessage: 'off',
+ warnHtmlMessage: false,
});
type BaseTextOptions = {
@@ -45,7 +46,7 @@ export class I18nClass {
}
get locale() {
- return i18nInstance.global.locale;
+ return i18nInstance.global.locale.value;
}
// ----------------------------------
@@ -377,14 +378,14 @@ export class I18nClass {
const loadedLanguages = ['en'];
async function setLanguage(language: string) {
- i18nInstance.global.locale = language as 'en';
+ i18nInstance.global.locale.value = language as 'en';
document.querySelector('html')!.setAttribute('lang', language);
return language;
}
export async function loadLanguage(language: string) {
- if (i18nInstance.global.locale === language) {
+ if (i18nInstance.global.locale.value === language) {
return await setLanguage(language);
}
diff --git a/packages/frontend/editor-ui/src/components/ApiKeyScopes.vue b/packages/frontend/editor-ui/src/components/ApiKeyScopes.vue
index ff7d8ac927..70db4cbc3a 100644
--- a/packages/frontend/editor-ui/src/components/ApiKeyScopes.vue
+++ b/packages/frontend/editor-ui/src/components/ApiKeyScopes.vue
@@ -5,6 +5,7 @@ import { ElSelect, ElOption, ElOptionGroup } from 'element-plus';
import { capitalCase } from 'change-case';
import { useI18n } from '@n8n/i18n';
import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper';
+import { I18nT } from 'vue-i18n';
// Define props
const props = defineProps({
@@ -116,13 +117,13 @@ function goToUpgradeApiKeyScopes() {
-
+
{{ i18n.baseText('settings.api.scopes.upgrade.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/ChatEmbedModal.vue b/packages/frontend/editor-ui/src/components/ChatEmbedModal.vue
index 2bee6768c3..8c45956381 100644
--- a/packages/frontend/editor-ui/src/components/ChatEmbedModal.vue
+++ b/packages/frontend/editor-ui/src/components/ChatEmbedModal.vue
@@ -9,6 +9,7 @@ import { useWorkflowsStore } from '@/stores/workflows.store';
import HtmlEditor from '@/components/HtmlEditor/HtmlEditor.vue';
import JsEditor from '@/components/JsEditor/JsEditor.vue';
import { useI18n } from '@n8n/i18n';
+import { I18nT } from 'vue-i18n';
const props = withDefaults(
defineProps<{
@@ -161,11 +162,11 @@ function closeDialog() {
-
+
{{ i18n.baseText(`chatEmbed.paste.${currentTab}.file`) }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/Evaluations.ee/ListRuns/TestRunsTable.vue b/packages/frontend/editor-ui/src/components/Evaluations.ee/ListRuns/TestRunsTable.vue
index 6181e20f83..f9deccaaf3 100644
--- a/packages/frontend/editor-ui/src/components/Evaluations.ee/ListRuns/TestRunsTable.vue
+++ b/packages/frontend/editor-ui/src/components/Evaluations.ee/ListRuns/TestRunsTable.vue
@@ -8,6 +8,7 @@ import type { BaseTextKey } from '@n8n/i18n';
import TestTableBase from '../shared/TestTableBase.vue';
import { statusDictionary } from '../shared/statusDictionary';
import { getErrorBaseKey } from '@/components/Evaluations.ee/shared/errorCodes';
+import { I18nT } from 'vue-i18n';
const emit = defineEmits<{
rowClick: [run: TestRunRecord & { index: number }];
}>();
@@ -88,7 +89,7 @@ const runSummaries = computed(() => {
-
+
-
+
-
+
{{ locale.baseText('evaluations.setupWizard.step3.notice.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/ExternalSecretsProviderModal.ee.vue b/packages/frontend/editor-ui/src/components/ExternalSecretsProviderModal.ee.vue
index 0d9a1d8f68..95e812a378 100644
--- a/packages/frontend/editor-ui/src/components/ExternalSecretsProviderModal.ee.vue
+++ b/packages/frontend/editor-ui/src/components/ExternalSecretsProviderModal.ee.vue
@@ -18,6 +18,7 @@ import type { IParameterLabel } from 'n8n-workflow';
import ExternalSecretsProviderImage from '@/components/ExternalSecretsProviderImage.ee.vue';
import ExternalSecretsProviderConnectionSwitch from '@/components/ExternalSecretsProviderConnectionSwitch.ee.vue';
import { createEventBus } from '@n8n/utils/event-bus';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
data: { eventBus: EventBus; name: string };
@@ -226,13 +227,14 @@ async function onConnectionStateChange() {
}}
-
{{ `\{\{ \$secrets\.${provider.name}\.secret_name \}\}` }}
-
+
{{
i18n.baseText(
diff --git a/packages/frontend/editor-ui/src/components/Folders/MoveToFolderModal.vue b/packages/frontend/editor-ui/src/components/Folders/MoveToFolderModal.vue
index 75d4857446..01907ccfcd 100644
--- a/packages/frontend/editor-ui/src/components/Folders/MoveToFolderModal.vue
+++ b/packages/frontend/editor-ui/src/components/Folders/MoveToFolderModal.vue
@@ -22,6 +22,7 @@ import { getResourcePermissions } from '@n8n/permissions';
import MoveToFolderDropdown from './MoveToFolderDropdown.vue';
import { ResourceType, getTruncatedProjectName } from '@/utils/projects.utils';
import { useWorkflowsStore } from '@/stores/workflows.store';
+import { I18nT } from 'vue-i18n';
/**
* This modal is used to move a resource (folder or workflow) to a different folder.
@@ -364,14 +365,14 @@ onMounted(async () => {
-
+
{{
i18n.baseText('projects.move.resource.modal.message.note')
}}
{{ resourceTypeLabel }}
-
+
{
:class="$style.textBlock"
data-test-id="move-modal-share-credentials-checkbox"
>
-
@@ -436,7 +438,7 @@ onMounted(async () => {
-
+
{
{{ i18n.baseText('folders.move.modal.message.usedCredentials.warning') }}
-
+
{{
@@ -461,7 +466,7 @@ onMounted(async () => {
-
+
diff --git a/packages/frontend/editor-ui/src/components/InputPanel.vue b/packages/frontend/editor-ui/src/components/InputPanel.vue
index 519d758bdb..d07f3625eb 100644
--- a/packages/frontend/editor-ui/src/components/InputPanel.vue
+++ b/packages/frontend/editor-ui/src/components/InputPanel.vue
@@ -29,6 +29,7 @@ import RunData from './RunData.vue';
import WireMeUp from './WireMeUp.vue';
import { usePostHog } from '@/stores/posthog.store';
import { type IRunDataDisplayMode } from '@/Interface';
+import { I18nT } from 'vue-i18n';
type MappingMode = 'debugging' | 'mapping';
@@ -463,7 +464,7 @@ function handleChangeCollapsingColumn(columnName: string | null) {
-
+
-
+
@@ -493,7 +494,7 @@ function handleChangeCollapsingColumn(columnName: string | null) {
-
+
-
+
@@ -519,7 +520,7 @@ function handleChangeCollapsingColumn(columnName: string | null) {
i18n.baseText('ndv.input.rootNodeHasNotRun.title')
}}
-
+
{{ i18n.baseText('ndv.input.rootNodeHasNotRun.description.link') }}
-
+
@@ -554,7 +555,7 @@ function handleChangeCollapsingColumn(columnName: string | null) {
/>
-
+
@@ -563,7 +564,7 @@ function handleChangeCollapsingColumn(columnName: string | null) {
-
+
@@ -573,7 +574,7 @@ function handleChangeCollapsingColumn(columnName: string | null) {
-
+
-
+
diff --git a/packages/frontend/editor-ui/src/components/InviteUsersModal.vue b/packages/frontend/editor-ui/src/components/InviteUsersModal.vue
index e4369fc85f..309d38e0c9 100644
--- a/packages/frontend/editor-ui/src/components/InviteUsersModal.vue
+++ b/packages/frontend/editor-ui/src/components/InviteUsersModal.vue
@@ -18,6 +18,7 @@ import { createEventBus } from '@n8n/utils/event-bus';
import { useClipboard } from '@/composables/useClipboard';
import { useI18n } from '@n8n/i18n';
import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
modalName: string;
@@ -304,13 +305,13 @@ function getEmail(email: string): string {
>
-
+
{{ i18n.baseText('settings.users.advancedPermissions.warning.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/MainHeader/WorkflowDetails.vue b/packages/frontend/editor-ui/src/components/MainHeader/WorkflowDetails.vue
index 663871e263..fae71a926f 100644
--- a/packages/frontend/editor-ui/src/components/MainHeader/WorkflowDetails.vue
+++ b/packages/frontend/editor-ui/src/components/MainHeader/WorkflowDetails.vue
@@ -61,6 +61,7 @@ import { type BaseTextKey, useI18n } from '@n8n/i18n';
import { ProjectTypes } from '@/types/projects.types';
import { useWorkflowSaving } from '@/composables/useWorkflowSaving';
import { sanitizeFilename } from '@/utils/fileUtils';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
readOnly?: boolean;
@@ -798,12 +799,13 @@ const onBreadcrumbsItemSelected = (item: PathItem) => {
{{ i18n.baseText('workflowDetails.share') }}
-
@@ -815,7 +817,7 @@ const onBreadcrumbsItemSelected = (item: PathItem) => {
}}
-
+
diff --git a/packages/frontend/editor-ui/src/components/MainHeader/WorkflowHistoryButton.vue b/packages/frontend/editor-ui/src/components/MainHeader/WorkflowHistoryButton.vue
index 23d0c7432b..e6a4e7cf34 100644
--- a/packages/frontend/editor-ui/src/components/MainHeader/WorkflowHistoryButton.vue
+++ b/packages/frontend/editor-ui/src/components/MainHeader/WorkflowHistoryButton.vue
@@ -2,6 +2,7 @@
import { computed } from 'vue';
import { VIEWS } from '@/constants';
import { useI18n } from '@n8n/i18n';
+import { I18nT } from 'vue-i18n';
const locale = useI18n();
@@ -42,13 +43,13 @@ const workflowHistoryRoute = computed<{ name: string; params: { workflowId: stri
{{
locale.baseText('workflowHistory.button.tooltip.enabled')
}}
-
+
{{ locale.baseText('workflowHistory.button.tooltip.disabled.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/MainSidebar.vue b/packages/frontend/editor-ui/src/components/MainSidebar.vue
index 9b53c53797..065e8f21ce 100644
--- a/packages/frontend/editor-ui/src/components/MainSidebar.vue
+++ b/packages/frontend/editor-ui/src/components/MainSidebar.vue
@@ -28,6 +28,7 @@ import { useBecomeTemplateCreatorStore } from '@/components/BecomeTemplateCreato
import Logo from '@/components/Logo/Logo.vue';
import VersionUpdateCTA from '@/components/VersionUpdateCTA.vue';
import { TemplateClickSource, trackTemplatesClick } from '@/utils/experiments';
+import { I18nT } from 'vue-i18n';
const becomeTemplateCreatorStore = useBecomeTemplateCreatorStore();
const cloudPlanStore = useCloudPlanStore();
@@ -390,7 +391,7 @@ onClickOutside(createBtn as Ref, () => {
placement="bottom"
>
-
+
, () => {
{{ i18n.baseText('readOnlyEnv.tooltip.link') }}
-
+
{
-
+
{{ i18n.baseText('mfa.setup.step1.instruction1.subtitle.part1') }}
@@ -190,7 +191,7 @@ onMounted(async () => {
>{{ i18n.baseText('mfa.setup.step1.instruction1.subtitle.part2') }}
-
+
@@ -235,7 +236,7 @@ onMounted(async () => {
-
+
{{ i18n.baseText('mfa.setup.step2.infobox.description.part1') }}
@@ -244,7 +245,7 @@ onMounted(async () => {
{{ i18n.baseText('mfa.setup.step2.infobox.description.part2') }}
-
+
-
@@ -888,7 +890,7 @@ function handleWheelEvent(event: WheelEvent) {
>{{ node.type.split('.')[0] }}
-
+
-
+
-
+
-
-
+
diff --git a/packages/frontend/editor-ui/src/components/Projects/ProjectMoveResourceModal.vue b/packages/frontend/editor-ui/src/components/Projects/ProjectMoveResourceModal.vue
index 90bbd44170..b9615f3c08 100644
--- a/packages/frontend/editor-ui/src/components/Projects/ProjectMoveResourceModal.vue
+++ b/packages/frontend/editor-ui/src/components/Projects/ProjectMoveResourceModal.vue
@@ -23,6 +23,7 @@ import type { EventBus } from '@n8n/utils/event-bus';
import { sortByProperty } from '@n8n/utils/sort/sortByProperty';
import { truncate } from '@n8n/utils/string/truncate';
import { computed, h, onMounted, ref } from 'vue';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
modalName: string;
@@ -201,25 +202,25 @@ onMounted(async () => {
}}
-
+
{{ resourceName }}
-
+
{{ homeProjectName }}
-
+
-
+
{{ homeProjectName }}
-
+
-
+
@@ -244,14 +245,14 @@ onMounted(async () => {
>
-
+
{{
i18n.baseText('projects.move.resource.modal.message.note')
}}
{{ props.data.resourceTypeLabel }}
-
+
{
:class="$style.textBlock"
data-test-id="project-move-resource-modal-checkbox-all"
>
-
+
@@ -290,10 +291,13 @@ onMounted(async () => {
-
+
-
+
{{
@@ -307,7 +311,7 @@ onMounted(async () => {
-
+
diff --git a/packages/frontend/editor-ui/src/components/Projects/ProjectRoleUpgradeDialog.vue b/packages/frontend/editor-ui/src/components/Projects/ProjectRoleUpgradeDialog.vue
index fd4b84d633..58fe233826 100644
--- a/packages/frontend/editor-ui/src/components/Projects/ProjectRoleUpgradeDialog.vue
+++ b/packages/frontend/editor-ui/src/components/Projects/ProjectRoleUpgradeDialog.vue
@@ -1,6 +1,7 @@
-
+
{{ i18n.baseText('settings.sourceControl.connection.error.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/VirtualSchema.vue b/packages/frontend/editor-ui/src/components/VirtualSchema.vue
index 78381c07c3..0c689e5f54 100644
--- a/packages/frontend/editor-ui/src/components/VirtualSchema.vue
+++ b/packages/frontend/editor-ui/src/components/VirtualSchema.vue
@@ -45,6 +45,7 @@ import 'vue-virtual-scroller/dist/vue-virtual-scroller.css';
import pick from 'lodash/pick';
import { DateTime } from 'luxon';
import NodeExecuteButton from './NodeExecuteButton.vue';
+import { I18nT } from 'vue-i18n';
type Props = {
nodes?: IConnectedNode[];
@@ -417,13 +418,13 @@ const onDragEnd = (el: HTMLElement) => {
@@ -488,10 +489,11 @@ const onDragEnd = (el: HTMLElement) => {
:style="{ '--schema-level': item.level }"
>
-
{
:class="$style.executeButton"
/>
-
-
+
+
diff --git a/packages/frontend/editor-ui/src/components/VirtualSchemaHeader.vue b/packages/frontend/editor-ui/src/components/VirtualSchemaHeader.vue
index 98233c8c0f..2d2bf7f814 100644
--- a/packages/frontend/editor-ui/src/components/VirtualSchemaHeader.vue
+++ b/packages/frontend/editor-ui/src/components/VirtualSchemaHeader.vue
@@ -54,13 +54,13 @@ const emit = defineEmits<{
data-test-id="schema-preview-warning"
@click.stop
>
-
+
{{ i18n.baseText('generic.learnMore') }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryList.vue b/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryList.vue
index 631dbe1127..948e2bf6ad 100644
--- a/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryList.vue
+++ b/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryList.vue
@@ -10,6 +10,7 @@ import type {
} from '@n8n/rest-api-client/api/workflowHistory';
import WorkflowHistoryListItem from '@/components/WorkflowHistory/WorkflowHistoryListItem.vue';
import type { IUser } from 'n8n-workflow';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
items: WorkflowHistory[];
@@ -142,13 +143,13 @@ const onItemMounted = ({
})
}}
-
+
{{ i18n.baseText('workflowHistory.upgrade.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryVersionRestoreModal.vue b/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryVersionRestoreModal.vue
index 6e6cdae850..e7fda65e1b 100644
--- a/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryVersionRestoreModal.vue
+++ b/packages/frontend/editor-ui/src/components/WorkflowHistory/WorkflowHistoryVersionRestoreModal.vue
@@ -3,6 +3,7 @@ import { useI18n } from '@n8n/i18n';
import Modal from '@/components/Modal.vue';
import { useUIStore } from '@/stores/ui.store';
import type { ButtonType } from '@n8n/design-system';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
modalName: string;
@@ -36,24 +37,25 @@ const closeModal = () => {
-
+
{{ props.data.formattedCreatedAt }}
-
+
-
“{{
i18n.baseText('workflowHistory.action.restore.modal.button.deactivateAndRestore')
}}”
-
+
diff --git a/packages/frontend/editor-ui/src/components/WorkflowShareModal.ee.vue b/packages/frontend/editor-ui/src/components/WorkflowShareModal.ee.vue
index 6230f01747..a2c35214f2 100644
--- a/packages/frontend/editor-ui/src/components/WorkflowShareModal.ee.vue
+++ b/packages/frontend/editor-ui/src/components/WorkflowShareModal.ee.vue
@@ -28,6 +28,7 @@ import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper
import { useI18n } from '@n8n/i18n';
import { telemetry } from '@/plugins/telemetry';
import { useWorkflowSaving } from '@/composables/useWorkflowSaving';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
data: {
@@ -274,7 +275,7 @@ watch(
@project-removed="onProjectRemoved"
/>
-
+
{{ workflow.homeProject?.name }}
@@ -290,20 +291,21 @@ watch(
}}
-
+
-
-
+
diff --git a/packages/frontend/editor-ui/src/components/canvas/elements/buttons/CanvasRunWorkflowButton.vue b/packages/frontend/editor-ui/src/components/canvas/elements/buttons/CanvasRunWorkflowButton.vue
index c4878b03e0..e83f16fa61 100644
--- a/packages/frontend/editor-ui/src/components/canvas/elements/buttons/CanvasRunWorkflowButton.vue
+++ b/packages/frontend/editor-ui/src/components/canvas/elements/buttons/CanvasRunWorkflowButton.vue
@@ -7,6 +7,7 @@ import { useI18n } from '@n8n/i18n';
import { type INodeTypeDescription } from 'n8n-workflow';
import { computed } from 'vue';
import { isChatNode } from '@/utils/aiUtils';
+import { I18nT } from 'vue-i18n';
const emit = defineEmits<{
mouseenter: [event: MouseEvent];
@@ -93,7 +94,7 @@ function getNodeTypeByName(name: string): INodeTypeDescription | null {
{{ label }}
-
+
{{ truncateBeforeLast(props.selectedTriggerNodeName ?? '', 25) }}
@@ -127,7 +128,7 @@ function getNodeTypeByName(name: string): INodeTypeDescription | null {
-
+
{{ item.label }}
diff --git a/packages/frontend/editor-ui/src/components/executions/ExecutionsFilter.vue b/packages/frontend/editor-ui/src/components/executions/ExecutionsFilter.vue
index 4d055a69e7..598c410a48 100644
--- a/packages/frontend/editor-ui/src/components/executions/ExecutionsFilter.vue
+++ b/packages/frontend/editor-ui/src/components/executions/ExecutionsFilter.vue
@@ -15,6 +15,7 @@ import { useSettingsStore } from '@/stores/settings.store';
import { getObjectKeys, isEmpty } from '@/utils/typesUtils';
import type { Placement } from '@floating-ui/core';
import { computed, onBeforeMount, reactive, ref } from 'vue';
+import { I18nT } from 'vue-i18n';
export type ExecutionFilterProps = {
workflows?: Array;
@@ -303,7 +304,7 @@ onBeforeMount(() => {
-
+
{{ locale.baseText('executionsFilter.savedData') }}
@@ -316,7 +317,7 @@ onBeforeMount(() => {
}}
-
+
{
>{{ locale.baseText('executionsFilter.customData.inputTooltip.link') }}
-
+
{
-
+
{{
locale.baseText('executionsFilter.customData.inputTooltip.link')
}}
-
+
{
}}
-
+
{{
locale.baseText('executionsFilter.customData.inputTooltip.link')
}}
-
+
import type { ExecutionStatus } from 'n8n-workflow';
import { useI18n } from '@n8n/i18n';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
status: ExecutionStatus;
@@ -18,18 +19,21 @@ const i18n = useI18n();
-
-
-
{{ props.concurrencyCap }}
@@ -37,10 +41,11 @@ const i18n = useI18n();
{{ i18n.baseText('generic.upgradeNow') }}
-
-
+
{{ props.concurrencyCap }}
@@ -51,9 +56,9 @@ const i18n = useI18n();
>{{ i18n.baseText('generic.viewDocs') }}
-
+
-
+
diff --git a/packages/frontend/editor-ui/src/features/insights/components/InsightsSummary.vue b/packages/frontend/editor-ui/src/features/insights/components/InsightsSummary.vue
index 896d5055d6..4b734f1991 100644
--- a/packages/frontend/editor-ui/src/features/insights/components/InsightsSummary.vue
+++ b/packages/frontend/editor-ui/src/features/insights/components/InsightsSummary.vue
@@ -12,6 +12,7 @@ import type { InsightsDateRange, InsightsSummary } from '@n8n/api-types';
import { smartDecimal } from '@n8n/utils/number/smartDecimal';
import { computed, useCssModule } from 'vue';
import { useRoute } from 'vue-router';
+import { I18nT } from 'vue-i18n';
const props = defineProps<{
summary: InsightsSummaryDisplay;
@@ -75,13 +76,13 @@ const trackTabClick = (insightType: keyof InsightsSummary) => {
>
-
+
{{ i18n.baseText('insights.banner.noData.tooltip.link') }}
-
+
@@ -100,11 +101,11 @@ const trackTabClick = (insightType: keyof InsightsSummary) => {
-
+
{{
i18n.baseText('insights.banner.timeSaved.tooltip.link.text')
}}
-
+
diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsOverviewRow.vue b/packages/frontend/editor-ui/src/features/logs/components/LogsOverviewRow.vue
index 2d55570f17..c143d764ce 100644
--- a/packages/frontend/editor-ui/src/features/logs/components/LogsOverviewRow.vue
+++ b/packages/frontend/editor-ui/src/features/logs/components/LogsOverviewRow.vue
@@ -136,7 +136,7 @@ watch(
:is-deleted="latestInfo?.deleted ?? false"
/>
-
+
diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsViewRunData.vue b/packages/frontend/editor-ui/src/features/logs/components/LogsViewRunData.vue
index 9f9a945181..53acb20b17 100644
--- a/packages/frontend/editor-ui/src/features/logs/components/LogsViewRunData.vue
+++ b/packages/frontend/editor-ui/src/features/logs/components/LogsViewRunData.vue
@@ -118,7 +118,7 @@ function handleChangeDisplayMode(value: IRunDataDisplayMode) {
-
+
{{ locale.baseText('logs.details.body.multipleInputs.openingTheNode') }}
diff --git a/packages/frontend/editor-ui/src/views/SettingsApiView.vue b/packages/frontend/editor-ui/src/views/SettingsApiView.vue
index d5d1944bd5..ff69c703e8 100644
--- a/packages/frontend/editor-ui/src/views/SettingsApiView.vue
+++ b/packages/frontend/editor-ui/src/views/SettingsApiView.vue
@@ -118,7 +118,7 @@ function onEdit(id: string) {
-
+
-
+
diff --git a/packages/frontend/editor-ui/src/views/SettingsExternalSecrets.vue b/packages/frontend/editor-ui/src/views/SettingsExternalSecrets.vue
index fb99ba5e52..f17e6394b8 100644
--- a/packages/frontend/editor-ui/src/views/SettingsExternalSecrets.vue
+++ b/packages/frontend/editor-ui/src/views/SettingsExternalSecrets.vue
@@ -7,6 +7,7 @@ import { computed, onMounted } from 'vue';
import ExternalSecretsProviderCard from '@/components/ExternalSecretsProviderCard.ee.vue';
import type { ExternalSecretsProvider } from '@/Interface';
import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper';
+import { I18nT } from 'vue-i18n';
const i18n = useI18n();
const externalSecretsStore = useExternalSecretsStore();
@@ -66,13 +67,13 @@ function goToUpgrade() {
{{ i18n.baseText('settings.externalSecrets.actionBox.title') }}
-
+
{{ i18n.baseText('settings.externalSecrets.actionBox.description.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/views/SettingsSourceControl.vue b/packages/frontend/editor-ui/src/views/SettingsSourceControl.vue
index df3134f9e5..50c8b8be22 100644
--- a/packages/frontend/editor-ui/src/views/SettingsSourceControl.vue
+++ b/packages/frontend/editor-ui/src/views/SettingsSourceControl.vue
@@ -13,6 +13,7 @@ import type { Rule, RuleGroup } from '@n8n/design-system/types';
import { useI18n } from '@n8n/i18n';
import type { Validatable } from '@n8n/design-system';
import { computed, onMounted, reactive, ref } from 'vue';
+import { I18nT } from 'vue-i18n';
const locale = useI18n();
const sourceControlStore = useSourceControlStore();
@@ -200,13 +201,13 @@ const onSelectSshKeyType = (value: Validatable) => {
data-test-id="source-control-content-licensed"
>
-
+
{{ locale.baseText('settings.sourceControl.description.link') }}
-
+
{{
locale.baseText('settings.sourceControl.gitConfig')
@@ -275,7 +276,7 @@ const onSelectSshKeyType = (value: Validatable) => {
-
+
{
>{{ locale.baseText('settings.sourceControl.sshKeyDescriptionLink') }}
-
+
{
v-model="sourceControlStore.preferences.branchReadOnly"
:class="$style.readOnly"
>
-
+
{{ locale.baseText('settings.sourceControl.protected.bold') }}
-
+
diff --git a/packages/frontend/editor-ui/src/views/SettingsUsageAndPlan.vue b/packages/frontend/editor-ui/src/views/SettingsUsageAndPlan.vue
index 4753e942cb..aef206530d 100644
--- a/packages/frontend/editor-ui/src/views/SettingsUsageAndPlan.vue
+++ b/packages/frontend/editor-ui/src/views/SettingsUsageAndPlan.vue
@@ -14,6 +14,7 @@ import { COMMUNITY_PLUS_ENROLLMENT_MODAL } from '@/constants';
import { useUsersStore } from '@/stores/users.store';
import { getResourcePermissions } from '@n8n/permissions';
import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper';
+import { I18nT } from 'vue-i18n';
const usageStore = useUsageStore();
const route = useRoute();
@@ -164,7 +165,7 @@ const openCommunityRegisterModal = () => {
}}
-
+
{{ badgedPlanName.name ?? usageStore.planName }}
{{
@@ -172,15 +173,16 @@ const openCommunityRegisterModal = () => {
}}
{{ locale.baseText('settings.usageAndPlan.edition') }}
-
+
-
-
+
{{ badgedPlanName.badge }}
@@ -188,7 +190,7 @@ const openCommunityRegisterModal = () => {
-
+
{
@click="openCommunityRegisterModal"
/>
-
+
@@ -211,10 +213,11 @@ const openCommunityRegisterModal = () => {
:style="{ width: `${usageStore.executionPercentage}%` }"
>
-
{{ usageStore.activeWorkflowTriggersCount }}
@@ -223,7 +226,7 @@ const openCommunityRegisterModal = () => {
}}
{{ usageStore.activeWorkflowTriggersLimit }}
-
+
diff --git a/packages/frontend/editor-ui/src/views/SettingsUsersView.vue b/packages/frontend/editor-ui/src/views/SettingsUsersView.vue
index b7031a2046..f924673011 100644
--- a/packages/frontend/editor-ui/src/views/SettingsUsersView.vue
+++ b/packages/frontend/editor-ui/src/views/SettingsUsersView.vue
@@ -27,6 +27,7 @@ import { useI18n } from '@n8n/i18n';
import { useDocumentTitle } from '@/composables/useDocumentTitle';
import { usePageRedirectionHelper } from '@/composables/usePageRedirectionHelper';
import SettingsUsersTable from '@/components/SettingsUsers/SettingsUsersTable.vue';
+import { I18nT } from 'vue-i18n';
const clipboard = useClipboard();
const { showToast, showError } = useToast();
@@ -367,7 +368,7 @@ async function onUpdateMfaEnforced(value: boolean) {
/>
-
+
-
+
@@ -403,13 +404,13 @@ async function onUpdateMfaEnforced(value: boolean) {
@update:model-value="onUpdateMfaEnforced"
/>
-
+
{{ i18n.baseText('settings.personal.mfa.enforce.unlicensed_tooltip.link') }}
-
+
diff --git a/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/AppsRequiringCredsNotice.vue b/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/AppsRequiringCredsNotice.vue
index 642e7dbdf7..44ecc5fe23 100644
--- a/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/AppsRequiringCredsNotice.vue
+++ b/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/AppsRequiringCredsNotice.vue
@@ -7,6 +7,7 @@ import type {
AppCredentials,
BaseNode,
} from '@/views/SetupWorkflowFromTemplateView/useCredentialSetupState';
+import { I18nT } from 'vue-i18n';
const i18n = useI18n();
@@ -27,9 +28,9 @@ const appNodeCounts = computed(() => {
-
+
-
+
diff --git a/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/SetupTemplateFormStep.vue b/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/SetupTemplateFormStep.vue
index a369e27bdc..179f7019ed 100644
--- a/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/SetupTemplateFormStep.vue
+++ b/packages/frontend/editor-ui/src/views/SetupWorkflowFromTemplateView/SetupTemplateFormStep.vue
@@ -14,6 +14,7 @@ import type {
import { useI18n } from '@n8n/i18n';
import { useTelemetry } from '@/composables/useTelemetry';
import type { TemplateCredentialKey } from '@/utils/templates/templateTransforms';
+import { I18nT } from 'vue-i18n';
// Props
const props = withDefaults(
@@ -83,14 +84,14 @@ const onCredentialModalOpened = () => {
-
-
+