@saasicat/ui-vue 0.4.0 → 0.6.0
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 +64 -4
- package/dist/chunk-A3W2N26K.js +714 -0
- package/dist/chunk-QZOSDCNP.js +98 -0
- package/dist/chunk-X5SQ5HMB.js +3231 -0
- package/dist/client/index.cjs +3988 -0
- package/dist/client/index.d.cts +321 -0
- package/dist/client/index.d.ts +321 -0
- package/dist/client/index.js +70 -0
- package/dist/index.cjs +4446 -1249
- package/dist/index.d.cts +297 -888
- package/dist/index.d.ts +297 -888
- package/dist/index.js +609 -1348
- package/dist/messages-7b0P8W75.d.cts +1652 -0
- package/dist/messages-7b0P8W75.d.ts +1652 -0
- package/dist/quasar/index.cjs +3340 -0
- package/dist/quasar/index.d.cts +95 -0
- package/dist/quasar/index.d.ts +95 -0
- package/dist/quasar/index.js +96 -0
- package/dist/testing-e2e/admin-pages-suite.cjs +14 -11
- package/dist/testing-e2e/admin-pages-suite.js +14 -11
- package/dist/use-super-admin-i18n-B3v3-SWZ.d.ts +210 -0
- package/dist/use-super-admin-i18n-DMktRVEt.d.cts +210 -0
- package/package.json +23 -3
- package/src/{action-registry.ts → client/action-registry.ts} +4 -4
- package/src/{batch-column-fetcher.ts → client/batch-column-fetcher.ts} +4 -4
- package/src/{boot-loader.ts → client/boot-loader.ts} +3 -3
- package/src/client/i18n/currency.ts +42 -0
- package/src/client/i18n/define.ts +59 -0
- package/src/client/i18n/format.ts +12 -0
- package/src/client/i18n/index.ts +14 -0
- package/src/client/i18n/locale.ts +15 -0
- package/src/client/i18n/messages/audit.ts +42 -0
- package/src/client/i18n/messages/bundles.ts +459 -0
- package/src/client/i18n/messages/common.ts +147 -0
- package/src/client/i18n/messages/dashboard.ts +16 -0
- package/src/client/i18n/messages/discovery.ts +229 -0
- package/src/client/i18n/messages/email.ts +125 -0
- package/src/client/i18n/messages/marketing.ts +270 -0
- package/src/client/i18n/messages/nav.ts +72 -0
- package/src/client/i18n/messages/pilots.ts +192 -0
- package/src/client/i18n/messages/plan-detail.ts +266 -0
- package/src/client/i18n/messages/plan-editor.ts +177 -0
- package/src/client/i18n/messages/plan-versions.ts +251 -0
- package/src/client/i18n/messages/plans.ts +503 -0
- package/src/client/i18n/messages/promos.ts +202 -0
- package/src/client/i18n/messages/shell.ts +145 -0
- package/src/client/i18n/messages/tenants.ts +104 -0
- package/src/client/i18n/messages/users.ts +78 -0
- package/src/client/i18n/messages.ts +84 -0
- package/src/client/index.ts +27 -0
- package/src/{manifest-loader.ts → client/manifest-loader.ts} +4 -4
- package/src/{nav-builder.ts → client/nav-builder.ts} +44 -51
- package/src/{plan-versions-catalog.ts → client/plan-versions-catalog.ts} +42 -30
- package/src/components/BundleVersionPublishDialog.vue +35 -24
- package/src/components/FeatureGate.vue +1 -1
- package/src/components/MarketingPromotionsTab.vue +112 -59
- package/src/components/MfaPromptDialog.vue +11 -11
- package/src/components/TenantActionConfirmDialog.vue +19 -17
- package/src/components/VersionDiffPreview.vue +72 -43
- package/src/components/bundle-editor/BundleCreatePanel.vue +76 -63
- package/src/components/bundle-editor/BundleFeaturesEditor.vue +13 -6
- package/src/components/bundle-editor/BundlePlanCompatPicker.vue +19 -14
- package/src/components/bundle-editor/BundleQuotasEditor.vue +7 -4
- package/src/components/bundle-editor/BundleStatusBanner.vue +36 -19
- package/src/components/bundle-editor/BundleVersionInlineEditor.vue +51 -35
- package/src/components/bundle-editor/BundleVersionStrip.vue +24 -12
- package/src/components/bundle-editor/bundle-version-status.ts +29 -29
- package/src/components/dialogs/PilotCreateDialog.vue +58 -63
- package/src/components/dialogs/PilotEditDialog.vue +40 -34
- package/src/components/dialogs/PromoCodeCreateDialog.vue +89 -63
- package/src/components/dialogs/PromoCodeEditDialog.vue +98 -66
- package/src/components/dialogs/types.ts +3 -13
- package/src/components/plan/PlanCycleToggle.vue +21 -10
- package/src/components/plan/PlanGrid.vue +2 -2
- package/src/components/plan/PriceSummary.vue +1 -1
- package/src/components/plan/PromoCodeInput.vue +1 -1
- package/src/components/plan/PublicBundleGrid.vue +1 -1
- package/src/components/plan-cockpit/PlanCockpit.vue +34 -15
- package/src/components/plan-cockpit/PlanCockpitAuditLog.vue +13 -6
- package/src/components/plan-cockpit/PlanCockpitDiffPanel.vue +18 -9
- package/src/components/plan-cockpit/PlanCockpitHeader.vue +9 -6
- package/src/components/plan-cockpit/PlanCockpitImpactPanel.vue +24 -11
- package/src/components/plan-cockpit/PlanCockpitKpis.vue +28 -17
- package/src/components/plan-cockpit/PlanCockpitVersions.vue +50 -25
- package/src/components/plan-create-dialog/PlanCreateDialog.vue +45 -35
- package/src/components/plan-detail/PlanAuditLog.vue +11 -6
- package/src/components/plan-detail/PlanDetail.vue +21 -23
- package/src/components/plan-detail/PlanDetailHeader.vue +20 -11
- package/src/components/plan-detail/PlanDetailKpis.vue +30 -17
- package/src/components/plan-detail/PlanTerminateDialog.vue +22 -9
- package/src/components/plan-detail/PlanVersionDiffPanel.vue +61 -27
- package/src/components/plan-detail/PlanVersionsPanel.vue +71 -36
- package/src/components/plan-list/PlanList.vue +99 -57
- package/src/components/plan-matrix/PlanMatrix.vue +85 -38
- package/src/components/plan-review/PlanReview.vue +105 -80
- package/src/components/plan-version-editor/PlanCatalogPreview.vue +43 -20
- package/src/components/plan-version-editor/PlanComponentPool.vue +15 -7
- package/src/components/plan-version-editor/PlanVersionBasket.vue +45 -24
- package/src/components/plan-version-editor/PlanVersionDiffDialog.vue +8 -7
- package/src/components/plan-version-editor/PlanVersionEditor.vue +74 -40
- package/src/components/plan-version-editor/PlanVersionEditorHeader.vue +24 -12
- package/src/index.ts +82 -79
- package/src/pages-standard/AdminLayout.vue +43 -18
- package/src/pages-standard/AdminManifestErrorPage.vue +10 -10
- package/src/pages-standard/AuditPage.vue +58 -19
- package/src/pages-standard/BundlesPage.vue +29 -18
- package/src/pages-standard/DashboardPage.vue +31 -17
- package/src/pages-standard/DiscoveryPage.vue +40 -28
- package/src/pages-standard/EmailHistoryPage.vue +98 -69
- package/src/pages-standard/MarketingCatalogPage.vue +40 -21
- package/src/pages-standard/PilotsPage.vue +64 -52
- package/src/pages-standard/PlanVersionsPage.vue +9 -5
- package/src/pages-standard/PlansPage.vue +91 -59
- package/src/pages-standard/PlatformEmailPage.vue +120 -53
- package/src/pages-standard/PromoCodeDetailPage.vue +66 -63
- package/src/pages-standard/PromoCodesPage.vue +51 -54
- package/src/pages-standard/SubscriptionsPage.vue +14 -9
- package/src/pages-standard/SuperAdminLoginPage.vue +19 -16
- package/src/pages-standard/SuperAdminSetupWizard.vue +53 -49
- package/src/pages-standard/TenantDetailPage.vue +54 -40
- package/src/pages-standard/TenantsPage.vue +57 -44
- package/src/pages-standard/UsersPage.vue +70 -52
- package/src/pages-standard/bundles-page/BundleAccordionList.vue +20 -8
- package/src/pages-standard/bundles-page/BundleDetailPanel.vue +28 -18
- package/src/pages-standard/bundles-page/BundlesFilterBar.vue +4 -1
- package/src/pages-standard/bundles-page/BundlesHeader.vue +9 -8
- package/src/pages-standard/bundles-page/BundlesKpis.vue +29 -11
- package/src/pages-standard/discovery-page/CatalogEntryTransPanel.vue +20 -8
- package/src/pages-standard/discovery-page/DiscoveryCapList.vue +5 -3
- package/src/pages-standard/discovery-page/DiscoveryFeatureCard.vue +43 -24
- package/src/pages-standard/discovery-page/DiscoveryHeader.vue +7 -4
- package/src/pages-standard/discovery-page/DiscoveryKpis.vue +28 -15
- package/src/pages-standard/discovery-page/DiscoveryQuotaCard.vue +20 -10
- package/src/pages-standard/discovery-page/DiscoveryStatusControl.vue +9 -6
- package/src/pages-standard/discovery-page/discovery-ui.ts +40 -52
- package/src/pages-standard/marketing-catalog/MarketingCatalogAdmin.vue +81 -49
- package/src/pages-standard/marketing-catalog/MarketingCatalogHeader.vue +13 -10
- package/src/pages-standard/marketing-catalog/MarketingCatalogPreview.vue +24 -20
- package/src/pages-standard/marketing-catalog/MarketingCatalogToolbar.vue +6 -3
- package/src/pages-standard/plan-versions/PlanDiffCard.vue +16 -6
- package/src/pages-standard/plan-versions/PlanVersionHeader.vue +42 -26
- package/src/pages-standard/plan-versions/PlanVersionsAudit.vue +46 -27
- package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +8 -6
- package/src/pages-standard/plan-versions/PlanVersionsList.vue +40 -17
- package/src/pages-standard/plan-versions/PlanVersionsMatrix.vue +1 -1
- package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +25 -13
- package/src/pages-standard/plan-versions/format.ts +33 -17
- package/src/pages-standard/plans-page/PlanArchiveDialog.vue +12 -8
- package/src/pages-standard/plans-page/PlanBundleOverview.vue +15 -6
- package/src/pages-standard/plans-page/PlanDiscardDraftDialog.vue +18 -7
- package/src/pages-standard/plans-page/PlanPublishDialog.vue +23 -12
- package/src/pages-standard/tenants/format.ts +3 -2
- package/src/pages-tenant/MySubscriptionBundlesPage.vue +73 -38
- package/src/pages-tenant/OnboardingConfigurator.vue +3 -3
- package/src/pages-tenant/PackageSnapshotPanel.vue +1 -1
- package/src/pages-tenant/PlanChangeWizard.vue +10 -6
- package/src/pages-tenant/TenantPlanSection.vue +20 -16
- package/src/pages-tenant/default-i18n.ts +217 -1
- package/src/pages-tenant/tenant-plan-section/BundlePreviewDialog.vue +9 -7
- package/src/pages-tenant/tenant-plan-section/TenantBundleStore.vue +11 -12
- package/src/pages-tenant/tenant-plan-section/TenantFeatureMatrix.vue +4 -1
- package/src/pages-tenant/tenant-plan-section/TenantPlanCardHeader.vue +1 -1
- package/src/pages-tenant/tenant-plan-section/TenantUsageGrid.vue +1 -1
- package/src/quasar/create-super-admin-app.ts +192 -0
- package/src/quasar/index.ts +11 -0
- package/src/quasar/notify.ts +30 -0
- package/src/testing-e2e/admin-pages-suite.ts +14 -11
- package/src/{manifest-store-factory.ts → vue/manifest-store-factory.ts} +1 -1
- package/src/{platform-loaders.ts → vue/platform-loaders.ts} +4 -4
- package/src/{project-page-host.ts → vue/project-page-host.ts} +6 -4
- package/src/{create-super-admin-app.ts → vue/super-admin-context.ts} +20 -139
- package/src/vue/ui-notify.ts +30 -0
- package/src/{use-actions.ts → vue/use-actions.ts} +1 -1
- package/src/{use-api-list.ts → vue/use-api-list.ts} +1 -1
- package/src/{use-audit-entries.ts → vue/use-audit-entries.ts} +3 -3
- package/src/{use-batch-columns.ts → vue/use-batch-columns.ts} +1 -1
- package/src/{use-bulk-publish.ts → vue/use-bulk-publish.ts} +7 -5
- package/src/{use-bundle-versions-map.ts → vue/use-bundle-versions-map.ts} +7 -5
- package/src/{use-bundles.ts → vue/use-bundles.ts} +14 -14
- package/src/{use-catalog-entries.ts → vue/use-catalog-entries.ts} +14 -11
- package/src/{use-discovery.ts → vue/use-discovery.ts} +9 -6
- package/src/{use-entitlement.ts → vue/use-entitlement.ts} +4 -4
- package/src/{use-live-plan-versions.ts → vue/use-live-plan-versions.ts} +5 -5
- package/src/{use-manifest.ts → vue/use-manifest.ts} +1 -1
- package/src/{use-marketing-projections.ts → vue/use-marketing-projections.ts} +10 -7
- package/src/{use-nav.ts → vue/use-nav.ts} +9 -3
- package/src/{use-plan-editor.ts → vue/use-plan-editor.ts} +2 -2
- package/src/{use-plan-versions.ts → vue/use-plan-versions.ts} +3 -3
- package/src/{use-plans.ts → vue/use-plans.ts} +13 -13
- package/src/{use-platform-tenant-actions.ts → vue/use-platform-tenant-actions.ts} +9 -6
- package/src/{use-promotions.ts → vue/use-promotions.ts} +10 -11
- package/src/{use-public-boot.ts → vue/use-public-boot.ts} +1 -1
- package/src/{use-subscription-draft.ts → vue/use-subscription-draft.ts} +2 -3
- package/src/{use-super-admin-context.ts → vue/use-super-admin-context.ts} +5 -5
- package/src/vue/use-super-admin-i18n.ts +82 -0
- package/src/{use-tenant-action-flow.ts → vue/use-tenant-action-flow.ts} +12 -7
- package/src/{use-tenant-billing-catalog.ts → vue/use-tenant-billing-catalog.ts} +2 -2
- package/src/{use-tenant-billing.ts → vue/use-tenant-billing.ts} +2 -2
- package/src/{use-tenant-manifest.ts → vue/use-tenant-manifest.ts} +2 -4
- package/src/{use-tenant-subscription-bundles.ts → vue/use-tenant-subscription-bundles.ts} +5 -5
- package/src/{use-tenants.ts → vue/use-tenants.ts} +3 -3
- package/dist/testing-e2e/admin-pages-suite.d.cts +0 -37
- package/dist/testing-e2e/admin-pages-suite.d.ts +0 -37
- package/src/components/BusinessTypeVersionEditorDialog.vue +0 -417
- package/src/components/BusinessTypeVersionPublishDialog.vue +0 -258
- package/src/pages-standard/BusinessTypesPage.vue +0 -662
- package/src/pages-standard/plan-versions/VersionDiffPreview.vue +0 -167
- package/src/use-business-types.ts +0 -269
- /package/src/{http-json.ts → client/http-json.ts} +0 -0
- /package/src/{types.ts → client/types.ts} +0 -0
- /package/src/{version.ts → client/version.ts} +0 -0
- /package/src/{create-admin-routes.ts → vue/create-admin-routes.ts} +0 -0
- /package/src/{entitlement-provider.ts → vue/entitlement-provider.ts} +0 -0
- /package/src/{feature-router-guard.ts → vue/feature-router-guard.ts} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// Navigation labels consumed by the nav-builder: standard-page labels and the
|
|
2
|
+
// default drawer section names. Section VALUES double as section identifiers
|
|
3
|
+
// in `navSection` / `sectionOrder`, so builder options and catalog must come
|
|
4
|
+
// from the same locale.
|
|
5
|
+
|
|
6
|
+
import type { StandardPageKey } from '@saasicat/types';
|
|
7
|
+
|
|
8
|
+
import { defineMessages } from '../define.js';
|
|
9
|
+
import type { SaLocale } from '../locale.js';
|
|
10
|
+
|
|
11
|
+
// Type alias (not interface) so the shape keeps an implicit index signature
|
|
12
|
+
// and stays assignable to `MessageTree`.
|
|
13
|
+
type NavNamespace = {
|
|
14
|
+
readonly pages: Record<StandardPageKey, string>;
|
|
15
|
+
readonly sections: {
|
|
16
|
+
readonly overview: string;
|
|
17
|
+
readonly catalog: string;
|
|
18
|
+
readonly customers: string;
|
|
19
|
+
readonly system: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const navMessages: Record<SaLocale, NavNamespace> = defineMessages(
|
|
24
|
+
{
|
|
25
|
+
pages: {
|
|
26
|
+
dashboard: 'Dashboard',
|
|
27
|
+
tenants: 'Mandanten',
|
|
28
|
+
subscriptions: 'Abonnements',
|
|
29
|
+
promoCodes: 'Promo-Codes',
|
|
30
|
+
plans: 'Pläne & Versionen',
|
|
31
|
+
planVersions: 'Plan-Versionen',
|
|
32
|
+
audit: 'Audit-Log',
|
|
33
|
+
users: 'Benutzer',
|
|
34
|
+
pilots: 'Piloten',
|
|
35
|
+
discovery: 'Discovery',
|
|
36
|
+
bundles: 'Bundles',
|
|
37
|
+
marketingCatalog: 'Marketing-Catalog',
|
|
38
|
+
platformEmail: 'Plattform-E-Mail',
|
|
39
|
+
platformEmailHistory: 'E-Mail-Verlauf',
|
|
40
|
+
},
|
|
41
|
+
sections: {
|
|
42
|
+
overview: 'Übersicht',
|
|
43
|
+
catalog: 'Produktkatalog',
|
|
44
|
+
customers: 'Kunden',
|
|
45
|
+
system: 'System',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
pages: {
|
|
50
|
+
dashboard: 'Dashboard',
|
|
51
|
+
tenants: 'Tenants',
|
|
52
|
+
subscriptions: 'Subscriptions',
|
|
53
|
+
promoCodes: 'Promo codes',
|
|
54
|
+
plans: 'Plans & versions',
|
|
55
|
+
planVersions: 'Plan versions',
|
|
56
|
+
audit: 'Audit log',
|
|
57
|
+
users: 'Users',
|
|
58
|
+
pilots: 'Pilots',
|
|
59
|
+
discovery: 'Discovery',
|
|
60
|
+
bundles: 'Bundles',
|
|
61
|
+
marketingCatalog: 'Marketing catalog',
|
|
62
|
+
platformEmail: 'Platform email',
|
|
63
|
+
platformEmailHistory: 'Email history',
|
|
64
|
+
},
|
|
65
|
+
sections: {
|
|
66
|
+
overview: 'Overview',
|
|
67
|
+
catalog: 'Product catalog',
|
|
68
|
+
customers: 'Customers',
|
|
69
|
+
system: 'System',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
);
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { defineMessages } from '../define.js';
|
|
2
|
+
|
|
3
|
+
export const pilotsMessages = defineMessages(
|
|
4
|
+
{
|
|
5
|
+
title: 'Pilot-Mandanten',
|
|
6
|
+
subtitleCount: '{count} Pilot-Tenants insgesamt.',
|
|
7
|
+
createAction: 'Pilot anlegen',
|
|
8
|
+
list: {
|
|
9
|
+
tileExpiring: 'Läuft bald aus',
|
|
10
|
+
tileExpiringHint: '≤ 14 Tage',
|
|
11
|
+
reviewSoonBanner:
|
|
12
|
+
'{count} Pilot-Mandanten enden in den nächsten 30 Tagen — bitte prüfen.',
|
|
13
|
+
columnSlug: 'Slug',
|
|
14
|
+
columnPlan: 'Plan',
|
|
15
|
+
columnNote: 'Note',
|
|
16
|
+
columnGrantedBy: 'Granted by',
|
|
17
|
+
columnEndsAt: 'Endet',
|
|
18
|
+
actionExtend: 'Verlängern',
|
|
19
|
+
actionRevoke: 'Widerrufen',
|
|
20
|
+
actionFailed: 'Aktion fehlgeschlagen',
|
|
21
|
+
createdNotice: 'Pilot {slug} angelegt.',
|
|
22
|
+
createdPasswordCaption: 'Initial-Passwort: {password}',
|
|
23
|
+
updatedNotice: 'Pilot {slug} aktualisiert.',
|
|
24
|
+
updatedChangedCaption: 'Geändert: {fields}',
|
|
25
|
+
extendTitle: 'Pilot {slug} verlängern',
|
|
26
|
+
extendMessage: 'Neues Enddatum:',
|
|
27
|
+
extendMfaDescription: 'Pilot "{slug}" bis {until} verlängern.',
|
|
28
|
+
extendSuccess: 'Pilot bis {until} verlängert.',
|
|
29
|
+
revokeTitle: 'Pilot {slug} widerrufen',
|
|
30
|
+
revokeMessage: 'Pilot-Status entfernen. Subscription bleibt bestehen.',
|
|
31
|
+
revokeMfaDescription: 'Pilot-Status für "{slug}" widerrufen.',
|
|
32
|
+
revokeSuccess: 'Pilot widerrufen.',
|
|
33
|
+
},
|
|
34
|
+
copyDefaults: {
|
|
35
|
+
tenantSubtitle: 'Stammdaten des Mandanten',
|
|
36
|
+
tenantNameLabel: 'Name des Mandanten',
|
|
37
|
+
tenantNamePlaceholder: 'z. B. Muster GmbH',
|
|
38
|
+
slugPlaceholder: 'muster-mandant',
|
|
39
|
+
adminEmailPlaceholder: 'admin@example.com',
|
|
40
|
+
notePlaceholder: 'z. B. Sales-Pilot · Demo-Zugang',
|
|
41
|
+
},
|
|
42
|
+
form: {
|
|
43
|
+
slugLabel: 'Slug',
|
|
44
|
+
slugHint: 'wird automatisch aus dem Namen erzeugt',
|
|
45
|
+
slugConflict: 'Dieser Slug ist bereits vergeben.',
|
|
46
|
+
planLabel: 'Plan',
|
|
47
|
+
endsAtLabel: 'Endet am',
|
|
48
|
+
endsAtClearTitle: 'Auf unbegrenzt setzen',
|
|
49
|
+
preset30Days: '30 Tage',
|
|
50
|
+
preset90Days: '90 Tage',
|
|
51
|
+
preset6Months: '6 Monate',
|
|
52
|
+
preset1Year: '1 Jahr',
|
|
53
|
+
noteLabel: 'Note',
|
|
54
|
+
noteHint: 'intern · nicht für Kunden sichtbar',
|
|
55
|
+
},
|
|
56
|
+
createDialog: {
|
|
57
|
+
title: 'Pilot-Mandant anlegen',
|
|
58
|
+
subtitle: 'Neuer Mandant + Initial-Admin werden in einem Schritt angelegt.',
|
|
59
|
+
sectionTenant: 'Mandant',
|
|
60
|
+
legalFormLabel: 'Rechtsform',
|
|
61
|
+
legalFormPlaceholder: 'e.V., GmbH, …',
|
|
62
|
+
vatIdLabel: 'USt-IdNr.',
|
|
63
|
+
vatIdHint: 'optional',
|
|
64
|
+
vatIdPlaceholder: 'DE123456789',
|
|
65
|
+
sectionAdmin: 'Initial-Admin',
|
|
66
|
+
sectionAdminSub: 'Erhält eine Einladungs-E-Mail mit Initial-Passwort.',
|
|
67
|
+
emailLabel: 'E-Mail',
|
|
68
|
+
emailInvalid: 'Bitte eine gültige E-Mail-Adresse eingeben.',
|
|
69
|
+
firstNameLabel: 'Vorname',
|
|
70
|
+
firstNamePlaceholder: 'Erika',
|
|
71
|
+
lastNameLabel: 'Nachname',
|
|
72
|
+
lastNamePlaceholder: 'Mustermann',
|
|
73
|
+
initialPasswordLabel: 'Initial-Passwort',
|
|
74
|
+
initialPasswordHint: 'leer lassen → automatisch generieren',
|
|
75
|
+
initialPasswordPlaceholder: '•••••••• (automatisch generieren)',
|
|
76
|
+
sectionPilot: 'Pilot-Konfiguration',
|
|
77
|
+
sectionPilotSub: 'Plan-Zuweisung, Laufzeit und interne Notiz',
|
|
78
|
+
invitationHint: 'Einladung geht an',
|
|
79
|
+
mfaDescription: 'Pilot-Mandant "{name}" anlegen — Plan {plan}.',
|
|
80
|
+
},
|
|
81
|
+
editDialog: {
|
|
82
|
+
title: 'Pilot bearbeiten',
|
|
83
|
+
sectionPlanSub:
|
|
84
|
+
'Aktive Plan-Zuweisung. Legacy-Plans tauchen als „nicht im Katalog" auf.',
|
|
85
|
+
planNotInCatalog: '{plan} (nicht im Katalog)',
|
|
86
|
+
sectionEndDate: 'Enddatum',
|
|
87
|
+
sectionEndDateSub: 'Leeres Datum = offene Pilotphase ohne Ablauf.',
|
|
88
|
+
clearDateTitle: 'Datum löschen — offene Pilotphase',
|
|
89
|
+
sectionNote: 'Notiz',
|
|
90
|
+
sectionNoteSub: 'Intern · nicht für Kunden sichtbar.',
|
|
91
|
+
mfaDescription: 'Pilot "{name}" bearbeiten.',
|
|
92
|
+
},
|
|
93
|
+
mfa: {
|
|
94
|
+
invalidCode: 'TOTP-Code ungültig.',
|
|
95
|
+
invalidOrNotSetUp: 'TOTP-Code ungültig oder MFA nicht eingerichtet.',
|
|
96
|
+
notSetUp: 'MFA ist für diesen Account nicht eingerichtet.',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
title: 'Pilot tenants',
|
|
101
|
+
subtitleCount: '{count} pilot tenants in total.',
|
|
102
|
+
createAction: 'Create pilot',
|
|
103
|
+
list: {
|
|
104
|
+
tileExpiring: 'Expiring soon',
|
|
105
|
+
tileExpiringHint: '≤ 14 days',
|
|
106
|
+
reviewSoonBanner: '{count} pilot tenants end within the next 30 days — please review.',
|
|
107
|
+
columnSlug: 'Slug',
|
|
108
|
+
columnPlan: 'Plan',
|
|
109
|
+
columnNote: 'Note',
|
|
110
|
+
columnGrantedBy: 'Granted by',
|
|
111
|
+
columnEndsAt: 'Ends',
|
|
112
|
+
actionExtend: 'Extend',
|
|
113
|
+
actionRevoke: 'Revoke',
|
|
114
|
+
actionFailed: 'Action failed',
|
|
115
|
+
createdNotice: 'Pilot {slug} created.',
|
|
116
|
+
createdPasswordCaption: 'Initial password: {password}',
|
|
117
|
+
updatedNotice: 'Pilot {slug} updated.',
|
|
118
|
+
updatedChangedCaption: 'Changed: {fields}',
|
|
119
|
+
extendTitle: 'Extend pilot {slug}',
|
|
120
|
+
extendMessage: 'New end date:',
|
|
121
|
+
extendMfaDescription: 'Extend pilot "{slug}" until {until}.',
|
|
122
|
+
extendSuccess: 'Pilot extended until {until}.',
|
|
123
|
+
revokeTitle: 'Revoke pilot {slug}',
|
|
124
|
+
revokeMessage: 'Remove pilot status. The subscription remains.',
|
|
125
|
+
revokeMfaDescription: 'Revoke pilot status for "{slug}".',
|
|
126
|
+
revokeSuccess: 'Pilot revoked.',
|
|
127
|
+
},
|
|
128
|
+
copyDefaults: {
|
|
129
|
+
tenantSubtitle: 'Master data of the tenant',
|
|
130
|
+
tenantNameLabel: 'Name of the tenant',
|
|
131
|
+
tenantNamePlaceholder: 'e.g. Example Ltd.',
|
|
132
|
+
slugPlaceholder: 'example-tenant',
|
|
133
|
+
adminEmailPlaceholder: 'admin@example.com',
|
|
134
|
+
notePlaceholder: 'e.g. sales pilot · demo access',
|
|
135
|
+
},
|
|
136
|
+
form: {
|
|
137
|
+
slugLabel: 'Slug',
|
|
138
|
+
slugHint: 'generated automatically from the name',
|
|
139
|
+
slugConflict: 'This slug is already taken.',
|
|
140
|
+
planLabel: 'Plan',
|
|
141
|
+
endsAtLabel: 'Ends on',
|
|
142
|
+
endsAtClearTitle: 'Set to unlimited',
|
|
143
|
+
preset30Days: '30 days',
|
|
144
|
+
preset90Days: '90 days',
|
|
145
|
+
preset6Months: '6 months',
|
|
146
|
+
preset1Year: '1 year',
|
|
147
|
+
noteLabel: 'Note',
|
|
148
|
+
noteHint: 'internal · not visible to customers',
|
|
149
|
+
},
|
|
150
|
+
createDialog: {
|
|
151
|
+
title: 'Create pilot tenant',
|
|
152
|
+
subtitle: 'A new tenant and its initial admin are created in one step.',
|
|
153
|
+
sectionTenant: 'Tenant',
|
|
154
|
+
legalFormLabel: 'Legal form',
|
|
155
|
+
legalFormPlaceholder: 'Ltd., Inc., …',
|
|
156
|
+
vatIdLabel: 'VAT ID',
|
|
157
|
+
vatIdHint: 'optional',
|
|
158
|
+
vatIdPlaceholder: 'DE123456789',
|
|
159
|
+
sectionAdmin: 'Initial admin',
|
|
160
|
+
sectionAdminSub: 'Receives an invitation email containing the initial password.',
|
|
161
|
+
emailLabel: 'Email',
|
|
162
|
+
emailInvalid: 'Please enter a valid email address.',
|
|
163
|
+
firstNameLabel: 'First name',
|
|
164
|
+
firstNamePlaceholder: 'Jane',
|
|
165
|
+
lastNameLabel: 'Last name',
|
|
166
|
+
lastNamePlaceholder: 'Doe',
|
|
167
|
+
initialPasswordLabel: 'Initial password',
|
|
168
|
+
initialPasswordHint: 'leave empty → generate automatically',
|
|
169
|
+
initialPasswordPlaceholder: '•••••••• (generate automatically)',
|
|
170
|
+
sectionPilot: 'Pilot configuration',
|
|
171
|
+
sectionPilotSub: 'Plan assignment, duration and internal note',
|
|
172
|
+
invitationHint: 'Invitation will be sent to',
|
|
173
|
+
mfaDescription: 'Create pilot tenant "{name}" — plan {plan}.',
|
|
174
|
+
},
|
|
175
|
+
editDialog: {
|
|
176
|
+
title: 'Edit pilot',
|
|
177
|
+
sectionPlanSub: 'Active plan assignment. Legacy plans appear as "not in the catalog".',
|
|
178
|
+
planNotInCatalog: '{plan} (not in the catalog)',
|
|
179
|
+
sectionEndDate: 'End date',
|
|
180
|
+
sectionEndDateSub: 'Empty date = open-ended pilot phase.',
|
|
181
|
+
clearDateTitle: 'Clear date — open-ended pilot phase',
|
|
182
|
+
sectionNote: 'Note',
|
|
183
|
+
sectionNoteSub: 'Internal · not visible to customers.',
|
|
184
|
+
mfaDescription: 'Edit pilot "{name}".',
|
|
185
|
+
},
|
|
186
|
+
mfa: {
|
|
187
|
+
invalidCode: 'TOTP code invalid.',
|
|
188
|
+
invalidOrNotSetUp: 'TOTP code invalid or MFA not set up.',
|
|
189
|
+
notSetUp: 'MFA is not set up for this account.',
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
);
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { defineMessages } from '../define.js';
|
|
2
|
+
|
|
3
|
+
export const planDetailMessages = defineMessages(
|
|
4
|
+
{
|
|
5
|
+
header: {
|
|
6
|
+
noDescription: 'Keine Beschreibung.',
|
|
7
|
+
nameEditHint: 'Draft · Enter speichert · Esc bricht ab',
|
|
8
|
+
editNameTitle: 'Plan-Name im Draft bearbeiten',
|
|
9
|
+
editNameAria: 'Plan-Name bearbeiten',
|
|
10
|
+
deletePlan: 'Plan löschen',
|
|
11
|
+
deletePlanTitle: 'Plan löschen (nur ohne Mandanten und ohne published Versionen)',
|
|
12
|
+
clonePlan: 'Plan klonen',
|
|
13
|
+
newDraftVersion: 'Neue Draft-Version',
|
|
14
|
+
publishDraft: 'Draft v{version} veröffentlichen',
|
|
15
|
+
backToList: 'Zurück zur Liste',
|
|
16
|
+
viewInCatalog: 'Im Katalog ansehen',
|
|
17
|
+
draftAlreadyOpen: 'Es gibt bereits eine offene Draft',
|
|
18
|
+
},
|
|
19
|
+
kpis: {
|
|
20
|
+
activeVersion: 'Aktive Version',
|
|
21
|
+
activeSince: 'seit {date}',
|
|
22
|
+
noPublishedVersion: 'keine veröffentlichte Version',
|
|
23
|
+
tenantImpact: 'Tenant-Impact',
|
|
24
|
+
tenantsOnPlan: 'Mandanten auf diesem Plan',
|
|
25
|
+
versions: 'Versionen',
|
|
26
|
+
versionsSummary: '{published} live/superseded',
|
|
27
|
+
versionsSummaryWithDrafts: '{published} live/superseded · {drafts} Draft',
|
|
28
|
+
openDraft: 'Offener Draft',
|
|
29
|
+
noDraft: 'Kein Draft',
|
|
30
|
+
readyToEdit: 'Bereit zum Bearbeiten',
|
|
31
|
+
noOpenDraft: 'Keine Draft-Version offen',
|
|
32
|
+
createNewDraft: 'Neue Draft anlegen',
|
|
33
|
+
},
|
|
34
|
+
versions: {
|
|
35
|
+
title: 'Versionen',
|
|
36
|
+
subtitle: 'Pro Plan max. 1 offene Draft-Version · Publish setzt Vorgänger auf',
|
|
37
|
+
newDraftButton: 'Draft v{version}',
|
|
38
|
+
timelineHint: 'Klicke eine Version, um sie zu wählen',
|
|
39
|
+
timelineSelectTitle: 'v{version} wählen ({status})',
|
|
40
|
+
timelineDraftSuffix: ' · draft',
|
|
41
|
+
timelineNow: 'jetzt',
|
|
42
|
+
colVersion: 'Version',
|
|
43
|
+
colValidity: 'Gültig',
|
|
44
|
+
colPrice: 'Preis',
|
|
45
|
+
colPricing: 'Pricing',
|
|
46
|
+
colEffect: 'Auswirkung',
|
|
47
|
+
colImpact: 'Impact',
|
|
48
|
+
colChangeNote: 'Änderungsnotiz',
|
|
49
|
+
colChangeNoteShort: 'Change-Note',
|
|
50
|
+
validityPlanned: 'geplant',
|
|
51
|
+
validityActive: 'aktiv',
|
|
52
|
+
validityHistoric: 'historisch',
|
|
53
|
+
perMonthUnit: '/ Mo',
|
|
54
|
+
perYearUnit: '/ Jahr',
|
|
55
|
+
tenants: 'Mandanten',
|
|
56
|
+
preActiveChip: 'editierbar · noch nicht aktiv',
|
|
57
|
+
preActiveTitle:
|
|
58
|
+
'Published, aber noch nicht aktiv — Features, Quotas und Preis können bis zum Aktivierungsdatum noch korrigiert werden',
|
|
59
|
+
publishDraftTitle: 'Draft veröffentlichen',
|
|
60
|
+
editFutureVersionTitle: 'Future-Version bearbeiten',
|
|
61
|
+
editDraftTitle: 'Draft bearbeiten',
|
|
62
|
+
endsAtTitle: 'Endet am {date}',
|
|
63
|
+
endsAtBadge: 'Endet {date}',
|
|
64
|
+
changeEndDateAction: 'Enddatum…',
|
|
65
|
+
terminateAction: 'Terminieren…',
|
|
66
|
+
empty: 'Noch keine Versionen — „Neue Draft-Version" oben rechts.',
|
|
67
|
+
publish: 'Publish',
|
|
68
|
+
viewDiff: 'Diff',
|
|
69
|
+
updatedToday: 'heute',
|
|
70
|
+
updatedDaysAgo: 'vor {days} Tagen',
|
|
71
|
+
updatedMonthsAgo: 'vor {months} Monaten',
|
|
72
|
+
updatedYearsAgo: 'vor {years} Jahren',
|
|
73
|
+
},
|
|
74
|
+
diff: {
|
|
75
|
+
title: 'Diff',
|
|
76
|
+
titleCompare: 'Diff v{from} → v{to}',
|
|
77
|
+
titleComponents: 'Komponenten · v{version}',
|
|
78
|
+
subOnPublish: 'Was sich beim Publish ändert',
|
|
79
|
+
subChanges: 'Änderungen v{from} → v{to}',
|
|
80
|
+
subInitialVersion: 'Initialversion · kein Vorgänger zum Vergleich',
|
|
81
|
+
noComparison: 'Kein Vergleich verfügbar',
|
|
82
|
+
kindAdded: 'Hinzugefügt',
|
|
83
|
+
kindRemoved: 'Entfernt',
|
|
84
|
+
kindChanged: 'Geändert',
|
|
85
|
+
tagNew: 'neu',
|
|
86
|
+
tagRemoved: 'entfernt',
|
|
87
|
+
tagChanged: 'geändert',
|
|
88
|
+
emptyText: 'v{selected} ist identisch zu v{predecessor}.',
|
|
89
|
+
noChangesDetected: 'Keine Änderungen erkannt.',
|
|
90
|
+
noComponentsTitle: 'Keine Komponenten',
|
|
91
|
+
noComponentsText: 'Diese Version enthält weder Features noch Quotas.',
|
|
92
|
+
sectionFeatures: 'Features · {count}',
|
|
93
|
+
sectionQuotas: 'Quotas · {count}',
|
|
94
|
+
sectionBundles: 'Bundles · {count}',
|
|
95
|
+
sectionLabelFeatures: 'Features',
|
|
96
|
+
sectionLabelQuotas: 'Quotas',
|
|
97
|
+
sectionLabelPrice: 'Preis',
|
|
98
|
+
priceLabel: 'Preis (Monat / Jahr)',
|
|
99
|
+
priceYearMonthLabel: 'Jahres- + Monatspreis',
|
|
100
|
+
pricePair: '{monthly} / Mo · {yearly} / J',
|
|
101
|
+
},
|
|
102
|
+
impact: {
|
|
103
|
+
subtitle: 'Wer ist betroffen, wenn die nächste Version published wird',
|
|
104
|
+
autoMigrate: '{count} auto-migrieren',
|
|
105
|
+
needReview: '{count} brauchen Review',
|
|
106
|
+
conflict: '{count} Konflikt',
|
|
107
|
+
stateAuto: 'auto',
|
|
108
|
+
stateReview: 'review',
|
|
109
|
+
stateConflict: 'Konflikt',
|
|
110
|
+
},
|
|
111
|
+
auditLog: {
|
|
112
|
+
title: 'Audit-Log',
|
|
113
|
+
subtitle: 'Letzte Änderungen an diesem Plan',
|
|
114
|
+
loading: 'Lade Audit-Log…',
|
|
115
|
+
today: 'heute · {time}',
|
|
116
|
+
},
|
|
117
|
+
terminateDialog: {
|
|
118
|
+
titleChangeEndDate: 'Enddatum ändern',
|
|
119
|
+
titleTerminate: 'Version terminieren',
|
|
120
|
+
bodyPlanPrefix: 'Plan',
|
|
121
|
+
bodyExpiry: '— v{version} wird am gewählten Datum auslaufen,',
|
|
122
|
+
bodyWithout: 'ohne',
|
|
123
|
+
bodySuffix:
|
|
124
|
+
'durch eine Nachfolge-Version ersetzt zu werden. Bestand-Subscriptions bleiben gebunden (Vertragsschutz P1); neue Buchungen sind ab diesem Datum nicht mehr möglich.',
|
|
125
|
+
dateLabel: 'Enddatum (YYYY-MM-DD)',
|
|
126
|
+
submit: 'Terminieren',
|
|
127
|
+
errorDateNotFuture: 'Das Datum muss in der Zukunft liegen.',
|
|
128
|
+
errorVersionNotLive:
|
|
129
|
+
'Diese Version ist nicht live (draft oder superseded) und kann nicht terminiert werden.',
|
|
130
|
+
errorNotImplemented:
|
|
131
|
+
'Backend unterstützt Terminate noch nicht — bitte API-Server neu bauen.',
|
|
132
|
+
errorFailed: 'Terminate fehlgeschlagen.',
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
header: {
|
|
137
|
+
noDescription: 'No description.',
|
|
138
|
+
nameEditHint: 'Draft · Enter saves · Esc cancels',
|
|
139
|
+
editNameTitle: 'Edit the plan name in the draft',
|
|
140
|
+
editNameAria: 'Edit plan name',
|
|
141
|
+
deletePlan: 'Delete plan',
|
|
142
|
+
deletePlanTitle: 'Delete plan (only without tenants and without published versions)',
|
|
143
|
+
clonePlan: 'Clone plan',
|
|
144
|
+
newDraftVersion: 'New draft version',
|
|
145
|
+
publishDraft: 'Publish draft v{version}',
|
|
146
|
+
backToList: 'Back to list',
|
|
147
|
+
viewInCatalog: 'View in catalog',
|
|
148
|
+
draftAlreadyOpen: 'There already is an open draft',
|
|
149
|
+
},
|
|
150
|
+
kpis: {
|
|
151
|
+
activeVersion: 'Active version',
|
|
152
|
+
activeSince: 'since {date}',
|
|
153
|
+
noPublishedVersion: 'no published version',
|
|
154
|
+
tenantImpact: 'Tenant impact',
|
|
155
|
+
tenantsOnPlan: 'Tenants on this plan',
|
|
156
|
+
versions: 'Versions',
|
|
157
|
+
versionsSummary: '{published} live/superseded',
|
|
158
|
+
versionsSummaryWithDrafts: '{published} live/superseded · {drafts} draft',
|
|
159
|
+
openDraft: 'Open draft',
|
|
160
|
+
noDraft: 'No draft',
|
|
161
|
+
readyToEdit: 'Ready to edit',
|
|
162
|
+
noOpenDraft: 'No draft version open',
|
|
163
|
+
createNewDraft: 'Create a new draft',
|
|
164
|
+
},
|
|
165
|
+
versions: {
|
|
166
|
+
title: 'Versions',
|
|
167
|
+
subtitle: 'Max. 1 open draft version per plan · Publishing sets the predecessor to',
|
|
168
|
+
newDraftButton: 'Draft v{version}',
|
|
169
|
+
timelineHint: 'Click a version to select it',
|
|
170
|
+
timelineSelectTitle: 'Select v{version} ({status})',
|
|
171
|
+
timelineDraftSuffix: ' · draft',
|
|
172
|
+
timelineNow: 'now',
|
|
173
|
+
colVersion: 'Version',
|
|
174
|
+
colValidity: 'Validity',
|
|
175
|
+
colPrice: 'Price',
|
|
176
|
+
colPricing: 'Pricing',
|
|
177
|
+
colEffect: 'Impact',
|
|
178
|
+
colImpact: 'Impact',
|
|
179
|
+
colChangeNote: 'Change note',
|
|
180
|
+
colChangeNoteShort: 'Change note',
|
|
181
|
+
validityPlanned: 'planned',
|
|
182
|
+
validityActive: 'active',
|
|
183
|
+
validityHistoric: 'historic',
|
|
184
|
+
perMonthUnit: '/ mo',
|
|
185
|
+
perYearUnit: '/ year',
|
|
186
|
+
tenants: 'Tenants',
|
|
187
|
+
preActiveChip: 'editable · not active yet',
|
|
188
|
+
preActiveTitle:
|
|
189
|
+
'Published but not active yet — features, quotas and price can still be corrected until the activation date',
|
|
190
|
+
publishDraftTitle: 'Publish draft',
|
|
191
|
+
editFutureVersionTitle: 'Edit future version',
|
|
192
|
+
editDraftTitle: 'Edit draft',
|
|
193
|
+
endsAtTitle: 'Ends on {date}',
|
|
194
|
+
endsAtBadge: 'Ends {date}',
|
|
195
|
+
changeEndDateAction: 'End date…',
|
|
196
|
+
terminateAction: 'Terminate…',
|
|
197
|
+
empty: 'No versions yet — use “New draft version” at the top right.',
|
|
198
|
+
publish: 'Publish',
|
|
199
|
+
viewDiff: 'Diff',
|
|
200
|
+
updatedToday: 'today',
|
|
201
|
+
updatedDaysAgo: '{days} days ago',
|
|
202
|
+
updatedMonthsAgo: '{months} months ago',
|
|
203
|
+
updatedYearsAgo: '{years} years ago',
|
|
204
|
+
},
|
|
205
|
+
diff: {
|
|
206
|
+
title: 'Diff',
|
|
207
|
+
titleCompare: 'Diff v{from} → v{to}',
|
|
208
|
+
titleComponents: 'Components · v{version}',
|
|
209
|
+
subOnPublish: 'What changes when publishing',
|
|
210
|
+
subChanges: 'Changes v{from} → v{to}',
|
|
211
|
+
subInitialVersion: 'Initial version · no predecessor to compare',
|
|
212
|
+
noComparison: 'No comparison available',
|
|
213
|
+
kindAdded: 'Added',
|
|
214
|
+
kindRemoved: 'Removed',
|
|
215
|
+
kindChanged: 'Changed',
|
|
216
|
+
tagNew: 'new',
|
|
217
|
+
tagRemoved: 'removed',
|
|
218
|
+
tagChanged: 'changed',
|
|
219
|
+
emptyText: 'v{selected} is identical to v{predecessor}.',
|
|
220
|
+
noChangesDetected: 'No changes detected.',
|
|
221
|
+
noComponentsTitle: 'No components',
|
|
222
|
+
noComponentsText: 'This version contains neither features nor quotas.',
|
|
223
|
+
sectionFeatures: 'Features · {count}',
|
|
224
|
+
sectionQuotas: 'Quotas · {count}',
|
|
225
|
+
sectionBundles: 'Bundles · {count}',
|
|
226
|
+
sectionLabelFeatures: 'Features',
|
|
227
|
+
sectionLabelQuotas: 'Quotas',
|
|
228
|
+
sectionLabelPrice: 'Price',
|
|
229
|
+
priceLabel: 'Price (month / year)',
|
|
230
|
+
priceYearMonthLabel: 'Yearly + monthly price',
|
|
231
|
+
pricePair: '{monthly} / mo · {yearly} / yr',
|
|
232
|
+
},
|
|
233
|
+
impact: {
|
|
234
|
+
subtitle: 'Who is affected once the next version is published',
|
|
235
|
+
autoMigrate: '{count} migrate automatically',
|
|
236
|
+
needReview: '{count} need review',
|
|
237
|
+
conflict: '{count} conflict',
|
|
238
|
+
stateAuto: 'auto',
|
|
239
|
+
stateReview: 'review',
|
|
240
|
+
stateConflict: 'Conflict',
|
|
241
|
+
},
|
|
242
|
+
auditLog: {
|
|
243
|
+
title: 'Audit log',
|
|
244
|
+
subtitle: 'Recent changes to this plan',
|
|
245
|
+
loading: 'Loading audit log…',
|
|
246
|
+
today: 'today · {time}',
|
|
247
|
+
},
|
|
248
|
+
terminateDialog: {
|
|
249
|
+
titleChangeEndDate: 'Change end date',
|
|
250
|
+
titleTerminate: 'Terminate version',
|
|
251
|
+
bodyPlanPrefix: 'Plan',
|
|
252
|
+
bodyExpiry: '— v{version} will expire on the selected date,',
|
|
253
|
+
bodyWithout: 'without',
|
|
254
|
+
bodySuffix:
|
|
255
|
+
'being replaced by a successor version. Existing subscriptions stay bound (contract protection P1); new bookings are no longer possible from that date on.',
|
|
256
|
+
dateLabel: 'End date (YYYY-MM-DD)',
|
|
257
|
+
submit: 'Terminate',
|
|
258
|
+
errorDateNotFuture: 'The date must be in the future.',
|
|
259
|
+
errorVersionNotLive:
|
|
260
|
+
'This version is not live (draft or superseded) and cannot be terminated.',
|
|
261
|
+
errorNotImplemented:
|
|
262
|
+
'The backend does not support terminate yet — please rebuild the API server.',
|
|
263
|
+
errorFailed: 'Terminate failed.',
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
);
|