@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,459 @@
|
|
|
1
|
+
import { defineMessages } from '../define.js';
|
|
2
|
+
|
|
3
|
+
export const bundlesMessages = defineMessages(
|
|
4
|
+
{
|
|
5
|
+
// Field labels and units shared by the create panel, the inline editor
|
|
6
|
+
// and the publish dialog.
|
|
7
|
+
fields: {
|
|
8
|
+
masterData: 'Stammdaten',
|
|
9
|
+
label: 'Label',
|
|
10
|
+
quotas: 'Quotas',
|
|
11
|
+
monthlyPrice: 'Monatspreis',
|
|
12
|
+
yearlyPrice: 'Jahrespreis',
|
|
13
|
+
perMonthUnit: '€/Mo',
|
|
14
|
+
perYearUnit: '€/Jahr',
|
|
15
|
+
validFrom: 'Gültig ab',
|
|
16
|
+
validUntil: 'Gültig bis',
|
|
17
|
+
validUntilOpen: 'offen',
|
|
18
|
+
planCompat: 'Kompatibel mit Plänen',
|
|
19
|
+
},
|
|
20
|
+
validation: {
|
|
21
|
+
validFromRequired: 'Gültig ab ist Pflicht.',
|
|
22
|
+
validUntilAfterValidFrom: 'Gültig bis muss nach Gültig ab liegen.',
|
|
23
|
+
monthlyPriceFormat: 'Monatspreis: Dezimal mit max. 2 Nachkommastellen.',
|
|
24
|
+
yearlyPriceFormat: 'Jahrespreis: Dezimal mit max. 2 Nachkommastellen.',
|
|
25
|
+
},
|
|
26
|
+
// BundlesPage — banners, confirms and toasts of the page shell.
|
|
27
|
+
page: {
|
|
28
|
+
loadError: 'Fehler beim Laden: {message}',
|
|
29
|
+
emptyBefore: 'Noch keine Bundles angelegt. Über',
|
|
30
|
+
emptyAfter:
|
|
31
|
+
'einen Bundle-Stamm anlegen, dann Features & Quotas in einer Draft-Version kuratieren.',
|
|
32
|
+
strictWarnings: '{count} Strict-Mode-Warnung(en) bei letzter Operation',
|
|
33
|
+
confirmSoftDelete:
|
|
34
|
+
"Bundle '{bundleKey}' wirklich soft-deleten? Bestand bleibt durch published BundleVersions geschützt.",
|
|
35
|
+
confirmDiscardVersion: 'Diese Draft-Version verwerfen? Der Inhalt geht verloren.',
|
|
36
|
+
},
|
|
37
|
+
header: {
|
|
38
|
+
title: 'Bundles',
|
|
39
|
+
subtitle:
|
|
40
|
+
'Produktgruppen aus Features & Quotas — verwendet in Plänen. Bundles werden im SuperAdmin kuratiert.',
|
|
41
|
+
displayLocale: 'Anzeige-Sprache',
|
|
42
|
+
newBundle: 'Neues Bundle',
|
|
43
|
+
reload: 'Liste neu laden',
|
|
44
|
+
},
|
|
45
|
+
filter: {
|
|
46
|
+
all: 'Alle Status',
|
|
47
|
+
live: 'Nur Live',
|
|
48
|
+
scheduled: 'Mit geplanter Version',
|
|
49
|
+
draft: 'Drafts',
|
|
50
|
+
superseded: 'Abgelöste',
|
|
51
|
+
retired: 'Retired',
|
|
52
|
+
},
|
|
53
|
+
kpis: {
|
|
54
|
+
total: 'Bundles gesamt',
|
|
55
|
+
totalSub: '{live} live · {scheduled} mit geplanter Version',
|
|
56
|
+
scheduled: 'Geplante Versionen',
|
|
57
|
+
scheduledSub: 'zukünftig aktiv · noch nicht verkaufbar',
|
|
58
|
+
drafts: 'Offene Drafts',
|
|
59
|
+
draftsSub: '{count} Bundle(s) ohne Publish',
|
|
60
|
+
translated: 'Mit Übersetzung',
|
|
61
|
+
translatedSub: '{count} aktive Sprache(n) im Projekt',
|
|
62
|
+
},
|
|
63
|
+
list: {
|
|
64
|
+
translationCount: '{count} Übersetzung(en)',
|
|
65
|
+
emptyNoMatch: 'Keine Bundles entsprechen der Suche.',
|
|
66
|
+
},
|
|
67
|
+
// Lifecycle status of a BundleVersion / of a bundle stem.
|
|
68
|
+
status: {
|
|
69
|
+
draft: {
|
|
70
|
+
label: 'Draft',
|
|
71
|
+
tooltip: 'Noch nicht veröffentlicht — frei editierbar',
|
|
72
|
+
},
|
|
73
|
+
live: {
|
|
74
|
+
label: 'Live',
|
|
75
|
+
tooltip: 'Aktive Version · verkaufbar · read-only (laufende Verträge)',
|
|
76
|
+
},
|
|
77
|
+
scheduled: {
|
|
78
|
+
label: 'Geplant',
|
|
79
|
+
tooltip: 'Zukünftig aktiv · noch nicht verkaufbar · frei editierbar',
|
|
80
|
+
},
|
|
81
|
+
superseded: {
|
|
82
|
+
label: 'Abgelöst',
|
|
83
|
+
tooltip: 'Durch neue Version ersetzt · Bestand bleibt',
|
|
84
|
+
},
|
|
85
|
+
retired: {
|
|
86
|
+
label: 'Retired',
|
|
87
|
+
tooltip: 'Bundle-Stamm wurde soft-deleted',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
// BundleDetailPanel — master data + translations of the open bundle.
|
|
91
|
+
detail: {
|
|
92
|
+
translations: 'Übersetzungen',
|
|
93
|
+
languageCount: '{count} Sprache(n)',
|
|
94
|
+
noTranslatableLocales:
|
|
95
|
+
'Keine weiteren Sprachen aktiv — werden im Marketing-Catalog aktiviert.',
|
|
96
|
+
fallbackFromDe: 'Fallback aus DE',
|
|
97
|
+
labelPlaceholder: 'Label (Fallback: „{label}“)',
|
|
98
|
+
descriptionPlaceholder: 'Beschreibung (Fallback aus DE)',
|
|
99
|
+
save: 'Stammdaten & Übersetzungen speichern',
|
|
100
|
+
noVersion:
|
|
101
|
+
'Noch keine Version. Lege eine neue Version an, um Features, Quotas & Pricing zu kuratieren.',
|
|
102
|
+
publishVersion: 'Diese Version publishen',
|
|
103
|
+
softDelete: 'Bundle soft-deleten',
|
|
104
|
+
},
|
|
105
|
+
// BundleCreatePanel — inline wizard for a new bundle (root + v1 draft).
|
|
106
|
+
create: {
|
|
107
|
+
title: 'Neues Bundle anlegen',
|
|
108
|
+
subtitle:
|
|
109
|
+
'Features & Quotas zu einem Add-On bündeln — bepreist und kompatibel mit ausgewählten Plänen.',
|
|
110
|
+
masterDataHint: 'Sichtbarer Name + technischer Key.',
|
|
111
|
+
labelPlaceholder: 'z. B. Communication Pro',
|
|
112
|
+
bundleKey: 'Bundle-Key',
|
|
113
|
+
bundleKeyHint: 'API-stabil · wird aus dem Label erzeugt',
|
|
114
|
+
errorKeyFormat: 'Nur A-Z, 0-9, Underscore; muss mit Buchstabe beginnen.',
|
|
115
|
+
errorKeyExists: 'Dieser Bundle-Key existiert bereits.',
|
|
116
|
+
descriptionPlaceholder:
|
|
117
|
+
'z. B. Kampagnen, WhatsApp und Korrespondenz für aktive Vereine.',
|
|
118
|
+
sectionPricing: 'v1 · Pricing & Gültigkeit',
|
|
119
|
+
pricingHint: 'Monats- & Jahrespreis sowie Datum, ab dem das Bundle verkaufbar wird.',
|
|
120
|
+
validFromImmediate: '✓ Bundle ist nach Anlage sofort live und verkaufbar.',
|
|
121
|
+
validFromScheduled: '⏳ Geplant — wird ab {date} verkaufbar.',
|
|
122
|
+
validFromHint: 'Pflicht beim Publish — kann auch nach Anlage gesetzt werden.',
|
|
123
|
+
planCompatHint:
|
|
124
|
+
'Mit welchen Plänen darf dieses Bundle als Add-On gebucht werden? Überschneidungen werden direkt markiert.',
|
|
125
|
+
sectionFeatures: 'Features im Bundle',
|
|
126
|
+
selectedOfTotal: '{selected} von {total} ausgewählt',
|
|
127
|
+
quotasOptional: 'optional',
|
|
128
|
+
quotasHint: 'Quotas, die das Bundle on top des Plans setzt.',
|
|
129
|
+
overlapWarningOne: '⚠ Überschneidung mit {count} Plan — bitte prüfen',
|
|
130
|
+
overlapWarningMany: '⚠ Überschneidung mit {count} Plänen — bitte prüfen',
|
|
131
|
+
summaryFeatureOne: 'Feature',
|
|
132
|
+
summaryFeatureMany: 'Features',
|
|
133
|
+
summaryQuotaOne: 'Quota',
|
|
134
|
+
summaryQuotaMany: 'Quotas',
|
|
135
|
+
summaryPlanCompat: 'Plan-Kompat.',
|
|
136
|
+
submitting: 'Lege an …',
|
|
137
|
+
submit: 'Bundle anlegen',
|
|
138
|
+
},
|
|
139
|
+
// BundleVersionStrip — tab bar across all versions of a bundle.
|
|
140
|
+
versionStrip: {
|
|
141
|
+
label: 'Versionen',
|
|
142
|
+
perMonth: '/ Mo',
|
|
143
|
+
addVersion: 'Neue Version',
|
|
144
|
+
addTooltip: 'Neue, zukünftige Version anlegen',
|
|
145
|
+
addDisabledTooltip:
|
|
146
|
+
'Bundle hat bereits eine Draft-Version — erst publishen oder verwerfen',
|
|
147
|
+
},
|
|
148
|
+
// BundleStatusBanner — one sentence per lifecycle status; the version
|
|
149
|
+
// number and the status word stay bold in the markup, so the sentence
|
|
150
|
+
// is split around them.
|
|
151
|
+
statusBanner: {
|
|
152
|
+
is: 'ist',
|
|
153
|
+
live: 'live',
|
|
154
|
+
liveTail: 'seit {date} — wird aktuell als Add-On angeboten.',
|
|
155
|
+
liveWarning:
|
|
156
|
+
'Inhalt & Preis sind read-only (laufende Verträge). Für Änderungen eine neue Version anlegen.',
|
|
157
|
+
scheduled: 'geplant',
|
|
158
|
+
scheduledTail: 'für {date} — wird ab dann verkaufbar.',
|
|
159
|
+
scheduledOk: 'Frei editierbar bis dahin.',
|
|
160
|
+
superseded: 'abgelöst',
|
|
161
|
+
supersededTail:
|
|
162
|
+
'({from} – {until}) — wird nicht mehr angeboten, Bestand bleibt für Abrechnung erhalten.',
|
|
163
|
+
draft: 'Draft',
|
|
164
|
+
draftTail: '— noch nicht published, frei editierbar.',
|
|
165
|
+
discardTooltip: 'Geplante Version verwerfen',
|
|
166
|
+
},
|
|
167
|
+
// BundleVersionInlineEditor — features/quotas/pricing of one version.
|
|
168
|
+
editor: {
|
|
169
|
+
overlapOne:
|
|
170
|
+
'Plan mit Überschneidung — Features/Quotas dieses Bundles sind im Plan bereits enthalten. Bitte vor Publish bereinigen.',
|
|
171
|
+
overlapMany:
|
|
172
|
+
'Pläne mit Überschneidung — Features/Quotas dieses Bundles sind im Plan bereits enthalten. Bitte vor Publish bereinigen.',
|
|
173
|
+
sectionFeatures: 'Features',
|
|
174
|
+
sectionPricing: 'Pricing',
|
|
175
|
+
pricingHint: 'Bundle-Preis · zusätzlich zum Plan',
|
|
176
|
+
yearlyEquivalent: '≈ {amount} €/Mo bei Jahresbuchung',
|
|
177
|
+
savings: '{percent} % sparen',
|
|
178
|
+
validityHint: 'validUntil automatisch (Auto-Sukzession)',
|
|
179
|
+
validUntilHint: 'wird beim Publish einer Nachfolge-Version automatisch gesetzt',
|
|
180
|
+
sectionMarketing: 'Marketing',
|
|
181
|
+
marketed: 'Im Public-Catalog vermarkten',
|
|
182
|
+
sectionChangeNote: 'Change-Note',
|
|
183
|
+
changeNoteRequired: 'Pflicht beim Publish',
|
|
184
|
+
changeNotePlaceholder: 'z. B. Add WhatsApp + Preisanpassung +4 €',
|
|
185
|
+
selectedCount: '{count} ausgewählt',
|
|
186
|
+
saveTooltip: 'Änderungen speichern',
|
|
187
|
+
saveDisabledTooltip: 'Form ist invalide oder unverändert',
|
|
188
|
+
},
|
|
189
|
+
// BundlePlanCompatPicker — plans this bundle may be booked with.
|
|
190
|
+
featuresEditor: {
|
|
191
|
+
empty: 'Keine Features im Discovery-Snapshot.',
|
|
192
|
+
overlapTooltip: 'Feature ist im kompatiblen Plan bereits enthalten — Doppel-Berechnung',
|
|
193
|
+
removeTooltip: 'Aus Bundle entfernen',
|
|
194
|
+
addTooltip: 'In Bundle aufnehmen',
|
|
195
|
+
},
|
|
196
|
+
quotasEditor: {
|
|
197
|
+
empty: 'Keine Quotas im Discovery-Snapshot.',
|
|
198
|
+
removeTooltip: 'Quota entfernen',
|
|
199
|
+
addTooltip: 'Quota aufnehmen',
|
|
200
|
+
},
|
|
201
|
+
filterBar: {
|
|
202
|
+
searchPlaceholder: 'Bundle-Key oder Label suchen …',
|
|
203
|
+
},
|
|
204
|
+
compatPicker: {
|
|
205
|
+
hint: 'Pläne, mit denen dieses Bundle als Add-On gebucht werden kann. Features/Quotas, die der Plan bereits enthält, werden als Überschneidung markiert (Doppel-Berechnung).',
|
|
206
|
+
lockedTooltip: 'Live-Version ist read-only',
|
|
207
|
+
removeTooltip: 'Plan-Kompatibilität entfernen',
|
|
208
|
+
addTooltip: 'Plan-Kompatibilität setzen',
|
|
209
|
+
overlapHead: '⚠ Überschneidung',
|
|
210
|
+
overlapFeatures: 'Features:',
|
|
211
|
+
overlapQuotas: 'Quotas:',
|
|
212
|
+
empty: 'Keine Pläne vorhanden — der Plan-Stamm muss zuerst angelegt werden.',
|
|
213
|
+
summaryOne:
|
|
214
|
+
'Plan mit Überschneidung — Features/Quotas dieses Bundles sind im Plan bereits enthalten. Vor Publish entweder das Bundle oder den Plan bereinigen.',
|
|
215
|
+
summaryMany:
|
|
216
|
+
'Pläne mit Überschneidung — Features/Quotas dieses Bundles sind im Plan bereits enthalten. Vor Publish entweder das Bundle oder den Plan bereinigen.',
|
|
217
|
+
},
|
|
218
|
+
// BundleVersionPublishDialog — publish confirmation incl. diff review.
|
|
219
|
+
publishDialog: {
|
|
220
|
+
title: 'BundleVersion publishen',
|
|
221
|
+
bundleLabel: 'Bundle',
|
|
222
|
+
loadingDiff: 'Diff zur Vorgänger-Version wird geladen …',
|
|
223
|
+
strictWarnings: '{count} Strict-Mode-Warnung(en)',
|
|
224
|
+
allowZeroPrice: 'Preis 0,00 bewusst zulassen (kostenloses Bundle)',
|
|
225
|
+
allowZeroPriceHint:
|
|
226
|
+
'Standard: Publish mit explizitem Preis 0,00 wird blockiert (Seed-Schutz).',
|
|
227
|
+
changesVs: 'Änderungen gegenüber',
|
|
228
|
+
noPrevious: '— keine Vorgänger-Version (Erst-Veröffentlichung)',
|
|
229
|
+
noChanges: 'Keine Änderungen — die Versionen sind inhaltlich gleich.',
|
|
230
|
+
regressionTitle: 'Regressive Änderung erkannt.',
|
|
231
|
+
regressionBody:
|
|
232
|
+
'Diese Version entfernt Features, senkt Quotas oder erhöht Preise. Vertragsschutz P3 (SPEC.md §6) verlangt Bestand-Opt-in. Publish erfordert deinen ausdrücklichen',
|
|
233
|
+
regressionBodySuffix: '-Confirm.',
|
|
234
|
+
forceRegressive: 'Trotzdem publishen',
|
|
235
|
+
confirm: 'Publishen',
|
|
236
|
+
confirmRegressive: 'Regressiv publishen',
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
fields: {
|
|
241
|
+
masterData: 'Master data',
|
|
242
|
+
label: 'Label',
|
|
243
|
+
quotas: 'Quotas',
|
|
244
|
+
monthlyPrice: 'Monthly price',
|
|
245
|
+
yearlyPrice: 'Yearly price',
|
|
246
|
+
perMonthUnit: '€/mo',
|
|
247
|
+
perYearUnit: '€/yr',
|
|
248
|
+
validFrom: 'Valid from',
|
|
249
|
+
validUntil: 'Valid until',
|
|
250
|
+
validUntilOpen: 'open',
|
|
251
|
+
planCompat: 'Compatible with plans',
|
|
252
|
+
},
|
|
253
|
+
validation: {
|
|
254
|
+
validFromRequired: '"Valid from" is required.',
|
|
255
|
+
validUntilAfterValidFrom: '"Valid until" must be after "valid from".',
|
|
256
|
+
monthlyPriceFormat: 'Monthly price: decimal with at most 2 decimal places.',
|
|
257
|
+
yearlyPriceFormat: 'Yearly price: decimal with at most 2 decimal places.',
|
|
258
|
+
},
|
|
259
|
+
page: {
|
|
260
|
+
loadError: 'Failed to load: {message}',
|
|
261
|
+
emptyBefore: 'No bundles created yet. Use',
|
|
262
|
+
emptyAfter:
|
|
263
|
+
'to create a bundle master record, then curate features & quotas in a draft version.',
|
|
264
|
+
strictWarnings: '{count} strict mode warning(s) in the last operation',
|
|
265
|
+
confirmSoftDelete:
|
|
266
|
+
"Really soft-delete bundle '{bundleKey}'? Existing contracts stay protected by published bundle versions.",
|
|
267
|
+
confirmDiscardVersion: 'Discard this draft version? Its content will be lost.',
|
|
268
|
+
},
|
|
269
|
+
header: {
|
|
270
|
+
title: 'Bundles',
|
|
271
|
+
subtitle:
|
|
272
|
+
'Product groups made of features & quotas — used in plans. Bundles are curated in the SuperAdmin.',
|
|
273
|
+
displayLocale: 'Display language',
|
|
274
|
+
newBundle: 'New bundle',
|
|
275
|
+
reload: 'Reload list',
|
|
276
|
+
},
|
|
277
|
+
filter: {
|
|
278
|
+
all: 'All statuses',
|
|
279
|
+
live: 'Live only',
|
|
280
|
+
scheduled: 'With scheduled version',
|
|
281
|
+
draft: 'Drafts',
|
|
282
|
+
superseded: 'Superseded',
|
|
283
|
+
retired: 'Retired',
|
|
284
|
+
},
|
|
285
|
+
kpis: {
|
|
286
|
+
total: 'Bundles total',
|
|
287
|
+
totalSub: '{live} live · {scheduled} with a scheduled version',
|
|
288
|
+
scheduled: 'Scheduled versions',
|
|
289
|
+
scheduledSub: 'active in the future · not sellable yet',
|
|
290
|
+
drafts: 'Open drafts',
|
|
291
|
+
draftsSub: '{count} bundle(s) without a publish',
|
|
292
|
+
translated: 'With translation',
|
|
293
|
+
translatedSub: '{count} active language(s) in the project',
|
|
294
|
+
},
|
|
295
|
+
list: {
|
|
296
|
+
translationCount: '{count} translation(s)',
|
|
297
|
+
emptyNoMatch: 'No bundles match the search.',
|
|
298
|
+
},
|
|
299
|
+
status: {
|
|
300
|
+
draft: {
|
|
301
|
+
label: 'Draft',
|
|
302
|
+
tooltip: 'Not published yet — freely editable',
|
|
303
|
+
},
|
|
304
|
+
live: {
|
|
305
|
+
label: 'Live',
|
|
306
|
+
tooltip: 'Active version · sellable · read-only (running contracts)',
|
|
307
|
+
},
|
|
308
|
+
scheduled: {
|
|
309
|
+
label: 'Scheduled',
|
|
310
|
+
tooltip: 'Active in the future · not sellable yet · freely editable',
|
|
311
|
+
},
|
|
312
|
+
superseded: {
|
|
313
|
+
label: 'Superseded',
|
|
314
|
+
tooltip: 'Replaced by a newer version · existing contracts remain',
|
|
315
|
+
},
|
|
316
|
+
retired: {
|
|
317
|
+
label: 'Retired',
|
|
318
|
+
tooltip: 'Bundle master record was soft-deleted',
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
detail: {
|
|
322
|
+
translations: 'Translations',
|
|
323
|
+
languageCount: '{count} language(s)',
|
|
324
|
+
noTranslatableLocales:
|
|
325
|
+
'No further languages active — they are enabled in the marketing catalog.',
|
|
326
|
+
fallbackFromDe: 'Fallback from DE',
|
|
327
|
+
labelPlaceholder: 'Label (fallback: "{label}")',
|
|
328
|
+
descriptionPlaceholder: 'Description (fallback from DE)',
|
|
329
|
+
save: 'Save master data & translations',
|
|
330
|
+
noVersion: 'No version yet. Create a new version to curate features, quotas & pricing.',
|
|
331
|
+
publishVersion: 'Publish this version',
|
|
332
|
+
softDelete: 'Soft-delete bundle',
|
|
333
|
+
},
|
|
334
|
+
create: {
|
|
335
|
+
title: 'Create new bundle',
|
|
336
|
+
subtitle:
|
|
337
|
+
'Bundle features & quotas into an add-on — priced and compatible with selected plans.',
|
|
338
|
+
masterDataHint: 'Visible name + technical key.',
|
|
339
|
+
labelPlaceholder: 'e.g. Communication Pro',
|
|
340
|
+
bundleKey: 'Bundle key',
|
|
341
|
+
bundleKeyHint: 'API-stable · derived from the label',
|
|
342
|
+
errorKeyFormat: 'Only A-Z, 0-9, underscore; must start with a letter.',
|
|
343
|
+
errorKeyExists: 'This bundle key already exists.',
|
|
344
|
+
descriptionPlaceholder: 'e.g. Campaigns, WhatsApp and correspondence for active clubs.',
|
|
345
|
+
sectionPricing: 'v1 · pricing & validity',
|
|
346
|
+
pricingHint:
|
|
347
|
+
'Monthly & yearly price plus the date from which the bundle becomes sellable.',
|
|
348
|
+
validFromImmediate: '✓ The bundle is live and sellable right after creation.',
|
|
349
|
+
validFromScheduled: '⏳ Scheduled — becomes sellable on {date}.',
|
|
350
|
+
validFromHint: 'Required when publishing — can also be set after creation.',
|
|
351
|
+
planCompatHint:
|
|
352
|
+
'Which plans may this bundle be booked with as an add-on? Overlaps are flagged right away.',
|
|
353
|
+
sectionFeatures: 'Features in the bundle',
|
|
354
|
+
selectedOfTotal: '{selected} of {total} selected',
|
|
355
|
+
quotasOptional: 'optional',
|
|
356
|
+
quotasHint: 'Quotas the bundle adds on top of the plan.',
|
|
357
|
+
overlapWarningOne: '⚠ Overlap with {count} plan — please review',
|
|
358
|
+
overlapWarningMany: '⚠ Overlap with {count} plans — please review',
|
|
359
|
+
summaryFeatureOne: 'feature',
|
|
360
|
+
summaryFeatureMany: 'features',
|
|
361
|
+
summaryQuotaOne: 'quota',
|
|
362
|
+
summaryQuotaMany: 'quotas',
|
|
363
|
+
summaryPlanCompat: 'plan compat.',
|
|
364
|
+
submitting: 'Creating …',
|
|
365
|
+
submit: 'Create bundle',
|
|
366
|
+
},
|
|
367
|
+
versionStrip: {
|
|
368
|
+
label: 'Versions',
|
|
369
|
+
perMonth: '/ mo',
|
|
370
|
+
addVersion: 'New version',
|
|
371
|
+
addTooltip: 'Create a new, future version',
|
|
372
|
+
addDisabledTooltip: 'Bundle already has a draft version — publish or discard it first',
|
|
373
|
+
},
|
|
374
|
+
statusBanner: {
|
|
375
|
+
is: 'is',
|
|
376
|
+
live: 'live',
|
|
377
|
+
liveTail: 'since {date} — currently offered as an add-on.',
|
|
378
|
+
liveWarning:
|
|
379
|
+
'Content & price are read-only (running contracts). Create a new version to make changes.',
|
|
380
|
+
scheduled: 'scheduled',
|
|
381
|
+
scheduledTail: 'for {date} — becomes sellable from then on.',
|
|
382
|
+
scheduledOk: 'Freely editable until then.',
|
|
383
|
+
superseded: 'superseded',
|
|
384
|
+
supersededTail:
|
|
385
|
+
'({from} – {until}) — no longer offered, existing contracts remain for billing.',
|
|
386
|
+
draft: 'Draft',
|
|
387
|
+
draftTail: '— not published yet, freely editable.',
|
|
388
|
+
discardTooltip: 'Discard scheduled version',
|
|
389
|
+
},
|
|
390
|
+
editor: {
|
|
391
|
+
overlapOne:
|
|
392
|
+
'plan with an overlap — features/quotas of this bundle are already contained in the plan. Please clean up before publishing.',
|
|
393
|
+
overlapMany:
|
|
394
|
+
'plans with an overlap — features/quotas of this bundle are already contained in the plan. Please clean up before publishing.',
|
|
395
|
+
sectionFeatures: 'Features',
|
|
396
|
+
sectionPricing: 'Pricing',
|
|
397
|
+
pricingHint: 'Bundle price · on top of the plan',
|
|
398
|
+
yearlyEquivalent: '≈ {amount} €/mo when booked yearly',
|
|
399
|
+
savings: 'save {percent} %',
|
|
400
|
+
validityHint: 'validUntil automatic (auto succession)',
|
|
401
|
+
validUntilHint: 'set automatically when a successor version is published',
|
|
402
|
+
sectionMarketing: 'Marketing',
|
|
403
|
+
marketed: 'Market in the public catalog',
|
|
404
|
+
sectionChangeNote: 'Change note',
|
|
405
|
+
changeNoteRequired: 'Required when publishing',
|
|
406
|
+
changeNotePlaceholder: 'e.g. Add WhatsApp + price adjustment +4 €',
|
|
407
|
+
selectedCount: '{count} selected',
|
|
408
|
+
saveTooltip: 'Save changes',
|
|
409
|
+
saveDisabledTooltip: 'Form is invalid or unchanged',
|
|
410
|
+
},
|
|
411
|
+
featuresEditor: {
|
|
412
|
+
empty: 'No features in the discovery snapshot.',
|
|
413
|
+
overlapTooltip: 'Feature is already included in the compatible plan — double counting',
|
|
414
|
+
removeTooltip: 'Remove from bundle',
|
|
415
|
+
addTooltip: 'Add to bundle',
|
|
416
|
+
},
|
|
417
|
+
quotasEditor: {
|
|
418
|
+
empty: 'No quotas in the discovery snapshot.',
|
|
419
|
+
removeTooltip: 'Remove quota',
|
|
420
|
+
addTooltip: 'Add quota',
|
|
421
|
+
},
|
|
422
|
+
filterBar: {
|
|
423
|
+
searchPlaceholder: 'Search bundle key or label …',
|
|
424
|
+
},
|
|
425
|
+
compatPicker: {
|
|
426
|
+
hint: 'Plans this bundle can be booked with as an add-on. Features/quotas the plan already contains are flagged as an overlap (double counting).',
|
|
427
|
+
lockedTooltip: 'Live version is read-only',
|
|
428
|
+
removeTooltip: 'Remove plan compatibility',
|
|
429
|
+
addTooltip: 'Set plan compatibility',
|
|
430
|
+
overlapHead: '⚠ Overlap',
|
|
431
|
+
overlapFeatures: 'Features:',
|
|
432
|
+
overlapQuotas: 'Quotas:',
|
|
433
|
+
empty: 'No plans available — the plan master record has to be created first.',
|
|
434
|
+
summaryOne:
|
|
435
|
+
'plan with an overlap — features/quotas of this bundle are already contained in the plan. Clean up either the bundle or the plan before publishing.',
|
|
436
|
+
summaryMany:
|
|
437
|
+
'plans with an overlap — features/quotas of this bundle are already contained in the plan. Clean up either the bundle or the plan before publishing.',
|
|
438
|
+
},
|
|
439
|
+
publishDialog: {
|
|
440
|
+
title: 'Publish bundle version',
|
|
441
|
+
bundleLabel: 'Bundle',
|
|
442
|
+
loadingDiff: 'Loading the diff against the previous version …',
|
|
443
|
+
strictWarnings: '{count} strict mode warning(s)',
|
|
444
|
+
allowZeroPrice: 'Deliberately allow price 0.00 (free bundle)',
|
|
445
|
+
allowZeroPriceHint:
|
|
446
|
+
'Default: publishing with an explicit price of 0.00 is blocked (seed protection).',
|
|
447
|
+
changesVs: 'Changes compared to',
|
|
448
|
+
noPrevious: '— no previous version (first publication)',
|
|
449
|
+
noChanges: 'No changes — the versions are identical in content.',
|
|
450
|
+
regressionTitle: 'Regressive change detected.',
|
|
451
|
+
regressionBody:
|
|
452
|
+
'This version removes features, lowers quotas or increases prices. Contract protection P3 (SPEC.md §6) requires an opt-in from existing contracts. Publishing requires your explicit',
|
|
453
|
+
regressionBodySuffix: ' confirmation.',
|
|
454
|
+
forceRegressive: 'Publish anyway',
|
|
455
|
+
confirm: 'Publish',
|
|
456
|
+
confirmRegressive: 'Publish regressively',
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
);
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// Shared terms used across pages and components. Area namespaces must not
|
|
2
|
+
// duplicate these — check here before adding a key elsewhere.
|
|
3
|
+
|
|
4
|
+
import { defineMessages } from '../define.js';
|
|
5
|
+
|
|
6
|
+
export const commonMessages = defineMessages(
|
|
7
|
+
{
|
|
8
|
+
save: 'Speichern',
|
|
9
|
+
cancel: 'Abbrechen',
|
|
10
|
+
close: 'Schließen',
|
|
11
|
+
delete: 'Löschen',
|
|
12
|
+
edit: 'Bearbeiten',
|
|
13
|
+
create: 'Anlegen',
|
|
14
|
+
back: 'Zurück',
|
|
15
|
+
next: 'Weiter',
|
|
16
|
+
confirm: 'Bestätigen',
|
|
17
|
+
apply: 'Übernehmen',
|
|
18
|
+
retry: 'Erneut versuchen',
|
|
19
|
+
reload: 'Neu laden',
|
|
20
|
+
search: 'Suchen',
|
|
21
|
+
reset: 'Zurücksetzen',
|
|
22
|
+
copy: 'Kopieren',
|
|
23
|
+
copied: 'Kopiert',
|
|
24
|
+
show: 'Anzeigen',
|
|
25
|
+
hide: 'Ausblenden',
|
|
26
|
+
open: 'Öffnen',
|
|
27
|
+
loading: 'Lade …',
|
|
28
|
+
saving: 'Speichere …',
|
|
29
|
+
loadingData: 'Daten werden geladen…',
|
|
30
|
+
error: 'Fehler',
|
|
31
|
+
errorLoadFailed: 'Laden fehlgeschlagen',
|
|
32
|
+
errorSaveFailed: 'Speichern fehlgeschlagen',
|
|
33
|
+
yes: 'Ja',
|
|
34
|
+
no: 'Nein',
|
|
35
|
+
none: 'Keine',
|
|
36
|
+
all: 'Alle',
|
|
37
|
+
total: 'Gesamt',
|
|
38
|
+
unknown: 'Unbekannt',
|
|
39
|
+
active: 'Aktiv',
|
|
40
|
+
inactive: 'Inaktiv',
|
|
41
|
+
archived: 'Archiviert',
|
|
42
|
+
draft: 'Entwurf',
|
|
43
|
+
published: 'Veröffentlicht',
|
|
44
|
+
name: 'Name',
|
|
45
|
+
description: 'Beschreibung',
|
|
46
|
+
status: 'Status',
|
|
47
|
+
actions: 'Aktionen',
|
|
48
|
+
details: 'Details',
|
|
49
|
+
date: 'Datum',
|
|
50
|
+
from: 'Von',
|
|
51
|
+
to: 'Bis',
|
|
52
|
+
createdAt: 'Angelegt am',
|
|
53
|
+
updatedAt: 'Geändert am',
|
|
54
|
+
required: 'Erforderlich',
|
|
55
|
+
optional: 'Optional',
|
|
56
|
+
note: 'Hinweis',
|
|
57
|
+
notes: 'Hinweise',
|
|
58
|
+
warning: 'Warnung',
|
|
59
|
+
warnings: 'Warnungen',
|
|
60
|
+
perMonth: 'pro Monat',
|
|
61
|
+
perYear: 'pro Jahr',
|
|
62
|
+
monthly: 'Monatlich',
|
|
63
|
+
yearly: 'Jährlich',
|
|
64
|
+
discard: 'Verwerfen',
|
|
65
|
+
remove: 'Entfernen',
|
|
66
|
+
type: 'Typ',
|
|
67
|
+
icon: 'Icon',
|
|
68
|
+
validity: 'Gültigkeit',
|
|
69
|
+
general: 'Allgemein',
|
|
70
|
+
sortOrder: 'Sortier-Reihenfolge',
|
|
71
|
+
expired: 'Abgelaufen',
|
|
72
|
+
unlimited: 'unbegrenzt',
|
|
73
|
+
both: 'Beide',
|
|
74
|
+
createFailed: 'Anlegen fehlgeschlagen',
|
|
75
|
+
noChanges: 'Keine Änderungen',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
save: 'Save',
|
|
79
|
+
cancel: 'Cancel',
|
|
80
|
+
close: 'Close',
|
|
81
|
+
delete: 'Delete',
|
|
82
|
+
edit: 'Edit',
|
|
83
|
+
create: 'Create',
|
|
84
|
+
back: 'Back',
|
|
85
|
+
next: 'Next',
|
|
86
|
+
confirm: 'Confirm',
|
|
87
|
+
apply: 'Apply',
|
|
88
|
+
retry: 'Retry',
|
|
89
|
+
reload: 'Reload',
|
|
90
|
+
search: 'Search',
|
|
91
|
+
reset: 'Reset',
|
|
92
|
+
copy: 'Copy',
|
|
93
|
+
copied: 'Copied',
|
|
94
|
+
show: 'Show',
|
|
95
|
+
hide: 'Hide',
|
|
96
|
+
open: 'Open',
|
|
97
|
+
loading: 'Loading …',
|
|
98
|
+
saving: 'Saving …',
|
|
99
|
+
loadingData: 'Loading data…',
|
|
100
|
+
error: 'Error',
|
|
101
|
+
errorLoadFailed: 'Failed to load',
|
|
102
|
+
errorSaveFailed: 'Failed to save',
|
|
103
|
+
yes: 'Yes',
|
|
104
|
+
no: 'No',
|
|
105
|
+
none: 'None',
|
|
106
|
+
all: 'All',
|
|
107
|
+
total: 'Total',
|
|
108
|
+
unknown: 'Unknown',
|
|
109
|
+
active: 'Active',
|
|
110
|
+
inactive: 'Inactive',
|
|
111
|
+
archived: 'Archived',
|
|
112
|
+
draft: 'Draft',
|
|
113
|
+
published: 'Published',
|
|
114
|
+
name: 'Name',
|
|
115
|
+
description: 'Description',
|
|
116
|
+
status: 'Status',
|
|
117
|
+
actions: 'Actions',
|
|
118
|
+
details: 'Details',
|
|
119
|
+
date: 'Date',
|
|
120
|
+
from: 'From',
|
|
121
|
+
to: 'To',
|
|
122
|
+
createdAt: 'Created at',
|
|
123
|
+
updatedAt: 'Updated at',
|
|
124
|
+
required: 'Required',
|
|
125
|
+
optional: 'Optional',
|
|
126
|
+
note: 'Note',
|
|
127
|
+
notes: 'Notes',
|
|
128
|
+
warning: 'Warning',
|
|
129
|
+
warnings: 'Warnings',
|
|
130
|
+
perMonth: 'per month',
|
|
131
|
+
perYear: 'per year',
|
|
132
|
+
monthly: 'Monthly',
|
|
133
|
+
yearly: 'Yearly',
|
|
134
|
+
discard: 'Discard',
|
|
135
|
+
remove: 'Remove',
|
|
136
|
+
type: 'Type',
|
|
137
|
+
icon: 'Icon',
|
|
138
|
+
validity: 'Validity',
|
|
139
|
+
general: 'General',
|
|
140
|
+
sortOrder: 'Sort order',
|
|
141
|
+
expired: 'Expired',
|
|
142
|
+
unlimited: 'unlimited',
|
|
143
|
+
both: 'Both',
|
|
144
|
+
createFailed: 'Creation failed',
|
|
145
|
+
noChanges: 'No changes',
|
|
146
|
+
},
|
|
147
|
+
);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineMessages } from '../define.js';
|
|
2
|
+
|
|
3
|
+
export const dashboardMessages = defineMessages(
|
|
4
|
+
{
|
|
5
|
+
title: 'Dashboard',
|
|
6
|
+
emptyKpiCards: 'Keine KPI-Cards im Manifest deklariert.',
|
|
7
|
+
shortcutsTitle: 'Shortcuts',
|
|
8
|
+
deltaVsPreviousPeriod: '{delta} ggü. Vorperiode',
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
title: 'Dashboard',
|
|
12
|
+
emptyKpiCards: 'No KPI cards declared in the manifest.',
|
|
13
|
+
shortcutsTitle: 'Shortcuts',
|
|
14
|
+
deltaVsPreviousPeriod: '{delta} vs. previous period',
|
|
15
|
+
},
|
|
16
|
+
);
|