Changeset 5e61b17 in Klonkt for src/routes/lang.js


Ignore:
Timestamp:
06/21/2026 03:16:51 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
11b3ba5
Parents:
4885eab
Message:

feat(i18n): admin-configurable language — personal + default for visitors

  • users.lang column: personal interface language per account (follows across devices/sessions). Switcher (/lang/:code) and Account select both write it.
  • app_setting default_lang: admin picks the default language for visitors in Admin → Settings (overrides env/browser; empty = automatic).
  • resolveLang priority: session choice → users.lang → default_lang (DB) → env KLONKT_DEFAULT_LANG → browser → nl.
  • Account: language select; admin-settings: default language select. NL/EN/DE keys.

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/lang.js

    r4885eab r5e61b17  
    33import express from 'express';
    44import { SUPPORTED } from '../services/i18n.js';
     5import db from '../config/database.js';
    56
    67const router = express.Router();
     
    910  const code = SUPPORTED.includes(req.params.code) ? req.params.code : 'nl';
    1011  if (req.session) req.session.lang = code;
     12  // Ingelogd? Bewaar de keuze ook op het account zodat 'ie meereist over
     13  // apparaten/sessies (niet alleen deze sessie-cookie).
     14  if (req.session && req.session.user && req.session.user.id) {
     15    try {
     16      db.prepare('UPDATE users SET lang = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run(code, req.session.user.id);
     17      req.session.user.lang = code;
     18    } catch { /* lang-kolom ontbreekt op een oude DB → sessie-only, geen breuk */ }
     19  }
    1120  // Veilige terug-URL: alleen een intern pad (geen open redirect).
    1221  let back = (typeof req.query.r === 'string') ? req.query.r : '';
Note: See TracChangeset for help on using the changeset viewer.