@antelopejs/dms-mailing 0.3.4 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +232 -22
- package/dist/automation/email-event-trigger.js +2 -2
- package/dist/automation/email-event-trigger.js.map +1 -1
- package/dist/automation/send-template-action.js +2 -2
- package/dist/automation/send-template-action.js.map +1 -1
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +10 -1
- package/dist/constants.js +15 -3
- package/dist/constants.js.map +1 -1
- package/dist/crons/attention.d.ts +3 -0
- package/dist/crons/attention.js +19 -0
- package/dist/crons/attention.js.map +1 -0
- package/dist/crons/index.d.ts +2 -0
- package/dist/crons/index.js +2 -0
- package/dist/crons/index.js.map +1 -1
- package/dist/crons/jobs.d.ts +12 -0
- package/dist/crons/jobs.js +27 -0
- package/dist/crons/jobs.js.map +1 -0
- package/dist/crons/retention.d.ts +2 -4
- package/dist/crons/retention.js +7 -22
- package/dist/crons/retention.js.map +1 -1
- package/dist/data/displays.d.ts +5 -0
- package/dist/data/displays.js +23 -0
- package/dist/data/displays.js.map +1 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.js +1 -0
- package/dist/data/index.js.map +1 -1
- package/dist/data/locale-fallback.d.ts +3 -0
- package/dist/data/locale-fallback.js +20 -0
- package/dist/data/locale-fallback.js.map +1 -0
- package/dist/data/read-only-routes.d.ts +7 -0
- package/dist/data/read-only-routes.js +13 -0
- package/dist/data/read-only-routes.js.map +1 -0
- package/dist/data/sends-table.d.ts +19 -5
- package/dist/data/sends-table.js +185 -17
- package/dist/data/sends-table.js.map +1 -1
- package/dist/data/suppressions-table.d.ts +24 -0
- package/dist/data/suppressions-table.js +120 -0
- package/dist/data/suppressions-table.js.map +1 -0
- package/dist/data/templates-table.d.ts +20 -2
- package/dist/data/templates-table.js +188 -31
- package/dist/data/templates-table.js.map +1 -1
- package/dist/data-types/categories-type.d.ts +11 -13
- package/dist/data-types/categories-type.js +3 -3
- package/dist/data-types/categories-type.js.map +1 -1
- package/dist/data-types/category-type.js +1 -1
- package/dist/data-types/category-type.js.map +1 -1
- package/dist/db/models/index.d.ts +3 -0
- package/dist/db/models/index.js +3 -0
- package/dist/db/models/index.js.map +1 -1
- package/dist/db/models/sends.model.d.ts +12 -1
- package/dist/db/models/sends.model.js +64 -0
- package/dist/db/models/sends.model.js.map +1 -1
- package/dist/db/models/settings.model.d.ts +0 -1
- package/dist/db/models/settings.model.js +0 -7
- package/dist/db/models/settings.model.js.map +1 -1
- package/dist/db/models/suppressions.model.d.ts +28 -0
- package/dist/db/models/suppressions.model.js +46 -0
- package/dist/db/models/suppressions.model.js.map +1 -0
- package/dist/db/models/template-versions.model.d.ts +24 -0
- package/dist/db/models/template-versions.model.js +17 -0
- package/dist/db/models/template-versions.model.js.map +1 -0
- package/dist/db/models/templates.model.d.ts +2 -0
- package/dist/db/models/templates.model.js +3 -0
- package/dist/db/models/templates.model.js.map +1 -1
- package/dist/db/models/webhook-status.model.d.ts +24 -0
- package/dist/db/models/webhook-status.model.js +21 -0
- package/dist/db/models/webhook-status.model.js.map +1 -0
- package/dist/db/tables/index.d.ts +3 -0
- package/dist/db/tables/index.js +3 -0
- package/dist/db/tables/index.js.map +1 -1
- package/dist/db/tables/send-events.table.d.ts +2 -2
- package/dist/db/tables/send-events.table.js.map +1 -1
- package/dist/db/tables/sends.table.d.ts +10 -2
- package/dist/db/tables/sends.table.js +34 -1
- package/dist/db/tables/sends.table.js.map +1 -1
- package/dist/db/tables/suppressions.table.d.ts +12 -0
- package/dist/db/tables/suppressions.table.js +53 -0
- package/dist/db/tables/suppressions.table.js.map +1 -0
- package/dist/db/tables/template-versions.table.d.ts +13 -0
- package/dist/db/tables/template-versions.table.js +59 -0
- package/dist/db/tables/template-versions.table.js.map +1 -0
- package/dist/db/tables/templates.table.d.ts +11 -0
- package/dist/db/tables/templates.table.js +45 -0
- package/dist/db/tables/templates.table.js.map +1 -1
- package/dist/db/tables/webhook-status.table.d.ts +14 -0
- package/dist/db/tables/webhook-status.table.js +58 -0
- package/dist/db/tables/webhook-status.table.js.map +1 -0
- package/dist/engine/changes.d.ts +12 -0
- package/dist/engine/changes.js +107 -0
- package/dist/engine/changes.js.map +1 -0
- package/dist/engine/conditions.js +0 -2
- package/dist/engine/conditions.js.map +1 -1
- package/dist/engine/coverage.d.ts +1 -0
- package/dist/engine/coverage.js +6 -2
- package/dist/engine/coverage.js.map +1 -1
- package/dist/engine/fallback-html.d.ts +1 -1
- package/dist/engine/fallback-html.js +51 -34
- package/dist/engine/fallback-html.js.map +1 -1
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.js +3 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/plain-text.d.ts +3 -0
- package/dist/engine/plain-text.js +60 -0
- package/dist/engine/plain-text.js.map +1 -0
- package/dist/engine/resolve.d.ts +2 -1
- package/dist/engine/resolve.js +17 -9
- package/dist/engine/resolve.js.map +1 -1
- package/dist/engine/system-variables.d.ts +10 -0
- package/dist/engine/system-variables.js +70 -0
- package/dist/engine/system-variables.js.map +1 -0
- package/dist/engine/tokens.d.ts +2 -1
- package/dist/engine/tokens.js +6 -2
- package/dist/engine/tokens.js.map +1 -1
- package/dist/hooks/tenant-export.js +13 -1
- package/dist/hooks/tenant-export.js.map +1 -1
- package/dist/implementations/dms-mailing/index.d.ts +1 -1
- package/dist/implementations/dms-mailing/index.js +2 -2
- package/dist/implementations/dms-mailing/index.js.map +1 -1
- package/dist/index.js +13 -11
- package/dist/index.js.map +1 -1
- package/dist/pages/editor.js +9 -2
- package/dist/pages/editor.js.map +1 -1
- package/dist/pages/index.d.ts +1 -0
- package/dist/pages/index.js +1 -0
- package/dist/pages/index.js.map +1 -1
- package/dist/pages/module.d.ts +2 -0
- package/dist/pages/module.js +26 -2
- package/dist/pages/module.js.map +1 -1
- package/dist/pages/overview.d.ts +2 -6
- package/dist/pages/overview.js +109 -52
- package/dist/pages/overview.js.map +1 -1
- package/dist/pages/sends.d.ts +3 -4
- package/dist/pages/sends.js +197 -60
- package/dist/pages/sends.js.map +1 -1
- package/dist/pages/settings/form.js +114 -53
- package/dist/pages/settings/form.js.map +1 -1
- package/dist/pages/settings/page.d.ts +0 -1
- package/dist/pages/settings/page.js +8 -11
- package/dist/pages/settings/page.js.map +1 -1
- package/dist/pages/suppressions.d.ts +9 -0
- package/dist/pages/suppressions.js +151 -0
- package/dist/pages/suppressions.js.map +1 -0
- package/dist/pages/templates.d.ts +0 -1
- package/dist/pages/templates.js +115 -41
- package/dist/pages/templates.js.map +1 -1
- package/dist/permissions.js +2 -2
- package/dist/permissions.js.map +1 -1
- package/dist/quick-actions.js +7 -4
- package/dist/quick-actions.js.map +1 -1
- package/dist/routes/events.d.ts +8 -5
- package/dist/routes/events.js +55 -24
- package/dist/routes/events.js.map +1 -1
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/metrics.d.ts +60 -23
- package/dist/routes/metrics.js +231 -83
- package/dist/routes/metrics.js.map +1 -1
- package/dist/routes/period.d.ts +2 -1
- package/dist/routes/period.js +9 -3
- package/dist/routes/period.js.map +1 -1
- package/dist/routes/sends.d.ts +49 -8
- package/dist/routes/sends.js +239 -24
- package/dist/routes/sends.js.map +1 -1
- package/dist/routes/settings.d.ts +44 -5
- package/dist/routes/settings.js +190 -15
- package/dist/routes/settings.js.map +1 -1
- package/dist/routes/suppressions.d.ts +16 -0
- package/dist/routes/suppressions.js +92 -0
- package/dist/routes/suppressions.js.map +1 -0
- package/dist/routes/template-versions.d.ts +28 -0
- package/dist/routes/template-versions.js +87 -0
- package/dist/routes/template-versions.js.map +1 -0
- package/dist/routes/templates.d.ts +60 -6
- package/dist/routes/templates.js +204 -35
- package/dist/routes/templates.js.map +1 -1
- package/dist/services/attention.d.ts +19 -6
- package/dist/services/attention.js +177 -12
- package/dist/services/attention.js.map +1 -1
- package/dist/services/catalog.d.ts +3 -0
- package/dist/services/catalog.js +25 -0
- package/dist/services/catalog.js.map +1 -0
- package/dist/services/categories.d.ts +8 -32
- package/dist/services/categories.js +14 -25
- package/dist/services/categories.js.map +1 -1
- package/dist/services/checked-send.d.ts +9 -0
- package/dist/services/checked-send.js +54 -0
- package/dist/services/checked-send.js.map +1 -0
- package/dist/services/events.d.ts +5 -0
- package/dist/services/events.js +102 -9
- package/dist/services/events.js.map +1 -1
- package/dist/services/metrics.d.ts +17 -6
- package/dist/services/metrics.js +57 -18
- package/dist/services/metrics.js.map +1 -1
- package/dist/services/notify.d.ts +18 -10
- package/dist/services/notify.js +82 -37
- package/dist/services/notify.js.map +1 -1
- package/dist/services/provider-banner.d.ts +14 -0
- package/dist/services/provider-banner.js +115 -0
- package/dist/services/provider-banner.js.map +1 -0
- package/dist/services/render.js.map +1 -1
- package/dist/services/send-stat-items.d.ts +7 -0
- package/dist/services/send-stat-items.js +127 -0
- package/dist/services/send-stat-items.js.map +1 -0
- package/dist/services/send-stats.d.ts +23 -0
- package/dist/services/send-stats.js +63 -0
- package/dist/services/send-stats.js.map +1 -0
- package/dist/services/send.d.ts +18 -3
- package/dist/services/send.js +81 -17
- package/dist/services/send.js.map +1 -1
- package/dist/services/settings.d.ts +5 -0
- package/dist/services/settings.js +28 -7
- package/dist/services/settings.js.map +1 -1
- package/dist/services/starters.d.ts +15 -0
- package/dist/services/starters.js +264 -0
- package/dist/services/starters.js.map +1 -0
- package/dist/services/suppressions.d.ts +20 -0
- package/dist/services/suppressions.js +53 -0
- package/dist/services/suppressions.js.map +1 -0
- package/dist/services/template-attention.d.ts +4 -0
- package/dist/services/template-attention.js +43 -0
- package/dist/services/template-attention.js.map +1 -0
- package/dist/services/template-stats.d.ts +27 -0
- package/dist/services/template-stats.js +59 -0
- package/dist/services/template-stats.js.map +1 -0
- package/dist/services/templates.d.ts +31 -4
- package/dist/services/templates.js +240 -21
- package/dist/services/templates.js.map +1 -1
- package/dist/services/webhook-status.d.ts +27 -0
- package/dist/services/webhook-status.js +134 -0
- package/dist/services/webhook-status.js.map +1 -0
- package/dist/types/blocks.d.ts +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/sends.d.ts +10 -1
- package/dist/types/sends.js +35 -2
- package/dist/types/sends.js.map +1 -1
- package/dist/types/suppressions.d.ts +9 -0
- package/dist/types/suppressions.js +10 -0
- package/dist/types/suppressions.js.map +1 -0
- package/dist/types/webhook.d.ts +17 -0
- package/dist/types/webhook.js +3 -0
- package/dist/types/webhook.js.map +1 -0
- package/dist/validation/settings.schema.d.ts +144 -9
- package/dist/validation/settings.schema.js +113 -16
- package/dist/validation/settings.schema.js.map +1 -1
- package/dist/validation/templates.schema.d.ts +137 -10
- package/dist/validation/templates.schema.js +28 -2
- package/dist/validation/templates.schema.js.map +1 -1
- package/frontend-vue/app/build/components/FormFieldRow.vue +90 -0
- package/frontend-vue/app/build/components/FormRows.vue +26 -0
- package/frontend-vue/app/build/components/RequiredLegend.vue +11 -0
- package/frontend-vue/app/components/CategoriesInput.vue +323 -77
- package/frontend-vue/app/components/CategoryInput.vue +13 -14
- package/frontend-vue/app/components/CategoryLabel.vue +34 -0
- package/frontend-vue/app/components/DuplicateModal.vue +201 -0
- package/frontend-vue/app/components/Editor.vue +55 -20
- package/frontend-vue/app/components/FixAddressModal.vue +133 -0
- package/frontend-vue/app/components/FunnelCard.vue +146 -43
- package/frontend-vue/app/components/LocaleSelect.vue +98 -0
- package/frontend-vue/app/components/NewTemplateModal.vue +388 -102
- package/frontend-vue/app/components/NewTemplateSourceTile.vue +70 -0
- package/frontend-vue/app/components/OverviewGate.vue +220 -0
- package/frontend-vue/app/components/PageHeader.vue +98 -0
- package/frontend-vue/app/components/RealSendModal.vue +555 -0
- package/frontend-vue/app/components/RecipientsField.vue +41 -0
- package/frontend-vue/app/components/RenderingModal.vue +189 -0
- package/frontend-vue/app/components/RetentionInput.vue +212 -0
- package/frontend-vue/app/components/SendDrawer.vue +542 -209
- package/frontend-vue/app/components/StarterGallery.vue +153 -0
- package/frontend-vue/app/components/SystemVariables.vue +63 -0
- package/frontend-vue/app/components/TemplateCard.vue +218 -57
- package/frontend-vue/app/components/TemplateDrawer.vue +785 -274
- package/frontend-vue/app/components/TemplateGallery.vue +312 -56
- package/frontend-vue/app/components/TemplatePreviewFrame.vue +112 -22
- package/frontend-vue/app/components/TestSendModal.vue +266 -95
- package/frontend-vue/app/components/TokenText.vue +61 -10
- package/frontend-vue/app/components/VariablePath.vue +20 -0
- package/frontend-vue/app/components/VersionHistory.vue +196 -0
- package/frontend-vue/app/components/VersionPreview.vue +164 -0
- package/frontend-vue/app/components/WebhookStatus.vue +130 -0
- package/frontend-vue/app/components/blocks/Button.vue +1 -1
- package/frontend-vue/app/components/blocks/Code.vue +1 -1
- package/frontend-vue/app/components/blocks/Footer.vue +56 -7
- package/frontend-vue/app/components/blocks/Heading.vue +1 -1
- package/frontend-vue/app/components/blocks/Hero.vue +13 -7
- package/frontend-vue/app/components/blocks/List.vue +50 -6
- package/frontend-vue/app/components/blocks/Paragraph.vue +1 -1
- package/frontend-vue/app/components/blocks/Total.vue +3 -3
- package/frontend-vue/app/components/editor/EditorAutocompleteMenu.vue +50 -0
- package/frontend-vue/app/components/editor/EditorBlock.vue +37 -90
- package/frontend-vue/app/components/editor/EditorBlockFields.vue +140 -0
- package/frontend-vue/app/components/editor/EditorBlockInspector.vue +92 -0
- package/frontend-vue/app/components/editor/EditorBlockList.vue +32 -25
- package/frontend-vue/app/components/editor/EditorBlockPicker.vue +58 -0
- package/frontend-vue/app/components/editor/EditorBlockTools.vue +71 -0
- package/frontend-vue/app/components/editor/EditorCanvas.vue +105 -70
- package/frontend-vue/app/components/editor/EditorCompare.vue +211 -0
- package/frontend-vue/app/components/editor/EditorConditionFields.vue +56 -46
- package/frontend-vue/app/components/editor/EditorConditionInspector.vue +54 -0
- package/frontend-vue/app/components/editor/EditorEnvelope.vue +77 -0
- package/frontend-vue/app/components/editor/EditorIfBlock.vue +36 -86
- package/frontend-vue/app/components/editor/EditorInsertPoint.vue +64 -0
- package/frontend-vue/app/components/editor/EditorInspector.vue +80 -0
- package/frontend-vue/app/components/editor/EditorLeftPane.vue +103 -0
- package/frontend-vue/app/components/editor/EditorLifecycle.vue +67 -0
- package/frontend-vue/app/components/editor/EditorLoading.vue +23 -0
- package/frontend-vue/app/components/editor/EditorLocaleSwitch.vue +61 -0
- package/frontend-vue/app/components/editor/EditorMissingLocale.vue +72 -48
- package/frontend-vue/app/components/editor/EditorMissingPolicy.vue +42 -0
- package/frontend-vue/app/components/editor/EditorNotice.vue +127 -0
- package/frontend-vue/app/components/editor/EditorOutline.vue +65 -0
- package/frontend-vue/app/components/editor/EditorPalette.vue +95 -42
- package/frontend-vue/app/components/editor/EditorPaletteGroup.vue +66 -0
- package/frontend-vue/app/components/editor/EditorPublishReview.vue +102 -0
- package/frontend-vue/app/components/editor/EditorSaveState.vue +88 -0
- package/frontend-vue/app/components/editor/EditorShortcutHint.vue +17 -0
- package/frontend-vue/app/components/editor/EditorSimChip.vue +51 -0
- package/frontend-vue/app/components/editor/EditorTemplatePane.vue +131 -0
- package/frontend-vue/app/components/editor/EditorTestDataPane.vue +98 -0
- package/frontend-vue/app/components/editor/EditorTitle.vue +82 -0
- package/frontend-vue/app/components/editor/EditorTokenField.vue +224 -0
- package/frontend-vue/app/components/editor/EditorToolbar.vue +34 -134
- package/frontend-vue/app/components/editor/EditorVariableForm.vue +100 -0
- package/frontend-vue/app/components/editor/EditorVariableRow.vue +87 -0
- package/frontend-vue/app/components/editor/EditorVariablesPane.vue +161 -0
- package/frontend-vue/app/components/editor/EditorViewSwitches.vue +76 -0
- package/frontend-vue/app/components/editor/EditorVisibility.vue +101 -0
- package/frontend-vue/app/components/editor/EditorWorkspace.vue +62 -149
- package/frontend-vue/app/composables/useBlockContext.ts +16 -0
- package/frontend-vue/app/composables/useEditorActions.ts +381 -0
- package/frontend-vue/app/composables/useEditorAnnouncements.ts +51 -0
- package/frontend-vue/app/composables/useEditorContext.ts +30 -23
- package/frontend-vue/app/composables/useEditorSession.ts +299 -0
- package/frontend-vue/app/composables/useEditorShortcuts.ts +81 -0
- package/frontend-vue/app/composables/useLocalizedDefaults.ts +17 -0
- package/frontend-vue/app/composables/useMailingApi.ts +142 -27
- package/frontend-vue/app/composables/useOverviewSetup.ts +13 -0
- package/frontend-vue/app/composables/useReplayToast.ts +72 -0
- package/frontend-vue/app/composables/useTemplateCategories.ts +35 -0
- package/frontend-vue/app/composables/useTemplateDrawer.ts +196 -62
- package/frontend-vue/app/composables/useTemplateEditor.ts +318 -86
- package/frontend-vue/app/emails/EmailMailingTemplate.vue +16 -4
- package/frontend-vue/app/emails/components/MailingBlocks.vue +96 -38
- package/frontend-vue/app/emails/components/MailingTextLines.vue +20 -0
- package/frontend-vue/app/plugins/column-displays.ts +65 -0
- package/frontend-vue/app/plugins/{template-gallery-display.client.ts → template-gallery-display.ts} +1 -1
- package/frontend-vue/app/types/mailing.ts +193 -18
- package/frontend-vue/app/utils/api-error.ts +33 -0
- package/frontend-vue/app/utils/autocomplete.ts +120 -0
- package/frontend-vue/app/utils/blocks/components.ts +10 -10
- package/frontend-vue/app/utils/blocks/dnd.ts +7 -3
- package/frontend-vue/app/utils/blocks/factory.ts +199 -38
- package/frontend-vue/app/utils/blocks/fields.ts +39 -19
- package/frontend-vue/app/utils/blocks/index.ts +1 -0
- package/frontend-vue/app/utils/blocks/outline.ts +91 -0
- package/frontend-vue/app/utils/blocks/tree.ts +114 -2
- package/frontend-vue/app/utils/categories.ts +201 -15
- package/frontend-vue/app/utils/changes.ts +152 -0
- package/frontend-vue/app/utils/conditions.ts +25 -19
- package/frontend-vue/app/utils/editor-checks.ts +266 -0
- package/frontend-vue/app/utils/editor-route.ts +43 -4
- package/frontend-vue/app/utils/funnel.ts +74 -0
- package/frontend-vue/app/utils/gallery.ts +179 -1
- package/frontend-vue/app/utils/history.ts +66 -0
- package/frontend-vue/app/utils/lifecycle.ts +185 -0
- package/frontend-vue/app/utils/locales.ts +107 -2
- package/frontend-vue/app/utils/overview-setup.ts +83 -0
- package/frontend-vue/app/utils/pages.ts +5 -0
- package/frontend-vue/app/utils/paths.ts +51 -15
- package/frontend-vue/app/utils/period.ts +62 -22
- package/frontend-vue/app/utils/problems.ts +181 -0
- package/frontend-vue/app/utils/recipients.ts +49 -0
- package/frontend-vue/app/utils/rendering-title.ts +23 -0
- package/frontend-vue/app/utils/send-actions.ts +207 -0
- package/frontend-vue/app/utils/send-link.ts +28 -0
- package/frontend-vue/app/utils/send-snippet.ts +97 -0
- package/frontend-vue/app/utils/send-stats.ts +24 -0
- package/frontend-vue/app/utils/send-values.ts +156 -0
- package/frontend-vue/app/utils/shortcuts.ts +113 -0
- package/frontend-vue/app/utils/slug.ts +82 -0
- package/frontend-vue/app/utils/starters.ts +23 -0
- package/frontend-vue/app/utils/suppression.ts +112 -0
- package/frontend-vue/app/utils/system-variables.ts +165 -0
- package/frontend-vue/app/utils/template-attention.ts +104 -0
- package/frontend-vue/app/utils/timeline.ts +221 -19
- package/frontend-vue/app/utils/tokens.ts +115 -13
- package/frontend-vue/app/utils/variable-types.ts +23 -0
- package/frontend-vue/app/utils/variables.ts +208 -1
- package/frontend-vue/app/utils/version-history.ts +53 -0
- package/frontend-vue/app/utils/webhook-status.ts +170 -0
- package/frontend-vue/dms.frontend.ts +19 -11
- package/frontend-vue/i18n/locales/mailing-en-GB.json +1173 -161
- package/frontend-vue/i18n/locales/mailing-fr-FR.json +1220 -208
- package/frontend-vue/package.json +2 -2
- package/frontend-vue/pnpm-lock.yaml +46 -161
- package/frontend-vue/tests/api-error.test.ts +27 -0
- package/frontend-vue/tests/autocomplete.test.ts +84 -0
- package/frontend-vue/tests/block-components.test.ts +0 -3
- package/frontend-vue/tests/block-fields.test.ts +12 -2
- package/frontend-vue/tests/blocks-factory.test.ts +46 -0
- package/frontend-vue/tests/blocks-outline.test.ts +102 -0
- package/frontend-vue/tests/blocks-tree.test.ts +28 -1
- package/frontend-vue/tests/categories-input.test.ts +140 -0
- package/frontend-vue/tests/categories.test.ts +148 -15
- package/frontend-vue/tests/changes.test.ts +136 -0
- package/frontend-vue/tests/column-displays.test.ts +73 -0
- package/frontend-vue/tests/conditions.test.ts +49 -21
- package/frontend-vue/tests/dnd.test.ts +10 -0
- package/frontend-vue/tests/editor-block-list.test.ts +25 -2
- package/frontend-vue/tests/editor-checks.test.ts +178 -0
- package/frontend-vue/tests/editor-route.test.ts +37 -9
- package/frontend-vue/tests/editor-session.test.ts +207 -0
- package/frontend-vue/tests/footer-block.test.ts +89 -0
- package/frontend-vue/tests/funnel-card.test.ts +117 -0
- package/frontend-vue/tests/funnel.test.ts +81 -0
- package/frontend-vue/tests/gallery.test.ts +124 -2
- package/frontend-vue/tests/helpers/nuxt-globals.ts +232 -0
- package/frontend-vue/tests/history.test.ts +48 -0
- package/frontend-vue/tests/i18n-editor.test.ts +37 -8
- package/frontend-vue/tests/i18n.test.ts +55 -0
- package/frontend-vue/tests/lifecycle.test.ts +145 -0
- package/frontend-vue/tests/locales.test.ts +60 -0
- package/frontend-vue/tests/localized-defaults.test.ts +54 -0
- package/frontend-vue/tests/new-template-modal.test.ts +211 -0
- package/frontend-vue/tests/overview-gate.test.ts +147 -0
- package/frontend-vue/tests/overview-setup.test.ts +78 -0
- package/frontend-vue/tests/paths.test.ts +23 -0
- package/frontend-vue/tests/period.test.ts +59 -10
- package/frontend-vue/tests/problems.test.ts +153 -0
- package/frontend-vue/tests/recipients.test.ts +47 -0
- package/frontend-vue/tests/rendering-title.test.ts +24 -0
- package/frontend-vue/tests/replay-toast.test.ts +67 -0
- package/frontend-vue/tests/retention-input.test.ts +130 -0
- package/frontend-vue/tests/send-actions.test.ts +128 -0
- package/frontend-vue/tests/send-modals.test.ts +416 -0
- package/frontend-vue/tests/send-snippet.test.ts +51 -0
- package/frontend-vue/tests/send-stats.test.ts +12 -0
- package/frontend-vue/tests/send-values.test.ts +119 -0
- package/frontend-vue/tests/shortcuts.test.ts +76 -0
- package/frontend-vue/tests/slug.test.ts +88 -0
- package/frontend-vue/tests/suppression.test.ts +159 -0
- package/frontend-vue/tests/system-variables.test.ts +133 -0
- package/frontend-vue/tests/template-attention.test.ts +123 -0
- package/frontend-vue/tests/template-drawer.test.ts +450 -0
- package/frontend-vue/tests/template-editor.test.ts +218 -9
- package/frontend-vue/tests/template-gallery-display.test.ts +32 -0
- package/frontend-vue/tests/template-gallery.test.ts +371 -0
- package/frontend-vue/tests/template-overlays.test.ts +125 -0
- package/frontend-vue/tests/timeline.test.ts +175 -20
- package/frontend-vue/tests/tokens.test.ts +79 -1
- package/frontend-vue/tests/variable-path.test.ts +23 -0
- package/frontend-vue/tests/variable-types.test.ts +20 -0
- package/frontend-vue/tests/variables.test.ts +90 -2
- package/frontend-vue/tests/version-history.test.ts +41 -0
- package/frontend-vue/tests/webhook-status.test.ts +108 -0
- package/frontend-vue/vitest.config.ts +4 -1
- package/package.json +14 -12
- package/src/automation/email-event-trigger.ts +3 -3
- package/src/automation/send-template-action.ts +7 -5
- package/src/config.ts +3 -1
- package/src/constants.ts +18 -2
- package/src/crons/attention.ts +21 -0
- package/src/crons/index.ts +2 -0
- package/src/crons/jobs.ts +35 -0
- package/src/crons/retention.ts +7 -22
- package/src/data/displays.ts +18 -0
- package/src/data/index.ts +1 -0
- package/src/data/locale-fallback.ts +26 -0
- package/src/data/read-only-routes.ts +14 -0
- package/src/data/sends-table.ts +204 -19
- package/src/data/suppressions-table.ts +127 -0
- package/src/data/templates-table.ts +295 -63
- package/src/data-types/categories-type.ts +4 -5
- package/src/data-types/category-type.ts +1 -1
- package/src/db/models/index.ts +3 -0
- package/src/db/models/sends.model.ts +102 -1
- package/src/db/models/settings.model.ts +2 -12
- package/src/db/models/suppressions.model.ts +53 -0
- package/src/db/models/template-versions.model.ts +23 -0
- package/src/db/models/templates.model.ts +17 -0
- package/src/db/models/webhook-status.model.ts +25 -0
- package/src/db/tables/index.ts +3 -0
- package/src/db/tables/send-events.table.ts +6 -2
- package/src/db/tables/sends.table.ts +37 -2
- package/src/db/tables/suppressions.table.ts +46 -0
- package/src/db/tables/template-versions.table.ts +44 -0
- package/src/db/tables/templates.table.ts +67 -5
- package/src/db/tables/webhook-status.table.ts +44 -0
- package/src/engine/changes.ts +198 -0
- package/src/engine/conditions.ts +1 -7
- package/src/engine/coverage.ts +7 -2
- package/src/engine/fallback-html.ts +80 -42
- package/src/engine/index.ts +3 -0
- package/src/engine/plain-text.ts +86 -0
- package/src/engine/resolve.ts +49 -15
- package/src/engine/system-variables.ts +124 -0
- package/src/engine/tokens.ts +13 -1
- package/src/hooks/tenant-export.ts +21 -2
- package/src/implementations/dms-mailing/index.ts +1 -1
- package/src/index.ts +29 -13
- package/src/pages/editor.ts +13 -2
- package/src/pages/index.ts +6 -3
- package/src/pages/module.ts +31 -2
- package/src/pages/overview.ts +187 -128
- package/src/pages/sends.ts +271 -112
- package/src/pages/settings/form.ts +144 -54
- package/src/pages/settings/page.ts +9 -17
- package/src/pages/suppressions.ts +157 -0
- package/src/pages/templates.ts +140 -43
- package/src/permissions.ts +6 -4
- package/src/quick-actions.ts +12 -5
- package/src/routes/events.ts +110 -33
- package/src/routes/index.ts +2 -0
- package/src/routes/metrics.ts +348 -98
- package/src/routes/period.ts +23 -6
- package/src/routes/sends.ts +413 -41
- package/src/routes/settings.ts +291 -26
- package/src/routes/suppressions.ts +87 -0
- package/src/routes/template-versions.ts +116 -0
- package/src/routes/templates.ts +334 -48
- package/src/services/attention.ts +283 -30
- package/src/services/catalog.ts +28 -0
- package/src/services/categories.ts +28 -27
- package/src/services/checked-send.ts +123 -0
- package/src/services/events.ts +174 -20
- package/src/services/metrics.ts +137 -28
- package/src/services/notify.ts +126 -44
- package/src/services/provider-banner.ts +165 -0
- package/src/services/render.ts +1 -0
- package/src/services/send-stat-items.ts +160 -0
- package/src/services/send-stats.ts +122 -0
- package/src/services/send.ts +193 -31
- package/src/services/settings.ts +52 -8
- package/src/services/starters.ts +383 -0
- package/src/services/suppressions.ts +116 -0
- package/src/services/template-attention.ts +82 -0
- package/src/services/template-stats.ts +97 -0
- package/src/services/templates.ts +400 -37
- package/src/services/webhook-status.ts +202 -0
- package/src/types/blocks.ts +6 -0
- package/src/types/index.ts +2 -0
- package/src/types/sends.ts +64 -2
- package/src/types/suppressions.ts +27 -0
- package/src/types/webhook.ts +29 -0
- package/src/validation/settings.schema.ts +173 -17
- package/src/validation/templates.schema.ts +53 -1
- package/dist/antelope-modules.d.ts +0 -32
- package/dist/antelope-modules.js +0 -36
- package/dist/antelope-modules.js.map +0 -1
- package/dist/test/antelope.test.d.ts +0 -2
- package/dist/test/antelope.test.js +0 -180
- package/dist/test/antelope.test.js.map +0 -1
- package/dist/test/helpers/http.d.ts +0 -4
- package/dist/test/helpers/http.js +0 -28
- package/dist/test/helpers/http.js.map +0 -1
- package/dist/test/helpers/owner.d.ts +0 -5
- package/dist/test/helpers/owner.js +0 -30
- package/dist/test/helpers/owner.js.map +0 -1
- package/dist/test/integration/events.test.d.ts +0 -1
- package/dist/test/integration/events.test.js +0 -143
- package/dist/test/integration/events.test.js.map +0 -1
- package/dist/test/integration/retention.test.d.ts +0 -1
- package/dist/test/integration/retention.test.js +0 -291
- package/dist/test/integration/retention.test.js.map +0 -1
- package/dist/test/integration/sends.test.d.ts +0 -1
- package/dist/test/integration/sends.test.js +0 -210
- package/dist/test/integration/sends.test.js.map +0 -1
- package/dist/test/integration/settings.test.d.ts +0 -1
- package/dist/test/integration/settings.test.js +0 -137
- package/dist/test/integration/settings.test.js.map +0 -1
- package/dist/test/integration/setup.test.d.ts +0 -1
- package/dist/test/integration/setup.test.js +0 -32
- package/dist/test/integration/setup.test.js.map +0 -1
- package/dist/test/integration/templates.test.d.ts +0 -1
- package/dist/test/integration/templates.test.js +0 -233
- package/dist/test/integration/templates.test.js.map +0 -1
- package/dist/test/integration/tenant-export.test.d.ts +0 -1
- package/dist/test/integration/tenant-export.test.js +0 -85
- package/dist/test/integration/tenant-export.test.js.map +0 -1
- package/dist/test/unit/attention.test.d.ts +0 -1
- package/dist/test/unit/attention.test.js +0 -109
- package/dist/test/unit/attention.test.js.map +0 -1
- package/dist/test/unit/automation.test.d.ts +0 -1
- package/dist/test/unit/automation.test.js +0 -104
- package/dist/test/unit/automation.test.js.map +0 -1
- package/dist/test/unit/categories.test.d.ts +0 -1
- package/dist/test/unit/categories.test.js +0 -38
- package/dist/test/unit/categories.test.js.map +0 -1
- package/dist/test/unit/engine/conditions.test.d.ts +0 -1
- package/dist/test/unit/engine/conditions.test.js +0 -23
- package/dist/test/unit/engine/conditions.test.js.map +0 -1
- package/dist/test/unit/engine/coverage.test.d.ts +0 -1
- package/dist/test/unit/engine/coverage.test.js +0 -106
- package/dist/test/unit/engine/coverage.test.js.map +0 -1
- package/dist/test/unit/engine/fallback-html.test.d.ts +0 -1
- package/dist/test/unit/engine/fallback-html.test.js +0 -78
- package/dist/test/unit/engine/fallback-html.test.js.map +0 -1
- package/dist/test/unit/engine/paths.test.d.ts +0 -1
- package/dist/test/unit/engine/paths.test.js +0 -33
- package/dist/test/unit/engine/paths.test.js.map +0 -1
- package/dist/test/unit/engine/resolve.test.d.ts +0 -1
- package/dist/test/unit/engine/resolve.test.js +0 -157
- package/dist/test/unit/engine/resolve.test.js.map +0 -1
- package/dist/test/unit/engine/tokens.test.d.ts +0 -1
- package/dist/test/unit/engine/tokens.test.js +0 -26
- package/dist/test/unit/engine/tokens.test.js.map +0 -1
- package/dist/test/unit/events.test.d.ts +0 -1
- package/dist/test/unit/events.test.js +0 -13
- package/dist/test/unit/events.test.js.map +0 -1
- package/dist/test/unit/metrics.test.d.ts +0 -1
- package/dist/test/unit/metrics.test.js +0 -108
- package/dist/test/unit/metrics.test.js.map +0 -1
- package/dist/test/unit/notify.test.d.ts +0 -1
- package/dist/test/unit/notify.test.js +0 -49
- package/dist/test/unit/notify.test.js.map +0 -1
- package/dist/test/unit/period.test.d.ts +0 -1
- package/dist/test/unit/period.test.js +0 -61
- package/dist/test/unit/period.test.js.map +0 -1
- package/dist/test/unit/permissions.test.d.ts +0 -1
- package/dist/test/unit/permissions.test.js +0 -27
- package/dist/test/unit/permissions.test.js.map +0 -1
- package/dist/test/unit/provider.test.d.ts +0 -1
- package/dist/test/unit/provider.test.js +0 -47
- package/dist/test/unit/provider.test.js.map +0 -1
- package/dist/test/unit/realtime.test.d.ts +0 -1
- package/dist/test/unit/realtime.test.js +0 -13
- package/dist/test/unit/realtime.test.js.map +0 -1
- package/dist/test/unit/render.test.d.ts +0 -1
- package/dist/test/unit/render.test.js +0 -23
- package/dist/test/unit/render.test.js.map +0 -1
- package/dist/test/unit/retention.test.d.ts +0 -1
- package/dist/test/unit/retention.test.js +0 -66
- package/dist/test/unit/retention.test.js.map +0 -1
- package/dist/test/unit/send-batch.test.d.ts +0 -1
- package/dist/test/unit/send-batch.test.js +0 -46
- package/dist/test/unit/send-batch.test.js.map +0 -1
- package/dist/test/unit/send.test.d.ts +0 -1
- package/dist/test/unit/send.test.js +0 -120
- package/dist/test/unit/send.test.js.map +0 -1
- package/dist/test/unit/smoke.test.d.ts +0 -1
- package/dist/test/unit/smoke.test.js +0 -10
- package/dist/test/unit/smoke.test.js.map +0 -1
- package/dist/test/unit/status.test.d.ts +0 -1
- package/dist/test/unit/status.test.js +0 -16
- package/dist/test/unit/status.test.js.map +0 -1
- package/dist/test/unit/templates.test.d.ts +0 -1
- package/dist/test/unit/templates.test.js +0 -48
- package/dist/test/unit/templates.test.js.map +0 -1
- package/dist/test/unit/tenant-export.test.d.ts +0 -1
- package/dist/test/unit/tenant-export.test.js +0 -59
- package/dist/test/unit/tenant-export.test.js.map +0 -1
- package/dist/test/unit/webhook-secret.test.d.ts +0 -1
- package/dist/test/unit/webhook-secret.test.js +0 -43
- package/dist/test/unit/webhook-secret.test.js.map +0 -1
- package/frontend-vue/app/components/AttentionCard.vue +0 -78
- package/frontend-vue/app/components/HtmlPreviewModal.vue +0 -20
- package/frontend-vue/app/components/ProviderChip.vue +0 -39
- package/frontend-vue/app/components/editor/EditorBlockSettings.vue +0 -186
- package/frontend-vue/app/components/editor/EditorDataPanel.vue +0 -130
- package/frontend-vue/app/components/editor/EditorDraftBar.vue +0 -35
- package/frontend-vue/app/components/editor/EditorRail.vue +0 -58
- package/frontend-vue/app/components/editor/EditorSubjectSettings.vue +0 -37
- package/frontend-vue/app/components/editor/EditorTemplateSettings.vue +0 -87
- package/frontend-vue/app/components/editor/EditorTestSendModal.vue +0 -66
- package/frontend-vue/app/components/editor/EditorVariables.vue +0 -163
- package/frontend-vue/app/composables/useMailingPeriodData.ts +0 -39
- package/frontend-vue/tests/smoke.test.ts +0 -8
- package/src/antelope-modules.ts +0 -48
- package/src/test/antelope.test.ts +0 -190
- package/src/test/helpers/http.ts +0 -23
- package/src/test/helpers/owner.ts +0 -37
- package/src/test/integration/events.test.ts +0 -159
- package/src/test/integration/retention.test.ts +0 -363
- package/src/test/integration/sends.test.ts +0 -233
- package/src/test/integration/settings.test.ts +0 -128
- package/src/test/integration/setup.test.ts +0 -35
- package/src/test/integration/templates.test.ts +0 -272
- package/src/test/integration/tenant-export.test.ts +0 -125
- package/src/test/unit/attention.test.ts +0 -129
- package/src/test/unit/automation.test.ts +0 -130
- package/src/test/unit/categories.test.ts +0 -51
- package/src/test/unit/engine/conditions.test.ts +0 -35
- package/src/test/unit/engine/coverage.test.ts +0 -118
- package/src/test/unit/engine/fallback-html.test.ts +0 -86
- package/src/test/unit/engine/paths.test.ts +0 -39
- package/src/test/unit/engine/resolve.test.ts +0 -176
- package/src/test/unit/engine/tokens.test.ts +0 -26
- package/src/test/unit/events.test.ts +0 -19
- package/src/test/unit/metrics.test.ts +0 -170
- package/src/test/unit/notify.test.ts +0 -71
- package/src/test/unit/period.test.ts +0 -91
- package/src/test/unit/permissions.test.ts +0 -30
- package/src/test/unit/provider.test.ts +0 -57
- package/src/test/unit/realtime.test.ts +0 -11
- package/src/test/unit/render.test.ts +0 -23
- package/src/test/unit/retention.test.ts +0 -91
- package/src/test/unit/send-batch.test.ts +0 -72
- package/src/test/unit/send.test.ts +0 -161
- package/src/test/unit/smoke.test.ts +0 -8
- package/src/test/unit/status.test.ts +0 -14
- package/src/test/unit/templates.test.ts +0 -52
- package/src/test/unit/tenant-export.test.ts +0 -88
- package/src/test/unit/webhook-secret.test.ts +0 -51
|
@@ -1,32 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dms_mailing": {
|
|
3
3
|
"attention": {
|
|
4
|
-
"bounces_description": "Invalid addresses — remove them to protect the sending reputation.",
|
|
5
|
-
"bounces_title": "{count} permanent bounces",
|
|
6
|
-
"missing_locales_description": "Incomplete templates — {names}. Sends fall back to the default locale.",
|
|
7
|
-
"missing_locales_title": "{count} missing translations",
|
|
8
4
|
"problem_sends": {
|
|
9
|
-
"description": "
|
|
10
|
-
"title": "{count} send
|
|
5
|
+
"description": "Bounces: {bounced} · provider failures: {failed} · spam reports: {spam}",
|
|
6
|
+
"title": "{count} send has a problem | {count} sends have a problem",
|
|
7
|
+
"action": "Review problems",
|
|
8
|
+
"parts": {
|
|
9
|
+
"bounced": "{count} bounce | {count} bounces",
|
|
10
|
+
"failed": "{count} provider failure | {count} provider failures",
|
|
11
|
+
"spam": "{count} spam report | {count} spam reports"
|
|
12
|
+
}
|
|
11
13
|
},
|
|
12
14
|
"stale_drafts": {
|
|
13
|
-
"description": "Never published
|
|
14
|
-
"title": "{count} draft left untouched | {count} drafts left untouched"
|
|
15
|
+
"description": "Never published, idle for over a week.",
|
|
16
|
+
"title": "{count} draft left untouched | {count} drafts left untouched",
|
|
17
|
+
"action": "Publish or archive"
|
|
15
18
|
},
|
|
16
|
-
"stale_drafts_description": "Never published since their last edit — publish them or archive them.",
|
|
17
|
-
"stale_drafts_title": "{count} drafts left untouched",
|
|
18
19
|
"test_only_window": {
|
|
19
|
-
"description": "These figures count real traffic only.
|
|
20
|
-
"title": "{count} test sends excluded"
|
|
20
|
+
"description": "These figures count real traffic only.",
|
|
21
|
+
"title": "{count} test send excluded | {count} test sends excluded",
|
|
22
|
+
"action": "Open the send log"
|
|
21
23
|
},
|
|
22
24
|
"untracked_rates": {
|
|
23
25
|
"title": "Opens and clicks are not tracked",
|
|
24
|
-
"description": "{provider}
|
|
26
|
+
"description": "{provider} reported no open or click in this period.",
|
|
27
|
+
"action": "Webhook settings"
|
|
25
28
|
},
|
|
26
29
|
"unused_live": {
|
|
27
|
-
"description": "
|
|
28
|
-
"title": "{count} live template
|
|
29
|
-
|
|
30
|
+
"description": "{names}: check the slug your code calls.",
|
|
31
|
+
"title": "{count} live template unused this period | {count} live templates unused this period",
|
|
32
|
+
"action": "Check the slugs"
|
|
33
|
+
},
|
|
34
|
+
"missing_locales": {
|
|
35
|
+
"title": "{count} template misses a translation | {count} templates miss a translation",
|
|
36
|
+
"description": "{names}: those customers get the fallback language.",
|
|
37
|
+
"action": "See the templates"
|
|
38
|
+
},
|
|
39
|
+
"untracked_delivery": {
|
|
40
|
+
"title": "Delivery is not measured",
|
|
41
|
+
"description": "{provider} reports no delivery: sends stay “sent”.",
|
|
42
|
+
"action": "Webhook settings"
|
|
43
|
+
},
|
|
44
|
+
"sender_missing": {
|
|
45
|
+
"title": "No sender address",
|
|
46
|
+
"description": "E-mails use the provider’s default address.",
|
|
47
|
+
"action": "Set the sender"
|
|
48
|
+
},
|
|
49
|
+
"more_names": "{names} and {count} more"
|
|
30
50
|
},
|
|
31
51
|
"blocks": {
|
|
32
52
|
"button": "Button",
|
|
@@ -40,7 +60,7 @@
|
|
|
40
60
|
"paragraph": "Paragraph",
|
|
41
61
|
"total": "Total"
|
|
42
62
|
},
|
|
43
|
-
"description": "
|
|
63
|
+
"description": "E-mails, templates and campaigns",
|
|
44
64
|
"editor": {
|
|
45
65
|
"actions": {
|
|
46
66
|
"delete": "Delete this block",
|
|
@@ -49,7 +69,6 @@
|
|
|
49
69
|
"move_down": "Move down",
|
|
50
70
|
"move_up": "Move up"
|
|
51
71
|
},
|
|
52
|
-
"add_block": "Add a block",
|
|
53
72
|
"back": "Back to the templates",
|
|
54
73
|
"block_settings": {
|
|
55
74
|
"align": "Alignment",
|
|
@@ -70,115 +89,311 @@
|
|
|
70
89
|
"text": "Text",
|
|
71
90
|
"unsubscribe_label": "Unsubscribe label",
|
|
72
91
|
"value": "Displayed value",
|
|
73
|
-
"value_path": "Value path"
|
|
92
|
+
"value_path": "Value path",
|
|
93
|
+
"unsubscribe_label_help": "Leave empty to leave the link out. Its URL is the unsubscribeUrl your code passes at send time.",
|
|
94
|
+
"preferences_label_help": "Leave empty to leave the link out. Its URL is the preferencesUrl your code passes at send time."
|
|
74
95
|
},
|
|
75
96
|
"condition": {
|
|
76
|
-
"add_else": "Add an \"else\" branch",
|
|
77
|
-
"add_here": "Add to this branch",
|
|
78
|
-
"compiled": "Compiled",
|
|
79
97
|
"else": "ELSE",
|
|
80
|
-
"eval_false": "false with the test data",
|
|
81
|
-
"eval_true": "true with the test data",
|
|
82
98
|
"field": "Field",
|
|
83
99
|
"hidden": "hidden by the condition",
|
|
84
100
|
"if": "IF",
|
|
85
101
|
"operator": "Operator",
|
|
86
|
-
"remove_else": "Remove the \"else\" branch",
|
|
87
102
|
"simulate_false": "false",
|
|
88
103
|
"simulate_true": "true",
|
|
89
|
-
"value": "Value"
|
|
104
|
+
"value": "Value",
|
|
105
|
+
"sim_locked": "Evaluated with the test data",
|
|
106
|
+
"sim_hint": "Simulate the branch the e-mail takes",
|
|
107
|
+
"no_value": "no value",
|
|
108
|
+
"eval_branch_true": "With test data: true → first branch",
|
|
109
|
+
"eval_branch_false": "With test data: false → else branch",
|
|
110
|
+
"eval_visibility_true": "With test data: true → shown",
|
|
111
|
+
"eval_visibility_false": "With test data: false → hidden",
|
|
112
|
+
"first_branch_if": "Show the first branch if",
|
|
113
|
+
"else_branch": "Else branch",
|
|
114
|
+
"else_count": "{count} block shown when the rule is false | {count} blocks shown when the rule is false",
|
|
115
|
+
"else_off": "Nothing is shown when the rule is false"
|
|
90
116
|
},
|
|
91
117
|
"data": {
|
|
92
|
-
"
|
|
93
|
-
"controls": "Checks",
|
|
94
|
-
"covered": "Every variable used is covered.",
|
|
95
|
-
"help_invalid": "Invalid JSON: the preview falls back to the variable names.",
|
|
96
|
-
"help_off": "Turn \"Test data\" on in the top bar to interpolate the preview and evaluate the conditions.",
|
|
97
|
-
"help_valid": "Valid JSON — variables interpolated and conditions evaluated for real.",
|
|
98
|
-
"save": "Save this data set",
|
|
99
|
-
"saved": "Test data saved",
|
|
100
|
-
"title": "Test data set",
|
|
101
|
-
"uncovered": "{count} uncovered variables: {path} is used by the template but absent from the test data.",
|
|
102
|
-
"use": "Use this data set"
|
|
118
|
+
"invalid_json_banner": "Test data isn’t valid JSON: the preview uses the last valid data."
|
|
103
119
|
},
|
|
104
120
|
"description": "Block editor for a mailing template",
|
|
105
121
|
"desktop": "Desktop",
|
|
106
|
-
"discard": "Discard",
|
|
107
|
-
"discard_description": "Every unsaved change goes back to the last saved version.",
|
|
108
|
-
"discard_title": "Discard the draft?",
|
|
109
122
|
"groups": {
|
|
110
123
|
"conditional": "Conditional display",
|
|
111
124
|
"content": "Content",
|
|
112
125
|
"logic": "Logic",
|
|
113
126
|
"variables": "Available variables"
|
|
114
127
|
},
|
|
115
|
-
"leave_guard": "This template has unsaved changes. Leave anyway?",
|
|
116
|
-
"load_error": "This template could not be loaded.",
|
|
117
128
|
"loading": "Loading the template…",
|
|
118
129
|
"missing_locale": {
|
|
119
130
|
"blank": "Start from an empty page",
|
|
120
131
|
"duplicate": "Duplicate from {fallback}",
|
|
121
132
|
"hint": "Sends in {locale} fall back to {fallback}. Duplicate it to translate, or start from an empty page.",
|
|
122
|
-
"
|
|
133
|
+
"title_short": "No {locale} version yet",
|
|
134
|
+
"affected": "{count} recipient asked for {locale} in the last 30 days and got {fallback}. Duplicate it to translate, or start from an empty page. | {count} recipients asked for {locale} in the last 30 days and got {fallback}. Duplicate it to translate, or start from an empty page.",
|
|
135
|
+
"fallback_is_missing": "No {locale} version, and {locale} is the fallback language: sends without a translation go out in {first}.",
|
|
136
|
+
"no_locale": "This template has no language yet: sends fail until one is written. Start from an empty page."
|
|
123
137
|
},
|
|
124
138
|
"mobile": "Mobile",
|
|
125
139
|
"open_template_settings": "Template settings",
|
|
126
140
|
"operators": {
|
|
127
141
|
"eq": "equals",
|
|
128
|
-
"falsy": "is
|
|
142
|
+
"falsy": "is empty",
|
|
129
143
|
"gt": "is greater than",
|
|
130
144
|
"lt": "is lower than",
|
|
131
145
|
"ne": "differs from",
|
|
132
|
-
"truthy": "is
|
|
146
|
+
"truthy": "is filled in"
|
|
133
147
|
},
|
|
134
148
|
"palette": {
|
|
135
|
-
"
|
|
149
|
+
"search": "Search blocks",
|
|
150
|
+
"no_match": "No block matches “{query}”.",
|
|
151
|
+
"help": "Drag a tile onto the e-mail, or click it to add it under the selected block. Press / on the canvas to search blocks.",
|
|
152
|
+
"tiles": {
|
|
153
|
+
"footer": "Footer · legal line & links",
|
|
154
|
+
"if": "Condition · if / else"
|
|
155
|
+
}
|
|
136
156
|
},
|
|
137
157
|
"preheader": "Preheader",
|
|
138
|
-
"preview_mode": {
|
|
139
|
-
"back": "Back to the variable names",
|
|
140
|
-
"data": "Preview: test data",
|
|
141
|
-
"variables": "Preview: variables"
|
|
142
|
-
},
|
|
143
|
-
"publish": "Publish",
|
|
144
|
-
"published": "Template published",
|
|
145
|
-
"save": "Save",
|
|
146
|
-
"saved": "Saved",
|
|
147
|
-
"settings_hint": "Select a block on the sheet to edit it.",
|
|
148
|
-
"status_hint": "Publishing records the date; archiving stops the template being sent.",
|
|
149
|
-
"still_called": "the code still calls {slug}",
|
|
150
158
|
"subject": "Subject",
|
|
151
|
-
"subject_help": "Variables not supplied at send time make the call fail.",
|
|
152
|
-
"tabs": {
|
|
153
|
-
"blocks": "Blocks",
|
|
154
|
-
"data": "Data",
|
|
155
|
-
"settings": "Settings",
|
|
156
|
-
"template": "Template"
|
|
157
|
-
},
|
|
158
|
-
"test_send": "Test send",
|
|
159
|
-
"test_send_modal": {
|
|
160
|
-
"recipients": "Recipients",
|
|
161
|
-
"send": "Send",
|
|
162
|
-
"sent": "Test sent",
|
|
163
|
-
"title": "Test send"
|
|
164
|
-
},
|
|
165
159
|
"title": "Editor",
|
|
166
|
-
"toggle_rail": "Toggle the side panel",
|
|
167
|
-
"unsaved": "{count} unsaved changes",
|
|
168
160
|
"variables": {
|
|
169
161
|
"add": "Add",
|
|
170
162
|
"cancel": "Cancel",
|
|
171
163
|
"declare": "Declare a variable",
|
|
172
164
|
"empty": "No variable declared yet.",
|
|
173
|
-
"insert": "Insert this variable",
|
|
174
165
|
"path": "Path",
|
|
175
166
|
"required": "Required",
|
|
176
167
|
"type": "Type",
|
|
177
|
-
"unused": "unused"
|
|
168
|
+
"unused": "unused",
|
|
169
|
+
"insert_hint": "Click to insert at the cursor",
|
|
170
|
+
"undeclared": "undeclared",
|
|
171
|
+
"declare_one": "Declare",
|
|
172
|
+
"edit": "Edit this variable",
|
|
173
|
+
"remove": "Remove this variable",
|
|
174
|
+
"save": "Save",
|
|
175
|
+
"invalid_path": "Letters, digits, dots, underscores and [] only, e.g. {suggestion}.",
|
|
176
|
+
"rename_in_blocks": "Also replace it in {count} place | Also replace it in {count} places",
|
|
177
|
+
"remove_used_title": "Remove {path}?",
|
|
178
|
+
"remove_used_description": "{count} place of the template still uses it. | {count} places of the template still use it.",
|
|
179
|
+
"draft_hint": "Declarations are part of the draft: code calling the template gets them once you publish.",
|
|
180
|
+
"insert": "Insert this variable"
|
|
181
|
+
},
|
|
182
|
+
"states": {
|
|
183
|
+
"back": "Back to templates",
|
|
184
|
+
"retry": "Try again",
|
|
185
|
+
"error_title": "This template couldn’t be loaded",
|
|
186
|
+
"error_description": "It may have been deleted, or the content is invalid."
|
|
187
|
+
},
|
|
188
|
+
"toolbar": {
|
|
189
|
+
"test": "Test",
|
|
190
|
+
"test_hint": "Send a test",
|
|
191
|
+
"publish": "Publish changes",
|
|
192
|
+
"uncategorised": "Uncategorised",
|
|
193
|
+
"locale": "Locale",
|
|
194
|
+
"locale_missing": "Missing: falls back to {fallback}",
|
|
195
|
+
"device": "Device",
|
|
196
|
+
"desktop": "Desktop · 600 px",
|
|
197
|
+
"mobile": "Mobile · 380 px",
|
|
198
|
+
"mode": "Preview",
|
|
199
|
+
"mode_variables": "Variables",
|
|
200
|
+
"mode_data": "Data"
|
|
201
|
+
},
|
|
202
|
+
"save_state": {
|
|
203
|
+
"saving": "Saving…",
|
|
204
|
+
"saved": "Saved",
|
|
205
|
+
"unpublished": "{count} unpublished change | {count} unpublished changes",
|
|
206
|
+
"error": "Not saved · Retry",
|
|
207
|
+
"retry": "The draft couldn’t be saved. Click to try again.",
|
|
208
|
+
"hint": "Your edits are saved automatically as a draft.",
|
|
209
|
+
"undo": "Undo",
|
|
210
|
+
"redo": "Redo",
|
|
211
|
+
"saved_toast": "Draft saved"
|
|
212
|
+
},
|
|
213
|
+
"notice": {
|
|
214
|
+
"live_changes": "Customers still receive v{version}, published {date} at {time}. Your {count} change goes out only when you publish. | Customers still receive v{version}, published {date} at {time}. Your {count} changes go out only when you publish.",
|
|
215
|
+
"live_clean": "Customers receive v{version}, published {date} at {time}. Your edits are saved as a draft until you publish.",
|
|
216
|
+
"never_published": "Not published yet: nothing reaches customers until you publish v1.",
|
|
217
|
+
"compare": "Compare with live",
|
|
218
|
+
"discard": "Discard draft",
|
|
219
|
+
"conflict": "Changed elsewhere: this draft was saved from another tab or by someone else. Reload it, or overwrite it with your version.",
|
|
220
|
+
"save_error": "Your latest edits are not saved yet.",
|
|
221
|
+
"retry": "Retry",
|
|
222
|
+
"unpublished": "Unpublished: calls to {slug} fail since {date} at {time}."
|
|
223
|
+
},
|
|
224
|
+
"left": {
|
|
225
|
+
"blocks": "Blocks",
|
|
226
|
+
"outline": "Outline",
|
|
227
|
+
"variables": "Variables",
|
|
228
|
+
"shortcut_save": "save",
|
|
229
|
+
"shortcut_publish": "publish",
|
|
230
|
+
"shortcut_test": "test",
|
|
231
|
+
"shortcuts": "Keyboard shortcuts",
|
|
232
|
+
"shortcut_search": "search blocks",
|
|
233
|
+
"shortcut_delete": "delete the block",
|
|
234
|
+
"shortcut_duplicate": "duplicate the block",
|
|
235
|
+
"shortcut_undo": "undo",
|
|
236
|
+
"shortcut_redo": "redo",
|
|
237
|
+
"shortcut_escape": "deselect · back to templates"
|
|
238
|
+
},
|
|
239
|
+
"outline": {
|
|
240
|
+
"empty": "No block yet. Add one from the Blocks tab."
|
|
241
|
+
},
|
|
242
|
+
"envelope": {
|
|
243
|
+
"subject": "Subject",
|
|
244
|
+
"preheader": "Preheader",
|
|
245
|
+
"subject_empty": "No subject yet",
|
|
246
|
+
"preheader_empty": "No preheader",
|
|
247
|
+
"subject_length": "Mail clients show about {max} characters of a subject."
|
|
248
|
+
},
|
|
249
|
+
"canvas": {
|
|
250
|
+
"add_here": "Add a block here",
|
|
251
|
+
"insert": "Add a block here"
|
|
252
|
+
},
|
|
253
|
+
"inspector": {
|
|
254
|
+
"block": "Block",
|
|
255
|
+
"data": "Test data",
|
|
256
|
+
"template": "Template",
|
|
257
|
+
"empty_title": "No block selected",
|
|
258
|
+
"empty_description": "Click a block on the e-mail to edit it here.",
|
|
259
|
+
"position": "block {index} of {total}",
|
|
260
|
+
"position_branches": "{position} · {then} + {else} blocks",
|
|
261
|
+
"duplicate": "Duplicate",
|
|
262
|
+
"delete": "Delete"
|
|
263
|
+
},
|
|
264
|
+
"autocomplete": {
|
|
265
|
+
"hint": "Type {'{{'} to insert a variable.",
|
|
266
|
+
"undeclared": "undeclared",
|
|
267
|
+
"system": "at send time"
|
|
268
|
+
},
|
|
269
|
+
"visibility": {
|
|
270
|
+
"label": "Visibility",
|
|
271
|
+
"always": "Always show",
|
|
272
|
+
"only_if": "Only if…",
|
|
273
|
+
"help": "A condition hides the block when its rule is false.",
|
|
274
|
+
"pick_path": "Choose a variable",
|
|
275
|
+
"pick_path_help": "The rule is created once a variable is chosen. Type a path to create one."
|
|
276
|
+
},
|
|
277
|
+
"test_data": {
|
|
278
|
+
"label": "Test data",
|
|
279
|
+
"invalid": "Invalid JSON: fix it to preview with data and run the checks.",
|
|
280
|
+
"valid_unsaved": "Valid JSON · not saved yet",
|
|
281
|
+
"valid_saved": "Valid JSON · saved with the template",
|
|
282
|
+
"fix_json": "Fix the JSON to run the checks.",
|
|
283
|
+
"saved": "Test data saved",
|
|
284
|
+
"save": "Save",
|
|
285
|
+
"reset": "Reset",
|
|
286
|
+
"checks": "Checks",
|
|
287
|
+
"policy_link": "Change in Settings"
|
|
288
|
+
},
|
|
289
|
+
"checks": {
|
|
290
|
+
"undeclared": "{path} isn’t declared: calls that don’t pass it send the e-mail with a blank there, or fail when sends with missing variables are blocked.",
|
|
291
|
+
"required_missing": "{path} is required but missing from the test data.",
|
|
292
|
+
"required_covered": "{count} required variable covered | {count} required variables covered",
|
|
293
|
+
"missing": "{path} is used but missing from the test data.",
|
|
294
|
+
"missing_undeclared": "{path} is used but missing from the data and not declared.",
|
|
295
|
+
"condition_true": "Condition {path} evaluates to true: the first branch shows.",
|
|
296
|
+
"condition_false": "Condition {path} evaluates to false: the else branch shows.",
|
|
297
|
+
"empty_subject": "{locale}: the subject is empty.",
|
|
298
|
+
"no_blocks": "{locale}: the e-mail has no content block.",
|
|
299
|
+
"no_footer": "{locale}: the e-mail has no footer.",
|
|
300
|
+
"many_footers": "{locale}: the e-mail has more than one footer.",
|
|
301
|
+
"footer_not_last": "{locale}: the footer is not the last block.",
|
|
302
|
+
"missing_locale": "No {locale} version: those recipients get {fallback}.",
|
|
303
|
+
"invalid_token": "{locale}: {token} is not a valid variable and goes out as typed.",
|
|
304
|
+
"token_not_text": "{path} is an object or a list in the test data: as text it prints raw data.",
|
|
305
|
+
"marketing_no_unsubscribe": "{locale}: a marketing e-mail needs an unsubscribe link in its footer.",
|
|
306
|
+
"system_url_missing": "{path} is required for a marketing e-mail: every send must pass it, and the test data has none."
|
|
307
|
+
},
|
|
308
|
+
"template_tab": {
|
|
309
|
+
"name": "Name",
|
|
310
|
+
"slug": "Slug",
|
|
311
|
+
"locked": "locked",
|
|
312
|
+
"slug_help": "Code sends this template by its slug, so it can’t change.",
|
|
313
|
+
"category": "Category",
|
|
314
|
+
"no_category": "No category",
|
|
315
|
+
"saved": "Template updated",
|
|
316
|
+
"envelope": "Envelope · {locale}",
|
|
317
|
+
"subject_help_send": "With the current setting, a missing variable goes out blank.",
|
|
318
|
+
"subject_help_block": "With the current setting, a send missing a variable fails."
|
|
319
|
+
},
|
|
320
|
+
"lifecycle": {
|
|
321
|
+
"title": "Lifecycle",
|
|
322
|
+
"status": "Status",
|
|
323
|
+
"version": "Version",
|
|
324
|
+
"sends": "Sends 30 d",
|
|
325
|
+
"unpublish": "Unpublish",
|
|
326
|
+
"archive": "Archive…",
|
|
327
|
+
"restore": "Restore",
|
|
328
|
+
"unpublish_title": "Unpublish this template?",
|
|
329
|
+
"archive_title": "Archive this template?",
|
|
330
|
+
"refuse_warning": "Unpublished or archived templates refuse sends: code calling {slug} would get an error.",
|
|
331
|
+
"unpublish_done": "Template unpublished",
|
|
332
|
+
"archive_done": "Template archived",
|
|
333
|
+
"restore_done": "Template restored"
|
|
334
|
+
},
|
|
335
|
+
"publish_review": {
|
|
336
|
+
"title": "Publish {count} change to {name}? | Publish {count} changes to {name}?",
|
|
337
|
+
"title_first": "Publish {name}?",
|
|
338
|
+
"description": "Every send of {slug} uses v{next} right after. v{version} stays in the history.",
|
|
339
|
+
"description_first": "Code calling {slug} can send it as soon as v{next} is published.",
|
|
340
|
+
"done": "v{version} published",
|
|
341
|
+
"no_changes": "No content change since v{version}.",
|
|
342
|
+
"checks": "{count} check to look at | {count} checks to look at",
|
|
343
|
+
"test_first": "Test first",
|
|
344
|
+
"keep_editing": "Keep editing",
|
|
345
|
+
"confirm": "Publish v{version}",
|
|
346
|
+
"republish": "Republish v{version}",
|
|
347
|
+
"title_republish": "Put {name} back online with v{version}?",
|
|
348
|
+
"description_republish": "Sends of {slug} work again right after, with v{version}. No new version is created.",
|
|
349
|
+
"blockers": "{count} problem blocks the publish | {count} problems block the publish"
|
|
350
|
+
},
|
|
351
|
+
"discard_dialog": {
|
|
352
|
+
"title": "Discard the draft?",
|
|
353
|
+
"description": "Your {count} change is lost and the editor goes back to live v{version}. | Your {count} changes are lost and the editor goes back to live v{version}.",
|
|
354
|
+
"confirm": "Discard {count} change | Discard {count} changes",
|
|
355
|
+
"cancel": "Keep the draft"
|
|
356
|
+
},
|
|
357
|
+
"compare": {
|
|
358
|
+
"title": "Compare with live",
|
|
359
|
+
"description": "What customers receive today (v{version}) next to your draft.",
|
|
360
|
+
"live": "Live",
|
|
361
|
+
"draft": "Draft",
|
|
362
|
+
"error": "The previews couldn’t be rendered.",
|
|
363
|
+
"fallback": "{locale} not published: customers get {fallback}"
|
|
364
|
+
},
|
|
365
|
+
"changes": {
|
|
366
|
+
"locale_added": "Locale added",
|
|
367
|
+
"locale_removed": "Locale removed",
|
|
368
|
+
"subject": "Subject changed",
|
|
369
|
+
"preheader": "Preheader changed",
|
|
370
|
+
"block_added": "{block} added",
|
|
371
|
+
"block_removed": "{block} removed",
|
|
372
|
+
"block_changed": "{block} changed",
|
|
373
|
+
"blocks_reordered": "Blocks reordered",
|
|
374
|
+
"variable_added": "Variable {variable} declared",
|
|
375
|
+
"variable_removed": "Variable {variable} no longer declared",
|
|
376
|
+
"variable_changed": "Variable {variable} changed (type or required)"
|
|
377
|
+
},
|
|
378
|
+
"fields": {
|
|
379
|
+
"required": "Required: the previous value is kept until you fill this in."
|
|
380
|
+
},
|
|
381
|
+
"undone_in_locale": "Undone in {locale}",
|
|
382
|
+
"redone_in_locale": "Redone in {locale}",
|
|
383
|
+
"block_removed": "{block} deleted | {block} and {count} inner block deleted | {block} and {count} inner blocks deleted",
|
|
384
|
+
"conflict": {
|
|
385
|
+
"title": "Changed elsewhere",
|
|
386
|
+
"reload": "Reload",
|
|
387
|
+
"overwrite": "Overwrite"
|
|
388
|
+
},
|
|
389
|
+
"token_invalid": "Not a valid variable: letters, digits, dots, _ and [] only.",
|
|
390
|
+
"footer": {
|
|
391
|
+
"empty": "Empty footer: add a legal line (who sends this e-mail and why).",
|
|
392
|
+
"url_at_send": "URL provided at send time ({path})",
|
|
393
|
+
"url_at_send_hint": "Link URLs are provided at send time"
|
|
178
394
|
}
|
|
179
395
|
},
|
|
180
396
|
"errors": {
|
|
181
|
-
"bad_webhook_secret": "Invalid webhook secret.",
|
|
182
397
|
"duplicate_slug": "This slug is already taken.",
|
|
183
398
|
"invalid_body": "The request body is invalid.",
|
|
184
399
|
"invalid_content": "The template content is invalid.",
|
|
@@ -187,11 +402,30 @@
|
|
|
187
402
|
"missing_variables": "Required variables are missing from the send.",
|
|
188
403
|
"no_recipient": "The send has no recipient.",
|
|
189
404
|
"send_not_found": "This send does not exist.",
|
|
190
|
-
"slug_immutable": "A template
|
|
405
|
+
"slug_immutable": "A template’s slug cannot be changed once it is created.",
|
|
191
406
|
"template_not_found": "This template does not exist.",
|
|
192
407
|
"template_not_live": "This template is not live.",
|
|
193
408
|
"unknown_metric": "Unknown metric.",
|
|
194
|
-
"version_not_found": "This template version does not exist."
|
|
409
|
+
"version_not_found": "This template version does not exist.",
|
|
410
|
+
"invalid_transition": "This template cannot go to that status from its current one.",
|
|
411
|
+
"no_replay_after_spam": "The recipient reported this e-mail as spam: it is not sent again.",
|
|
412
|
+
"nothing_to_publish": "This template has no content to publish yet.",
|
|
413
|
+
"replay_needs_new_address": "This address bounced. Send to a corrected address instead.",
|
|
414
|
+
"starter_not_found": "This starter template does not exist.",
|
|
415
|
+
"template_in_use": "Only an archived template that was never sent can be deleted. Archive it instead.",
|
|
416
|
+
"invalid_template": "The template name or slug is invalid.",
|
|
417
|
+
"unknown_category": "This category does not exist.",
|
|
418
|
+
"draft_conflict": "This draft was changed elsewhere since you opened it.",
|
|
419
|
+
"nothing_to_discard": "Nothing to discard: this template was never published.",
|
|
420
|
+
"empty_subject": "A language has no subject.",
|
|
421
|
+
"invalid_recipient": "One of the addresses is invalid.",
|
|
422
|
+
"suppressed": {
|
|
423
|
+
"hard_bounce": "Not sent: this address bounced for good and is on the suppression list.",
|
|
424
|
+
"complaint": "Not sent: this recipient reported an earlier e-mail as spam.",
|
|
425
|
+
"unsubscribe": "Not sent: this recipient unsubscribed.",
|
|
426
|
+
"manual": "Not sent: this address was put on the suppression list by hand."
|
|
427
|
+
},
|
|
428
|
+
"template_was_sent": "This template was sent: the send log still shows its e-mails, so it can’t be deleted. It stays archived."
|
|
195
429
|
},
|
|
196
430
|
"funnel": {
|
|
197
431
|
"clicked": "Clicked",
|
|
@@ -204,69 +438,111 @@
|
|
|
204
438
|
"bounces": "Bounces",
|
|
205
439
|
"click_rate": "Click rate",
|
|
206
440
|
"deliverability": "Deliverability",
|
|
207
|
-
"domain_sends": "
|
|
208
|
-
"domains": "
|
|
209
|
-
"latency": "Median latency",
|
|
441
|
+
"domain_sends": "Domains with 5 or more deliveries",
|
|
442
|
+
"domains": "Open rate by domain",
|
|
210
443
|
"open_rate": "Open rate",
|
|
211
444
|
"previous": "Previous period",
|
|
212
|
-
"
|
|
213
|
-
"ranking": "Template ranking",
|
|
445
|
+
"ranking": "Best opened templates",
|
|
214
446
|
"sends": "Sends",
|
|
215
447
|
"unsubscribes": "Unsubscribes",
|
|
216
|
-
"volume": "Send volume"
|
|
448
|
+
"volume": "Send volume",
|
|
449
|
+
"not_tracked": "Not tracked",
|
|
450
|
+
"delivered_count": "{count} delivered",
|
|
451
|
+
"template_volume": "{slug} · {count} delivered",
|
|
452
|
+
"ranking_empty": "Not enough delivered e-mails to rank yet"
|
|
217
453
|
},
|
|
218
454
|
"notifications": {
|
|
219
|
-
"
|
|
220
|
-
"
|
|
455
|
+
"problems_title": "{count} delivery problem on {slug} in the last hour | {count} delivery problems on {slug} in the last hour",
|
|
456
|
+
"problems_description": "{rate}% of its sends bounced, failed or were reported as spam."
|
|
221
457
|
},
|
|
222
458
|
"overview": {
|
|
223
|
-
"
|
|
224
|
-
"
|
|
225
|
-
"
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
459
|
+
"description": "Delivery and engagement for every e-mail your workspace sends. Test sends are left out of these figures.",
|
|
460
|
+
"title": "Overview",
|
|
461
|
+
"groups": {
|
|
462
|
+
"reach": {
|
|
463
|
+
"title": "Reach",
|
|
464
|
+
"description": "Figures for the selected period"
|
|
465
|
+
},
|
|
466
|
+
"engagement": {
|
|
467
|
+
"title": "Engagement",
|
|
468
|
+
"description": "Of delivered e-mails"
|
|
469
|
+
},
|
|
470
|
+
"health": {
|
|
471
|
+
"title": "List health",
|
|
472
|
+
"description": "Lower is better"
|
|
473
|
+
}
|
|
474
|
+
}
|
|
232
475
|
},
|
|
233
476
|
"sends": {
|
|
234
477
|
"cols": {
|
|
235
478
|
"createdAt": "Sent at",
|
|
236
479
|
"error": "Error",
|
|
237
480
|
"isTest": "Test",
|
|
238
|
-
"latency": "Latency",
|
|
239
481
|
"latencyMs": "Latency",
|
|
240
482
|
"locale": "Locale",
|
|
241
483
|
"recipient": "Recipient",
|
|
242
|
-
"recipientEmail": "Recipient address",
|
|
243
484
|
"recipientName": "Recipient name",
|
|
244
485
|
"source": "Source",
|
|
245
486
|
"status": "Status",
|
|
246
|
-
"template": "Template",
|
|
247
487
|
"templateSlug": "Template",
|
|
248
|
-
"
|
|
249
|
-
"
|
|
488
|
+
"stage": "Stage",
|
|
489
|
+
"requestedLocale": "Requested locale",
|
|
490
|
+
"templateVersion": "Version",
|
|
491
|
+
"id": "Send id"
|
|
250
492
|
},
|
|
251
493
|
"confirm": {
|
|
252
|
-
"replay_description": "The same
|
|
253
|
-
"replay_title": "
|
|
494
|
+
"replay_description": "The same version and data go to {recipientEmail}. It is a real send.",
|
|
495
|
+
"replay_title": "Send this e-mail again?",
|
|
496
|
+
"replay_confirm": "Send again",
|
|
497
|
+
"replay_description_test": "The same version and data go to {recipientEmail}. It stays a test send."
|
|
254
498
|
},
|
|
255
|
-
"description": "Every
|
|
499
|
+
"description": "Every e-mail your workspace sent: to whom, with which data, and what the provider reported back.",
|
|
256
500
|
"drawer": {
|
|
257
|
-
"invalid_address": "Invalid address",
|
|
258
501
|
"latency": "API latency",
|
|
259
502
|
"locale": "Locale",
|
|
260
|
-
"payload": "
|
|
261
|
-
"replay":
|
|
262
|
-
|
|
263
|
-
|
|
503
|
+
"payload": "Data sent",
|
|
504
|
+
"replay": {
|
|
505
|
+
"to": "To",
|
|
506
|
+
"template": "Template",
|
|
507
|
+
"last_try": "Last try",
|
|
508
|
+
"cancel": "Cancel",
|
|
509
|
+
"draft_warning": "Draft test: today’s draft goes out, which may differ from the first send."
|
|
510
|
+
},
|
|
264
511
|
"template": "Template",
|
|
265
512
|
"timeline": "Timeline",
|
|
266
|
-
"
|
|
267
|
-
"
|
|
513
|
+
"eyebrow": "Send · {id}",
|
|
514
|
+
"copy_link": "Copy link",
|
|
515
|
+
"link_copied": "Link copied",
|
|
516
|
+
"address_copied": "Address copied",
|
|
517
|
+
"json_copied": "Data copied",
|
|
518
|
+
"test": "Test",
|
|
519
|
+
"version": "v{version}",
|
|
520
|
+
"draft_version": "draft",
|
|
521
|
+
"fallback_used": "{locale} used: no version in this locale",
|
|
522
|
+
"as_requested": "As requested",
|
|
523
|
+
"slow_latency": "The provider was slow to answer",
|
|
524
|
+
"latency_hint": "API call to the provider",
|
|
525
|
+
"pending": "Waiting for the provider",
|
|
526
|
+
"origin": "Origin",
|
|
527
|
+
"source": "source",
|
|
528
|
+
"copy_json": "Copy JSON",
|
|
529
|
+
"actions": {
|
|
530
|
+
"rendering": "View the e-mail",
|
|
531
|
+
"fix_address": "Send to another address",
|
|
532
|
+
"send_again": "Send again…",
|
|
533
|
+
"copy_address": "Copy the address"
|
|
534
|
+
},
|
|
535
|
+
"position": "Send {index} of {total} shown",
|
|
536
|
+
"replayed_by": "Sent again on {date}",
|
|
537
|
+
"replay_of": "This send repeats an earlier one",
|
|
538
|
+
"see_send": "See the send",
|
|
539
|
+
"send_unavailable": "This send could not be opened",
|
|
540
|
+
"not_handed": "Not handed to the provider"
|
|
541
|
+
},
|
|
542
|
+
"empty": {
|
|
543
|
+
"title": "No e-mail sent yet",
|
|
544
|
+
"description": "Sends appear here the moment your code or an automation calls a live template."
|
|
268
545
|
},
|
|
269
|
-
"empty": "No send matches this filter.",
|
|
270
546
|
"status": {
|
|
271
547
|
"bounced": "Bounced",
|
|
272
548
|
"clicked": "Clicked",
|
|
@@ -276,10 +552,9 @@
|
|
|
276
552
|
"queued": "Queued",
|
|
277
553
|
"sent": "Sent",
|
|
278
554
|
"spam": "Spam",
|
|
279
|
-
"unsubscribed": "Unsubscribed"
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
"problems": "Problems"
|
|
555
|
+
"unsubscribed": "Unsubscribed",
|
|
556
|
+
"resolved": "Resolved",
|
|
557
|
+
"suppressed": "Suppressed"
|
|
283
558
|
},
|
|
284
559
|
"timeline": {
|
|
285
560
|
"bounced": "Permanent bounce",
|
|
@@ -290,9 +565,160 @@
|
|
|
290
565
|
"queued": "Queued",
|
|
291
566
|
"sent": "Handed to the provider",
|
|
292
567
|
"spam": "Marked as spam",
|
|
293
|
-
"unsubscribed": "Unsubscribed"
|
|
568
|
+
"unsubscribed": "Unsubscribed",
|
|
569
|
+
"sent_to": "Handed to {provider}",
|
|
570
|
+
"soft_bounce": "Temporary bounce",
|
|
571
|
+
"suppressed": "Not sent: the address is suppressed"
|
|
572
|
+
},
|
|
573
|
+
"title": "Sends",
|
|
574
|
+
"caption": "Send log",
|
|
575
|
+
"search": "Recipient, slug or send id",
|
|
576
|
+
"test_badge": "TEST",
|
|
577
|
+
"views": {
|
|
578
|
+
"all": "All",
|
|
579
|
+
"problem": "Problems",
|
|
580
|
+
"in_progress": "In progress",
|
|
581
|
+
"delivered": "Delivered, not opened",
|
|
582
|
+
"engaged": "Opened or clicked",
|
|
583
|
+
"unsubscribed": "Unsubscribed",
|
|
584
|
+
"resolved": "Resolved",
|
|
585
|
+
"suppressed": "Suppressed"
|
|
586
|
+
},
|
|
587
|
+
"filters": {
|
|
588
|
+
"tests": "Test sends",
|
|
589
|
+
"template": "Template"
|
|
590
|
+
},
|
|
591
|
+
"footer": {
|
|
592
|
+
"count": "{count} send | {count} sends"
|
|
593
|
+
},
|
|
594
|
+
"actions": {
|
|
595
|
+
"details": "Details",
|
|
596
|
+
"rendering": "View the e-mail",
|
|
597
|
+
"send_again": "Send again…",
|
|
598
|
+
"sent_again": "Sent again",
|
|
599
|
+
"suppressed_address": "See on the suppression list"
|
|
600
|
+
},
|
|
601
|
+
"stats": {
|
|
602
|
+
"label": "Send figures",
|
|
603
|
+
"sends": "Sends",
|
|
604
|
+
"delivered": "Delivered",
|
|
605
|
+
"problems": "Problems",
|
|
606
|
+
"queued": "Queued",
|
|
607
|
+
"latency": "Median latency",
|
|
608
|
+
"tests_excluded": "+ {count} test, not counted | + {count} tests, not counted",
|
|
609
|
+
"no_tests": "Test sends are never counted",
|
|
610
|
+
"delivered_of": "{delivered} of {sends}",
|
|
611
|
+
"breakdown": {
|
|
612
|
+
"bounced": "{count} bounce | {count} bounces",
|
|
613
|
+
"failed": "{count} failed | {count} failed",
|
|
614
|
+
"spam": "{count} spam | {count} spam"
|
|
615
|
+
},
|
|
616
|
+
"no_problems": "No bounce, failure or spam",
|
|
617
|
+
"oldest_waiting": "Oldest queued {time}",
|
|
618
|
+
"nothing_waiting": "Nothing waiting",
|
|
619
|
+
"latency_detail": "API call to {provider}",
|
|
620
|
+
"latency_detail_generic": "API call to the provider",
|
|
621
|
+
"joined": "{left} · {right}",
|
|
622
|
+
"delta_up": "▲ {delta}",
|
|
623
|
+
"delta_down": "▼ {delta}",
|
|
624
|
+
"rate": "{rate}",
|
|
625
|
+
"latency_ms": "{value} ms",
|
|
626
|
+
"latency_s": "{value} s",
|
|
627
|
+
"not_tracked": "Not tracked by {provider}",
|
|
628
|
+
"period_hint": "The period applies to the figures above; the log lists every kept send."
|
|
629
|
+
},
|
|
630
|
+
"banner": {
|
|
631
|
+
"the_provider": "The provider",
|
|
632
|
+
"unreachable_title": "{provider} isn’t answering",
|
|
633
|
+
"failures_title": "Sends to {provider} are failing",
|
|
634
|
+
"unreachable_description": "No e-mail can leave until it answers again. Check the provider settings.",
|
|
635
|
+
"missing_title": "No provider is connected",
|
|
636
|
+
"missing_description": "No e-mail can leave until the workspace’s e-mail interface has a provider.",
|
|
637
|
+
"failures_description": "{count} send failed in the last hour. It is listed under Problems; you can send it again once {provider} is back. | {count} sends failed in the last hour. They’re listed under Problems; you can send them again once {provider} is back.",
|
|
638
|
+
"settings": "Provider settings",
|
|
639
|
+
"send_again": "Send the failures again…",
|
|
640
|
+
"replayed": "The failures were sent again",
|
|
641
|
+
"confirm": {
|
|
642
|
+
"title": "Send {count} e-mail again? | Send {count} e-mails again?",
|
|
643
|
+
"description": "The same version and data go to the same recipients. These are real sends; bounces and spam reports are never part of them. | The same version and data go to the same recipients. These are real sends; bounces and spam reports are never part of them.",
|
|
644
|
+
"confirm": "Send {count} again | Send {count} again",
|
|
645
|
+
"cancel": "Cancel",
|
|
646
|
+
"description_capped": "The first {count} of the {total} failures go again, with the same version and data; the rest stay under Problems. These are real sends; bounces and spam reports are never part of them.",
|
|
647
|
+
"suppressed": "Left out: address on the suppression list"
|
|
648
|
+
},
|
|
649
|
+
"replay_partial": "Some failures could not be sent again. They’re still listed under Problems.",
|
|
650
|
+
"replay_skipped": "Failures to addresses on the suppression list were left out. They’re still listed under Problems."
|
|
651
|
+
},
|
|
652
|
+
"empty_log": {
|
|
653
|
+
"title": "No e-mail sent yet",
|
|
654
|
+
"description": "Sends appear here the moment your code or an automation calls a live template.",
|
|
655
|
+
"test_instead": "Send a test instead"
|
|
656
|
+
},
|
|
657
|
+
"problems": {
|
|
658
|
+
"address_missing": {
|
|
659
|
+
"title": "This address doesn’t exist",
|
|
660
|
+
"description": "The server of {domain} refused it. Future sends to it will bounce too."
|
|
661
|
+
},
|
|
662
|
+
"mailbox_full": {
|
|
663
|
+
"title": "The mailbox is full",
|
|
664
|
+
"description": "{domain} knows the address but has no room left for it. A later send may get through."
|
|
665
|
+
},
|
|
666
|
+
"rejected_spam": {
|
|
667
|
+
"title": "Rejected as spam",
|
|
668
|
+
"description": "The server of {domain} refused it as unwanted mail. Check the content and the sender domain’s setup."
|
|
669
|
+
},
|
|
670
|
+
"spam_report": {
|
|
671
|
+
"title": "Marked as spam",
|
|
672
|
+
"description": "The recipient flagged this e-mail. Their address is on the suppression list: nothing more is sent to it."
|
|
673
|
+
},
|
|
674
|
+
"provider_timeout": {
|
|
675
|
+
"title": "{provider} didn’t answer in time",
|
|
676
|
+
"description": "Nothing was delivered. Sending again is safe.",
|
|
677
|
+
"description_no_advice": "Nothing was delivered."
|
|
678
|
+
},
|
|
679
|
+
"provider_unreachable": {
|
|
680
|
+
"title": "{provider} couldn’t be reached",
|
|
681
|
+
"description": "The connection was refused or the server wasn’t found: nothing was delivered. Sending again is safe once the provider’s address is fixed.",
|
|
682
|
+
"description_no_advice": "The connection was refused or the server wasn’t found: nothing was delivered."
|
|
683
|
+
},
|
|
684
|
+
"rejected": {
|
|
685
|
+
"title": "The recipient’s server refused it",
|
|
686
|
+
"description": "{domain} sent it back: {error}",
|
|
687
|
+
"description_no_reason": "{domain} sent it back without giving a reason."
|
|
688
|
+
},
|
|
689
|
+
"provider_error": {
|
|
690
|
+
"title": "{provider} couldn’t send it",
|
|
691
|
+
"description": "Nothing was delivered: {error}. Sending again is safe once the cause is fixed.",
|
|
692
|
+
"description_no_reason": "Nothing was delivered. Sending again is safe once the cause is fixed.",
|
|
693
|
+
"description_no_advice": "Nothing was delivered: {error}.",
|
|
694
|
+
"description_no_reason_no_advice": "Nothing was delivered."
|
|
695
|
+
},
|
|
696
|
+
"unsubscribed": {
|
|
697
|
+
"title": "The recipient unsubscribed",
|
|
698
|
+
"description": "Their address is on the suppression list: nothing more is sent to it."
|
|
699
|
+
}
|
|
700
|
+
},
|
|
701
|
+
"fix_address": {
|
|
702
|
+
"title": "Send to another address",
|
|
703
|
+
"description": "{email} doesn’t receive e-mail. The same version and data go to the address you enter; it is a real send.",
|
|
704
|
+
"label": "Corrected address",
|
|
705
|
+
"previous": "Bounced address",
|
|
706
|
+
"template": "Template",
|
|
707
|
+
"version": "v{version}",
|
|
708
|
+
"draft_version": "draft",
|
|
709
|
+
"cancel": "Cancel",
|
|
710
|
+
"submit": "Send to this address",
|
|
711
|
+
"sent": "Sent to {email}",
|
|
712
|
+
"errors": {
|
|
713
|
+
"required": "Enter the corrected address.",
|
|
714
|
+
"invalid": "This isn’t an e-mail address.",
|
|
715
|
+
"same": "This is the address that bounced: enter a different one."
|
|
716
|
+
},
|
|
717
|
+
"description_test": "{email} doesn’t receive e-mail. The same version and data go to the address you enter; it stays a test send.",
|
|
718
|
+
"app_reminder": "Also update the address in your application, or the next e-mail will bounce again."
|
|
294
719
|
},
|
|
295
|
-
"
|
|
720
|
+
"locale_fallback": "{requested} asked",
|
|
721
|
+
"open_in_log": "View in the send log"
|
|
296
722
|
},
|
|
297
723
|
"settings": {
|
|
298
724
|
"categories": {
|
|
@@ -300,20 +726,158 @@
|
|
|
300
726
|
"empty": "No category. Templates can stay uncategorised.",
|
|
301
727
|
"hint": "Deleting a category leaves the templates that used it uncategorised. The icon is a Phosphor name, like i-ph-package.",
|
|
302
728
|
"label": "Category name",
|
|
303
|
-
"remove": "Remove"
|
|
729
|
+
"remove": "Remove",
|
|
730
|
+
"usage": "no template | {count} template | {count} templates",
|
|
731
|
+
"drag": "Drag, or use the arrow keys, to reorder",
|
|
732
|
+
"change_icon": "Change the icon",
|
|
733
|
+
"pick_icon": "Pick an icon",
|
|
734
|
+
"remove_used_title": "Remove “{label}”?",
|
|
735
|
+
"remove_used_description": "{count} template uses it. | {count} templates use it.",
|
|
736
|
+
"move_to": "Move it to | Move them to",
|
|
737
|
+
"move_none": "No category",
|
|
738
|
+
"reassigned": "{count} template changed category. | {count} templates changed category.",
|
|
739
|
+
"label_required": "Give the category a name.",
|
|
740
|
+
"label_duplicate": "This category already exists.",
|
|
741
|
+
"marketing_required": "The marketing category cannot be removed: campaign rules depend on it.",
|
|
742
|
+
"icons": {
|
|
743
|
+
"package": "Package",
|
|
744
|
+
"lock": "Lock",
|
|
745
|
+
"user_circle": "User",
|
|
746
|
+
"key": "Key",
|
|
747
|
+
"file_text": "Document",
|
|
748
|
+
"newspaper": "Newspaper",
|
|
749
|
+
"sparkle": "Sparkle",
|
|
750
|
+
"textbox": "Form field",
|
|
751
|
+
"truck": "Truck",
|
|
752
|
+
"shopping_cart": "Shopping cart",
|
|
753
|
+
"bell": "Bell",
|
|
754
|
+
"megaphone": "Megaphone",
|
|
755
|
+
"gift": "Gift",
|
|
756
|
+
"users": "People",
|
|
757
|
+
"calendar": "Calendar",
|
|
758
|
+
"chat_circle": "Chat bubble"
|
|
759
|
+
}
|
|
304
760
|
},
|
|
305
|
-
"description": "
|
|
761
|
+
"description": "Who e-mails come from, how sends are guarded, how long the log is kept and how templates are grouped.",
|
|
306
762
|
"fields": {
|
|
307
763
|
"blockOnMissingVariables": "Block the send when a variable is missing",
|
|
308
|
-
"categories":
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
"
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
764
|
+
"categories": {
|
|
765
|
+
"label": "Categories",
|
|
766
|
+
"description": "Drag to reorder the gallery."
|
|
767
|
+
},
|
|
768
|
+
"fallbackLocale": {
|
|
769
|
+
"label": "Fallback locale",
|
|
770
|
+
"description": "Sent when a template has no version in the recipient’s language."
|
|
771
|
+
},
|
|
772
|
+
"logRetentionDays": {
|
|
773
|
+
"label": "Keep sends for",
|
|
774
|
+
"description": "Between 1 day and 10 years. Deleted sends can’t be sent again."
|
|
775
|
+
},
|
|
776
|
+
"replyTo": {
|
|
777
|
+
"label": "Reply-to address",
|
|
778
|
+
"description": "Where answers go. Leave empty to use the sender."
|
|
779
|
+
},
|
|
780
|
+
"senderEmail": {
|
|
781
|
+
"label": "Sender address",
|
|
782
|
+
"description": "Must belong to a domain verified with your provider. Leave empty to use the provider’s default address."
|
|
783
|
+
},
|
|
784
|
+
"senderName": {
|
|
785
|
+
"label": "Sender name",
|
|
786
|
+
"description": "Your brand, not a person: it’s used for every template."
|
|
787
|
+
},
|
|
788
|
+
"webhookSecret": {
|
|
789
|
+
"label": "Webhook secret",
|
|
790
|
+
"description": "Sent by the provider in the x-mailing-webhook-secret header, 32 characters or more. Events without it are refused.",
|
|
791
|
+
"too_short": "At least 32 characters"
|
|
792
|
+
},
|
|
793
|
+
"missingVariables": {
|
|
794
|
+
"label": "Missing variables",
|
|
795
|
+
"description": "When code calls a template without a required variable.",
|
|
796
|
+
"refuse": "Refuse the send",
|
|
797
|
+
"refuse_hint": "The call fails, nothing goes out",
|
|
798
|
+
"send": "Send anyway",
|
|
799
|
+
"send_hint": "Blanks where the value is missing"
|
|
800
|
+
},
|
|
801
|
+
"provider": {
|
|
802
|
+
"label": "Provider",
|
|
803
|
+
"description": "Set by the e-mail interface of the workspace."
|
|
804
|
+
},
|
|
805
|
+
"webhookUrl": {
|
|
806
|
+
"label": "Webhook URL",
|
|
807
|
+
"description": "Your provider, or the relay that translates its events, posts them here with the secret below. The module README describes the format."
|
|
808
|
+
},
|
|
809
|
+
"webhookStatus": {
|
|
810
|
+
"label": "Webhook status",
|
|
811
|
+
"description": "The last event received and the last call refused. The test event goes to the URL above, with the secret, from the server."
|
|
812
|
+
}
|
|
813
|
+
},
|
|
814
|
+
"title": "Settings",
|
|
815
|
+
"saved": "Settings saved",
|
|
816
|
+
"sections": {
|
|
817
|
+
"sender": {
|
|
818
|
+
"title": "Sender",
|
|
819
|
+
"description": "What recipients see in their inbox. A template can’t override it."
|
|
820
|
+
},
|
|
821
|
+
"guards": {
|
|
822
|
+
"title": "Delivery guards",
|
|
823
|
+
"description": "What happens when a send isn’t quite right."
|
|
824
|
+
},
|
|
825
|
+
"provider": {
|
|
826
|
+
"title": "Provider & webhook",
|
|
827
|
+
"description": "The provider carries the mail. Its webhook tells us about deliveries, opens, clicks and bounces."
|
|
828
|
+
},
|
|
829
|
+
"retention": {
|
|
830
|
+
"title": "Log retention",
|
|
831
|
+
"description": "A daily job deletes sends and their events once they’re older than this. Templates are never deleted."
|
|
832
|
+
},
|
|
833
|
+
"categories": {
|
|
834
|
+
"title": "Template categories",
|
|
835
|
+
"description": "Group the gallery. Removing a category in use asks where its templates go."
|
|
836
|
+
}
|
|
837
|
+
},
|
|
838
|
+
"locale": {
|
|
839
|
+
"workspace": "Workspace locales: {locales}",
|
|
840
|
+
"placeholder": "Pick a locale",
|
|
841
|
+
"not_in_workspace": "Pick one of the workspace locales."
|
|
842
|
+
},
|
|
843
|
+
"retention": {
|
|
844
|
+
"label": "Keep sends for",
|
|
845
|
+
"days": "{count} day | {count} days",
|
|
846
|
+
"one_year": "1 year",
|
|
847
|
+
"custom": "Custom",
|
|
848
|
+
"days_unit": "days",
|
|
849
|
+
"tonight": "tonight",
|
|
850
|
+
"preview": "Next run {when} at {time} · {count} send older than {duration} will be deleted. | Next run {when} at {time} · {count} sends older than {duration} will be deleted.",
|
|
851
|
+
"preview_none": "Next run {when} at {time} · no send is older than {duration} yet.",
|
|
852
|
+
"confirm_title": "Delete old sends?",
|
|
853
|
+
"confirm_description": "{count} send older than {duration} will be deleted {when} at {time}. It can no longer be sent again. | {count} sends older than {duration} will be deleted {when} at {time}. They can no longer be sent again.",
|
|
854
|
+
"confirm_action": "Save and delete"
|
|
855
|
+
},
|
|
856
|
+
"sender_name_ignored": "The sender name is only used with a sender address.",
|
|
857
|
+
"webhook_status": {
|
|
858
|
+
"label": "Webhook status",
|
|
859
|
+
"unavailable": "The webhook status could not be read.",
|
|
860
|
+
"never_received": "No event received yet",
|
|
861
|
+
"received": "Last event: {type}, from {provider}",
|
|
862
|
+
"received_unmatched": "Last event: {type}, from {provider}, matching no send",
|
|
863
|
+
"received_test": "Last event: the test event",
|
|
864
|
+
"refused": "Last refused call, from {provider}: {reason}",
|
|
865
|
+
"refusals": {
|
|
866
|
+
"missing_secret": "no x-mailing-webhook-secret header",
|
|
867
|
+
"bad_secret": "wrong secret (it changes when rotated)",
|
|
868
|
+
"invalid_event": "the body is not a mailing event"
|
|
869
|
+
},
|
|
870
|
+
"send_test": "Send a test event",
|
|
871
|
+
"send_test_hint": "It touches no send.",
|
|
872
|
+
"test": {
|
|
873
|
+
"received": "Test event received in {duration} ms",
|
|
874
|
+
"refused": "The webhook refused the test event",
|
|
875
|
+
"http_error": "The webhook URL answered {status}",
|
|
876
|
+
"proxy_hint": "A proxy in front of the API refuses provider calls: set the DMS apiBaseUrl to the API’s public address.",
|
|
877
|
+
"unreachable": "Could not reach {url}",
|
|
878
|
+
"unreachable_hint": "{error}. The server cannot reach the address it shows: check the DMS apiBaseUrl."
|
|
879
|
+
}
|
|
880
|
+
}
|
|
317
881
|
},
|
|
318
882
|
"templates": {
|
|
319
883
|
"actions": {
|
|
@@ -323,20 +887,25 @@
|
|
|
323
887
|
"details": "Details",
|
|
324
888
|
"duplicate": "Duplicate",
|
|
325
889
|
"edit": "Edit",
|
|
326
|
-
"new": "New template",
|
|
327
890
|
"open_editor": "Open the editor",
|
|
328
|
-
"publish": "Publish",
|
|
329
|
-
"published": "Template published",
|
|
330
|
-
"send": "Send",
|
|
331
891
|
"test_send": "Test send",
|
|
332
|
-
"
|
|
333
|
-
"
|
|
892
|
+
"real_send": "Send to real recipients",
|
|
893
|
+
"restore": "Restore",
|
|
894
|
+
"restored": "Template restored"
|
|
334
895
|
},
|
|
335
896
|
"card": {
|
|
336
897
|
"add_locale": "Add the {locale} version — missing",
|
|
337
898
|
"edit_locale": "Edit the {locale} version",
|
|
338
899
|
"open": "open",
|
|
339
|
-
"sends": "sends"
|
|
900
|
+
"sends": "send | sends",
|
|
901
|
+
"test": "Test",
|
|
902
|
+
"draft_changes": "Draft changes",
|
|
903
|
+
"edited": "Edited {date}",
|
|
904
|
+
"edited_by": "Edited {date} by {name}",
|
|
905
|
+
"no_send_since": "No send yet · live since {date}",
|
|
906
|
+
"stale_days": "{days} d",
|
|
907
|
+
"never_sent": "never sent",
|
|
908
|
+
"no_send_for": "No send yet · live for {duration}"
|
|
340
909
|
},
|
|
341
910
|
"cols": {
|
|
342
911
|
"category": "Category",
|
|
@@ -345,54 +914,497 @@
|
|
|
345
914
|
"slug": "Slug",
|
|
346
915
|
"status": "Status",
|
|
347
916
|
"updatedAt": "Updated",
|
|
348
|
-
"updatedBy": "Updated by"
|
|
917
|
+
"updatedBy": "Updated by",
|
|
918
|
+
"updated_by": "{date} · by {name}",
|
|
919
|
+
"publishedVersion": "Version",
|
|
920
|
+
"isDraftPending": "Unpublished changes",
|
|
921
|
+
"publishedAt": "Published"
|
|
349
922
|
},
|
|
350
923
|
"confirm": {
|
|
351
924
|
"archive_description": "Archived templates can no longer be sent. The versions are kept.",
|
|
352
|
-
"archive_title": "Archive this template?"
|
|
925
|
+
"archive_title": "Archive this template?",
|
|
926
|
+
"delete_title": "Delete “{name}”?",
|
|
927
|
+
"delete_description": "This cannot be undone. Code that calls {slug} will fail."
|
|
353
928
|
},
|
|
354
|
-
"description": "
|
|
929
|
+
"description": "Each template has a slug your code calls, typed variables and one version per locale. Edits stay in draft until you publish.",
|
|
355
930
|
"display": {
|
|
356
|
-
"gallery": "Gallery"
|
|
357
|
-
"table": "Table"
|
|
931
|
+
"gallery": "Gallery"
|
|
358
932
|
},
|
|
359
933
|
"drawer": {
|
|
360
|
-
"create_locale": "Create the {locale} version",
|
|
361
|
-
"declare_variable": "Declare a variable",
|
|
362
|
-
"missing_locale": "The {locale} version is missing. Sends fall back to {fallback}.",
|
|
363
934
|
"no_variables": "This template references no variable yet.",
|
|
364
935
|
"required": "required",
|
|
365
|
-
"stats_click": "Click rate",
|
|
366
936
|
"stats_open": "Open rate",
|
|
367
937
|
"stats_sends": "Sends",
|
|
368
938
|
"unused": "unused",
|
|
369
|
-
"variables": "Variables"
|
|
939
|
+
"variables": "Variables",
|
|
940
|
+
"eyebrow": "Template",
|
|
941
|
+
"previous": "Previous template",
|
|
942
|
+
"next": "Next template",
|
|
943
|
+
"more": "More actions",
|
|
944
|
+
"edited": "edited {date} by {name}",
|
|
945
|
+
"never_published": "never published",
|
|
946
|
+
"tab_preview": "Preview",
|
|
947
|
+
"tab_performance": "Performance",
|
|
948
|
+
"subject": "Subject · {subject}",
|
|
949
|
+
"missing_title": "No {locale} version",
|
|
950
|
+
"missing_description": "{locale} recipients get the {fallback} e-mail.",
|
|
951
|
+
"create_short": "Create {locale}",
|
|
952
|
+
"declared_detected": "Declared and detected",
|
|
953
|
+
"not_declared": "not declared",
|
|
954
|
+
"declare": "Declare",
|
|
955
|
+
"call_from_code": "Call it from code",
|
|
956
|
+
"last_30_days": "Last 30 days",
|
|
957
|
+
"open_send_log": "Open in send log",
|
|
958
|
+
"stats_problems": "Problems",
|
|
959
|
+
"problems_detail": "Review them in the send log",
|
|
960
|
+
"called_from": "Called from",
|
|
961
|
+
"no_sources": "No real send in the last 30 days.",
|
|
962
|
+
"unknown_source": "Unknown caller",
|
|
963
|
+
"sends_count": "{count} send | {count} sends",
|
|
964
|
+
"fallbacks": "Locale fallbacks",
|
|
965
|
+
"no_fallbacks": "Every recipient got the locale they asked for.",
|
|
966
|
+
"category": "Category",
|
|
967
|
+
"rename": "Rename",
|
|
968
|
+
"draft_declarations": "The draft changes these declarations",
|
|
969
|
+
"draft_declarations_description": "Shown here is the published contract. The draft’s declarations apply once it is published."
|
|
370
970
|
},
|
|
371
971
|
"empty": {
|
|
372
|
-
"
|
|
373
|
-
"
|
|
374
|
-
"
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
"
|
|
378
|
-
"draft_hint": "Only a live template can be sent for real. Publish it first, or use a test send.",
|
|
379
|
-
"real_hint": "It reaches the recipients below and counts in the statistics. There is no undo.",
|
|
380
|
-
"real_title": "This message is really going out",
|
|
381
|
-
"send": "Send for real",
|
|
382
|
-
"title": "Send"
|
|
972
|
+
"reset": "Reset filters",
|
|
973
|
+
"no_match_title": "No template matches “{search}”",
|
|
974
|
+
"no_match_description": "Search looks at names and slugs. Try another word, or reset the filters.",
|
|
975
|
+
"view_title": "No template in this view",
|
|
976
|
+
"view_description": "Try another tab, or reset the filters.",
|
|
977
|
+
"create_named": "Create “{name}”"
|
|
383
978
|
},
|
|
384
979
|
"start_from": {
|
|
385
980
|
"blank": "Blank",
|
|
386
|
-
"label": "Start from"
|
|
981
|
+
"label": "Start from",
|
|
982
|
+
"blank_hint": "empty page",
|
|
983
|
+
"starter": "starter"
|
|
387
984
|
},
|
|
388
985
|
"status": {
|
|
389
986
|
"archived": "Archived",
|
|
390
987
|
"draft": "Draft",
|
|
391
|
-
"live": "Live"
|
|
988
|
+
"live": "Live",
|
|
989
|
+
"unpublished": "Unpublished"
|
|
392
990
|
},
|
|
393
991
|
"title": "Templates",
|
|
394
|
-
"uncategorised": "Uncategorised"
|
|
992
|
+
"uncategorised": "Uncategorised",
|
|
993
|
+
"caption": "Templates",
|
|
994
|
+
"search": "Search name or slug",
|
|
995
|
+
"tabs": {
|
|
996
|
+
"all": "All",
|
|
997
|
+
"live": "Live",
|
|
998
|
+
"draft": "Drafts",
|
|
999
|
+
"archived": "Archived",
|
|
1000
|
+
"attention": "Needs attention"
|
|
1001
|
+
},
|
|
1002
|
+
"filters": {
|
|
1003
|
+
"category": "Category"
|
|
1004
|
+
},
|
|
1005
|
+
"footer": {
|
|
1006
|
+
"count": "{count} template | {count} templates",
|
|
1007
|
+
"hint": "Open a template to edit it · ↵ open · T test send"
|
|
1008
|
+
},
|
|
1009
|
+
"attention": {
|
|
1010
|
+
"none_title": "Nothing needs attention here",
|
|
1011
|
+
"none_description": "Every template in this tab is published, sent and translated.",
|
|
1012
|
+
"show_all": "Show all templates"
|
|
1013
|
+
},
|
|
1014
|
+
"gallery": {
|
|
1015
|
+
"new_tile": "New template",
|
|
1016
|
+
"new_tile_hint": "or press N",
|
|
1017
|
+
"load_more": "Load more templates"
|
|
1018
|
+
},
|
|
1019
|
+
"starters": {
|
|
1020
|
+
"title": "Start with the e-mails every shop needs",
|
|
1021
|
+
"description": "Pick a starter: it arrives as a draft with its variables declared and test data filled in.",
|
|
1022
|
+
"blank": "Blank template"
|
|
1023
|
+
},
|
|
1024
|
+
"slug_errors": {
|
|
1025
|
+
"required": "Give the template a slug.",
|
|
1026
|
+
"format": "Lowercase letters, digits and dashes only, starting with a letter or a digit.",
|
|
1027
|
+
"too_long": "Keep the slug under 64 characters.",
|
|
1028
|
+
"taken": "Another template already uses this slug."
|
|
1029
|
+
},
|
|
1030
|
+
"name_errors": {
|
|
1031
|
+
"required": "Give the template a name.",
|
|
1032
|
+
"too_long": "Keep the name under 120 characters."
|
|
1033
|
+
},
|
|
1034
|
+
"lifecycle": {
|
|
1035
|
+
"publish": "Publish the draft",
|
|
1036
|
+
"publish_title": "Publish “{name}”?",
|
|
1037
|
+
"publish_description": "Customers receive this version from the next send. The previous one stays in the history.",
|
|
1038
|
+
"publish_confirm": "Publish",
|
|
1039
|
+
"publish_done": "Template published",
|
|
1040
|
+
"unpublish": "Unpublish",
|
|
1041
|
+
"unpublish_title": "Unpublish “{name}”?",
|
|
1042
|
+
"unpublish_description": "It goes back to draft. Every call from your code gets an error until you publish it again.",
|
|
1043
|
+
"unpublish_confirm": "Unpublish",
|
|
1044
|
+
"unpublish_done": "Template unpublished",
|
|
1045
|
+
"archive": "Archive",
|
|
1046
|
+
"archive_title": "Archive “{name}”?",
|
|
1047
|
+
"archive_description": "Archived templates can no longer be sent. Calls from your code get an error. The versions are kept.",
|
|
1048
|
+
"archive_confirm": "Archive",
|
|
1049
|
+
"archive_done": "Template archived",
|
|
1050
|
+
"restore": "Restore",
|
|
1051
|
+
"restore_done": "Template restored as a draft"
|
|
1052
|
+
}
|
|
1053
|
+
},
|
|
1054
|
+
"title": "Mailing",
|
|
1055
|
+
"catalog_category": "Communication",
|
|
1056
|
+
"nav": {
|
|
1057
|
+
"mailing": "Mailing",
|
|
1058
|
+
"configure": "Configure"
|
|
1059
|
+
},
|
|
1060
|
+
"permissions": {
|
|
1061
|
+
"send": {
|
|
1062
|
+
"name": "Send e-mails and tests",
|
|
1063
|
+
"description": "Send test e-mails, send a template to real recipients and send a logged e-mail again."
|
|
1064
|
+
},
|
|
1065
|
+
"editor": {
|
|
1066
|
+
"name": "Template editor",
|
|
1067
|
+
"description": "Edit a template’s blocks, variables and test data, publish or discard its draft."
|
|
1068
|
+
},
|
|
1069
|
+
"funnel": {
|
|
1070
|
+
"name": "Delivery funnel",
|
|
1071
|
+
"description": "Sent, delivered, opened and clicked e-mails of the period."
|
|
1072
|
+
},
|
|
1073
|
+
"overview_gate": {
|
|
1074
|
+
"name": "Mailing dashboard",
|
|
1075
|
+
"description": "The overview dashboard, or the setup steps until the workspace can send."
|
|
1076
|
+
},
|
|
1077
|
+
"page_header": {
|
|
1078
|
+
"name": "Provider and period",
|
|
1079
|
+
"description": "The provider state and the period switch in the page header."
|
|
1080
|
+
},
|
|
1081
|
+
"settings_form": {
|
|
1082
|
+
"name": "Mailing settings",
|
|
1083
|
+
"description": "Sender, delivery guards, provider webhook, log retention and template categories."
|
|
1084
|
+
},
|
|
1085
|
+
"template_drawer": {
|
|
1086
|
+
"name": "Template details",
|
|
1087
|
+
"description": "Preview, variables and performance of a template."
|
|
1088
|
+
},
|
|
1089
|
+
"test_send": {
|
|
1090
|
+
"name": "Test send dialog",
|
|
1091
|
+
"description": "Send a template to up to five test recipients."
|
|
1092
|
+
},
|
|
1093
|
+
"real_send": {
|
|
1094
|
+
"name": "Real send dialog",
|
|
1095
|
+
"description": "Send a live template to up to five real recipients."
|
|
1096
|
+
},
|
|
1097
|
+
"new_template": {
|
|
1098
|
+
"name": "New template dialog",
|
|
1099
|
+
"description": "Create a template from a blank page, a starter or another template."
|
|
1100
|
+
},
|
|
1101
|
+
"send_drawer": {
|
|
1102
|
+
"name": "Send details",
|
|
1103
|
+
"description": "Timeline, origin and data of one send, with the next step it needs."
|
|
1104
|
+
},
|
|
1105
|
+
"rendering": {
|
|
1106
|
+
"name": "Received rendering",
|
|
1107
|
+
"description": "The e-mail as the recipient received it."
|
|
1108
|
+
}
|
|
1109
|
+
},
|
|
1110
|
+
"new_template": {
|
|
1111
|
+
"title": "New template",
|
|
1112
|
+
"description": "Code sends it by its slug. You can publish once the content is ready.",
|
|
1113
|
+
"name_placeholder": "Quote accepted",
|
|
1114
|
+
"slug_auto": "auto from name",
|
|
1115
|
+
"slug_help": "Can’t be changed later: it’s the id your code calls.",
|
|
1116
|
+
"shortcut": "create",
|
|
1117
|
+
"submit": "Create and open the editor",
|
|
1118
|
+
"slug_from_name_empty": "This name gives no slug: type one.",
|
|
1119
|
+
"search": "Search templates",
|
|
1120
|
+
"starters": "Starters",
|
|
1121
|
+
"existing": "Duplicate an existing template"
|
|
1122
|
+
},
|
|
1123
|
+
"test_send": {
|
|
1124
|
+
"title": "Send a test",
|
|
1125
|
+
"current_draft": "current draft",
|
|
1126
|
+
"unsaved_draft": "editor draft",
|
|
1127
|
+
"recipients": "Recipients",
|
|
1128
|
+
"add_address": "Add an address",
|
|
1129
|
+
"recipients_hint": "Press Enter or comma to add",
|
|
1130
|
+
"locale": "Locale",
|
|
1131
|
+
"data": "Data",
|
|
1132
|
+
"data_test": "Test data set",
|
|
1133
|
+
"data_none": "No data",
|
|
1134
|
+
"info_title": "Tests stay out of your figures",
|
|
1135
|
+
"info_description": "The subject gets a {prefix} prefix and the send is flagged as a test in the log.",
|
|
1136
|
+
"shortcut": "send",
|
|
1137
|
+
"submit": "Send a test | Send {count} test | Send {count} tests",
|
|
1138
|
+
"sent": "{count} test sent | {count} tests sent",
|
|
1139
|
+
"published_version": "published v{version}",
|
|
1140
|
+
"choose_draft": "Draft",
|
|
1141
|
+
"choose_published": "Published v{version}",
|
|
1142
|
+
"own_suppressed": {
|
|
1143
|
+
"title": "{email} is on the suppression list",
|
|
1144
|
+
"description": "{reason}. The test went out because it is your own address; real sends to it are not sent."
|
|
1145
|
+
}
|
|
1146
|
+
},
|
|
1147
|
+
"real_send": {
|
|
1148
|
+
"title": "Send to real recipients",
|
|
1149
|
+
"heading": "Send “{name}” to real recipients",
|
|
1150
|
+
"warning": "It reaches their inbox and counts in the statistics. There is no undo.",
|
|
1151
|
+
"recipients_hint": "Up to 5. For a list, use an automation.",
|
|
1152
|
+
"from": "From",
|
|
1153
|
+
"subject": "Subject",
|
|
1154
|
+
"version": "Version",
|
|
1155
|
+
"published_on": "published {date}",
|
|
1156
|
+
"acknowledge": "Add a recipient first | I understand this sends a real e-mail to {count} person | I understand this sends a real e-mail to {count} people",
|
|
1157
|
+
"submit": "Send to recipients | Send to {count} recipient | Send to {count} recipients",
|
|
1158
|
+
"sent": "Sent to {count} recipient | Sent to {count} recipients",
|
|
1159
|
+
"refused_title": "“{name}” can’t be sent yet",
|
|
1160
|
+
"refused_draft": "It’s a draft. Only a live template can go to real recipients.",
|
|
1161
|
+
"refused_archived": "It’s archived. Restore and publish it before sending it to real recipients.",
|
|
1162
|
+
"refused_live": "Only a live template can go to real recipients.",
|
|
1163
|
+
"check_status": "Status is {status} · last edited {date} by {name}",
|
|
1164
|
+
"check_variables_ok": "Variables declared and covered by test data",
|
|
1165
|
+
"check_variables_warn": "Some variables are not declared or have no test value",
|
|
1166
|
+
"check_locales_ok": "Every workspace locale exists",
|
|
1167
|
+
"check_locales_warn": "No {missing} version. Those recipients would get {fallback}.",
|
|
1168
|
+
"test_instead": "Send a test instead",
|
|
1169
|
+
"review_publish": "Review and publish",
|
|
1170
|
+
"values_title": "Values for this send",
|
|
1171
|
+
"missing_required": "Missing required values: {paths}",
|
|
1172
|
+
"no_sender": "No sender set: e-mails go out from the provider’s default address.",
|
|
1173
|
+
"settings_link": "Open the settings",
|
|
1174
|
+
"list_value": "Empty list from the test data | {count} item from the test data | {count} items from the test data",
|
|
1175
|
+
"list_missing": "Not in the test data: add the list there first",
|
|
1176
|
+
"object_value": "Object from the test data"
|
|
1177
|
+
},
|
|
1178
|
+
"rendering": {
|
|
1179
|
+
"title": "The e-mail of this send",
|
|
1180
|
+
"received_by": "What {name} received",
|
|
1181
|
+
"description": "Rendered from the version and the data stored with the send ·",
|
|
1182
|
+
"views": {
|
|
1183
|
+
"desktop": "Desktop",
|
|
1184
|
+
"mobile": "Mobile",
|
|
1185
|
+
"html": "HTML"
|
|
1186
|
+
},
|
|
1187
|
+
"view_label": "Rendering view",
|
|
1188
|
+
"version": "v{version}",
|
|
1189
|
+
"draft_version": "draft",
|
|
1190
|
+
"frame_title": "E-mail of the send",
|
|
1191
|
+
"error_title": "The rendering can’t be shown",
|
|
1192
|
+
"error_description": "The template behind this send was deleted, or its version can’t be read any more.",
|
|
1193
|
+
"approximate": "Draft test: rendered with today’s draft, which may differ from what was sent.",
|
|
1194
|
+
"current_sender": "Sender as set in the settings today",
|
|
1195
|
+
"meant_for": "The e-mail meant for {name}"
|
|
1196
|
+
},
|
|
1197
|
+
"period": {
|
|
1198
|
+
"short": {
|
|
1199
|
+
"last_hour": "1H",
|
|
1200
|
+
"last_24h": "24H",
|
|
1201
|
+
"today": "1D",
|
|
1202
|
+
"last_7_days": "7D",
|
|
1203
|
+
"last_30_days": "30D",
|
|
1204
|
+
"last_90_days": "90D"
|
|
1205
|
+
}
|
|
1206
|
+
},
|
|
1207
|
+
"page_header": {
|
|
1208
|
+
"provider_connected": "{name} connected",
|
|
1209
|
+
"no_provider": "No provider",
|
|
1210
|
+
"provider_hint": "Deliveries, opens, clicks and bounces come back from the provider by webhook."
|
|
1211
|
+
},
|
|
1212
|
+
"setup": {
|
|
1213
|
+
"title": "Send your first e-mail",
|
|
1214
|
+
"description": "Mailing keeps your templates, renders them in every locale and logs each send. The provider (Brevo, Postmark, SMTP…) only carries the mail.",
|
|
1215
|
+
"create_template": "Create a template",
|
|
1216
|
+
"how_it_works": "How sending works",
|
|
1217
|
+
"how_it_works_body": "Your code calls SendTemplate with a template’s slug and its data. Mailing renders the published version in the recipient’s locale, hands it to the provider and logs the send; the provider’s webhook then reports deliveries, opens, clicks and bounces.",
|
|
1218
|
+
"steps": {
|
|
1219
|
+
"provider": {
|
|
1220
|
+
"title": "Connect a provider",
|
|
1221
|
+
"description": "Set in the project’s Antelope configuration: no e-mail can leave until then.",
|
|
1222
|
+
"done": "Done: a provider is connected, e-mails can leave."
|
|
1223
|
+
},
|
|
1224
|
+
"sender": {
|
|
1225
|
+
"title": "Set the sender",
|
|
1226
|
+
"description": "Name and address customers see.",
|
|
1227
|
+
"action": "Set sender",
|
|
1228
|
+
"done": "Done: customers see your sender name and address."
|
|
1229
|
+
},
|
|
1230
|
+
"publish": {
|
|
1231
|
+
"title": "Publish a template",
|
|
1232
|
+
"description": "Your code sends the published version: a draft sends nothing.",
|
|
1233
|
+
"action": "Templates",
|
|
1234
|
+
"done": "Done: a template is live."
|
|
1235
|
+
},
|
|
1236
|
+
"test": {
|
|
1237
|
+
"title": "Send yourself a test",
|
|
1238
|
+
"description": "Check the rendering in a real inbox before customers see it.",
|
|
1239
|
+
"action": "Templates",
|
|
1240
|
+
"done": "Done: a test e-mail was sent."
|
|
1241
|
+
}
|
|
1242
|
+
},
|
|
1243
|
+
"resume": "Resume the setup",
|
|
1244
|
+
"hide": "Hide",
|
|
1245
|
+
"error_title": "The setup could not be checked",
|
|
1246
|
+
"error_description": "The Overview needs to know whether e-mails can leave. Try again in a moment.",
|
|
1247
|
+
"retry": "Try again"
|
|
395
1248
|
},
|
|
396
|
-
"
|
|
1249
|
+
"attention_card": {
|
|
1250
|
+
"title": "Needs attention",
|
|
1251
|
+
"empty": {
|
|
1252
|
+
"title": "Nothing needs you",
|
|
1253
|
+
"description": "No failed send in this period, every live template has all its locales and was used."
|
|
1254
|
+
}
|
|
1255
|
+
},
|
|
1256
|
+
"funnel_card": {
|
|
1257
|
+
"title": "Funnel · sent to clicked",
|
|
1258
|
+
"kinds": {
|
|
1259
|
+
"all": "All",
|
|
1260
|
+
"transactional": "Transactional",
|
|
1261
|
+
"marketing": "Marketing"
|
|
1262
|
+
},
|
|
1263
|
+
"kind_label": "Kind of e-mail",
|
|
1264
|
+
"takeaway": "Biggest drop: {from} → {to}.",
|
|
1265
|
+
"no_drop": "Nothing to compare yet: no e-mail was sent in this period.",
|
|
1266
|
+
"error_title": "The funnel could not be loaded",
|
|
1267
|
+
"retry": "Try again",
|
|
1268
|
+
"untracked": "Delivery is not measured: connect the provider’s webhook to follow the funnel.",
|
|
1269
|
+
"no_loss": "No e-mail was lost between the steps."
|
|
1270
|
+
},
|
|
1271
|
+
"common": {
|
|
1272
|
+
"cancel": "Cancel",
|
|
1273
|
+
"on_date": "{date}"
|
|
1274
|
+
},
|
|
1275
|
+
"duplicate": {
|
|
1276
|
+
"title": "Duplicate template",
|
|
1277
|
+
"description": "Copies every locale, variables and test data into a new draft.",
|
|
1278
|
+
"source": "Copy of {name} ·",
|
|
1279
|
+
"copy_name": "{name} (copy)",
|
|
1280
|
+
"submit": "Duplicate as draft"
|
|
1281
|
+
},
|
|
1282
|
+
"system_variables": {
|
|
1283
|
+
"title": "Footer links · URLs passed at send time",
|
|
1284
|
+
"description": "Your code passes these URLs with every send. A link whose URL is missing is left out of the e-mail.",
|
|
1285
|
+
"required": "Required for a marketing e-mail",
|
|
1286
|
+
"at_send": "at send time"
|
|
1287
|
+
},
|
|
1288
|
+
"suppressions": {
|
|
1289
|
+
"title": "Suppression list",
|
|
1290
|
+
"description": "Addresses nothing is sent to any more: hard bounces, spam complaints, unsubscriptions and addresses added by hand.",
|
|
1291
|
+
"caption": "Suppressed addresses",
|
|
1292
|
+
"search": "Address or note",
|
|
1293
|
+
"views": {
|
|
1294
|
+
"all": "All"
|
|
1295
|
+
},
|
|
1296
|
+
"reasons": {
|
|
1297
|
+
"hard_bounce": "Hard bounce",
|
|
1298
|
+
"complaint": "Spam complaint",
|
|
1299
|
+
"unsubscribe": "Unsubscribed",
|
|
1300
|
+
"manual": "Added by hand"
|
|
1301
|
+
},
|
|
1302
|
+
"cols": {
|
|
1303
|
+
"email": "Address",
|
|
1304
|
+
"reason": "Reason",
|
|
1305
|
+
"detail": "Detail",
|
|
1306
|
+
"createdAt": "Since",
|
|
1307
|
+
"sendId": "Source send"
|
|
1308
|
+
},
|
|
1309
|
+
"footer": {
|
|
1310
|
+
"count": "{count} address | {count} addresses"
|
|
1311
|
+
},
|
|
1312
|
+
"empty": {
|
|
1313
|
+
"title": "No suppressed address",
|
|
1314
|
+
"description": "Hard bounces, spam complaints and unsubscriptions reported by the provider’s webhook land here. You can also add an address by hand."
|
|
1315
|
+
},
|
|
1316
|
+
"actions": {
|
|
1317
|
+
"add": "Add an address",
|
|
1318
|
+
"added": "Address added to the suppression list",
|
|
1319
|
+
"reactivate": "Reactivate",
|
|
1320
|
+
"reactivated": "Address reactivated: the next send reaches it",
|
|
1321
|
+
"see_send": "See the send"
|
|
1322
|
+
},
|
|
1323
|
+
"add": {
|
|
1324
|
+
"title": "Add an address to the suppression list",
|
|
1325
|
+
"description": "Nothing is sent to it any more, from any template, until someone reactivates it.",
|
|
1326
|
+
"email": "Address",
|
|
1327
|
+
"note": "Note",
|
|
1328
|
+
"note_hint": "Optional: why, for whoever reads the list later.",
|
|
1329
|
+
"confirm": "Add to the list"
|
|
1330
|
+
},
|
|
1331
|
+
"reactivate": {
|
|
1332
|
+
"title": "Reactivate {email}?",
|
|
1333
|
+
"description": "The next send reaches this address again. Only do it when the recipient asked for it or the address was fixed.",
|
|
1334
|
+
"confirm": "Reactivate"
|
|
1335
|
+
},
|
|
1336
|
+
"errors": {
|
|
1337
|
+
"invalid": "Enter a valid e-mail address.",
|
|
1338
|
+
"already": "This address is already on the suppression list.",
|
|
1339
|
+
"not_found": "This address is no longer on the suppression list."
|
|
1340
|
+
},
|
|
1341
|
+
"notice": {
|
|
1342
|
+
"not_sent": {
|
|
1343
|
+
"title": "Not sent: this address is on the suppression list",
|
|
1344
|
+
"toast_title": "Not sent: {email} is on the suppression list",
|
|
1345
|
+
"description": "{reason}, since {date}. Reactivate the address to send to it again.",
|
|
1346
|
+
"reason": "{reason}. Reactivate the address to send to it again."
|
|
1347
|
+
},
|
|
1348
|
+
"reactivated": {
|
|
1349
|
+
"title": "Not sent: the address was suppressed at the time",
|
|
1350
|
+
"description": "It has been reactivated since: you can send this e-mail again."
|
|
1351
|
+
},
|
|
1352
|
+
"on_list": {
|
|
1353
|
+
"title": "This address receives nothing any more",
|
|
1354
|
+
"description": "On the suppression list since {date} ({reason})."
|
|
1355
|
+
},
|
|
1356
|
+
"open_list": "Suppression list"
|
|
1357
|
+
}
|
|
1358
|
+
},
|
|
1359
|
+
"history": {
|
|
1360
|
+
"tab": "History",
|
|
1361
|
+
"title": "Version history",
|
|
1362
|
+
"intro": "Every publish keeps a version. Preview one, or restore it as a draft: customers keep the live version until you publish again.",
|
|
1363
|
+
"never_published": "No version yet: the history starts with the first publish.",
|
|
1364
|
+
"empty": "No published version yet.",
|
|
1365
|
+
"version": "Version {version}",
|
|
1366
|
+
"live": "Live",
|
|
1367
|
+
"preview": "Preview",
|
|
1368
|
+
"preview_title": "Version {version}",
|
|
1369
|
+
"brought": "What it changed",
|
|
1370
|
+
"declared": "Declared variables",
|
|
1371
|
+
"no_variables": "No declared variable.",
|
|
1372
|
+
"no_changes": "No change recorded",
|
|
1373
|
+
"summary_more": "{changes} and {count} more | {changes} and {count} more",
|
|
1374
|
+
"close": "Close",
|
|
1375
|
+
"restore": "Restore v{version} as draft",
|
|
1376
|
+
"restore_hint": "Restoring replaces the current draft. Customers keep the live version until you publish.",
|
|
1377
|
+
"restore_title": "Restore v{version} as the draft?",
|
|
1378
|
+
"restore_description": "Its content and variable declarations replace the current draft. Sends keep using v{current} until you review and publish.",
|
|
1379
|
+
"restored": "v{version} restored as the draft",
|
|
1380
|
+
"restored_description": "Review it, then publish to send it."
|
|
1381
|
+
},
|
|
1382
|
+
"variable_types": {
|
|
1383
|
+
"string": "Short text",
|
|
1384
|
+
"text": "Long text",
|
|
1385
|
+
"number": "Number",
|
|
1386
|
+
"money": "Amount",
|
|
1387
|
+
"date": "Date",
|
|
1388
|
+
"url": "Link",
|
|
1389
|
+
"boolean": "Yes / no",
|
|
1390
|
+
"array": "List"
|
|
1391
|
+
},
|
|
1392
|
+
"categories": {
|
|
1393
|
+
"defaults": {
|
|
1394
|
+
"orders": "Orders",
|
|
1395
|
+
"account": "Account & access",
|
|
1396
|
+
"billing": "Billing",
|
|
1397
|
+
"marketing": "Marketing",
|
|
1398
|
+
"forms": "Forms"
|
|
1399
|
+
}
|
|
1400
|
+
},
|
|
1401
|
+
"starters": {
|
|
1402
|
+
"names": {
|
|
1403
|
+
"order-confirmed": "Order confirmation",
|
|
1404
|
+
"order-shipped": "Shipping update",
|
|
1405
|
+
"password-reset": "Password reset",
|
|
1406
|
+
"invoice-ready": "Invoice available"
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
397
1409
|
}
|
|
398
1410
|
}
|