export default {
    // 通用
    common: {
        confirm: '确认',
        cancel: '取消',
        save: '保存',
        saving: '保存中...',
        send: '发送',
        sending: '发送中...',
        syncing: '同步中...',
        processing: '处理中...',
        submitting: '提交中...',
        delete: '删除',
        noIncudalHint: '请勿在名称或描述中使用字样',
        edit: '编辑',
        create: '创建',
        creating: '创建中...',
        deleting: '删除中...',
        deleteSuccess: '删除成功',
        search: '搜索',
        loading: '加载中...',
        noData: '暂无数据',
        noSearchResults: '搜索无结果',
        success: '操作成功',
        error: '操作失败',
        warning: '警告',
        info: '提示',
        yes: '是',
        no: '否',
        back: '返回',
        next: '下一步',
        previous: '上一步',
        close: '关闭',
        reset: '重置',
        refresh: '刷新',
        copy: '复制',
        copied: '已复制',
        copyFailed: '复制失败',
        show: '显示',
        hide: '隐藏',
        done: '完成',
        actions: '操作',
        details: '详情',
        status: '状态',
        name: '名称',
        description: '描述',
        createdAt: '创建时间',
        updatedAt: '更新时间',
        none: '无',
        notSet: '未设置',
        turnstileFailed: '人机验证失败，请重试',
        filter: '筛选',
        total: '共',
        items: '条',
        searchPlaceholder: '搜索...',
        developing: '开发中',
        developingHint: '此功能正在开发中，敬请期待...',
        gotIt: '我知道了',
        expand: '展开',
        collapse: '收起',
        page: '页',
        pageInfo: '第 {current}/{total} 页，共 {count} 条',
        prevPage: '上一页',
        nextPage: '下一页',
        loadFailed: '加载失败',
        all: '全部',
        perPage: '每页',
        totalCount: '共 {count} 条',
        day: '天',
        days: '天',
        seconds: '秒',
        month: '月',
        totalRecords: '共 {count} 条记录',
        deleted: '已删除',
        // 国家名称
        countries: {
            // 亚洲
            cn: '中国',
            hk: '中国香港',
            mo: '中国澳门',
            tw: '中国台湾',
            jp: '日本',
            kr: '韩国',
            sg: '新加坡',
            my: '马来西亚',
            th: '泰国',
            vn: '越南',
            ph: '菲律宾',
            id: '印度尼西亚',
            in: '印度',
            pk: '巴基斯坦',
            bd: '孟加拉国',
            kz: '哈萨克斯坦',
            uz: '乌兹别克斯坦',
            ae: '阿联酋',
            sa: '沙特阿拉伯',
            il: '以色列',
            tr: '土耳其',
            // 欧洲
            gb: '英国',
            de: '德国',
            fr: '法国',
            nl: '荷兰',
            be: '比利时',
            lu: '卢森堡',
            ch: '瑞士',
            at: '奥地利',
            it: '意大利',
            es: '西班牙',
            pt: '葡萄牙',
            ie: '爱尔兰',
            se: '瑞典',
            no: '挪威',
            dk: '丹麦',
            fi: '芬兰',
            pl: '波兰',
            cz: '捷克',
            hu: '匈牙利',
            ro: '罗马尼亚',
            bg: '保加利亚',
            gr: '希腊',
            ua: '乌克兰',
            ru: '俄罗斯',
            // 北美洲
            us: '美国',
            ca: '加拿大',
            mx: '墨西哥',
            // 南美洲
            br: '巴西',
            ar: '阿根廷',
            cl: '智利',
            co: '哥伦比亚',
            pe: '秘鲁',
            // 大洋洲
            au: '澳大利亚',
            nz: '新西兰',
            // 非洲
            za: '南非',
            eg: '埃及',
            ng: '尼日利亚',
            ke: '肯尼亚',
        },
        // 网络模式（统一定义）
        networkMode: {
            nat: 'IPv4 NAT',
            nat_ipv6: 'IPv4 NAT & IPv6',
            nat_ipv6_nat: 'IPv4 NAT & IPv6 NAT',
            ipv6_only: 'IPv6 Only',
            ipv6_nat: 'IPv6 NAT',
        },
        // 实例类型
        instanceType: {
            container: 'LXC',
            vm: 'KVM',
        },
        // 启用/禁用状态
        enabled: '启用',
        disabled: '禁用',
        active: '已启用',
        inactive: '已停用',
        unlimited: '无限制',
    },

    validation: {
        fields: {
            name: '名称',
            identifier: '标识符',
            content: '内容',
            serverAddress: '服务器地址',
            ipAddress: 'IP地址',
            ipOrDomain: 'IP地址或域名',
        },
        required: '{field}不能为空',
        minLength: '{field}长度至少 {min} 个字符',
        maxLength: '{field}长度不能超过 {max} 个字符',
        illegalChars: '{field}包含非法字符',
        safeNameChars: '{field}只能包含中文、字母、数字、连字符、下划线、空格、逗号和圆括号',
        identifierChars: '{field}只能包含字母、数字、连字符和下划线，且必须以字母开头',
        invalidFormat: '{field}格式不正确',
        urlProtocol: '{field}必须以 http:// 或 https:// 开头',
        hostAddressInvalid: '{field}格式不正确，请输入有效的 IPv4、IPv6 地址或域名',
        ipAddressInvalid: '{field}格式不正确，请输入有效的 IPv4 或 IPv6 地址',
        ipv4Invalid: '{field}格式不正确，请输入有效的 IPv4 地址',
    },

    // 导航
    nav: {
        main: '常用',
        dashboard: '概览',
        instances: '实例',
        transfers: '转移',
        friends: '好友',
        tickets: '工单',
        resources: '资源',
        myHosts: '我的节点',
        myPackages: '我的套餐',
        myImages: '我的镜像',
        logs: '日志',
        inbox: '通知',
        settings: '设置',
        wallet: '钱包',
        invites: '邀请',
        help: '帮助',
        admin: '管理',
        expand: '扩展',
        system: '系统',
        users: '用户',
        statistics: '统计',
        hosts: '节点',
        images: '镜像',
        packages: '套餐',
        helpManage: '帮助',
        oauth: 'OAuth',
        broadcast: '公告',
        paymentProviders: '支付',
        billing: '计费',
        withdrawals: '提现',
        aff: '推荐',
        openMenu: '打开菜单',
        collapseSidebar: '折叠侧边栏',
        toggleTheme: '切换主题',
        toggleLanguage: '切换语言',
        terminal: '终端',
        extensions: '扩展',
        scripts: '脚本',
        operations: '运维',
        createInstance: '创建实例',
        create: '创建',
        entertainment: '福利',
        hosting: '托管',
        hostingWallet: '托管收益',
        earnings: '收益',
        mail: '邮箱',
        instanceDetail: '实例详情',
        mailDomain: '邮箱域名',
        myHostCreate: '创建节点',
        myHostDetail: '节点详情',
        myPackageCreate: '创建套餐',
        myPackageEdit: '编辑套餐',
        telegramSettings: 'Telegram 设置',
        adminCreateInstance: '管理员创建实例',
    },

    // 主题
    theme: {
        dark: '深色模式',
        light: '浅色模式',
        system: '跟随系统',
    },

    freeSite: {
        billingCycleLabel: {
            monthly: '月付？月亮替你付了',
            quarterly: '季付？四季都免单',
            semiAnnual: '半年快乐通行证',
            annual: '年付？钱包装睡中',
            custom: '{months}个月，快乐代扣空气',
            free: '免费乱逛许可证',
        },
        billingCycleShort: {
            monthly: '/月，免惊',
            quarterly: '/季，免单',
            semiAnnual: '/半年快乐',
            annual: '/年也白送',
            custom: '/{months}个月快乐',
        },
        copy: {
            finalPrice: '装模作样价',
            renewPrice: '续费？仪式感拉满',
            billingCycle: '快乐档位',
            needPay: '象征性付款',
            originalPrice: '原价标本',
            oldDailyPrice: '旧日租，考古用',
            newDailyPrice: '新日租，摆设用',
            remainingValue: '剩余价值：快乐无价',
            newPlanCost: '新方案成本：空气币',
            currentBalance: '余额吉祥物',
            balanceAfterRenew: '续后余额：纹丝不动',
            walletBalanceTab: '快乐余额',
            walletLogsTab: '免单流水',
            walletCurrentBalance: '当前快乐刻度',
            walletDescription: '白嫖站模式已开启，充值入口去喝茶了，余额负责站岗。',
            walletLogsDescription: '这里记录余额的小动作。别紧张，主线任务依旧是免费玩。',
            walletTotalRecharge: '累计免单',
            walletTotalConsume: '快乐蒸发',
            walletDestroyedValue: '销毁纪念值',
            dashboardNewInstance: '快乐实例',
            dashboardCreateInstance: '召唤快乐机',
            dashboardCreateFirst: '先召唤一台',
            dashboardUserBalance: '快乐余额',
            dashboardBalanceValue: '免费无价',
            dashboardNewContainer: '钱包坐好，我们直接开整',
            instanceCreate: '快乐实例',
            instanceCreateFirst: '先召唤一台',
            instanceBatchRenewTitle: '批量续快乐',
            instanceBatchRenewDescription: '白嫖站模式下，续费只是盖个章，机器继续开心营业。',
            instanceBatchTotalAmount: '空气合计',
            instanceBatchBalanceAfter: '续后心情',
            instanceBatchCurrentBalance: '当前吉祥物余额',
            instanceBatchRenewAction: '确认快乐续杯',
            moneyJustForShow: '数字巡演',
            marketPriceFree: '免单起飞',
            marketPlanCount: '{count} 个快乐档位',
            marketCreateNow: '立即开薅',
            marketLoginToOrder: '登录后开薅',
            marketSelectedPlanTitle: '快乐档位',
            marketCycleMonthly: '月付？月亮替你付了',
            marketMonthlyPrice: '月均？快乐不均摊',
            createOrderSummary: '免单概览',
            createPromoCode: '神秘暗号',
            createPromoPlaceholder: '可填可不填，免费列车已发车',
            createPromoHostedDisabled: '托管节点不吃暗号，直接上车',
            createPromoValid: '暗号有效，快乐加成 {rate}',
            createPromoUsing: '暗号灯已亮',
            createPromoBenefit: '折扣和返利在旁边表演，情绪价值负责鼓掌。',
            createCommissionEstimate: '预计给分享者投喂 ¥{amount} 的想象返利',
            createPlanFee: '标价展览品',
            createMonthlyEquivalent: '折算？快乐拒绝被折算',
            mailPrice: '邮箱也免单',
            mailCheckoutTitle: '邮箱免单确认',
            mailBillingCycle: '快乐周期',
            mailCheckoutAmount: '象征性结算',
            mailCheckoutConfirm: '确认领取邮箱',
            mailBalanceRequired: '余额不余额的，白嫖站讲究先用再说。',
        },
    },

    publicSite: {
        brandTagline: '基于 Incus 的低价 NAT VPS',
        nav: {
            home: '首页',
            overview: '概览',
            products: '套餐列表',
            help: '帮助中心',
        },
        actions: {
            signIn: '登录',
            console: '进入控制台',
            consoleCompact: '控制台',
            browseProducts: '查看全部套餐',
            browseOfficial: '查看直营套餐',
            browseMarket: '查看托管套餐',
            viewCatalog: '查看套餐',
        },
        footer: {
            description: '精选全球多节点 LXC / KVM 套餐，配置丰富、方案齐全，持续提供高性价比 NAT VPS 选择。',
            explore: '浏览',
            account: '账户',
            purchaseHint: '未登录也可以先查看套餐详情，登录后再继续购买。',
        },
        seo: {
            keywords: 'Incus,NAT VPS,LXC,KVM,VPS 面板,云服务器,NAT云主机',
            homeTitle: '基于 Incus 的低价 NAT VPS 平台',
            homeDescription: '精选全球多节点 LXC / KVM 套餐，配置丰富、方案齐全，持续提供高性价比 NAT VPS 选择。',
            marketTitle: '套餐列表',
            marketDescription: '浏览全部公开套餐，按地区、配置、价格与来源筛选 NAT VPS。',
            marketPackageTitle: '{name} - 套餐列表',
            marketPackageDescription: '查看 {name} 的 {type} 配置、月流量与套餐信息，确认后即可继续购买。',
        },
        portal: {
            badge: 'INCUS NAT VPS',
            title: '基于 Incus 的低价 NAT VPS 平台',
            description: '精选全球多节点 LXC / KVM 套餐，覆盖直营与托管供给，配置档位丰富，持续提供高性价比 NAT VPS 选择。',
            authPanelDescription: '把稳定供给、更多地区和更丰富价格带放在同一个入口里，让挑套餐这一步更直接。',
            authPanelFlowLabel: 'ORDER FLOW',
            authPanelFlowTitle: '先看商品，登录后继续下单',
            authPanelFlowDescription: '未登录时可以先浏览公开套餐；从分享链接进入也会保留商品上下文，登录后直接续上原本的购买流程。',
            authPanelTagValue: '高性价比',
            previewLabel: 'CONSOLE',
            previewTitle: '开通后即可直接管理',
            previewDescription: '开机、重装、流量和实例状态等常用操作集中在同一控制台内，日常管理更高效。',
            controlPoint1: '$ incus launch ubuntu:24.04 nat-vps',
            controlPoint2: '# 开机、重装、流量、快照等操作统一管理',
            controlPoint3: '# 直营与托管节点均可在同一控制台购买和管理',
            packageFallback: '公开套餐，可直接查看配置并继续购买。',
            stats: {
                packages: '在售套餐',
                regions: '可选地区',
                official: '直营套餐',
                market: '托管套餐',
            },
            officialTitle: '官方直营节点',
            officialDescription: '价格与配置透明，供应稳定，适合对稳定性与长期使用更看重的用户。',
            officialPoint1: '节点与套餐风格相对稳定，适合持续使用。',
            officialPoint2: '配置、价格与可选方案展示清晰，便于快速确认。',
            officialPoint3: '开通后可直接进入控制台，常用管理操作集中可见。',
            marketTitle: '托管节点套餐',
            marketDescription: '地区选择更多，价格区间更丰富，适合需要特定地区或更高性价比的用户。',
            marketPoint1: '更容易找到低价套餐、特殊地区或不同线路的机器。',
            marketPoint2: '支持按地区、配置与价格筛选，查找效率更高。',
            marketPoint3: '选定套餐后可进入详情，登录后直接继续购买。',
            experienceNoLoginTitle: '全球多节点供给',
            experienceNoLoginDescription: '直营与托管套餐并行上架，热门地区与更多节点选择可以在同一入口集中浏览。',
            experienceRoutingTitle: 'LXC / KVM 套餐更全',
            experienceRoutingDescription: '从轻量容器到完整虚拟机，资源配置与方案档位覆盖更广，便于按需求挑选。',
            experienceThemeTitle: '多价位高性价比',
            experienceThemeDescription: '持续补充不同预算与不同定位的 NAT VPS 套餐，方便横向比较后再决定。',
            catalogLabel: 'PRODUCT LINES',
            catalogTitle: '直营与托管产品并行提供',
            catalogDescription: '直营与托管套餐并行提供，适合优先看稳定供给，也适合挑选更多地区与价格带。',
            emptyPackages: '当前暂无在售套餐',
            browseLabel: 'PLAN LIST',
            browseTitle: '按配置与地区筛选合适套餐',
            browseDescription: '支持按地区、配置与价格筛选套餐，便于新用户选购，也方便老用户补购。',
        },
        market: {
            badge: '公开套餐',
            title: '浏览全部套餐',
            description: '按地区、配置、价格与来源筛选套餐，直接找到合适的 NAT VPS。',
            publicNotice: '当前页面展示全部公开套餐，可按地区、来源与配置筛选。',
            buyLinkNotice: '你打开的是某个套餐的购买链接。未登录时可先查看套餐详情，登录后可继续购买。',
            searchPlaceholder: '搜索套餐名称、描述或虚拟化类型',
            allRegions: '全部地区',
            official: '官方直营',
            market: '托管套餐',
            noPackages: '当前暂无公开套餐',
            noResults: '没有匹配当前筛选条件的套餐',
            soldOut: '暂时售罄',
            inStock: '可开通',
            free: '免费',
            fromMonthly: '¥{price}/月起',
            planCount: '{count} 个方案',
            featuresTitle: '套餐详情',
            plansTitle: '可选方案',
            planCycle: '{months} 个月',
            selectedPlanTitle: '当前方案',
            customConfigTitle: '自定义配置',
            customConfigDescription: '这个套餐没有固定方案。登录后会进入创建页，在允许范围内自定义配置。',
            createNow: '立即开通',
            loginToOrder: '登录后开通',
            loginHint: '登录后会按当前套餐继续进入购买流程。',
            choosePackage: '从左侧选择一个套餐，右侧会显示详细配置。',
            summary: {
                total: '公开套餐',
                available: '可开通',
                regions: '覆盖地区',
                source: '当前来源',
            },
            labels: {
                startingPrice: '起售价',
                traffic: '月流量',
                plans: '方案数',
                cpu: 'CPU',
                memory: '内存',
                disk: '硬盘',
                network: '网络模式',
                hosts: '宿主机数',
                nesting: '嵌套支持',
            },
        },
    },

    // 钱包
    wallet: {
        title: '钱包',
        description: '管理您的账户余额和充值',
        tabs: {
            balance: '账户余额',
            logs: '余额明细',
            records: '充值记录',
        },
        currentBalance: '当前余额',
        recharge: '充值',
        totalRecharge: '累计充值',
        totalConsume: '累计消费',
        totalDestroyedValue: '已销毁总价值',
        noLogs: '暂无余额记录',
        noRecords: '暂无充值记录',
        type: '类型',
        amount: '金额',
        actualAmount: '实际到账',
        estimatedAmount: '预计到账',
        balanceAfter: '余额',
        instanceOrRemark: '实例/备注',
        time: '时间',
        orderNo: '订单号',
        completedAt: '完成时间',
        statusLabel: '状态',
        paymentMethod: '支付方式',
        paymentMethodType: '选择支付方式',
        heleketSelectionHint: '将在 Heleket 支付页选择具体的加密货币和网络，本页不会限制最终付款币种。',
        paymentChannel: '支付渠道',
        paymentUuid: 'UUID:',
        paymentTxid: 'TxID:',
        paymentMethods: {
          alipay: '支付宝',
          wxpay: '微信支付',
          qqpay: 'QQ钱包',
          bank: '网银支付',
          jdpay: '京东支付',
        },
        noProviders: '暂无可用支付渠道',
        amountLabel: '充值金额',
        amountRange: '金额范围',
        feeNote: '手续费',
        payableAmount: '应付金额',
        pay: '立即支付',
        void: '作废',
        logTypes: {
            recharge: '充值',
            consume: '消费',
            refund: '退款',
            adminAdjust: '管理员调整',
            gift: '赠送',
            transferFee: '转移手续费',
            transferRefund: '手续费退还',
            hostingWithdraw: '托管余额提现',
            hostingDeduction: '托管实例扣款',
        },
        status: {
            pending: '待支付',
            paid: '已支付',
            completed: '已完成',
            failed: '失败',
            cancelled: '已取消',
            refunded: '已退款',
        },
        loadLogsFailed: '加载余额明细失败',
        showLotteryGift: '抽奖赠送',
        showingLotteryGift: '抽奖赠送',
        loadProvidersFailed: '加载支付渠道失败',
        loadRecordsFailed: '加载充值记录失败',
        selectProvider: '请选择支付方式',
        invalidAmount: '金额无效',
        orderCreated: '订单已创建',
        redirecting: '正在跳转支付页面...',
        createOrderFailed: '创建订单失败',
        noPayUrl: '获取支付链接失败',
        repayFailed: '重新支付失败',
        orderCancelled: '订单已取消',
        noRefundNotice: '所有充值都无法原路退款。',
        rechargeNotice: '我知道不好用的实例可以销毁退至面板余额，可转移实例 PUSH 是免费的，邮箱可自行修改。',
        cancelFailed: '取消订单失败',
        orderExpired: '订单已过期',
        rechargeSuccess: '充值成功！余额已到账',
        verifyingPayment: '正在验证支付状态...',
        paymentProcessing: '支付处理中，请稍后刷新',
        verifyFailed: '验证支付状态失败',
        amountMismatch: '支付金额与订单金额不匹配，请联系客服',
        natDisclaimer: '我知道所售实例都是 NAT 属性，不保证 IP 在大陆的连通性，所有充值都无法退款。',
    },

    // 推荐计划
    aff: {
        title: '推荐计划',
        description: '邀请好友使用您的优惠码，获取返利收益',
        notActivated: '推荐计划已可用',
        activateHint: '您可以创建优惠码并分享给朋友，当他们使用您的优惠码购买您购买过的方案时，您将获得返利收益。',
        goRecharge: '前往充值',
        affBalance: 'AFF 余额',
        totalEarnings: '累计收益',
        balanceHint: 'AFF 余额仅可转化为账户余额用于面板消费，无法直接提现。',
        convert: '申请转化',
        myCodes: '我的优惠码',
        createCode: '创建优惠码',
        noCodes: '暂无优惠码，创建一个开始推广吧',
        code: '优惠码',
        plan: '方案',
        discount: '折扣',
        commission: '返利',
        usedCount: '使用次数',
        earnings: '收益',
        status: '状态',
        enabled: '已启用',
        disabled: '已禁用',
        toggle: '切换',
        selectPlan: '选择方案',
        selectPlanHint: '选择全局优惠码或方案专有码',
        alreadyCreated: '已创建',
        globalCode: '全局优惠码',
        globalCodeBadge: '全站通用',
        globalCodeHint: '可用于全站所有付费套餐和方案',
        orSelectPlan: '或选择方案专有码',
        discountCommission: '折扣/返利比例',
        discountCommissionHint: '购买者享 {discount} 折扣，您获 {commission} 返利',
        fixedRate: '折扣与返利比例',
        fixedRateHint: '系统固定折扣率和返利率均为 5%',
        createSuccess: '优惠码创建成功',
        createFailed: '创建失败',
        deleteCodeConfirm: '确定删除优惠码 {code} 吗？',
        deleteCodeSuccess: '优惠码已删除',
        deleteCodeFailed: '删除失败',
        toggleSuccess: '状态已切换',
        toggleFailed: '切换失败',
        earningsLog: '收益明细',
        noLogs: '暂无收益记录',
        logType: {
            new_purchase: '新购返利',
            renew: '续费返利',
            convert: '余额转化',
        },
        convertModal: {
            title: '申请转化',
            currentBalance: '当前 AFF 余额',
            amount: '转化金额',
            minAmount: '最低转化金额：0.10 元',
            hint: '提交后将自动转入账户余额。',
            submit: '确认转化',
            success: '转化成功，已转入账户余额',
            failed: '提交失败',
            invalidAmount: '请输入有效的转化金额',
        },
        withdrawals: '转化记录',
        noWithdrawals: '暂无转化记录',
        withdrawalStatus: {
            pending: '待审核',
            approved: '已通过',
            rejected: '已拒绝',
        },
        leaderboard: {
            title: 'AFF 榜单',
            loadFailed: '加载榜单失败',
            empty: '暂无榜单数据',
            you: '就是你',
        },
        // 实例创建页优惠码输入
        promoCode: '优惠码',
        promoCodeOptional: '优惠码（可选）',
        promoCodePlaceholder: '输入优惠码（可选）',
        promoCodeInputPlaceholder: '输入折扣代码',
        promoCodeHostedDisabled: '托管节点不支持使用优惠码',
        promoCodeValid: '优惠码有效，享受 {rate} 折扣',
        promoCodeInvalid: '优惠码无效',
        verifying: '验证中...',
        originalPrice: '原价',
        discountAmount: '折扣',
        promoDiscount: '推广折扣',
        finalPrice: '实付',
        usingPromoCode: '您正在使用优惠码',
        promoCodeBenefit: '您享受 {discount} 折扣，同时为分享者带来约 {commission}% 的返利',
        commissionEstimate: '预计为分享者带来 ¥{amount} 返利',
        // 管理员审核
        adminTitle: 'AFF 转化审核',
        adminDescription: '审核用户的 AFF 余额转化申请',
        user: '用户',
        userBalance: '用户 AFF 余额',
        requestAmount: '申请金额',
        requestTime: '申请时间',
        approve: '通过',
        reject: '拒绝',
        rejectReason: '拒绝原因',
        rejectReasonPlaceholder: '请输入拒绝原因',
        approveSuccess: '已通过，已转入用户余额',
        approveFailed: '审核失败',
        rejectSuccess: '已拒绝',
        rejectFailed: '拒绝失败',
        noRequests: '暂无待审核的转化申请',
        filterStatus: '状态筛选',
        all: '全部',
    },

    popupAnnouncement: {
        title: '站点公告',
        subtitle: '请留意这条最新通知',
        promoLabel: '新机器推广',
        buyNow: '立即购买 {name}',
        viewImage: '查看完整图片',
        promoPlans: '可选方案',
        soldOut: '售罄',
        dismissToday: '今日不见',
        dismissForever: '再也不见',
    },

    // 语言
    language: {
        zh: '中文',
        en: 'English',
    },

    // 认证
    auth: {
        login: '登录',
        loginTo: '登录',
        logout: '退出登录',
        register: '注册',
        registerTo: '注册',
        username: '用户名',
        usernamePlaceholder: '输入用户名',
        usernameOrEmail: '用户名或邮箱',
        usernameOrEmailPlaceholder: '输入用户名或邮箱',
        password: '密码',
        passwordPlaceholder: '输入密码',
        confirmPassword: '确认密码',
        confirmPasswordPlaceholder: '再次输入密码',
        email: '邮箱',
        emailPlaceholder: '输入邮箱',
        rememberMe: '记住我',
        forgotPasswordLink: '忘记密码',
        contactEmail: '联系邮箱',
        noAccount: '没有账号？',
        hasAccount: '已有账号？',
        loginSuccess: '登录成功',
        logoutSuccess: '已退出登录',
        registerSuccess: '注册成功',
        invalidCredentials: '用户名或密码错误',
        sessionExpired: '会话已过期，请重新登录',
        continue: '继续',
        loggingIn: '登录中...',
        registering: '注册中...',
        orUse: '或使用',
        oauthBindHint: '需先在设置中绑定账号才能使用快捷登录',
        enterUsernamePassword: '请输入用户名和密码',
        enterUsernameOrEmailPassword: '请输入账号和密码',
        twoFactorCode: '双因素验证码',
        twoFactorCodePlaceholder: '输入6位验证码',
        twoFactorHint: '请输入验证器应用中显示的验证码',
        twoFactorOptional: '可选',
        twoFactorOptionalHint: '如果您启用了双因素认证，请输入验证码',
        recoveryCode: '恢复码',
        recoveryCodePlaceholder: '输入恢复码',
        recoveryCodeHint: '输入设置2FA时保存的恢复码（一次性使用）',
        useRecoveryCode: '无法访问验证器？使用恢复码',
        useTotpCode: '使用验证器验证码',
        enterRecoveryCode: '请输入恢复码',
        enterTotpCode: '请输入验证码',
        rememberPassword: '记起密码了？',
        verificationCode: '验证码',
        verificationCodePlaceholder: '输入6位验证码',
        invalidCode: '请输入6位验证码',
        forgotPassword: {
          title: '找回密码',
          subtitle: '通过邮箱验证码重置您的密码',
          sendCode: '发送验证码',
          codeSent: '验证码已发送，请查收邮件',
          codeHint: '请输入发送到您邮箱的6位验证码',
          resetPassword: '重置密码',
          resetSuccess: '密码重置成功！新密码已发送到您的邮箱，请查收。',
          twoFactorDisabled: '您的双因素验证（2FA）已被自动禁用，建议重新启用以确保账户安全。'
        },
        oauthNotBound: '请先在个人设置中绑定 {provider} 账号后再使用快捷登录',
        oauthUserNotFound: '用户不存在',
        oauthAccountBanned: '账号已被禁用',
        oauthProviderDisabled: '该登录方式已被禁用',
        oauthTokenError: '获取授权失败，请重试',
        oauthError: 'OAuth 登录失败，请重试',
        loginFailed: '登录失败',
        createAccount: '注册',
        creatingAccount: '创建中...',
        backToLogin: '返回登录',
        registerSuccessRedirect: '注册成功，正在跳转...',
        inviteCode: '邀请码',
        inviteCodePlaceholder: '输入邀请码',
        usernameHint: '字母开头，3-32 个字符',
        passwordHint: '至少 8 位，包含大小写字母和数字',
        fillAllRequired: '请填写所有必填项',
        invalidEmail: '请输入有效的邮箱地址',
        emailContainsIllegal: '邮箱包含非法字符',
        passwordMismatch: '两次密码不一致',
        passwordTooShort: '密码至少 8 位',
        passwordNeedsUppercase: '密码需要包含至少一个大写字母',
        passwordNeedsLowercase: '密码需要包含至少一个小写字母',
        passwordNeedsNumber: '密码需要包含至少一个数字',
        turnstileRequired: '请完成人机验证',
        turnstileFailed: '人机验证失败，请重试',
        // Email verification
        emailCode: '邮箱验证码',
        emailCodePlaceholder: '请输入6位验证码',
        emailCodeRequired: '请输入邮箱验证码',
        registrationClosedTitle: '当前已关闭注册',
        registrationClosedMessage: '抱歉，当前站点暂时关闭注册，如需开通账号请联系管理员。',
        registrationClosedShort: '当前已关闭注册',
        sendCode: '发送验证码',
        sendingCode: '发送中...',
        codeSentHint: '验证码已发送至您的邮箱，10分钟内有效',
        invalidEmailCode: '验证码无效或已过期',
        allowedEmailDomains: '仅支持以下邮箱',
        emailUsernamePlaceholder: '用户名',
        confirmEmail: '确认邮箱地址',
        confirmEmailMessage: '验证码将发送至以下邮箱，请确认地址是否正确：',
        confirmAndSend: '确认发送',
        // Terms of Service
        tos: {
            title: '服务条款',
            agreePrefix: '我已阅读并同意',
            termsLink: '《服务条款》',
            mustAgree: '请阅读并同意服务条款',
            understood: '我已了解',
            loadFailed: '加载服务条款失败',
        },
    },

    // 用户菜单
    userMenu: {
        profile: '个人设置',
        myInstances: '我的实例',
        logout: '退出登录',
    },

    // 配额
    quota: {
        hosts: '宿主机',
        instances: '实例',
        friends: '好友',
        packages: '套餐',
    },

    // 实例相关
    instance: {
        title: '实例管理',
        create: '创建实例',
        name: '实例名称',
        image: '镜像',
        package: '套餐',
        host: '节点',
        ip: 'IP 地址',
        port: '端口',
        cpu: 'CPU',
        memory: '内存',
        disk: '磁盘',
        bandwidth: '带宽',
        expireAt: '到期时间',
        expiredLabel: '已到期',
        freeInstanceLabel: '免费实例',
        config: '配置',
        user: '用户',
        details: '详情',
        // 资源配额（订单概览用）
        ports: '端口',
        snapshots: '快照',
        backups: '备份',
        hostAnnouncement: '节点公告',
        badgeModal: {
            open: '查看或修改实例徽章',
            kicker: '实例徽章',
            title: '实例徽章',
            subtitle: '查看当前实例徽章，并快速切换到其他已拥有徽章：{name}',
            detailsTab: '徽章说明',
            ownedTab: '我的徽章',
            noBadgeSeries: '未设置徽章',
            noBadgeTitle: '当前未设置实例徽章',
            noBadgeSummary: '这个实例目前仍在使用默认图标。',
            noBadgeDescription: '你可以切换到“我的徽章”，把已拥有的徽章快速应用到当前实例。',
            statusLabel: '当前状态',
            statusApplied: '已应用到当前实例',
            statusNotApplied: '未设置实例徽章',
            ownedCountLabel: '已拥有副本',
            openOwnedTab: '从我的徽章中选择',
            manageUnavailable: '当前实例不在你的可管理实例列表中，这里只能查看徽章信息，不能直接修改。',
            emptyOwnedTitle: '你还没有可用的实例徽章',
            emptyOwnedHint: '前往娱乐中心获取徽章后，就可以在这里快速切换当前实例的徽章。',
            applyCurrent: '应用到当前实例',
            replaceCurrent: '替换当前实例徽章',
            moveCurrent: '转移到当前实例',
            moveFromAvatar: '从头像改为当前实例',
            appliedHere: '当前实例中',
            currentHint: '这个徽章已经应用在当前实例上。',
            replaceHint: '应用后会替换当前实例已经使用的徽章。',
            moveFromAvatarHint: '应用后会先从当前头像上移除。',
            moveFromInstanceHint: '应用后会先从实例“{name}”上移除。',
            removeCurrent: '移除当前实例徽章',
            updateSuccess: '实例徽章已更新',
            removeSuccess: '已移除当前实例徽章',
        },
        errorBanner: {
            title: '实例异常',
            description: '实例异常，您可直接销毁（付费实例剩余价值退款不扣除手续费）',
            destroyNow: '立即销毁',
            confirmDestroy: '确定要销毁此异常实例吗？付费实例的剩余价值将退款至您的钱包（不扣除手续费）。',
        },
        actions: {
            start: '启动',
            stop: '停止',
            restart: '重启',
            delete: '删除',
            console: '控制台',
            snapshot: '快照',
            backup: '备份',
            rename: '重命名',
            clone: '复制',
            suspend: '封停',
            unsuspend: '解封',
        },
        renameModal: {
            title: '重命名实例',
            name: '实例名称',
            namePlaceholder: '输入新的实例名称',
            cancel: '取消',
            confirm: '确认',
            renaming: '重命名中...',
            success: '实例已重命名',
            failed: '重命名失败',
        },
        statusLabel: '状态',
        modeLabel: '模式',
        quotaLabel: '配额',
        trafficLabel: '流量',
        status: {
            running: '运行中',
            stopped: '已停止',
            suspended: '已封停',
            starting: '启动中',
            stopping: '停止中',
            restarting: '重启中',
            creating: '创建中',
            error: '异常',
            deleted: '已删除',
        },
        statusFilter: {
            all: '全部状态',
        },
        createdAt: '创建时间',
        manageDesc: '管理您的容器实例',
        userInstances: '用户 "{name}" 的实例',
        clearFilter: '清除筛选',
        searchPlaceholder: '搜索实例名称、IP...',
        totalCount: '共 {count} 个实例',
        noInstances: '暂无实例',
        noMatchingInstances: '未找到匹配的实例',
        tryOtherKeywords: '尝试使用其他关键词',
        createFirstInstance: '创建第一个容器实例开始使用',
        listLayout: '列表',
        cardLayout: '卡片',
        order: {
            label: '调整排序',
            top: '置顶',
            up: '上移',
            down: '下移',
            bottom: '置底',
            updateSuccess: '实例顺序已更新',
            updateFailed: '保存实例顺序失败',
        },
        confirmDelete: '确定删除实例 "{name}"？此操作不可恢复。',
        createPage: {
            title: '创建实例',
            description: '选择套餐并配置您的容器实例',
            instanceName: '实例名称',
            instanceNamePlaceholder: 'my-instance',
            selectPackage: '请选择套餐',
            selectSshKey: '请选择 SSH 密钥',
            creating: '创建中...',
            createSuccess: '实例创建中，请稍后在实例列表中查看状态',
            loadFailed: '加载数据失败',
            loadHostsFailed: '加载可用宿主机失败',
            loadImagesFailed: '加载可用镜像失败',
            missingSshKey: '缺少 SSH 密钥',
            missingSshKeyDesc: '创建实例需要 SSH 密钥。请先前往',
            profileSettings: '个人设置',
            addSshKey: '添加 SSH 公钥。',
            quotaInsufficient: '配额不足',
            quotaCpu: 'CPU: 已用 {used}%/{limit}% 额配，本次需要 {need}%',
            quotaMemory: '内存: 已用 {used}/{limit} MB，本次需要 {need} MB',
            quotaDisk: '磁盘: 已用 {used}/{limit} MB，本次需要 {need} MB',
            quotaInstance: '实例: 已达上限 {used}/{limit} 个',
            packageNoHosts: '套餐未绑定宿主机，请联系管理员',
            sharedPackageNotFound: '分享的套餐不存在或已失效，已为您选择其他可用套餐',
            quotaInfo: {
                prefix: '该套餐',
                you: '您',
                maxInstances: '',
                count: '数量',
                instances: '个实例',
                unlimited: '无限制',
                cpu: 'CPU',
                memory: '内存',
                remaining: '该套餐剩余配额',
            },
            resourceLimit: {
                title: '资源配额不足，无法创建实例',
                noInstances: '剩余实例数量为 0，无法创建新实例',
                insufficientMemory: '剩余内存不足（<128MB），无法创建实例',
                insufficientCpu: '剩余 CPU 不足（<15%），无法创建实例',
            },
            ownPaidPackageWarning: '这是您自己创建的付费套餐，不能为自己开通实例',
            destroyTrafficNotice: '销毁限制：实例本月已用流量低于 5 GB 时才可销毁。',
            firstPaidInstanceNotice: '销毁限制：实例本月已用流量低于 5 GB 时才可销毁。',
            // 订单概览
            orderSummary: '订单概览',
            packageName: '套餐',
            planName: '方案',
            billingCycle: '计费周期',
            months: '个月',
            month: '月',
            resourceConfig: '资源配置',
            planFee: '方案费用',
            // 套餐来源
            source: {
                official: '亲儿子',
                market: '野生大佬',
                friends: '好友共享',
            },
            fun: {
                selectRegion: '挑个地盘',
                packageCount: '{count} 个可薅档位',
                selectPackage: '挑个饭碗',
                selectPlan: '挑个姿势',
                planDesc: '选个顺眼的付费档位',
                customPlanHint: '没看上的？提交工单让人给你单独开小灶',
                noPlans: '这个套餐暂时没摆上菜单',
                planSoldOut: '被薅空了',
                noPackages: '现在还没啥可薅的',
                selectHost: '宠幸谁？',
                hostAutoSelected: '默认先宠幸第一台能干活的',
                selectSystem: '挑个灵魂',
                noImages: '暂时没有可投胎的系统',
                selectSshKey: '交出通行令牌',
            },
            // 托管免责提示
            hostedDisclaimer: {
                title: '托管节点提示',
                content: '此为用户托管节点，售后由托管者（UID:{uid}）负责。仅提供平台服务，不担保节点质量。若托管者失联，将处理其托管余额退还至受影响用户的面板余额。',
            },
            zoneNotice: {
                badge: '专区',
                content: '此为 UID:{uid} 的专区，售后由 {username} 处理。',
            },
        },
        startingInstance: '{name} 启动中',
        stoppedInstance: '{name} 已停止',
        restartingInstance: '{name} 重启中',
        deletedInstance: '{name} 已删除',
        actionFailed: '操作失败',
        verificationRequiredHint: '此操作需要二次验证，请前往实例详情页面执行',
        totalRecords: '共 {count} 条记录',
        prevPage: '上一页',
        nextPage: '下一页',
        batch: {
            selectedCount: '已选 {count} 个实例',
            currentPageOnly: '批量操作仅作用于当前页选中的实例',
            clear: '取消选择',
            start: '批量开机',
            stop: '批量关机',
            restart: '批量重启',
            sync: '批量同步',
            renew: '批量续费',
            autoRenewOn: '开启自动续费',
            autoRenewOff: '关闭自动续费',
            destroy: '批量销毁',
            noEligibleAction: '所选实例中没有可执行该操作的实例',
            partialResult: '已完成 {success} 个，失败 {failed} 个，跳过 {skipped} 个',
            successResult: '已成功处理 {count} 个实例',
            actionFailed: '批量操作失败',
            previewFailed: '加载批量预览失败',
            renewTitle: '批量续费',
            renewDescription: '为当前选中的付费实例统一续费，只有支持所选时长的实例会被执行。',
            selectedMonths: '续费时长',
            eligibleCount: '可执行数量',
            totalAmount: '合计金额',
            renewEmpty: '所选实例中没有可续费项目',
            eligibleList: '可执行实例（{count}）',
            skippedList: '跳过实例（{count}）',
            hosted: '托管实例',
            unsupportedPeriod: '当前所选时长不可续费',
            unknownReason: '当前无法处理',
            destroyTitle: '批量销毁',
            destroyDescription: '销毁当前选中的实例，只有满足条件的实例会被执行。',
            destroyEmpty: '所选实例中没有可销毁项目',
            refundTotal: '预计总退款',
            feeTotal: '预计总手续费',
            feeWaived: '免手续费',
            confirmHint: '请输入 DESTROY 以确认批量销毁',
            confirmPlaceholder: '输入 DESTROY 确认',
        },
        batchReason: {
            notFoundOrForbidden: '实例不存在或无权操作',
            freeNoRenew: '免费实例无需续费',
            billingUnavailable: '无法获取实例计费信息',
            noRenewOptions: '暂无可用续费选项',
            renewWindow: '仅可在到期前 {days} 天内续费',
            renewFailed: '续费失败',
            freeNoAutoRenew: '免费实例不支持自动续费',
            autoRenewAlreadyOn: '已经开启自动续费',
            autoRenewAlreadyOff: '已经关闭自动续费',
            autoRenewFailed: '自动续费设置失败',
            deleted: '实例已删除',
            creating: '实例正在创建中，无法销毁',
            suspended: '实例已被封停，无法销毁，请先联系管理员解封',
            destroyTrafficLimit: '当前月流量周期无法销毁，已用流量达到或超过 5G',
            destroyFailed: '销毁实例失败',
        },
        // 移动端卡片
        mobileCard: {
            ipAddress: 'IP 地址',
            config: '配置',
            disk: '硬盘',
            traffic: '流量',
            host: '节点',
            user: '用户',
            unlimited: '无限制',
            cpuCore: '%核',
            quota: '配额',
            ports: '端口',
            snapshots: '快照',
            backups: '备份',
            sites: '反代',
        },
        // 实例创建组件
        selector: {
            // 地区选择
            selectRegion: '选择国家/地区',
            allRegions: '全部',
            noRegions: '暂无可用地区',
            packageCount: '{count} 个套餐',
            // 套餐选择
            selectPackage: '选择套餐',
            selectPlan: '选择方案',
            planDesc: '选择适合您需求的付费方案',
            customPlanHint: '找不到合适的方案？您可以提交工单申请定制配置',
            noPlans: '该套餐暂无可用方案',
            planSoldOut: '已售罄',
            noPackages: '暂无可用套餐',
            cpu: 'CPU',
            memory: '内存',
            disk: '硬盘',
            cores: '核',
            networkMode: {
                nat: 'NAT',
                natDesc: '通过端口映射访问',
                nat_ipv6: 'NAT + IPv6',
                nat_ipv6Desc: 'NAT + 公网 IPv6',
            },
            docker: '可嵌套',
            privileged: '特权',
            configureResources: '配置资源',
            adjustBasedOnPackage: '基于套餐上限自由调节',
            cpuAllowance: '额配',
            accountQuota: '账户配额',
            packageLimit: '套餐限制',
            selectHost: '选择宿主机',
            hostOptional: '可选，不选则系统自动分配',
            hostAutoSelected: '默认选中第一台可用节点',
            hostTraffic: '该节点下实例月流量',
            autoAssign: '自动分配',
            autoAssignDesc: '系统根据负载自动选择最优节点',
            available: '可用',
            selectSystem: '选择系统',
            showSyncedImages: '显示当前节点允许的镜像',
            noImages: '暂无可用镜像',
            noImagesOnHost: '所选节点暂无可用镜像',
            contactAdmin: '请联系节点所有者或管理员调整镜像策略',
            selectSshKey: '选择 SSH 密钥',
            noSshKeys: '暂无 SSH 密钥',
            addSshKeyHint: '请先在设置页面添加 SSH 公钥',
            hostInsufficient: '宿主机资源不足',
            hostInsufficientDesc: '当前配置需要 {cpu}% CPU 和 {memory}GB 内存，但套餐内所有宿主机均无法满足。',
            hostInsufficientSuggest: '建议降低实例配置或等待资源释放。',
            viewProbe: '查看探针监控',
            prevPage: '上一页',
            nextPage: '下一页',
            pageInfo: '第 {current}/{total} 页，共 {count} 条',
            // 方案资源配额
            ports: '端口',
            snapshots: '快照',
            backups: '备份',
            sites: '站点',
            bandwidth: '带宽',
        },
        // 付费订阅卡片
        subscription: {
            premium: '付费订阅',
            expiresAt: '到期日期',
            expiresIn: '剩余时间',
            expired: '已过期',
            days: '天',
            billingCycle: '计费周期',
            renewPrice: '续费价格',
            month: '月',
            monthly: '月付',
            quarterly: '季付',
            semiAnnual: '半年付',
            annual: '年付',
            months: '个月',
            perMonth: '/月',
            perQuarter: '/季',
            perHalfYear: '/半年',
            perYear: '/年',
            renew: '续费',
            renewSuccess: '续费成功',
            applyAffShort: '优惠码',
            applyAffTitle: '绑定 AFF 优惠码',
            applyAffInstance: '实例',
            applyAffCurrentRenewPrice: '当前续费价格',
            applyAffCodeLabel: 'AFF 优惠码',
            applyAffCodePlaceholder: '输入 AFF 优惠码',
            applyAffEffectHint: '绑定成功后仅影响后续续费价格。',
            applyAffNoRefundHint: '不会退还当前周期差价，也不会改变当前周期费用。',
            applyAffOwnCodeHint: '只能绑定他人的优惠码，不能绑定自己的优惠码。',
            applyAffSubmit: '确认绑定',
            applyAffSubmitting: '绑定中...',
            applyAffSuccess: '优惠码绑定成功，后续续费将享受折扣',
            // 自动续费
            autoRenew: '自动续费',
            autoRenewOn: '已开启自动续费',
            autoRenewOff: '未开启自动续费',
            autoRenewEnabled: '已开启自动续费',
            autoRenewDisabled: '已关闭自动续费',
            enableAutoRenew: '开启自动续费',
            disableAutoRenew: '关闭自动续费',
            autoRenewHint: '到期前 24 小时将自动从余额扣款续费',
            autoRenewDesc: '开启自动续费后，实例将在到期前自动按 {cycle} 周期续费，每次续费 ￥{price}',
            currentStatus: '当前状态',
        },
        // 实例销毁
        destroy: {
            button: '销毁',
            title: '销毁实例',
            warning: '此操作将永久删除实例及其所有数据，包括快照、备份、端口映射等，且不可恢复。',
            warningFree: '此操作将永久删除实例及其所有数据，且不可恢复。',
            rulesTitle: '销毁规则',
            rulesDesc: '了解销毁功能的使用规则和限制',
            ruleFirstFree: '首次销毁免手续费',
            ruleFirstFreeDesc: '您的第一次销毁操作将免除手续费，全额退款',
            ruleFeeRate: '后续销毁收取 {rate}% 手续费',
            ruleFeeRateDesc: '第二次及以后销毁收取 {rate}% 手续费',
            ruleTrafficThreshold: '付费实例当前月流量周期已用流量需低于 5G',
            ruleTrafficThresholdDesc: '若当前月流量周期已用流量达到或超过 5G，则本次无法销毁付费实例',
            ruleFreeInstance: '免费实例可直接销毁',
            ruleFreeInstanceDesc: '免费实例销毁无退款，不计入销毁次数',
            // 预览信息
            instanceInfo: '实例信息',
            instanceName: '实例名称',
            hostName: '所在节点',
            planName: '当前方案',
            refundInfo: '退款信息',
            remainingDays: '剩余天数',
            remainingValue: '剩余价值',
            maxRefundable: '退款上限',
            feeRate: '手续费率',
            feeAmount: '手续费',
            refundAmount: '实际退款',
            firstTimeFree: '首次免手续费',
            freeInstanceNoRefund: '免费实例无退款',
            days: '天',
            // 确认
            confirmTitle: '确认销毁',
            confirmHint: '请输入实例名称 {name} 以确认销毁',
            confirmPlaceholder: '输入实例名称确认',
            confirmButton: '确认销毁',
            destroying: '销毁中...',
            cancel: '取消',
            // 状态
            success: '实例已销毁',
            successWithRefund: '实例已销毁，已退款 ¥{amount}',
            failed: '销毁失败',
            loadFailed: '加载销毁信息失败',
            // 不可销毁原因
            cannotDestroy: '无法销毁',
        },
        // 实例详情页
        detail: {
            invalidId: '无效的实例 ID',
            notExist: '实例不存在',
            loadFailed: '加载实例失败',
            tabs: {
                info: '信息',
                network: '网络',
                traffic: '流量',
                quota: '配额',
                snapshots: '快照',
                backups: '备份',
                config: '配置',
                logs: '日志',
            },
            task: {
                start: '正在启动...',
                stop: '正在停止...',
                restart: '正在重启...',
                rebuild: '正在重装...',
                recreate: '正在重建...',
                clone: '正在复制...',
                change_host: '正在改节点...',
            },
            actions: {
                starting: '实例启动中',
                stopped: '实例已停止',
                restarting: '实例重启中',
                deleted: '实例已删除',
                confirmDelete: '确定删除实例 "{name}"？\n\n此操作将永久删除实例和所有数据，不可恢复。',
                actionFailed: '操作失败',
                taskQueued: '操作已提交，请稍候...',
                taskInProgress: '实例正在执行其他操作，请稍候',
                rebuildSuccess: '系统重装成功，新密码已生成',
                recreateSuccess: '实例重建成功，新密码已生成',
                selectImageAndKey: '请选择镜像和 SSH 密钥',
                clone: '复制实例',
                cloning: '复制中...',
                cloneSuccess: '实例复制成功',
                cloneFailed: '实例复制失败',
                confirmClone: '确定要复制实例 "{name}" 吗？',
                cloneNotice: '复制操作将创建一个新的实例副本，新实例将继承源实例的所有配置，但会分配新的端口映射。复制可能需要几分钟时间，请耐心等待。',
                stopRequired: '请先停止实例',
                stopRequiredHint: '此操作需要实例处于停止状态',
                suspend: '封停实例',
                unsuspend: '解除封停',
                suspending: '封停中...',
                unsuspending: '解封中...',
                suspendSuccess: '实例已封停',
                unsuspendSuccess: '实例已解封',
                syncStatus: '同步',
                help: '帮助',
                syncStatusChanged: '状态已同步：{from} → {to}',
                syncStatusNoChange: '状态已更新，已同步网络地址',
                syncIpv4Changed: '内网 IP 已更新: {from} → {to}',
                syncProxySitesUpdated: '已同步更新 {count} 个反代站点配置',
                confirmSuspend: '确定要封停实例 "{name}" 吗？',
                confirmSuspendNotice: '封停后，实例所有者将无法对该实例进行任何操作，直到所有者手动解除封禁。',
                suspendReason: '封停原因',
                suspendReasonPlaceholder: '请输入封停原因，将通过站内信通知实例所有者...',
                confirmUnsuspend: '确定要解除实例 "{name}" 的封停状态吗？',
            },
            rebuild: {
                title: '重装',
                noHostInfo: '无法获取节点信息',
                noImages: '该节点当前没有可用镜像，请联系节点所有者或管理员调整镜像策略。',
                loadImagesFailed: '加载镜像列表失败',
                loadKeysFailed: '加载 SSH 密钥失败',
            },
            recreate: {
                title: '重建实例',
            },
            port: {
                fillPrivatePort: '请填写内部端口',
                added: '端口映射已添加',
                addedBoth: 'TCP 和 UDP 端口映射已添加',
                batchAdded: '已添加 {count} 个端口映射',
                stillConflict: '部分端口仍有冲突，请重新选择',
                deleted: '端口映射已删除',
                deleteFailed: '删除失败',
                confirmDelete: '确定删除此端口映射？',
                confirmBatchDelete: '确定删除选中的 {count} 个端口映射？',
                batchDeleted: '已删除 {count} 个端口映射',
                batchDeletePartial: '成功删除 {success} 个，{fail} 个删除失败',
            },
            password: {
                loadFailed: '加载密码失败',
            },
            quota: {
                saved: '配额已更新',
                saveFailed: '保存失败',
                portExceedUsed: '端口配额不能小于当前已使用量：当前已使用 {used} 个端口，输入 {input}',
                snapshotExceedUsed: '快照配额不能小于当前已使用量：当前已使用 {used} 个快照，输入 {input}',
                backupExceedUsed: '备份配额不能小于当前已使用量：当前已使用 {used} 个备份，输入 {input}',
                portOutOfRange: '端口配额必须在 1-1000 范围内',
                snapshotOutOfRange: '快照配额必须在 1-1000 范围内',
                backupOutOfRange: '备份配额必须在 1-1000 范围内',
            },
            copy: {
                success: '已复制到剪贴板',
                failed: '复制失败',
            },
            // 信息标签页
            info: {
                title: '基本信息',
                instanceId: '实例 ID',
                image: '镜像',
                host: '节点',
                networkMode: '网络模式',
                instanceMode: '实例模式',
                nat: 'NAT',
                ipv6: 'IPv6',
                sshPort: 'SSH 端口',
                sshHelpTitle: 'SSH 连接说明',
                sshHelpIpv4: '使用 IPv4 连接时，需要先前往「网络」标签页添加 22 端口的映射，然后使用公网 IP 和映射后的端口进行连接。',
                sshHelpIpv6: '使用 IPv6 连接时，可以直接使用公网 IPv6 地址和 22 端口进行连接，无需配置端口映射。',
                rootPassword: 'Root 密码',
                createdAt: '创建时间',
                expiresAt: '到期时间',
                suspended: '实例已封停',
                suspendedAt: '封停时间',
                suspendReasonLabel: '封停原因',
                suspendReasonExpired: '实例已到期，请续费后解封',
                suspendReasonDefault: '未填写封停原因',
                suspendTip: '封停期间，实例无法启动、重启、重装等操作。如需解封或有疑问，请提交工单。',
                copy: '复制',
                show: '显示',
                hide: '隐藏',
                resourceUsage: '资源占用',
                cpu: 'CPU',
                memory: '内存',
                disk: '硬盘',
                inbound: '入站',
                outbound: '出站',
                ingressLimit: '入栈',
                egressLimit: '出栈',
                hostUid: '托管UID',
                hostOwnerTitle: '托管者信息',
                hostOwnerEmail: '邮箱',
                hostOwnerHostCount: '托管节点数',
                hostOwnerInstanceCount: '节点实例数',
                hostOwnerRegisteredDays: '注册天数',
                includesCache: '含页面缓存',
                cannotEditConfig: '实例状态不允许修改配置',
                redeem: '兑换',
                redeemTitle: '兑换资源',
            },
            // Cloud-init 初始化状态
            cloudInit: {
                initializing: '初始化中',
                retry: '重新检查',
                retryUnknown: '重试检测',
                retryStalled: '继续检测',
                short: '初始化',
                shortUnknown: '待确认',
                shortStalled: '较慢',
                clickToRetry: '系统正在初始化，点击重新检测',
                clickToRetryUnknown: '当前无法确认 Cloud-init 状态，点击重新检测',
                clickToRetryStalled: '初始化耗时较长，点击继续检测或手动标记完成',
                statusUnknown: '状态待确认',
                stalled: '初始化较慢',
                manualComplete: '手动标记完成',
                manualShort: '完成',
                manualCompleteSuccess: '已手动标记实例初始化为完成',
            },
            // 网络标签页
            network: {
                title: '网络地址',
                privateIpv4: '内网 IPv4',
                publicIpv4: '公网 IPv4',
                publicIpv6: '公网 IPv6',
                portMappings: '端口映射',
                publicIp: '公网 IP',
                add: '添加',
                noQuota: '请先分配端口配额',
                quotaFull: '端口配额已满',
                addPortMapping: '添加端口映射',
                prevPage: '上一页',
                nextPage: '下一页',
                perPage: '每页',
                filterBoth: '全部',
                selectAll: '全选当前页',
                selectedCount: '已选择 {count} 项',
                batchDelete: '批量删除',
                noFilterResults: '当前筛选条件无匹配结果',
                noPortQuota: '未分配端口配额',
                allocateQuotaHint: '请先在「配额」标签页中分配端口配额',
                noPortMappings: '暂无端口映射，点击「添加」创建',
                ipv6OnlyPortMappingHint: 'IPv6 Only类型的实例无法进行端口映射，请直接使用实例的IPv6',
                additionalIpv6: '额外 IPv6 地址',
                addIpv6: '添加 IPv6',
                noAdditionalIpv6: '暂无额外 IPv6 地址',
                ipAdded: 'IPv6 地址添加成功',
                ipAddFailed: 'IPv6 地址添加失败',
                ipDeleted: 'IPv6 地址已删除',
                ipDeleteFailed: 'IPv6 地址删除失败',
                confirmDeleteIp: '确定要删除这个 IPv6 地址吗？',
                // IPv6 管理新增
                primaryIpv6: '主 IPv6',
                extraIpv6: '额外 IPv6',
                ipv6Subnets: 'IPv6 网段',
                addSubnet: '分配网段',
                customIpv6: '自定义 IPv6',
                randomIpv6: '随机分配',
                setCustom: '设置自定义',
                custom: '自定义',
                primary: '主',
                addIpv6Modal: {
                    title: '添加 IPv6 地址',
                    randomHint: '系统将从节点 IPv6 子网中随机分配一个地址',
                    customHint: '输入您自己的 IPv6 地址（必须在节点子网范围内）',
                    addressLabel: 'IPv6 地址',
                    addressPlaceholder: '如 2001:db8::1',
                    invalidAddress: '无效的 IPv6 地址格式',
                    adding: '添加中...',
                },
                subnetModal: {
                    title: '分配 IPv6 网段',
                    hint: '选择要分配的网段大小，节点将自动从可用池中分配',
                    prefix112: '/112 (65,536 个 IP)',
                    prefix120: '/120 (256 个 IP)',
                    prefix124: '/124 (16 个 IP)',
                    allocating: '分配中...',
                    allocate: '分配',
                },
                noSubnets: '暂无分配的 IPv6 网段',
                subnetAllocated: 'IPv6 网段分配成功',
                subnetAllocateFailed: 'IPv6 网段分配失败',
                subnetDeleted: 'IPv6 网段已删除',
                subnetDeleteFailed: 'IPv6 网段删除失败',
                confirmDeleteSubnet: '确定要删除这个 IPv6 网段吗？',
                customIpv6Set: '自定义 IPv6 地址设置成功',
                customIpv6Failed: '自定义 IPv6 地址设置失败',
                ipv6NotInSubnet: 'IPv6 地址必须在节点子网范围内',
                ipv6AlreadyExists: 'IPv6 地址已被占用',
                instanceMustRunning: '实例必须处于运行状态才能管理 IPv6',
                loading: '加载中...',
                // 重新分配 IPv6
                reassignIpv6: '重新获取',
                reassignIpv6Confirm: '确定要重新分配 IPv6 地址吗？',
                reassignIpv6ConfirmHint: '重新分配后需要重装系统才能生效',
                reassignIpv6Success: 'IPv6 已重新分配，请重装系统使其生效',
                reassignIpv6Failed: 'IPv6 重新分配失败',
                reassignIpv6Loading: '重新分配中...',
                reassignIpv6StopRequired: '实例必须先关机才能重新分配 IPv6',
                reassignIpv6Cooldown: '每天只能重新获取一次，请等待 {hours} 小时后重试',
                reassignIpv6CooldownShort: '{hours}小时后',
                reassignIpv6NotSupported: '此实例不支持重新分配 IPv6',
            },
            // 配额标签页
            quotaTab: {
                title: '实例配额设置',
                portLimit: 'NAT 端口数上限',
                snapshotLimit: '快照数量上限',
                backupLimit: '备份数量上限',
                placeholder: '留空或输入0自动填入剩余额度',
                currentUsage: '当前使用',
                quotaLimit: '配额限制',
                full: '已满',
                remaining: '剩余',
                defaultRemaining: '默认账户剩余额度',
                unit: '个',
                portMappings: '端口映射',
                snapshots: '快照',
                backups: '备份',
                save: '保存配额设置',
                saving: '保存中...',
            },
        },
        // 修改配置弹窗
        configEdit: {
            title: '修改配置',
            hint: '修改 CPU、内存配置将实时生效，无需重启实例。磁盘只能增大，不能缩小。',
            cpu: 'CPU',
            memory: '内存',
            disk: '硬盘',
            traffic: '流量',
            trafficHint: '留空表示无限制，单位为GB',
            cores: '核',
            resourceType: '资源类型',
            current: '当前',
            modifyTo: '修改为',
            diskOnlyIncrease: '只能增大',
            quotaInsufficient: '配额不足',
            quotaError: {
                cpu: 'CPU 配额不足：可用 {available}%，需要 {need}%',
                memory: '内存配额不足：可用 {available}，需要 {need}',
                disk: '磁盘配额不足：可用 {available}，需要 {need}',
            },
            success: '配置修改成功',
            failed: '配置修改失败',
            packageRequired: '实例必须绑定套餐才能修改配置',
            loadPackageFailed: '加载套餐信息失败，请稍后重试',
        },
        // 站点管理
        sites: {
            title: '建站',
            addSite: '添加站点',
            editSite: '编辑站点',
            addFirstSite: '添加第一个站点',
            empty: '暂无反代站点，点击上方按钮添加。',
            caddyNotEnabled: '宿主机未启用 Caddy',
            caddyNotEnabledHint: '当前实例所在宿主机未启用 Caddy 反代服务，无法使用建站功能。',
            domain: '域名',
            domainRequired: '请输入域名',
            domainHint: '输入要绑定的域名，不支持泛域名',
            wildcardNotAllowed: '不支持泛域名（如 *.example.com）',
            targetPort: '内部端口',
            portHint: '实例内部运行的 Web 服务端口（如 80, 3000, 8080）',
            statusActive: '已生效',
            statusPending: '等待解析',
            statusError: '配置失败',
            refresh: '刷新配置',
            loadFailed: '加载站点列表失败',
            addSuccess: '站点添加成功',
            addFailed: '添加站点失败',
            deleteConfirm: '确定要删除站点 {domain} 吗？',
            deleteSuccess: '站点已删除',
            deleteFailed: '删除站点失败',
            updateSuccess: '站点配置已更新',
            updateFailed: '更新站点失败',
            refreshSuccess: '配置已刷新',
            refreshFailed: '刷新配置失败',
            addedSuccess: '域名添加成功',
            dnsHintDesc: '请前往您的 DNS 服务商添加以下解析记录：',
            dnsType: '类型',
            dnsHost: '主机',
            dnsValue: '值',
            sslAutoHint: 'DNS 解析生效后，Caddy 将自动申请 SSL 证书。',
            quotaInfo: '已使用 {used} / {limit} 个站点',
            quotaFull: '已达上限',
            disabled: '已禁用',
            enableSite: '启用站点',
            disableSite: '禁用站点',
            toggleFailed: '切换状态失败',
            enableHttps: '启用 HTTPS',
            httpsHint: '自动申请 Let\'s Encrypt 证书，访问 HTTP 会跳转到 HTTPS',
            httpsEnabled: '已启用 HTTPS',
            httpOnly: '仅 HTTP',
            checkCert: '检查证书状态',
            certCheckFailed: '检查证书状态失败',
            checkDns: '检测 DNS',
            dnsActivated: 'DNS 验证通过，站点已激活',
            dnsResolved: 'DNS 已正确解析',
            dnsCheckFailed: 'DNS 检测失败',
            dnsHintWithCheck: 'DNS 配置完成后，点击"检测 DNS"激活站点',
            remark: '备注',
            remarkPlaceholder: '可选，如：博客网站、API 服务等',
            cert: {
                title: '证书状态',
                valid: '证书有效',
                disabled: 'HTTPS 未启用',
                pending: '待激活',
                certPending: '证书申请中',
                dnsError: 'DNS 未解析',
                connectionRefused: '连接被拒绝',
                timeout: '连接超时',
                error: '检查失败',
                issuer: '颁发者',
                validFrom: '生效日期',
                validTo: '过期日期',
                daysRemaining: '剩余天数',
                days: '天',
            },
        },
    },

    // 端口映射弹窗
    portModal: {
        title: '添加端口映射',
        protocol: '协议',
        bothHint: '将同时创建 TCP 和 UDP 映射，占用 2 个配额',
        privatePort: '内部端口',
        privatePortRequired: '*',
        privatePortPlaceholder: '容器内部服务端口，如 80、22、3306',
        privatePortPlaceholderRange: '如 80 或 80-85',
        publicPort: '公网端口',
        publicPortOptional: '(可选)',
        publicPortPlaceholder: '留空自动分配',
        publicPortPlaceholderRange: '如 20000 或 20000-20005',
        publicPortHint: '留空将自动从端口池分配可用端口',
        publicPortHintWithRange: '可选范围: {start}-{end}，留空将自动分配',
        remark: '备注',
        remarkOptional: '(可选)',
        remarkPlaceholder: '如：Web服务、数据库、SSH等',
        cancel: '取消',
        adding: '添加中...',
        add: '添加',
        // 新增：范围输入支持
        rangeHint: '支持范围输入，如 80-85',
        invalidPortFormat: '端口格式无效，请输入单个端口或端口范围（如 80-85）',
        ipv6OnlySshPortHint: '22 端口不用映射，公网 IPv6 直连 SSH 就行，正门口已经亮灯了',
        rangeMismatch: '内网端口数 ({private} 个) 与公网端口数 ({public} 个) 不匹配',
        publicPortOutOfRange: '公网端口超出允许范围 ({start}-{end})',
        quotaPreview: '将创建 {count} 个映射，占用 {quota} 个配额',
        quotaRemaining: '剩余 {remain} 个',
        quotaInsufficient: '配额不足，需要 {need} 个，剩余 {remain} 个',
    },

    // 端口冲突解决弹窗
    portConflict: {
        title: '部分端口已被占用',
        subtitle: '共 {count} 个端口冲突',
        description: '以下端口已被其他实例占用，您可以修改为新的端口或使用系统建议。',
        originalPort: '原端口',
        newPort: '新端口',
        occupied: '已占用',
        suggested: '建议',
        rangeHint: '可用范围: {start}-{end}',
        useSuggested: '使用全部建议',
        cancel: '取消',
        confirm: '确认修改',
    },

    // 重装系统弹窗
    rebuildModal: {
        title: '重装系统',
        dangerWarning: '危险操作',
        warningList: {
            dataLoss: '重装系统将清除实例内的所有数据',
            snapshotLoss: '所有快照将被永久删除',
            irreversible: '此操作不可恢复！',
        },
        preserveInfo: '重装系统会保留端口映射。',
        manualStartHint: '重装完成后需手动启动实例。',
        selectImage: '选择新镜像',
        imageHint: '只能选择该节点当前允许的镜像',
        selectSshKey: '选择 SSH 密钥',
        noSshKey: '暂无可用密钥',
        addSshKeyHint: '请先在设置中添加 SSH 密钥',
        passwordHint: '重装后将自动生成新的 root 密码，可在实例详情页查看。',
        cancel: '取消',
        rebuilding: '重装中...',
        confirmRebuild: '确认重装',
    },

    // 重建实例弹窗
    recreateModal: {
        title: '重建实例',
        dangerWarning: '危险操作',
        warningList: {
            dataLoss: '重建将清除实例内的所有数据',
            snapshotLoss: '所有快照将被永久删除',
            portMappingLoss: '所有端口映射将被删除',
            backupLoss: '所有备份记录和备份策略将被删除',
            proxySiteLoss: '所有反代站点和快照策略将被删除',
            irreversible: '此操作不可恢复！',
        },
        differenceHint: '重建与重装不同：不需要先关机，会创建全新的实例替换旧实例。',
        preserveInfo: '重建只保留计费状态和配额。',
        selectImage: '选择新镜像',
        selectSshKey: '选择 SSH 密钥',
        noSshKey: '暂无可用密钥',
        addSshKeyHint: '请先在设置中添加 SSH 密钥',
        cancel: '取消',
        recreating: '重建中...',
        confirmRecreate: '确认重建',
    },

    // 快照管理
    snapshot: {
        title: '快照',
        autoPolicy: '自动快照已启用',
        autoPolicyEnabled: '已启用自动快照',
        currentPolicy: '当前策略',
        disableAutoPolicy: '取消自动',
        minutes: '分钟',
        manual: '手动管理',
        autoSettings: '自动快照设置',
        create: '创建',
        noQuota: '请先分配快照配额',
        quotaFull: '快照配额已满',
        createSnapshot: '创建快照',
        noSnapshots: '暂无快照',
        noQuotaAllocated: '未分配快照配额',
        allocateQuotaHint: '请先在「配额」标签页中分配快照配额',
        statefulSnapshot: '状态快照',
        restore: '恢复',
        stopInstanceFirst: '请先停止实例',
        delete: '删除',
        createModal: {
            title: '创建快照',
            name: '名称',
            nameRequired: '*',
            namePlaceholder: 'snapshot-01',
            description: '描述',
            descriptionPlaceholder: '可选描述',
            stateful: '保存内存状态（状态快照）',
            cancel: '取消',
            creating: '创建中...',
            create: '创建',
        },
        policyModal: {
            title: '自动快照设置',
            enable: '启用自动快照',
            interval: '快照间隔',
            intervalOptions: {
                min10: '每 10 分钟',
                hour1: '每 1 小时',
                hour6: '每 6 小时',
                hour24: '每 24 小时',
                day3: '每 3 天',
            },
            quotaFromPackage: '配额继承自套餐，当前限制为 {limit} 个。满额后将自动删除最早的自动快照。',
            cancel: '取消',
            saving: '保存中...',
            save: '保存',
        },
        messages: {
            createSuccess: '快照创建成功',
            createFailed: '创建失败',
            deleteConfirm: '确定删除快照 "{name}"？此操作不可恢复。',
            deleteSuccess: '快照已删除',
            deleteFailed: '删除失败',
            restoreConfirm: '确定将实例恢复到快照 "{name}"？当前数据将被覆盖。',
            restoreSuccess: '快照恢复成功',
            restoreFailed: '恢复失败',
            stopInstanceFirst: '请先停止实例再恢复快照',
            policySaved: '自动快照策略已更新',
            policyDisabled: '自动快照已关闭',
            policySaveFailed: '保存失败',
        },
    },

    // 备份管理
    backup: {
        title: '备份',
        autoPolicy: '自动备份已启用',
        autoPolicyEnabled: '已启用自动备份',
        currentPolicy: '当前策略',
        disableAutoPolicy: '取消自动',
        minutes: '分钟',
        manual: '手动管理',
        autoSettings: '自动备份设置',
        create: '创建',
        noQuota: '请先分配备份配额',
        quotaFull: '备份配额已满',
        createBackup: '创建备份',
        noBackups: '暂无备份',
        noQuotaAllocated: '未分配备份配额',
        allocateQuotaHint: '请先在「配额」标签页中分配备份配额',
        status: {
            creating: '创建中',
            ready: '就绪',
            error: '失败',
        },
        export: '导出',
        preparing: '准备中...',
        clickToDownload: '点击下载',
        downloading: '下载中...',
        retry: '重试',
        delete: '删除',
        createModal: {
            title: '创建备份',
            name: '名称',
            nameRequired: '*',
            namePlaceholder: 'backup-01',
            description: '描述',
            descriptionPlaceholder: '可选描述',
            expiresIn: '过期天数（可选）',
            neverExpire: '永不过期',
            days7: '7 天',
            days14: '14 天',
            days30: '30 天',
            days90: '90 天',
            year1: '1 年',
            createHint: '备份创建可能需要几分钟，请耐心等待。',
            cancel: '取消',
            creating: '创建中...',
            create: '创建',
        },
        policyModal: {
            title: '自动备份设置',
            enable: '启用自动备份',
            interval: '备份间隔',
            intervalOptions: {
                hour1: '每 1 小时',
                hour6: '每 6 小时',
                hour24: '每 24 小时',
                day3: '每 3 天',
            },
            quotaFromPackage: '配额继承自套餐，当前限制为 {limit} 个。满额后将自动删除最早的自动备份。',
            cancel: '取消',
            saving: '保存中...',
            save: '保存',
        },
        restore: '恢复',
        restoring: '恢复中...',
        rollback: '回滚',
        restoreModal: {
            title: '⚠️ 危险操作 - 恢复备份',
            warning: '此操作将覆盖当前实例！',
            warningDetail: '恢复操作会停止当前实例，并用备份内容替换。如果恢复失败，您可以选择回滚到原实例。',
            dataLossWarning: '以下数据将被永久删除：',
            dataLossItems: {
                backups: '该实例的所有其他备份',
                snapshots: '该实例的所有快照',
            },
            nameChangeNotice: '恢复成功后，实例名称将变更为：{name} | restored:{backup}',
            backupName: '备份名称',
            instanceName: '目标实例',
            cancel: '取消',
            confirm: '确认恢复',
        },
        messages: {
            createSuccess: '备份创建中...',
            createFailed: '创建失败',
            deleteConfirm: '确定删除备份 "{name}"？此操作不可恢复。',
            deleteSuccess: '备份已删除',
            deleteFailed: '删除失败',
            exportFailed: '准备导出失败',
            downloadStarted: '下载已开始',
            downloadFailed: '下载失败',
            policySaved: '自动备份策略已更新',
            policyDisabled: '自动备份已关闭',
            policySaveFailed: '保存失败',
            restoreStarted: '正在恢复备份 "{name}"，请稍候...',
            restoreInProgress: '已有恢复任务正在进行中',
            restoreCompleted: '备份恢复成功！',
            restoreFailed: '恢复失败',
            rollbackCompleted: '回滚成功，原实例已恢复',
            rollbackFailed: '回滚失败',
            uploadStarted: '上传任务已创建',
            uploadInProgress: '已有上传任务正在进行中',
            uploadCompleted: '备份上传成功！',
            uploadFailed: '上传失败',
            uploadCancelled: '上传任务已取消',
        },
        // 上传到远程存储
        upload: '上传',
        uploadRemote: '上传到云端',
        uploadModal: {
            title: '上传备份到远程存储',
            selectStorage: '选择存储',
            useDefault: '使用默认存储',
            noStorage: '暂无存储配置',
            noStorageHint: '请先在「设置」中配置远程存储',
            goToSettings: '前往设置',
            cancel: '取消',
            upload: '开始上传',
            uploading: '上传中...',
        },
        uploadStatus: {
            pending: '排队中',
            processing: '上传中',
            completed: '已完成',
            failed: '失败',
            queuePosition: '队列位置：第 {position} 位',
        },
    },

    // 仪表盘
    dashboard: {
        title: '概览',
        welcome: '欢迎回来',
        totalInstances: '总实例',
        runningInstances: '运行中',
        stoppedInstances: '已停止',
        creatingInstances: '创建中',
        userBalance: '用户余额',
        balance: '余额',
        memberLevel: '会员等级',
        memberLevelBasic: '普通会员',
        uptimeProbe: '自营节点监控',
        statusPage: '状态页',
        rechargeNow: '立即充值',
        walletDetails: '查看钱包',
        walletHint: '前往钱包页面完成充值',
        instanceStatusOverview: '实例状态概览',
        accountOverview: '账户概览',
        runningHealth: '运行健康度',
        instanceOverviewSummary: '{running}/{total} 台实例运行中，在线率 {percent}%',
        containerInstances: '容器实例',
        vmInstances: '虚拟机实例',
        totalRecharge: '累计充值',
        totalConsume: '累计消费',
        userPoints: '用户积分',
        frozenBalance: '冻结余额',
        frozenBalanceHint: '账户中有冻结余额，请在钱包查看明细',
        accountReadyHint: '账户状态正常，可直接创建或续费实例',
        instanceListSummary: '最近 {count} / 共 {total} 个实例',
        vipProgressTitle: '会员成长进度',
        vipProgressToNext: '{current} → {next}',
        vipProgressMaxed: '已达到当前最高会员等级',
        vipProgressNoRule: '暂无下一等级规则',
        vipProgressUnavailable: '会员进度暂不可用',
        vipProgressAllHint: '升级到 {level} 需要同时满足以下条件',
        vipProgressAnyHint: '升级到 {level} 满足任一条件即可',
        vipProgressSingleMetricHint: '升级到 {level} 需要达到{metric}门槛',
        vipProgressStableHint: '保持当前权益，后续福利大厅开放后可领取对应福利',
        vipMetricTotalRecharge: '累计充值',
        vipMetricTotalConsume: '累计消费',
        vipMetricTotalHostingIncome: '累计托管收入',
        vipMetricInstanceCount: '托管实例数',
        vipProgressConditionMet: '已满足',
        vipProgressCurrent: '当前',
        vipProgressTarget: '目标',
        vipProgressRemaining: '还差',
        vipProgressRemainingMoney: '还差 {amount}',
        vipProgressRemainingCount: '还差 {count} 个',
        resourceUsage: '资源使用',
        resourceOverview: '这是您的资源使用概览',
        newInstance: '新建实例',
        quotaUsage: '配额使用',
        increaseQuota: '增加配额',
        pinnedArticles: '置顶帮助文章',
        viewAllHelp: '查看全部帮助',
        myInstances: '我的实例',
        viewAll: '查看全部',
        viewAllInstances: '查看全部 {count} 个实例',
        viewAllInstancesWithCount: '查看全部 {count} 个实例',
        memoryMetric: '内存',
        diskMetric: '磁盘',
        noPublicIp: '无公网 IP',
        unknownHost: '未分配节点',
        noInstances: '还没有创建任何实例',
        createFirst: '创建第一个实例',
        quickActions: '快速操作',
        createInstance: '创建实例',
        newContainer: '新建容器',
        instanceList: '实例列表',
        manageInstances: '管理实例',
        profileSettings: '个人设置',
        accountSecurity: '账号安全',
        helpDocs: '帮助文档',
        userGuide: '使用指南',
        greeting: {
            morning: '早上好',
            afternoon: '下午好',
            evening: '晚上好',
            basicUser: '{username}',
            memberUser: '尊贵的 {level} {username}',
            full: '{greeting}，{member}',
        },
    },

    // 设置页面
    profile: {
        title: '个人设置',
        basicInfo: '基本信息',
        security: '安全设置',
        changePassword: '修改密码',
        currentPassword: '当前密码',
        newPassword: '新密码',
        confirmNewPassword: '确认新密码',
        twoFactor: '两步验证',
        enableTwoFactor: '启用两步验证',
        disableTwoFactor: '禁用两步验证',
        // 账户部分
        account: {
            title: '账户',
            username: '用户名',
            uid: 'UID',
            role: '角色',
            email: '邮箱',
            notSet: '未设置',
            admin: '管理员',
            user: '用户',
            changeEmail: '修改',
            bindEmail: '绑定',
            emailDialog: {
                titleChange: '修改邮箱',
                titleBind: '绑定邮箱',
                stepCurrent: '验证当前邮箱',
                stepCurrentSkipped: '当前邮箱未绑定',
                stepCurrentHint: '先验证当前邮箱，确认这次操作由您本人发起。',
                stepNew: '验证新邮箱',
                stepNewHint: '输入新的邮箱地址，并完成新邮箱验证码验证。',
                noCurrentEmailHint: '当前账户尚未绑定邮箱，可直接进入新邮箱验证并完成绑定。',
                verifyCurrentTitle: '当前邮箱验证',
                verifyCurrentDesc: '验证码将发送到当前邮箱 {email}，验证通过后才能继续修改邮箱。',
                currentCode: '当前邮箱验证码',
                currentCodePlaceholder: '输入收到的 6 位验证码',
                sendCurrentCode: '发送验证码',
                resendCurrentCode: '重新发送',
                currentCodeSent: '当前邮箱验证码已发送',
                currentCodeRequired: '请输入当前邮箱验证码',
                verifyCurrentAction: '验证当前邮箱',
                currentVerifiedSuccess: '当前邮箱验证成功',
                currentVerificationExpired: '当前邮箱验证已失效，请重新验证当前邮箱。',
                verifyNewTitle: '新邮箱验证',
                verifyNewDesc: '请验证新的邮箱地址，完成后将立即更新为新的登录邮箱。',
                bindEmailDesc: '请验证新的邮箱地址，完成后将绑定到当前账户。',
                newEmail: '新邮箱',
                newEmailPlaceholder: '输入新的邮箱地址',
                newEmailRequired: '请输入新邮箱地址',
                newEmailInvalid: '请输入有效的邮箱地址',
                newEmailSame: '新邮箱不能与当前邮箱相同',
                newCode: '新邮箱验证码',
                newCodePlaceholder: '输入新邮箱收到的 6 位验证码',
                newCodeRequired: '请输入新邮箱验证码',
                sendNewCode: '发送验证码',
                resendNewCode: '重新发送',
                newCodeSent: '新邮箱验证码已发送',
                resendIn: '{seconds}s 后可重发',
                confirmAction: '确认提交',
                updateSuccess: '邮箱已更新',
                verifying: '验证中...',
                submitting: '提交中...'
            }
        },
        // 头像
        avatar: {
            title: '头像风格',
            saveSuccess: '头像风格已更新',
            saveFailed: '更新头像风格失败',
            styles: {
                adventurer: '冒险者',
                adventurerNeutral: '冒险者素雅',
                avataaars: '扁平插画',
                avataaarsNeutral: '扁平插画纯净',
                bigEars: '大耳萌',
                bigEarsNeutral: '大耳萌纯净',
                bigSmile: '开怀大笑',
                bottts: '机器人',
                botttsNeutral: '机器人纯净',
                croodles: '抽象涂鸦',
                croodlesNeutral: '抽象涂鸦纯净',
                dylan: '迪伦风',
                funEmoji: '趣味表情',
                glass: '毛玻璃',
                icons: '常用图标',
                identicon: '几何哈希',
                initials: '首字母',
                lorelei: '洛蕾莱',
                loreleiNeutral: '洛蕾莱纯净',
                micah: '迈卡极简',
                miniavs: '迷你小人',
                notionists: 'Notion风格',
                notionistsNeutral: 'Notion风格纯净',
                openPeeps: '手绘众生相',
                personas: '人物志',
                pixelArt: '像素艺术',
                pixelArtNeutral: '像素艺术纯净',
                rings: '同心圆',
                shapes: '几何图形',
                thumbs: '拇指人',
            },
        },
        // 资源配额
        resourceQuota: {
            title: '资源配额',
            hosts: '宿主机',
            instances: '实例',
            friends: '好友',
            unit: '个',
        },
        // 账单（BillingSection组件使用）
        billing: {
            title: '账户余额',
            currentBalance: '当前余额',
            recharge: '充值',
            totalRecharge: '累计充值',
            totalConsume: '累计消费',
            balanceLogs: '余额明细',
            rechargeRecords: '充值记录',
            noLogs: '暂无余额记录',
            noRecords: '暂无充值记录',
            loadLogsFailed: '加载余额明细失败',
            loadProvidersFailed: '加载支付渠道失败',
            loadRecordsFailed: '加载充值记录失败',
            selectProvider: '请选择支付方式',
            invalidAmount: '金额无效',
            orderCreated: '订单已创建',
            redirecting: '正在跳转支付页面...',
            orderNo: '订单号',
            createOrderFailed: '创建订单失败',
            paymentMethod: '支付方式',
            noProviders: '暂无可用支付渠道',
            amount: '充值金额',
            amountRange: '金额范围',
            feeNote: '手续费',
            pay: '立即支付',
            logTypes: {
                recharge: '充值',
                consume: '消费',
                refund: '退款',
                adminAdjust: '管理员调整',
                gift: '赠送',
            },
            status: {
                pending: '待支付',
                paid: '已支付',
                completed: '已完成',
                failed: '失败',
                cancelled: '已取消',
                refunded: '已退款',
            },
        },
        // 余额充值（旧版兼容）
        userBilling: {
            title: '余额充值',
            balance: '当前余额',
            frozen: '冻结金额',
            recharge: '充值',
            rechargeTitle: '账户充值',
            selectAmount: '选择金额',
            customAmount: '自定义金额',
            selectProvider: '选择支付方式',
            noProviders: '暂无可用支付渠道',
            confirmRecharge: '确认充值',
            fee: '手续费',
            actual: '实际到账',
            balanceLogs: '余额明细',
            viewLogs: '查看明细',
            rechargeRecords: '充值记录',
            viewRecords: '查看记录',
            noLogs: '暂无余额记录',
            noRecords: '暂无充值记录',
            amountRequired: '请输入充值金额',
            providerRequired: '请选择支付方式',
            recharging: '充值中...',
            rechargeSuccess: '充值成功',
            rechargeFailed: '充值失败',
            loadFailed: '加载失败',
        },
        // 增加配额
        increaseQuota: {
            title: '增加配额',
            description: '当配额使用率达到50%时，您可以自行增加配额',
            type: '配额类型',
            selectType: '选择要增加的配额类型',
            hosts: '宿主机',
            instances: '实例',
            friends: '好友',
            amount: '增加数量',
            hostsAmount: '每次可增加 5 个',
            instancesAmount: '每次可增加 50 个',
            friendsAmount: '每次可增加 10 名',
            submit: '提交',
            submitting: '提交中...',
            success: '配额增加成功',
            failed: '配额增加失败',
            notEligible: '当前使用率未达到50%，无法增加配额',
            usageTooLow: '当前使用率：{percent}%，需要达到50%才能增加配额',
            selectTypeFirst: '请先选择配额类型',
            invalidAmount: '增加数量不正确',
            hostsInvalid: '宿主机每次只能增加 5 个',
            instancesInvalid: '实例每次只能增加 50 个',
            friendsInvalid: '好友每次只能增加 10 名',
        },
        // 密码部分
        password: {
            title: '修改密码',
            current: '当前密码',
            currentPlaceholder: '输入当前密码',
            new: '新密码',
            newPlaceholder: '至少6位',
            confirm: '确认新密码',
            confirmPlaceholder: '再次输入新密码',
            mismatch: '两次输入的密码不一致',
            tooShort: '密码长度至少6位',
            updated: '密码已更新',
            updateFailed: '更新失败',
            updating: '更新中...',
            update: '更新密码',
        },
        // 双因素认证
        twoFactorAuth: {
            title: '双因素认证 (2FA)',
            status: '状态',
            enabled: '已启用',
            notEnabled: '未启用',
            enable: '启用 2FA',
            disable: '禁用 2FA',
            loading: '加载中...',
            description: '启用双因素认证后，登录时需要输入手机验证器应用生成的动态验证码，提高账户安全性。',
            setup: '设置双因素认证',
            scanQrCode: '使用 Google Authenticator、Microsoft Authenticator 或其他 TOTP 应用扫描二维码',
            manualEntry: '或手动输入密钥',
            saveRecoveryCodes: '请保存以下恢复码，用于在无法使用验证器时恢复账户',
            enterCode: '输入验证器显示的6位验证码',
            codePlaceholder: '000000',
            verifying: '验证中...',
            confirmEnable: '确认启用',
            cancel: '取消',
            disableTitle: '禁用双因素认证',
            disableDesc: '禁用后登录将不再需要验证码，请确认操作。',
            password: '当前密码',
            passwordPlaceholder: '输入密码',
            verificationCode: '验证码',
            processing: '处理中...',
            confirmDisable: '确认禁用',
            recoveryCodesStatus: '恢复码状态',
            regenerate: '重新生成',
            remaining: '剩余',
            used: '已使用',
            lowCodesWarning: '恢复码即将用完，建议重新生成',
            regenerateTitle: '重新生成恢复码',
            regenerateDesc: '重新生成后，旧的恢复码将全部失效。',
            newCodesGenerated: '新恢复码已生成，请妥善保存',
            generating: '生成中...',
            confirmGenerate: '确认生成',
            done: '完成',
            enabledSuccess: '双因素认证已启用',
            disabledSuccess: '双因素认证已禁用',
            codesRegenerated: '恢复码已重新生成，请妥善保存',
            getStatusFailed: '获取状态失败',
            initFailed: '初始化失败',
            verifyFailed: '验证失败',
            disableFailed: '禁用失败',
            regenerateFailed: '重新生成失败',
            enterCodeError: '请输入6位验证码',
            fillPasswordAndCode: '请填写密码和验证码',
        },
        // 会话管理
        sessions: {
            title: '登录会话',
            logoutAll: '登出所有设备',
            processing: '处理中...',
            loading: '加载中...',
            noSessions: '暂无活跃会话',
            current: '当前',
            ip: 'IP',
            lastActive: '最后活跃',
            revoke: '撤销',
            revoked: '会话已撤销',
            confirmLogout: '确定要退出当前登录吗？',
            confirmLogoutAll: '确定要登出所有设备吗？你需要重新登录。',
            loadFailed: '加载会话失败',
            revokeFailed: '撤销会话失败',
            revokeAllFailed: '撤销所有会话失败',
            unknownDevice: '未知设备',
            unknownBrowser: '未知浏览器',
            justNow: '刚刚',
            minutesAgo: '{n} 分钟前',
            hoursAgo: '{n} 小时前',
            daysAgo: '{n} 天前',
        },
        // OAuth 关联账号
        oauth: {
            title: '关联账号',
            description: '绑定后可使用快捷登录',
            bound: '已绑定',
            notBound: '未绑定',
            bind: '绑定',
            unbind: '解绑',
            noProviders: '暂无可用的第三方登录方式',
            bindSuccess: '{provider} 账号绑定成功',
            unbindSuccess: '{provider} 账号已解绑',
            unbindFailed: '解绑失败',
            confirmUnbind: '确定解除 {provider} 账号绑定？解绑后将无法使用该方式登录。',
            errors: {
                notLoggedIn: '请先登录后再绑定',
                alreadyBoundOther: '该账号已被其他用户绑定',
                invalidSession: '会话已过期，请重新登录',
                bindFailed: '绑定失败',
                tokenError: '授权失败，请重试',
                providerDisabled: '该登录方式已被禁用',
                oauthError: '认证失败，请重试',
                missingCode: '授权信息缺失，请重试',
            },
        },
        // SSH 密钥
        sshKeys: {
            title: 'SSH 公钥',
            description: '用于 SSH 连接到实例',
            add: '添加',
            generate: '生成',
            name: '名称',
            namePlaceholder: '我的笔记本',
            publicKey: '公钥内容',
            publicKeyPlaceholder: 'ssh-ed25519 AAAA... 或 ssh-rsa AAAA...',
            save: '保存',
            cancel: '取消',
            noKeys: '暂无公钥',
            addSuccess: '公钥添加成功',
            addFailed: '添加失败',
            deleteSuccess: '公钥已删除',
            deleteFailed: '删除失败',
            confirmDelete: '确定删除此公钥？',
            invalidName: '密钥名称格式不正确',
            generateSuccess: '密钥生成成功',
            generateFailed: '生成失败',
            privateKeyTitle: '请保存私钥',
            privateKeyWarning: '请立即保存私钥',
            privateKeyWarningDesc: '系统不会保存您的私钥，关闭此弹窗后将无法再次查看。请将私钥保存到安全的地方。',
            privateKeyContent: '私钥内容',
            download: '下载私钥',
            noPrivateKey: '没有可下载的私钥',
            copyFailed: '复制失败',
            downloadFailed: '下载失败，请手动复制私钥',
            prevPage: '上一页',
            nextPage: '下一页',
            pageInfo: '第 {current}/{total} 页，共 {count} 条',
        },
        // 通知渠道
        notifications: {
            title: '通知渠道',
            description: '接收实例、快照等事件通知',
            add: '添加',
            type: '类型',
            name: '名称',
            namePlaceholder: '我的通知',
            save: '添加',
            saving: '添加中...',
            cancel: '取消',
            noChannels: '暂无通知渠道',
            addSuccess: '通知渠道添加成功',
            addFailed: '添加失败',
            deleteSuccess: '通知渠道已删除',
            deleteFailed: '删除失败',
            confirmDelete: '确定删除此通知渠道？',
            enabled: '已启用',
            disabled: '已禁用',
            enable: '启用',
            disable: '禁用',
            toggleFailed: '操作失败',
            test: '测试',
            testSuccess: '测试通知已发送',
            testFailed: '测试失败',
            history: '历史',
            historyTitle: '通知历史',
            disabledSuffix: '（已禁用）',
            statsTotal: '总计: {count}',
            statsSent: '成功: {count}',
            statsFailed: '失败: {count}',
            filterAll: '全部',
            filterSent: '成功',
            filterFailed: '失败',
            loadingLogs: '加载中...',
            noLogs: '暂无通知记录',
            statusSent: '成功',
            statusFailed: '失败',
            statusPending: '等待',
            errorPrefix: '错误: {error}',
            eventTypes: {
                snapshot_created: '快照创建',
                snapshot_restored: '快照恢复',
                snapshot_deleted: '快照删除',
                backup_created: '备份创建',
                backup_failed: '备份失败',
                backup_deleted: '备份删除',
                backup_restored: '备份恢复',
                backup_uploaded: '备份上传',
                instance_created: '实例创建',
                instance_started: '实例启动',
                instance_stopped: '实例停止',
                instance_deleted: '实例删除',
                auto_snapshot: '自动快照',
                auto_backup: '自动备份',
                traffic_warning: '流量预警',
                traffic_throttled: '流量限速',
                test: '测试通知',
            },
            telegram: {
                botToken: 'Bot Token',
                botTokenPlaceholder: '123456:ABC-...',
                chatId: 'Chat ID',
                chatIdPlaceholder: '-100123456789',
            },
            discord: {
                webhookUrl: 'Webhook URL',
                webhookUrlPlaceholder: 'https://discord.com/api/webhooks/...',
            },
            webhook: {
                url: 'URL',
                urlPlaceholder: 'https://example.com/webhook',
                secret: 'Secret（可选）',
                secretPlaceholder: '用于验证签名',
            },
        },
        telegramBinding: {
            title: 'Telegram 绑定',
            description: '绑定后可用于私有用户群准入等功能。',
            refresh: '刷新',
            refreshing: '刷新中',
            unavailableTitle: '暂未启用',
            unavailableDescription: '管理员尚未启用或尚未完整配置 Telegram 绑定。',
            boundTitle: '已绑定 {name}',
            telegramId: 'Telegram ID: {id}',
            boundAt: '绑定时间: {date}',
            joinHint: '如需申请私有群，私聊 {bot} 发送',
            unlink: '解除绑定',
            unlinking: '解除中',
            unboundTitle: '未绑定 Telegram',
            unboundDescription: '点击生成链接后，会跳转到 {bot}。在 Telegram 内点击开始即可完成绑定。',
            generate: '生成绑定链接',
            generating: '生成中',
            openTelegram: '打开 Telegram',
            copyLink: '复制链接',
            linkHint: '链接 10 分钟内有效，完成绑定后回到本页刷新状态。',
            expiresAt: '过期时间: {date}',
            generated: 'Telegram 绑定链接已生成',
            generateFailed: '生成绑定链接失败: {error}',
            copied: '绑定链接已复制',
            copyFailed: '复制失败，请手动复制链接',
            confirmUnlink: '确定解除 Telegram 绑定？',
            unlinked: 'Telegram 绑定已解除',
            unlinkFailed: '解除绑定失败: {error}',
        },
        // 远程存储
        storage: {
            title: '远程存储',
            description: '配置 WebDAV/FTP/SFTP 存储，用于备份上传',
            add: '添加',
            name: '名称',
            namePlaceholder: '我的 NAS',
            type: '类型',
            host: '主机地址',
            port: '端口',
            username: '用户名',
            password: '密码',
            passwordUnchanged: '留空则不修改',
            basePath: '基础路径',
            setAsDefault: '设为默认',
            default: '默认',
            setDefault: '设为默认',
            test: '测试',
            noConfigs: '暂无存储配置',
            nameHostRequired: '请填写名称和主机地址',
            createSuccess: '存储配置创建成功',
            updateSuccess: '存储配置更新成功',
            deleteSuccess: '存储配置已删除',
            saveFailed: '保存失败',
            deleteFailed: '删除失败',
            hasActiveTasks: '无法删除：该存储配置有上传任务正在进行中',
            confirmDelete: '确定删除此存储配置？',
            testSuccess: '连接测试成功',
            testFailed: '连接测试失败',
            setDefaultSuccess: '已设为默认',
            setDefaultFailed: '设置失败',
        },
        // 登录历史
        loginHistory: {
            title: '登录历史',
            description: '查看您的账户登录记录',
            empty: '暂无登录记录',
        },
    },

    // 管理后台
    admin: {
        statistics: {
            title: '统计',
            description: '用户、实例和计费数据',
            timezone: '{timezone}',
            refresh: '刷新',
            reload: '重新加载',
            noData: '暂无统计数据',
            loadFailed: '统计数据加载失败：{message}',
            unknownError: '未知错误',
            tooltip: '{label} · {value}',
            tabs: {
                users: '用户',
                instances: '实例',
                billing: '计费',
            },
            periods: {
                daily: '每日',
                monthly: '每月',
            },
            billingMetrics: {
                recharge: '充值',
                consume: '消费',
                aff: '返利',
                destroyFee: '销毁手续费',
            },
            ranges: {
                last30Days: '近 30 天',
                last12Months: '近 12 个月',
            },
            cards: {
                totalUsers: '总用户数',
                recentDailyNewUsers: '近 30 天新增',
                recentMonthlyNewUsers: '近 12 月新增',
                averageNewUsers: '平均新增',
                totalInstances: '系统总实例数',
                availableInstances: '可用实例',
                recentDailyCreatedInstances: '近 30 天创建',
                recentMonthlyCreatedInstances: '近 12 月创建',
                totalRecharge: '累计充值',
                totalConsume: '累计消费',
                totalAff: '累计返利',
                totalDestroyFee: '累计销毁手续费',
            },
            captions: {
                currentTotal: '当前累计',
                dailyAggregate: '按日汇总',
                monthlyAggregate: '按月汇总',
                dailyAverage: '日均',
                monthlyAverage: '月均',
                nonDeletedInstances: '未删除实例',
                notDeletedOrSuspended: '非删除 / 非封停',
                completedOrders: '已完成订单',
                totalScope: '托管和自营合计',
                affCommission: 'AFF 新购 / 续费',
                userDestroyFee: '用户销毁实例手续费',
            },
            sections: {
                newUsers: '新增用户',
                createdInstances: '创建实例',
                paidFreeInstances: '付费 / 免费实例',
                paidFreeDescription: '当前未删除实例占比',
                metricTrend: '{metric}趋势',
                billingScope: '{range}，托管和自营合计',
            },
            labels: {
                paidInstances: '付费实例',
                freeInstances: '免费实例',
            },
        },
        hosting: {
            title: '托管',
            description: '查看符合条件的托管机主和托管经营数据',
            loadFailed: '加载托管数据失败：{message}',
            unknownError: '未知错误',
            tabs: {
                owners: '托管机主',
                zones: '专区机主',
                hostingVipLevels: '托管 VIP 等级',
            },
            cards: {
                owners: '托管机主',
                ownersCaption: '满足托管条件的用户',
                hosts: '节点数',
                hostsCaption: '机主已添加的节点',
                instances: '实例数',
                instancesCaption: '机主节点上的未删除实例',
                totalIncome: '历史总托管收入',
                totalIncomeCaption: '收入日志累计',
            },
            owners: {
                title: '托管机主用户列表',
                description: '已添加节点、已上架公开套餐且历史总托管余额不为 0 的用户。',
                searchPlaceholder: '搜索用户名、ID、邮箱...',
                empty: '暂无托管机主',
                emptyHint: '用户需要同时满足节点、上架套餐和历史托管余额条件。',
                user: '用户',
                vipLevel: 'VIP等级',
                hostingBalance: '托管余额',
                frozenBalance: '冻结余额',
                totalIncome: '历史总收入',
                hostCount: '节点数',
                packageCount: '上架套餐数',
                instanceCount: '实例数',
                createdAt: '注册时间',
                noEmail: '未设置邮箱',
            },
            zones: {
                title: '专区机主列表',
                description: '专区机主会在开通实例页作为独立选项卡展示，其套餐不再出现在托管选项卡中。',
                createTitle: '添加专区机主',
                createDescription: '输入专区名，选择托管机主用户，并填写图床 LOGO 链接。',
                name: '专区名',
                namePlaceholder: '例如：Tokyoo 专区',
                owner: '托管机主用户',
                ownerSearchPlaceholder: '搜索可选托管机主...',
                selectOwner: '请选择托管机主',
                ownerHint: '已设置专区的机主不会出现在可选列表中。',
                logo: 'LOGO 链接',
                logoPlaceholder: 'https://example.com/logo.png',
                logoHint: '仅支持 http 或 https 图片链接，系统不会保存图片文件。',
                logoPreview: 'LOGO 预览',
                noLogo: 'LOGO',
                previewName: '专区预览',
                previewHint: '开通实例页会以圆形 LOGO 展示。',
                create: '添加专区',
                formRequired: '请填写专区名、选择托管机主并填写 LOGO 链接',
                logoInvalid: '请填写有效的 http 或 https LOGO 图片链接',
                createSuccess: '专区机主已添加',
                createFailed: '添加专区机主失败',
                loadFailed: '加载专区机主失败：{message}',
                deleteConfirm: '确定删除专区「{name}」吗？删除后该机主套餐会重新显示在托管选项卡中。',
                deleteSuccess: '专区机主已删除',
                deleteFailed: '删除专区机主失败',
                empty: '暂无专区机主',
                emptyHint: '添加后会显示在开通实例页的直营与托管之间。',
                zone: '专区',
            },
        },
        vipRules: {
            userTitle: '用户 VIP 等级',
            userDescription: '全局选择累计充值或累计消费作为用户会员口径，并按该口径动态计算会员等级，最高 VIP10。',
            hostingTitle: '托管 VIP 等级',
            hostingDescription: '按累计托管收入、当前托管实例数动态计算托管等级，最高 VIP10。',
            level: '等级',
            badgeBgColor: '标签背景色',
            badgeTextColor: '标签字体色',
            enabled: '启用',
            mode: '条件关系',
            modeAny: '满足任一',
            modeAll: '同时满足',
            userMetricTitle: '用户 VIP 统计口径',
            userMetricHint: '全站用户 VIP 只能使用一种升级口径。切换后，每个等级只保存并计算当前口径对应的阈值。',
            metricRecharge: '按累计充值',
            metricConsume: '按累计消费',
            minRecharge: '累计充值满（元）',
            minConsume: '累计消费满（元）',
            minHostingIncome: '累计托管收入满（元）',
            minHostingInstances: '当前托管实例数满',
            noLimit: '不限制',
            save: '保存等级规则',
            saveSuccess: 'VIP 等级规则已保存',
            saveFailed: '保存 VIP 等级规则失败',
            loadFailed: '加载 VIP 等级规则失败：{message}',
            unknownError: '未知错误',
            conditionRequired: 'VIP{level} 至少需要配置一个条件',
            moneyThresholdInvalid: 'VIP{level} 的金额条件必须是大于 0 的数字',
            instanceThresholdInvalid: 'VIP{level} 的实例数条件必须是正整数',
            colorInvalid: 'VIP{level} 的标签颜色必须是 #RRGGBB 格式',
        },
        vipBenefits: {
            title: '会员福利大厅设置',
            description: '为已启用的用户 VIP 等级配置可领取福利。余额和积分会自动发放，实例奖品会生成待发放记录。',
            save: '保存福利设置',
            saveSuccess: '会员福利设置已保存',
            saveFailed: '保存会员福利设置失败',
            loadFailed: '加载会员福利设置失败',
            loadPlansFailed: '加载套餐方案失败',
            noEnabledLevels: '暂无已启用的用户 VIP 等级，请先在用户 VIP 等级中启用等级。',
            levelTitle: 'VIP{level} 福利',
            levelHint: '用户达到该等级后，可在福利大厅领取对应奖励。',
            addReward: '添加奖品',
            noRewardsForLevel: '该等级暂无奖品。',
            rewardDefaultTitle: '福利',
            rewardTitle: '奖品标题',
            rewardType: '奖品类型',
            rewardDescription: '奖品说明',
            claimLimit: '领取次数',
            sortOrder: '排序',
            enabled: '启用',
            disabled: '禁用',
            types: {
                balance: '余额',
                points: '积分',
                instance: '实例',
            },
            balanceTitle: '领取赠金',
            balanceDesc: '发放到用户账户余额，可用于实例续费或新购。',
            balanceAmount: '赠金金额（元）',
            pointsTitle: '领取积分',
            pointsDesc: '发放到用户积分账户，可用于福利和积分消耗。',
            pointsAmount: '积分数量',
            instanceTitle: '领取套餐实例',
            instanceDesc: '指定一个套餐方案，用户领取后进入待发放状态，后续可扩展自动创建。',
            package: '套餐',
            plan: '方案',
            selectPackage: '选择套餐',
            selectPlan: '选择方案',
            instanceDays: '赠送天数',
            instanceQuantity: '数量',
            balancePreview: '赠金 {amount}',
            pointsPreview: '积分 {amount}',
            instancePreview: '套餐实例',
            instancePreviewWithPlan: '{plan} · {quantity} 台 · {days} 天',
            titleRequired: 'VIP{level} 的奖品标题不能为空',
            claimLimitInvalid: 'VIP{level} 的领取次数必须是正整数',
            amountInvalid: 'VIP{level} 的余额或积分奖品数量必须大于 0',
            balanceInvalid: 'VIP{level} 的赠金金额必须大于 0',
            pointsInvalid: 'VIP{level} 的积分数量必须是正整数',
            instancePlanRequired: 'VIP{level} 的套餐实例福利需要选择套餐和方案',
            instanceDaysInvalid: 'VIP{level} 的赠送天数必须是正整数',
            instanceQuantityInvalid: 'VIP{level} 的实例数量必须是正整数',
        },
        // 域名邮箱管理
        mail: {
            title: '邮箱管理',
            description: '管理邮箱源、方案和用户订阅',
            tabs: {
                sources: '邮箱源',
                plans: '方案',
                subscriptions: '订阅',
                domains: '域名',
            },
            createSource: '添加邮箱源',
            editSource: '编辑邮箱源',
            sourceCreated: '邮箱源创建成功',
            sourceUpdated: '邮箱源更新成功',
            sourceDeleted: '邮箱源已删除',
            confirmDeleteSource: '确定要删除邮箱源 {name} 吗？请确保已无关联方案。',
            noSources: '暂无邮箱源，请先添加',
            createPlan: '添加方案',
            editPlan: '编辑方案',
            planCreated: '方案创建成功',
            planUpdated: '方案更新成功',
            planDeleted: '方案已删除',
            confirmDeletePlan: '确定要删除方案 {name} 吗？',
            noPlans: '暂无方案，请先添加',
            noSubscriptions: '暂无订阅记录',
            noDomains: '暂无域名记录',
            searchSubscriptions: '搜索用户名、邮箱或ID...',
            searchDomains: '搜索域名、用户名、邮箱或ID...',
            fillRequired: '请填写必填字段',
            createSourceFirst: '请先创建邮箱源',
            region: '地区',
            apiEndpoint: 'API 端点',
            apiKey: 'API 密钥',
            smtpHost: 'SMTP 服务器',
            smtpPort: 'SMTP 端口',
            webmailUrl: 'Webmail 地址',
            sourcePlaceholder: '例如：美国数据中心',
            source: '邮箱源',
            domainLimit: '域名限制',
            diskLimit: '磁盘限制',
            diskLimitGb: '磁盘限制(GB)',
            price: '价格',
            billingCycle: '计费周期',
            planPlaceholder: '例如：基础版',
            user: '用户',
            plan: '方案',
            expiresAt: '到期时间',
            domain: '域名',
            accounts: '账户数',
            plans: '方案数',
            unsub: {
                button: '退订',
                title: '退订邮箱',
                refundType: '退款方式',
                refundNone: '不退款',
                refundNoneDesc: '直接取消订阅，不退还任何费用',
                refundFull: '全额退款',
                refundFullDesc: '退还方案全价 {amount}',
                refundRemaining: '剩余价值退款',
                refundRemainingDesc: '按剩余有效期比例退款',
                reason: '退款原因',
                reasonPlaceholder: '请输入退款原因，将记录到余额日志...',
                reasonRequired: '退款时必须填写原因',
                confirm: '确认退订',
                success: '订阅已退订',
                successWithRefund: '订阅已退订，已退款 ¥{amount}',
            },
        },
        // 管理员创建实例
        instanceCreate: {
            title: '创建实例',
            description: '为用户赠送实例，无需支付任何费用',
            targetUser: '目标用户',
            usernamePlaceholder: '输入用户名',
            usernameHint: '实例将创建到该用户账户下',
            userHint: '实例将创建到该用户账户下',
            checkUser: '查询',
            checking: '查询中...',
            userFound: '用户找到 (ID: {id})',
            userNotFound: '用户不存在',
            userNotFoundHint: '请检查用户名是否正确',
            noSshKey: '该用户未设置 SSH 密钥',
            noSshKeyHint: '请让用户先在个人设置中添加 SSH 密钥',
            orderSummary: '赠送摘要',
            freeGift: '免费赠送',
            freeGiftHint: '此实例由管理员免费创建，不计入收费统计',
            createFor: '创建给',
            create: '创建实例',
            creating: '创建中...',
            submit: '创建实例',
            success: '实例创建成功',
            selectUser: '请先选择目标用户',
            createSuccess: '实例已创建，将显示在用户 {username} 的实例列表中',
            createFailed: '创建实例失败',
            selectUserFirst: '请先查询并确认目标用户',
            packageScope: {
                official: '自营套餐',
                hosted: '托管套餐',
            },
            // 付费实例相关
            instanceType: '实例类型',
            freeInstance: '免费实例',
            paidInstance: '付费实例',
            selectPlan: '选择方案',
            noPlanHint: '该套餐暂无可用方案',
            chargeFirstMonth: '扣除首月费用',
            chargeFirstMonthHint: '从用户余额扣除首月费用',
            noChargeFirstMonthHint: '首月免费赠送，次月起正常计费',
            planPrice: '方案月费',
            setupFee: '开通费',
            totalCharge: '本次扣费',
            freeFirstMonth: '首月免费',
            userBalance: '用户余额',
            insufficientBalance: '用户余额不足',
            paidSummary: '付费摘要',
            paidInstanceHint: '创建付费实例，按方案计费',
        },
        // 全站公告
        broadcast: {
            title: '发送全站公告',
            description: '发送站内信给所有活跃用户',
            messageTitle: '公告标题',
            titlePlaceholder: '输入公告标题',
            titleRequired: '请输入公告标题',
            titleTooLong: '标题超过 200 字符',
            messageContent: '公告内容',
            contentPlaceholder: '输入公告内容',
            contentRequired: '请输入公告内容',
            contentTooLong: '内容超过 5000 字符',
            send: '发送公告',
            sendSuccess: '已成功发送给 {count} 个用户',
            sendFailed: '发送失败',
            hint: '公告将发送给所有状态为「正常」的用户。',
            // 历史记录
            history: '历史记录',
            noHistory: '暂无发送记录',
            recipients: '发送给 {count} 人',
            sender: '发送者',
            types: {
                system_broadcast: '全站公告',
                host_broadcast: '节点通知',
                admin_message: '管理员私信',
                host_message: '宿主机私信',
            },
        },
        // 系统设置
        system: {
            title: '系统设置',
            description: '配置系统初始参数和默认值',
            tabs: {
                system: '系统设置',
                popupAnnouncement: '弹窗公告',
                telegram: 'Telegram 设置',
            },
            sections: {
                access: {
                    title: '访问与注册',
                    description: '管理注册入口、邀请码生成、默认配额和实例转移规则',
                },
                hosting: {
                    title: '托管与站点',
                    description: '管理托管入口、托管公告和白嫖站赠送策略',
                },
                brand: {
                    title: '品牌与外观',
                    description: '管理系统名称、Logo、头像服务和底部联系方式',
                },
                security: {
                    title: '安全验证',
                    description: '管理 Turnstile 人机验证和注册邮箱域名白名单',
                },
                mail: {
                    title: '邮件服务',
                    description: '管理 SMTP 邮件发送配置和测试邮件',
                },
                tickets: {
                    title: '工单与附件',
                    description: '管理工单入口和工单图片存储配置',
                },
            },
            popupAnnouncement: {
                title: '弹窗公告',
                description: '配置用户访问网站时弹出的全站公告。',
                content: '公告内容',
                placeholder: '在此输入弹窗公告内容，留空并保存表示删除公告，不再广播。',
                hint: '用户看到后可以选择今日不见或再也不见；公告内容更新后会按新公告重新弹出。',
                promoTitle: '图片推广弹窗',
                promoDescription: '配置新机器推广弹窗，前台会展示图片并引导用户购买指定套餐。',
                promoImageUrl: '图片 URL',
                promoImagePlaceholder: 'https://example.com/promo.jpg',
                promoImageHint: '建议使用清晰横幅图片，前台会按原比例完整显示。',
                promoPackage: '目标套餐',
                promoPackagePlaceholder: '选择要推广的套餐',
                promoPackageLoading: '正在加载套餐...',
                promoPackageEmpty: '暂无可推广套餐',
                promoPackageHint: '图片 URL 和目标套餐都填写后才会显示推广弹窗。',
                promoPreview: '前台预览',
                promoPreviewEmpty: '填写图片 URL 后显示预览',
                promoNoPackage: '尚未选择套餐',
                promoPackageFallback: '目标套餐',
            },
            defaultQuota: '用户默认配额',
            defaultQuotaDesc: '新注册用户将自动获得以下配额限制',
            quotaHost: '默认宿主机配额',
            quotaHostDesc: '新用户默认可创建宿主机数量',
            quotaFriend: '默认好友配额',
            quotaFriendDesc: '新用户默认可添加好友数量（0 = 未授权）',
            quotaPackage: '默认套餐配额',
            quotaPackageDesc: '新用户默认可创建套餐数量（0 = 未授权）',
            registration: '注册设置',
            registrationDesc: '配置用户注册相关选项',
            registrationEnabled: '开放注册',
            registrationEnabledDesc: '关闭后，新用户将无法注册，现有用户仍可正常登录',
            registrationOpen: '开放注册',
            registrationClosed: '关闭注册',
            requireInviteCode: '邀请码注册',
            requireInviteCodeDesc: '开启后，用户注册时需要填写邀请码',
            openRegistration: '开放注册',
            inviteOnly: '仅邀请',
            hostingFeature: {
                title: '托管功能',
                description: '控制托管节点与收益入口是否向新用户显示，已创建过节点的用户始终保留入口。',
                enable: '显示托管节点入口',
                enableDesc: '关闭后，从未创建过节点的用户将看不到托管节点和收益入口；已有节点用户仍可继续管理。',
                marketEntry: '显示托管套餐购买入口',
                marketEntryDesc: '控制开通实例页面是否显示托管专区和托管套餐购买入口；关闭后用户只能从该页面选择官方套餐。',
                marketEntryVisible: '显示入口',
                marketEntryHidden: '隐藏入口',
                notice: '托管公告',
                noticePlaceholder: '在此输入托管公告内容，留空则前台不显示',
                noticeHint: '显示在托管收益页面，支持换行，留空则隐藏。',
                visibleToAll: '所有用户可见',
                hiddenForNewUsers: '新用户隐藏',
            },
            brand: {
                title: '品牌设置',
                description: '配置系统名称、副标题与 Logo，留空则使用默认品牌。',
                name: '系统名称',
                nameDesc: '显示在侧边栏、顶部栏、登录注册页和 SEO 信息中。',
                subtitle: '网站副标题',
                subtitlePlaceholder: '基于 Incus 的低价 NAT VPS',
                subtitleDesc: '显示在公开站头部/底部、浏览器默认标题和 SEO 默认描述中。',
                logo: 'Logo 地址',
                logoDesc: '支持 http(s) 图片地址或站内绝对路径，留空则使用默认 Logo。',
            },
            ticket: {
                title: '工单设置',
                description: '控制普通用户是否可以发起工单。',
                enable: '开放工单',
                enableDesc: '关闭后，用户端隐藏工单入口，普通用户也无法通过接口创建工单。',
                enabled: '已开放',
                disabled: '已关闭',
            },
            freeSite: {
                title: '白嫖站',
                description: '控制用户端余额页是否展示充值和推荐计划相关功能。',
                enable: '启用白嫖站',
                enableDesc: '开启后，用户端余额页隐藏充值按钮、充值记录和推荐计划，接口也会拒绝创建或重新支付充值订单。',
                enabled: '已启用',
                disabled: '未启用',
                registerGift: '注册自动赠送',
                registerGiftDesc: '开启后，新用户注册成功会自动收到余额和积分到账通知。',
                giftEnabled: '赠送中',
                giftDisabled: '不赠送',
                giftBalance: '赠送余额',
                giftBalanceDesc: '注册成功后自动进入账户余额，单位为元。',
                giftPoints: '赠送积分',
                giftPointsDesc: '注册成功后自动进入娱乐中心积分账户。',
                giftRequiresFreeSite: '需要先启用白嫖站，才能设置注册自动赠送。'
            },
            unitCount: '个',
            reset: '重置',
            save: '保存配置',
            saving: '保存中...',
            loadFailed: '加载配置失败',
            saveSuccess: '配置已保存',
            saveFailed: '保存失败',
            notes: '说明',
            note1: '修改默认配额只会影响新注册的用户，不会影响已有用户的配额。',
            note2: '如需修改已有用户的配额，请前往「用户管理」页面单独调整。',
            note3: '宿主机配额限制用户可以创建的宿主机数量（0 = 功能未授权）。',
            note4: '好友配额限制用户可以添加的好友数量（0 = 功能未授权）。',
            note5: '套餐配额限制用户可以创建的套餐数量（0 = 功能未授权）。',
            // Turnstile 配置
            turnstile: {
                title: 'Cloudflare Turnstile',
                description: '配置人机验证，保护登录、注册和敏感操作',
                enable: '启用 Turnstile',
                enableDesc: '启用后，用户在登录、注册和敏感操作时需要完成人机验证',
                enabled: '已启用',
                disabled: '已禁用',
                siteKey: 'Site Key',
                siteKeyPlaceholder: '输入 Cloudflare Turnstile Site Key',
                siteKeyDesc: '前端使用的站点密钥',
                secretKey: 'Secret Key',
                secretKeyPlaceholder: '输入 Cloudflare Turnstile Secret Key',
                secretKeyDesc: '后端验证使用的密钥（请妥善保管）',
                helpText: '前往 Cloudflare 控制台获取密钥：',
            },
            avatar: {
                title: '头像服务',
                description: '配置用户头像生成服务，默认使用 DiceBear 官方 API',
                apiBase: 'API 地址',
                apiBaseDesc: 'DiceBear 头像 API 基础地址，可自建服务以提高访问速度',
                helpText: '了解如何自建 DiceBear 服务：',
            },
            // SMTP Email configuration
            smtp: {
                title: 'SMTP 邮件服务',
                description: '配置 SMTP 服务器以启用邮箱验证码功能，用户注册时需要验证邮箱',
                enable: '启用邮箱验证',
                enableDesc: '启用后，用户注册时需要通过邮箱验证码验证',
                enabled: '已启用',
                disabled: '已禁用',
                host: 'SMTP 服务器',
                hostPlaceholder: 'smtp.example.com',
                port: 'SMTP 端口',
                secure: '使用 SSL/TLS',
                secureHint: '端口 465 通常需要启用，端口 587 通常不需要',
                username: '用户名',
                usernamePlaceholder: '邮箱账号或用户名',
                password: '密码',
                passwordPlaceholder: '授权码或密码',
                fromEmail: '发件人邮箱',
                fromEmailPlaceholder: "noreply{'@'}example.com",
                fromName: '发件人名称',
                testConnection: '测试连接',
                testing: '测试中...',
                testSuccess: 'SMTP 连接测试成功',
                testFailed: 'SMTP 连接测试失败',
                sendTestEmail: '发送测试邮件',
                sendTestEmailDesc: '发送一封测试邮件到指定邮箱，验证邮件发送功能是否正常',
                testEmailPlaceholder: '输入收件人邮箱地址',
                sending: '发送中...',
                send: '发送',
                invalidEmail: '请输入有效的邮箱地址',
                testEmailSent: '测试邮件已发送至 {email}',
                testEmailFailed: '测试邮件发送失败',
                helpText: '请确保 SMTP 服务器地址、端口、用户名和密码正确。常见邮箱服务商需要使用授权码而非登录密码。',
            },
            // 邮箱域名白名单配置
            emailDomain: {
                title: '邮箱域名白名单',
                description: '限制只允许特定邮箱域名进行注册，提高用户质量',
                enable: '启用邮箱域名白名单',
                enableDesc: '启用后，只有白名单中的邮箱域名才能注册',
                enabled: '已启用',
                disabled: '已禁用',
                allowedDomains: '允许的邮箱域名',
                allowedDomainsPlaceholder: 'gmail.com,outlook.com,icloud.com\n每行一个域名或用逗号分隔\n留空则使用默认白名单',
                allowedDomainsDesc: '输入允许注册的邮箱域名，用逗号分隔或每行一个。留空则使用默认白名单（包含 Gmail、Outlook、iCloud、Yahoo、Proton 等主流邮箱服务）。',
                helpText: '默认白名单包含：Gmail、Outlook/Hotmail、iCloud、Yahoo、Zoho、Proton、Fastmail、Tuta、Posteo、Disroot、Riseup 等主流邮箱服务。',
            },
            // 转移设置
            transfer: {
                title: '转移设置',
                description: '配置实例转移功能的相关参数',
                feeLabel: '转移手续费',
                feeUnit: '元/次',
                feeDesc: '用户发起转移时需要支付的手续费（0 表示免费），对方拒绝接收时将自动退还',
                feeRangeError: '转移手续费必须在 0-{max} 元之间，最多支持两位小数',
            },
            footerLinks: {
                title: '底部联系方式',
                description: '配置侧边栏底部的邮箱按钮',
                email: '联系邮箱',
                emailPlaceholder: "support{'@'}example.com 或 mailto:support{'@'}example.com",
                emailDesc: '留空则隐藏邮箱按钮；支持填写邮箱地址或完整 mailto: 链接。',
                telegram: 'Telegram 群链接',
                telegramPlaceholder: 'https://t.me/your_group',
                telegramDesc: '留空则隐藏 Telegram 按钮。',
            },
            ticketImages: {
                title: '工单图片存储',
                description: '配置工单图片上传到兰空图床。面板只转发上传并记录元数据，不在本地落盘。',
                baseUrl: 'Lsky 地址',
                baseUrlPlaceholder: 'https://img.example.com',
                baseUrlDesc: '兰空图床站点根地址，不要追加 /api/v1/upload',
                token: 'Lsky Token',
                tokenPlaceholder: '输入兰空图床 API Token',
                tokenDesc: '仅后端使用，不会下发到前端',
                apiVersion: 'API 版本',
                apiVersionDesc: '根据你的兰空版本选择上传接口版本',
                targetId: '策略/存储 ID',
                targetIdPlaceholder: 'v1 填 strategy_id，v2 填 storage_id',
                targetIdDesc: '可留空，留空时使用兰空默认策略或默认存储',
            },
        },
        // 用户管理
        users: {
            title: '用户管理',
            description: '管理平台用户和邀请码',
            create: '创建用户',
            generateInvite: '生成邀请码',
            userInfo: '用户',
            role: '角色',
            status: '状态',
            quotaUsage: '配额使用',
            allInstances: '所有实例',
            instances: '个实例',
            registeredAt: '注册时间',
            admin: '管理员',
            user: '用户',
            active: '正常',
            banned: '已封禁',
            searchPlaceholder: '搜索用户名、ID、邮箱...',
            searchRange: '搜索范围',
            searchFieldUsername: '用户名',
            searchFieldId: 'ID',
            searchFieldEmail: '邮箱',
            exactMatch: '绝对匹配',
            noUsers: '暂无用户',
            noMatchingUsers: '未找到匹配的用户',
            noEmail: '未设置邮箱',
            resourceQuota: '资源配额',
            viewInstances: '查看实例',
            quota: '配额',
            ban: '封禁',
            unban: '解封',
            promoteAdmin: '设为管理员',
            demoteAdmin: '取消管理员',
            confirmBan: '确定封禁用户 "{name}"？',
            confirmUnban: '确定解封用户 "{name}"？',
            confirmPromoteAdmin: '确定将用户 "{name}" 设为管理员？该用户需要重新登录后生效。',
            confirmDemoteAdmin: '确定取消用户 "{name}" 的管理员权限？该用户当前会话会被撤销。',
            userBanned: '用户已封禁',
            userUnbanned: '用户已解封',
            userPromotedAdmin: '已设为管理员',
            userDemotedAdmin: '已取消管理员权限',
            onlyActiveCanBeAdmin: '只有正常状态的用户可以设为管理员',
            loadFailed: '加载用户失败',
            userVipLevels: '用户 VIP 等级',
            vipBenefits: '会员福利大厅设置',
            // 邀请码
            invites: '邀请码',
            inviteCode: '邀请码',
            inviteStatus: '状态',
            createdBy: '创建者',
            usedBy: '使用者',
            createdAt: '创建时间',
            usedExpireAt: '使用/过期时间',
            noInvites: '暂无邀请码',
            noMatchingInvites: '暂无符合条件的邀请码',
            inviteFilterAll: '全部',
            inviteFilterUsed: '已用',
            inviteFilterUnused: '未用',
            inviteUsed: '已使用',
            inviteExpired: '已过期',
            inviteUnused: '未使用',
            permanent: '永久',
            deleteInvite: '删除',
            confirmDeleteInvite: '确定删除邀请码 {code}？',
            inviteDeleted: '邀请码已删除',
            deleteFailed: '删除失败',
            // 生成邀请码
            generateInviteTitle: '生成邀请码',
            inviteCount: '生成数量',
            countUnit: '个',
            expireDays: '有效期',
            day1: '1 天',
            day3: '3 天',
            day7: '7 天',
            day14: '14 天',
            day30: '30 天',
            permanentValid: '永久有效',
            expireHint: '设置邀请码的过期时间',
            generate: '生成',
            generating: '生成中...',
            generateFailed: '生成邀请码失败',
            // 邀请码结果
            inviteGenerated: '邀请码已生成',
            validUntil: '有效期至',
            copyCode: '复制邀请码',
            copyAllCodes: '一键复制全部',
            copyLink: '复制注册链接',
            copied: '已复制!',
            // 配额编辑
            editQuota: '编辑配额',
            instanceLimit: '实例上限',
            instanceLimitHint: '用户可创建的实例数量上限',
            hostLimit: '宿主机上限',
            hostLimitHint: '用户可拥有的宿主机数量上限',
            friendLimit: '好友上限',
            friendLimitHint: '用户可添加的好友数量上限',
            packageLimitHint: '用户可创建的套餐数量上限',
            packageLimit: '套餐限制',
            notAuthorized: '未授权',
            cpuAllowance: 'CPU 额配',
            cpuAllowanceHint: '额配 ÷ 100 ≈ 可用核心数，最小 10，步进 5',
            cpuCores: '~{n} 核',
            memoryLimit: '内存 (MB)',
            diskLimit: '磁盘 (MB)',
            portLimit: 'NAT 端口上限',
            portLimitHint: '所有实例的端口配额总上限',
            snapshotLimit: '快照上限',
            snapshotLimitHint: '所有实例的快照配额总上限',
            backupLimit: '备份上限',
            backupLimitHint: '所有实例的备份配额总上限',
            trafficLimit: '月流量上限',
            trafficLimitPlaceholder: '留空表示不限制',
            trafficLimitHint: '单位 GB，留空表示不限制',
            quotaUpdated: '配额已更新',
            totalRecords: '共 {count} 条记录',
            prevPage: '上一页',
            nextPage: '下一页',
            // 重置密码
            resetPassword: '重置密码',
            resetPasswordConfirm: '确定要重置用户 "{name}" 的密码吗？',
            resetPasswordHint: '系统将自动生成新密码，用户的所有会话将被撤销，需要使用新密码重新登录。',
            confirmResetPassword: '确认重置',
            resetting: '重置中...',
            passwordResetSuccess: '密码重置成功',
            newPasswordFor: '用户 "{name}" 的新密码：',
            copyPassword: '复制密码',
            copyPasswordHint: '请妥善保管此密码，关闭弹窗后将无法再次查看',
            // 取消2FA
            disable2FA: '取消双因素认证',
            disable2FAConfirm: '确定要取消用户 "{name}" 的双因素认证吗？',
            disable2FAWarning: '取消后，该用户登录时将不再需要验证码，可能降低账户安全性。',
            twoFADisabled: '双因素认证已取消',
            // 解绑GitHub
            unbindGitHub: '解绑 GitHub',
            unbindGitHubConfirm: '确定要解除用户 "{name}" 的 GitHub 绑定吗？',
            unbindGitHubWarning: '解除后，该用户将无法使用 GitHub 快捷登录。',
            githubUnbound: 'GitHub 绑定已解除',
            // 用户活动和登录记录
            userActivity: '用户活动',
            registeredNew: '新',
            registeredDays: '注册 {days} 天',
            viewLoginRecords: '查看登录记录',
            noLoginRecord: '无登录记录',
            loginRecords: '登录记录',
            noLoginRecords: '暂无登录记录',
            loadLoginRecordsFailed: '加载登录记录失败',
            // 发送站内信
            sendMessage: '发送站内信',
            sendMessageTo: '发送站内信给 {username}',
            messageTitle: '消息标题',
            messageTitlePlaceholder: '输入消息标题',
            messageTitleRequired: '请输入消息标题',
            messageContent: '消息内容',
            messageContentPlaceholder: '输入消息内容',
            messageContentRequired: '请输入消息内容',
            messageSent: '消息已发送',
            messageSendFailed: '发送失败',
            // 用户余额
            balance: '余额',
            viewBalance: '查看余额详情',
            consumed: '已消费',
            totalConsumed: '已消费总金额',
            balanceDetails: '余额详情',
            balanceOverview: '账户概览',
            balanceLogs: '余额明细',
            rechargeRecords: '充值记录',
            currentBalance: '当前余额',
            totalRecharge: '累计充值',
            totalConsume: '累计消费',
            noBalanceLogs: '暂无余额变动',
            noRechargeRecords: '暂无充值记录',
            loadBalanceFailed: '加载余额信息失败',
            loadBalanceLogsFailed: '加载余额明细失败',
            loadRechargeRecordsFailed: '加载充值记录失败',
            balanceType: {
                recharge: '充值',
                consume: '消费',
                refund: '退款',
                admin_adjust: '管理员调整',
                gift: '赠送',
                transfer_fee: '转移手续费',
                transfer_refund: '手续费退还',
            },
            // 调整余额
            adjustBalance: '调整余额',
            adjustBalanceFor: '调整 {username} 的余额',
            adjustType: '调整类型',
            addBalance: '增加余额',
            deductBalance: '扣除余额',
            amount: '金额',
            amountPlaceholder: '请输入金额',
            adjustReason: '调整理由',
            adjustReasonPlaceholder: '请输入调整理由（必填）',
            invalidAmount: '请输入有效的金额',
            reasonRequired: '请输入调整理由',
            balanceAdjusted: '余额调整成功',
            balanceAdjustFailed: '余额调整失败',
            // 积分相关
            points: '积分',
            earned: '累计',
            totalEarnedPoints: '累计获得积分',
            spent: '已用',
            spentPoints: '已用积分',
            adjustPoints: '调整积分',
            currentPoints: '当前积分',
            pointsAmount: '调整数量',
            pointsAmountHint: '正数增加，负数扣除',
            pointsAmountPlaceholder: '如：100 或 -50',
            pointsReasonPlaceholder: '请输入调整理由（必填）',
            invalidPointsAmount: '请输入有效的积分数量',
            pointsAdjusted: '积分调整成功',
            pointsAdjustFailed: '积分调整失败',
            // 托管余额相关
            hostingBalance: '托管余额',
            hostingBalanceDetails: '托管余额详情',
            hostingBalanceOverview: '概览',
            hostingBalanceLogs: '明细',
            adjustHostingBalance: '调整托管余额',
            viewHostingBalance: '查看托管余额',
            frozenHostingBalance: '冻结托管余额',
            availableBalance: '可用余额',
            frozenBalance: '冻结余额',
            frozen: '冻结中',
            available: '可用',
            operation: '操作类型',
            operationAdd: '增加',
            operationDeduct: '扣减',
            hostingReasonPlaceholder: '请输入调整理由（必填）',
            hostingBalanceAdjusted: '托管余额调整成功',
            hostingBalanceAdjustFailed: '托管余额调整失败',
            loadHostingLogsFailed: '加载托管余额明细失败',
            logTime: '时间',
            logType: '类型',
            logAmount: '金额',
            logStatus: '状态',
            logDescription: '描述',
            hostingLogType: {
                income: '收入',
                deduction: '扣减',
                unfreeze: '解冻',
                withdraw: '提现',
                admin_adjust: '管理员调整',
            },
            // 关联账号检测
            linkedAccounts: '关联账号检测',
            detectDays: '检测范围',
            daysUnit: '天',
            startDetect: '开始检测',
            detecting: '检测中...',
            detectingHint: '正在分析用户数据，请稍候...',
            clickToDetect: '点击上方按钮开始检测关联账号',
            loadLinkedAccountsFailed: '加载关联账号检测失败',
            detectTime: '检测时间',
            detectDuration: '耗时',
            detectRange: '检测范围',
            ipGroupCount: '个IP关联组',
            emailGroupCount: '个邮箱相似组',
            usernameGroupCount: '个用户名相似组',
            ipLinkedGroups: 'IP关联组',
            emailSimilarGroups: '邮箱相似组',
            usernameSimilarGroups: '用户名相似组',
            usersCount: '个用户',
            loginsCount: '次登录',
            lastLoginAt: '最后登录',
            noLinkedAccounts: '未检测到关联账号，您的用户非常贞洁！',
        },
        // 节点管理
        hosts: {
            title: '节点管理',
            description: '管理宿主机和节点组',
            create: '添加宿主机',
            address: '地址',
            status: '状态',
            online: '在线',
            offline: '离线',
            maintenance: '维护中',
            hostsTab: '宿主机',
            searchPlaceholder: '搜索宿主机...',
            noHosts: '暂无宿主机',
            name: '名称',
            resources: '资源',
            instances: '实例',
            actions: '操作',
            cpu: 'CPU',
            cpuQuota: 'CPU 配额',
            memory: '内存',
            memoryQuota: '内存配额',
            disk: '硬盘',
            diskUsage: '硬盘使用情况',
            cores: '核',
            allowanceLimit: '额配上限',
            memoryLimit: '内存上限',
            instanceType: '类型',
            typeContainer: '容器',
            typeVm: '虚拟机',
            typeBoth: '两者',
            edit: '编辑',
            test: '测试',
            delete: '删除',
            testSuccess: '连接成功',
            testFailed: '连接失败',
            confirmDelete: '确定删除宿主机 "{name}"？',
            hostDeleted: '宿主机已删除',
            deleteFailed: '删除失败',
            // 添加/编辑宿主机
            addHost: '添加宿主机',
            editHost: '编辑宿主机',
            hostName: '名称',
            hostNameHint: '只能包含英文字母、数字、- 和 _',
            hostNameRequired: '请输入节点名称',
            hostDesc: '描述',
            apiUrl: 'API URL',
            ipAddress: '连接地址',
            ipAddressHint: '支持 IPv4、IPv6 裸地址或域名',
            ipAddressRequired: '请输入服务器地址',
            apiPort: 'API 端口',
            apiPortHint: '默认 8443',
            tokenPrompt: '若安装时提示输入安全通信 Token，请复制下方内容并粘贴：',
            copyToken: '复制 Token',
            country: '国家或地区',
            certPath: '证书路径',
            keyPath: '密钥路径',
            natPublicIp: '网卡IP',
            natPublicIpPlaceholder: '输入服务器的网卡IP',
            natConfig: 'NAT 配置',
            natPublicIpv4: '公网 IPv4',
            natPublicIpv4Placeholder: '请输入用户访问时显示的公网 IPv4',
            natPublicIpv4Desc: '用户访问 IPv4 端口映射时看到的公网 IPv4 地址。',
            natPublicIpv6: '公网 IPv6',
            natPublicIpv6Placeholder: '例如 2600:1900:41a0:5bb::',
            natPublicIpv6Desc: '用于向用户展示的公网 IPv6 地址，不一定是实际监听端口时使用的地址。',
            natBindIpv4: '监听 IPv4',
            natBindIpv4Placeholder: '留空则自动识别，例如 0.0.0.0 或 10.170.0.3',
            natBindIpv4Desc: '实际绑定 IPv4 端口时使用的地址。留空后由系统自动选择。',
            natBindIpv6: '监听 IPv6',
            natBindIpv6Placeholder: '留空则自动识别，例如 2600:1900:41a0:5bb::',
            natBindIpv6Desc: '实际绑定 IPv6 端口时使用的地址。留空后由系统自动选择。',
            natPublicIpv6Invalid: '公网 IPv6 地址格式无效',
            natBindIpv6Invalid: '监听 IPv6 地址格式无效',
            portRangeStart: '端口范围起始',
            portRangeEnd: '端口范围结束',
            portRangeEndMustBeGreater: '端口范围结束不能小于起始',
            cpuAllowanceMax: '总 CPU 时间片配额',
            memoryMax: '内存最大值',
            instanceTypeLabel: '实例类型',
            networkModeLabel: '网络模式',
            networkModeNat: 'IPv4 NAT',
            networkModeNatIpv6: 'IPv4 NAT & IPv6',
            networkModeNatIpv6Nat: 'IPv4 NAT & IPv6 NAT',
            networkModeIpv6Only: 'IPv6 Only',
            networkModeIpv6Nat: 'IPv6 NAT',
            autoAssign: '自动分配',
            hostAdded: '宿主机添加成功',
            hostUpdated: '宿主机更新成功',
            typeChangeWarning: '节点类型变更警告',
            addFailed: '添加失败',
            updateFailed: '更新失败',
            // 初始化配置
            initConfig: '初始化配置',
            // 存储配置
            storageConfig: '存储配置',
            storageDriver: '存储驱动',
            storageDriverZfs: 'ZFS (推荐)',
            storageDriverLvm: 'LVM',
            storageType: '存储类型',
            storageTypeLoop: 'Loop 文件',
            storageTypeDisk: '物理磁盘',
            storagePath: '设备路径',
            storagePathHint: '如 /dev/sdb',
            storageSize: '存储大小',
            // 网络配置
            networkConfig: '网络配置',
            networkOption: '网络选项',
            networkOptionHint: '选择容器实例的网络出口方式',
            independentIpv6: '独立 IPv6',
            ipv6Mode: 'IPv6 模式',
            ipv6Routed: 'Routed',
            ipv6Nat: 'NAT',
            ipv6Disabled: '禁用',
            ipv6Subnet: 'IPv6 子网',
            ipv6SubnetHint: '分配给容器的 IPv6 子网段',
            ipv6SubnetRequired: '请输入 IPv6 网段',
            ipv6SubnetInvalid: 'IPv6 网段格式无效，需要包含 CIDR 前缀（如 /48）',
            ipv6Gateway: 'IPv6 网关',
            ipv6ParentInterface: 'IPv6 父接口',
            ipv6ParentInterfaceHint: 'IPv6 routed 模式使用的宿主机物理网卡名（如 eth0）',
            ipv6ParentInterfaceRequired: '请输入 IPv6 父接口',
            enableApi: '启用 API',
            // 内核参数
            sysctlConfig: '内核参数',
            sysctlConfigHint: '自定义 sysctl 配置，留空使用默认值',
            resetSysctl: '恢复默认',
            enableBBR: '启用 BBR',
            bbrEnabled: 'BBR 已启用',
            // 安装脚本
            installScript: '安装脚本',
            runOnHost: '请在宿主机上以 root 权限运行以下命令：',
            copyCommand: '复制命令',
            step1RunScript: '执行安装脚本',
            step2Verify: '验证并连接',
            verifyHint: '脚本执行完成后，点击下方按钮验证连接',
            verifyAndConnect: '验证并连接',
            verifying: '验证中...',
            verifySuccess: '纳管成功！',
            verifyFailed: '验证失败',
            reinstall: '重新安装',
            reinstallScript: '重新安装脚本',
            reinstallFailed: '生成安装命令失败',
            waitingInstall: '等待安装完成...',
            installSuccess: '安装成功！',
            tokenExpired: 'Token 已过期，请重新创建宿主机',
            // 详情页
            tabInfo: '信息',
            tabConfig: '配置',
            tabInstances: '实例',
            tabStorage: '存储',
            tabImages: '镜像',
            tabOps: '运维',
            tabCreate: '创建',
            basicInfo: '基本信息',
            config: '配置',
            resourceLimits: '资源限制',
            transferControl: '转移控制',
            transferEnabled: '允许转移',
            transferEnabledHint: '关闭后，该节点上的实例将无法发起转移请求',
            notificationSettings: '通知设置',
            notificationSettingsHint: '仅通过你已启用的 Telegram、Discord、Webhook 渠道发送，这里不会发送 Email。',
            notifyPurchase: '购买通知',
            notifyPurchaseHint: '当有用户在该节点购买付费实例时通知你。',
            notifyRenew: '续费通知',
            notifyRenewHint: '当有用户在该节点续费付费实例时通知你。',
            notifyDestroy: '销毁通知',
            notifyDestroyHint: '当有用户销毁该节点实例时通知你，并包含实际退款金额和手续费金额。',
            extraConfig: '额外配置',
            trafficConfig: '流量配置',
            trafficResetDay: '流量重置日',
            trafficResetDayHint: '每月何日重置实例流量（可设置 1-28）',
            enableResourcePool: '参与资源池玩法',
            enableResourcePoolHint: '开启后，该节点的实例可参与签到/抽奖资源应用',
            announcement: '节点公告',
            announcementPlaceholder: '在此输入公告内容，将显示在该节点下所有实例的详情页',
            announcementHint: '留空则不显示公告，支持换行',
            probeUrl: '探针地址',
            probeUrlPlaceholder: '输入节点探针监控页面地址',
            probeUrlHint: '可以输入此节点的探针、脚本测试结果等链接，配置后，用户在选择节点时可点击图标跳转查看',
            portRange: '端口范围',
            portsUsed: '已用端口',
            recalculateResources: '对齐已用',
            recalculateResourcesTip: '重新计算资源使用量，并将配额对齐到已用配额',
            recalculateSuccess: '资源校对完成，配额已对齐',
            recalculateNoChanges: '资源数据正确，无需修正',
            recalculateFailed: '资源校对失败',
            ops: {
                title: '宿主机运维中心',
                description: '优先执行非破坏性盘点、基线同步和网络修复，用于旧节点纳管补齐与状态校准。',
                discover: '实例盘点',
                baselineSync: '基线同步',
                networkRepair: '网络修复',
                refresh: '刷新结果',
                managed: '已纳管实例',
                orphaned: '未纳管遗留实例',
                missing: '数据库异常实例',
                summary: '摘要',
                totalIncus: '宿主机实例',
                totalDb: '数据库实例',
                managedCount: '已纳管',
                orphanedCount: '未纳管',
                missingCount: '异常缺失',
                runSuccess: '操作执行成功',
                runFailed: '操作执行失败',
                lastRunAt: '最近执行时间',
                empty: '暂无结果，请先执行上方运维操作。',
                sectionInventory: '宿主机实例盘点',
                sectionRepair: '安全修复动作',
                sectionReport: '执行结果',
                resultInventory: '盘点结果',
                resultBaseline: '基线同步结果',
                resultNetwork: '网络修复结果',
                resultPreview: '实例预检结果',
                resultInstanceSync: '单实例同步结果',
                resultInstanceRestart: '单实例重启结果',
                resultDanger: '高风险动作结果',
                instanceName: '实例名',
                instanceType: '类型',
                incusStatus: '宿主机状态',
                dbStatus: '数据库状态',
                dbInstance: '数据库实例',
                changes: '变更数',
                synced: '已同步',
                failed: '失败',
                total: '总数',
                ipv4: 'IPv4',
                ipv6: 'IPv6',
                details: '详情',
                noManaged: '未发现已纳管实例',
                noOrphaned: '未发现未纳管遗留实例',
                noMissing: '未发现数据库异常实例',
                baselineHint: '同步宿主机资源占用，并批量回填运行中实例的状态与 IP。',
                networkHint: '批量校准非删除实例的状态、IPv4 与 IPv6 记录。',
                discoverHint: '读取宿主机当前所有 Incus 容器 / KVM，与数据库记录对账。',
                selectInstanceHint: '从已纳管实例中选择一个对象，执行单实例同步、重启或高风险动作。',
                instancePanel: '单实例操作面板',
                loadPreview: '加载预检',
                syncInstance: '同步实例',
                safeRestart: '安全重启',
                forceRestart: '强制重启',
                dangerZone: '高风险操作区',
                dangerHint: '这里的动作会清空或替换实例系统数据，仅建议在盘点、同步和重启均无法解决问题时使用。',
                rebuild: '重装当前实例',
                recreate: '重建替换实例',
                imageAlias: '镜像别名',
                imageAliasPlaceholder: '例如 ubuntu/22.04 或 debian/12',
                selectImage: '镜像选择',
                imagePlaceholder: '请选择目标镜像',
                loadingImages: '正在加载可用镜像...',
                noImagesAvailable: '当前节点暂无可用镜像',
                sshKeyId: 'SSH 密钥 ID',
                selectSshKey: 'SSH 密钥',
                sshKeyPlaceholder: '不指定 SSH 密钥',
                loadingSshKeys: '正在加载 SSH 密钥...',
                noSshKeysAvailable: '该实例用户暂无 SSH 密钥，不指定时将沿用后端默认处理',
                sshKeyOptionalHint: '可选，不指定时使用实例用户的默认密钥策略',
                customInitCommandIds: '自定义初始化命令 ID',
                selectInitCommands: '初始化命令',
                loadingInitCommands: '正在加载初始化命令...',
                noInitCommandsAvailable: '当前镜像没有可选初始化命令',
                optionalField: '可选项，可留空',
                confirmDangerTitle: '执行前确认',
                riskCheckbox: '我已知晓该操作可能导致实例系统或数据不可恢复，并确认这是预期行为。',
                confirmTextHint: '请输入实例真实名称进行确认，例如 u2-g65uoeo1',
                ownerUserId: '用户 ID',
                fullInstanceName: '完整实例名称',
                selectedOnlyHint: '单实例操作仅作用于当前选中的实例，不会对未选中的实例产生干扰。',
                localizedNone: '无需操作',
                dangerActionType: '动作类型',
                dangerConfirm1Title: '第一次确认高风险操作',
                dangerConfirm1Hint: '请再次确认你即将执行不可逆的高风险动作。',
                dangerConfirm1Btn: '确认继续',
                dangerConfirm2Title: '第二次确认高风险操作',
                dangerConfirm2Hint: '这是最后一次确认，执行后将立即创建任务。',
                dangerConfirm2Btn: '确认执行',
                dangerConfirmStep: '确认步骤 {step} / {total}',
                executeDangerAction: '执行高风险动作',
                suggestedAction: '建议动作',
                activeTask: '活跃任务',
                latestInstanceAction: '最近单实例动作',
            },
            statusOnline: '在线',
            statusOffline: '离线',
            statusMaintenance: '维护中',
            invalidId: '无效的节点 ID',
            loadFailed: '加载失败',
            noInstances: '该节点上暂无实例',
            search: '搜索',
            instanceSearchPlaceholder: '搜索实例ID、名称、用户名、邮箱、IP地址...',
            imagesOnHost: '节点 {name} 上的镜像',
            noImagesOnHost: '该节点上暂无镜像',
            selectImagesToSync: '选择要同步到节点 {name} 的镜像',
            allImagesSynced: '所有镜像都已同步到该节点',
            imagePolicy: {
                title: '镜像策略',
                description: '配置节点「{name}」在开通和重装时可选的镜像范围',
                defaultMode: '使用面板默认镜像',
                defaultDesc: '不单独限制该节点，创建和重装时按节点架构与实例类型加载全部可用镜像。',
                restrictedMode: '限制为以下镜像',
                restrictedDesc: '只允许勾选的镜像出现在该节点的开通和重装列表中。',
                selectableImages: '可选镜像',
                defaultHint: '当前未对该节点单独限制镜像。',
                selectedCount: '当前已选择 {count} 个镜像',
                searchPlaceholder: '搜索镜像名称、别名或发行版...',
                emptySelection: '限制模式下至少需要选择一个镜像，否则请改为默认模式。',
                noImages: '当前没有适用于该节点架构和实例类型的可见镜像。',
                loadFailed: '加载镜像策略失败',
                saveSuccess: '镜像策略已保存',
                saveFailed: '保存镜像策略失败',
            },
            addHostDesc: '添加新的宿主机节点',
            allocated: '已分配',
            includesPageCache: '包含页面缓存',
            syncTime: '同步时间',
            deleteHost: '删除宿主机',
            deleteWarning: '此操作不可撤销！删除宿主机前，请确保该节点上没有任何实例。',
            deleteConfirmHint: '请输入宿主机名称 "{name}" 以确认删除：',
            enterHostName: '宿主机名称',
            confirmDeleteBtn: '确认删除',
            deleteNameMismatch: '输入的名称不匹配',
            hasInstances: '该节点上还有 {count} 个实例，请先删除或迁移实例',
            checkFailed: '检查失败',
            // 批量延期
            batchExtend: '赠送时长',
            extendHint: '该节点下共有 {count} 个付费实例将被延期',
            extendDaysLabel: '延期天数',
            extendDaysPlaceholder: '请输入 1-365 的整数',
            extendDaysInvalid: '请输入有效的延期天数（1-365）',
            confirmExtendBtn: '确认赠送',
            extendSuccess: '已成功为 {count} 个付费实例延期 {days} 天',
            extendFailed: '批量延期失败',
            // 批量删除实例
            selectedCount: '已选择 {count} 个实例',
            noInstanceSelected: '请勾选实例以使用批量操作',
            batchDelete: '批量删除',
            batchDeleteTitle: '批量删除实例',
            batchDeleteWarning: '此操作不可撤销！删除后实例数据将无法恢复。',
            batchDeleteConfirm: '确定要删除这 {count} 个实例吗？',
            confirmBatchDelete: '确认删除',
            databaseOnlyDelete: '仅数据库删除',
            batchDeleteSuccess: '成功删除 {count} 个实例',
            batchDeletePartial: '成功删除 {success} 个实例，{failed} 个失败',
            batchDeleteFailed: '批量删除失败',
            batchDeleteRefundWarning: '删除付费实例将自动退还剩余价值给用户，并从您的托管余额扣除相应金额。',
            batchDeleteRefundTotal: '总退款金额',
            instanceName: '实例名称',
            instanceUser: '所属用户',
            refundAmount: '退款金额',
            // 批量同步实例状态
            batchSyncStatus: '同步状态',
            batchSyncSuccess: '成功同步 {synced} 个实例，{changed} 个状态已更新',
            batchSyncWithIpv4: '成功同步 {synced} 个实例，{changed} 个状态更新，{ipv4Changed} 个内网 IP 更新',
            batchSyncPartial: '同步 {synced} 个，更新 {changed} 个，失败 {failed} 个',
            batchSyncNoChange: '成功同步 {synced} 个实例，状态无变化',
            batchSyncFailed: '同步状态失败',
            // 批量封停实例
            batchSuspend: '批量封停',
            batchSuspendTitle: '批量封停实例',
            batchSuspendWarning: '封停后，实例所有者将无法对实例进行任何操作，直到解除封停。',
            batchSuspendConfirm: '确定要封停这 {count} 个实例吗？',
            confirmBatchSuspend: '确认封停',
            batchSuspendSuccess: '成功封停 {count} 个实例',
            batchSuspendPartial: '成功封停 {success} 个实例，{failed} 个失败',
            batchSuspendFailed: '批量封停失败',
            batchUnsuspend: '批量解封',
            batchUnsuspendSuccess: '成功解封 {count} 个实例',
            batchUnsuspendPartial: '成功解封 {success} 个实例，{failed} 个失败',
            batchUnsuspendNone: '选中的实例中没有已封停的实例',
            batchUnsuspendFailed: '批量解封失败',
            suspendReason: '封停原因（可选）',
            suspendReasonPlaceholder: '填写封停原因后，系统将通过站内信通知实例所有者...',
            deleteReason: '删除原因（可选）',
            deleteReasonPlaceholder: '填写删除原因后，系统将通过站内信和通知渠道告知用户...',
            deleteReasonHint: '如果填写了删除原因，被删除实例的所有者将收到通知',
            // 实例流量
            trafficUsage: '流量使用',
            trafficUnlimited: '不限制',
            resetTraffic: '重置流量',
            trafficResetSuccess: '流量已重置',
            trafficResetFailed: '重置流量失败',
            resetTrafficTitle: '重置实例流量',
            resetTrafficWarning: '如果是已超额的实例，重置流量不会自动恢复实例的带宽限速（1Mbps），请手动为该实例恢复带宽速率。',
            resetTrafficDesc: '确定要重置实例 "{instance}" 的流量吗？',
            // 节点流量统计
            trafficStats: '流量统计',
            monthlyUsed: '本月已用',
            hostTotalLimit: '节点总分配',
            // 宿主机状态
            agentStatusTitle: '宿主机状态',
            agentStatusDesc: 'Agent 按 {seconds} 秒间隔上报宿主机实时资源与运行状态',
            agentStatusRefreshSuccess: '状态接口已刷新，请以最后心跳时间为准',
            agentStatusLoadFailed: '加载宿主机状态失败',
            agentNotInstalled: '未安装',
            agentDisabled: '已停用',
            agentOnline: '在线',
            agentOffline: '离线',
            agentUnknown: '未知',
            agentVersionLatest: '最新',
            agentVersionOutdated: '可升级',
            agentVersionUnknown: '版本未知',
            agentLatestVersion: '最新版本：{version}',
            agentUpgradeClickHint: '点击请求升级到 {version}，Agent 会在下次心跳执行',
            agentUpgradeRequestSuccess: '已请求升级，Agent 会在约 {seconds} 秒内的下一次心跳执行',
            agentUpgradeRequestFailed: '请求 Agent 升级失败',
            agentAlreadyLatest: 'Agent 已是最新版本',
            agentInstallCommand: '安装/重装 Agent',
            agentInstallCommandTitle: 'Agent 安装命令',
            agentInstallCommandHint: '可在宿主机执行完整命令，也可在 Agent 菜单中粘贴该命令或其中的 ait_ token。',
            agentInstallCommandConfirm: '生成新的 Agent 安装命令会轮换该宿主机的 Agent 凭据。旧 Agent 会在重新安装前无法继续上报，确定继续吗？',
            agentInstallTokenExpiresAt: '有效期至 {time}',
            agentInstallCommandSuccess: 'Agent 安装命令已生成',
            agentInstallCommandFailed: '生成 Agent 安装命令失败',
            agentInstallCommandCopied: 'Agent 安装命令已复制',
            agentNoRecordHint: '该宿主机还没有 Agent 心跳记录。重新安装或安装 Agent 后会自动上报。',
            agentId: 'Agent ID',
            agentLastSeen: '最后心跳',
            agentHeartbeatIp: '心跳 IP',
            agentReportedAt: '上报时间',
            agentIncus: 'Incus 检测',
            agentIncusAvailable: '可用',
            agentIncusUnavailable: '不可用',
            agentCpuTotal: 'CPU 核心',
            agentMemoryTotal: '内存总量',
            agentUptime: '宿主机运行时间',
            agentSocket: 'Incus Socket',
            agentCpuUsage: 'CPU 使用率',
            agentCpuCores: '核心',
            agentMemoryUsage: '内存使用',
            agentSwapUsage: 'SWAP 使用',
            agentDiskUsage: '磁盘使用',
            agentLoadAverage: '负载',
            agentLoadAverageHint: '1 / 5 / 15 分钟',
            agentProcessCount: '进程数',
            // 存储池管理
            storage: {
                title: '存储池',
                subtitle: '管理此宿主机上的 Incus 存储池',
                create: '添加存储池',
                createTitle: '创建存储池',
                empty: '暂无存储池',
                loadFailed: '加载存储池失败',
                createSuccess: '存储池创建成功',
                createFailed: '创建存储池失败',
                deleteSuccess: '存储池已删除',
                deleteFailed: '删除存储池失败',
                deleteConfirm: '确定删除存储池 "{name}"？此操作不可撤销。',
                updateSuccess: '存储池已更新',
                updateFailed: '更新存储池失败',
                editTitle: '编辑存储池',
                currentSize: '当前大小',
                newSize: '新大小',
                newSizeHint: '仅支持扩容，不支持缩容',
                nameRequired: '请输入存储池名称',
                sourceRequired: '请输入存储源（设备路径）',
                sizeRequired: '请输入存储大小',
                pathRequired: '请输入目录路径',
                poolName: '存储池名称',
                driver: '驱动类型',
                description: '描述',
                source: '存储源',
                size: '存储大小',
                usedBy: '使用者',
                volumes: '个卷',
                // 驱动描述
                zfsDesc: '推荐：功能最全（快照、克隆、压缩、配额），性能极佳',
                lvmDesc: 'Linux 标配，极其稳定，建议开启 Thin Provisioning',
                btrfsDesc: '类似 ZFS 特性，单盘或 RAID1/10 可用',
                dirDesc: '目录存储，性能最差，仅用于测试',
                // 通用
                useLoop: '使用 Loop 文件',
                loopSizeHint: '将在 /var/lib/incus/ 下创建镜像文件',
                // ZFS
                zfsSourceHint: '物理盘或分区路径，如 /dev/disk/by-id/nvme-xxx',
                zfsPoolName: 'ZFS 池名称',
                zfsPoolNameHint: '可选，不填则使用存储池名称',
                // LVM
                lvmSourceHint: '物理盘路径，如 /dev/sdb',
                lvmVgName: '卷组名称',
                lvmUseThinpool: '启用精简卷（Thin Provisioning）',
                lvmThinpoolHint: '强烈建议开启，否则快照性能极差',
                // Btrfs
                btrfsSourceHint: '物理盘路径，如 /dev/sdb',
                // DIR
                dirPath: '目录路径',
                dirPathHint: '指定一个存在的目录，如 /mnt/data/incus-storage',
                // 存储用途
                purpose: '存储用途',
                forInstances: '用于实例系统盘',
                forInstancesHint: '创建实例时作为默认存储',
                forVolumes: '用于实例存储盘',
                forVolumesHint: '可手动挂载到实例',
                purposeSystemDisk: '系统盘',
                purposeStorageDisk: '存储盘',
                // 模式切换
                modeCreate: '创建新存储池',
                modeExisting: '关联已有存储池',
                modeImport: '导入已有存储',
                modeCreateHint: '在宿主机上创建新的存储池，需要配置驱动类型、存储源等参数',
                modeExistingHint: '关联已在宿主机上创建的存储池，只需输入存储池名称即可',
                modeImportHint: '导入底层已存在但 Incus 还未知晓的存储池（如手动创建的 ZFS 池、LVM VG）',
                linkSuccess: '存储池关联成功',
                importSuccess: '存储池导入成功',
                // 导入存储池
                importZfsSource: 'ZFS 池名称',
                importLvmSource: 'LVM 卷组名称',
                importBtrfsSource: 'Btrfs 设备或子卷路径',
                importDirSource: '目录路径',
                importZfsHint: '底层已存在的 ZFS 池名称（通过 zpool list 查看）',
                importLvmHint: '底层已存在的 LVM 卷组名称（通过 vgs 查看）',
                importBtrfsHint: '已格式化为 Btrfs 的设备或子卷路径',
                importDirHint: '已存在的目录路径，如 /mnt/storage',
                importSourceRequired: 'Btrfs 和 DIR 类型必须提供底层存储源路径',
            },
        },
        // 镜像管理
        images: {
            title: '镜像管理',
            description: '管理系统镜像库，用户可在创建实例时选择这些镜像',
            create: '添加镜像',
            edit: '编辑镜像',
            imagesTab: '镜像库',
            syncTab: '同步状态',
            noImages: '还没有添加任何镜像',
            noImagesForArchitecture: '当前架构下没有镜像',
            addImage: '添加镜像',
            syncToHost: '同步镜像到节点',
            delete: '删除',
            confirmDelete: '确定删除镜像 "{name}"？',
            imageDeleted: '镜像已删除',
            deleteFailed: '删除失败',
            deleteSuccess: '镜像已删除',
            enabled: '启用',
            disabled: '禁用',
            active: '已启用',
            show: '显示',
            hide: '隐藏',
            shown: '镜像已显示',
            hidden: '镜像已隐藏',
            statusVisible: '可见',
            statusHidden: '已隐藏',
            createSuccess: '镜像创建成功',
            updateSuccess: '镜像更新成功',
            saveFailed: '保存失败',
            loadFailed: '加载镜像列表失败',
            validation: {
                requiredFields: '请填写名称、远程别名和图标',
            },
            fields: {
                icon: '图标',
                name: '名称',
                remoteAlias: '远程别名',
                osType: '系统类型',
                architecture: '架构',
                instanceType: '实例类型',
                sortOrder: '排序',
                status: '状态',
                hidden: '对用户隐藏此镜像',
            },
            placeholder: {
                name: '例如: Ubuntu 24.04 LTS',
                remoteAlias: '例如: ubuntu/noble/cloud',
                icon: '请选择图标',
            },
            hint: {
                remoteAlias: 'Incus 远程镜像别名，如 ubuntu/noble/cloud',
                sortOrder: '越小排序越靠前',
                instanceType: '指定该镜像适用于容器、虚拟机或两者皆可',
            },
            // 实例类型
            typeContainer: '容器',
            typeVm: '虚拟机',
            typeBoth: '通用',
            // 同步状态
            syncStatusDesc: '查看各镜像在节点上的同步状态，点击单元格可进行同步或删除操作',
            refresh: '刷新',
            addToLibraryFirst: '请先添加镜像到镜像库',
            noSystemImages: '暂无系统镜像',
            image: '镜像',
            statusReady: '已就绪',
            statusSyncing: '同步中',
            statusPending: '等待中',
            statusError: '错误',
            statusNotSynced: '未同步',
            retry: '重试',
            sync: '同步',
            confirmDeleteFromHost: '确定从该节点删除此镜像？',
            deletedFromHost: '镜像已从节点删除',
            imageInUse: '该镜像正在被 {count} 个实例使用，无法删除',
            syncStarted: '同步任务已启动',
            syncFailed: '同步失败',
            loadStatusFailed: '加载镜像状态失败',
            loadHostsFailed: '加载节点列表失败',
            // 表单
            imageName: '名称',
            osType: '系统类型',
            remoteAlias: '远程别名',
            imageDesc: '描述',
            sortOrder: '排序',
            activeStatus: '启用状态',
            selectHosts: '选择同步节点',
            imageAdded: '镜像已添加',
            imageCreated: '镜像已创建',
            imageUpdated: '镜像已更新',
            // 镜像表单弹窗
            selectDistro: '选择发行版',
            selectVersion: '选择版本',
            configureInfo: '配置信息',
            selectDistroHint: '选择要添加的 Linux 发行版',
            versionsCount: '{count} 个版本',
            imageVariant: '镜像变体',
            cloudVariantDesc: '云优化版，支持 cloud-init',
            defaultVariantDesc: '标准版本',
            displayName: '显示名称',
            descPlaceholder: '可选的备注信息...',
            enableImage: '启用此镜像',
            syncHosts: '同步节点',
            selectAll: '全选',
            deselectAll: '取消全选',
            editSyncHint: '取消选择的节点将在保存时从该节点删除镜像，新选择的节点将开始同步',
            createSyncHint: '选中的节点将在保存后开始同步镜像',
            // 同步弹窗
            selectTargetHosts: '选择目标节点',
            syncWarning: '镜像同步可能需要几分钟时间，具体取决于镜像大小和网络速度',
            startSync: '开始同步',
        },
        // 套餐管理
        packages: {
            title: '套餐管理',
            description: '配置实例规格模板',
            create: '创建套餐',
            noPackages: '暂无套餐',
            createFirst: '创建第一个套餐',
            noDesc: '无描述',
            enabled: '启用',
            disabled: '禁用',
            status: '状态',
            cpu: 'CPU',
            memory: '内存',
            disk: '硬盘',
            cores: '约 {n} 核',
            networkNat: 'NAT',
            networkIpv6: 'IPv6',
            networkDual: '双栈',
            nested: '嵌套虚拟化',
            privileged: '特权容器',
            allNodes: '全部节点',
            enable: '启用',
            disable: '禁用',
            edit: '编辑',
            delete: '删除',
            confirmDelete: '确定删除套餐 "{name}"？',
            packageDeleted: '套餐已删除',
            packageEnabled: '套餐已上架',
            packageDisabled: '套餐已下架',
            deleteFailed: '删除失败',
            operationFailed: '操作失败',
            // 表单
            createPackage: '创建套餐',
            editPackage: '编辑套餐',
            basicInfo: '基本信息',
            name: '名称',
            namePlaceholder: '入门版',
            descLabel: '描述',
            descPlaceholder: '适合轻量级应用',
            resourceLimits: '资源上限',
            maxCpuAllowance: '最大 CPU 额配',
            cpuAllowanceHint: '额配值 ÷ 100 ≈ 可用核心数，最小10，步长5',
            maxMemory: '最大内存 (MB)',
            maxDisk: '最大硬盘 (MB)',
            networkAndScheduling: '网络与调度',
            networkMode: '网络模式',
            allNodesNoLimit: '全部节点（不限制）',
            boundHosts: '绑定的宿主机',
            mustBindHost: '必须至少绑定一个宿主机',
            noHostsBound: '未绑定宿主机',
            noHostsAvailable: '暂无可用宿主机',
            advancedOptions: '高级选项',
            nestedLabel: '嵌套虚拟化',
            nestedHint: '允许在容器内运行 Docker/VM',
            privilegedLabel: '特权容器',
            privilegedHint: '授予更高系统权限（有安全风险）',
            enablePackage: '启用套餐',
            enablePackageHint: '禁用后用户无法选择此套餐',
            enterName: '请输入套餐名称',
            packageCreated: '套餐创建成功',
            packageUpdated: '套餐更新成功',
            trafficLimit: '月流量限额',
            trafficLimitPlaceholder: '留空表示无限制',
            trafficLimitHint: '单位 GB，留空表示无限制',
            syncTraffic: '同步流量限额',
            confirmSyncTraffic: '确定将所有套餐的流量限额同步到对应的实例吗？',
            syncTrafficSuccess: '已同步 {count} 个实例的流量限额',
            syncTrafficFailed: '同步失败',
            // 套餐列表
            traffic: '月流量限额',
            unlimited: '无限制',
            unlimitedPlaceholder: '留空表示无限制',
            active: '已启用',
            inactive: '已归档',
            archivedHint: '归档套餐不会显示在创建实例的套餐选择中',
            activeLabel: '启用',
            saveFailed: '保存失败',
            loadFailed: '加载套餐失败',
            instanceMaxLimit: '实例最大上限',
        },
        // 帮助管理
        helpManage: {
            title: '帮助文档管理',
            description: '创建和管理帮助文档',
            create: '新建文档',
            noArticles: '暂无文档',
            createFirst: '创建第一篇文档',
            edit: '编辑',
            delete: '删除',
            confirmDelete: '确定删除文档 "{title}"？',
            articleDeleted: '文档已删除',
            deleteFailed: '删除失败',
            // 标签页
            articlesTab: '文档',
            categoriesTab: '分类管理',
            // 分类
            addCategory: '添加分类',
            noCategories: '暂无分类，点击"添加分类"创建',
            categoryId: '分类 ID',
            categoryIdHint: '只能包含小写字母、数字和连字符',
            categoryName: '分类名称',
            categoryColor: '标识颜色',
            categoryAdded: '分类已添加',
            categoryUpdated: '分类已更新',
            categoryDeleted: '分类已删除',
            categoryInUse: '该分类下有文档，无法删除',
            confirmDeleteCategory: '确定删除分类 "{name}"？',
            duplicateCategoryId: '该分类ID已存在',
            invalidCategoryId: '分类ID只能包含小写字母、数字和连字符',
            fillCategoryIdAndName: '请填写分类ID和名称',
            // 文档表格
            articleTitleCol: '标题',
            categoryCol: '分类',
            statusCol: '状态',
            updatedAtCol: '更新时间',
            actionsCol: '操作',
            totalArticles: '共 {count} 篇文档',
            prevPage: '上一页',
            nextPage: '下一页',
            hide: '隐藏',
            publish: '发布',
            articleHidden: '文档已隐藏',
            articlePublished: '文档已发布',
            // 表单
            createArticle: '创建文档',
            editArticle: '编辑文档',
            articleTitle: '标题',
            titlePlaceholder: '文档标题',
            urlSlug: 'URL 标识符',
            urlSlugPlaceholder: 'getting-started',
            urlSlugHint: '只能包含小写字母、数字和连字符',
            category: '分类',
            sortOrder: '排序',
            content: '内容',
            contentMarkdown: '内容 (Markdown)',
            preview: '预览',
            activeStatus: '发布状态',
            published: '已发布',
            draft: '草稿',
            pinned: '已置顶',
            notPinned: '未置顶',
            articleCreated: '文档已创建',
            articleUpdated: '文档已更新',
            saveFailed: '保存失败',
            loadFailed: '加载失败',
            operationFailed: '操作失败',
            fillRequired: '请填写标题、URL 标识符和内容',
            invalidSlug: 'URL 标识符只能包含小写字母、数字和连字符',
            noTitle: '无标题',
            // Markdown 帮助
            showMarkdownHelp: '查看语法帮助',
            hideMarkdownHelp: '隐藏语法帮助',
            markdownHeading1: '一级标题',
            markdownHeading2: '二级标题',
            markdownBold: '粗体文本',
            markdownItalic: '斜体文本',
            markdownLink: '超链接',
            markdownImage: '图片',
            markdownUnorderedList: '无序列表',
            markdownOrderedList: '有序列表',
            markdownInlineCode: '行内代码',
            markdownCodeBlock: '代码块',
            markdownQuote: '引用块',
            markdownHr: '分隔线',
            customAlerts: '自定义提示框:',
            alertInfo: '信息提示',
            alertSuccess: '成功提示',
            alertWarning: '警告提示',
            alertDanger: '危险提示',
            alertNote: '备注提示',
        },
        // OAuth 配置
        oauth: {
            title: 'OAuth 配置',
            description: '配置第三方登录方式',
            noProviders: '暂无 OAuth 提供商',
            provider: '提供商',
            clientId: 'Client ID',
            clientSecret: 'Client Secret',
            enabled: '已启用',
            disabled: '已禁用',
            enable: '启用',
            disable: '禁用',
            edit: '编辑',
            save: '保存',
            saving: '保存中...',
            saveSuccess: '配置已保存',
            saveFailed: '保存失败',
            notConfigured: '尚未配置。请前往',
            developerConsole: '开发者控制台',
            createOAuthApp: '创建 OAuth 应用。',
            callbackUrl: '回调 URL (Callback URL)',
            usageGuide: '使用说明',
            step1: '1. 在对应平台的开发者控制台创建 OAuth 应用，获取 Client ID 和 Client Secret。',
            step2: '2. 将上方显示的回调 URL 填入 OAuth 应用配置中。',
            step3: '3. 在此页面填入 Client ID 和 Client Secret，并启用。',
            step4: '4. 用户可在个人设置中绑定 OAuth 账号，绑定后即可使用快捷登录。',
            warning: '注意：用户必须先注册账号并绑定，无法直接使用 OAuth 注册新账号。',
            configure: '配置',
            enterClientId: '输入 Client ID',
            enterClientSecret: '输入 Client Secret',
            leaveEmptyUnchanged: '(留空表示不更改)',
            enableLogin: '启用此登录方式',
            enableLoginHint: '启用后用户可使用此方式快捷登录',
        },
        // 支付渠道管理
        paymentProviders: {
            title: '支付渠道管理',
            description: '配置和管理支付渠道',
            add: '添加渠道',
            create: '添加渠道',
            noProviders: '暂无支付渠道',
            empty: '暂无配置支付渠道',
            createFirst: '添加第一个支付渠道',
            providerName: '渠道名称',
            providerType: '渠道类型',
            displayName: '显示名称',
            description_label: '描述',
            status: '状态',
            statusActive: '启用',
            statusDisabled: '禁用',
            statusTesting: '测试中',
            feeRate: '费率',
            feeFixed: '固定费用',
            minAmount: '最小金额',
            maxAmount: '最大金额',
            sortOrder: '排序',
            methods: '支付方式',
            paymentMethods: '支持的支付方式',
            configLabel: '配置',
            configPlaceholder: 'JSON 格式的渠道配置',
            edit: '编辑',
            delete: '删除',
            name: '名称',
            namePlaceholder: '输入渠道名称',
            nameRequired: '请输入渠道名称',
            type: '类型',
            notImplemented: '待实现',
            providerTypes: {
                yipay: '易支付',
                heleket: 'Heleket',
                stripe: 'Stripe',
                alipayDirect: '支付宝直连',
                wechatDirect: '微信直连',
                manual: '人工充值',
            },
            deleteConfirm: '确认删除',
            confirmDelete: '确定删除支付渠道 "{name}"？',
            deleteWarning: '确定删除支付渠道 "{name}"？此操作不可恢复。',
            createSuccess: '支付渠道创建成功',
            updateSuccess: '支付渠道更新成功',
            deleteSuccess: '支付渠道已删除',
            statusUpdated: '状态已更新',
            statusUpdateSuccess: '状态更新成功',
            statusUpdateFailed: '状态更新失败',
            saveFailed: '保存失败',
            createFailed: '创建支付渠道失败',
            updateFailed: '更新支付渠道失败',
            deleteFailed: '删除失败',
            loadFailed: '加载失败',
            createProvider: '添加支付渠道',
            editProvider: '编辑支付渠道',
            displayNamePlaceholder: '用户看到的名称',
            descPlaceholder: '可选的渠道描述',
            feeRateHint: '如 0.02 表示 2% 手续费',
            types: {
                alipay: '支付宝',
                wechat: '微信支付',
                stripe: 'Stripe',
                paypal: 'PayPal',
                usdt: 'USDT',
                manual: '人工充值',
            },
            config: {
                sdkVersion: 'SDK版本',
                apiurl: '支付接口地址',
                pid: '商户ID',
                key: '商户密钥',
                platformPublicKey: '平台公钥',
                merchantPrivateKey: '商户私钥',
                heleketMerchantUuid: 'Merchant UUID',
                heleketApiKey: 'API Key',
                heleketInvoiceCurrency: '发票法币币种',
                heleketLifetime: '发票有效期（秒）',
                heleketApiUrlHint: '默认使用 Heleket 官方接口地址，可按需切换到代理或私有网关。',
                heleketCurrencyHint: '创建 Heleket 发票时使用的法币币种，常用为 CNY。',
                heleketLifetimeHint: 'Heleket 发票有效期。默认 3600 秒，并会同步到本地订单过期时间。',
                yipayVersionV1: 'V1 (MD5签名) - 传统版本',
                yipayVersionV2: 'V2 (RSA签名) - 新版本',
                yipayVersionV1Hint: 'V1 版本使用 MD5 签名，适用于传统易支付平台。',
                yipayVersionV2Hint: 'V2 版本使用 RSA 签名，适用于新版彩虹易支付。',
                yipayApiUrlPlaceholder: '如: https://pay.example.com/',
                yipayApiUrlHint: '支付接口地址，以 / 结尾。',
                yipayPidPlaceholder: '商户ID',
                yipayKeyPlaceholder: '商户密钥',
                yipayKeyHint: '易支付平台提供的商户密钥（一串字符）。',
                platformPublicKeyPlaceholder: '平台公钥（RSA）',
                platformPublicKeyHint: '易支付平台提供的公钥，用于验证平台返回的签名。',
                merchantPrivateKeyPlaceholder: '商户私钥（RSA）',
                merchantPrivateKeyHint: '您生成的 RSA 私钥，用于对请求进行签名。',
                yipayMethodsHint: '选择该渠道支持的支付方式，至少选择一种。',
                yipayMethodFeeHint: '手续费按用户选择的支付方式加到应付金额中，充值本金仍按原金额入账。',
                yipayFeeFieldHint: '易支付手续费请在上方每个支付方式中设置。',
                heleketMethods: '常见币种展示',
                heleketMethodsPlaceholder: 'USDT@TRON\nUSDT@BSC\nBTC\nETH',
                heleketMethodsHint: '仅作为后台展示与记录参考，不会限制用户在 Heleket 支付页最终选择的币种和网络。',
                instructions: '充值说明',
                instructionsPlaceholder: '请输入用户充值时看到的说明信息...',
            },
        },
        // 计费管理（兼容旧键名 billingManage）
        billingManage: {
            title: '计费管理',
            description: '管理用户付费实例和计费记录',
            tabOverview: '概览',
            tabInstances: '付费实例',
            tabRecords: '扣费记录',
            // 概览
            totalIncome: '总收入',
            monthIncome: '本月收入',
            todayIncome: '今日收入',
            totalRefund: '总退款',
            paidInstances: '付费实例数',
            activeInstances: '活跃实例',
            // 实例列表
            searchPlaceholder: '搜索实例...',
            instanceId: '实例ID',
            instanceName: '名称',
            user: '用户',
            plan: '方案',
            expiresAt: '到期时间',
            status: '状态',
            actions: '操作',
            noInstances: '暂无付费实例',
            suspend: '封停',
            unsuspend: '解封',
            extend: '延期',
            refund: '退款',
            confirmSuspend: '确定封停实例 "{name}"？',
            confirmUnsuspend: '确定解封实例 "{name}"？',
            suspendSuccess: '实例已封停',
            unsuspendSuccess: '实例已解封',
            // 延期
            extendTitle: '延期实例',
            extendDays: '延期天数',
            extendReason: '延期原因',
            freeExtend: '免费延期',
            freeExtendHint: '勾选后不扣除用户余额',
            extendSuccess: '实例已延期',
            extendFailed: '延期失败',
            // 退款
            refundTitle: '退款实例',
            refundAmount: '退款金额',
            refundReason: '退款原因',
            refundSuccess: '退款成功',
            refundFailed: '退款失败',
            // 扣费记录
            recordId: '记录ID',
            recordType: '类型',
            amount: '金额',
            period: '账期',
            remark: '备注',
            createdAt: '时间',
            noRecords: '暂无扣费记录',
            // 用户余额
            userBalance: '用户余额',
            adjustBalance: '调整余额',
            giftBalance: '赠送余额',
            adjustTitle: '调整用户余额',
            giftTitle: '赠送余额',
            adjustAmount: '调整金额',
            giftAmount: '赠送金额',
            adjustRemark: '调整原因',
            giftRemark: '赠送备注',
            adjustHint: '正数表示增加，负数表示扣除',
            adjustSuccess: '余额调整成功',
            giftSuccess: '余额赠送成功',
            operationFailed: '操作失败',
        },
        // 计费管理（新键名 billing，与组件对应）
        billing: {
            title: '计费管理',
            description: '管理用户付费实例和计费记录',
            loadFailed: '加载计费数据失败',
            loadInstancesFailed: '加载实例列表失败',
            loadRecordsFailed: '加载扣费记录失败',
            // Tab 页签
            tabs: {
                overview: '概览',
                instances: '付费实例',
                records: '扣费记录',
                rechargeRecords: '充值记录',
                affConversions: 'AFF 转化',
                paymentProviders: '支付渠道',
            },
            // 概览统计
            totalRevenue: '总收入',
            thisMonthRevenue: '本月收入',
            todayRevenue: '今日收入',
            totalRefunds: '总退款',
            paidInstances: '付费实例数',
            activeInstances: '活跃实例',
            suspendedInstances: '已封停实例',
            expiringInstances: '即将到期',
            netRevenueLabel: '净收入',
            thisMonthVsLastMonth: '本月 / 上月',
            hostedRevenueShare: '托管收入占比',
            revenueBreakdownTitle: '收入结构',
            directRevenue: '自营收入',
            hostedRevenue: '托管收入',
            instanceHealthTitle: '实例状态',
            affOverviewTitle: 'AFF返利',
            rechargeLabel: '充值',
            revenueLabel: '收入',
            overviewPeriods: {
                total: '总览',
                thisMonth: '本月',
                today: '今日',
            },
            // 实例列表
            allStatus: '全部状态',
            allHosts: '全部节点',
            showExpiring: '仅显示即将到期',
            showDateColumns: '显示日期列',
            searchPlaceholder: '搜索用户名/节点/实例名/方案/套餐...',
            user: '用户',
            host: '节点',
            plan: '方案',
            package: '套餐',
            price: '价格',
            expiresAt: '到期时间',
            purchaseDate: '购买日期',
            remainingDays: '剩余天数',
            expired: '已过期',
            days: '天',
            instanceType: '实例类型',
            instanceName: '实例名',
            instanceStatus: '状态',
            noInstances: '暂无付费实例',
            viewInstance: '查看',
            autoRenew: '自动续费',
            // 托管类型
            hostingType: '托管类型',
            direct: '直营',
            hosted: '托管',
            cycle: '周期',
            cycleMonths: '{months}个月',
            perPage: '每页',
            totalCount: '共 {count} 条',
            // 操作
            suspend: '封停',
            unsuspend: '解封',
            extend: '延期',
            refund: '退款',
            deleteRefund: '删除并退款',
            // 操作弹窗
            suspendTitle: '封停实例',
            unsuspendTitle: '解封实例',
            extendTitle: '延期实例',
            refundTitle: '退款',
            deleteRefundTitle: '删除并退款',
            targetInstance: '目标实例',
            reason: '原因',
            reasonPlaceholder: '请输入原因...',
            extendDays: '延期天数',
            freeExtend: '免费延期（不扣余额）',
            refundAmount: '退款金额',
            refundReasonPlaceholder: '请输入退款原因...',
            refundReasonRequired: '请填写退款原因',
            // 删除并退款相关
            deleteRefundWarning: '警告：此操作将永久删除实例及其所有数据（快照、备份、端口映射等），此操作不可撤销！',
            refundTypeLabel: '退款方式',
            refundTypeRemaining: '按剩余价值退款（根据剩余天数计算）',
            refundTypeFull: '全额退款（退还所有已消费金额）',
            deleteRefundReasonPlaceholder: '请输入删除原因...',
            deleteRefundReasonRequired: '请填写删除原因',
            deleteRefundSuccess: '实例已删除并退款',
            databaseOnlyDelete: '仅数据库删除',
            deleteRefundDatabaseOnlySuccess: '实例已从数据库删除',
            // 应用折扣相关
            applyDiscount: '应用折扣',
            applyDiscountTitle: '应用续费折扣',
            applyDiscountHint: '输入AFF优惠码后，该实例后续续费时将自动享受5%折扣，同时优惠码创建者也将获得续费返利。',
            affCodeLabel: 'AFF优惠码',
            affCodePlaceholder: '请输入AFF优惠码...',
            affCodeRequired: '请输入AFF优惠码',
            applyDiscountSuccess: '已成功应用续费折扣',
            // 修改价格相关
            updatePrice: '修改价格',
            owner: '所有者',
            currentPrice: '当前价格',
            newPrice: '新价格',
            enterNewPrice: '请输入新价格',
            priceHint: '此价格为单周期价格，修改后将影响续费费用',
            settleBalance: '结算差价（根据剩余天数补交/退还）',
            needPay: '需补交',
            willRefund: '将退还',
            priceDiffHint: '根据剩余 {days} 天计算，将自动处理用户余额',
            noSettleHint: '不结算差价，仅修改后续续费价格，不影响当前周期余额',
            affDiscount: 'AFF折扣',
            actualRenewPrice: '实际续费价',
            affAppliedHint: '该实例已应用优惠码，续费时享受 {discount}% 折扣。差价计算已基于折扣后价格。',
            newActualPrice: '新实际续费价',
            // 切换方案相关
            upgradePlan: '切换',
            upgradePlanTitle: '切换方案',
            currentPlan: '当前方案',
            planName: '方案名称',
            monthlyPrice: '月均价',
            memoryLabel: '内存',
            diskLabel: '磁盘',
            selectNewPlan: '选择新方案',
            noAvailablePlans: '没有可升级的方案（新方案月均价需高于当前方案）',
            priceDifference: '补差价',
            priceDifferenceHint: '根据剩余天数计算，将从用户余额中扣除',
            userBalance: '用户余额',
            insufficientBalance: '用户余额不足，无法完成升级',
            confirmUpgrade: '确认升级',
            monthly: '月付',
            quarterly: '季付',
            semiAnnual: '半年付',
            yearly: '年付',
            month: '月',
            months: '个月',
            // 操作结果
            suspendSuccess: '实例已封停',
            unsuspendSuccess: '实例已解封',
            extendSuccess: '实例已延期',
            refundSuccess: '退款成功',
            batchUpdatePrice: '批量修改价格',
            batchSelectedCount: '已选择 {count} 个实例',
            selectAllCurrentPage: '选择当前页实例',
            selectInstance: '选择实例',
            batchPriceNoSelection: '请先选择实例',
            batchSelected: '已选实例',
            batchPreviewChanged: '将更新',
            batchPreviewFailed: '失败项',
            batchPriceHint: '批量使用同一个单周期价格；预览会按每个实例的周期、剩余天数和AFF折扣分别计算。',
            batchTotalCharge: '合计补交',
            batchTotalRefund: '合计退还',
            batchNetAmount: '净影响',
            batchPreviewBlocked: '当前预览包含失败项或用户余额不足，不能提交。',
            batchUserImpact: '用户余额影响',
            batchPreviewDetails: '预览明细',
            batchPreviewWaiting: '输入价格后将自动生成预览。',
            batchPriceStatusReady: '可更新',
            batchPriceStatusUnchanged: '无变化',
            batchPriceStatusFailed: '失败',
            result: '结果',
            // 扣费记录
            recordType: '类型',
            recordTypes: {
                newPurchase: '新购',
                renew: '续费',
                upgrade: '升级',
                downgrade: '降级',
                refund: '退款',
                transfer_fee: '转移手续费',
            },
            amount: '金额',
            instance: '实例',
            remark: '备注',
            time: '时间',
            noRecords: '暂无扣费记录',
            // 充值统计
            totalRecharge: '总充值',
            thisMonthRecharge: '本月充值',
            todayRecharge: '今日充值',
            orders: '笔',
            // AFF 返利统计
            totalAffCommission: 'AFF返利总额',
            thisMonthAff: '本月AFF返利',
            affConverted: '已转化金额',
            affPendingConvert: '待审批转化',
            // 充值记录
            loadRechargeRecordsFailed: '加载充值记录失败',
            noRechargeRecords: '暂无充值记录',
            rechargeOrderNo: '订单号',
            creditAmount: '到账金额',
            actualAmount: '实际到账',
            estimatedAmount: '预计到账',
            payChannel: '支付渠道',
            paymentDetails: '支付详情',
            paymentUuid: 'UUID:',
            paymentTxid: 'TxID:',
            rechargeStatusLabel: '状态',
            tradeNo: '第三方单号',
            sync: '同步',
            syncSuccess: '同步成功，充值已到账',
            rechargeStatus: {
                pending: '待支付',
                completed: '已完成',
                cancelled: '已取消',
                failed: '失败',
            },
        },
    },

    // 错误页面
    error: {
        notFound: '页面不存在',
        notFoundDesc: '抱歉，您访问的页面不存在',
        backHome: '返回首页',
        serverError: '服务器错误',
        networkError: '网络错误',
    },

    // 日志页面
    logs: {
        title: '系统日志',
        module: '模块',
        allModules: '全部模块',
        search: '搜索',
        searchPlaceholder: '搜索用户名、操作或内容...',
        reset: '重置',
        time: '时间',
        user: '用户',
        action: '操作',
        content: '内容',
        result: '结果',
        system: '系统',
        loading: '加载中...',
        noLogs: '暂无日志记录',
        loadFailed: '加载日志失败',
        loadModulesFailed: '加载模块列表失败',
        totalRecords: '共 {total} 条记录，第 {page} / {totalPages} 页',
        success: '成功',
        failed: '失败',
        expand: '展开',
        collapse: '收起',
    },

    // 帮助页面
    help: {
        title: '帮助中心',
        search: '搜索帮助文档...',
        description: '查看使用指南和常见问题',
        backToHelp: '返回帮助中心',
        updatedAt: '更新于 {date}',
        all: '全部',
        noArticles: '暂无帮助文档',
        articleNotFound: '文档不存在或已被删除',
        totalArticles: '共 {count} 篇文档',
        categories: {
            general: '常规',
            gettingStarted: '快速开始',
            instances: '实例管理',
            networking: '网络配置',
            billing: '计费相关',
            faq: '常见问题',
        },
    },

    // 日志模块翻译
    logModules: {
        security: '安全事件',
        instance: '实例操作',
        snapshot: '快照操作',
        backup: '备份操作',
        image: '镜像操作',
        host: '节点操作',
        package: '套餐操作',
        user: '用户管理',
        personal: '个人设置',
        ssh_key: 'SSH 密钥',
        notification: '通知设置',
        system: '系统配置',
        auth: '认证操作',
        storage: '远程存储',
        // 兼容旧数据中的中文模块名
        '登录操作': '登录操作',
        '安全事件': '安全事件',
        '实例操作': '实例操作',
        '快照操作': '快照操作',
        '备份操作': '备份操作',
        '镜像操作': '镜像操作',
        '节点操作': '节点操作',
        '节点组操作': '节点组操作',
        '套餐操作': '套餐操作',
        '用户管理': '用户管理',
        '个人设置': '个人设置',
        '通知设置': '通知设置',
        '系统配置': '系统配置',
        '认证操作': '认证操作',
        '远程存储': '远程存储',
    },

    // 日志操作翻译
    logActions: {
        // 安全事件
        'login_success': '登录成功',
        'login_failed': '登录失败',
        'logout': '登出',
        'register_success': '注册成功',
        'rate_limit_exceeded': '登录尝试过多',
        'invalid_invite_code': '无效邀请码',
        'suspicious_activity': '可疑活动',
        'permission_denied': '权限不足',
        'unauthorized_access': '未授权访问',
        'admin_action': '管理员操作',
        // 实例操作
        'instance.create': '创建实例',
        'instance.delete': '删除实例',
        'instance.start': '启动实例',
        'instance.stop': '停止实例',
        'instance.restart': '重启实例',
        'instance.rebuild': '重装系统',
        'instance.recreate': '重建实例',
        'instance.change_host': '改节点',
        'instance.cloud_init_manual_complete': '手动完成初始化检测',
        'instance.update_quota': '更新实例配额',
        'instance.rename': '重命名实例',
        // 端口映射
        'port.add': '添加端口映射',
        'port.delete': '删除端口映射',
        // 快照操作
        'snapshot.create': '创建快照',
        'snapshot.delete': '删除快照',
        'snapshot.restore': '恢复快照',
        // 备份操作
        'backup.create': '创建备份',
        'backup.delete': '删除备份',
        'backup.export': '导出备份',
        // 镜像操作
        'image.sync': '同步镜像',
        'image.delete': '删除镜像',
        'image.create': '创建镜像',
        'image.update': '更新镜像',
        // 节点操作
        'host.create': '添加节点',
        'host.update': '更新节点',
        'host.delete': '删除节点',
        'host.test': '测试节点',
        // 节点组操作
        // 套餐操作
        'package.create': '创建套餐',
        'package.update': '更新套餐',
        'package.delete': '删除套餐',
        // 用户管理
        'user.ban': '封禁用户',
        'user.unban': '解封用户',
        'user.delete': '删除用户',
        'user.update_quota': '更新用户配额',
        'user.revoke_sessions': '撤销用户会话',
        // 个人设置
        'profile.update': '更新个人信息',
        'password.change': '修改密码',
        // SSH 密钥
        'ssh_key.add': '添加 SSH 密钥',
        'ssh_key.delete': '删除 SSH 密钥',
        // 通知设置
        'notification.add': '添加通知渠道',
        'notification.delete': '删除通知渠道',
        // 安全设置
        '2fa.setup': '设置双因素认证',
        '2fa.enable': '启用双因素认证',
        '2fa.disable': '禁用双因素认证',
        '2fa.recovery_reset': '重置恢复码',
        // 认证操作
        'session.revoke': '撤销会话',
        'session.revoke_all': '撤销所有会话',
        // 系统配置
        'system.config_update': '更新系统配置',
        // 帮助文档
        'help.create': '创建帮助文档',
        'help.update': '更新帮助文档',
        'help.delete': '删除帮助文档',
        // 备份上传操作
        'backup.upload': '上传备份',
        'backup.upload.queue': '备份上传排队',
        'backup.upload.cancel': '取消备份上传',
        // 备份恢复操作
        'backup.restore': '恢复备份',
        'backup.restore.rollback': '回滚恢复',
        'backup.restore.cancel': '取消恢复',
        // 存储配置操作
        'storage.create': '创建存储配置',
        'storage.update': '更新存储配置',
        'storage.delete': '删除存储配置',
        // AFF 推荐计划
        'aff.create_code': '创建优惠码',
        'aff.convert_request': '申请 AFF 转化',
        'aff.approve_convert': '审核通过 AFF 转化',
        'aff.reject_convert': '审核拒绝 AFF 转化',
    },

    // 日志结果翻译
    logResults: {
        success: '成功',
        failed: '失败',
        warning: '警告',
    },

    // API 错误码翻译
    errors: {
        // 通用错误
        INVALID_ID: '无效的 ID',
        NOT_FOUND: '资源不存在',
        UNAUTHORIZED: '未授权',
        FORBIDDEN: '无权访问',
        ADMIN_REQUIRED: '需要管理员权限',
        // 用户错误
        USER_NOT_FOUND: '用户不存在',
        USER_EXISTS: '用户名已存在',
        CANNOT_MODIFY_SELF: '不能修改自己的状态',
        CANNOT_DELETE_SELF: '不能删除自己',
        CANNOT_BAN_ADMIN: '不能封禁管理员账户',
        CANNOT_DELETE_ADMIN: '不能删除管理员账户',
        USER_HAS_INSTANCES: '该用户还有实例，请先删除实例',
        // 认证错误
        INVALID_CREDENTIALS: '用户名或密码错误',
        ACCOUNT_BANNED: '账户已被禁用',
        TOO_MANY_ATTEMPTS: '登录尝试次数过多，请稍后再试',
        REGISTRATION_DISABLED: '当前已关闭注册',
        INVALID_INVITE_CODE: '邀请码无效或已使用',
        INVITE_CODE_EXPIRED: '邀请码已过期',
        INVALID_2FA_CODE: '验证码或恢复码错误',
        TWO_FA_REQUIRED: '请输入双因素认证码',
        TWO_FA_ALREADY_ENABLED: '2FA 已启用，请先禁用后再重新设置',
        TWO_FA_NOT_ENABLED: '2FA 未启用',
        REFRESH_TOKEN_MISSING: '缺少刷新令牌',
        REFRESH_TOKEN_INVALID: '刷新令牌无效或已过期',
        SESSION_NOT_FOUND: '会话不存在',
        // 验证错误
        INVALID_EMAIL: '请输入有效的邮箱地址',
        EMAIL_CONTAINS_ILLEGAL: '邮箱包含非法字符',
        USERNAME_CONTAINS_ILLEGAL: '用户名包含非法字符',
        PASSWORD_TOO_WEAK: '密码强度不足',
        INVALID_SSH_KEY: '无效的 SSH 公钥格式',
        SSH_KEY_EXISTS: '该公钥已添加',
        INVALID_NAME: '名称格式不正确',
        // 实例错误
        INSTANCE_NOT_FOUND: '实例不存在',
        INSTANCE_ALREADY_RUNNING: '实例已在运行',
        INSTANCE_ALREADY_STOPPED: '实例已停止',
        INSTANCE_STATUS_INVALID: '实例状态不允许此操作',
        INSTANCE_SUSPENDED: '实例已被封停，无法执行此操作',
        INSTANCE_NOT_SUSPENDED: '实例未处于封停状态',
        INSTANCE_SUSPENDED_EXPIRED: '实例因到期被封停，请续费后解封',
        INSTANCE_DESTROY_TRAFFIC_LIMIT_EXCEEDED: '当前月流量周期无法销毁，已用流量达到或超过 5G',
        // 节点错误
        HOST_NOT_FOUND: '宿主机不存在',
        HOST_OFFLINE: '宿主机离线',
        HOST_HAS_INSTANCES: '宿主机上有实例，请先删除',
        HOST_ALREADY_OFFICIAL: '该节点已经是自营节点',
        HOST_TAKEOVER_PACKAGE_BINDING_CONFLICT: '接管失败，部分套餐会失去全部绑定节点',
        NO_AVAILABLE_HOSTS: '没有可用的节点',
        // 镜像错误
        IMAGE_NOT_FOUND: '镜像不存在',
        IMAGE_SYNCED_ON_HOSTS: '镜像已在节点上同步，请先从节点删除',
        IMAGE_TYPE_MISMATCH: '所选镜像与套餐实例类型不兼容',
        // 套餐错误
        PACKAGE_NOT_FOUND: '套餐不存在',
        PACKAGE_IN_USE: '套餐正在被实例使用',
        // 配额错误
        QUOTA_EXCEEDED: '配额不足',
        QUOTA_CPU_EXCEEDED: 'CPU 配额不足',
        QUOTA_MEMORY_EXCEEDED: '内存配额不足',
        QUOTA_DISK_EXCEEDED: '磁盘配额不足',
        QUOTA_INSTANCE_EXCEEDED: '实例数量已达上限',
        QUOTA_PORT_EXCEEDED: '端口配额不足',
        QUOTA_SNAPSHOT_EXCEEDED: '快照配额不足',
        QUOTA_BACKUP_EXCEEDED: '备份配额不足',
        QUOTA_NOT_ALLOCATED: '请先分配配额',
        // 快照错误
        SNAPSHOT_NOT_FOUND: '快照不存在',
        SNAPSHOT_RESTORE_REQUIRES_STOP: '请先停止实例再恢复快照',
        // 备份错误
        BACKUP_NOT_FOUND: '备份不存在',
        BACKUP_NOT_READY: '备份尚未就绪，无法导出',
        EXPORT_TASK_NOT_FOUND: '导出任务不存在或已过期',
        EXPORT_TASK_EXPIRED: '导出任务已过期',
        // 端口映射错误
        PORT_IN_USE: '该端口已被使用',
        PORT_OUT_OF_RANGE: '端口超出允许范围',
        PORT_MAPPING_NOT_FOUND: '端口映射不存在',
        // 节点组错误
        NODE_GROUP_NOT_FOUND: '节点组不存在',
        NODE_GROUP_HAS_HOSTS: '节点组下有宿主机，请先移除',
        NODE_GROUP_HAS_PACKAGES: '节点组被套餐使用中',
        // 通知错误
        NOTIFICATION_CHANNEL_NOT_FOUND: '通知渠道不存在',
        // 帮助错误
        ARTICLE_NOT_FOUND: '文档不存在',
        SLUG_EXISTS: 'Slug 已存在',
        // 邀请码错误
        INVITE_CODE_USED: '邀请码已被使用',
        INVITE_CODE_NOT_FOUND: '邀请码不存在',
        // OAuth 错误
        OAUTH_PROVIDER_DISABLED: '该登录方式已被禁用',
        OAUTH_ALREADY_BOUND: '该账号已被其他用户绑定',
        OAUTH_NOT_BOUND: '账号未绑定',
        OAUTH_TOKEN_ERROR: '获取授权失败',
        // SSH 密钥错误
        SSH_KEY_NOT_FOUND: 'SSH 密钥不存在',
        SSH_KEY_REQUIRED: '必须选择一个 SSH 密钥，请先在个人设置中添加',
        SSH_KEY_NOT_OWNED: 'SSH 密钥不存在或不属于该用户',
        // 套餐错误（补充）
        PACKAGE_UNAVAILABLE: '套餐不可用或已下架',
        CANNOT_CREATE_OWN_PAID_PACKAGE: '不能使用自己的付费套餐创建实例',
        // 节点资源错误
        HOST_UNAVAILABLE: '选择的宿主机不可用或资源不足',
        HOST_NO_ONLINE: '没有在线的宿主机，请先在节点管理中测试连接',
        HOST_RESOURCES_NOT_SYNCED: '宿主机资源信息未同步，请在节点管理中点击"测试连接"',
        HOST_NODE_GROUP_NO_HOSTS: '套餐要求的节点组中没有可用节点',
        HOST_RESOURCES_INSUFFICIENT: '所有宿主机资源不足，请稍后再试或选择其他套餐',
        HOST_NAME_EXISTS: '宿主机名称已存在',
        HOST_ADDRESS_EXISTS: '宿主机连接地址已存在',
        HOST_ADDRESS_UNRESOLVABLE: '面板当前无法解析该宿主机连接地址',
        HOST_CERT_NOT_CONFIGURED: '请先配置证书路径',
        HOST_INVALID_CPU_MAX: 'CPU 最大额配不能为负数',
        HOST_INVALID_MEMORY_MAX: '内存最大值不能为负数或低于 256MB',
        HOST_INVALID_IPV6_MODE: 'IPv6 模式必须是 1(路由)、2(NAT) 或 3(禁用)',
        HOST_IPV6_ROUTE_REQUIRES_CONFIG: 'IPv6 路由模式需要提供子网和父接口',
        HOST_CPU_BELOW_USED: 'CPU 最大额配不能低于实例已使用的资源',
        HOST_MEMORY_BELOW_USED: '内存最大值不能低于实例已使用的资源',
        // 实例操作错误
        INSTANCE_STOP_REQUIRED: '请先停止实例',
        INSTANCE_IMAGE_REQUIRED: '请指定镜像',
        INSTANCE_IMAGE_UNAVAILABLE: '选择的镜像在当前节点不可用',
        INSTANCE_REBUILD_FAILED: '重装系统失败',
        INSTANCE_IPV6_NOT_SUPPORTED: '只有 NAT + IPv6 模式的实例才能重新分配 IPv6',
        INSTANCE_IPV6_REASSIGN_FAILED: '重新分配 IPv6 地址失败',
        INSTANCE_NO_IPV4: '虚拟机实例需要分配 IPv4 地址才能添加端口映射',
        HOST_NO_IPV6_SUBNET: '宿主机未配置 IPv6 子网',
        IPV6_POOL_EXHAUSTED: 'IPv6 地址池已耗尽，请稍后重试',
        IPV6_REASSIGN_COOLDOWN: '每实例每天只能重新分配一次 IPv6，请稍后再试',
        // 端口映射错误（补充）
        PORT_MAPPING_NAT_ONLY: '仅 NAT 和双栈模式支持端口映射',
        PORT_NO_AVAILABLE: '没有可用端口，请联系管理员',
        PORT_CONFLICT: '端口已被占用，请使用其他端口',
        PORT_MAPPING_INVALID_ID: '无效的实例或端口映射 ID',
        // 镜像错误（补充）
        IMAGE_CREATE_FAILED: '镜像创建失败',
        IMAGE_UPDATE_FAILED: '镜像更新失败',
        IMAGE_INVALID_HOST_ID: '无效的镜像或节点 ID',
        // 备份错误（补充）
        BACKUP_CREATE_FAILED: '创建备份失败',
        BACKUP_DELETE_FAILED: '删除备份失败',
        BACKUP_EXPORT_FAILED: '导出备份失败',
        BACKUP_QUOTA_NOT_SET: '请先为该实例设置备份配额',
        BACKUP_EXPORT_STATUS_INVALID: '导出任务状态异常',
        // 配置错误
        CONFIG_INVALID_KEY: '无效的配置键',
        CONFIG_INVALID_VALUE: '配置值必须是非负整数',
        // 快照错误（补充）
        SNAPSHOT_QUOTA_NOT_SET: '请先为该实例设置快照配额',
        // 套餐错误（补充）
        PACKAGE_HAS_INSTANCES: '该套餐正在被实例使用，无法删除',
        // 资源限制错误
        RESOURCE_CPU_EXCEEDS_PACKAGE: 'CPU 配置超出套餐限制',
        RESOURCE_MEMORY_EXCEEDS_PACKAGE: '内存配置超出套餐限制',
        RESOURCE_DISK_EXCEEDS_PACKAGE: '磁盘配置超出套餐限制',
        // 用户配额错误（详细）
        QUOTA_CPU_INSUFFICIENT: 'CPU 配额不足',
        QUOTA_MEMORY_INSUFFICIENT: '内存配额不足',
        QUOTA_DISK_INSUFFICIENT: '磁盘配额不足',
        QUOTA_INSTANCE_LIMIT_REACHED: '实例数量已达上限',
        QUOTA_HOST_LIMIT_REACHED: '宿主机数量已达上限',
        QUOTA_FRIEND_LIMIT_REACHED: '您的好友数量已达上限',
        QUOTA_PORT_BELOW_USED: '端口配额不能小于当前已使用量',
        QUOTA_SNAPSHOT_BELOW_USED: '快照配额不能小于当前已使用量',
        QUOTA_BACKUP_BELOW_USED: '备份配额不能小于当前已使用量',
        QUOTA_PORT_TOTAL_EXCEEDED: '端口配额超出用户总配额',
        QUOTA_SNAPSHOT_TOTAL_EXCEEDED: '快照配额超出用户总配额',
        QUOTA_BACKUP_TOTAL_EXCEEDED: '备份配额超出用户总配额',
        // 镜像错误（补充）
        IMAGE_NOT_SYNCED: '镜像尚未同步到所选宿主机',
        IMAGE_SYNCING_CANNOT_DELETE: '镜像正在同步中，无法删除',
        IMAGE_NO_HOSTS: '没有可用的节点，请先添加节点',
        // 端口错误（补充）
        PORT_RANGE_INVALID: '端口必须在允许范围内',
        // 快照策略错误
        SNAPSHOT_MANUAL_FULL: '手动快照已达实例配额，无法启用自动快照',
        SNAPSHOT_RETENTION_EXCEEDS: '保留数量超出可用配额',
        // 备份策略错误
        BACKUP_MANUAL_FULL: '手动备份已达实例配额，无法启用自动备份',
        BACKUP_RETENTION_EXCEEDS: '保留数量超出可用配额',
        // OAuth 错误（补充）
        OAUTH_NOT_ENABLED: '该登录方式未启用',
        // 存储池错误
        STORAGE_POOL_NOT_CONFIGURED: '宿主机未配置系统盘存储池，无法创建实例',
        // 好友系统错误
        CANNOT_ADD_SELF: '不能添加自己为好友',
        ALREADY_FRIENDS: '你们已经是好友了',
        FRIEND_REQUEST_PENDING: '好友请求已在待处理中',
        FRIEND_REQUEST_NOT_FOUND: '好友请求不存在',
        FRIEND_REQUEST_NOT_PENDING: '该请求已被处理',
        FRIENDSHIP_NOT_FOUND: '好友关系不存在',
        TARGET_FRIEND_QUOTA_FULL: '对方好友数量已达上限，无法添加',
        // 套餐共享错误
        CANNOT_SHARE_TO_SELF: '不能共享给自己',
        PACKAGE_ALREADY_SHARED: '套餐已共享给该用户',
        SHARE_NOT_FOUND: '共享记录不存在',
        NOT_FRIENDS: '对方不是您的好友',
        SHARE_QUOTA_CPU_EXCEEDED: '共享套餐 CPU 配额已用完',
        SHARE_QUOTA_MEMORY_EXCEEDED: '共享套餐内存配额已用完',
        SHARE_QUOTA_INSTANCES_EXCEEDED: '共享套餐实例数量已达上限',
        // Email verification errors
        EMAIL_VERIFICATION_DISABLED: '邮箱验证功能未启用',
        EMAIL_CODE_REQUIRED: '请输入邮箱验证码',
        INVALID_EMAIL_CODE: '验证码无效或已过期',
        TOO_MANY_VERIFICATION_REQUESTS: '验证码请求过于频繁，请稍后再试',
        EMAIL_SEND_FAILED: '验证邮件发送失败，请稍后再试',
        EMAIL_ALREADY_REGISTERED: '该邮箱地址已被使用',
        EMAIL_DOMAIN_NOT_ALLOWED: '该邮箱域名不允许注册，请使用其他邮箱',
        // 转移错误
        TRANSFER_NOT_FOUND: '转移请求不存在',
        TRANSFER_TO_SELF: '不能转移给自己',
        TRANSFER_TO_BANNED: '不能转移给被封禁的用户',
        TRANSFER_ALREADY_PENDING: '该实例已有待处理的转移请求',
        TRANSFER_NOT_PENDING: '转移请求不在等待状态',
        TRANSFER_INVALID_STATUS: '实例状态不允许转移',
        TRANSFER_QUOTA_NOT_FOUND: '接收方配额信息不存在',
        TRANSFER_QUOTA_INSUFFICIENT: '接收方配额不足',
        TRANSFER_INSTANCE_LOCKED: '实例正在转移中，暂时无法操作',
        TRANSFER_HOST_DISABLED: '该节点已禁止转移操作',
        TRANSFER_INSUFFICIENT_BALANCE: '余额不足，无法支付转移手续费',
        // 转移过程错误
        INSTANCE_MUST_BE_STOPPED: '实例必须在转移前停止',
        INCUS_RENAME_FAILED: '在宿主机上重命名实例失败',
        DATABASE_ERROR: '数据库操作失败，请重试',
        // 敏感操作二次验证错误
        VERIFICATION_REQUIRED: '此操作需要二次验证',
        INVALID_CODE: '验证码无效或已过期',
        NO_NOTIFICATION_CHANNEL: '未绑定通知渠道，无需二次验证',
        EMAIL_NOT_CONFIGURED: '未配置邮箱，无法发送验证码',
        SEND_FAILED: '验证码发送失败',
        // 签到错误
        CHECKIN_NO_INSTANCE: '您需要至少拥有一个实例才能签到',
        CHECKIN_ALREADY_TODAY: '今日已签到',
        REDEEM_ALREADY_TODAY: '今日已兑换过兑换码',
        REDEEM_CODE_NOT_FOUND: '兑换码不存在',
        REDEEM_CODE_USED: '兑换码已被使用',
        REDEEM_CODE_EXPIRED: '兑换码已过期',
        REDEEM_CODE_SELF_ONLY: '此兑换码只能由所有者自己使用',
        REDEEM_CODE_DISABLED: '此兑换码已被禁用',
        REDEEM_CODE_INVALID_FORMAT: '兑换码格式错误，仅支持 h- 开头的系统兑换码',
        REDEEM_CODE_EXHAUSTED: '此兑换码已达到最大使用次数',
        REDEEM_CODE_ALREADY_USED_BY_USER: '您已使用过此兑换码',
        REDEEM_CODE_HOST_MISMATCH: '此兑换码只能用于同一节点的实例',
        REDEEM_CODE_BATCH_LIMIT: '您已使用过该批次的其他兑换码',
        REDEEM_EXCEEDS_PACKAGE_QUOTA: '兑换后将超出实例套餐配额限制',
        REDEEM_ALREADY_AT_LIMIT: '实例资源已达到套餐上限',
        CHECKIN_CODE_PAID_INSTANCE: '签到兑换码只能用于免费实例',
        PAID_INSTANCE_DELETION_NOT_ALLOWED: '付费实例不允许删除',
        // 余额错误
        INSUFFICIENT_BALANCE: '余额不足，请先充值',
        INTERNAL_ERROR: '服务器内部错误',
    },

    // 流量统计
    traffic: {
        title: '流量统计',
        monthlyUsage: '本月流量',
        used: '已使用',
        unlimited: '无限制',
        total: '总计',
        history30Days: '近 30 天流量',
        historyPeriod: '周期流量',
        noData: '暂无流量数据',
        noHistoryData: '暂无历史数据',
        throttledHint: '已限速至 1Mbps',
        resetHint: '每月 1 号重置流量',
        periodResetHint: '每月 {date} 号重置流量',
        status: {
            normal: '正常',
            warning: '预警',
            limited: '已限速',
        },
        download: '下载',
        upload: '上传',
        limit: '限额',
        extraQuota: '额外配额',
        resetDate: '重置日期',
        nextReset: '下次重置',
    },

    // 实例转移
    transfer: {
        title: '实例转移',
        sentTab: '转移记录',
        receivedTab: '接收记录',
        pendingCount: '待处理',
        noTransfers: '暂无转移记录',
        noPendingTransfers: '暂无待接收的转移',
        searchPlaceholder: '搜索实例名称、接收方用户名或备注...',
        // 状态
        status: {
            pending: '等待接收',
            processing: '处理中',
            accepted: '已接收',
            rejected: '已拒绝',
            cancelled: '已取消',
        },
        // 操作
        actions: {
            transfer: '转移',
            accept: '接受',
            reject: '拒绝',
            cancel: '取消',
            push: '直接推送',
        },
        // 完成时间
        completedAt: '完成时间',
        rejectedAt: '拒绝时间',
        cancelledAt: '取消时间',
        // 转移弹窗
        modal: {
            title: '转移实例',
            targetUser: '接收方用户名',
            targetUserPlaceholder: '输入接收方用户名',
            searchUser: '搜索用户',
            userNotFound: '用户不存在',
            userBanned: '该用户已被封禁',
            cannotTransferToSelf: '不能转移给自己',
            remark: '备注（可选）',
            remarkPlaceholder: '输入转移备注',
            quotaCheck: '配额检查',
            instance: '实例',
            quotaSufficient: '配额充足',
            quotaInsufficient: '配额不足',
            canTransfer: '用户状态正常，可以进行转移操作',
            confirmTransfer: '确认转移',
            transferring: '转移中...',
            deleteWarning: '注意：如果对方接收转移，系统将自动删除该实例的端口映射、建站反代、快照、备份等关联资源。',
            feeLabel: '转移手续费',
            balanceLabel: '当前余额',
            insufficientBalance: '余额不足，请先充值',
            feeRefundHint: '确认转移时将扣除手续费，对方拒绝接收将自动退还',
        },
        // 拒绝弹窗
        rejectModal: {
            title: '拒绝转移',
            reason: '拒绝原因（可选）',
            reasonPlaceholder: '输入拒绝原因',
        },
        // 配置详情弹窗
        configModal: {
            title: '转移时配置详情',
            instanceName: '实例名称',
            hostInfo: '宿主机信息',
            networkMode: '网络模式',
            portMappings: '端口映射',
            snapshots: '快照',
            backups: '备份',
            package: '套餐',
        },
        hasRemark: '有备注',
        // 详情
        detail: {
            fromUser: '发起方',
            toUser: '接收方',
            instance: '实例',
            snapshot: '转移时配置',
            cpu: 'CPU',
            memory: '内存',
            disk: '磁盘',
            ports: '端口映射',
            snapshots: '快照',
            backups: '备份',
            host: '节点',
            package: '套餐',
            remark: '备注',
            rejectReason: '拒绝原因',
            createdAt: '发起时间',
            acceptedAt: '接收时间',
            rejectedAt: '拒绝时间',
            cancelledAt: '取消时间',
        },
        // 提示消息
        messages: {
            transferSuccess: '转移请求已发送',
            transferComplete: '转移完成',
            acceptSuccess: '已接受转移',
            rejectSuccess: '已拒绝转移',
            cancelSuccess: '已取消转移',
            pushSuccess: '已成功推送实例',
            instanceLocked: '该实例正在转移中，暂时无法操作',
        },
        // 错误
        errors: {
            TRANSFER_NOT_FOUND: '转移请求不存在',
            TRANSFER_TO_SELF: '不能转移给自己',
            TRANSFER_TO_BANNED: '不能转移给被封禁的用户',
            TRANSFER_ALREADY_PENDING: '该实例已有待处理的转移请求',
            TRANSFER_NOT_PENDING: '转移请求不在等待状态',
            TRANSFER_INVALID_STATUS: '实例状态不允许转移',
            TRANSFER_QUOTA_NOT_FOUND: '接收方配额信息不存在',
            TRANSFER_QUOTA_INSUFFICIENT: '接收方配额不足',
            TRANSFER_INSTANCE_LOCKED: '实例正在转移中，暂时无法操作',
            TRANSFER_HOST_DISABLED: '该节点已禁止转移操作',
            TRANSFER_INSUFFICIENT_BALANCE: '余额不足，无法支付转移手续费',
            PUSH_NOT_HOST_OWNER: '只有宿主机所有者才能直接推送',
        },
    },

    // 好友系统
    friends: {
        title: '好友',
        description: '管理您的好友列表，好友之间可以共享资源',
        friendsList: '好友列表',
        pendingRequests: '待处理请求',
        historyRequests: '历史记录',
        addFriend: '添加好友',
        username: '用户名',
        usernamePlaceholder: '输入对方用户名',
        usernameHint: '输入您想添加的好友用户名',
        remark: '备注',
        remarkPlaceholder: '请输入备注信息（可选）',
        remarkHint: '例如：认识原因、用途说明等',
        sendRequest: '发送请求',
        accept: '接受',
        reject: '拒绝',
        noFriends: '暂无好友',
        noFriendsHint: '添加好友后可以共享节点、套餐和镜像资源',
        noSearchResult: '未找到匹配的好友',
        noHistorySearchResult: '未找到匹配的历史记录',
        noPendingRequests: '暂无待处理的好友请求',
        noHistoryRecords: '暂无历史记录',
        noHistoryRecordsHint: '已处理的好友请求将显示在这里',
        addedOn: '添加于',
        requestedOn: '请求于',
        sentOn: '发送于',
        sentTo: '发送给 {username}',
        processedOn: '处理于',
        confirmRemove: '确定要删除好友 {name} 吗？',
        requestSent: '好友请求已发送',
        requestAccepted: '已接受好友请求',
        requestRejected: '已拒绝好友请求',
        friendRemoved: '已删除好友',
        statusAccepted: '已接受',
        statusRejected: '已拒绝',
        filterAll: '全部',
        filterAccepted: '已接受',
        filterRejected: '已拒绝',
        hosts: '节点',
        instances: '实例',
        // 邀请码
        invites: '邀请码',
        generateInvite: '生成邀请码',
        generateInviteTitle: '生成邀请码',
        inviteCode: '邀请码',
        inviteStatus: '状态',
        inviteUsed: '已使用',
        inviteExpired: '已过期',
        inviteUnused: '未使用',
        usedBy: '使用者',
        createdAt: '创建时间',
        expiresAt: '过期时间',
        permanent: '永久有效',
        noInvites: '暂无邀请码',
        noInvitesHint: '生成邀请码后，其他用户可以使用它们注册账号',
        inviteCount: '生成数量',
        inviteCountHint: '可以批量生成 1-10 个邀请码',
        expireDays: '过期天数',
        expireDaysPlaceholder: '0 表示永不过期',
        expireDaysHint: '设置邀请码的过期时间，0 表示永不过期',
        generate: '生成',
        confirmDeleteInvite: '确定删除邀请码 {code}？',
        inviteDeleted: '邀请码已删除',
        inviteGenerated: '邀请码已生成',
        copyCode: '复制邀请码',
        copyLink: '复制邀请链接',
        inviteCodeCopied: '邀请码已复制',
        inviteLinkCopied: '邀请链接已复制',
        close: '关闭',
        deleteInvite: '删除',
        userNotFound: '未找到该用户',
        cannotAddSelf: '不能添加自己为好友',
        alreadyFriend: '你们已经是好友了',
        requestAlreadyPending: '好友请求已在待处理中',
        requestNotFound: '请求不存在或已处理',
        friendshipNotFound: '好友关系不存在',
        // 套餐共享
        selectFriendHint: '请选择一个好友',
        selectFriendDesc: '点击左侧好友卡片来管理套餐共享',
        sharedPackages: '已共享的套餐',
        availablePackages: '可共享的套餐',
        noSharedPackages: '尚未共享任何套餐',
        addShare: '添加共享',
        addFirstShare: '共享第一个套餐',
        removeShare: '取消共享',
        editQuota: '编辑配额',
        quotaMultiplier: '配额倍数',
        quotaMultiplierHint: '例如 1、1.5、2 倍，设置好友可使用的资源比例',
        maxInstances: '最大实例数',
        maxInstancesHint: '限制好友可创建的实例数量',
        noLimit: '无限制',
        currentUsage: '当前使用',
        shareAdded: '套餐已共享',
        shareRemoved: '已取消共享',
        quotaUpdated: '配额已更新',
        confirmRemoveShare: '确定要取消共享套餐 {package} 吗？',
        addShareTitle: '共享套餐',
        shareToFriend: '共享给该好友',
        selectPackage: '选择套餐',
        selectPackagePlaceholder: '请选择要共享的套餐',
        confirmShare: '确认共享',
        editQuotaTitle: '编辑配额限制',
        sharedTo: '共享给',
        removeFriend: '删除好友',
        noPackagesToShare: '您还没有可共享的套餐',
        createPackageFirst: '请先在“我的套餐”中创建套餐',
        noPackageSearchResult: '未找到匹配的套餐',
    },

    // 套餐标签
    package: {
        shared: '好友',
        globalShared: '可用',
        friendPrefix: '好友:',
        myPackage: '我的套餐',
        soldOut: '售罄',
    },

    // 用户资源管理
    resources: {
        hosts: {
            title: '我的节点',
            description: '管理您的节点，这些节点可以供您和您的好友使用',
            create: '添加节点',
            createDesc: '添加一个新的 Incus 节点',
            ubuntuOnlyHint: '目前仅支持 Ubuntu 22.04+ 和 Debian 11+ 系统。',
            installHintTitle: '填写节点信息并提交后，系统会生成包含面板地址和 Token 的安装命令，复制到节点宿主机执行即可完成安装。',
            installHintIpv6: '提示：如需 IPv6 网络模式（NAT+IPv6、IPv6 Only），请先在宿主机执行安装脚本，脚本会自动生成 IPv6 子网信息供您填入下方表单。',
            ipv6OptionalHint: '如不清楚以上信息，可先留空。在节点宿主机执行安装脚本后，脚本会自动检测并输出可用的 IPv6 子网，届时回到面板编辑节点补充即可。',
            storagePoolAfterConnectHint: '节点连接成功后，请记得前往节点详细页的“存储”标签页创建存储池。',
            noHosts: '暂无节点',
            noHostsHint: '添加节点后可以在其上创建实例',
            calibrateAll: '对齐全部',
            noOnlineHosts: '没有在线的节点可对齐',
            calibrateAllDone: '已对齐 {total} 个节点，其中 {changed} 个有差异已修正',
            calibrateAllNoChange: '已对齐 {total} 个节点，无差异',
            nameHint: '节点名称以 PEER + 您的用户ID 作为前缀，后面可自定义',
            nameSuffixRequired: '请输入节点名称后缀',
            // 管理员专用：节点切换器
            mine: '我的节点',
            hosted: '托管节点',
            owner: '所有者',
            filterByUserId: '用户ID',
            takeoverOfficial: '接管为自营',
            takeoverOfficialLoading: '接管中...',
            takeoverOfficialConfirm: '确定将节点“{name}”接管为自营吗？该操作会转移当前节点，并自动接管可安全转移的套餐；现有实例归属用户不变。',
            takeoverOfficialSuccess: '已接管节点 {name}，转移 {packages} 个套餐，保留 {instances} 个实例',
            takeoverOfficialDetached: '其中 {count} 个套餐仍绑定其他托管节点，已移除当前节点绑定：{names}',
            takeoverOfficialBlocked: '无法接管：有 {count} 个套餐在移除当前节点后将失去全部绑定节点，请先手动处理这些套餐：{names}',
        },
        packages: {
            title: '我的套餐',
            description: '管理您的套餐配置，这些套餐可以供您和您的好友使用',
            create: '创建套餐',
            noPackages: '暂无套餐',
            noPackagesHint: '创建套餐后可以在创建实例时使用',
            share: '共享套餐',
            viewShares: '查看共享列表',
            selectFriend: '选择好友',
            selectFriendPlaceholder: '请选择要共享的好友',
            noFriends: '暂无好友，请先添加好友',
            shareSuccess: '套餐共享成功',
            shareFailed: '套餐共享失败',
            confirmUnshare: '确定要取消共享吗？',
            unshareSuccess: '已取消共享',
            unshareFailed: '取消共享失败',
            sharesList: '共享列表',
            sharesCount: '{count} 人',
            noShares: '暂无共享记录',
            noSharesHint: '共享后好友可使用此套餐创建实例',
            sharedAt: '共享时间',
            unshare: '取消共享',
            searchFriend: '搜索好友...',
            noAvailableFriends: '所有好友都已共享此套餐',
            selectToShare: '选择要共享的好友',
            // 配额限制
            quotaSettings: '配额限制',
            quotaMultiplier: '资源配额倍数',
            quotaMultiplierHint: '限制好友可使用的 CPU/内存占套餐比例',
            maxInstances: '最大实例数',
            maxInstancesHint: '限制好友最多可开通的实例数量',
            noLimit: '无限制',
            instanceUnit: '{n} 台',
            quotaDisplay: '配额: {multiplier} · 实例: {instances}',
            usageDisplay: '已用: {cpu}% CPU / {memory} MB 内存 / {instances} 台',
            updateQuota: '修改配额',
            updateQuotaSuccess: '配额已更新',
            updateQuotaFailed: '更新配额失败',
            // 美化弹窗新增
            shareToFriend: '分享套餐给好友',
            noFriendsHint: '先添加好友才能共享套餐',
            allFriendsShared: '已全部共享',
            confirmShare: '确认共享',
            editQuota: '编辑配额',
            editQuotaFor: '正在编辑 {username} 的配额',
            quotaUpdated: '配额已更新',
            quotaUpdateFailed: '更新配额失败',
            usageStatus: '使用情况',
            instanceCount: '实例数量',
            packageInstanceCount: '套餐下实例数',
            networkModeColumn: '网络模式',
            instanceTypeColumn: '实例类型',
            trafficMultiplierColumn: '流量倍率',
            hostColumn: '宿主机',
            instanceColumn: '实例数',
            publicBadge: '已公开',
            currentUsage: '当前已用: {cpu}% CPU / {memory} MB 内存 / {instances} 台实例',
            currentUsageInfo: '当前已使用 {cpu}% CPU、{memory} MB 内存、{instances} 台实例',
            addShare: '添加共享',
            searchPlaceholder: '搜索套餐名、节点名、描述...',
            noSearchResults: '未找到匹配的套餐',
            clearSearch: '清除搜索',
            // 通知渠道设置
            notifyChannel: '通知渠道',
            notifyChannelTitle: '资源释放通知渠道',
            notifyChannelDesc: '当用户删除实例或宿主机所有者释放配额时，系统会通过此渠道发送通知',
            // 分享链接
            copyShareLink: '复制分享链接',
            shareLinkCopied: '分享链接已复制，用户访问该链接可直达开通实例页面',
            // 管理员专用：套餐切换器
            mine: '我的套餐',
            hosted: '托管套餐',
            owner: '所有者',
            filterByUserId: '用户ID',
        },
        // 套餐方案管理
        plans: {
            title: '方案管理',
            manage: '管理方案',
            noPlans: '暂无方案',
            noPlansHint: '创建方案后，用户可以购买此套餐的付费实例',
            add: '添加方案',
            create: '创建方案',
            edit: '编辑方案',
            name: '方案名称',
            namePlaceholder: '如：基础版、专业版、企业版',
            description: '方案描述',
            descriptionPlaceholder: '可选，用于向用户展示方案特点',
            resourceConfig: '资源配置',
            portLimit: '端口数',
            snapshotLimit: '快照数',
            backupLimit: '备份数',
            siteLimit: '站点数',
            swapSize: 'SWAP 大小',
            trafficLimit: '流量限额',
            trafficSpeed: '带宽限制',
            unlimitedHint: '留空表示无限制',
            billingConfig: '计费配置',
            price: '价格',
            billingCycle: '计费周期',
            setupFee: '开通费',
            slaGuarantee: 'SLA保证',
            stock: '库存',
            isActive: '启用方案',
            status: '方案状态',
            statusActive: '可售',
            statusActiveHint: '正常展示并允许用户选择和开通',
            statusSoldOut: '售罄',
            statusSoldOutHint: '继续展示，但禁止新开通和改方案',
            statusInactive: '下架',
            statusInactiveHint: '不在开通入口展示，也不能被选择',
            sortOrder: '排序',
            daily: '按天',
            weekly: '按周',
            monthly: '月付',
            quarterly: '季付',
            semiAnnual: '半年付',
            yearly: '年付',
            days: '天',
            months: '个月',
            createSuccess: '方案创建成功',
            updateSuccess: '方案更新成功',
            saveFailed: '保存方案失败',
            priceRangeHint: '最高 ¥{max}',
            priceRangeError: '方案价格必须在 0-{max} 元之间，最多支持两位小数',
            confirmDelete: '确定要删除方案「{name}」吗？',
            deleteSuccess: '方案已删除',
            deleteFailed: '删除方案失败',
        },
        images: {
            title: '我的镜像',
            description: '管理您的镜像配置，这些镜像可以供您和您的好友使用',
            create: '添加镜像',
            noImages: '暂无镜像',
            noImagesHint: '添加镜像后可以在创建实例时使用',
        },
    },

    // 实例配置标签页
    instanceConfig: {
        title: '高级配置',
        sections: {
            swap: 'SWAP',
            storageIO: '存储 I/O 限制',
            networkLimits: '网络限制',
            processScheduling: '进程与调度',
            bootSettings: '启动设置',
        },
        swap: {
            size: '大小',
            enabled: '已启用',
            disabled: '已关闭',
            enableButton: '启用 SWAP',
            disableButton: '关闭 SWAP',
            toggleHint: 'SWAP 可按需启用或关闭，重装/重建后会保持当前状态。',
            runningRequired: '虚拟机需要先启动后才能启用 SWAP。',
            vmHint: '虚拟机将通过实例内 swapfile 持久启用。',
            containerHint: '容器将通过 Incus 内存交换限制启用。',
            enableConfirmTitle: '启用 SWAP',
            enableConfirmText: '确定要为该实例启用 {size} 的 SWAP 吗？',
            disableConfirmTitle: '关闭 SWAP',
            disableConfirmText: '确定要为该实例关闭 SWAP 吗？',
            enableSuccess: 'SWAP 已启用',
            enableFailed: '启用 SWAP 失败',
            disableSuccess: 'SWAP 已关闭',
            disableFailed: '关闭 SWAP 失败',
        },
        changeHost: {
            title: '改节点',
            description: '将实例重新创建到同套餐的其他节点，实例 ID 与计费信息会保留。',
            currentHost: '当前节点',
            availableCount: '{count} 个可选节点',
            button: '改节点',
            loadFailed: '加载可用节点失败',
            submitFailed: '提交改节点失败',
            taskQueued: '改节点任务已提交，请稍候...',
            modalTitle: '选择目标节点',
            modalSubtitle: '只能选择同套餐下 CPU 和内存容量充足的节点。',
            warning: '此操作会重新创建实例系统盘，旧实例数据、快照、备份、端口映射和反代站点会被清空。',
            selectSshKey: 'SSH 密钥',
            noSshKey: '没有可用 SSH 密钥',
            confirm: '确认改节点',
            current: '当前',
            available: '可用',
            memory: '内存',
            reasons: {
                current_host: '当前节点',
                host_offline: '离线',
                host_type_mismatch: '类型不匹配',
                cpu_full: '已满',
                memory_full: '已满',
                resource_unconfigured: '未配置配额',
                image_unavailable: '镜像不可用',
            },
        },
        overridden: '已覆盖',
        resetToDefault: '重置为套餐默认值',
        saveSuccess: '配置已保存',
        saveFailed: '保存配置失败',
        boostProcesses: {
            button: '提高上限',
            title: '提高进程数上限',
            confirm: '确定要为该 {type} 实例提高进程数限制吗？操作后进程数上限将提升至 {limit}。',
            hint: '此操作仅提高进程数上限，不会影响实例的其他配置',
            success: '进程数上限已提升至 {limit}',
            failed: '提升进程数上限失败',
        },
    },

    // 套餐表单页面
    packageForm: {
        createTitle: '创建套餐',
        editTitle: '编辑套餐',
        description: '配置套餐的资源限制和高级选项',
        sections: {
            basicInfo: '基本信息',
            resourceLimits: '资源限制',
            storageIO: '存储 I/O 限制',
            networkLimits: '网络限制',
            processScheduling: '进程与调度',
            bootSettings: '启动设置',
            prerequisite: '前置套餐',
            visibility: '可见性',
            instancePermissions: '实例操作权限',
            advancedOptions: '高级选项',
            instanceQuota: '实例配额',
        },
        fields: {
            networkMode: '网络模式',
            instanceType: '实例类型',
            packageCreationMode: '套餐用途',
            ioLimitMode: 'IO 限制模式',
            limitsRead: '读取速率限制',
            limitsWrite: '写入速率限制',
            limitsReadIops: '读取 IOPS 限制',
            limitsWriteIops: '写入 IOPS 限制',
            limitsIngress: '入站带宽限制',
            limitsEgress: '出站带宽限制',
            limitsProcesses: '最大进程数',
            limitsCpuPriority: 'CPU 优先级',
            bootAutostart: '随宿主机自动启动',
            bootAutostartPriority: '启动优先级',
            bootAutostartDelay: '启动延迟',
            bootHostShutdownTimeout: '关机超时时间',
            portLimit: '端口映射数量限制',
            snapshotLimit: '快照数量限制',
            backupLimit: '备份数量限制',
            siteLimit: '站点数量限制',
            hostStoragePools: '节点系统盘存储池',
            hostTrafficMultiplier: '节点流量倍率',
            requiredPackage: '前置套餐',
            publicAccess: '公开套餐',
            globalMaxInstances: '最大实例数',
            allowInstanceDeletion: '允许用户删除实例',
        },
        hostSelector: {
            official: '自营节点',
            searchPlaceholder: '搜索节点名、地区、地址、所有者...',
            selectedCount: '已选择 {count} 台宿主机',
            noSearchResults: '未找到匹配的宿主机',
            detailUnavailable: '当前视图未加载此宿主机详情，保存时仍会保留绑定',
        },
        creationModes: {
            free: {
                title: '免费实例套餐',
                description: '实例直接使用套餐里的资源、配额和带宽限制',
            },
            paid: {
                title: '付费实例套餐',
                description: '创建后通过方案设置资源、配额、流量和价格',
            },
        },
        ioMode: {
            throughput: '读写速率限制',
            iops: 'IOPS 限制',
        },
        hints: {
            ioLimitMode: 'Incus 仅支持其中一种 IO 限制模式，请选择一种',
            cpuPriority: '0 为最低优先级，10 为最高优先级',
            bootPriority: '数值越小越先启动',
            startupDelay: '实例启动前等待的秒数 (5-600)',
            shutdownTimeout: '宿主机关机时等待实例关闭的秒数 (30-600)',
            instanceQuota: '限制用户在此套餐实例上可创建的资源数量',
            portLimit: '每个实例可创建的端口映射数量上限',
            snapshotLimit: '每个实例可创建的快照数量上限（0表示无配额）',
            backupLimit: '每个实例可创建的备份数量上限（0表示无配额）',
            siteLimit: '每个实例可创建的反代站点数量上限（0表示无配额）',
            hostStoragePools: '为每个已绑定节点指定默认系统盘存储池；留空时按节点默认规则自动选择',
            hostTrafficMultiplier: '实例月流量 = 套餐或方案流量 × 此倍率，默认 1',
            requiredPackage: '选择后，用户需要先拥有该套餐的实例，才能创建此套餐实例',
            noSystemStoragePools: '此节点当前没有可用于实例系统盘的存储池',
            instanceType: '容器轻量快速，虚拟机提供完整隔离',
            publicAccess: '开启后，套餐将对所有用户可见，他们可以使用此套餐创建实例；关闭后套餐将被隐藏/归档',
            globalMaxInstances: '限制用户最多可开通的实例数量，必须填写 1-5 之间的整数',
            allowInstanceDeletion: '关闭后，使用此套餐创建的实例将不允许用户删除',
            freePackageCreationMode: '免费实例无需创建方案，实例会直接继承本页配置。若需要门槛或想按付费实例流程开通，请选择付费实例套餐，创建后添加方案并将价格设置为 0 元。',
            paidPackageCreationMode: '付费实例会使用方案里的资源、实例配额、流量和价格。本页会隐藏这些会被方案覆盖的项目，并使用默认值保存套餐。',
        },
        units: {
            seconds: '秒',
        },
        placeholders: {
            unlimited: '留空表示无限制',
            autoStoragePool: '自动选择（未指定）',
            noPrerequisite: '无前置套餐',
        },
        validation: {
            cpuPriorityRange: 'CPU 优先级必须在 0-10 之间',
            bootPriorityRange: '启动优先级必须在 0-100 之间',
            startupDelayRange: '启动延迟必须在 5-600 秒之间',
            shutdownTimeoutRange: '关机超时时间必须在 30-600 秒之间',
            portLimitMin: '端口映射数量至少为 1',
            globalMaxInstancesRange: '公开套餐最大实例数必须是 1-5 之间的整数',
        },
        typeHelp: {
            containerFast: '启动快速，秒级响应',
            containerLight: '资源占用小，适合大多数 Linux 应用',
            containerDocker: '支持 Docker（需启用嵌套虚拟化）',
            vmIsolation: '完整隔离，独立内核',
            vmKernel: '支持自定义内核和内核模块',
            vmWindows: '可运行 Windows 等非 Linux 系统',
        },
    },

    // 敏感操作二次验证
    sensitiveVerification: {
        title: '敏感操作验证',
        description: '此操作需要二次验证以确保账户安全',
        operationLabel: '操作类型',
        requestHint: '点击下方按钮，验证码将发送到您绑定的通知渠道',
        sendCode: '发送验证码',
        sendingCode: '发送中...',
        resendCode: '重新发送',
        resendIn: '{seconds} 秒后可重新发送',
        codeSent: '验证码已发送',
        codeSentTo: '验证码已发送至 {channel}',
        enterCode: '请输入验证码',
        codePlaceholder: '000000',
        verify: '验证',
        verifying: '验证中...',
        verifySuccess: '验证成功，请重新执行操作',
        verifyFailed: '验证失败',
        codeExpired: '验证码已过期，请重新发送',
        invalidCode: '验证码无效，请输入6位数字',
        operationTypes: {
            change_password: '修改密码',
            disable_2fa: '禁用双因素认证',
            change_email: '修改邮箱地址',
            delete_account: '删除账户',
            delete_instance: '删除实例',
            reinstall_instance: '重装实例',
            recreate_instance: '重建实例',
            transfer_instance: '转移实例',
            delete_snapshot: '删除快照',
            delete_backup: '删除备份',
        },
        channels: {
            email: '邮件',
            telegram: 'Telegram',
            discord: 'Discord',
            webhook: 'Webhook',
        },
    },

    // 宿主机 Caddy 管理
    host: {
        caddy: {
            title: 'Caddy 反代',
            description: '通过 Caddy 为您的实例提供域名反向代理服务，自动申请 SSL 证书。',
            enabled: '已启用',
            disabled: '未启用',
            notInstalled: 'Caddy 尚未安装，请点击下方按钮生成安装命令。',
            generateCommand: '生成安装命令',
            installCommand: '安装命令',
            commandLabel: '在宿主机上执行以下命令',
            confirmInstalled: '确认已安装',
            viewCommand: '查看安装命令',
            resetCredentials: '重置凭据',
            resetConfirm: '重置凭据后，您需要在宿主机上重新执行安装命令。确定要继续吗？',
            resetSuccess: '凭据已重置，请在宿主机上重新执行安装命令',
            resetFailed: '重置凭据失败',
            testConnection: '测试连接',
            apiPort: 'API 端口',
            username: '用户名',
            password: '密码',
            publicIp: '公网 IP',
            sitesCount: '站点数量',
            loadFailed: '加载 Caddy 状态失败',
            generateFailed: '生成安装命令失败',
            confirmSuccess: 'Caddy 已确认安装',
            confirmFailed: '确认失败',
            testSuccess: '连接成功',
            testFailed: '连接失败',
            installHint: '安装步骤',
            step1: '复制上方命令，在宿主机上以 root 权限执行',
            step2: '等待安装完成，应看到 "Caddy Reverse Proxy Ready" 提示',
            step3: '返回此页面，点击“确认已安装”按钮',
            // 站点列表
            sitesList: '反代站点列表',
            sitesTotalCount: '共 {count} 个站点',
            loadSitesFailed: '加载站点列表失败',
            noSites: '暂无反代站点',
            instance: '实例',
            targetPort: '目标端口',
            siteActive: '已激活',
            sitePending: '待激活',
            siteError: '错误',
            siteDisabled: '已禁用',
            prevPage: '上一页',
            nextPage: '下一页',
            pageInfo: '第 {current}/{total} 页，共 {count} 条',
        },
        // 节点创建实例
        createInstance: {
            title: '创建实例',
            selfMode: '给自己创建',
            giftMode: '赠送给用户',
            selfModeHint: '使用自己的 SSH 密钥和初始化命令，在当前节点上创建免费实例。',
            giftModeHint: '在当前节点上为其他用户创建实例。付费实例仅支持赠送免费时长，不会扣费。',
            adminModeHint: '管理员可在当前节点上为指定用户创建免费实例，或赠送付费实例首期时长。',
            selectPackage: '选择套餐',
            noPackages: '该节点暂无可用套餐',
            noPackagesHint: '请先在套餐管理中创建并绑定套餐到此节点',
            instanceName: '实例名称',
            giftDaysLabel: '免费赠送天数',
            giftDaysHint: '仅赠送免费时长，不会从被赠送用户余额扣费。',
            giftDaysRange: '范围：1-365 天',
            giftDuration: '赠送时长',
            giftDurationValue: '免费 {days} 天',
            giftOnlyFreeHint: '免费期结束后，将按所选方案价格正常续费。',
            creating: '正在创建...',
            success: '实例创建成功',
            giftSuccess: '实例已为用户 {username} 创建',
            userInactive: '该用户未处于可用状态',
            cannotGiftToSelf: '如果要给自己创建实例，请切换到“给自己创建”模式',
        },
        // 节点所有者通知实例用户
        notify: {
            title: '通知用户',
            sendToUsers: '通知用户',
            hint: '站内信会立即发送给本节点上所有实例对应的用户，系统会自动去重',
            hintSelected: '站内信会立即发送给选中的 {count} 个实例对应的用户，系统会自动去重',
            deliveryHint: '勾选邮件通知后，单个收件人会立即发送邮件；多个收件人会进入队列，并按每分钟 1 封的节奏发送。',
            messageTitle: '消息标题',
            titlePlaceholder: '输入消息标题',
            titleRequired: '请输入消息标题',
            messageContent: '消息内容',
            contentPlaceholder: '输入消息内容',
            contentRequired: '请输入消息内容',
            sendEmail: '同时发送邮件通知',
            sendEmailHint: '仅对已设置邮箱的用户发送邮件。批量邮件会自动排队，避免短时间内集中发信。',
            send: '发送通知',
            sendSuccess: '已成功发送给 {count} 个用户',
            sendSuccessBase: '站内信已发送给 {count} 个用户',
            emailDirectSuccess: '邮件已立即发送 {count} 封',
            emailQueuedSuccess: '邮件队列已新增 {count} 封',
            emailSkipped: '{count} 位用户未设置邮箱，已跳过邮件发送',
            emailFailed: '{count} 封邮件发送或入队失败',
            sendFailed: '发送失败',
            // 发送给单个实例用户
            sendToUser: '发送站内信',
            sendToUserTitle: '发送站内信给 {username}',
            sendToUserHint: '消息将发送给实例「{instance}」的所有者',
            sendToUserSuccess: '消息已发送',
        },
        // 修改续费价格
        price: {
            editPrice: '修改续费价格',
            modalTitle: '修改续费价格',
            hint: '修改实例「{instance}」的续费价格，新价格将于下次续费时生效，本月不受影响。',
            currentPrice: '当前价格',
            newPrice: '新价格',
            placeholder: '输入新的续费价格',
            effectHint: '新价格将于下次续费时生效，不影响本月剩余时间',
            minPriceError: '价格不能为负数',
            samePriceError: '新价格与原价格相同',
            updateSuccess: '续费价格已更新，已通知用户',
            updateFailed: '更新失败',
        },
        // 批量修改配置
        batchConfig: {
            title: '批量修改配置',
            button: '批量配置',
            targetAll: '应用范围：宿主机全部 {count} 个实例',
            targetSelected: '应用范围：已选中的 {count} 个实例',
            enableFieldHint: '勾选复选框以启用对应字段的修改',
            // 分类
            section: {
                resources: '资源配置',
                quota: '配额限制',
                permissions: '容器权限',
                advanced: '高级配置',
                io: '存储 I/O 限制',
                network: '网络限制',
                process: '进程与调度',
                boot: '启动设置',
            },
            // 字段
            cpu: 'CPU 核心数',
            memory: '内存',
            disk: '硬盘',
            traffic: '流量',
            swapEnabled: 'SWAP 开关',
            swapSize: 'SWAP 大小',
            portLimit: '端口数量',
            snapshotLimit: '快照数量',
            backupLimit: '备份数量',
            siteLimit: '站点数量',
            nested: '嵌套虚拟化',
            privileged: '特权容器',
            limitsRead: '读取限制',
            limitsWrite: '写入限制',
            limitsIngress: '入站限制',
            limitsEgress: '出站限制',
            limitsProcesses: '最大进程数',
            limitsCpuPriority: 'CPU 优先级',
            bootPriority: '启动优先级',
            bootAutostart: '开机自启',
            bootDelay: '启动延迟',
            shutdownTimeout: '关机超时',
            // 占位符
            placeholder: {
                cpu: '如 1, 2, 4',
                memory: '如 512, 1024, 2048',
                disk: '如 10, 20, 50',
                traffic: '如 100, 500, 1000',
                swapSize: '如 512, 1024, 2048',
                limit: '如 5, 10, 20',
                ioLimit: '如 100MB',
                priority: '如 5',
                processLimit: '如 500, 1000',
                bootPriority: '如 0, 1, 2',
            },
            // 状态
            processing: '正在批量修改配置...',
            processed: '已处理 {current} / {total}',
            // 结果
            success: '成功',
            failed: '失败',
            successAll: '批量修改成功，共 {count} 个实例',
            partial: '部分成功：{success} 成功，{failed} 失败',
            allFailed: '全部失败',
            submitFailed: '提交失败',
            retrySuccess: '重试成功，共 {count} 个实例',
            retryPartial: '重试部分成功：{success} 成功，{failed} 失败',
            retryFailed: '重试失败项',
            failedDetails: '失败详情',
            instanceName: '实例名称',
            incusId: 'Incus ID',
            errorReason: '错误原因',
            copyIncusIds: '复制失败的 Incus ID',
            copiedIncusIds: '已复制 {count} 个 Incus ID',
            // 操作
            submit: '应用配置 ({count})',
            close: '关闭',
            noFieldsEnabled: '请至少启用一个配置字段',
            noChanges: '没有需要修改的配置',
        },
        // 批量迁移实例
        migrate: {
            title: '迁移实例到其他节点',
            button: '改节点',
            selectedCount: '已选择 {count} 个实例',
            targetNode: '目标节点',
            selectTarget: '请选择目标节点',
            targetImage: '目标系统',
            selectImage: '请选择目标系统',
            selectImageRequired: '请选择目标系统',
            loadImagesFailed: '加载系统列表失败',
            noImageAvailable: '目标节点无可用系统',
            imageHint: '迁移会使用该系统重建实例，不再沿用实例旧镜像',
            instances: '个实例',
            warning: '迁移注意事项',
            warningCloudInit: '将重新执行 cloud-init 初始化',
            warningImage: '实例将使用所选系统重建',
            warningIp: '实例将获得新的 IP 地址',
            warningNotify: '迁移完成后将通知用户',
            confirm: '确认迁移',
            migrating: '正在迁移...',
            resultSummary: '成功 {success} 个，失败 {failed} 个',
            failedInstances: '失败的实例',
            loadHostsFailed: '加载节点列表失败',
            selectTargetRequired: '请选择目标节点',
            noInstancesSelected: '请先选择要迁移的实例',
            failed: '迁移失败',
            // 付费实例方案选择
            targetPlan: '目标方案',
            selectPlan: '请选择目标方案',
            selectPlanRequired: '请选择目标方案',
            loadPlansFailed: '加载方案列表失败',
            noPlanAvailable: '目标节点无可用方案',
            planHint: '付费实例将使用新方案的续费价格，保留原到期时间和优惠码',
        },
        // 批量赠送时长
        giftDays: {
            title: '赠送时长',
            button: '赠送时长',
            hint: '为选中的付费实例免费延长到期时间，不扣除任何费用。',
            confirm: '将为 {count} 个付费实例赠送时长',
            daysLabel: '赠送天数',
            daysRange: '范围：1-365 天',
            confirmButton: '确认赠送',
            success: '成功为 {count} 个实例赠送 {days} 天',
            partial: '成功 {success} 个，失败 {failed} 个',
            failed: '赠送失败',
            skipped: '跳过了 {count} 个免费实例',
            noPaidInstances: '请选择付费实例',
        },
    },

    // 站内信
    inbox: {
        title: '通知中心',
        description: '查看您的所有系统通知',
        notifications: '通知',
        unread: '未读',
        all: '全部',
        allCategories: '全部类型',
        markAllRead: '全部已读',
        markRead: '标记已读',
        clearRead: '清空已读',
        noMessages: '暂无通知',
        noUnread: '没有未读通知',
        noCategoryMessages: '该类型暂无消息',
        viewAll: '查看全部',
        justNow: '刚刚',
        minutesAgo: '{n} 分钟前',
        hoursAgo: '{n} 小时前',
        daysAgo: '{n} 天前',
        deleteConfirm: '确定删除这条通知吗？',
        clearConfirm: '确定清空所有已读通知吗？',
        deleted: '已删除',
        cleared: '已清空',
        markedRead: '已标记为已读',
        markedAllRead: '已全部标记为已读',
        currentPageFiltered: '当前页筛选结果：{count} 条',
        // 消息类别
        categories: {
            instance: '实例',
            snapshot: '快照',
            backup: '备份',
            social: '好友',
            transfer: '转移',
            package: '套餐',
            security: '安全',
            quota: '配额',
            ticket: '工单',
            system: '系统',
        },
    },

    // 配额释放
    quotaRelease: {
        title: '释放配额',
        packageQuota: '套餐配额',
        noHosts: '无可用宿主机',
        noHostsHint: '此套餐未绑定任何宿主机',
        selectHosts: '选择宿主机',
        selectAll: '全选',
        deselectAll: '取消全选',
        available: '可用',
        quotaToAdd: '增加配额',
        preview: '将为 {count} 台宿主机各增加 {cpu}% CPU 和 {memory} 内存',
        notificationChannel: '通知渠道',
        noNotification: '不发送通知',
        notificationHint: '释放配额后，系统会通过此渠道发送通知',
        selectChannel: '选择通知渠道',
        bindChannelHint: '仅显示禁用状态的通知渠道，用于资源释放通知',
        unbindChannel: '解绑',
        sendNotification: '发送通知',
        noDisabledChannel: '暂无可用的通知渠道',
        noDisabledChannelHint: '请先在「个人设置 - 通知」中添加一个渠道并禁用它',
        channelEnabledWarning: '此渠道已启用，将同时接收系统事件通知',
        noGlobalChannel: '暂无全局通知渠道',
        noGlobalChannelHint: '请联系管理员在系统设置中创建全局通知渠道',
        confirm: '释放配额',
        success: '成功为 {count} 台宿主机释放配额',
        failed: '释放配额失败',
        loadFailed: '加载宿主机信息失败',
        selectHost: '请至少选择一台宿主机',
        enterQuota: '请输入要增加的配额',
        channelUpdated: '通知渠道已更新',
        channelUpdateFailed: '更新通知渠道失败',
    },

    // Web 终端
    terminal: {
        title: '终端',
        connecting: '正在连接...',
        connected: '已连接',
        disconnected: '已断开连接',
        failed: '连接失败',
        connectionFailed: '连接失败',
        reconnect: '重新连接',
        requiresRunning: '需要实例处于运行状态',
        clear: '清屏',
        fullscreen: '全屏',
        exitFullscreen: '退出全屏',
        fontSize: '字体大小',
        fontSizeIncrease: '增大字体',
        fontSizeDecrease: '缩小字体',
        connectionError: '连接错误',
        reconnecting: '正在重新连接...',
        close: '关闭终端',
        disconnect: '断开连接',
        modeExec: 'Shell',
        modeConsole: '控制台',
        modeBootConsole: '启动控制台',
        modeSwitching: '切换到 Shell',
        modeUnknown: '未知模式',
        consoleFallback: '当前已回退到控制台模式',
        consoleFallbackHint: '该虚拟机未能进入 Shell 模式，当前使用的是串口控制台。若体验异常，请检查 qemu-guest-agent、cloud-init 和串口登录配置。',
        switchingToShell: '正在切换到 Shell...',
        switchingToShellHint: 'Shell 已就绪，终端正在从启动控制台切换到交互式 Shell。',
        shellReadyNotice: '已进入 Shell',
        shellReadyHint: '启动控制台已完成，当前终端已切换到交互式 Shell。',
        consoleOnlyHint: '当前仍处于控制台模式，Shell 尚未就绪或正在重连。',
        instanceInfo: '实例: {name}',
        statusConnecting: '连接中',
        statusConnected: '已连接',
        statusDisconnected: '未连接',
        statusError: '错误',
        escToClose: '按 Esc 关闭',
        pressCtrlShiftFToSearch: '按 Ctrl+Shift+F 搜索',
        searchPlaceholder: '搜索...',
        searchNext: '下一个',
        searchPrevious: '上一个',
        restore: '恢复终端',
        exportLog: '导出日志',
        // 多标签
        tab: '标签',
        newTab: '新建标签',
        closeTab: '关闭标签',
        maxTabsReached: '已达到最大标签数',
        // 右键菜单
        contextMenu: {
            copy: '复制',
            paste: '粘贴',
            selectAll: '全选',
        },
        // Cloud-init 状态
        cloudInitChecking: '正在检查实例初始化状态...',
        cloudInitInProgress: '实例正在初始化中',
        cloudInitInProgressHint: '实例正在运行 Cloud-init 初始化，可能需要等待 10-60 秒。请稍后点击“重新检查”尝试连接。',
        cloudInitUnknown: 'Cloud-init 状态待确认',
        cloudInitUnknownHint: '当前无法可靠检测 KVM 实例内的 Cloud-init 状态。你可以继续连接，或手动标记为已完成。',
        cloudInitRetry: '重新检查',
        cloudInitSkip: '忽略并连接',
        cloudInitManualComplete: '手动标记完成',
        cloudInitManualCompleteSuccess: '已手动标记该实例初始化为完成',
        // 移动端提示
        mobileKeyboardHint: '请切换至英文键盘以获得最佳体验',
        // 帮助
        help: '帮助',
        helpTitle: '终端使用帮助',
        helpShortcuts: '快捷键',
        helpShortcutSearch: '搜索内容',
        helpShortcutCopy: '复制选中',
        helpShortcutPaste: '粘贴',
        helpShortcutFontIncrease: '增大字体',
        helpShortcutFontDecrease: '缩小字体',
        helpShortcutFontReset: '重置字体',
        helpShortcutExport: '导出日志',
        helpShortcutNewTab: '新建标签',
        helpShortcutCloseTab: '关闭标签',
        helpMouseOps: '鼠标操作',
        helpMouseSelect: '拖动选中文本',
        helpMouseCopy: '右键菜单复制/粘贴',
        helpMouseScroll: '滚轮滚动历史',
        helpTouchOps: '触控操作',
        helpTouchPinchZoom: '双指捨合调整字体大小',
        helpTouchSwipeScroll: '单指滑动滚动历史',
        // 设置面板
        settings: '设置',
        settingBell: '终端提示音',
        settingBellDesc: '程序发出提醒时播放声音（如命令完成、错误警告等）',
        settingAutoCopy: '选中自动复制',
        settingAutoCopyDesc: '选中文本后自动复制到剪贴板',
        settingLinkPreview: '链接预览',
        settingLinkPreviewDesc: '鼠标悬停在链接上时显示 URL',
        settingTouch: '触控优化',
        settingTouchDesc: '启用移动端手势支持（双指缩放等）',
        settingTheme: '终端主题',
        settingThemeDesc: '选择终端的配色方案',
        themeDark: '深色',
        themeLight: '浅色',
        themeHighContrast: '高对比度',
        currentStatus: '当前状态',
        latency: '延迟',
        savedCommands: {
            cloud: '云端同步',
            title: '快捷命令',
            subtitle: '保存常用命令，随时发送到当前终端',
            add: '新建',
            synced: '云端保存',
            encrypted: '加密存储',
            count: '共 {count} 条',
            collapse: '收起快捷命令',
            expand: '展开快捷命令',
            open: '打开快捷命令',
            short: '命令',
            new: '新建命令',
            edit: '编辑命令',
            name: '名称',
            namePlaceholder: '例如：更新软件源',
            command: '命令内容',
            commandPlaceholder: '输入要保存到云端的终端命令',
            description: '备注',
            descriptionPlaceholder: '可选备注，说明这条命令做什么',
            loadFailed: '加载快捷命令失败',
            createSuccess: '快捷命令已保存',
            updateSuccess: '快捷命令已更新',
            saveFailed: '保存快捷命令失败',
            deleteSuccess: '快捷命令已删除',
            deleteFailed: '删除快捷命令失败',
            deleteConfirm: '确定删除“{name}”吗？',
            emptyTitle: '还没有快捷命令',
            emptyDescription: '点击右上角“新建”保存常用命令。',
            selected: '已选中：{name}',
            notSelected: '选择一条快捷命令后可执行或删除',
            execute: '执行',
            runHint: '会直接发送到当前激活终端并立即执行。',
            disconnectedHint: '当前终端未连接，连接成功后才可执行命令',
            shellRequiredHint: '当前还未进入 Shell，Shell 就绪后才可执行快捷命令',
        },
        // 移动端快捷工具栏
        paste: '粘贴',
        hideKeyboard: '收起键盘',
    },

    // 终端管理页面
    terminalPage: {
        newConnection: '新建连接',
        selectInstance: '选择实例',
        runningCount: '运行中实例 {count} 台',
        selectedInstance: '当前选择',
        selectionHint: '请选择一个运行中的实例，终端会直接连入该实例。',
        directShell: '控制台优先连接',
        directShellHint: '终端会先附着启动控制台，并在交互式 Shell 就绪后自动切换。',
        host: '节点',
        package: '套餐',
        instanceId: '实例 ID',
        statusRunning: '运行中',
        noConnections: '暂无终端连接',
        noRunningInstances: '没有运行中的实例',
        noRunningInstancesHint: '请先启动一个实例，或回到实例详情页确认运行状态。',
        connect: '连接',
        description: '管理所有实例的终端连接',
        searchInstances: '搜索实例名称或镜像...',
        noMatchingInstances: '没有匹配的实例',
        noMatchingInstancesHint: '换个关键词试试，或清空搜索条件查看全部运行中实例。',
    },

    // 工单系统
    tickets: {
        title: '工单中心',
        myTickets: '我的工单',
        hostTickets: '收到的工单',
        createTicket: '创建工单',
        newTicket: '新建工单',
        ticketDetails: '工单详情',
        noTickets: '暂无工单',
        noTicketsHint: '您还没有创建任何工单',
        noHostTickets: '暂无收到的工单',
        noHostTicketsHint: '您的宿主机没有收到任何工单',
        noUserTickets: '暂无用户工单',
        noUserTicketsHint: '当前没有未绑定实例、直接发给管理员的用户工单',
        noOfficialTickets: '暂无自营工单',
        noOfficialTicketsHint: '当前没有来自自营节点的工单',
        noHostedTickets: '暂无托管工单',
        noHostedTicketsHint: '当前没有来自托管节点的工单',
        // 工单状态
        status: {
            open: '待处理',
            in_progress: '处理中',
            resolved: '已解决',
            closed: '已关闭',
        },
        // 工单优先级
        priority: {
            low: '低',
            normal: '普通',
            high: '高',
            urgent: '紧急',
        },
        // 工单分类
        category: {
            general: '常规咨询',
            billing: '计费问题',
            technical: '技术支持',
            abuse: '滥用举报',
        },
        // 表单
        subject: '主题',
        subjectPlaceholder: '简要描述问题',
        content: '内容',
        contentPlaceholder: '请至少写 10 个字，详细描述您的问题，或上传图片附件',
        selectInstance: '选择实例',
        selectInstanceHint: '选择实例（可选）',
        noInstancesHint: '您还没有实例，可直接提交工单',
        hostedInstanceHint: '如需针对托管实例提交工单，请务必选择对应实例，工单将发送至该节点负责人处理。',
            hostedInstanceHintTitle: '托管实例提示',
        selectCategory: '选择分类',
        selectPriority: '选择优先级',
        // 操作
        reply: '回复',
        replyPlaceholder: '输入回复内容...',
        close: '关闭工单',
        reopen: '重新开启',
        updateStatus: '更新状态',
        markResolved: '标记为已解决',
        markInProgress: '标记为处理中',
        // 确认对话框
        confirmClose: '确认关闭工单？',
        confirmCloseHint: '关闭后将无法继续回复',
        // 消息
        createSuccess: '工单创建成功',
        replySuccess: '回复成功',
        closeSuccess: '工单已关闭',
        deleteMessage: '删除消息',
        confirmDeleteMessage: '确定要删除这条消息吗？删除后所有人都将无法查看。',
        deleteMessageSuccess: '消息已删除',
        statusUpdated: '状态已更新',
        // 其他
        host: '宿主机',
        instance: '实例',
        from: '来自',
        assignedTo: '分配给',
        createdAt: '创建时间',
        lastReply: '最后回复',
        messages: '消息',
        viewDetails: '查看详情',
        pendingCount: '待处理',
        allHosts: '所有宿主机',
        filterByHost: '按宿主机筛选',
        filterByStatus: '按状态筛选',
        sourceFilter: {
            all: '全部工单',
            user: '用户工单',
            official: '自营工单',
            hosted: '托管工单',
        },
        activeStatus: '活跃',
        allStatus: '全部',
        ownerReply: '客服回复',
        userReply: '用户回复',
        ticketClosed: '工单已关闭，无法回复',
        mustSelectInstance: '请先选择实例',
        noInstancesAvailable: '没有可用的实例',
        instanceDetails: '实例详情',
        instanceStatus: '状态',
        instanceId: '实例ID',
        incusId: 'Incus ID',
        packageName: '套餐',
        cores: '核',
        memory: '内存',
        disk: '硬盘',
        image: '镜像',
        loadMoreMessages: '加载更多消息',
        remaining: '条剩余',
        needsReply: '需要回复',
        searchPlaceholder: '搜索工单ID、主题、用户名...',
        perPage: '每页',
        totalCount: '共 {count} 条',
        images: {
            label: '图片附件',
            hint: '支持 JPG、PNG、WebP、GIF、AVIF，最多 {count} 张，每张不超过 {size}MB',
            add: '添加图片',
            remove: '移除图片',
            selected: '已选择 {count}/{max} 张图片',
            maxReached: '最多只能上传 {count} 张图片',
            invalidType: '仅支持 JPG、PNG、WebP、GIF、AVIF 图片',
            fileTooLarge: '单张图片不能超过 {size}MB',
            loadFailed: '图片加载失败',
            zoomIn: '放大',
            zoomOut: '缩小',
            resetZoom: '重置缩放',
        },
    },

    // 签到系统
    checkin: {
        title: '每日签到',
        checkinTab: '签到',
        redeemTab: '兑换',
        recordsTab: '记录',
        // 签到状态
        notCheckedIn: '今日尚未签到',
        alreadyCheckedIn: '今日已签到',
        checkinButton: '签到',
        checkinSuccess: '签到成功',
        noInstance: '您需要至少拥有一个实例才能签到',
        clickToOpen: '点击礼盒抽取今日奖励',
        opening: '开启中',
        revealing: '揭晓奖励',
        congratulations: '恭喜您获得以下奖励',
        // 兑换码
        redeemCode: '兑换码',
        codeExpired: '已过期',
        codeUsed: '已使用',
        expiresIn: '剩余时间',
        copyCode: '复制兑换码',
        codeCopied: '兑换码已复制',
        // 资源类型
        resourceType: '资源类型',
        resourceValue: '资源数值',
        cpu: 'CPU',
        memory: '内存',
        disk: '硬盘',
        traffic: '流量',
        points: '积分',
        // 兑换
        redeemTitle: '兑换兑换码',
        inputCode: '请输入兑换码',
        selectInstance: '选择实例',
        selectInstanceHint: '选择要兑换资源的免费实例',
        redeemButton: '兑换',
        redeemSuccess: '兑换成功',
        cappedFromPackageLimit: '已达套餐上限',
        redeemHint: '签到兑换码仅可用于免费实例',
        alreadyRedeemed: '今日签到码已兑换过',
        noInstancesForRedeem: '没有可用的免费实例',
        // 记录
        checkinRecords: '签到记录',
        redeemRecords: '兑换记录',
        noRecords: '暂无记录',
                showingRecent: '显示最近 {count} 条，共 {total} 条',
        usedBy: '使用者',
        usedFor: '兑换实例',
        self: '自己',
        others: '他人',
        unused: '未使用',
        // 分享规则
        selfOnlyMode: '仅限自用',
        selfOnlyHint: '您的兑换码已连续两天被他人使用，从今天起只能自己使用，直到您自己使用一次',
                // 规则说明
                rulesTitle: '签到说明',
                rulesCheckin: '签到规则',
                rulesCheckin1: '每日 1 次，0 点重置',
                rulesCheckin2: '需拥有至少 1 个实例',
                rulesCheckin3: '随机获得 CPU / 内存 / 硬盘 / 流量 奖励',
                rulesRedeem: '兑换规则',
                rulesRedeem1: '兑换码有效期 3 小时',
                rulesRedeem2: '每人每日限兑换 1 次',
                rulesRedeem3: '资源不能超过套餐上限',
                rulesShare: '分享',
                rulesShare1: '兑换码可分享给好友使用',
                rulesShare2: '连续 2 天被他人使用将限制为仅自己可用，直到再次自己使用后解除',
        // 单位
        percent: '%',
        mb: 'MB',
        gb: 'GB',
        // 资源池系统新增
        tabCheckin: '签到',
        tabRedeem: '兑换',
        tabPool: '资源池',
        tabLogs: '记录',
        clickToCheckin: '点击签到领取奖励',
        noInstances: '您需要至少拥有一个实例才能签到',
        bonusPoints: '额外获得 {points} 积分',
        savedToPool: '已存入资源池',
        redeemSystemCode: '系统兑换码',
        enterCode: '请输入兑换码',
        systemCodePlaceholder: '输入 h- 开头的系统兑换码',
        systemCodeHint: '系统兑换码（h-前缀）需选择目标实例，资源将直接应用到该实例',
        redeem: '兑换',
        redeemToInstanceSuccess: '{type} +{value}{unit} 已应用到 {instance}',
        applyToInstance: '应用资源到实例',
        amount: '数量',
        targetInstance: '目标实例',
        kvmCpuHint: 'CPU参数兑换到KVM实例时，必须是100的整数倍',
        kvmHint: 'KVM实例限制：CPU必须是100的倍数，内存必须是128MB的倍数，硬盘必须是1GB的倍数，且调整内存/硬盘需先停止实例。LXC实例无此限制。',
        apply: '应用',
        applySuccess: '{type} +{value}{unit} 已应用到 {instance}',
        insufficientPool: '资源池余额不足',
        enterAmount: '请输入数量',
        allActions: '全部操作',
        allResources: '全部资源',
        noLogs: '暂无记录',
        action: '操作',
        instance: '实例',
        time: '时间',
        actionCheckin: '签到',
        actionRedeem: '兑换',
        actionAdminGrant: '管理员赠送',
        actionSystemGrant: '系统奖励',
        actionLottery: '抽奖',
        actionApply: '应用',
        actionSystemRedeem: '系统兑换码',
    },

    // 兑换码管理
    redeemCodes: {
        title: '兑换码管理',
        create: '创建兑换码',
        createTitle: '创建兑换码',
        createBatch: '批量创建',
        codeType: '资源类型',
        codeValue: '资源数值',
        resourceType: '资源类型',
        resourceValue: '资源数值',
        maxUses: '最大使用次数',
        usedCount: '已使用',
        expiresAt: '过期时间',
        expiresAtHint: '留空表示永不过期',
        neverExpires: '永不过期',
        enabled: '已启用',
        disabled: '已禁用',
        enable: '启用',
        disable: '禁用',
        remark: '备注',
        remarkPlaceholder: '可选备注信息',
        batchCount: '生成数量',
        batchCountHint: '数量大于1时将批量生成一次性兑换码',
        createSuccess: '兑换码创建成功',
        batchCreateSuccess: '成功创建 {count} 个兑换码',
        createFailed: '创建失败',
        deleteConfirm: '确认删除',
        deleteSuccess: '成功删除 {count} 个兑换码',
        deleteFailed: '删除失败',
        confirmDelete: '确认删除',
        confirmDeleteMessage: '确定要删除选中的 {count} 个兑换码吗？此操作不可撤销。',
        deleteSelected: '删除选中 ({count})',
        updateSuccess: '更新成功',
        copyCode: '复制兑换码',
        copyAll: '复制全部',
        copyCodes: '复制所有兑换码',
        codesCopied: '兑换码已复制',
        exhausted: '已用完',
        expired: '已过期',
        active: '有效',
        paused: '已暂停',
        usages: '使用记录',
        usageRecords: '使用记录',
        noUsages: '暂无使用记录',
        user: '用户',
        instance: '实例',
        usedAt: '使用时间',
        selectType: '选择资源类型',
        selectValue: '请选择资源数值',
        empty: '暂无兑换码',
        emptyList: '暂无兑换码，点击上方按钮创建',
        filterAll: '全部',
        filterEnabled: '已启用',
        filterDisabled: '已禁用',
        batchDelete: '批量删除',
        batchDeleteConfirm: '确定要删除选中的 {count} 个兑换码吗？',
        usesHint: '设为 1 表示一次性兑换码',
        batchHint: '批量创建只能生成一次性兑换码',
        batchResult: '批量创建结果',
        code: '兑换码',
        type: '类型',
        usage: '使用情况',
        status: '状态',
        actions: '操作',
        loadFailed: '加载失败',
        batchId: '批次 ID',
        batchLimitHint: '同一批次的兑换码，每个用户只能使用一张',
        batch: '批次',
        valueRange: '范围：{min} - {max}',
        valueOutOfRange: '数值必须在 {min} 到 {max} 之间',
        valueMustBeInteger: '数值必须为整数',
    },

    // 扩展
    extensions: {
        title: '脚本',
        description: '管理扩展功能',
        initCommands: {
            title: '自定义初始化命令',
            description: '创建命令模板，在实例创建/重装时执行',
            add: '添加命令',
            addFirst: '添加第一个命令',
            edit: '编辑命令',
            view: '查看详情',
            viewDetail: '命令详情',
            empty: '暂无自定义命令',
            emptyHint: '点击上方按钮创建第一个初始化命令模板',
            name: '名称',
            namePlaceholder: '输入命令名称',
            command: '命令内容',
            commandPlaceholder: '输入 Shell 命令，每行一条\n示例：\napt update\napt install -y nginx',
            commandHint: '每行一条命令，实例初始化时按顺序执行',
            distros: '适配发行版',
            distrosHint: '选择此命令兼容的 Linux 发行版',
            remark: '备注',
            remarkPlaceholder: '可选描述',
            createdAt: '创建时间',
            actions: '操作',
            status: '状态',
            statusEnabled: '已启用',
            statusDisabled: '已禁用',
            enabled: '命令已启用',
            disabled: '命令已禁用',
            clickToEnable: '点击启用',
            clickToDisable: '点击禁用',
            toggleFailed: '切换状态失败',
            confirmDelete: '确定要删除命令「{name}」吗？此操作不可撤销。',
            createSuccess: '命令创建成功',
            updateSuccess: '命令更新成功',
            deleteSuccess: '命令已删除',
            createFailed: '创建失败',
            updateFailed: '更新失败',
            deleteFailed: '删除失败',
            loadFailed: '加载命令失败',
            loadDetailFailed: '加载命令详情失败',
            noContent: '无内容',
            lineCount: '{count} 行',
            // Modal
            addTitle: '添加初始化命令',
            editTitle: '编辑初始化命令',
            modalDesc: '命令将在实例初始化时执行',
            // Selector
            selectTitle: '初始化命令',
            optional: '(可选)',
            noAvailable: '暂无可用的初始化命令',
            goToManage: '前往扩展页面创建',
            selectHint: '已选命令将在实例初始化完成后执行',
            selectedCount: '已选择 {count} 个',
            showAll: '展开全部 {count} 条',
            collapse: '收起',
            // Distro names
            distroAll: '所有发行版',
            distroNames: {
                all: '所有发行版',
                ubuntu: 'Ubuntu',
                debian: 'Debian',
                rhel: 'RHEL/CentOS/Fedora',
                alpine: 'Alpine',
                arch: 'Arch Linux',
                suse: 'openSUSE/SLES',
            },
        },
    },

    // 计费管理
    billing: {
        // 通用
        balance: '余额',
        frozen: '冻结',
        totalRecharge: '累计充值',
        totalConsume: '累计消费',
        yuan: '元',
        months: '个月',
        month: '月',
        save: '节省',
        days: '天',
        freeInstance: '免费实例',
        paidInstance: '付费实例',
        traffic: '月流量',
        trafficBidirectional: '双向',
        soldOut: '售罄',
        setupFee: '开通费',
        cycle: {
            monthly: '月付',
            quarterly: '季付',
            semiAnnual: '半年付',
            annual: '年付',
            months: '个月',
        },
        
        // 实例计费信息
        billingInfo: '计费信息',
        currentPlan: '当前方案',
        expiresAt: '到期时间',
        neverExpires: '永不过期',
        autoRenew: '自动续费',
        autoRenewOn: '自动开',
        autoRenewOff: '自动关',
        autoRenewEnabled: '已开启自动续费',
        autoRenewDisabled: '已关闭自动续费',
        autoRenewing: '自动续费',
        enableAutoRenew: '开启自动续费',
        disableAutoRenew: '关闭自动续费',
        autoRenewHint: '到期前 24 小时将自动从余额扣款续费',
        autoRenewDesc: '开启自动续费后，实例将在到期前自动按 {cycle} 周期续费，每次续费 ￥{price}',
        currentStatus: '当前状态',
        
        // 续费
        renew: '续费',
        renewInstance: '实例续费',
        renewTitle: '续费实例',
        selectRenewPeriod: '选择续费时长',
        renewMonths: '{months} 个月',
        renewPrice: '续费金额',
        originalPrice: '原价',
        affDiscount: '优惠码折扣',
        actualPrice: '实付金额',
        newExpiresAt: '续费后到期',
        currentBalance: '当前余额',
        balanceAfterRenew: '续费后余额',
        insufficientBalance: '余额不足',
        goRecharge: '前往充值',
        renewing: '续费中...',
        renewSuccess: '续费成功',
        renewFailed: '续费失败',
        freeInstanceNoRenew: '免费实例无需续费',
        hostingRenewTooEarly: '托管实例仅可在到期前 7 天内续费（当前剩余 {days} 天）',
        
        // 升降级
        changePlan: '升级',
        changePlanTitle: '变更套餐方案',
        upgrade: '升级',
        selectNewPlan: '选择新方案',
        currentPlanLabel: '当前方案',
        newPlanLabel: '新方案',
        remainingDays: '剩余天数',
        remainingValue: '剩余价值',
        newPlanCost: '新方案费用',
        priceDiff: '差价',
        needPay: '需要支付',
        noPriceChange: '无需补差价',
        isUpgrade: '升级',
        planNotActive: '方案已下架',
        planNoStock: '方案已售罄',
        changePlanInProgress: '升级方案中...',
        changePlanSuccess: '方案升级成功',
        changePlanFailed: '方案升级失败',
        needRestart: '请重启实例以应用新配置',
        newConfig: '新配置',
        freeInstanceNoChange: '免费实例不支持升级',
        samePlan: '不能切换到相同方案',
        // 变更规则
        viewRules: '变更规则',
        hideRules: '收起规则',
        changePlanRulesTitle: '方案升级规则',
        changePlanRule1: '按日价计算差价，升级补差价',
        changePlanRule2: '剩余天数 ≥ 15 天才可升级方案',
        changePlanRule3: '到期时间保持不变',
        changePlanRule4: '优惠码折扣继续享受',
        // 已是最高方案
        alreadyHighestPlan: '当前已是最高方案',
        contactForCustomPlan: '更高配置可提交工单定制',
        // KVM/LXC 重启提示
        kvmRestartHint: 'KVM 实例升级后需重启以应用新配置；若使用过重装脚本，可能需自行扩容分区',
        lxcInstantHint: 'LXC 实例升级后配置即时生效',
        kvmRestartRequired: 'KVM 实例方案已变更，请重启实例以应用新配置',
        // 不能变更原因
        cannotChange: '暂时无法升级',
        cannotChangeRemainingDays: '剩余天数不足 {days} 天，无法升级方案',
        cannotChangeInstanceStatus: '当前实例状态不允许升级方案，仅运行中或已停止的实例可以操作',
        cannotChangeUnknown: '当前无法升级方案',
        // 计算详情
        oldDailyPrice: '原方案日价',
        newDailyPrice: '新方案日价',
        day: '天',
        newPlanCostOriginal: '新方案剩余费用',
        newPlanCostFinal: '新方案剩余费用（折后）',
        discountAmount: '优惠码折扣',
        
        // 计费记录
        records: '计费记录',
        billingRecords: '计费记录',
        recordType: '类型',
        recordAmount: '金额',
        recordPeriod: '账期',
        recordRemark: '备注',
        recordTypes: {
            purchase: '购买',
            renewal: '续费',
            upgrade: '升级',
            downgrade: '降级',
            admin_extension: '管理员延期',
        },
        
        // 充值
        recharge: '充值',
        rechargeTitle: '账户充值',
        rechargeAmount: '充值金额',
        actualAmount: '实际到账',
        fee: '手续费',
        minAmount: '最低充值',
        maxAmount: '最高充值',
        selectPaymentMethod: '选择支付方式',
        noPaymentProviders: '暂无可用支付渠道',
        createOrder: '创建订单',
        creatingOrder: '创建订单中...',
        orderCreated: '订单已创建',
        orderNo: '订单号',
        orderStatus: '订单状态',
        orderExpiredAt: '支付截止时间',
        cancelOrder: '取消订单',
        orderCancelled: '订单已取消',
        orderStatus_pending: '待支付',
        orderStatus_paid: '已支付',
        orderStatus_completed: '已完成',
        orderStatus_failed: '已失败',
        orderStatus_cancelled: '已取消',
        orderStatus_expired: '已过期',
        orderStatus_refunded: '已退款',
        
        // 充值记录
        rechargeRecords: '充值记录',
        noRecords: '暂无记录',
        viewDetails: '查看详情',
        
        // 余额记录
        balanceLogs: '余额明细',
        balanceLogTypes: {
            recharge: '充值',
            purchase: '购买',
            renewal: '续费',
            upgrade: '升级',
            downgrade: '降级',
            refund: '退款',
            admin_adjust: '管理员调整',
        },
        
        // 套餐方案
        plan: '方案',
        planName: '方案名称',
        planPrice: '价格',
        planBillingCycle: '账期',
        planConfig: '配置',
        planStock: '库存',
        planSoldOut: '已售罄',
        planInactive: '已下架',
        billingCycleMonthly: '月付',
        billingCycleQuarterly: '季付',
        billingCycleYearly: '年付',
        perMonth: '/月',
        perQuarter: '/季',
        perYear: '/年',
    },

    // 托管准入
    hosting: {
        accessDenied: {
            title: '暂不满足托管条件',
            description: '您需要满足以下条件才能使用托管功能：',
            condition: '至少拥有过 1 台实例',
            currentInstances: '当前拥有 {count} 台实例',
            hint: '实例包括免费和付费实例，官方直营和托管节点均可。',
            featureHiddenCondition: '托管功能暂未向新用户开放',
            featureHiddenCurrent: '您还没有创建过节点，当前入口已被系统隐藏。',
            featureHiddenHint: '如需使用托管功能，请联系管理员开放，或在功能重新开放后再试。',
        },
    },

    // 托管收益
    hostingWallet: {
        title: '托管收益',
        description: '查看您的节点托管收益和提现记录',
        hostingMember: '托管者会员',
        notice: {
            title: '托管公告',
        },
        // 余额概览
        balance: {
            available: '可用余额',
            frozen: '冻结中',
            frozenNote: '收入冻结30天后解冻',
            totalIncome: '累计收入',
        },
        // 统计信息
        stats: {
            myHostsCount: '托管节点',
            instancesOnMyHosts: '节点实例',
            uniqueCustomersCount: '客户数',
            monthIncome: '本月收入',
        },
        // 提现相关
        withdraw: {
            button: '申请提现',
            minAmountNote: '可用余额达到 {amount} 后可提现',
        },
        // 选项卡
        tabs: {
            overview: '概览',
            logs: '收支明细',
            withdrawals: '提现记录',
            blocks: '黑名单',
        },
        // 概览内容
        overview: {
            title: '提现说明',
            howItWorks: '收益流程',
            step1Title: '用户购买实例',
            step1Desc: '用户在您的节点上购买/续费实例',
            step2Title: '收入冻结',
            step2Desc: '收益计入托管余额，冻结30天',
            step3Title: '解冻提现',
            step3Desc: '冻结期满后可申请提现',
            minAmountTitle: '最低提现',
            minAmount: '最低提现金额 {amount}',
            feeTitle: '提现手续费',
            feeDesc: '提现到面板余额手续费 {rate}%',
            feeDescNew: '提现到面板余额手续费 5%，提现到指定方式手续费 10%',
            manualTitle: '手动提现',
            manualDesc: '如需提现到其他方式（手续费 10%），请提交工单申请',
            withdrawMethodTitle: '提现方式',
            withdrawMethodDesc: '自助提现至余额或发送工单申请其他提现方式',
        },
        // 收支明细
        logs: {
            noRecords: '暂无收支记录',
            emptyHint: '当用户在您的节点上购买实例后，收益将显示在这里',
            searchPlaceholder: '搜索用户名/邮箱/实例名...',
            filterAll: '全部类型',
            freePlan: '免费',
            columns: {
                type: '类型',
                amount: '金额',
                status: '状态',
                buyer: '购买者',
                instance: '实例',
                host: '节点',
                package: '套餐',
                plan: '方案',
                remark: '备注',
                time: '时间',
            },
            types: {
                income: '收入',
                unfreeze: '解冻',
                withdraw: '提现',
                deduction: '扣除',
            },
            actionTypes: {
                purchase: '开通',
                renew: '续费',
                upgrade: '升级',
                destroy: '销毁',
                unfreeze: '解冻',
                withdraw: '提现',
                admin_adjust: '管理员调整',
            },
            status: {
                frozen: '冻结中',
                unfrozen: '已解冻',
            },
            unknownInstance: '未知实例',
            unknownUser: '未知用户',
            unknownHost: '未知节点',
        },
        // 每页条数
        perPage: '条/页',
        // 分页按钮
        prevPage: '上一页',
        nextPage: '下一页',
        // 提现记录
        withdrawals: {
            noRecords: '暂无提现记录',
            emptyTitle: '还没有提现记录',
            emptyHint: '当您的可用余额达到最低提现金额后，可以申请提现',
            startEarning: '立即提现',
            columns: {
                amount: '金额',
                actualAmount: '实际到账',
                target: '提现方式',
                status: '状态',
                time: '申请时间',
            },
            target: {
                balance: '面板余额',
            },
            status: {
                pending: '待审核',
                approved: '已通过',
                rejected: '已拒绝',
                completed: '已完成',
            },
        },
        blocks: {
            title: '用户黑名单',
            description: '被拉黑用户无法在开通实例处看到您的托管套餐和方案，也无法新开通您的实例。',
            total: '共 {count} 位用户',
            searchLabel: '搜索站内用户',
            searchPlaceholder: '输入 UID、用户名或邮箱，至少 2 个字符',
            noSearchResults: '没有找到匹配的用户',
            blockedUsers: '已拉黑用户',
            effectHint: '这些用户无法新开通您的托管套餐，已有实例和续费不受影响。',
            emptyTitle: '暂无拉黑用户',
            emptyHint: '可以通过上方搜索添加。',
            block: '拉黑',
            unblock: '解除拉黑',
            blockSuccess: '已加入黑名单',
            unblockSuccess: '已移出黑名单',
        },
        // 提现弹窗
        modal: {
            title: '申请提现',
            amount: '提现金额',
            availableNote: '可用余额：{amount}',
            targetBalance: '提现到面板余额（手续费 {rate}%）',
            manualWithdrawNote: '如需手动提现到指定方式（手续费 10%），请提交工单申请提现托管余额',
            summary: {
                amount: '提现金额',
                fee: '手续费',
                actual: '实际到账',
            },
            cancel: '取消',
            confirm: '确认提现',
            submitting: '提交中...',
        },
        // 错误信息
        errors: {
            minAmount: '最低提现金额为 {amount}',
            exceedBalance: '提现金额超过可用余额',
        },
    },

    vipBenefits: {
        commonMember: '普通会员',
        overviewLabel: 'VIP 福利大厅',
        overviewTitle: '当前等级 {level}',
        overviewDesc: '达到最高 {level}，即可领取下方已解锁等级的全部奖励。请先领完低等级福利，再领取更高等级福利。',
        noVipDesc: '升级 VIP 后可领取等级福利，所有奖品会按等级从低到高展示。',
        availableSummary: '已解锁奖励汇总',
        availableSummaryDesc: '这里汇总当前等级已解锁的全部奖励额度。',
        remainingSummary: '剩余可领取',
        noAvailableReward: '暂无已解锁奖励',
        empty: '暂无 VIP 福利，请稍后再来。',
        levelRewards: 'VIP{level} 奖励',
        levelUnlocked: '已达到该等级',
        levelLocked: '升级后可领取',
        rewardCount: '{count} 个奖品',
        rewardValue: '奖励内容',
        claimProgress: '领取进度',
        claim: '领取',
        claimAll: '一键领取剩余奖励',
        claimingAll: '正在领取...',
        claimed: '已领取',
        pendingDelivery: '待发放',
        upgradeRequired: '待升级',
        claimLowerFirst: '先领 VIP{level}',
        claimSuccess: '领取成功',
        noClaimableReward: '暂无可领取奖励',
        rewardReceived: 'VIP 福利奖励',
        pointsUnit: '积分',
        instanceReward: '套餐实例',
        instanceValue: '{plan} · {quantity} 台 · {days} 天',
        feedback: {
            delivered: '已到账',
            pending: '待发放',
        },
        types: {
            balance: '余额',
            points: '积分',
            instance: '实例',
        },
        summary: {
            unlocked: '已解锁',
            claimable: '可领取',
            claimed: '已领取',
            pending: '待发放',
        },
        status: {
            claimable: '可领取',
            claimed: '已领取',
            locked: '待升级',
            blocked: '先领取 VIP{level}',
            pending: '待发放',
        },
    },

    // 福利系统
    entertainment: {
        title: '福利',
        description: '领取会员福利，管理积分和徽章奖励',
        currentPoints: '当前积分',
        convertPoints: '兑换积分',
        noPointsToConvert: '暂无可兑换积分',
        convertSuccess: '成功兑换 {points} 积分',
        convertFailed: '兑换失败',
        pointsUnit: '分',
        tabs: {
            lottery: '抽奖',
            records: '抽奖记录',
            points: '积分明细',
        },
        mainTabs: {
            vipBenefits: 'VIP 福利',
            lottery: '抽奖',
            badge: '徽章',
            blindbox: '盲盒',
            checkin: '签到',
        },
        comingSoon: '敬请期待',
        blindbox: {
            title: '盲盒',
        },
        checkinSection: {
            title: '每日签到',
        },
        // 抽奖
        spin: '抽奖',
        spinCost: '消耗 {points} 积分',
        spinFailed: '抽奖失败',
        selectLottery: '请选择抽奖活动',
        notEnoughPoints: '积分不足',
        noActiveLotteries: '暂无可用的抽奖活动',
        prizeList: '奖品列表',
        probability: '概率',
        remaining: '剩余',
        // 十连抽
        multiDraw: '十连抽',
        multiDrawAgain: '再次十连',
        multiDrawFailed: '十连抽失败',
        multiDrawResults: '十连抽结果',
        multiDrawStopped: '抽奖提前结束',
        notEnoughPointsForMulti: '积分不足，需要 {required} 积分，当前仅有 {current} 积分',
        totalDraws: '抽奖次数',
        totalPointsSpent: '消耗积分',
        badgeUnit: '枚',
        instanceUnit: '台',
        multiDrawBadgesTitle: '本次十连抽中了徽章',
        multiDrawBadgesSubtitle: '本轮十连共获得 {count} 枚徽章，先看看这次的新收获。',
        continueToMultiResults: '继续查看十连结果',
        // 奖品类型
        prizeTypes: {
            nothing: '再接再励',
            points: '积分',
            balance: '余额',
            badge: '随机徽章',
            instance: '实例',
            cpu: 'CPU资源',
            memory: '内存资源',
            disk: '硬盘资源',
            traffic: '流量资源',
        },
        // 中奖结果
        congratulations: '恭喜中奖！',
        betterLuckNextTime: '再接再励',
        wonPoints: '获得 {points} 积分',
        wonBalance: '获得 ¥{amount} 余额',
        wonBadge: '获得徽章：{badge}',
        wonInstance: '请提交工单领取实例奖励',
        wonCpu: '获得 {value}% CPU，已存入资源池',
        wonMemory: '获得 {value}MB 内存，已存入资源池',
        wonDisk: '获得 {value}MB 硬盘，已存入资源池',
        wonTraffic: '获得 {value}GB 流量，已存入资源池',
        // 抽奖记录
        lotteryName: '活动名称',
        prize: '奖品',
        prizeType: '奖品类型',
        value: '奖励值',
        time: '时间',
        noRecords: '暂无抽奖记录',
        loadRecordsFailed: '加载抽奖记录失败',
        loadLotteriesFailed: '加载抽奖活动失败',
        // 积分明细
        pointsLogType: '类型',
        pointsChange: '变动',
        pointsAfter: '变动后',
        remark: '备注',
        noPointsLogs: '暂无积分记录',
        loadPointsLogsFailed: '加载积分记录失败',
        pointsLogTypes: {
            convert: '消费兑换',
            lotteryWin: '抽奖获得',
            lotterySpend: '抽奖消耗',
            badgeDrawSpend: '徽章随机抽取消耗',
            badgeSelectSpend: '徽章自选消耗',
            adminAdjust: '管理员调整',
            checkin: '签到奖励',
        },
        badges: {
            drawTab: '抽卡',
            myTab: '我的徽章',
            randomTitle: '随机抽取',
            randomHint: '等概率，必中一个徽章',
            randomDescription: '消耗 {points} 积分，所有徽章等概率，必定获得一个徽章副本。',
            randomButton: '随机抽一次（{points} 积分）',
            randomMultiButton: '随机十连（{points} 积分）',
            selectTitle: '自选领取',
            selectHint: '直接选择一个指定徽章',
            selectDescription: '消耗 {points} 积分，从下方直接选择一个想要的徽章。',
            selectButton: '领取当前选中徽章（{points} 积分）',
            multiDrawTitle: '十连抽获得的徽章',
            multiDrawSubtitle: '本次十连共获得 {count} 枚徽章。',
            myTitle: '我的徽章',
            summary: '可用 {available}，已应用 {applied}',
            filterAll: '全部类型',
            ownedCount: '已拥有 {count}',
            empty: '还没有获得任何徽章。',
            statusAvatar: '已应用到头像',
            statusInstance: '已应用到实例',
            statusUnused: '未应用',
            sourceLabel: '来源',
            sourceDraw: '随机抽取',
            sourceLottery: '抽奖获得',
            sourceSelect: '自选领取',
            sourceAdminGrant: '管理员发放',
            obtainedAt: '获得时间',
            currentInstance: '当前实例',
            applyAvatar: '应用到头像',
            applyInstance: '应用到实例图标',
            applyInstanceButton: '应用到实例',
            selectInstance: '选择一个实例',
            unapply: '取消应用',
            selectRequired: '请先选择一个徽章',
            instanceRequired: '请先选择实例',
            drawSuccess: '获得徽章：{badge}',
            selectSuccess: '领取成功：{badge}',
            rewardTitleDraw: '抽卡成功',
            rewardTitleSelect: '领取成功',
            rewardSubtitle: '新徽章已经加入你的收藏，现在就可以前往“我的徽章”应用到头像或实例。',
            rewardSeriesLabel: '所属系列',
            rewardRemainingPoints: '剩余积分',
            rewardDrawAgain: '再抽一次',
            rewardViewMine: '查看我的徽章',
            applyAvatarSuccess: '已应用到头像',
            applyInstanceSuccess: '已应用到实例图标',
            unapplySuccess: '已取消应用',
        },
        // 管理端
        admin: {
            title: '娱乐管理',
            description: '管理抽奖活动、奖品和用户积分',
            tabs: {
                lotteries: '抽奖活动',
                records: '中奖记录',
                users: '用户积分',
                badges: '徽章',
            },
            createLottery: '创建抽奖',
            editLottery: '编辑抽奖',
            lotteryName: '活动名称',
            enterLotteryName: '请输入活动名称',
            lotteryDesc: '描述',
            enterDescription: '请输入描述（可选）',
            costPoints: '消耗积分',
            startAt: '开始时间',
            endAt: '结束时间',
            isActive: '启用',
            enterName: '请输入名称',
            invalidCostPoints: '消耗积分必须大于0',
            createSuccess: '创建成功',
            updateSuccess: '更新成功',
            saveFailed: '保存失败',
            deleteSuccess: '删除成功',
            deleteFailed: '删除失败',
            noLotteries: '暂无抽奖活动',
            loadLotteriesFailed: '加载抽奖活动失败',
            prizes: '奖品',
            totalDraws: '抽奖次数',
            status: '状态',
            active: '已启用',
            inactive: '已停用',
            // 奖品管理
            managePrizes: '管理奖品',
            addPrize: '添加奖品',
            prizeName: '奖品名称',
            prizeType: '奖品类型',
            prizeValue: '奖励值',
            balanceValue: '余额（分）',
            balanceCents: '输入分，如100=1元',
            cpuPercent: '输入CPU百分比',
            memoryMB: '输入内存(MB)',
            diskMB: '输入硬盘(MB)',
            trafficGB: '输入流量(GB)',
            probability: '权重',
            quantity: '数量',
            unlimited: '无限',
            noQuantityForType: '此类型奖品不能设置数量限制',
            replenish: '补充库存',
            remaining: '剩余',
            replenishPlaceholder: '输入补充数量',
            instanceDesc: '实例描述',
            instanceDescPlaceholder: '如：1核/1G/10G SSD',
            noPrizes: '暂无奖品，点击上方按钮添加',
            enterPrizeName: '请输入奖品名称',
            invalidProbability: '权重必须大于0',
            savePrizesSuccess: '奖品保存成功',
            savePrizesFailed: '奖品保存失败',
            // 中奖记录
            user: '用户',
            searchUser: '搜索用户名',
            noRecords: '暂无中奖记录',
            loadRecordsFailed: '加载中奖记录失败',
            prize: '奖品',
            value: '奖励值',
            // 用户积分
            currentPoints: '当前积分',
            totalEarned: '累计获得',
            totalSpent: '累计消耗',
            lastConvertedAt: '最后兑换',
            noUsers: '暂无用户积分数据',
            loadUsersFailed: '加载用户积分失败',
            // 徽章目录
            badgeCatalog: {
                loadFailed: '加载徽章目录失败',
                fillSeriesRequired: '请填写系列 ID、标题、名称和说明',
                seriesUpdated: '系列已更新',
                seriesCreated: '系列已创建',
                saveSeriesFailed: '保存系列失败',
                seriesDeleted: '系列已删除',
                deleteSeriesFailed: '删除系列失败',
                fillBadgeRequired: '请填写徽章 ID、名称、标签、系列和默认图片地址',
                badgeUpdated: '徽章已更新',
                badgeCreated: '徽章已创建',
                saveBadgeFailed: '保存徽章失败',
                badgeDeleted: '徽章已删除',
                deleteBadgeFailed: '删除徽章失败',
                addSeries: '新增系列',
                addBadge: '新增徽章',
                series: {
                    title: '系列',
                    description: '控制前台筛选分组和整组启用状态',
                    add: '新增',
                    all: '全部系列',
                    enabledCount: '{active} / {total} 个启用',
                    empty: '暂无系列',
                    editTitle: '编辑系列',
                    createTitle: '新增系列',
                    id: '系列 ID',
                    sort: '排序',
                    nameZh: '中文名',
                    nameEn: '英文名',
                    titleLabel: '标题',
                    titlePlaceholder: 'SUPREME 尊贵系列',
                    descriptionLabel: '说明',
                    sourceId: '来源 ID',
                    sourceLabel: '来源名称',
                    enable: '启用该系列',
                },
                badges: {
                    title: '徽章',
                    currentFilter: '当前筛选：{name}',
                    empty: '暂无徽章',
                    tableBadge: '徽章',
                    tableSeries: '系列',
                    tableAssetUrl: '图片地址',
                    tableStatus: '状态',
                    tableUsage: '使用',
                    drawable: '可抽取',
                    notDrawable: '不可抽取',
                    usage: '拥有 {ownership} / 头像 {avatar} / 实例 {instance}',
                    editTitle: '编辑徽章',
                    createTitle: '新增徽章',
                    id: '徽章 ID',
                    series: '系列',
                    name: '名称',
                    nameEn: '英文名',
                    fullLabel: '完整标签',
                    fullLabelPlaceholder: '精英 (Elite)',
                    sourceId: '来源 ID',
                    sourceLabel: '来源名称',
                    assetUrl: '默认图片地址',
                    assetUrlPlaceholder: '/badges/dark/elite.svg 或 https://example.com/badge.svg',
                    assetUrlDark: '深色图片地址',
                    assetUrlLight: '浅色图片地址',
                    sort: '排序',
                    enable: '启用该徽章',
                    preview: '预览',
                    previewName: '徽章名称',
                    previewLabel: '完整标签',
                },
            },
            // 通知配置
            notification: {
                title: '中奖通知',
                enabled: '启用通知',
                type: '通知方式',
                conditions: '通知条件',
                notifyBalance: '中余额时通知',
                notifyInstance: '中实例时通知',
                secret: '签名密钥',
                secretPlaceholder: '用于验证 Webhook 请求（可选）',
                fillTelegram: '请填写 Telegram Bot Token 和 Chat ID',
                fillDiscord: '请填写 Discord Webhook URL',
                fillWebhook: '请填写 Webhook URL',
                saveSuccess: '通知配置保存成功',
                saveFailed: '通知配置保存失败',
            },
        },
    },

    // 邮箱模块
    mail: {
        title: '邮箱',
        description: '管理您的专业邮箱服务',
        tabs: {
            my: '我的邮箱',
            buy: '购买邮箱',
            accounts: '邮箱账户',
            dns: 'DNS 配置',
            settings: '设置',
        },
        noSubscription: '您还没有邮箱服务',
        buyNowHint: '立刻购买专业的邮箱服务',
        buyNow: '立即购买',
        subscriptionOverview: '订阅概览',
        expiresAt: '到期时间',
        domainsUsed: '已用域名',
        diskUsed: '已用空间',
        totalSpace: '总空间',
        accounts: '账户',
        plan: '方案',
        domains: '个域名',
        month: '月',
        year: '年',
        renew: '续费',
        myDomains: '我的域名',
        addDomain: '添加域名',
        noDomains: '暂无域名，点击上方按钮添加',
        used: '已用',
        status: {
            active: '活跃',
            expired: '已过期',
            suspended: '已暂停',
        },
        domainStatus: {
            pending: '待验证',
            verified: '已验证',
            suspended: '已暂停',
        },
        selectRegion: '选择服务地区',
        nodeStatus: {
            available: '节点状态: 充足',
            limited: '库存紧张',
        },
        plans: '个方案',
        planDetails: '方案配置详情',
        planTag: '正式版方案',
        allFeaturesIncluded: '包含所有基础及进阶功能',
        pureStorage: '纯净存储空间',
        feature: {
            domains: '支持 {count} 个自定义域名绑定',
            domainStorage: '{count}主域名 {storage}G存储空间',
            unlimitedAliases: '每个域无限个别名',
            unlimitedMailboxes: '每个域无限个邮箱',
            emailLimit: '每个域 600 封电子邮件/小时',
            emClientPro: '免费的 eM Client Pro 许可证',
            catchAll: '支持 Catch All',
            antispam: '自研反垃圾邮件网关',
            protocols: '支持 SMTP/IMAP/POP3 全协议',
            aliases: '无限邮箱别名设置',
        },
        otherOptions: '其他选项',
        verify: '验证',
        checkout: {
            title: '结算汇总',
            region: '选定地区',
            serviceStatus: '服务状态',
            instant: '即时开通',
            amount: '应付金额',
            confirm: '立即开通',
            securePayment: '加密支付保障，支持随时申请退款',
            balanceRequired: '需要先充值余额，才能购买',
        },
        help: {
            title: '遇到问题？',
            desc: '如果您在购买过程中遇到任何技术问题，请提交工单联系支持人员。',
        },
        selectPlan: '选择方案',
        storage: '存储空间',
        unlimitedAccounts: '无限邮箱账户',
        orderConfirm: '订单确认',
        billingCycle: '计费周期',
        monthly: '月付',
        yearly: '年付',
        totalPrice: '总价',
        confirmRenew: '确认续费',
        confirmPurchase: '确认购买',
        renewSubscription: '续费订阅',
        renewMonths: '续费时长',
        monthlyPrice: '月单价',
        yearlyPrice: '年单价',
                alreadyPurchased: '您已购买该地区的邮箱服务',
                alreadyPurchasedDesc: '每个用户仅可购买一个地区的邮箱服务。如需更换方案，请先到「我的邮箱」进行管理。',
                viewMySubscription: '查看我的订阅',
        renewDuration: '续费时长',
        months: '个月',
        renewSuccess: '续费成功',
        selectPlanFirst: '请先选择一个方案',
        purchaseSuccess: '购买成功',
        domainName: '域名',
        domainPlaceholder: '例如：example.com',
        domainHint: '请输入您拥有的域名，添加后需要配置 DNS 记录验证',
        domainRequired: '请输入域名',
        domainAdded: '域名添加成功，请配置 DNS 记录',
        accountsDescription: '管理此域名下的邮箱账户',
        createAccount: '创建账户',
        verifyFirst: '请先验证域名 DNS 配置后再创建邮箱账户',
                completeDnsFirst: '请先完成 DNS 配置验证，邮箱服务才能正常使用',
                goDnsConfig: '前往配置',
                adminAccount: '管理员账号',
                adminAccountDesc: '此账号在添加域名时自动创建，可用于登录 Webmail 管理邮箱',
                webmailUrl: '登录地址',
                helpDoc: '查看帮助文档',
                noAdminAccount: '管理员账号信息不可用',
        refreshStatus: '刷新状态',
        noAccounts: '暂无邮箱账户',
        admin: '管理员',
        resetPassword: '重置密码',
        deleteAccountConfirm: '确定要删除邮箱账户 {email} 吗？此操作不可恢复。',
        accountDeleted: '账户已删除',
        dnsDescription: '请在您的域名 DNS 管理面板中添加以下记录',
        recordType: '记录类型',
        hostRecord: '主机记录',
        recordValue: '记录值',
        emailAddress: '邮箱地址',
        txtVerification: 'TXT 验证记录',
        pending: '待验证',
        verified: '已验证',
        mxRecords: 'MX 记录',
        cnameRecords: 'CNAME 记录',
        spfRecord: 'SPF 记录',
        dkimRecord: 'DKIM 记录',
        optional: '可选',
        required: '必需',
        recommended: '推荐',
        dnsHint: {
            txt: '域名验证记录，添加后点击“刷新状态”验证',
            mx: '邮件交换记录，数字表示优先级（数字越小优先级越高）',
            cname: '别名记录，用于 Webmail 和自动发现功能',
            spf: '发件人策略框架，防止邮件伪造，提高送达率',
            dkim: '域名密钥认证，提高邮件可信度',
            dmarc: '域名邮件认证策略，防止铳鱼和欺诈邮件',
        },
        domainInfo: '域名信息',
        createdAt: '创建时间',
        verifiedAt: '验证时间',
        dangerZone: '危险区域',
        deleteDomainWarning: '删除域名将同时删除该域名下所有邮箱账户和数据，此操作不可恢复。',
        deleteDomain: '删除域名',
        deleteDomainConfirm: '确定要删除域名 {domain} 吗？此操作将删除所有相关数据且不可恢复。',
        domainDeleted: '域名已删除',
        domainVerified: '域名验证成功',
        domainNotVerified: 'DNS 记录尚未生效，请稍后重试',
        username: '用户名',
        password: '密码',
        displayName: '显示名称',
        diskLimit: '空间配额',
        setAsAdmin: '设为域名管理员',
        usernamePlaceholder: '例如：admin',
        passwordPlaceholder: '至少8位字符',
        passwordHint: '密码至少8位，建议包含大小写字母和数字',
        displayNamePlaceholder: '例如：张三',
        accountFieldsRequired: '请填写用户名和密码',
        accountCreated: '账户创建成功',
        accountUpdated: '账户更新成功',
        passwordMinLength: '密码至少8位字符',
        passwordReset: '密码重置成功',
        editAccount: '编辑账户',
        newPassword: '新密码',
        newPasswordPlaceholder: '输入新密码',
    },
}
