Index: src/middleware/render.js
===================================================================
--- src/middleware/render.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/middleware/render.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -180,5 +180,8 @@
       return url;
     },
-    pageTitle: data.pageTitle || (data.site && data.site.title) || 'Klonkt',
+    // pageTitleKey (translated with the resolved language) wins over a raw pageTitle string,
+    // so admin page titles aren't hardcoded in one language. Falls back to the site title.
+    pageTitle: (data.pageTitleKey ? i18nT(_lang, data.pageTitleKey, data.pageTitleVars) : data.pageTitle)
+      || (data.site && data.site.title) || 'Klonkt',
     appVersion: APP_VERSION,
     bodyClass: data.bodyClass || 'on-home',
Index: src/routes/admin-audio.js
===================================================================
--- src/routes/admin-audio.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-audio.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -112,5 +112,5 @@
   const embedUrl = base + (res.locals.siteUrlBase || '') + '/embed';
   renderPage(req, res, 'pages/admin-audio', {
-    pageTitle: 'Audio tracks',
+    pageTitleKey: 'admin.t_audio',
     bodyClass: 'on-admin',
     tracks,
Index: src/routes/admin-epk.js
===================================================================
--- src/routes/admin-epk.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-epk.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -32,5 +32,5 @@
   try { const r = JSON.parse(getSetting('epk_tracks_' + site.id, '') || '[]'); if (Array.isArray(r)) chosen = r; } catch (e) {}
   renderPage(req, res, 'pages/admin-epk', {
-    pageTitle: 'Perskit bewerken',
+    pageTitleKey: 'admin.t_epk',
     bodyClass: 'on-admin',
     site,
Index: src/routes/admin-newsletter.js
===================================================================
--- src/routes/admin-newsletter.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-newsletter.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -46,5 +46,5 @@
   const subscribeUrl = fullUrl(req, '/nieuwsbrief');
   renderPage(req, res, 'pages/admin-newsletter', {
-    pageTitle: 'Nieuwsbrief',
+    pageTitleKey: 'admin.t_newsletter',
     bodyClass: 'on-admin',
     nlCounts: c,
Index: src/routes/admin-playlists.js
===================================================================
--- src/routes/admin-playlists.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-playlists.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -64,5 +64,5 @@
   const playlists = PlaylistService.list(site.id);
   renderPage(req, res, 'pages/admin-playlists', {
-    pageTitle: 'Playlists',
+    pageTitleKey: 'admin.t_playlists',
     playlists,
     bodyClass: 'on-admin',
Index: src/routes/admin-seo.js
===================================================================
--- src/routes/admin-seo.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-seo.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -36,5 +36,5 @@
 
   renderPage(req, res, 'pages/admin-seo', {
-    pageTitle: 'SEO',
+    pageTitleKey: 'admin.t_seo',
     bodyClass: 'on-admin',
     site,
Index: src/routes/admin-settings.js
===================================================================
--- src/routes/admin-settings.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-settings.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -70,5 +70,5 @@
 router.get('/', requireGod, (req, res) => {
   renderPage(req, res, 'pages/admin-settings', {
-    pageTitle: 'Instellingen',
+    pageTitleKey: 'admin.t_settings',
     bodyClass: 'on-admin',
     tenancy: getTenancy(),
Index: src/routes/admin-shows.js
===================================================================
--- src/routes/admin-shows.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-shows.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -35,5 +35,5 @@
   const shows = db.prepare('SELECT * FROM shows WHERE site_id = ? ORDER BY date DESC, time DESC').all(site.id);
   renderPage(req, res, 'pages/admin-shows', {
-    pageTitle: 'Agenda', bodyClass: 'on-admin',
+    pageTitleKey: 'admin.t_shows', bodyClass: 'on-admin',
     shows, smtp: mailerConfigured(), notifyCount: confirmedFor(site.id, 'notify').length,
     agendaEnabled: getSetting('agenda_enabled') === '1',
Index: src/routes/admin-sites.js
===================================================================
--- src/routes/admin-sites.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-sites.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -169,5 +169,5 @@
 
   renderPage(req, res, 'pages/admin-sites', {
-    pageTitle: 'Sites',
+    pageTitleKey: 'admin.t_sites',
     bodyClass: 'on-admin',
     sites,
@@ -180,5 +180,5 @@
 router.get('/new', requireGod, (req, res) => {
   renderPage(req, res, 'pages/admin-site-edit', {
-    pageTitle: 'New site',
+    pageTitleKey: 'admin.t_newsite',
     bodyClass: 'on-admin',
     isNew: true,
@@ -259,5 +259,5 @@
 
   renderPage(req, res, 'pages/admin-site-edit', {
-    pageTitle: `Edit: ${site.title}`,
+    pageTitleKey: 'admin.t_editsite', pageTitleVars: { title: site.title },
     bodyClass: 'on-admin',
     isNew: false,
Index: src/routes/admin-stats.js
===================================================================
--- src/routes/admin-stats.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-stats.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -33,5 +33,5 @@
   const days = [7, 14, 30, 90].includes(parseInt(req.query.days, 10)) ? parseInt(req.query.days, 10) : 14;
   renderPage(req, res, 'pages/admin-stats', {
-    pageTitle: 'Statistieken',
+    pageTitleKey: 'admin.t_stats',
     bodyClass: 'on-admin',
     stats: getStats(days),
Index: src/routes/admin-updates.js
===================================================================
--- src/routes/admin-updates.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-updates.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -74,5 +74,5 @@
   const canSelfUpdate = (() => { try { return fs.existsSync(UPDATE_SCRIPT); } catch { return false; } })();
   renderPage(req, res, 'pages/admin-updates', {
-    pageTitle: 'Updates',
+    pageTitleKey: 'admin.t_updates',
     bodyClass: 'on-admin',
     appVersion: appVersion(),
Index: src/routes/admin-users.js
===================================================================
--- src/routes/admin-users.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin-users.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -40,5 +40,5 @@
 
   renderPage(req, res, 'pages/admin-users', {
-    pageTitle: 'Users',
+    pageTitleKey: 'admin.t_users',
     bodyClass: 'on-admin',
     users,
Index: src/routes/admin.js
===================================================================
--- src/routes/admin.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/routes/admin.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -49,5 +49,5 @@
     };
     return renderPage(req, res, 'pages/my-site', {
-      pageTitle: 'Mijn Klonkt Hub',
+      pageTitleKey: 'admin.t_hub',
       bodyClass: 'on-admin',
       mySite,
@@ -93,5 +93,5 @@
 
   renderPage(req, res, 'pages/admin', {
-    pageTitle: 'Beheer',
+    pageTitleKey: 'admin.t_admin',
     bodyClass: 'on-admin',
     tenancy,
@@ -108,5 +108,5 @@
 router.get('/handleiding', requireAuth, (req, res) => {
   renderPage(req, res, 'pages/admin-help', {
-    pageTitle: 'Handleiding',
+    pageTitleKey: 'admin.t_manual',
     bodyClass: 'on-admin',
     tenancy: getTenancy(),
Index: src/services/i18n.js
===================================================================
--- src/services/i18n.js	(revision abc895932289f11ee95bf5fb8c09a489a0b78f8b)
+++ src/services/i18n.js	(revision 34875673eb7989a5ab1986334ece32f689bab211)
@@ -67,4 +67,5 @@
     'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Reacties', 'admin.b_seo': '🔎 SEO',
     'admin.b_settings': '⚙️ Instellingen', 'admin.b_newpost': '✍️ Nieuwe post', 'admin.b_look': '🎨 Uiterlijk',
+    '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',
     'admin.b_makesite': '🎨 Maak je site aan', 'admin.b_circle': '🔗 Cirkel', 'admin.b_stats': '📊 Statistieken',
     'admin.b_newsletter': '✉️ Nieuwsbrief', 'admin.b_perskit': '📰 Perskit', 'admin.b_downloads': '⬇ Downloads',
@@ -983,4 +984,5 @@
     'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Comments', 'admin.b_seo': '🔎 SEO',
     'admin.b_settings': '⚙️ Settings', 'admin.b_newpost': '✍️ New post', 'admin.b_look': '🎨 Appearance',
+    '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',
     'admin.b_makesite': '🎨 Create your site', 'admin.b_circle': '🔗 Circle', 'admin.b_stats': '📊 Statistics',
     'admin.b_newsletter': '✉️ Newsletter', 'admin.b_perskit': '📰 Press kit', 'admin.b_downloads': '⬇ Downloads',
@@ -1893,4 +1895,5 @@
     'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Kommentare', 'admin.b_seo': '🔎 SEO',
     'admin.b_settings': '⚙️ Einstellungen', 'admin.b_newpost': '✍️ Neuer Beitrag', 'admin.b_look': '🎨 Aussehen',
+    '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',
     'admin.b_makesite': '🎨 Seite erstellen', 'admin.b_circle': '🔗 Kreis', 'admin.b_stats': '📊 Statistik',
     'admin.b_newsletter': '✉️ Newsletter', 'admin.b_perskit': '📰 Pressekit', 'admin.b_downloads': '⬇ Downloads',
