Enhance message formatting and localization handling in MessagesDialog.vue

- Updated the formatBody method to support JSON formatted translation keys and improve key normalization for i18n.
- Ensured that keys are correctly prefixed with the "falukant.notifications." namespace when necessary, enhancing translation accuracy.
This commit is contained in:
Torsten Schulz (local)
2025-12-01 11:26:46 +01:00
parent 17d4d21620
commit 7e0691eea3

View File

@@ -118,24 +118,42 @@ export default {
} catch { return dt; } } catch { return dt; }
}, },
formatBody(n) { formatBody(n) {
let key = n.tr; let raw = n.tr || '';
let key = raw;
let params = {}; 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('}')) { if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
try { try {
const parsed = JSON.parse(trimmed); const parsed = JSON.parse(trimmed);
if (parsed && parsed.tr) { if (parsed && parsed.tr) {
raw = parsed.tr;
key = parsed.tr; key = parsed.tr;
params = { ...parsed }; params = { ...parsed };
delete params.tr; delete params.tr;
} }
} catch (e) { } 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: { computed: {
@@ -168,3 +186,4 @@ export default {
.pagination button { padding: .25em .6em; } .pagination button { padding: .25em .6em; }
.pagination input[type="number"] { width: 4em; text-align: right; } .pagination input[type="number"] { width: 4em; text-align: right; }
</style> </style>