import type { Metadata } from "next" import { getTranslations, getMessages, setRequestLocale } from "next-intl/server" import { Link } from "@/i18n/navigation" import Image from "next/image" import { ArrowRight, Activity, TestTube, Languages, Info, Trash2, } from "lucide-react" import { DocHeader } from "@/components/ui/doc-header" import { Callout } from "@/components/ui/callout" export async function generateMetadata({ params, }: { params: Promise<{ locale: string }> }): Promise { const { locale } = await params const t = await getTranslations({ locale, namespace: "docs.settings.meta" }) return { title: t("title"), description: t("description"), keywords: [ "proxmenux settings", "proxmenux monitor activation", "proxmenux beta program", "proxmenux language", "proxmenux uninstall", "proxmenux version", "proxmenux configuration", ], alternates: { canonical: "https://proxmenux.com/docs/settings" }, openGraph: { title: t("ogTitle"), description: t("ogDescription"), type: "article", url: "https://proxmenux.com/docs/settings", }, twitter: { card: "summary", title: t("twitterTitle"), description: t("twitterDescription"), }, } } type Option = { icon: string href: string title: string description: string badge?: string } type InstallRow = { type: string; bundles: string; menu?: string; menuRich?: string } const ICONS: Record> = { Activity, TestTube, Languages, Info, Trash2, } function OptionCard({ option }: { option: Option }) { const Icon = ICONS[option.icon] || Activity return (
{option.title} {option.badge && ( {option.badge} )}
{option.description}
) } export default async function SettingsOverviewPage({ params, }: { params: Promise<{ locale: string }> }) { const { locale } = await params setRequestLocale(locale) const t = await getTranslations({ locale, namespace: "docs.settings" }) const messages = (await getMessages({ locale })) as unknown as { docs: { settings: { installTypes: { rows: InstallRow[] } options: { list: Option[] } } } } const installRows = messages.docs.settings.installTypes.rows const optionsList = messages.docs.settings.options.list const code = (chunks: React.ReactNode) => {chunks} const strong = (chunks: React.ReactNode) => {chunks} const em = (chunks: React.ReactNode) => {chunks} const kbd = (chunks: React.ReactNode) => {chunks} return (
{t("intro.body")}

{t("opening.heading")}

{t.rich("opening.body", { kbd })}

{t("opening.imageAlt")}

{t("installTypes.heading")}

{t("installTypes.intro")}

{installRows.map((row, idx) => ( ))}
{t("installTypes.headerType")} {t("installTypes.headerBundles")} {t("installTypes.headerMenu")}
{row.type} {row.bundles} {row.menuRich ? t.rich(`installTypes.rows.${idx}.menuRich`, { strong }) : row.menu}
{t.rich("installTypes.detectionBody", { code })}

{t("options.heading")}

{t.rich("options.intro", { em })}

{optionsList.map((o) => ( ))}
{t.rich("configTip.bodyRich", { code })}
) }