import { getLocalizedMessage } from '@/lib/i18n-loader'; import type { NavTranslations, FooterTranslations, HeroTranslations, AboutTranslations, ProjectsTranslations, ContactTranslations, ConsentTranslations, } from '@/types/translations'; /** * Lädt alle Translations für eine Section aus Directus * Nutzt optimierte Batch-Abfragen wo möglich */ export async function getNavTranslations(locale: string): Promise { const [home, about, projects, contact] = await Promise.all([ getLocalizedMessage('nav.home', locale), getLocalizedMessage('nav.about', locale), getLocalizedMessage('nav.projects', locale), getLocalizedMessage('nav.contact', locale), ]); return { home, about, projects, contact }; } export async function getFooterTranslations(locale: string): Promise { const [role, description, privacy, imprint, copyright, madeWith, resetConsent] = await Promise.all([ getLocalizedMessage('footer.role', locale), getLocalizedMessage('footer.description', locale), getLocalizedMessage('footer.links.privacy', locale), getLocalizedMessage('footer.links.imprint', locale), getLocalizedMessage('footer.copyright', locale), getLocalizedMessage('footer.madeWith', locale), getLocalizedMessage('footer.resetConsent', locale), ]); return { role, description, links: { privacy, imprint }, copyright, madeWith, resetConsent, }; } export async function getHeroTranslations(locale: string): Promise { const keys = [ 'home.hero.greeting', 'home.hero.name', 'home.hero.role', 'home.hero.description', 'home.hero.ctaWork', 'home.hero.ctaContact', 'home.hero.features.f1', 'home.hero.features.f2', 'home.hero.features.f3', 'home.hero.scrollDown', ]; const values = await Promise.all(keys.map(key => getLocalizedMessage(key, locale))); return { greeting: values[0], name: values[1], role: values[2], description: values[3], cta: { projects: values[4], contact: values[5], }, features: { f1: values[6], f2: values[7], f3: values[8], }, scrollDown: values[9], }; } export async function getAboutTranslations(locale: string): Promise { // Diese Keys sind NICHT korrekt - wir nutzen nur für Type Compatibility // Die About Component nutzt actually: title, p1, p2, p3, hobbiesTitle, hobbies.*, techStackTitle, techStack.* // Lade alle benötigten Keys const keys = [ 'home.about.title', 'home.about.description', 'home.about.techStack.title', 'home.about.techStack.categories.frontendMobile', 'home.about.techStack.categories.backendDevops', 'home.about.techStack.categories.toolsAutomation', 'home.about.techStack.categories.securityAdmin', 'home.about.techStack.items.selfHostedServices', 'home.about.hobbiesTitle', // Nicht "interests.title"! 'home.about.hobbies.selfHosting', 'home.about.hobbies.gaming', 'home.about.hobbies.gameServers', 'home.about.hobbies.jogging', 'home.about.p1', 'home.about.p2', 'home.about.p3', 'home.about.funFactTitle', 'home.about.funFactBody', 'home.about.techStackTitle', ]; const values = await Promise.all(keys.map(key => getLocalizedMessage(key, locale))); return { title: values[0], description: values[1], techStack: { title: values[2], categories: { frontendMobile: values[3], backendDevops: values[4], toolsAutomation: values[5], securityAdmin: values[6], }, items: { selfHostedServices: values[7], }, }, interests: { title: values[8], // hobbiesTitle cybersecurity: { title: values[9], // hobbies.selfHosting description: values[10], // hobbies.gaming }, selfHosting: { title: values[11], // hobbies.gameServers description: values[12], // hobbies.jogging }, gaming: { title: values[13], // p1 description: values[14], // p2 }, automation: { title: values[15], // p3 description: values[16], // funFactTitle }, }, }; } export async function getProjectsTranslations(locale: string): Promise { const [title, viewAll] = await Promise.all([ getLocalizedMessage('home.projects.title', locale), getLocalizedMessage('home.projects.viewAll', locale), ]); return { title, viewAll }; } export async function getContactTranslations(locale: string): Promise { const keys = [ 'home.contact.title', 'home.contact.description', 'home.contact.form.name', 'home.contact.form.email', 'home.contact.form.message', 'home.contact.form.send', 'home.contact.form.sending', 'home.contact.form.success', 'home.contact.form.error', 'home.contact.info.title', 'home.contact.info.email', 'home.contact.info.response', 'home.contact.info.emailLabel', ]; const values = await Promise.all(keys.map(key => getLocalizedMessage(key, locale))); return { title: values[0], description: values[1], form: { name: values[2], email: values[3], message: values[4], send: values[5], sending: values[6], success: values[7], error: values[8], }, info: { title: values[9], email: values[10], response: values[11], emailLabel: values[12], }, }; } export async function getConsentTranslations(locale: string): Promise { const [title, description, accept, decline] = await Promise.all([ getLocalizedMessage('consent.title', locale), getLocalizedMessage('consent.description', locale), getLocalizedMessage('consent.accept', locale), getLocalizedMessage('consent.decline', locale), ]); return { title, description, accept, decline }; }