Changeset 3487567 in Klonkt


Ignore:
Timestamp:
06/28/2026 10:13:27 PM (2 months ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
48027f2
Parents:
abc8959
Message:

fix(i18n): translate admin page titles (pageTitleKey instead of hardcoded strings)

Admin page/tab titles were hardcoded (mostly Dutch: Beheer, Instellingen, Nieuwsbrief, …).
renderPage now accepts pageTitleKey (+ pageTitleVars) and translates it with the resolved
language; the 16 admin routes pass keys. Adds admin.t_* keys in nl/en/de.

  • middleware/render.js — pageTitleKey support
  • services/i18n.js — admin.t_* title keys (nl/en/de)
  • routes/admin*.js — pageTitle string -> pageTitleKey
Location:
src
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • src/middleware/render.js

    rabc8959 r3487567  
    180180      return url;
    181181    },
    182     pageTitle: data.pageTitle || (data.site && data.site.title) || 'Klonkt',
     182    // pageTitleKey (translated with the resolved language) wins over a raw pageTitle string,
     183    // so admin page titles aren't hardcoded in one language. Falls back to the site title.
     184    pageTitle: (data.pageTitleKey ? i18nT(_lang, data.pageTitleKey, data.pageTitleVars) : data.pageTitle)
     185      || (data.site && data.site.title) || 'Klonkt',
    183186    appVersion: APP_VERSION,
    184187    bodyClass: data.bodyClass || 'on-home',
  • src/routes/admin-audio.js

    rabc8959 r3487567  
    112112  const embedUrl = base + (res.locals.siteUrlBase || '') + '/embed';
    113113  renderPage(req, res, 'pages/admin-audio', {
    114     pageTitle: 'Audio tracks',
     114    pageTitleKey: 'admin.t_audio',
    115115    bodyClass: 'on-admin',
    116116    tracks,
  • src/routes/admin-epk.js

    rabc8959 r3487567  
    3232  try { const r = JSON.parse(getSetting('epk_tracks_' + site.id, '') || '[]'); if (Array.isArray(r)) chosen = r; } catch (e) {}
    3333  renderPage(req, res, 'pages/admin-epk', {
    34     pageTitle: 'Perskit bewerken',
     34    pageTitleKey: 'admin.t_epk',
    3535    bodyClass: 'on-admin',
    3636    site,
  • src/routes/admin-newsletter.js

    rabc8959 r3487567  
    4646  const subscribeUrl = fullUrl(req, '/nieuwsbrief');
    4747  renderPage(req, res, 'pages/admin-newsletter', {
    48     pageTitle: 'Nieuwsbrief',
     48    pageTitleKey: 'admin.t_newsletter',
    4949    bodyClass: 'on-admin',
    5050    nlCounts: c,
  • src/routes/admin-playlists.js

    rabc8959 r3487567  
    6464  const playlists = PlaylistService.list(site.id);
    6565  renderPage(req, res, 'pages/admin-playlists', {
    66     pageTitle: 'Playlists',
     66    pageTitleKey: 'admin.t_playlists',
    6767    playlists,
    6868    bodyClass: 'on-admin',
  • src/routes/admin-seo.js

    rabc8959 r3487567  
    3636
    3737  renderPage(req, res, 'pages/admin-seo', {
    38     pageTitle: 'SEO',
     38    pageTitleKey: 'admin.t_seo',
    3939    bodyClass: 'on-admin',
    4040    site,
  • src/routes/admin-settings.js

    rabc8959 r3487567  
    7070router.get('/', requireGod, (req, res) => {
    7171  renderPage(req, res, 'pages/admin-settings', {
    72     pageTitle: 'Instellingen',
     72    pageTitleKey: 'admin.t_settings',
    7373    bodyClass: 'on-admin',
    7474    tenancy: getTenancy(),
  • src/routes/admin-shows.js

    rabc8959 r3487567  
    3535  const shows = db.prepare('SELECT * FROM shows WHERE site_id = ? ORDER BY date DESC, time DESC').all(site.id);
    3636  renderPage(req, res, 'pages/admin-shows', {
    37     pageTitle: 'Agenda', bodyClass: 'on-admin',
     37    pageTitleKey: 'admin.t_shows', bodyClass: 'on-admin',
    3838    shows, smtp: mailerConfigured(), notifyCount: confirmedFor(site.id, 'notify').length,
    3939    agendaEnabled: getSetting('agenda_enabled') === '1',
  • src/routes/admin-sites.js

    rabc8959 r3487567  
    169169
    170170  renderPage(req, res, 'pages/admin-sites', {
    171     pageTitle: 'Sites',
     171    pageTitleKey: 'admin.t_sites',
    172172    bodyClass: 'on-admin',
    173173    sites,
     
    180180router.get('/new', requireGod, (req, res) => {
    181181  renderPage(req, res, 'pages/admin-site-edit', {
    182     pageTitle: 'New site',
     182    pageTitleKey: 'admin.t_newsite',
    183183    bodyClass: 'on-admin',
    184184    isNew: true,
     
    259259
    260260  renderPage(req, res, 'pages/admin-site-edit', {
    261     pageTitle: `Edit: ${site.title}`,
     261    pageTitleKey: 'admin.t_editsite', pageTitleVars: { title: site.title },
    262262    bodyClass: 'on-admin',
    263263    isNew: false,
  • src/routes/admin-stats.js

    rabc8959 r3487567  
    3333  const days = [7, 14, 30, 90].includes(parseInt(req.query.days, 10)) ? parseInt(req.query.days, 10) : 14;
    3434  renderPage(req, res, 'pages/admin-stats', {
    35     pageTitle: 'Statistieken',
     35    pageTitleKey: 'admin.t_stats',
    3636    bodyClass: 'on-admin',
    3737    stats: getStats(days),
  • src/routes/admin-updates.js

    rabc8959 r3487567  
    7474  const canSelfUpdate = (() => { try { return fs.existsSync(UPDATE_SCRIPT); } catch { return false; } })();
    7575  renderPage(req, res, 'pages/admin-updates', {
    76     pageTitle: 'Updates',
     76    pageTitleKey: 'admin.t_updates',
    7777    bodyClass: 'on-admin',
    7878    appVersion: appVersion(),
  • src/routes/admin-users.js

    rabc8959 r3487567  
    4040
    4141  renderPage(req, res, 'pages/admin-users', {
    42     pageTitle: 'Users',
     42    pageTitleKey: 'admin.t_users',
    4343    bodyClass: 'on-admin',
    4444    users,
  • src/routes/admin.js

    rabc8959 r3487567  
    4949    };
    5050    return renderPage(req, res, 'pages/my-site', {
    51       pageTitle: 'Mijn Klonkt Hub',
     51      pageTitleKey: 'admin.t_hub',
    5252      bodyClass: 'on-admin',
    5353      mySite,
     
    9393
    9494  renderPage(req, res, 'pages/admin', {
    95     pageTitle: 'Beheer',
     95    pageTitleKey: 'admin.t_admin',
    9696    bodyClass: 'on-admin',
    9797    tenancy,
     
    108108router.get('/handleiding', requireAuth, (req, res) => {
    109109  renderPage(req, res, 'pages/admin-help', {
    110     pageTitle: 'Handleiding',
     110    pageTitleKey: 'admin.t_manual',
    111111    bodyClass: 'on-admin',
    112112    tenancy: getTenancy(),
  • src/services/i18n.js

    rabc8959 r3487567  
    6767    'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Reacties', 'admin.b_seo': '🔎 SEO',
    6868    'admin.b_settings': '⚙️ Instellingen', 'admin.b_newpost': '✍️ Nieuwe post', 'admin.b_look': '🎨 Uiterlijk',
     69    'admin.t_admin': 'Beheer', 'admin.t_settings': 'Instellingen', 'admin.t_audio': 'Audiotracks', 'admin.t_epk': 'Perskit bewerken', 'admin.t_newsletter': 'Nieuwsbrief', 'admin.t_playlists': 'Afspeellijsten', 'admin.t_seo': 'SEO', 'admin.t_shows': 'Agenda', 'admin.t_sites': 'Sites', 'admin.t_newsite': 'Nieuwe site', 'admin.t_editsite': 'Bewerken: {title}', 'admin.t_stats': 'Statistieken', 'admin.t_updates': 'Updates', 'admin.t_users': 'Gebruikers', 'admin.t_hub': 'Mijn Klonkt Hub', 'admin.t_manual': 'Handleiding',
    6970    'admin.b_makesite': '🎨 Maak je site aan', 'admin.b_circle': '🔗 Cirkel', 'admin.b_stats': '📊 Statistieken',
    7071    'admin.b_newsletter': '✉️ Nieuwsbrief', 'admin.b_perskit': '📰 Perskit', 'admin.b_downloads': '⬇ Downloads',
     
    983984    'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Comments', 'admin.b_seo': '🔎 SEO',
    984985    'admin.b_settings': '⚙️ Settings', 'admin.b_newpost': '✍️ New post', 'admin.b_look': '🎨 Appearance',
     986    'admin.t_admin': 'Admin', 'admin.t_settings': 'Settings', 'admin.t_audio': 'Audio tracks', 'admin.t_epk': 'Edit press kit', 'admin.t_newsletter': 'Newsletter', 'admin.t_playlists': 'Playlists', 'admin.t_seo': 'SEO', 'admin.t_shows': 'Agenda', 'admin.t_sites': 'Sites', 'admin.t_newsite': 'New site', 'admin.t_editsite': 'Edit: {title}', 'admin.t_stats': 'Statistics', 'admin.t_updates': 'Updates', 'admin.t_users': 'Users', 'admin.t_hub': 'My Klonkt Hub', 'admin.t_manual': 'Manual',
    985987    'admin.b_makesite': '🎨 Create your site', 'admin.b_circle': '🔗 Circle', 'admin.b_stats': '📊 Statistics',
    986988    'admin.b_newsletter': '✉️ Newsletter', 'admin.b_perskit': '📰 Press kit', 'admin.b_downloads': '⬇ Downloads',
     
    18931895    'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Kommentare', 'admin.b_seo': '🔎 SEO',
    18941896    'admin.b_settings': '⚙️ Einstellungen', 'admin.b_newpost': '✍️ Neuer Beitrag', 'admin.b_look': '🎨 Aussehen',
     1897    'admin.t_admin': 'Verwaltung', 'admin.t_settings': 'Einstellungen', 'admin.t_audio': 'Audiotracks', 'admin.t_epk': 'Pressemappe bearbeiten', 'admin.t_newsletter': 'Newsletter', 'admin.t_playlists': 'Playlists', 'admin.t_seo': 'SEO', 'admin.t_shows': 'Termine', 'admin.t_sites': 'Sites', 'admin.t_newsite': 'Neue Site', 'admin.t_editsite': 'Bearbeiten: {title}', 'admin.t_stats': 'Statistiken', 'admin.t_updates': 'Updates', 'admin.t_users': 'Benutzer', 'admin.t_hub': 'Mein Klonkt Hub', 'admin.t_manual': 'Handbuch',
    18951898    'admin.b_makesite': '🎨 Seite erstellen', 'admin.b_circle': '🔗 Kreis', 'admin.b_stats': '📊 Statistik',
    18961899    'admin.b_newsletter': '✉️ Newsletter', 'admin.b_perskit': '📰 Pressekit', 'admin.b_downloads': '⬇ Downloads',
Note: See TracChangeset for help on using the changeset viewer.