source: Klonkt/src/routes/changelog.js@ 17546af

main
Last change on this file since 17546af was eb5f978, checked in by Robin Genis <roboburr@…>, 2 months ago

feat(changelog): i18n the public changelog (English base + nl/de)

  • CHANGELOG.md — now the English base (translated from Dutch), the source of truth going forward.
  • CHANGELOG.nl.md — the previous Dutch changelog, kept as the Dutch translation.
  • CHANGELOG.de.md — German translation.
  • routes/changelog.js — serve CHANGELOG.<lang>.md for the visitor's language, fall back to the English base; title/empty-message via i18n.
  • services/i18n.js — changelog.title + changelog.empty (nl/en/de).
  • Property mode set to 100644
File size: 1.4 KB
RevLine 
[90259da]1/**
[834bcc3]2 * Public changelog / release page.
[90259da]3 *
[eb5f978]4 * GET /changelog -> renders the changelog in the visitor's language:
5 * CHANGELOG.<lang>.md if a translation exists, else CHANGELOG.md (English base).
[90259da]6 */
7
8import express from 'express';
9import fs from 'fs';
10import path from 'path';
11import { fileURLToPath } from 'url';
12import { renderPage } from '../middleware/render.js';
13import { MarkdownService } from '../services/MarkdownService.js';
[eb5f978]14import { resolveLang, t } from '../services/i18n.js';
15import { getSetting } from '../services/SettingsService.js';
[90259da]16
17const router = express.Router();
18const __dirname = path.dirname(fileURLToPath(import.meta.url));
[eb5f978]19const ROOT = path.join(__dirname, '..', '..');
[90259da]20
21router.get('/changelog', (req, res) => {
[eb5f978]22 const lang = resolveLang(req, {
23 userLang: req.session && req.session.user && req.session.user.lang,
24 defaultLang: getSetting('default_lang'),
25 });
26 // Visitor's language if a translation exists, else the English base.
27 const files = [path.join(ROOT, `CHANGELOG.${lang}.md`), path.join(ROOT, 'CHANGELOG.md')];
28 let html = '';
29 for (const f of files) {
30 try { html = MarkdownService.render(fs.readFileSync(f, 'utf8')); break; } catch { /* try next */ }
[90259da]31 }
[eb5f978]32 if (!html) html = `<p>${t(lang, 'changelog.empty')}</p>`;
[90259da]33 renderPage(req, res, 'pages/changelog', {
[eb5f978]34 pageTitle: t(lang, 'changelog.title'),
[90259da]35 bodyClass: 'on-changelog',
36 changelogHtml: html,
37 });
38});
39
40export default router;
Note: See TracBrowser for help on using the repository browser.