diff --git a/backend/src/app.ts b/backend/src/app.ts index b0f7afa2..b0a889a6 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -12,6 +12,8 @@ import classRouter from './routes/class'; import questionRouter from './routes/question'; import loginRouter from './routes/login'; +import homeRouter from './routes/home.js'; + const app: Express = express(); const port: string | number = getNumericEnvVar(EnvVars.Port); @@ -33,6 +35,8 @@ app.use('/login', loginRouter); app.use('/theme', themeRoutes); +app.use('/home', homeRouter); + async function startServer() { await initORM(); diff --git a/backend/src/controllers/themes.ts b/backend/src/controllers/themes.ts index 442eb982..99fed54d 100644 --- a/backend/src/controllers/themes.ts +++ b/backend/src/controllers/themes.ts @@ -1,39 +1,19 @@ -import fs from 'fs'; -import path from 'path'; -import yaml from 'js-yaml'; import { Request, Response } from 'express'; import { themes } from '../data/themes.js'; +import { loadTranslations } from "../util/translationHelper.js"; interface Translations { curricula_page: { - [key: string]: { title: string; description?: string }; // Optioneel veld description + [key: string]: { title: string; description?: string }; }; } -/** - * Laadt de vertalingen uit een YAML-bestand - */ -function loadTranslations(language: string): Translations { - try { - const filePath = path.join(process.cwd(), '_i18n', `${language}.yml`); - const yamlFile = fs.readFileSync(filePath, 'utf8'); - return yaml.load(yamlFile) as Translations; - } catch (error) { - console.error( - `Kan vertaling niet laden voor ${language}, fallback naar Nederlands` - ); - console.error(error); - const fallbackPath = path.join(process.cwd(), '_i18n', 'nl.yml'); - return yaml.load(fs.readFileSync(fallbackPath, 'utf8')) as Translations; - } -} - /** * GET /themes → Haalt de lijst met thema's op inclusief vertalingen */ export function getThemes(req: Request, res: Response) { const language = (req.query.language as string)?.toLowerCase() || 'nl'; - const translations = loadTranslations(language); + const translations = loadTranslations(language); const themeList = themes.map((theme) => { return { diff --git a/backend/src/routes/home.ts b/backend/src/routes/home.ts index 89e5c8bc..19dc8b38 100644 --- a/backend/src/routes/home.ts +++ b/backend/src/routes/home.ts @@ -7,6 +7,8 @@ const router = express.Router(); * @route GET /api/home * @query {string} language - Taalcode (bijv. 'nl' of 'fr') * @returns JSON object with homepage data (strengths) + * @example http://localhost:3000/home + * {title, description, strengths: {title, image}} */ router.get('/', getHomeScreenData); diff --git a/backend/src/util/translationHelper.ts b/backend/src/util/translationHelper.ts new file mode 100644 index 00000000..8bc4d7ca --- /dev/null +++ b/backend/src/util/translationHelper.ts @@ -0,0 +1,18 @@ +import fs from 'fs'; +import path from 'path'; +import yaml from 'js-yaml'; + +export function loadTranslations(language: string): T { + try { + const filePath = path.join(process.cwd(), '_i18n', `${language}.yml`); + const yamlFile = fs.readFileSync(filePath, 'utf8'); + return yaml.load(yamlFile) as T; + } catch (error) { + console.error( + `Cannot load translation for ${language}, fallen back to dutch` + ); + console.error(error); + const fallbackPath = path.join(process.cwd(), '_i18n', 'nl.yml'); + return yaml.load(fs.readFileSync(fallbackPath, 'utf8')) as T; + } +}