@@ -105,6 +105,7 @@ import {
} from 'n8n-workflow';
import NodeIcon from '@/components/NodeIcon.vue';
+import TitledList from '@/components/TitledList.vue';
import mixins from 'vue-typed-mixins';
@@ -121,6 +122,7 @@ export default mixins(
).extend({
name: 'Node',
components: {
+ TitledList,
NodeIcon,
},
computed: {
@@ -200,14 +202,12 @@ export default mixins(
executing: this.isExecuting,
};
},
- nodeIssues (): string {
+ nodeIssues (): string[] {
if (this.data.issues === undefined) {
- return '';
+ return [];
}
- const nodeIssues = NodeHelpers.nodeIssuesToString(this.data.issues, this.data);
-
- return `${this.$locale.baseText('node.issues')}:
- ` + nodeIssues.join('
- ');
+ return NodeHelpers.nodeIssuesToString(this.data.issues, this.data);
},
nodeDisabledIcon (): string {
if (this.data.disabled === false) {
diff --git a/packages/editor-ui/src/components/NodeCredentials.vue b/packages/editor-ui/src/components/NodeCredentials.vue
index e1db8b4852739..f9d8056d4a466 100644
--- a/packages/editor-ui/src/components/NodeCredentials.vue
+++ b/packages/editor-ui/src/components/NodeCredentials.vue
@@ -42,7 +42,7 @@
@@ -74,6 +74,8 @@ import { genericHelpers } from '@/components/mixins/genericHelpers';
import { nodeHelpers } from '@/components/mixins/nodeHelpers';
import { showMessage } from '@/components/mixins/showMessage';
+import TitledList from '@/components/TitledList.vue';
+
import { mapGetters } from "vuex";
import mixins from 'vue-typed-mixins';
@@ -89,6 +91,9 @@ export default mixins(
'node', // INodeUi
'overrideCredType', // cred type
],
+ components: {
+ TitledList,
+ },
data () {
return {
NEW_CREDENTIALS_TEXT: `- ${this.$locale.baseText('nodeCredentials.createNew')} -`,
diff --git a/packages/editor-ui/src/components/NodeSettings.vue b/packages/editor-ui/src/components/NodeSettings.vue
index 208e5f989d95f..75593b57d3cc6 100644
--- a/packages/editor-ui/src/components/NodeSettings.vue
+++ b/packages/editor-ui/src/components/NodeSettings.vue
@@ -28,11 +28,14 @@
diff --git a/packages/editor-ui/src/components/ParameterIssues.vue b/packages/editor-ui/src/components/ParameterIssues.vue
index 380da2d1a1cbe..9105424f3f9d7 100644
--- a/packages/editor-ui/src/components/ParameterIssues.vue
+++ b/packages/editor-ui/src/components/ParameterIssues.vue
@@ -1,7 +1,7 @@
@@ -9,9 +9,13 @@
+
diff --git a/packages/editor-ui/src/components/TriggerPanel.vue b/packages/editor-ui/src/components/TriggerPanel.vue
index 6b5ddb9c74fbc..fcbf2e0c26f01 100644
--- a/packages/editor-ui/src/components/TriggerPanel.vue
+++ b/packages/editor-ui/src/components/TriggerPanel.vue
@@ -55,7 +55,7 @@
{{ header }}
-
+
diff --git a/packages/editor-ui/src/components/WorkflowSettings.vue b/packages/editor-ui/src/components/WorkflowSettings.vue
index 5dd73aeb1a0ce..c2ab7e147bc64 100644
--- a/packages/editor-ui/src/components/WorkflowSettings.vue
+++ b/packages/editor-ui/src/components/WorkflowSettings.vue
@@ -32,7 +32,7 @@
{{ $locale.baseText('workflowSettings.timezone') + ":" }}
-
+
@@ -51,7 +51,7 @@
{{ $locale.baseText('workflowSettings.saveDataErrorExecution') + ":" }}
-
+
@@ -70,7 +70,7 @@
{{ $locale.baseText('workflowSettings.saveDataSuccessExecution') + ":" }}
-
+
@@ -89,7 +89,7 @@
{{ $locale.baseText('workflowSettings.saveManualExecutions') + ":" }}
-
+
@@ -108,7 +108,7 @@
{{ $locale.baseText('workflowSettings.saveExecutionProgress') + ":" }}
-
+
@@ -127,7 +127,7 @@
{{ $locale.baseText('workflowSettings.timeoutWorkflow') + ":" }}
-
+
@@ -142,7 +142,7 @@
{{ $locale.baseText('workflowSettings.timeoutAfter') + ":" }}
-
+
diff --git a/packages/editor-ui/src/main.ts b/packages/editor-ui/src/main.ts
index bcd839bafbb9d..ec9ea74ceb932 100644
--- a/packages/editor-ui/src/main.ts
+++ b/packages/editor-ui/src/main.ts
@@ -19,7 +19,7 @@ import router from './router';
import { runExternalHook } from './components/mixins/externalHooks';
import { TelemetryPlugin } from './plugins/telemetry';
-import { I18nPlugin } from './plugins/i18n';
+import { I18nPlugin, i18nInstance } from './plugins/i18n';
import { store } from './store';
@@ -32,6 +32,7 @@ Vue.use(TelemetryPlugin);
Vue.use((vue) => I18nPlugin(vue, store));
new Vue({
+ i18n: i18nInstance,
router,
store,
render: h => h(App),
diff --git a/packages/editor-ui/src/plugins/i18n/index.ts b/packages/editor-ui/src/plugins/i18n/index.ts
index 0041f96bf06a8..a35cb95c78f99 100644
--- a/packages/editor-ui/src/plugins/i18n/index.ts
+++ b/packages/editor-ui/src/plugins/i18n/index.ts
@@ -355,7 +355,7 @@ export class I18nClass {
}
}
-const i18nInstance = new VueI18n({
+export const i18nInstance = new VueI18n({
locale: 'en',
fallbackLocale: 'en',
messages: { en: englishBaseText },
diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json
index 2ae0e167d929e..cfcd12eed915a 100644
--- a/packages/editor-ui/src/plugins/i18n/locales/en.json
+++ b/packages/editor-ui/src/plugins/i18n/locales/en.json
@@ -162,8 +162,8 @@
"dataDisplay.needHelp": "Need help?",
"dataDisplay.nodeDocumentation": "Node Documentation",
"dataDisplay.openDocumentationFor": "Open {nodeTypeDisplayName} documentation",
- "dataMapping.dragColumnToFieldHint": "
Drag onto a field to map column to that field",
- "dataMapping.dragFromPreviousHint": "Map data from previous nodes to
{name} by first clicking this button",
+ "dataMapping.dragColumnToFieldHint": "Drag onto a field to map column to that field",
+ "dataMapping.dragFromPreviousHint": "Map data from previous nodes to
{name} by first clicking this button",
"dataMapping.success.title": "You just mapped some data!",
"dataMapping.success.moreInfo": "Check out our
docs for more details on mapping data in n8n",
"dataMapping.tableHint": "
Drag a column onto
{name} to map it",
@@ -495,9 +495,10 @@
"nodeSettings.scopes.notice": "
{count} scope available for {activeCredential} credentials |
{count} scopes available for {activeCredential} credentials",
"nodeSettings.theNodeIsNotValidAsItsTypeIsUnknown": "The node is not valid as its type ({nodeType}) is unknown",
"nodeSettings.communityNodeUnknown.title": "Install this node to use it",
- "nodeSettings.communityNodeUnknown.description": "This node is not currently installed. It's part of the
{packageName} community package.",
+ "nodeSettings.communityNodeUnknown.description": "This node is not currently installed. It's part of the {action} community package.",
"nodeSettings.communityNodeUnknown.installLink.text": "How to install community nodes",
- "nodeSettings.nodeTypeUnknown.description": "This node is not currently installed. It is either from a newer version of n8n, a
custom node, or has an invalid structure",
+ "nodeSettings.nodeTypeUnknown.description": "This node is not currently installed. It is either from a newer version of n8n, a {action}, or has an invalid structure",
+ "nodeSettings.nodeTypeUnknown.description.customNode": "custom node",
"nodeSettings.thisNodeDoesNotHaveAnyParameters": "This node does not have any parameters",
"nodeSettings.useTheHttpRequestNode": "Use the
HTTP Request node to make a custom API call. We'll take care of the {nodeTypeDisplayName} auth for you.
Learn more",
"nodeSettings.waitBetweenTries.description": "How long to wait between each attempt (in milliseconds)",
@@ -795,7 +796,8 @@
"settings.users.newEmailsToInvite": "New User Email Addresses",
"settings.users.noUsersToInvite": "No users to invite",
"settings.users.setupMyAccount": "Set up my owner account",
- "settings.users.setupSMTPToInviteUsers": "Set up SMTP to invite users.
Instructions",
+ "settings.users.setupSMTPToInviteUsers": "Set up SMTP to invite users. {action}",
+ "settings.users.setupSMTPToInviteUsers.instructions": "Instructions",
"settings.users.setupToInviteUsers": "To invite users, set up your own account",
"settings.users.setupToInviteUsersInfo": "Invited users won’t be able to see workflows and credentials of other users.
More info You will need details of an
SMTP server to complete the setup.",
"settings.users.smtpToAddUsersWarning": "Set up SMTP before adding users (so that n8n can send them invitation emails).
Instructions",
@@ -823,7 +825,9 @@
"settings.api.delete.toast": "API Key deleted",
"settings.api.view.copy.toast": "API Key copied to clipboard",
"settings.api.view.apiPlayground": "API Playground",
- "settings.api.view.info": "Use your API Key to control n8n programmatically using the
n8n API. But if you only want to trigger workflows, consider using the
webhook node instead.",
+ "settings.api.view.info": "Use your API Key to control n8n programmatically using the {apiAction}. But if you only want to trigger workflows, consider using the {webhookAction} instead.",
+ "settings.api.view.info.api": "n8n API",
+ "settings.api.view.info.webhook": "webhook node",
"settings.api.view.myKey": "My API Key",
"settings.api.view.tryapi": "Try it out using the",
"settings.api.view.error": "Could not check if an api key already exists.",
diff --git a/packages/editor-ui/src/views/SettingsApiView.vue b/packages/editor-ui/src/views/SettingsApiView.vue
index c2d6e9d2ba103..f12e962d7d7e2 100644
--- a/packages/editor-ui/src/views/SettingsApiView.vue
+++ b/packages/editor-ui/src/views/SettingsApiView.vue
@@ -13,7 +13,22 @@
-
+
+
+
+
+
+
+
+
diff --git a/packages/editor-ui/src/views/SettingsUsersView.vue b/packages/editor-ui/src/views/SettingsUsersView.vue
index caf88a7e438d6..eae2091933d1e 100644
--- a/packages/editor-ui/src/views/SettingsUsersView.vue
+++ b/packages/editor-ui/src/views/SettingsUsersView.vue
@@ -5,7 +5,15 @@
{{ $locale.baseText('settings.users') }}