"use client" import Image from "next/image" import { Wrench, Target, CheckCircle, Github, Server, HardDrive, Download, Settings, Cpu, Zap, Sliders, ExternalLink, } from "lucide-react" import { useState } from "react" import { useTranslations, useMessages } from "next-intl" type LoaderKey = "arc" | "rr" | "tinycore" type StepMedia = { htmlBefore?: string; src: string; alt: string; caption: string } type Step = { id: string title: string intro: string outro?: string loaders: Record } type LoaderLink = { name: string; url: string } type ConfigRow = { param: string; value?: string; options?: string } type DocLink = { label: string; url: string } function ImageWithCaption({ src, alt, caption }: { src: string; alt: string; caption: string }) { return (
{alt}
{caption}
) } function StepNumber({ number }: { number: number }) { return ( ) } export default function Page() { const [activeLoader, setActiveLoader] = useState("arc") const t = useTranslations("docs.createVm.synology") const messages = useMessages() as unknown as { docs: { createVm: { synology: { intro: { loaders: LoaderLink[]; simplifies: string[] } config: { defaultRows: ConfigRow[]; advancedRows: ConfigRow[] } diskSelection: { virtualItems: string[]; physicalItems: string[] } vmCreation: { items: string[] } steps: Step[] tips: { docLinks: DocLink[] } } } } } const introLoaders = messages.docs.createVm.synology.intro.loaders const simplifies = messages.docs.createVm.synology.intro.simplifies const defaultRows = messages.docs.createVm.synology.config.defaultRows const advancedRows = messages.docs.createVm.synology.config.advancedRows const virtualItems = messages.docs.createVm.synology.diskSelection.virtualItems const physicalItems = messages.docs.createVm.synology.diskSelection.physicalItems const vmCreationItems = messages.docs.createVm.synology.vmCreation.items const steps = messages.docs.createVm.synology.steps const docLinks = messages.docs.createVm.synology.tips.docLinks const code = (chunks: React.ReactNode) => {chunks} const strong = (chunks: React.ReactNode) => {chunks} return (

{t("title")}

{t("intro.heading")}

{t("intro.intro")}

    {introLoaders.map((l) => (
  • {l.name} {" "}
  • ))}
  • {t("intro.customLoader")}

{t("intro.simplifiesIntro")}

    {simplifies.map((item, i) => (
  • {item}
  • ))}

{t("config.heading")}

{t("config.intro")}

{t("config.defaultHeading")}

{t("config.defaultIntro")}

{defaultRows.map((row) => ( ))}
{t("config.headerParam")} {t("config.headerValue")}
{row.param} {row.value}

{t("config.defaultOutro")}

{t("config.advancedHeading")}

{t("config.advancedIntro")}

{advancedRows.map((row) => ( ))}
{t("config.headerParam")} {t("config.headerOptions")}
{row.param} {row.options}

{t("diskSelection.heading")}

{t("diskSelection.intro")}

{t("diskSelection.virtualHeading")}

    {virtualItems.map((_, idx) => (
  • {t.rich(`diskSelection.virtualItems.${idx}`, { strong })}
  • ))}

{t("diskSelection.physicalHeading")}

    {physicalItems.map((_, idx) => (
  • {t.rich(`diskSelection.physicalItems.${idx}`, { strong })}
  • ))}

{t("loaderInstall.heading")}

{t("loaderInstall.intro1")}

{t.rich("loaderInstall.intro2Rich", { strong })}

{t.rich("loaderInstall.customRich", { strong, code })}

{t("loaderInstall.uploadIntro")}

{t("vmCreation.heading")}

{t("vmCreation.intro")}

    {vmCreationItems.map((_, idx) => (
  • {t.rich(`vmCreation.items.${idx}`, { code })}
  • ))}

{t("stepGuide.heading")}

{t("stepGuide.intro")}

{t("stepGuide.selectorHeading")}

{(["arc", "rr", "tinycore"] as LoaderKey[]).map((key) => ( ))}
{steps.map((step, stepIdx) => { const media = step.loaders[activeLoader] || [] return (

{step.title}

{step.intro}

{media.map((m, idx) => (
{m.htmlBefore && (

{t.rich(`steps.${stepIdx}.loaders.${activeLoader}.${idx}.htmlBefore`, { strong, code })}

)}
))}
{step.outro &&

{step.outro}

}
) })}

{t("dsmInstall.heading")}

{t("dsmInstall.intro")}

https://finds.synology.com

{t("dsmInstall.afterCode")}

{t("dsmInstall.patience")}

{t("tips.heading")}

  • {t("tips.introItem")}
  • {docLinks.map((dl) => ( {dl.label} ))}
  • {t("tips.olderModels")}
  • {t("tips.updateLabel")}

    {t("tips.updateBody")}

    {t("tips.importantLabel")}

    {t("tips.importantBody")}

) }