diff --git a/frontend/src/components/falukant/MessagesDialog.vue b/frontend/src/components/falukant/MessagesDialog.vue index eff9fde..44de7bf 100644 --- a/frontend/src/components/falukant/MessagesDialog.vue +++ b/frontend/src/components/falukant/MessagesDialog.vue @@ -118,24 +118,42 @@ export default { } catch { return dt; } }, formatBody(n) { - let key = n.tr; + let raw = n.tr || ''; + let key = raw; let params = {}; - if (typeof key === 'string') { - const trimmed = key.trim(); + + // 1) JSON-Format unterstützen: {"tr":"production.overproduction","value":21} + if (typeof raw === 'string') { + const trimmed = raw.trim(); if (trimmed.startsWith('{') && trimmed.endsWith('}')) { try { const parsed = JSON.parse(trimmed); if (parsed && parsed.tr) { + raw = parsed.tr; key = parsed.tr; params = { ...parsed }; delete params.tr; } } catch (e) { - // Fallback: ignore parse error and use raw key + // bei Parse-Fehler einfach weiter unten mit dem Rohwert arbeiten } } } - return this.$t('falukant.notifications.' + key, params); + + // 2) Schlüssel normalisieren: + // - wenn bereits ein voller i18n-Key wie "falukant.notifications.production.overproduction", + // dann direkt verwenden + // - sonst in den Namespace "falukant.notifications." hängen + if (typeof key === 'string') { + const trimmedKey = key.trim(); + if (trimmedKey.startsWith('falukant.')) { + key = trimmedKey; + } else { + key = 'falukant.notifications.' + trimmedKey; + } + } + + return this.$t(key, params); } }, computed: { @@ -168,3 +186,4 @@ export default { .pagination button { padding: .25em .6em; } .pagination input[type="number"] { width: 4em; text-align: right; } +