32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
/**
|
|
* Traduce dinámicamente cualquier objeto de la base de datos (Prisma)
|
|
* leyendo su campo `translationsJson`.
|
|
* * @param item El objeto original de la base de datos (ej: una Noticia o Aplicación)
|
|
* @param locale El idioma actual de la URL (ej: 'it', 'es', 'vec')
|
|
* @returns El mismo objeto, pero con sus campos sobreescritos en el idioma correcto.
|
|
*/
|
|
export function getLocalizedData<T extends { translationsJson?: string | null }>(item: T, locale: string): T {
|
|
// 1. Si el idioma es el maestro (inglés) o no hay traducciones, devolvemos el original
|
|
if (locale === 'en' || !item.translationsJson) {
|
|
return item;
|
|
}
|
|
|
|
try {
|
|
// 2. Desempaquetamos el JSON de traducciones
|
|
const translations = JSON.parse(item.translationsJson);
|
|
|
|
// 3. Buscamos si existe el idioma que pide el usuario (ej: translations['it'])
|
|
const localeData = translations[locale];
|
|
|
|
if (localeData) {
|
|
// 4. Fusionamos el objeto original con las traducciones.
|
|
// Lo que esté traducido sobrescribe al original. Lo que no, queda en inglés.
|
|
return { ...item, ...localeData };
|
|
}
|
|
} catch (error) {
|
|
console.error("Error parsing translations JSON for item:", item, error);
|
|
}
|
|
|
|
// Fallback de seguridad: Si algo falla, siempre mostramos inglés
|
|
return item;
|
|
} |