import type { Metadata } from "next" import { getTranslations, getMessages, setRequestLocale } from "next-intl/server" import { Link } from "@/i18n/navigation" import { DocHeader } from "@/components/ui/doc-header" import { Callout } from "@/components/ui/callout" import { DataFlowDiagram } from "@/components/ui/data-flow-diagram" export async function generateMetadata({ params, }: { params: Promise<{ locale: string }> }): Promise { const { locale } = await params const t = await getTranslations({ locale, namespace: "docs.backupRestore.meta" }) return { title: t("title"), description: t("description"), keywords: [ "proxmox backup", "proxmox host backup", "proxmox restore", "proxmox backup server", "borg backup proxmox", "cross-kernel restore", "proxmox host restore", "vzdump alternative", "proxmenux backup", "proxmox migration", ], alternates: { canonical: "https://proxmenux.com/docs/backup-restore" }, openGraph: { title: t("ogTitle"), description: t("ogDescription"), type: "article", url: "https://proxmenux.com/docs/backup-restore", }, twitter: { card: "summary_large_image", title: t("twitterTitle"), description: t("twitterDescription"), }, } } type WhatItIsNotItem = string type WhereNextItem = { label: string; href: string; tail: string } export default async function BackupRestoreOverviewPage({ params, }: { params: Promise<{ locale: string }> }) { const { locale } = await params setRequestLocale(locale) const t = await getTranslations({ locale, namespace: "docs.backupRestore" }) const messages = (await getMessages({ locale })) as unknown as { docs: { backupRestore: { whatItIsNot: { items: WhatItIsNotItem[] } whereNext: { items: WhereNextItem[] } } } } const br = messages.docs.backupRestore const whatItIsNotItems = br.whatItIsNot.items const whereNextItems = br.whereNext.items const code = (chunks: React.ReactNode) => {chunks} const strong = (chunks: React.ReactNode) => {chunks} const em = (chunks: React.ReactNode) => {chunks} return (
{t.rich("intro.body", { code, strong })}

{t("whatItIsNot.heading")}

{t.rich("whatItIsNot.intro", { strong })}

    {whatItIsNotItems.map((_, idx) => (
  • {t.rich(`whatItIsNot.items.${idx}`, { code, strong })}
  • ))}

{t("threePillars.heading")}

{t.rich("threePillars.intro", { strong })}

{t("restoreIsUniversal.heading")}

{t.rich("restoreIsUniversal.body", { strong })}

{t("twoInterfaces.heading")}

{t.rich("twoInterfaces.intro", { strong })}

{t("whereNext.heading")}

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

    {whereNextItems.map((item) => (
  • {item.label} {item.tail}
  • ))}
) }