This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user