New alert service

This commit is contained in:
Urtzi Alfaro
2025-12-05 20:07:01 +01:00
parent 1fe3a73549
commit 667e6e0404
393 changed files with 26002 additions and 61033 deletions

View File

@@ -14,73 +14,7 @@ export interface AlertI18nData {
message_params?: Record<string, any>;
}
export interface AlertTranslationResult {
title: string;
message: string;
isTranslated: boolean;
}
/**
* Translates alert title and message using i18n data from metadata
*
* @param alert - Alert object with title, message, and metadata
* @param t - i18next translation function
* @returns Translated or fallback title and message
*/
export function translateAlert(
alert: {
title: string;
message: string;
metadata?: Record<string, any>;
},
t: TFunction
): AlertTranslationResult {
// Extract i18n data from metadata
const i18nData = alert.metadata?.i18n as AlertI18nData | undefined;
// If no i18n data, return original title and message
if (!i18nData || (!i18nData.title_key && !i18nData.message_key)) {
return {
title: alert.title,
message: alert.message,
isTranslated: false,
};
}
// Translate title
let translatedTitle = alert.title;
if (i18nData.title_key) {
try {
const translated = t(i18nData.title_key, i18nData.title_params || {});
// Only use translation if it's not the key itself (i18next returns key if translation missing)
if (translated !== i18nData.title_key) {
translatedTitle = translated;
}
} catch (error) {
console.warn(`Failed to translate alert title with key: ${i18nData.title_key}`, error);
}
}
// Translate message
let translatedMessage = alert.message;
if (i18nData.message_key) {
try {
const translated = t(i18nData.message_key, i18nData.message_params || {});
// Only use translation if it's not the key itself
if (translated !== i18nData.message_key) {
translatedMessage = translated;
}
} catch (error) {
console.warn(`Failed to translate alert message with key: ${i18nData.message_key}`, error);
}
}
return {
title: translatedTitle,
message: translatedMessage,
isTranslated: true,
};
}
/**
* Translates alert title only
@@ -91,23 +25,20 @@ export function translateAlert(
*/
export function translateAlertTitle(
alert: {
title: string;
metadata?: Record<string, any>;
i18n?: AlertI18nData;
},
t: TFunction
): string {
const i18nData = alert.metadata?.i18n as AlertI18nData | undefined;
if (!i18nData?.title_key) {
return alert.title;
if (!alert.i18n?.title_key) {
return 'Alert';
}
try {
const translated = t(i18nData.title_key, i18nData.title_params || {});
return translated !== i18nData.title_key ? translated : alert.title;
const translated = t(alert.i18n.title_key, alert.i18n.title_params || {});
return translated !== alert.i18n.title_key ? translated : alert.i18n.title_key;
} catch (error) {
console.warn(`Failed to translate alert title with key: ${i18nData.title_key}`, error);
return alert.title;
console.warn(`Failed to translate alert title with key: ${alert.i18n.title_key}`, error);
return alert.i18n.title_key;
}
}
@@ -120,23 +51,20 @@ export function translateAlertTitle(
*/
export function translateAlertMessage(
alert: {
message: string;
metadata?: Record<string, any>;
i18n?: AlertI18nData;
},
t: TFunction
): string {
const i18nData = alert.metadata?.i18n as AlertI18nData | undefined;
if (!i18nData?.message_key) {
return alert.message;
if (!alert.i18n?.message_key) {
return 'No message';
}
try {
const translated = t(i18nData.message_key, i18nData.message_params || {});
return translated !== i18nData.message_key ? translated : alert.message;
const translated = t(alert.i18n.message_key, alert.i18n.message_params || {});
return translated !== alert.i18n.message_key ? translated : alert.i18n.message_key;
} catch (error) {
console.warn(`Failed to translate alert message with key: ${i18nData.message_key}`, error);
return alert.message;
console.warn(`Failed to translate alert message with key: ${alert.i18n.message_key}`, error);
return alert.i18n.message_key;
}
}
@@ -146,7 +74,8 @@ export function translateAlertMessage(
* @param alert - Alert object
* @returns True if i18n data is present
*/
export function hasI18nData(alert: { metadata?: Record<string, any> }): boolean {
const i18nData = alert.metadata?.i18n as AlertI18nData | undefined;
return !!(i18nData && (i18nData.title_key || i18nData.message_key));
export function hasI18nData(alert: {
i18n?: AlertI18nData;
}): boolean {
return !!(alert.i18n && (alert.i18n.title_key || alert.i18n.message_key));
}