diff --git a/admin/src/components/shell/PluginRail.vue b/admin/src/components/shell/PluginRail.vue index 8cb36fc..d859f7d 100644 --- a/admin/src/components/shell/PluginRail.vue +++ b/admin/src/components/shell/PluginRail.vue @@ -26,10 +26,14 @@ const { collapsed, narrow, setCollapsed } = useSidebar() // The top button cycles the theme (system, light, dark) and names the // current choice; the icon shows it. -const themeIcon = computed(() => ({ system: SunMoon, light: Sun, dark: Moon })[themeChoice.value]) -const themeLabel = computed(() => - t('backend::lang.nav.theme', { mode: t(`backend::lang.nav.theme_${themeChoice.value}`) }), -) +// Full key literals, so the phrasebook SPA-key check sees every key. +const themeModes = { + system: { icon: SunMoon, key: 'backend::lang.nav.theme_system' }, + light: { icon: Sun, key: 'backend::lang.nav.theme_light' }, + dark: { icon: Moon, key: 'backend::lang.nav.theme_dark' }, +} as const +const themeIcon = computed(() => themeModes[themeChoice.value].icon) +const themeLabel = computed(() => t('backend::lang.nav.theme', { mode: t(themeModes[themeChoice.value].key) })) const active = computed(() => activeEntry(String(route.params.vendor ?? ''), String(route.params.plugin ?? '')))