import { DEMO_ROSTER, type RosterBot } from "../demo"; import { SITE_DESCRIPTION } from "../site"; import type { Locale } from "./locales"; export type HomeCopy = { title: string; description: string; ogImageAlt: string; availableLanguage: string; skipToContent: string; starFallback: string; nav: { home: string; primary: string; menu: string; product: string; bots: string; selfHost: string; openSource: string; docs: string; viewOnGithub: string; }; hero: { badge: string; pill: string; heading: string; lead: string; getStarted: string; viewOnGithub: string; setupWithAgent: string; copiedForAgent: string; copyFailed: string; }; selfHost: { eyebrow: string; heading: string; copy: string; features: Array<{ title: string; body: string }>; }; roster: { eyebrow: string; heading: string; copy: string; bots: RosterBot[]; }; openSource: { eyebrow: string; heading: string; copy: string; selfHostTitle: string; selfHostMeta: string; selfHostItems: string[]; starOnGithub: string; readTheDocs: string; cloudTitle: string; cloudBadge: string; cloudMeta: string; cloudItems: string[]; getStarted: string; }; cta: { heading: string; copy: string; getStarted: string; viewOnGithub: string; openSourceValue: string; selfHostValue: string; stats: Array<{ value: "stars" | "license" | "openSource" | "selfHost"; label: string }>; }; getStartedDialog: { closeLabel: string; eyebrow: string; title: string; copy: string; selfHostNow: string; selfHostHint: string; cloudWaitlist: string; cloudHint: string; back: string; successTitle: string; successCopy: string; done: string; viewOnGithub: string; }; waitlist: { emailLabel: string; placeholder: string; submit: string; joining: string; success: string; added: string; error: string; }; footer: { navLabel: string; languagesLabel: string; links: { docs: string; changelog: string; about: string; support: string; privacy: string; }; }; }; const EN_ROSTER = DEMO_ROSTER; const DE_ROSTER: RosterBot[] = [ { name: "Sales Outbound", color: "#F5A03C", slug: "evoo/sales-outbound", desc: "Recherchiert nachts Accounts, bewertet Intent, entwirft in deinem Ton und hinterlässt eine Review-Liste.", }, { name: "Inbox Manager", color: "#6A6BF5", slug: "evoo/inbox-manager", desc: "Archiviert den Lärm, antwortet auf Routine-Threads und parkt Entwürfe, die du lesen solltest.", }, { name: "Talent Scout", color: "#3B82F6", slug: "evoo/talent-scout", desc: "Liest jede Bewerbung, shortlistet nach deiner Latte und schreibt die Intro-Mails.", }, { name: "Expense Manager", color: "#F2622A", slug: "evoo/expense-manager", desc: "Ordnet Belege den Buchungen zu, reicht den Report ein und fragt nach, statt zu raten.", }, { name: "Bug Triage", color: "#D9508A", slug: "evoo/bug-triage", desc: "Reproduziert Reports in einem echten Browser und hängt die Schritte an das Issue.", }, { name: "Account Manager", color: "#9B5CF6", slug: "evoo/account-manager", desc: "Hält Renewal-Kontext, beantwortet bekannte Fragen und eskaliert den Rest.", }, { name: "Paid Media", color: "#3EC5A8", slug: "evoo/paid-media", desc: "Überwacht den Spend täglich, pausiert, was nicht konvertiert, und meldet, was sich geändert hat.", }, { name: "Chief of Staff", color: "#8B93A8", slug: "evoo/chief-of-staff", desc: "Führt die Woche: Briefings, Buchungen und Übergaben zwischen deinen anderen Bots.", }, ]; const KO_ROSTER: RosterBot[] = [ { name: "Sales Outbound", color: "#F5A03C", slug: "evoo/sales-outbound", desc: "밤새 계정을 조사하고 의도를 점수한 뒤, 당신 말투로 초안을 써 검토 목록을 남깁니다.", }, { name: "Inbox Manager", color: "#6A6BF5", slug: "evoo/inbox-manager", desc: "잡음을 보관처리하고, 루틴 스레드에 답하며, 확인이 필요한 초안은 보류합니다.", }, { name: "Talent Scout", color: "#3B82F6", slug: "evoo/talent-scout", desc: "지원서를 모두 읽고 기준에 맞게 숏리스트한 뒤 소개 메일을 작성합니다.", }, { name: "Expense Manager", color: "#F2622A", slug: "evoo/expense-manager", desc: "영수증과 결제를 맞추고 리포트를 제출하며, 추측하기 전에 묻습니다.", }, { name: "Bug Triage", color: "#D9508A", slug: "evoo/bug-triage", desc: "실제 브라우저에서 리포트를 재현하고 이슈에 재현 절차를 붙입니다.", }, { name: "Account Manager", color: "#9B5CF6", slug: "evoo/account-manager", desc: "갱신 맥락을 유지하고 알려진 질문에 답하며, 나머지는 에스컬레이션합니다.", }, { name: "Paid Media", color: "#3EC5A8", slug: "evoo/paid-media", desc: "매일 지출을 지켜보고 전환되지 않는 건 일시정지한 뒤, 바뀐 점을 보고합니다.", }, { name: "Chief of Staff", color: "#8B93A8", slug: "evoo/chief-of-staff", desc: "한 주를 운영합니다: 브리핑, 예약, 다른 봇 사이의 핸드오프.", }, ]; const ZH_ROSTER: RosterBot[] = [ { name: "Sales Outbound", color: "#F5A03C", slug: "evoo/sales-outbound", desc: "夜间调研客户、评估意向,用你的语气起草跟进,并留下待审清单。", }, { name: "Inbox Manager", color: "#6A6BF5", slug: "evoo/inbox-manager", desc: "归档杂音、回复例行邮件,把需要你过目的草稿先搁置起来。", }, { name: "Talent Scout", color: "#3B82F6", slug: "evoo/talent-scout", desc: "通读每份简历,按你的标准筛出候选名单,并写好介绍邮件。", }, { name: "Expense Manager", color: "#F2622A", slug: "evoo/expense-manager", desc: "核对票据与账目、提交报销,拿不准时先问而不是猜。", }, { name: "Bug Triage", color: "#D9508A", slug: "evoo/bug-triage", desc: "在真实浏览器里复现报告,并把复现步骤附到工单上。", }, { name: "Account Manager", color: "#9B5CF6", slug: "evoo/account-manager", desc: "掌握续约背景,回答常见问题,其余的自动升级给你。", }, { name: "Paid Media", color: "#3EC5A8", slug: "evoo/paid-media", desc: "每天盯投放,暂停没有转化的广告,并汇报发生了什么变化。", }, { name: "Chief of Staff", color: "#8B93A8", slug: "evoo/chief-of-staff", desc: "统筹整周:准备简报、安排日程,并协调其他 Bot 之间的交接。", }, ]; const HOME_COPY: Record = { en: { title: "evOo | Open source evOo alternative", description: SITE_DESCRIPTION, ogImageAlt: "evOo. AI teammates you actually own. Your keys, your model, your machine.", availableLanguage: "English", skipToContent: "Skip to content", starFallback: "Star", nav: { home: "evOo home", primary: "Primary", menu: "Menu", product: "Product", bots: "Bots", selfHost: "Self-host", openSource: "Open source", docs: "Docs", viewOnGithub: "View on GitHub", }, hero: { badge: "Apache-2.0", pill: "Self-hosted", heading: "AI teammates you actually own", lead: "evOo is an open source evOo alternative. Give a bot real work. It signs in to your tools, uses them the way you do, and comes back when it needs you.", getStarted: "Get started", viewOnGithub: "View on GitHub", setupWithAgent: "Set up with your agent", copiedForAgent: "Copied for your agent", copyFailed: "Copy failed. Try again.", }, selfHost: { eyebrow: "Self-hosted", heading: "The computer is yours", copy: "Run evOo on your machine. Your keys, your model, your data.", features: [ { title: "Any model, your key", body: "Point a bot at Claude, GPT, Grok, or a local model. Swap per bot: the cheap one triages, the smart one writes.", }, { title: "Readable routines", body: "Show a bot a workflow once and it saves a routine as plain Markdown you can read, edit, and commit.", }, { title: "Approvals that hold", body: "Set what a bot may do alone and what it must ask about. Every action lands in an audit log you own.", }, ], }, roster: { eyebrow: "Bot Templates", heading: "Give each bot a job", copy: "Start a new bot and it interviews you. A few questions about the work, how you write, and where it lives. Then it gets going.", bots: EN_ROSTER, }, openSource: { eyebrow: "Open source", heading: "No pricing page. Just the repo.", copy: "evOo is Apache-2.0 licensed and runs on your own machine with your own model keys. Nothing is gated, nothing phones home.", selfHostTitle: "Self-host", selfHostMeta: "Available today", selfHostItems: [ "Docker runner and sandboxed browser", "Bring your own model keys", "Routines, memory, and audit log", "Unlimited bots, no seats, no limits", "Community support on GitHub", ], starOnGithub: "Star on GitHub", readTheDocs: "Read the docs", cloudTitle: "Cloud", cloudBadge: "Coming soon", cloudMeta: "Bring your own keys, we run the computers", cloudItems: [ "Managed sandboxes, always on", "Your keys, your model spend", "Same bots, same routines, no migration", ], getStarted: "Get started", }, cta: { heading: "Meet your first bot", copy: "Give evOo something you have been putting off and let it handle the follow-through.", getStarted: "Get started", viewOnGithub: "View on GitHub", openSourceValue: "Open source", selfHostValue: "Self-host", stats: [ { value: "stars", label: "GitHub stars" }, { value: "license", label: "License" }, { value: "openSource", label: "No seats, no gates" }, { value: "selfHost", label: "Your machine" }, ], }, getStartedDialog: { closeLabel: "Close get started dialog", eyebrow: "Get started", title: "How do you want to start?", copy: "Self-host on your machine, or join the Cloud waitlist.", selfHostNow: "Self-host now", selfHostHint: "Install steps are in the docs.", cloudWaitlist: "Cloud waitlist", cloudHint: "Hosted evOo is coming. Leave your email.", back: "Back", successTitle: "You're in.", successCopy: "We'll email you when hosted evOo is ready. Want to start today? Jump to Self-host on this page.", done: "Done", viewOnGithub: "View on GitHub", }, waitlist: { emailLabel: "Email address", placeholder: "you@company.com", submit: "Continue", joining: "Joining…", success: "You’re in.", added: "Added", error: "Couldn’t add you. Try again.", }, footer: { navLabel: "Footer", languagesLabel: "Language", links: { docs: "Docs", changelog: "Changelog", about: "About", support: "Support", privacy: "Privacy", }, }, }, de: { title: "evOo | Open-Source-Alternative zu evOo", description: "evOo ist eine Open-Source-Alternative zu evOo für persistente KI-Teamkollegen, die echte Arbeit erledigen. Deine Keys, dein Modell, deine Maschine.", ogImageAlt: "evOo. KI-Teamkollegen, die dir wirklich gehören. Deine Keys, dein Modell, deine Maschine.", availableLanguage: "German", skipToContent: "Zum Inhalt springen", starFallback: "Star", nav: { home: "evOo-Startseite", primary: "Hauptnavigation", menu: "Menü", product: "Produkt", bots: "Bots", selfHost: "Self-host", openSource: "Open Source", docs: "Docs", viewOnGithub: "Auf GitHub ansehen", }, hero: { badge: "Apache-2.0", pill: "Self-hosted", heading: "KI-Teamkollegen, die dir wirklich gehören", lead: "evOo ist eine Open-Source-Alternative zu evOo. Gib einem Bot echte Arbeit. Er meldet sich in deinen Tools an, nutzt sie wie du. Er kommt zurück, wenn er dich braucht.", getStarted: "Loslegen", viewOnGithub: "Auf GitHub ansehen", setupWithAgent: "Mit deinem Agenten einrichten", copiedForAgent: "Für deinen Agenten kopiert", copyFailed: "Kopieren fehlgeschlagen. Erneut versuchen.", }, selfHost: { eyebrow: "Self-hosted", heading: "Der Computer gehört dir", copy: "Betreibe evOo auf deiner Maschine. Deine Keys, dein Modell, deine Daten.", features: [ { title: "Beliebiges Modell, dein Key", body: "Richte einen Bot auf Claude, GPT, Grok oder ein lokales Modell aus. Pro Bot wechselbar: der günstige triagiert, der smarte schreibt.", }, { title: "Lesbare Routinen", body: "Zeig einem Bot einmal einen Workflow. Er speichert eine Routine als Markdown, das du lesen, editieren und committen kannst.", }, { title: "Freigaben, die greifen", body: "Lege fest, was ein Bot allein darf und worum er fragen muss. Jede Aktion landet in einem Audit-Log, das dir gehört.", }, ], }, roster: { eyebrow: "Bot-Vorlagen", heading: "Gib jedem Bot eine Aufgabe", copy: "Starte einen neuen Bot und er interviewt dich. Ein paar Fragen zur Arbeit, zu deinem Schreibstil und wo sie lebt. Dann legt er los.", bots: DE_ROSTER, }, openSource: { eyebrow: "Open Source", heading: "Keine Preisseite. Nur das Repo.", copy: "evOo ist Apache-2.0-lizenziert und läuft auf deiner Maschine mit deinen Model-Keys. Nichts ist freigeschaltet, nichts telefoniert nach Hause.", selfHostTitle: "Self-host", selfHostMeta: "Heute verfügbar", selfHostItems: [ "Docker-Runner und sandboxierter Browser", "Eigene Model-Keys mitbringen", "Routinen, Memory und Audit-Log", "Unbegrenzte Bots, keine Seats, keine Limits", "Community-Support auf GitHub", ], starOnGithub: "Auf GitHub mit Stern markieren", readTheDocs: "Docs lesen", cloudTitle: "Cloud", cloudBadge: "Demnächst", cloudMeta: "Deine Keys, wir betreiben die Computer", cloudItems: [ "Managed Sandboxes, immer an", "Deine Keys, dein Model-Spend", "Dieselben Bots, dieselben Routinen, keine Migration", ], getStarted: "Loslegen", }, cta: { heading: "Triff deinen ersten Bot", copy: "Gib evOo etwas, das du aufgeschoben hast. Lass es den Follow-through übernehmen.", getStarted: "Loslegen", viewOnGithub: "Auf GitHub ansehen", openSourceValue: "Open Source", selfHostValue: "Self-host", stats: [ { value: "stars", label: "GitHub Stars" }, { value: "license", label: "Lizenz" }, { value: "openSource", label: "Keine Seats, keine Gates" }, { value: "selfHost", label: "Deine Maschine" }, ], }, getStartedDialog: { closeLabel: "Loslegen-Dialog schließen", eyebrow: "Loslegen", title: "Wie willst du starten?", copy: "Self-host auf deiner Maschine, oder auf die Cloud-Warteliste.", selfHostNow: "Jetzt self-hosten", selfHostHint: "Installationsschritte stehen in den Docs.", cloudWaitlist: "Cloud-Warteliste", cloudHint: "Gehostetes evOo kommt. Hinterlasse deine E-Mail.", back: "Zurück", successTitle: "Du bist dabei.", successCopy: "Wir mailen dir, wenn gehostetes evOo bereit ist. Heute starten? Zum Self-host-Abschnitt auf dieser Seite.", done: "Fertig", viewOnGithub: "Auf GitHub ansehen", }, waitlist: { emailLabel: "E-Mail-Adresse", placeholder: "du@firma.com", submit: "Weiter", joining: "Wird eingetragen…", success: "Du bist dabei.", added: "Hinzugefügt", error: "Konnte dich nicht eintragen. Bitte erneut versuchen.", }, footer: { navLabel: "Fußzeile", languagesLabel: "Sprache", links: { docs: "Dokumentation", changelog: "Änderungsprotokoll", about: "Über uns", support: "Support", privacy: "Datenschutz", }, }, }, ko: { title: "evOo | 오픈소스 evOo 대안", description: "evOo는 실제 업무를 수행하는 지속형 AI 팀원을 위한 오픈소스 evOo 대안입니다. 키, 모델, 머신, 모두 당신 것.", ogImageAlt: "evOo. 진짜로 내 것인 AI 팀원. 키, 모델, 머신, 모두 당신 것.", availableLanguage: "Korean", skipToContent: "본문으로 건너뛰기", starFallback: "Star", nav: { home: "evOo 홈", primary: "주 메뉴", menu: "메뉴", product: "제품", bots: "봇", selfHost: "셀프 호스트", openSource: "오픈소스", docs: "Docs", viewOnGithub: "GitHub에서 보기", }, hero: { badge: "Apache-2.0", pill: "셀프 호스트", heading: "진짜로 내 것인 AI 팀원", lead: "evOo는 오픈소스 evOo 대안입니다. 봇에게 실제 업무를 맡기세요. 봇이 도구에 로그인하고, 당신처럼 사용하며, 필요할 때 돌아와 묻습니다.", getStarted: "시작하기", viewOnGithub: "GitHub에서 보기", setupWithAgent: "에이전트로 설정하기", copiedForAgent: "에이전트용으로 복사됨", copyFailed: "복사 실패. 다시 시도하세요.", }, selfHost: { eyebrow: "셀프 호스트", heading: "컴퓨터는 당신 것", copy: "당신 머신에서 evOo를 실행하세요. 키, 모델, 데이터는 모두 당신 것.", features: [ { title: "어떤 모델이든, 키는 당신 것", body: "봇을 Claude, GPT, Grok 또는 로컬 모델에 연결하세요. 봇마다 바꿀 수 있습니다. 저렴한 모델은 분류하고, 똑똑한 모델은 작성합니다.", }, { title: "읽을 수 있는 루틴", body: "워크플로를 한 번 보여주면 봇이 읽고 수정하고 커밋할 수 있는 Markdown 루틴으로 저장합니다.", }, { title: "지키는 승인", body: "봇이 혼자 해도 되는 일과 물어야 하는 일을 정하세요. 모든 액션은 당신이 소유한 감사 로그에 남습니다.", }, ], }, roster: { eyebrow: "봇 템플릿", heading: "봇마다 역할을 주세요", copy: "새 봇을 시작하면 인터뷰합니다. 업무, 글쓰기 방식, 작업이 어디에 있는지 몇 가지 질문. 그다음 바로 시작합니다.", bots: KO_ROSTER, }, openSource: { eyebrow: "오픈소스", heading: "가격 페이지 없음. 리포만.", copy: "evOo는 Apache-2.0 라이선스이며, 당신 머신에서 당신 모델 키로 실행됩니다. 잠긴 기능도, 외부로 연락하는 것도 없습니다.", selfHostTitle: "셀프 호스트", selfHostMeta: "지금 사용 가능", selfHostItems: [ "Docker 러너와 샌드박스 브라우저", "모델 키는 직접 가져오기", "루틴, 메모리, 감사 로그", "봇 무제한, 시트·한도 없음", "GitHub 커뮤니티 지원", ], starOnGithub: "GitHub에서 Star", readTheDocs: "문서 읽기", cloudTitle: "Cloud", cloudBadge: "곧 출시", cloudMeta: "키는 당신 것, 컴퓨터는 우리가 운영", cloudItems: [ "상시 가동 관리형 샌드박스", "키와 모델 비용은 당신 것", "같은 봇, 같은 루틴, 마이그레이션 없음", ], getStarted: "시작하기", }, cta: { heading: "첫 봇을 만나보세요", copy: "미뤄 두었던 일을 evOo에 맡기고, 후속까지 맡기세요.", getStarted: "시작하기", viewOnGithub: "GitHub에서 보기", openSourceValue: "오픈소스", selfHostValue: "셀프 호스트", stats: [ { value: "stars", label: "GitHub 스타" }, { value: "license", label: "라이선스" }, { value: "openSource", label: "시트·게이트 없음" }, { value: "selfHost", label: "당신 머신" }, ], }, getStartedDialog: { closeLabel: "시작하기 대화상자 닫기", eyebrow: "시작하기", title: "어떻게 시작할까요?", copy: "당신 머신에서 셀프 호스트하거나, Cloud 대기열에 등록하세요.", selfHostNow: "지금 셀프 호스트", selfHostHint: "설치 단계는 문서에 있습니다.", cloudWaitlist: "Cloud 대기열", cloudHint: "호스팅 evOo가 곧 옵니다. 이메일을 남겨 주세요.", back: "뒤로", successTitle: "등록되었습니다.", successCopy: "호스팅 evOo가 준비되면 메일로 알려 드립니다. 오늘 시작하려면 이 페이지의 셀프 호스트 섹션으로 이동하세요.", done: "완료", viewOnGithub: "GitHub에서 보기", }, waitlist: { emailLabel: "이메일 주소", placeholder: "you@company.com", submit: "계속", joining: "등록 중…", success: "등록되었습니다.", added: "추가됨", error: "등록하지 못했습니다. 다시 시도하세요.", }, footer: { navLabel: "푸터", languagesLabel: "언어", links: { docs: "문서", changelog: "변경 내역", about: "소개", support: "지원", privacy: "개인정보 처리방침", }, }, }, zh: { title: "evOo | 开源 evOo 替代品", description: "evOo 是一个开源 evOo 替代品,用于运行真正干活的持久化 AI 队友。密钥、模型、机器,都归你所有。", ogImageAlt: "evOo:真正属于你的 AI 队友。密钥、模型、机器,都归你所有。", availableLanguage: "Chinese", skipToContent: "跳到主要内容", starFallback: "加星", nav: { home: "evOo 首页", primary: "主导航", menu: "菜单", product: "产品", bots: "Bot", selfHost: "自托管", openSource: "开源", docs: "文档", viewOnGithub: "在 GitHub 上查看", }, hero: { badge: "Apache-2.0", pill: "自托管", heading: "真正属于你的 AI 队友", lead: "evOo 是一个开源 evOo 替代品。把真正的工作交给 Bot:它会登录你的工具,像你一样使用它们,并在需要你时回来询问。", getStarted: "开始使用", viewOnGithub: "在 GitHub 上查看", setupWithAgent: "用你的智能体安装", copiedForAgent: "已为你的智能体复制", copyFailed: "复制失败。请重试。", }, selfHost: { eyebrow: "自托管", heading: "电脑归你所有", copy: "在你自己的机器上运行 evOo。密钥、模型、数据,都归你所有。", features: [ { title: "任意模型,密钥归你", body: "让 Bot 使用 Claude、GPT、Grok 或本地模型。可按 Bot 切换:用便宜的模型做分流,用聪明的模型写作。", }, { title: "可读的例行任务", body: "给 Bot 演示一次工作流程,它就会把例行任务保存为纯 Markdown,你可以阅读、编辑并提交到版本库。", }, { title: "可靠的审批", body: "设定 Bot 可以独立做什么、什么必须先请示。每个操作都会写入归你所有的审计日志。", }, ], }, roster: { eyebrow: "Bot 模板", heading: "给每个 Bot 分配一份工作", copy: "新建一个 Bot,它会先面试你:几个关于工作内容、写作风格和运行位置的问题。然后它就开始干活。", bots: ZH_ROSTER, }, openSource: { eyebrow: "开源", heading: "没有定价页,只有代码仓库。", copy: "evOo 采用 Apache-2.0 许可证,在你自己的机器上用你自己的模型密钥运行。没有功能墙,也不会偷偷外联。", selfHostTitle: "自托管", selfHostMeta: "现已可用", selfHostItems: [ "Docker 运行器和沙箱浏览器", "自带模型密钥", "例行任务、记忆和审计日志", "Bot 数量不限,无席位、无额度限制", "GitHub 社区支持", ], starOnGithub: "在 GitHub 上点星", readTheDocs: "阅读文档", cloudTitle: "云端", cloudBadge: "即将推出", cloudMeta: "密钥归你,电脑由我们运行", cloudItems: [ "托管沙箱,始终在线", "密钥归你,模型费用归你", "同样的 Bot 和例行任务,无需迁移", ], getStarted: "开始使用", }, cta: { heading: "认识你的第一个 Bot", copy: "把一件你一直拖延的事交给 evOo,让它负责跟进到底。", getStarted: "开始使用", viewOnGithub: "在 GitHub 上查看", openSourceValue: "开源", selfHostValue: "自托管", stats: [ { value: "stars", label: "GitHub 星标" }, { value: "license", label: "许可证" }, { value: "openSource", label: "无席位、无门槛" }, { value: "selfHost", label: "你的机器" }, ], }, getStartedDialog: { closeLabel: "关闭开始使用对话框", eyebrow: "开始使用", title: "你想如何开始?", copy: "在你的机器上自托管,或加入云端候补名单。", selfHostNow: "立即自托管", selfHostHint: "安装步骤见文档。", cloudWaitlist: "云端候补名单", cloudHint: "托管版 evOo 即将推出。留下你的邮箱。", back: "返回", successTitle: "登记成功。", successCopy: "托管版 evOo 就绪时我们会邮件通知你。想今天就上手?跳到本页的自托管部分。", done: "完成", viewOnGithub: "在 GitHub 上查看", }, waitlist: { emailLabel: "邮箱地址", placeholder: "you@company.com", submit: "继续", joining: "正在登记…", success: "登记成功。", added: "已添加", error: "未能添加你,请重试。", }, footer: { navLabel: "页脚", languagesLabel: "语言", links: { docs: "文档", changelog: "更新日志", about: "关于", support: "支持", privacy: "隐私", }, }, }, }; export function getHomeCopy(locale: Locale): HomeCopy { return HOME_COPY[locale]; }