From b6ab978c3ac5e7ffeeec5b67caccf10523c37748 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 3 Dec 2025 11:44:12 +0000 Subject: [PATCH] Fix menu localization in AdminLayout component - Add useTranslation hook to components/AdminLayout.tsx - Replace all hardcoded navigation labels with translation keys - Add missing translation keys (activity, capacity, cells, calendar, appStore, mcpKeys, mcpServer, account, shipping) to en, nl, de locales --- src/components/AdminLayout.tsx | 72 ++++++++++++++-------------- src/i18n/locales/de/translation.json | 9 ++++ src/i18n/locales/en/translation.json | 8 ++++ src/i18n/locales/nl/translation.json | 9 ++++ 4 files changed, 63 insertions(+), 35 deletions(-) diff --git a/src/components/AdminLayout.tsx b/src/components/AdminLayout.tsx index 6a012439..4b4e799a 100644 --- a/src/components/AdminLayout.tsx +++ b/src/components/AdminLayout.tsx @@ -49,12 +49,14 @@ import { LanguageSwitcher } from "@/components/LanguageSwitcher"; import AnimatedBackground from "@/components/AnimatedBackground"; import { McpServerStatus } from "@/components/admin/McpServerStatus"; import { ThemeToggle } from "@/components/ui/theme-toggle"; +import { useTranslation } from "react-i18next"; interface AdminLayoutProps { children: React.ReactNode; } export default function AdminLayout({ children }: AdminLayoutProps) { + const { t } = useTranslation(); const { profile, tenant, signOut } = useAuth(); const location = useLocation(); const [collapsed, setCollapsed] = useState(false); @@ -72,50 +74,50 @@ export default function AdminLayout({ children }: AdminLayoutProps) { const mainNavItems = [ { path: "/admin/dashboard", - label: "Dashboard", + label: t("navigation.dashboard"), icon: LayoutDashboard, exact: true, }, { path: "/admin/jobs", - label: "Jobs", + label: t("navigation.jobs"), icon: Briefcase, activePaths: ["/admin/jobs"], }, { path: "/admin/parts", - label: "Parts", + label: t("navigation.parts"), icon: Package, exact: true, }, { path: "/admin/operations", - label: "Operations", + label: t("navigation.operations"), icon: Layers, exact: true, }, { path: "/admin/assignments", - label: "Assignments", + label: t("navigation.assignments"), icon: UserCheck, exact: true, }, { path: "/admin/issues", - label: "Issues", + label: t("navigation.issues"), icon: AlertCircle, exact: true, badge: pendingIssuesCount, }, { path: "/admin/activity", - label: "Activity", + label: t("navigation.activity"), icon: Clock, exact: true, }, { path: "/admin/capacity", - label: "Capacity", + label: t("navigation.capacity"), icon: CalendarClock, exact: true, }, @@ -125,25 +127,25 @@ export default function AdminLayout({ children }: AdminLayoutProps) { const operatorViewItems = [ { path: "/operator/work-queue", - label: "Work Queue", + label: t("navigation.workQueue"), icon: ListTodo, exact: true, }, { path: "/operator/view", - label: "Operator View", + label: t("navigation.operatorView"), icon: Eye, exact: true, }, { path: "/operator/my-activity", - label: "My Activity", + label: t("navigation.myActivity"), icon: Activity, exact: true, }, { path: "/operator/my-issues", - label: "My Issues", + label: t("navigation.myIssues"), icon: Flag, exact: true, }, @@ -153,37 +155,37 @@ export default function AdminLayout({ children }: AdminLayoutProps) { const configNavItems = [ { path: "/admin/config/stages", - label: "Cells", + label: t("navigation.cells"), icon: Database, exact: true, }, { path: "/admin/config/calendar", - label: "Calendar", + label: t("navigation.calendar"), icon: CalendarClock, exact: true, }, { path: "/admin/config/materials", - label: "Materials", + label: t("navigation.materials"), icon: Wrench, exact: true, }, { path: "/admin/config/resources", - label: "Resources", + label: t("navigation.resources"), icon: Wrench, exact: true, }, { path: "/admin/config/users", - label: "Users", + label: t("navigation.users"), icon: Users, exact: true, }, { path: "/admin/config/steps-templates", - label: "Templates", + label: t("navigation.templates"), icon: FileText, exact: true, }, @@ -193,43 +195,43 @@ export default function AdminLayout({ children }: AdminLayoutProps) { const integrationsNavItems = [ { path: "/admin/integrations", - label: "App Store", + label: t("navigation.appStore"), icon: Store, exact: true, }, { path: "/admin/config/api-keys", - label: "API Keys", + label: t("navigation.apiKeys"), icon: Key, exact: true, }, { path: "/admin/config/mcp-keys", - label: "MCP Keys", + label: t("navigation.mcpKeys"), icon: Key, exact: true, }, { path: "/admin/config/mcp-server", - label: "MCP Server", + label: t("navigation.mcpServer"), icon: Code, exact: true, }, { path: "/admin/config/webhooks", - label: "Webhooks", + label: t("navigation.webhooks"), icon: Webhook, exact: true, }, { path: "/admin/data-export", - label: "Data Export", + label: t("navigation.dataExport"), icon: FileDown, exact: true, }, { path: "/admin/api-docs", - label: "API Docs", + label: t("navigation.apiDocs"), icon: Code, exact: true, }, @@ -239,31 +241,31 @@ export default function AdminLayout({ children }: AdminLayoutProps) { const accountNavItems = [ { path: "/admin/my-plan", - label: "My Plan", + label: t("navigation.myPlan"), icon: CreditCard, exact: true, }, { path: "/admin/pricing", - label: "Pricing", + label: t("navigation.pricing"), icon: DollarSign, exact: true, }, { path: "/admin/settings", - label: "Settings", + label: t("navigation.settings"), icon: Settings, exact: true, }, { path: "/admin/help", - label: "Help", + label: t("navigation.help"), icon: HelpCircle, exact: true, }, { path: "/admin/about", - label: "About", + label: t("navigation.about"), icon: Info, exact: true, }, @@ -337,7 +339,7 @@ export default function AdminLayout({ children }: AdminLayoutProps) { className="w-full justify-start gap-2 font-medium text-muted-foreground h-7 text-xs" > - Operator Views + {t("navigation.operatorViews")} - Configuration + {t("navigation.configuration")} - Integrations + {t("navigation.integrations")} - Account + {t("navigation.account")} - {!collapsed && "Sign Out"} + {!collapsed && t("auth.signOut")} diff --git a/src/i18n/locales/de/translation.json b/src/i18n/locales/de/translation.json index 14a202b0..baff8681 100644 --- a/src/i18n/locales/de/translation.json +++ b/src/i18n/locales/de/translation.json @@ -141,6 +141,15 @@ "integrations": "Integrationen", "dataExport": "Datenexport", "accountAndSupport": "Konto & Support", + "account": "Konto", + "activity": "Aktivität", + "capacity": "Kapazität", + "cells": "Zellen", + "calendar": "Kalender", + "appStore": "App Store", + "mcpKeys": "MCP-Schlüssel", + "mcpServer": "MCP-Server", + "shipping": "Versand", "sections": { "overview": "ÜBERSICHT", "operations": "ARBEITSGÄNGE", diff --git a/src/i18n/locales/en/translation.json b/src/i18n/locales/en/translation.json index ad1e99e3..1b3711b7 100644 --- a/src/i18n/locales/en/translation.json +++ b/src/i18n/locales/en/translation.json @@ -127,6 +127,14 @@ "dataExport": "Data Export", "shipping": "Shipping", "accountAndSupport": "Account & Support", + "account": "Account", + "activity": "Activity", + "capacity": "Capacity", + "cells": "Cells", + "calendar": "Calendar", + "appStore": "App Store", + "mcpKeys": "MCP Keys", + "mcpServer": "MCP Server", "sections": { "overview": "OVERVIEW", "operations": "OPERATIONS", diff --git a/src/i18n/locales/nl/translation.json b/src/i18n/locales/nl/translation.json index 392e0f92..8aacfaea 100644 --- a/src/i18n/locales/nl/translation.json +++ b/src/i18n/locales/nl/translation.json @@ -381,6 +381,15 @@ "integrations": "Integraties", "dataExport": "Gegevensexport", "accountAndSupport": "Account & Ondersteuning", + "account": "Account", + "activity": "Activiteit", + "capacity": "Capaciteit", + "cells": "Cellen", + "calendar": "Kalender", + "appStore": "App Winkel", + "mcpKeys": "MCP-sleutels", + "mcpServer": "MCP-server", + "shipping": "Verzending", "sections": { "overview": "OVERZICHT", "operations": "BEWERKINGEN",