Changeset 5e61b17 in Klonkt for src/routes/account.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/account.js

    r4885eab r5e61b17  
    2626import { googleConfigured } from '../config/google.js';
    2727import { toWebp } from '../services/ImageWebpService.js';
     28import { SUPPORTED } from '../services/i18n.js';
    2829
    2930const __dirname = path.dirname(fileURLToPath(import.meta.url));
     
    6061router.get('/', requireAuth, (req, res) => {
    6162  const account = db.prepare(`
    62     SELECT id, username, email, role, bio, avatar_url, created_at, password_hash, google_sub
     63    SELECT id, username, email, role, bio, avatar_url, created_at, password_hash, google_sub, lang
    6364    FROM users WHERE id = ?
    6465  `).get(req.session.user.id);
     
    8081});
    8182
     83// ==================== PERSOONLIJKE INTERFACE-TAAL ====================
     84// Slaat de taalkeuze op het account op (reist mee over apparaten/sessies) én
     85// zet 'm meteen in de sessie zodat 't direct effect heeft.
     86router.post('/lang', requireAuth, (req, res) => {
     87  const code = SUPPORTED.includes(req.body.lang) ? req.body.lang : null;
     88  if (code) {
     89    db.prepare('UPDATE users SET lang = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run(code, req.session.user.id);
     90    req.session.user.lang = code;
     91    req.session.lang = code;
     92  }
     93  res.redirect('/account?success=' + encodeURIComponent('Taal opgeslagen'));
     94});
     95
    8296// De site die deze gebruiker mag bewerken vanuit z'n account: z'n eigen site
    8397// (owner_id), of voor een god de primaire site. Null als er niets is.
Note: See TracChangeset for help on using the changeset viewer.