export const locales = ["zh", "en"] as const; export type Locale = (typeof locales)[number]; type Stat = { label: string; value: string; }; type Scene = { category: string; name: string; description: string; }; type Step = { title: string; description: string; }; type InstallMethod = { badge: string; name: string; description: string; command: string; note: string; }; type Plan = { badge: string; name: string; price: string; cadence: string; summary: string; features: string[]; cta: string; highlight?: boolean; }; type Faq = { question: string; answer: string; }; type QuickStep = { title: string; description: string; code: string; }; type EnvVar = { name: string; required: string; description: string; }; type DocSkill = { name: string; command: string; description: string; }; type Benefit = { kicker: string; title: string; description: string; }; type ConsoleMetric = { label: string; value: string; }; type ConsoleSkill = { name: string; routeKey: string; status: string; }; type ApiKey = { name: string; masked: string; scope: string; }; type UsageRow = { name: string; count: string; cost: string; }; export type AppDictionary = { brand: { name: string; subtitle: string; }; nav: { home: string; docs: string; console: string; pricing: string; login: string; }; footer: { copy: string; }; home: { tag: string; title: string; subtitle: string; primaryCta: string; secondaryCta: string; freeTrial: string; socialProof: string; stageLabel: string; stageValue: string; stageDescription: string; heroPhrases: string[]; scenesTag: string; scenesTitle: string; scenesSubtitle: string; scenes: Scene[]; flowTag: string; flowTitle: string; flowSubtitle: string; flowSteps: Step[]; installTag: string; installTitle: string; installSubtitle: string; installMethods: InstallMethod[]; bootstrapTitle: string; bootstrapDescription: string; bootstrapCommand: string; agentSkillTitle: string; agentSkillDescription: string; agentSkillCommand: string; trustTag: string; trustTitle: string; trustStats: Stat[]; }; pricing: { tag: string; title: string; subtitle: string; plans: Plan[]; faqTag: string; faqTitle: string; faqs: Faq[]; }; docs: { tag: string; title: string; intro: string; quickStartTitle: string; quickSteps: QuickStep[]; envTitle: string; envVars: EnvVar[]; skillsTag: string; skillsTitle: string; skills: DocSkill[]; }; login: { tag: string; title: string; subtitle: string; primaryProvider: string; secondaryProvider: string; termsPrefix: string; termsLink: string; and: string; privacyLink: string; benefits: Benefit[]; }; console: { tag: string; title: string; subtitle: string; billingCta: string; loginCta: string; metrics: ConsoleMetric[]; skillsTag: string; skillsTitle: string; officialSkills: ConsoleSkill[]; keysTag: string; keysTitle: string; apiKeys: ApiKey[]; usageTag: string; usageTitle: string; usageRows: UsageRow[]; planTag: string; planTitle: string; planDescription: string; planBenefits: string[]; planCta: string; }; }; const zh: AppDictionary = { brand: { name: "PopiArt", subtitle: "官方 AI Skill 控制台", }, nav: { home: "首页", docs: "文档", console: "控制台", pricing: "定价", login: "登录", }, footer: { copy: "面向创作者与 coding agent 的官方 Skill 接入、控制台与订阅平台。", }, home: { tag: "OFFICIAL SKILLS", title: "安装 popiartcli,把官方 PopiArt Skills 接进你的 Coding Agent", subtitle: "通过统一 CLI 发现、查看、调用官方 skills;当任务需要图像、视频与多模态模型时,再由产品层统一处理授权、路由和计费。", primaryCta: "安装 CLI", secondaryCta: "查看文档", freeTrial: "支持 Homebrew、curl | sh、Windows PowerShell 与源码构建", socialProof: "安装后可直接 bootstrap 到 Codex、OpenCode 与 OpenClaw", stageLabel: "CLI 命令面", stageValue: "auth / skills / run", stageDescription: "继续用 jobs、artifacts、budget、project、models、bootstrap 完成完整工作流。", heroPhrases: [ "auth login", "skills list", "run --wait", "jobs wait", "artifacts pull", "budget status", ], scenesTag: "SCENARIOS", scenesTitle: "覆盖高频 AI 创作场景", scenesSubtitle: "沿用目标站点的信息结构,但切换为更贴近 PopiArt 产品语义的能力列表。", scenes: [ { category: "IMAGE", name: "文生图", description: "从简短 prompt 到完整视觉概念,一键生成统一风格的图像结果。", }, { category: "IMAGE", name: "图片编辑", description: "支持局部重绘、风格替换、多参考图融合与批量出图工作流。", }, { category: "VIDEO", name: "图生视频", description: "以首帧图片为基础生成短视频,适合角色、商品和海报动效。", }, { category: "VIDEO", name: "动作迁移", description: "将参考视频动作迁移到目标人物图像,快速生产社媒动态内容。", }, { category: "UTILITY", name: "抠图与超清", description: "把日常修图能力做成稳定的 Skill,适配电商与工作台场景。", }, { category: "OPS", name: "批量官方技能", description: "把技能能力、额度、项目和账单统一到一个控制台管理。", }, ], flowTag: "QUICK START", flowTitle: "三步开始使用 popiartcli", flowSubtitle: "直接沿用仓库 README 的真实安装与首次使用路径,而不是另造一套平台流程。", flowSteps: [ { title: "安装 popiartcli", description: "优先使用 Homebrew、官方 install.sh 或 PowerShell 脚本,把 CLI 先装到本地环境。", }, { title: "执行 bootstrap 接入 agent 生态", description: "生成 completion、默认 discovery profile,并可直接暴露给 Codex / OpenCode 使用。", }, { title: "登录并调用官方 skill", description: "执行 auth login、skills list、run、jobs wait、artifacts pull,进入完整工作流。", }, ], installTag: "INSTALL", installTitle: "首页直接开始安装 popiartcli", installSubtitle: "推荐先安装 CLI,再按需执行 bootstrap,让 PopiArt 在你的 agent 环境里直接可发现。", installMethods: [ { badge: "RECOMMENDED", name: "Homebrew", description: "适合 macOS / Linux,也是后续升级最稳定的方式。", command: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart", note: "升级:brew upgrade wtgoku-create/popi/popiart", }, { badge: "CLI ONLY", name: "curl | sh", description: "从 GitHub Releases 安装 Go CLI 二进制,默认只安装 CLI 本体。", command: "curl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.sh | sh -s -- --cli-only", note: "升级:popiart update", }, { badge: "WINDOWS", name: "PowerShell", description: "Windows 环境使用官方 install.ps1,支持指定版本安装。", command: "irm https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.ps1 | iex", note: "也可以通过 VERSION 环境变量安装指定版本。", }, ], bootstrapTitle: "安装后建议立即执行 bootstrap", bootstrapDescription: "生成 shell completion、默认 skill discovery profile,并把 PopiArt 直接暴露给 agent。", bootstrapCommand: "popiart bootstrap --agent codex --completion zsh\npopiart bootstrap --agent codex --discoverable\npopiart skills list", agentSkillTitle: "OpenClaw 手动安装 agent skill", agentSkillDescription: "如果通过 GitHub 目录安装,请指向 popiartcli 仓库的 skill/ 目录;不要使用仓库根目录或 blob/main/skill/SKILL.md,避免安装器扫描到 runtime PopiSkills。", agentSkillCommand: "https://github.com/wtgoku-create/popiartcli/tree/main/skill\n\nmkdir -p ~/.openclaw/skills/popiart-cli\ncurl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/skill/SKILL.md \\\n -o ~/.openclaw/skills/popiart-cli/SKILL.md", trustTag: "CLI DESIGN", trustTitle: "围绕 agent 工作流设计,而不是零散脚本拼装", trustStats: [ { label: "默认 JSON 输出", value: "ok / data" }, { label: "长任务轮询", value: "jobs wait" }, { label: "工件恢复下载", value: "artifacts pull" }, { label: "生态引导", value: "bootstrap" }, ], }, pricing: { tag: "PRICING", title: "简单透明的订阅与充值", subtitle: "既能买月度订阅,也能按项目补充 Credits,适合个人与团队一起用。", plans: [ { badge: "推荐方案", name: "Pro Subscription", price: "¥69.99", cadence: "/月", summary: "适合个人创作者和轻量团队,优先拿到官方技能、控制台与基础配额。", features: [ "每月 12,000 Credits", "官方技能全量可见", "项目级用量统计", "标准 API key 与 CLI 接入", ], cta: "订阅 Pro", highlight: true, }, { badge: "灵活补充", name: "Credit Top-up", price: "¥199", cadence: "/包", summary: "在已有订阅上追加额度,适合视频类高消耗任务或团队集中出图周。", features: [ "追加 50,000 Credits", "购买后立即生效", "支持与订阅叠加", "统一记录到账单中心", ], cta: "立即充值", }, ], faqTag: "FAQ", faqTitle: "常见问题", faqs: [ { question: "订阅和充值包可以同时购买吗?", answer: "可以。订阅提供基础月额度,充值包作为叠加额度优先消耗。", }, { question: "控制台会显示技能级用量吗?", answer: "会。按 skill、项目、时间维度展示调用次数、Credits 和费用归因。", }, { question: "后续能接企业方案吗?", answer: "可以。企业版通常会补充团队成员、预算控制、发票和专属支持能力。", }, ], }, docs: { tag: "DOCUMENTATION", title: "PopiArt 开发者文档", intro: "首页与文档都直接围绕 popiartcli README 的真实安装链路、bootstrap 和命令面来组织。", quickStartTitle: "快速开始", quickSteps: [ { title: "1. 安装 popiartcli", description: "优先使用 Homebrew,或者用官方 install.sh / install.ps1 安装 CLI。", code: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart", }, { title: "2. 执行 bootstrap", description: "把 PopiArt 直接接进 Codex / OpenCode,并生成 completion 与默认发现配置。", code: "popiart bootstrap --agent codex --discoverable", }, { title: "3. 登录并调用官方 skill", description: "完成 auth login 后,先列技能,再执行 run / jobs wait / artifacts pull。", code: "popiart auth login --key \npopiart skills list\npopiart run popiskill-image-text2image-basic-v1 --input @params.json --wait", }, ], envTitle: "环境变量", envVars: [ { name: "POPIART_ENDPOINT", required: "必填", description: "产品层 API 地址,CLI 与控制台共用。", }, { name: "POPIART_API_KEY", required: "必填", description: "登录后签发的产品层 token,而不是上游 provider key。", }, { name: "POPIART_OUTPUT_DIR", required: "选填", description: "默认输出目录,未设置时可沿用当前工作目录。", }, { name: "POPIART_PROJECT_ID", required: "选填", description: "项目级路由、预算和用量归因的作用域。", }, ], skillsTag: "OFFICIAL SKILLS", skillsTitle: "技能能力一览", skills: [ { name: "文生图", command: "popiart run --skill popiskill-image-text2image-basic-v1", description: "从 prompt 直接生成图片,适合快速概念验证与海报起稿。", }, { name: "图像编辑", command: "popiart run --skill popiskill-image-img2img-basic-v1", description: "对已有图片进行编辑、风格迁移和参考图约束生成。", }, { name: "图生视频", command: "popiart run --skill popiskill-video-image2video-basic-v1", description: "把静态图转成动态短视频,并保留任务追踪与 artifact 引用。", }, { name: "模型直连", command: "popiart models infer --model gemini-3.1-flash-image-preview", description: "跳过技能层,直接以模型为入口发任务,适合调试模型能力。", }, ], }, login: { tag: "SIGN IN", title: "登录以访问 PopiArt 官方控制台", subtitle: "登录后即可查看官方技能目录、项目级用量、API key 与订阅状态。", primaryProvider: "使用 PopiArt 账号登录", secondaryProvider: "使用 GitHub 登录", termsPrefix: "点击登录即表示同意", termsLink: "服务条款", and: "和", privacyLink: "隐私政策", benefits: [ { kicker: "CONSOLE", title: "统一查看技能与项目", description: "所有官方技能、项目路由和调用记录都收敛到一个控制台。", }, { kicker: "BILLING", title: "订阅与充值同页管理", description: "避免在 CLI、支付页和后台系统之间来回切换。", }, { kicker: "ACCESS", title: "产品层账号替代裸密钥分发", description: "让团队协作建立在 session、权限和计费规则之上。", }, ], }, console: { tag: "CONSOLE", title: "官方技能与用量控制台", subtitle: "第一版先用静态数据还原页面信息架构,下一步再接回真实 auth、skills、budget 和 billing API。", billingCta: "查看定价", loginCta: "登录账号", metrics: [ { label: "剩余 Credits", value: "8,420" }, { label: "本月调用次数", value: "1,284" }, { label: "活跃项目", value: "6" }, { label: "账单周期支出", value: "¥412.60" }, ], skillsTag: "SKILLS", skillsTitle: "官方技能目录", officialSkills: [ { name: "Basic Text2Image", routeKey: "image.text2image", status: "Live" }, { name: "Basic Img2Img", routeKey: "image.img2img", status: "Beta" }, { name: "Basic Image2Video", routeKey: "video.image2video", status: "Live" }, { name: "Poster Generator", routeKey: "image.poster", status: "Planned" }, ], keysTag: "API KEYS", keysTitle: "当前可用密钥", apiKeys: [ { name: "Primary App Key", masked: "pk_live_****9f2d", scope: "skills:read jobs:write" }, { name: "Automation Key", masked: "pk_live_****1a70", scope: "jobs:write artifacts:read" }, ], usageTag: "USAGE", usageTitle: "近期技能用量", usageRows: [ { name: "文生图", count: "682 calls", cost: "¥118.20" }, { name: "图像编辑", count: "391 calls", cost: "¥94.60" }, { name: "图生视频", count: "77 jobs", cost: "¥199.80" }, ], planTag: "BILLING", planTitle: "当前订阅", planDescription: "Pro Subscription 已激活,额度不足时可追加 Credits Top-up。", planBenefits: [ "月度基础额度 12,000 Credits", "充值包与订阅额度可叠加", "账单、发票和续费记录集中管理", ], planCta: "管理订阅与充值", }, }; const en: AppDictionary = { brand: { name: "PopiArt", subtitle: "Official AI Skill Console", }, nav: { home: "Home", docs: "Docs", console: "Console", pricing: "Pricing", login: "Login", }, footer: { copy: "The official skill catalog, console, and billing surface for creators and coding agents.", }, home: { tag: "OFFICIAL SKILLS", title: "Install popiartcli and bring official PopiArt skills into your coding agent", subtitle: "Use one CLI to discover, inspect, and run official skills, while product-layer auth, routing, and billing stay behind the PopiArt backend.", primaryCta: "Install CLI", secondaryCta: "Read docs", freeTrial: "Supports Homebrew, curl | sh, Windows PowerShell, and source builds", socialProof: "Bootstrap directly into Codex, OpenCode, and OpenClaw after install", stageLabel: "CLI surface", stageValue: "auth / skills / run", stageDescription: "Then move into jobs, artifacts, budget, project, models, and bootstrap for the full workflow.", heroPhrases: [ "auth login", "skills list", "run --wait", "jobs wait", "artifacts pull", "budget status", ], scenesTag: "SCENARIOS", scenesTitle: "Designed around high-frequency AI production flows", scenesSubtitle: "The structure mirrors the reference site, but the content is adapted to PopiArt's product model.", scenes: [ { category: "IMAGE", name: "Text to image", description: "Generate polished concept visuals from prompts with room for brand and style control.", }, { category: "IMAGE", name: "Image editing", description: "Run inpainting, style transfer, multi-reference edits, and iterative revision workflows.", }, { category: "VIDEO", name: "Image to video", description: "Turn key visuals into short motion clips for creator campaigns and demos.", }, { category: "VIDEO", name: "Motion transfer", description: "Apply motion from a reference clip to a target portrait or character frame.", }, { category: "UTILITY", name: "Cutout and upscale", description: "Ship dependable utility skills for ecommerce, editorial, and content pipelines.", }, { category: "OPS", name: "Official skill operations", description: "Bring skills, quotas, projects, and billing together in one product surface.", }, ], flowTag: "QUICK START", flowTitle: "Three steps to start with popiartcli", flowSubtitle: "This mirrors the real install and first-run path from the popiartcli README instead of inventing a separate web-only flow.", flowSteps: [ { title: "Install popiartcli", description: "Use Homebrew, the official install.sh, or PowerShell to get the CLI onto your local machine.", }, { title: "Run bootstrap for your agent environment", description: "Generate completion, default discovery profiles, and make PopiArt directly discoverable to Codex or OpenCode.", }, { title: "Sign in and run official skills", description: "Use auth login, skills list, run, jobs wait, and artifacts pull to complete the first real workflow.", }, ], installTag: "INSTALL", installTitle: "Install popiartcli directly from the homepage", installSubtitle: "Install the CLI first, then optionally run bootstrap so PopiArt becomes discoverable inside your agent environment.", installMethods: [ { badge: "RECOMMENDED", name: "Homebrew", description: "Best for macOS and Linux, and the cleanest upgrade path later.", command: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart", note: "Upgrade with: brew upgrade wtgoku-create/popi/popiart", }, { badge: "CLI ONLY", name: "curl | sh", description: "Download the released Go CLI binary directly from GitHub Releases.", command: "curl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.sh | sh -s -- --cli-only", note: "Upgrade with: popiart update", }, { badge: "WINDOWS", name: "PowerShell", description: "Use the official install.ps1 flow on Windows, with optional version pinning.", command: "irm https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/install.ps1 | iex", note: "You can also pin a VERSION before running the installer.", }, ], bootstrapTitle: "Run bootstrap right after installation", bootstrapDescription: "Generate shell completion, a default discovery profile, and make PopiArt directly available to your coding agent.", bootstrapCommand: "popiart bootstrap --agent codex --completion zsh\npopiart bootstrap --agent codex --discoverable\npopiart skills list", agentSkillTitle: "Manual OpenClaw agent skill install", agentSkillDescription: "If installing from GitHub, point installers at the popiartcli skill/ directory. Do not use the repository root or blob/main/skill/SKILL.md, because some installers scan runtime PopiSkills as agent skills.", agentSkillCommand: "https://github.com/wtgoku-create/popiartcli/tree/main/skill\n\nmkdir -p ~/.openclaw/skills/popiart-cli\ncurl -fsSL https://raw.githubusercontent.com/wtgoku-create/popiartcli/main/skill/SKILL.md \\\n -o ~/.openclaw/skills/popiart-cli/SKILL.md", trustTag: "CLI DESIGN", trustTitle: "Designed around agent workflows instead of scattered scripts", trustStats: [ { label: "JSON-first output", value: "ok / data" }, { label: "Long-task polling", value: "jobs wait" }, { label: "Artifact recovery", value: "artifacts pull" }, { label: "Agent bootstrap", value: "bootstrap" }, ], }, pricing: { tag: "PRICING", title: "Simple subscriptions and credit top-ups", subtitle: "Use a monthly plan for the baseline and top up when video or batch workflows spike.", plans: [ { badge: "Recommended", name: "Pro Subscription", price: "$9.99", cadence: "/month", summary: "For solo creators and small teams that need the official skill catalog and a predictable base quota.", features: [ "12,000 monthly credits", "Full official skill directory", "Per-project usage analytics", "Standard API key and CLI access", ], cta: "Subscribe to Pro", highlight: true, }, { badge: "Flexible", name: "Credit Top-up", price: "$28", cadence: "/pack", summary: "Add extra capacity during launch weeks, video-heavy runs, or large team sprints.", features: [ "50,000 extra credits", "Instant activation after purchase", "Stacks on top of subscriptions", "Tracked in the same billing center", ], cta: "Top up credits", }, ], faqTag: "FAQ", faqTitle: "Common questions", faqs: [ { question: "Can subscriptions and top-ups be combined?", answer: "Yes. The subscription provides the base monthly quota and top-ups add extra spendable credits.", }, { question: "Will the console show per-skill usage?", answer: "Yes. The intended product surface tracks calls, credits, and cost attribution by skill and project.", }, { question: "Can this grow into an enterprise plan later?", answer: "Yes. Team seats, budgets, invoicing, and enterprise controls can sit on top of the same billing layer.", }, ], }, docs: { tag: "DOCUMENTATION", title: "PopiArt developer docs", intro: "The homepage and docs now follow the real install chain, bootstrap flow, and command surface from popiartcli.", quickStartTitle: "Quick start", quickSteps: [ { title: "1. Install popiartcli", description: "Use Homebrew first when possible, or fall back to install.sh / install.ps1.", code: "brew tap wtgoku-create/popi\nbrew install wtgoku-create/popi/popiart", }, { title: "2. Bootstrap your agent environment", description: "Generate completion, default discovery profiles, and make PopiArt directly discoverable.", code: "popiart bootstrap --agent codex --discoverable", }, { title: "3. Sign in and run official skills", description: "Authenticate, inspect the catalog, and run the first skill through the real job workflow.", code: "popiart auth login --key \npopiart skills list\npopiart run popiskill-image-text2image-basic-v1 --input @params.json --wait", }, ], envTitle: "Environment variables", envVars: [ { name: "POPIART_ENDPOINT", required: "Required", description: "The product-layer API base shared by the CLI and the console.", }, { name: "POPIART_API_KEY", required: "Required", description: "A product-layer token issued after login, not a raw provider key.", }, { name: "POPIART_OUTPUT_DIR", required: "Optional", description: "Default output directory for generated artifacts.", }, { name: "POPIART_PROJECT_ID", required: "Optional", description: "Project scope for routing, budgets, and usage attribution.", }, ], skillsTag: "OFFICIAL SKILLS", skillsTitle: "Skill catalog", skills: [ { name: "Text to image", command: "popiart run --skill popiskill-image-text2image-basic-v1", description: "Generate polished visuals directly from text prompts.", }, { name: "Image editing", command: "popiart run --skill popiskill-image-img2img-basic-v1", description: "Edit existing visuals with references, masks, and style constraints.", }, { name: "Image to video", command: "popiart run --skill popiskill-video-image2video-basic-v1", description: "Turn a still image into a short motion clip with tracked artifacts.", }, { name: "Model inference", command: "popiart models infer --model gemini-3.1-flash-image-preview", description: "Bypass the skill layer for direct model testing.", }, ], }, login: { tag: "SIGN IN", title: "Sign in to access the PopiArt official console", subtitle: "View official skills, project usage, API keys, and subscriptions after login.", primaryProvider: "Continue with PopiArt account", secondaryProvider: "Continue with GitHub", termsPrefix: "By continuing you agree to the", termsLink: "Terms of Service", and: "and", privacyLink: "Privacy Policy", benefits: [ { kicker: "CONSOLE", title: "One place for skills and projects", description: "See the official catalog, routing state, and job visibility from a single product surface.", }, { kicker: "BILLING", title: "Subscriptions and top-ups together", description: "Avoid splitting billing, product, and CLI workflows across separate systems.", }, { kicker: "ACCESS", title: "Accounts over raw secrets", description: "Build collaboration on sessions, permissions, and billing rules instead of shared provider keys.", }, ], }, console: { tag: "CONSOLE", title: "Official skills and usage console", subtitle: "This first pass uses seeded data to recreate the target dashboard structure before wiring it to real auth, skill, usage, and billing APIs.", billingCta: "View pricing", loginCta: "Sign in", metrics: [ { label: "Credits left", value: "8,420" }, { label: "Monthly calls", value: "1,284" }, { label: "Active projects", value: "6" }, { label: "Billing cycle spend", value: "$56.20" }, ], skillsTag: "SKILLS", skillsTitle: "Official catalog", officialSkills: [ { name: "Basic Text2Image", routeKey: "image.text2image", status: "Live" }, { name: "Basic Img2Img", routeKey: "image.img2img", status: "Beta" }, { name: "Basic Image2Video", routeKey: "video.image2video", status: "Live" }, { name: "Poster Generator", routeKey: "image.poster", status: "Planned" }, ], keysTag: "API KEYS", keysTitle: "Available keys", apiKeys: [ { name: "Primary App Key", masked: "pk_live_****9f2d", scope: "skills:read jobs:write" }, { name: "Automation Key", masked: "pk_live_****1a70", scope: "jobs:write artifacts:read" }, ], usageTag: "USAGE", usageTitle: "Recent skill usage", usageRows: [ { name: "Text to image", count: "682 calls", cost: "$16.10" }, { name: "Image editing", count: "391 calls", cost: "$12.90" }, { name: "Image to video", count: "77 jobs", cost: "$27.20" }, ], planTag: "BILLING", planTitle: "Current plan", planDescription: "Pro Subscription is active, with top-ups available whenever the team needs extra credits.", planBenefits: [ "12,000 base monthly credits", "Top-up packs stack with subscriptions", "Invoices, renewals, and spend live in one place", ], planCta: "Manage billing", }, }; const dictionaries: Record = { zh, en, }; export function isLocale(value: string): value is Locale { return locales.includes(value as Locale); } export function getDictionary(locale: Locale): AppDictionary { return dictionaries[locale] ?? dictionaries.zh; }