/* eslint-disable prettier/prettier */
export default {
  setup: {
    connect: {
      title: '设置 Blocklet Server',
      scan: '使用以下方法成为此节点的所有者',
      confirm: '请在 DID Wallet 上确认',
      success: '你已经成功成为节点的所有者'
    },
    keyPair: {
      title: '生成钥匙对',
      scan: '用你的 DID Wallet 为这个 Blocklet 生成钥匙对',
      confirm: '请在 DID Wallet 上确认',
      success: '你的钥匙对已经被安全存储'
    },
    verify: {
      title: '需要节点所有权证书',
      scan: '用你的 DID Wallet 提供所有权证书',
      confirm: '请在 DID Wallet 上确认',
      success: '你已经成功成为节点的所有者'
    },
    accept: {
      title: '接收节点需要所有权证书',
      scan: '用你的 DID Wallet 提供所有权证书',
      confirm: '请在 DID Wallet 上确认',
      success: '你已经成功成为节点的所有者'
    },
    title: '设置节点',
    steps: {
      eula: '最终用户许可协议',
      eulaFooter: '我已阅读并同意最终用户许可协议的条款',
      connect: '链接所有者的 DID Wallet ',
      verify: '验证所有权',
      basicSettings: '基础设置',
      launchApp: '启动应用',
      complete: '完成'
    },
    congratulation: '恭喜, 您的节点安全可用!',
    redirectButton: '查看节点仪表盘'
  },
  login: {
    login: '登录',
    termsOfUse: '服务条款',
    agreeTermsOfUse: '我已阅读并同意',
    loginTo: '连接 DID Wallet ',
    description: '只有节点的所有者和成员可以访问仪表盘',
    switchDid: {
      title: '切换账户',
      scan: '请使用以下方法添加账户',
      confirm: '在 DID Wallet 中确认切换',
      success: '切换成功'
    },
    switchSpecifiedDid: {
      title: '切换账号',
      scan: '你需要切换账号至 {did} 才能完成后续的操作',
      confirm: '在 DID Wallet 中确认切换',
      success: '切换成功'
    },
    connect: {
      title: '登录',
      scan: '只有节点所有者和成员才能访问控制面板',
      confirm: '在您的账户中确认',
      success: '登录成功'
    },
    verify: {
      title: '验证访问',
      scan: '连接你的 DID Wallet 以展示所有者或管理员通行证',
      confirm: '在你的 账户 中确认',
      success: '您的访问已验证',
      abort: '访问验证已终止',
      description: '您需要提供 {roles} 通行证才能执行此操作，在 1 小时的非活动状态后才会再次要求验证。',
      descriptionForDestroy: '您需要提供 {roles} 通行证以继续此操作以确保安全。'
    }
  },
  acceptServer: {
    title: '使用 Owner NFT 接收节点',
    tooltip: '如果你收到了 Owner NFT，你可以通过这个链接申请你的节点所有者通行证'
  },
  didConnect: {
    genKeyPair: {
      title: '创建应用 DID',
      scan: '使用以下方法生成一个应用 DID',
      success: '生成应用 DID 成功',
      successDesc: '生成应用 DID 已经成功完成，请继续您的操作 (后续发布需要使用生成该 DID 的钱包来进行操作)。'
    },
    common: {
      invalidSession: '会话无效',
      invalidSessionDesc: '会话不存在或已经过期',
      connectionError: '连接错误'
    }
  },
  exchangePassport: {
    title: '用 NFT 来获得通行证',
    success: '你已经成功获得通行证，并自动登录',
    tooltip1: '如果你拥有来自以下集合的 NFT，',
    tooltip2: '点击这里获得通行证',
    dialog: {
      title: '使用 NFT 获取通行证',
      scan: '连接 DID Wallet 出示 NFT 以获得通行证',
      confirm: '在钱包中选择 NFT',
      success: '通行证换取成功'
    },
    login: '登录'
  },
  payablePassport: {
    title: 'Purchase passport with payment',
    tooltip: 'If you do not have a passport, you can purchase a passport with this link.'
  },
  sidebar: {
    dashboard: '仪表盘',
    blocklets: 'Blocklets',
    console: '试验台',
    settings: '设置'
  },
  system: {
    total: '总计',
    used: '已使用',
    free: '空闲',
    cores: '核数',
    instances: '实例数'
  },
  common: {
    invalid: '无效',
    about: '关于',
    access: '访问',
    accessKey: '访问秘钥',
    action: '操作',
    actions: '操作',
    add: '添加',
    address: '地址',
    afterTime: '{time}后',
    allow: '允许',
    alreadyExist: '已经存在',
    approve: '同意',
    approved: 'Approved',
    appUrl: 'APP 链接',
    auditLogs: '审计记录',
    author: '作者',
    avatar: '头像',
    back: '返回',
    basic: '基础',
    basicInfo: '基础信息',
    profile: '信息',
    bind: '绑定',
    blocklet: 'Blocklet',
    blocklets: 'Blocklets',
    blockletsStorage: 'Blocklets 存储',
    cacheStorage: '缓存存储',
    cancel: '取消',
    category: '日志分类',
    certificate: '证书',
    click: '点击复制',
    close: '关闭',
    selectAll: '全选',
    unselectAll: '取消全选',
    collapseAll: '收起全部',
    community: '社区 URL',
    complete: '完成',
    componentBasicInfo: 'Blocklet 基础信息',
    components: 'Blocklets',
    config: '配置',
    configuration: '配置',
    appearance: '外观',
    configNavigation: '导航',
    configSuccess: '设置成功',
    confirm: '确认',
    connect: '连接',
    console: '控制台',
    continue: '继续',
    continueWith: '确认继续',
    copiedTip: '已复制',
    copyAndClose: '复制并关闭',
    copyTip: '点击复制',
    coreStorage: '核心存储',
    cpu: 'CPU',
    create: '创建',
    createSuccess: '创建成功',
    created: '创建于',
    createdAt: '创建时间',
    createdBy: '创建人',
    dAddress: '去中心化地址(DID)',
    dataStorage: '本地数据存储',
    delConfirm: '删除',
    delConfirmDescription: '确认删除 {data}？',
    delete: '删除',
    dependents: '被依赖',
    description: '描述',
    detail: '详情',
    did: 'DID',
    disk: '磁盘',
    diskInfo: '磁盘信息',
    docker: 'Docker？',
    documentation: '文档手册',
    domain: '域名',
    downgradeTo: '降级到',
    download: '下载',
    downloading: '下载中',
    edit: '编辑',
    email: '邮箱',
    phone: '电话',
    empty: '暂无',
    emptyData: '未找到结果',
    enable: '启用',
    engine: '引擎',
    env: '环境',
    environment: '环境变量',
    expandAll: '展开全部',
    expired: '已过期',
    expires: '过期时间',
    export: '导出',
    externalIp: '公网 IP',
    failed: '失败',
    filter: '筛选',
    fingerprint: '指纹',
    finish: '完成',
    forbid: '禁止',
    free: '免费',
    general: '通用',
    gitpod: 'Gitpod？',
    goEULA: '点击查看"最终用户许可协议"',
    group: '分组',
    image: '镜像内?',
    install: '安装',
    installed: '已安装',
    installedAt: '安装时间',
    installSuccess: '安装成功',
    installing: '安装中',
    internalIp: '内网 IP',
    introduction: '介绍',
    invite: '邀请',
    inviting: '邀请中',
    ip: 'IP',
    isPublic: '公开',
    issue: '颁发',
    issuer: '颁发者',
    item: '项',
    joined: '已加入',
    key: '键',
    lastPublishedAt: '发布时间',
    launcher: '启动器信息',
    leavePageTip: '是否确定离开当前页面？',
    link: '链接',
    loading: '加载中',
    log: '查看日志',
    logStorage: '日志存储',
    login: '登录',
    logo: '图标',
    logout: '退出',
    logs: '日志',
    manageTeam: '管理团队',
    marketplace: '市场',
    member: '成员',
    members: '成员',
    orgs: '组织',
    memory: '内存',
    meta: '元数据',
    analytics: '访问统计',
    runtime: '运行监控',
    traffic: '流量分析',
    less: '更少',
    more: '更多',
    mountPoint: '挂载点',
    name: '名称',
    next: '下一步',
    no: '否',
    noData: '暂无数据',
    notice: '请确认下面的信息',
    noticeTitle: '提示',
    notification: '通知',
    open: '打开',
    management: '管理',
    os: '操作系统',
    overview: '概览',
    owner: '所有者',
    page404: '404 页面',
    passport: '通行证',
    permission: '权限',
    port: '端口',
    pre: '上一步',
    preferences: '偏好',
    preview: '预览',
    protected: '受保护',
    protocol: '协议',
    purchase: '购买',
    readMore: '更多',
    redirect: '重定向',
    redirectCode: '重定向状态码',
    redirectPermanently: '永久重定向',
    redirectTemporary: '临时重定向',
    redirectUrl: '重定向 URL',
    rewriteUrl: '重写到 URL',
    rewrite: '重写',
    release: '发布',
    reject: '拒绝',
    reload: '优雅重启',
    remark: '备注',
    remove: '删除',
    removeSuccess: '删除成功',
    renew: '续期',
    reportIssue: '问题反馈',
    required: '必需的',
    requiredErrorText: '{name}是必填的',
    resource: '资源',
    restart: '重启',
    restore: '还原',
    retry: '重试',
    revoke: '撤销',
    role: '角色',
    running: '运行中',
    runtimeInfo: '运行信息',
    save: '保存',
    saveChanges: '保存',
    saveSuccess: '保存成功',
    scheduleFailed: '加入任务队列失败',
    scheduleSuccess: '成功加入任务队列',
    scope: '范围',
    screenshot: '屏幕截图',
    search: '搜索',
    security: '安全',
    serverDid: '服务器 DID',
    serverVersion: '服务器版本',
    setting: '设置',
    start: '启动',
    status: '状态',
    stop: '停止',
    storage: '存储',
    backup: '备份',
    store: '商店',
    succeeded: '成功',
    subscription: '订阅',
    support: '支持网址或邮箱',
    switch: '切换',
    team: '团队',
    the: '此',
    timeAgo: '{time}前',
    title: '名称',
    type: '类型',
    unavailable: '不可访问',
    update: '更新',
    updateAvailable: '可升级到新版本 v{version}',
    updatedAt: '更新时间',
    updatedBy: '更新人',
    upgrade: '升级',
    upgradeTo: '升级到',
    upgrading: '升级中',
    uptime: '运行时长',
    url: 'URL',
    valid: '有效',
    value: '值',
    version: '版本号',
    visit: '访问',
    waiting: '等待中',
    webhook: '应用集成',
    yes: '是',
    invalidParam: '无效的参数',
    launch: '启动',
    price: '价格',
    redirecting: '跳转中',
    error: '错误',
    reminder: '提醒',
    normal: '正常',
    gateway: '网关',
    verifyNFT: '验证凭证',
    errorMessage: '错误信息：',
    slugifyHint: '最终生效的挂载点是: {value}',
    strategy: '策略',
    auto: '自动',
    manual: '手动',
    progress: '进行中',
    fileCount: '文件数量',
    fileSize: '文件大小',
    time: '时间',
    startTime: '开始时间',
    endTime: '结束时间',
    timeoutError: '超时错误',
    tags: '标签',
    connectToStore: '连接 Store',
    uploaded: '已上传',
    upload: '上传',
    blockletStudio: 'Studio',
    visitStore: '访问 Store',
    reconnect: '重新连接',
    change: '更改',
    sourceApp: '所属应用',
    disconnect: '断开连接',
    visitTarget: '访问{name}',
    upgradeServer: '升级服务器',
    display: '外观',
    requiredInputPlaceholder: '请输入 {name}',
    refresh: '刷新',
    moveUp: '上移',
    moveDown: '下移',
    enabled: '已启用',
    disabled: '已禁用',
    homepage: '主页',
    buy: '购买',
    view: '查看',
    homepageTip: '主页或演示 URL',
    repository: '代码仓库',
    expand: '展开',
    collapse: '收起',
    all: '全部',
    notificationRecords: '通知',
    unrecordedUser: '未记录的名称',
    unrecordedRole: '未记录角色',
    auditLogsSearch: '搜索操作或内容',
    optional: '可选',
    bugOrConnectDomain: '购买或配置已有域名',
    bugOrConnectDomainTip: '域名是你在互联网上网站的唯一地址。 你可以从DID Names或任何域名注册商购买新域名，或者配置你已拥有的现有域名。',
    connectExistingDomain: '配置已有域名',
    domains: '域名',
    didDomains: 'DID 域名',
    didDomainsDescription: '以下是由 DID:Names 服务自动管理的域名。',
    systemDomains: '默认域名',
    systemDomainsDescription: '以下是由系统自动分配的默认域名。这些域名可以正常访问，但仅供测试使用，请勿分享给您的客户。',
    manualDomains: '我的域名',
    manualDomainsDescription: '以下是由您手动配置指向此处的域名，但它由自己的域名提供商进行管理。',
    timeInfo: '时间',
    operator: '操作者',
    inviter: '邀请者',
    clear: '清除',
    ok: 'OK',
    minutes: '分钟',
    hours: '小时',
    hour: '小时',
    days: '天',
    day: '天',
    weeks: '周',
    months: '月份',
    custom: '自定义',
    environments: '环境',
    sites: '站点',
    active: '活跃',
    backupTime: '备份时间',
    lastUsedAt: '上次使用时间',
    expiredAt: '过期日期',
    createdVia: '通过',
    neverExpired: '从不',
    baseInfo: '基本信息',
    otherInfo: '更多信息',
    lightMode: '浅色模式',
    darkMode: '深色模式',
    advancedConfig: '高级',
    document: '文档',
    mcpServers: 'MCP 服务器',
    generate: '生成',
    copy: '复制',
    copied: '已复制',
    userSessions: '用户会话'
  },
  blocklet: {
    external: '外部',
    notFound: '应用没有找到，可能已经被删除',
    installFromMarket: '从应用商店安装',
    installFromUrl: '通过 URL 安装',
    installFromCreate: '创建 Blocklet',
    installFromDiskBackup: '从此 Server 还原',
    installedAt: '安装时间',
    internal: '内部',
    startedAt: '启动时间',
    stoppedAt: '停止时间',
    urlEmptyTip: '无访问地址，',
    goToAddRule: '立即添加',
    services: '暴露的服务',
    upstreamPort: '上游端口',
    noService: '暂无服务',
    appId: '应用 DID',
    appPid: '永久性 DID',
    whyNeedAppPid: '如果你的应用曾经迁移过，永久性 DID 是最初安装这个 Blocklet 时产生的 DID',
    alsoKnownAs: '曾用 DID',
    skSource: '安装钱包',
    reloadSuccess: '应用重启成功',
    statusTip: '应用{status}',
    initialUptime: '少于1分钟',
    dashboard: '应用控制台',
    noComponent: '应用没有组件，无法启动',
    action: {
      stopDescription: '停止该 Blocklet 将会使页面不可以访问，可能会导致使用它的用户出现错误',
      stopComponentDescription: '停止该组件将会使页面不可以访问，可能会导致使用它的用户出现错误',
      confirmStop: '是的，停止',
      cancelDownloadDescription: '取消下载 {name} ？',
      removeApplicationDescription: '如果没有备份数据，删除应用将会删除所有数据，包括应用运行时产生的所有数据',
      removeApplicationAfterBackup: '备份后删除应用。 需要时您可以从此服务器恢复该应用',
      removeApplicationComplete: '直接删除应用程序和数据',
      removeComponentDescription: '如果没有备份数据，删除该组件将会删除所有数据，包括组件运行时产生的所有数据',
      removeComponentKeepData: '保留该组件的数据，只删除组件',
      removeComponentComplete: '删除组件和数据',
      confirmRemove: '是的, 删除',
      upgradeDescription: '升级 Blocklets 可能会导致其短暂不可用，是否要继续？',
      confirmUpgrade: '是的，升级吧',
      confirmRestart: '是的，重启吧',
      restartDescription: '服务会短暂暂停，并且有可能因为变更了配置无法启动',
      confirmComponentRemove: '是的，刪除它'
    },
    dev: {
      modeTip: '请将节点切换至 DEBUG 模式'
    },
    fromUrl: {
      title: '安装应用',
      label: '应用Meta URL',
      description: 'URL 应指向应用的 Meta 文件。如果需要指向本地文件，请加上 file:// 前缀，如：file:///Users/foo/blocklet.json。',
      confirm: '安装',
      step0: '输入 URL',
      step1: '确认 Meta 信息',
      existTipPrefix: '已存在相同 DID 的应用， 版本为',
      existTipSuffix: '，请安装更高版本。'
    },
    index: {
      tableTitle: '管理已安装 Blocklets',
      noBlocklet: '节点中还没有 Blocklet, 您可以从 Blocklet Store 中安装.'
    },
    config: {
      changeImageTip: '提示：如果想更改图片，请点击预览图片进行更改。',
      name: '应用名称',
      description: '应用描述',
      logoSquare: '应用 Logo',
      logoRect: '网站 Logo',
      logoRectDesc: '使用于: 网站页眉和页脚，未配置则回退到应用 Logo',
      logoFavicon: 'Favicon',
      logoFaviconDesc: '使用于：浏览器地址栏和标签页，未配置则回退到应用 Logo',
      clusterSize: '以 Cluster 模式启动时的实例数量',
      copyrightOwner: '版权所有者',
      copyrightYear: '版权 年份',
      advanced: '高级配置',
      deletable: {
        name: '删除保护',
        enable: '此应用当前不可被删除',
        disable: '此应用当前可以被删除'
      },
      walletType: {
        name: '钱包类型',
        description: '应用钱包类型，会影响派生出来的 DID'
      },
      languages: '支持的语言',
      selectLanguagesTip: '通过删除再添加来调整顺序',
      languagesSearch: '搜索国家的本地名称、英文名称或ISO代码..',
      passportColor: '通行证颜色',
      appUrl: '应用访问地址',
      access: {
        title: '谁能访问？',
        description: '选择你希望如何控制对你的应用程序的访问。',
        useDefault: '使用该应用默认配置',
        defaultDescription: '使用应用的默认配置',
        whoCanAccess: {
          all: {
            title: '面向所有人',
            description: '任何人都可以访问应用而不需要身份验证。'
          },
          owner: {
            title: '仅限所有者访问',
            description: '仅限拥有者访问应用。'
          },
          invited: {
            title: '仅限受邀访问',
            description: '只有受邀成员可以访问。'
          }
        },
        publicToStore: '在 Store 公开',
        publicInstanceTip: '此应用的访问地址将展示在 Store 中（同时也会展示你的 DID，用于接受捐赠）',
        updatedTip: '访问控制已修改'
      },
      changedTip: '配置已更新，请重启应用',
      missingRequired: '缺少启动应用的必填项',
      gotoFix: '去修复',
      environment: {
        key: '配置键',
        value: '配置值',
        keyValueRequired: '键和值不能为空',
        invalidKey: '键不能以 BLOCKLET_ 或 COMPONENT_ 开头',
        deleteForbidden: '该配置项是必填项，不能删除',
        tip: '包含 BWA_ 前缀的配置项不应该包含敏感信息，因为他们会被发送到前端页面'
      },
      dangerZone: '危险操作',
      sharedToAllComponents: '将共享给所有组件',
      session: {
        ttl: '如果用户在此网站上没有任何活动 {day} 天，将被要求重新登录',
        day: '{day} 天',
        days: '{day} 天',
        period: '会话有效期',
        profile: '用户个人资料要求',
        cacheTtl: '用户会话数据的缓存持续时间（以秒为单位）',
        fullNameEnabled: '登录时请求用户名（默认启用）',
        avatarEnabled: '登录时请求用户头像（默认启用）',
        emailEnabled: '在登录时请求用户电子邮箱',
        emailRequireVerified: '要求用户在登录前验证电子邮箱',
        emailRequireUnique: '要求用户电子邮箱在所有用户中是唯一的',
        phoneEnabled: '在登录时请求用户电话号码（目前不支持）',
        phoneRequireVerified: '在登录前要求用户验证电话号码',
        phoneRequireUnique: '要求用户电话号码在所有用户中是唯一的',
        emailTrustOauthProviders: '信任OAuth提供商进行电子邮箱验证状态',
        enableDomainBlackList: '启用电子邮箱域黑名单（拒绝列出的电子邮箱域）',
        enableDomainWhiteList: '启用电子邮箱域白名单（仅允许列出的电子邮箱域登录）',
        addDomain: '添加源以获取列表（纯文本格式，每行一个域名）',
        enableBlacklist: '启用登录令牌撤销功能',
        experimentalSettings: '实验性设置'
      },
      clearCache: {
        name: '缓存管理',
        purpose: '管理缓存在网关和服务中的文件',
        title: '确认清除缓存？',
        action: '清除缓存',
        success: '成功清除了 {count} 个缓存条目',
        description: '您确定要清除缓存在网关和服务中的文件吗？此操作可能会在短期内导致轻微的性能降低。'
      },
      tenantMode: {
        name: '多租户模式',
        multiple: '该应用在多租户模式下运行，每个租户的数据应该是隔离的',
        single: '该应用运行在单租户模式下，所有数据都是共享的'
      },
      splashPortrait: '启动画面',
      splashLandscape: '横屏缩略图',
      splashPortraitDesc: 'ArcSphere 应用启动时显示。推荐使用 PNG 或 JPG 格式，纵向比例为 9:16，横向比例为 16:9（最大 5MB）',
      rotateSessionKey: {
        name: '会话密钥轮换',
        purpose: '会话 salt 是用于增强会话令牌安全性的随机值。点击按钮手动旋转会话 salt，以帮助降低登录令牌被盗的风险。',
        title: '确认会话密钥轮换吗?',
        action: '轮换密钥',
        success: '会话密钥轮换成功',
        description: '你确定要轮换会话密钥吗？此操作将使所有现有的登录令牌失效，并强制用户重新登录，包括你自己的登录令牌。'
      },
      ogImage: 'Open Graph 背景',
      ogImageDesc: '使用于：社交媒体分享背景',
      migrate: {
        button: '更新应用 DID',
        title: '确认更新应用 DID',
        description: '如果您使用服务器管理的钱包启动，您可以将应用程序 DID 更改为您自己的钱包。',
        confirm: '您确定要更新应用 DID 吗？此操作将使所有现有会话失效，并强制用户重新登录，包括您自己的会话。'
      },
      vault: {
        name: '冷钱包 DID',
        title: '设置冷钱包',
        desc: '使用冷钱包为这个 Blocklet 管理的资金增加一层额外的安全保障。',
        tip: '输入冷钱包地址继续，你需要证明冷钱包地址的所有权才能使用。',
        address: '冷钱包地址',
        verified: '冷钱包已验证',
        current: '当前冷钱包',
        error: {
          invalid: '冷钱包地址必须是有效的 DID',
          holder: 'Vault地址必须是区块链上有效的代币持有者，不支持token/asset/factory/stake地址。',
          duplicate: '此冷钱包地址已被使用，请使用其他地址',
          appDid: '不能使用应用 DID 作为冷钱包地址，请使用不同的地址'
        },
        role: '账户类型',
        firstSeen: '首次见到',
        lastSeen: '上次见到',
        migratedFrom: '迁移自',
        migratedTo: '迁移到',
        commit: {
          title: '验证冷钱包所有权',
          scan: '使用以下方法以验证冷钱包的所有权',
          confirm: '确认使用 DID Wallet',
          success: '冷钱包配置成功'
        },
        approve: {
          title: '批准冷钱包变更',
          byOwner: '使用 Blocklet 所有者签名以批准更改',
          byLast: '使用上个冷钱包签名以批准更改',
          confirm: '在 DID Wallet 上确认',
          success: '冷钱包变更已批准'
        }
      },
      baseInfo: '应用信息',
      baseInfoDesc: '这里可以设置网站的基本信息。',
      logoSettings: '视觉信息',
      logoSettingsDesc: '塑造独特的品牌形象，提升网站在各种场景下的辨识度和视觉吸引力。',
      languagesDesc: '使用于：访客语言选择',
      nameDesc: '使用于：DID Connect 头部，浏览器标签页，网站页脚，SEO 和 OpenGraph',
      descriptionDesc: '使用于：SEO 和 OpenGraph',
      logoSquareDesc: '用于：用户身份验证对话框页脚和 <b>DID Wallet</b> 应用列表',
      logoDesc: '推荐尺寸：{width} * {height} 像素',
      splashDesc: 'ArcSphere 应用启动画面 (如果已配置，将在 <b>ArcSphere</b> 中显示)\n\n纵向模式：\n比例：9:16\n\n横向模式：\n比例：16:9',
      copyrightDesc: '使用于：网站页脚',
      appUrlDesc: '使用于：网站地图和社交分享'
    },
    overview: {
      source: '来源',
      deployedFrom: '部署源',
      accessControl: '访问控制',
      viewInStore: '在商店中查看'
    },
    diskInfo: {
      empty: '无法获得磁盘信息',
      appDir: '应用目录',
      dataDir: '数据目录',
      logDir: '日志目录',
      cacheDir: '缓存目录'
    },
    runtimeInfo: {
      noRunning: '当应用运行时才可以获得运行信息！',
      memoryUsage: '内存',
      cpuUsage: 'CPU',
      uptime: '启动时长',
      port: '端口',
      processId: '进程 ID'
    },
    dist: {
      downloadLink: '下载地址',
      verify: '校验信息'
    },
    status: {
      added: '已添加',
      waiting: '等待中',
      downloading: '下载中',
      extracting: '提取中',
      installing: '安装中',
      upgrading: '升级中',
      installed: '已安装',
      created: '已创建',
      starting: '启动中',
      running: '运行中',
      stopping: '停止中',
      stopped: '已停止',
      error: '错误',
      deleting: '删除中',
      corrupted: '已损坏',
      purchased: '已购买',
      purchasing: '购买中...',
      verifying: '验证中...',
      resource: '资源'
    },
    list: {
      download: '下载数',
      star: '收藏数',
      searchPlaceholder: '按 Blocklet 名称或 DID 搜索'
    },
    component: {
      container: '全局配置',
      showContainer: '显示全局配置',
      didSpaceConfig: '配置 DID Spaces',
      didSpaceConfigTip: '完成以下授权流程，即可将应用数据存储到 DID Spaces 中',
      didSpaceConnected: '正在授权存储到：{endpoint}',
      checkUpdateTitle: '检查更新',
      updateTitle: '更新 Blocklet',
      noUpdate: '没有需要更新的 Blocklet',
      add: '添加 Blocklet',
      selectComponent: '选择 Blocklet',
      selectRegistry: '选择应用商店',
      selectRegistryTip: '您可以切换应用商店以查看更多 Blocklet',
      selectInstance: '选择实例',
      selectInstanceTip: '您可以选择已有实例 或 创建新的实例。已有实例将使用之前保存的配置和数据',
      newInstance: '创建新实例',
      noComponent: '暂无 Blocklets',
      mountPoint: 'Blocklet 的挂载点是什么？',
      mountPointTip: "如果你填写了 '/my-prefix'，那么所有以其为前缀的请求都会被转发到配置的 Blocklet",
      delete: '删除 Blocklet',
      deleteDescription: '删除后此 Blocklet 将无法访问。确认删除？',
      purchase: '需要支付',
      tip: {
        stopBlocklet: '请先停止运行应用',
        requiredBy: '{name} 需要该 Blocklet'
      },
      choose: '选择',
      upgrade: '升级',
      addWithName: '将 Blocklet 添加到 {name}',
      installed: '已安装',
      installingTip: '正在安装 Blocklet 中, 请等待安装结束',
      installingCanCloseWindowTip: '正在后台安装 Blocklet 中, 您可以放心关掉此窗口',
      installSuccessTip: '恭喜，组件安装成功！',
      missDownloadTokenTip: '缺少下载凭证，无法下载',
      purchaseComponentSecondCheckTip: '请在 钱包 提供应用购买凭证',
      installComponentError: '安装组件遇到错误，请重试',
      downloadComponentError: '下载组件遇到错误，请重试',
      addComponentTip: {
        introduction: '欢迎来到添加组件向导',
        isPurchase: '您需要验证凭证才能添加 <b>{name}</b> 为组件；',
        belowInformation: '下面为该组件的信息：',
        verifyNFT: '请选择验证凭证方式',
        config: '请填写组件的相关配置',
        environment: '请填写组件的环境变量',
        fromUrl: '从 URL 添加 Blocklet',
        fromUpload: '从上传添加 Blocklet',
        uploadFailed: '上传失败',
        allowedFileTypes: '允许上传的文件类型：{types}'
      },
      addNext: '添加 {name}',
      upgradeNext: '升级 {name}',
      setting: '参数设置',
      noDependencies: '{name}没有任何依赖',
      relatedComponents: '相关 Blocklets',
      required: '必须',
      upgradeAvailable: '可更新',
      needBuy: '需购买',
      isOfficial: '官方认证'
    },
    router: {
      urlPath: 'URL 路径',
      securitySetting: '安全设置',
      noRunning: '应用当前未启动。无法通过以下地址访问！',
      checkUrlAccessible: '检查地址的是否可访问',
      urlInaccessible: '可能因为网络的原因，该地址暂时无法访问',
      noAccessibleUrl: '没有可访问的地址',
      domainLockTooltip: '无法编辑由系统生成的域名',
      urlLockTooltip: '无法编辑由系统生成的 URL 路径',
      showAllDomains: '显示所有域名',
      showAllDIDs: '显示所有 DID',
      currentDomainTip: '你正在通过该域名访问当前页面'
    },
    export: {
      title: '导出应用',
      name: '包名称',
      nameTip: 'e.g. "my-blocklet-name" or "@my-scope/blocklet-name"',
      result: '接下来',
      exportSource: '导出源代码',
      success: '应用导出成功',
      resultTipStart: '使用',
      resultTipEnd: '你可以在几分钟内构建并发布这个应用',
      uploadedComponentTip: '无法导出直接上传的组件：'
    },
    migrate: {
      title: '迁移应用',
      scan: '用你的 DID Wallet 为这个应用生成钥匙对',
      confirm: '请在 DID Wallet 上确认',
      success: '你的应用已迁移成功，页面将在 {sec} 秒后刷新',
      intro: {
        l1: '点击这里',
        l2: '迁移应用到新版（迁移完成之前组件升级将被禁用）',
        l3: '1. 应用的钥匙对将完全由钱包管理',
        l4: '2. 应用的数据将平滑迁移，不会丢失',
        l5: '3. 新的结构将为你组合应用提供更大的灵活性',
        l6: '4. 在组件有新版之前，请不要在迁移之后随意变更组件挂载点'
      },
      tip: {
        duplicate: '发现重复的组件 {name}，请删除无用组件并重新迁移',
        running: '迁移前请先停止应用'
      }
    },
    error: {
      isRunning: '应用正在运行，请先停止运行',
      isInProgress: '应用正在进行中，请等待完成'
    },
    publish: {
      createResource: '创建资源',
      addResource: '添加 Blocklet',
      productTitle: 'Blocklet 详情',
      versionTitle: '版本',
      imgTitle: '图片资源',
      resourceTitle: '内容',
      blockletEmptyTip: '这里没有任何 Blocklet',
      createBlockletTip: '你可以使用此应用的资源，组件，配置制作新的 Blocklet',
      createBlocklet: '新建 Blocklet',
      componentNotRunning: 'Blocklet {name} 没有运行，请先启动它',
      resourceEmptyTip: '没有可用的资源',
      releaseEmptyTip: '这里没有任何发布',
      createReleaseTip: '您可以创建 Blocklet 新版本，在发布中包含说明和资源，以供其他人使用',
      createRelease: '创建版本',
      deleteReleaseTip: '此发布删除后不可恢复，是否继续？',
      createBlockletDid: '通过 DID Wallet 创建',
      createReleaseSuccess: '发布成功',
      saveDraftSuccess: '保存成功',
      packTip: '您的 Blocklet 现在可以直接安装为应用程序。应用程序配置将自动包含在内',
      resourceChangedWarning: '您修改了资源，请及时保存',
      installResourceTip: '安装网址:',
      installResourceTip2: '如果你需要更多提示，请查看',
      installResourceHelp: '帮助文档',
      componentIncluded: '包含',
      componentForceRequired: '强依赖',
      connect: {
        title: '创建 Blocklet DID',
        scan: '使用以下方法生成 Blocklet DID',
        confirm: '使用 DID Wallet 确认',
        success: 'Blocklet DID 已经生成，请继续您的操作'
      },
      saveDraft: '保存草稿',
      releaseNote: '发布说明',
      errorTip: {
        noDid: '请填写 Blocklet DID',
        noFirstDid: '请先填写 Blocklet DID',
        noTitle: '请填写 Blocklet 名称',
        noVersion: '请填写 Blocklet 版本号',
        noResource: '请选择上传的资源以包含在应用中',
        noDescription: '请填写 Blocklet 描述',
        noNote: '请填写 发布说明',
        inValidVersion: '无效的 Blocklet 版本',
        invalidUrl: '请输入有效的网址',
        invalidUrlOrEmail: '请输入有效的URL或电子邮箱'
      },
      download: '下载 {name}',
      delete: '删除 {name}',
      copyInstallUrl: '复制安装链接',
      install: '安装 {name}',
      publishToStoreSuccess: '成功发布到商店的Blocklet',
      connectStoreSuccess: 'Blocklet 成功连接 Store',
      uploadToStoreSuccess: 'Blocklet 成功上传至 Store，请在 Store 中发布',
      viewLastRelease: '查看最新版本',
      reconnectStoreTip: '重新连接后，将绑定一个新的开发者。你确定要重新连接吗？',
      deleteProject: {
        title: '删除{name}',
        scan: '使用以下方法删除 {name}',
        confirm: '确认使用DID钱包',
        success: 'Blocklet 已被删除，请继续操作',
        tip1: 'Blocklet 一旦删除将无法恢复。',
        tip2: '您将不能再向已删除的 Blocklet 发布新版本，这意味着 Blocklet 将不再在商店中更新。',
        tip3: '删除 Blocklet 不会影响商店中已发布的版本。',
        description: '您确定要删除这个 Blocklet 吗？删除后可能会遇到以下问题：'
      },
      resourceTip: '目前，作为资源型 Blocklet，它无法直接从 Store 安装。',
      whyCantSeeInStore: '你可以将当前 Blocklet 发布到商店，它可以在全世界使用',
      whyCantSeeResourceBlockletInStore: '你可以将当前 Blocklet 发布到商店，它可以在全球使用。Blocklets 默认情况下隐藏在商店列表页面',
      tenantScope: '租户',
      blockletStudio: 'Blocklet Studio',
      allComponentsNotRunning: 'Blocklets未运行，请先启动',
      steps: {
        resources: '请选择需要与当前的 Blocklet 关联的资源，这些资源将与 Blocklet 一起安装。',
        blocklets: '请选择当前 Blocklet 安装时, 需要关联安装的 Blocklets。',
        version: '设置发布版本和更改日志。',
        introduction: '清晰的介绍可以有效地突出你的Blocklet。你可以使用Markdown语法来编写和预览。',
        branding: '描述您的应用链应用的基本信息。此信息将在商店向用户展示。'
      },
      branding: '品牌',
      brandingHelp: '将在商店中显示有关应用链的更多信息',
      resourceSelect: '从 blocklets 选择资源',
      resourceUpload: '从您的磁盘上传资源（存档中需要index.html）',
      deleteStoreTip: '您确定要将{name}从连接商店列表中移除吗？',
      disconnectStoreTip: '断开连接后，blocklet 将从商店中移除。您确定要断开连接吗？',
      connectOrUpload: '连接或上传',
      developerInfo: '开发者信息',
      possibleSameStoreTip: '依赖的 Blocklets 优先使用同源 Store',
      autoUploadTip: '创建发布后自动将 Blocklet 上传到商店',
      needProjectId: '请先创建一个项目',
      projectSettings: '项目设置',
      noStoreSelected: '请选择现有店铺中的一个或添加新店铺以继续',
      installToThisServer: '安装到此服务器',
      forceResourceBlocklet: '强制定义为资源型组件',
      resourceDocker: '从 Docker 构建 Blocklet',
      resourceSelectTitle: '资源',
      resourceUploadTitle: '上传',
      resourceDockerTitle: 'Docker',
      resourceDockerInputTip: '请输入 docker run 命令',
      docker: {
        pleaseInputDockerCommand: '请输入 docker run 命令',
        volumeTip: '卷必须以 $BLOCKLET_DATA_DIR 或 $BLOCKLET_APP_DIR 开头',
        volumeTip2: '卷不能包含 ".."',
        noAllowTheArg: '不允许在 docker run 命令中使用该参数',
        needCustomInput: '安装 Blocklet 时设置值',
        dockerParams: 'Docker 参数',
        dockerCommand: 'Docker 命令',
        dockerImageName: 'Docker 镜像名称',
        addItem: '添加 Docker 运行参数',
        envKey: '环境变量键',
        publishTips: '最终外部端口将由 blocklet 自动分配',
        volumeTips: '卷需要以 $BLOCKLET_DATA_DIR 或 $BLOCKLET_APP_DIR 开头',
        modifyParam: '修改 Docker 运行参数',
        modifyEnv: '修改环境变量',
        paramDetail: '参数详情',
        description: '描述',
        secure: '安全',
        shared: '共享',
        required: '必需',
        prefix: '前缀',
        path: '路径',
        name: '名字',
        portType: '端口类型',
        dockerImageNameError: 'Docker 镜像名称不能包含空格',
        autoGenerated: '自动生成',
        dockerCMDError: 'Docker CMD 只支持简单字符',
        proxyBehavior: '代理行为',
        serviceProxy: '服务',
        directProxy: '直接',
        nextTab: '解析 命令'
      },
      storeRule: {
        maxImageCount: '该 Store 最多允许 {max} 张截图。',
        minImageCount: '该 Store 至少需要 {min} 张截图。',
        minImageSize: '{name}张屏幕截图图像大小必须至少为 {width}x{height}。',
        logoFormat: 'Logo 图片格式仅支持 [{format}]。',
        warning: '警告',
        screenshot: '截图',
        screenshots: '截图',
        first: '第一',
        second: '第二',
        third: '第三'
      },
      store: 'Blocklet 商店',
      endpoint: {
        tab: '远程 Blocklet',
        uploadToEndpoint: '你可以上传当前 Blocklet 到指定的 Blocklet。',
        addEndpoint: '添加 Blocklet URL',
        urlEmpty: '端点 URL 不能为空',
        addFailed: '添加 Blocklet URL 失败：',
        deleteEndpoint: '删除 Blocklet URL',
        deleteDesc: '确认删除 Blocklet URL {name}？<br/><span style="color: {color}">*移除此 Blocklet URL后，除非重新添加，否则无法更新从此 Blocklet URL安装的应用。</span>',
        confirmDesc: '请输入 {name} 删除',
        visitEndpoint: '访问 Blocklet',
        disconnectEndpointTip: '你确定要断开 {url} 的连接吗？断开连接后，Blocklet 将不会上传到此端点。',
        deleteFailed: '删除 Blocklet URL 失败',
        publishToEndpointSuccess: 'Blocklet 成功发布到 URL',
        uploadToEndpointSuccess: 'Blocklet 上传到 URL 成功'
      },
      autoPublishErrorTip: '自动发布到 {storeName} 失败：{error}',
      singleton: '仅运行一个实例',
      singletonTip: '启用单例模式时，应用程序不能同时运行多个实例。由于您的应用使用单例模式，蓝绿部署不能用于更新或重启。'
    },
    titleValidationError: '标题长度必须在 3 到 20 个字符之间',
    descriptionValidationError: '描述长度必须介于3到80个字符之间',
    usingDocker: '这个 Blocklet 将使用 docker 运行',
    gotoVisitError: '无法访问 Blocklet 地址，请稍后再试',
    usingIsolation: '这个 Blocklet 将使用网络隔离运行',
    dockerImage: '支持 Docker',
    mountPoint: {
      description1: '这次更改有可能会影响到包含旧挂载点的 URL，进而可能引发一些问题：',
      case1: '应用里 Blocklets 之间的资源引用出现异常',
      case2: '如果您对外分享过相关内容，分享 URL 可能失效',
      description2: '为了尽量降低可能的影响，您可以设置旧挂载点到新挂载点的重定向。'
    },
    skSourceMigratedTip: '此应用最初使用服务器管理的钱包启动，现已迁移到 DID Wallet 以增强安全性。',
    skSourceManagedTip: '此应用正在使用服务器管理的钱包，请尽快迁移到DID Wallet以获得更好的安全性。',
    zeroDowntime: '零停机'
  },
  dashboard: {
    nodeDid: '节点地址',
    ownerDid: '所有者地址',
    routingEngine: '路由引擎',
    ownerNftURL: '所有者 NFT',
    expirationLeft: '有效期还剩',
    startFromCrashTip: '应用Server 上次未正常退出，请手动启动需要运行的 blocklet.',
    runtimeConfig: {
      blockletMaxMemoryLimit: 'Blocklet 最大内存限制',
      daemonMaxMemoryLimit: 'Server 最大内存限制'
    },
    document: '在我们的文档中了解更多信息',
    database: '数据库'
  },
  store: {
    nameSort: '名称',
    popularSort: '下载量',
    headerDescription: '查找、安装 Blocklet',
    detail: {
      purchase: '购买 {name}',
      open: '打开 {name}',
      install: '安装 {name}',
      upgrade: '升级 {name}',
      empty: '暂无介绍'
    },
    blockletRegistry: {
      changeFailed: '更改应用商店地址失败：',
      addFailed: '添加应用商店地址失败：',
      editFailed: '编辑应用商店地址失败：',
      switchRegistry: '选择应用商店地址',
      addRegistry: '添加应用商店地址',
      editRegistry: '编辑应用商店地址',
      deleteRegistry: '删除应用商店地址',
      haveSameRegistry: '存在相同的应用商店地址',
      registryName: '应用商店名称',
      registryUrl: '应用商店地址',
      registryNameEmpty: '应用商店名称不能为空',
      registryUrlEmpty: '应用商店地址不能为空',
      deleteDesc: '确认删除应用商店地址 {name} ？<br/><span style="color: {color}">*移除该商店之后，无法更新从此商店安装的应用，除非你再次添加。</span>',
      confirmDesc: '请输入 {name} 以确认删除'
    },
    purchase: {
      title: '购买 {name}',
      confirmed: '你的购买已经验证，安装中',
      declined: '你没有提供有效的购买凭证',
      waiting: '等待购买完成...',
      purchase: {
        title: '获取凭证',
        description: '安装此应用之前你需要支付一定数量的通证以完成购买'
      },
      verify: {
        title: '验证凭证',
        description: '如果你已经购买过此应用，提供购买凭证 NFT 即可完成安装',
        auth: {
          title: '需要验证购买凭证',
          scan: '用你的 DID Wallet 提供购买凭证',
          confirm: '请在 DID Wallet 上确认',
          success: '你的购买凭证已经验证通过，应用正在安装中'
        }
      },
      auth: {
        title: '购买 {name}',
        scan: '用你的 DID Wallet 完成操作',
        confirm: '确认 在您的账户',
        success: '购买凭证已经发送到你钱包'
      },
      launch: '启动 {name}',
      autoLaunch: '{name} 购买成功，正在跳转到启动页面...'
    },
    tooltip: {
      upgradeServer: 'Blocklet 需要 Blocklet Server 版本 {version}，当前 Blocklet Server 版本是 {serverVersion}'
    }
  },
  setting: {
    saveSuccess: '保存设置成功',
    unSavedTip: '有尚未保存的更改，请单击“保存”使更改生效。',
    unSavedLeaveTip: '有尚未保存的更改，是否确定离开当前页面？',
    form: {
      name: '节点命名',
      nameRequired: '名称不能为空',
      namePlaceholder: '节点名称',
      description: '节点描述',
      descriptionHolder: '节点描述',
      descriptionRequired: '节点描述不能为空',
      domain: '节点域名',
      domainPlaceholder: '节点域名',
      registry: '应用商店地址',
      registryPlaceholder: '用来拉取 Blocklets 列表',
      registryRequired: '应用商店地址是必填的',
      registerUrl: '应用启动器地址',
      registerUrlPlaceholder: '你可以使用自己运行的"应用启动器", 也可以使用官方提供的版本',
      webWalletUrl: 'DID Wallet 地址',
      webWalletUrlPlaceholder: '你可以使用自己运行的 "DID Wallet", 也可以使用官方提供的版本',
      nftDomainUrl: 'NFT Domain 地址',
      nftDomainUrlPlaceholder: '你可以选择其它的 NFT Domain 服务器, 也可以使用官方提供的版本',
      upgrade: {
        title: '升级 Blocklet 服务器到 {version}',
        description: '在升级期间，节点将会进入维护模式几分钟。',
        dialog: '点击 “确认” 安装更新。节点将进入维护模式，直到更新完成并自动返回生产模式。',
        confirm: '升级',
        switchLabel: '自动更新检查',
        enableBetaRelease: '允许安装测试版',
        setup: '准备升级中',
        installing: '安装节点新版本（v{version}）',
        restarting: '重新启动节点',
        cleanup: '迁移节点数据',
        verifying: '验证节点新版本 v{version}',
        rollback: '回滚此次升级',
        complete: '升级完成!',
        progress: '升级 {name}',
        check: '检查更新',
        latest: '太棒了，你的节点已经是最新版！'
      },
      restart: {
        title: '重新启动节点',
        description: '在重启期间，节点将会进入维护模式几十秒钟。',
        dialog: '点击 “确认” 开启重启。节点将进入维护模式，直到更新完成并自动返回生产模式。',
        confirm: '重启',
        setup: '准备重启中',
        verifying: '验证节点版本',
        restarting: '重启节点中',
        cleanup: '验证重启成功',
        rollback: '撤销重启操作',
        complete: '维护完成',
        progress: '重新开始 {name}'
      },
      welcome: {
        switchLabel: 'Welcome 页面'
      },
      security: {
        switchLabel: '文件系统隔离',
        switchTips: '关闭此选项后，Blocklet 的文件系统将不再处于隔离状态，可能会存在恶意软件破坏文件系统的风险。',
        warningTips: '文件系统隔离功能无法生效，请将 node.js 版本(当前版本为 {version})升级至 v21.6.0 或更高。'
      },
      register: {
        title: '注册到 Blocklet Launcher',
        description: '添加成功后，你可以快速从 {url} 安装应用到此节点',
        button: '注册'
      },
      monitor: {
        diskThreshold: '当磁盘使用率超过（%）时发送报警',
        diskThresholdPlaceholder: '请设置磁盘使用率报警阈值'
      },
      domainRequired: '服务器域名是必需的',
      ipPlaceholder: 'IP',
      ipRequired: 'IP是必需的',
      enableWelcomePage: '启用欢迎页',
      docker: {
        switchLabel: '在容器中运行 Blocklets',
        switchTips: '启用此选项后，块将使用容器运行，可以提高服务器的整体安全性。',
        notInstalled: '无法激活容器运行，因为未安装Docker或缺少执行所需的权限',
        needCloseFileSystemIsolation: '文件系统隔离和Docker容器模式运行时不能同时启用'
      },
      dockerNetwork: {
        switchLabel: '容器网络隔离',
        switchTips: '启用该选项后，blocklet 会以更高安全性运行：一个 blocklet 无法访问跨应用程序的其他 blocklet 或 blocklet 服务器。',
        needEnableDocker: '必须启用容器模式才能启用网络隔离'
      },
      restartAllContainers: {
        title: '重启所有容器',
        description: '重启所有容器并保持 Blocklets 运行。',
        dialog: '点击 "确认" 重启所有容器 Blocklets 并保持 Blocklets 状态运行。',
        confirm: '重新启动',
        setup: '正在准备重启',
        verifying: '正在验证 Blocklet Server',
        restarting: '在后台重启所有容器',
        cleanup: '确保一切正常',
        rollback: '清理脏状态',
        complete: '保持完整！',
        progress: '在后台重启所有容器'
      },
      restartAllBlocklet: {
        title: '重启所有 Blocklets',
        description: '重新启动此服务器上所有正在运行或出错的 Blocklets。',
        dialog: '点击“确认”在后台重新启动所有 Blocklets。',
        confirm: '重新启动',
        setup: '正在准备重启',
        verifying: '验证 Blocklet Server',
        restarting: '后台重新启动所有正在运行或出错的 Blocklets',
        cleanup: '确保一切正常',
        rollback: '清理脏状态',
        complete: '维护完成！',
        progress: '正在后台重启所有运行中或出错的 Blocklets'
      },
      enableSessionHardening: {
        switchLabel: '启用会话强化',
        switchTips: '启用此选项后，变更操作将需要严格验证，这可以提高服务器的整体安全性。'
      }
    },
    accessKey: {
      accessKeyId: 'Access Key ID',
      accessKeySecret: 'Access Key Secret',
      lastUsed: '最后使用',
      tip: '请给 Access Key 起个名字',
      saveSecretTip: '你的 Access Secret 只会展示一次，关闭此窗口后将无法再次查看，不过你可以随时重新创建新的 Access Key',
      iKnow: '我已复制保存好该 Access Secret',
      showSecret: '展示 Secret',
      hideSecret: '隐藏 Secret',
      title: '删除 Access Key',
      descriptionNoTime: '此操作无法撤消。这将永久删除备注为 {name} 并且 Id 为 {key} 的 Access Key (此 Access Key 之前没有被使用过) ',
      description: '此操作无法撤消。这将永久删除备注为 {name} 并且 Id 为 {key} 的 Access Key (最后的使用时间为 {time}, {timeAge})',
      confirm_desc: '请输入 {name} 以确认删除',
      remark: 'Access Key 名称',
      remarkInvalid: 'Access Key 名称不能为空',
      passport: '选择一个护照用于访问密钥以授予或限制权限',
      expireTime: '设置访问密钥的过期日期以增强安全性',
      authType: '验证类型',
      resourceType: '资源类型',
      resourceId: '资源 ID',
      component: '组件',
      expired: '{time}过期',
      simple: '一般安全',
      signature: '高安全',
      signatureDesc: '企业级安全标准，使用加密技术。需要与SDK (@blocklet/server-js)集成代码，非常适合对安全要求高和需要传输关键数据的场景',
      simpleDesc: '轻量级载体令牌机制，类似于OpenAPI Key，支持RESTful API调用和第三方服务集成。无需编码，通过HTTP Header快速集成，非常适合快速开发',
      viewSecret: '你可以在访问密钥的详情页稍后访问密钥',
      usage: '使用',
      listTitle: '使用访问密钥管理安全的 API 访问',
      tooltipTitle: '生成和管理允许信任系统以编程方式与您的应用交互的凭据。访问密钥支持安全自动化以及您工具和服务之间的无缝集成。'
    },
    webhook: {
      add: '添加应用集成',
      delTitle: '删除应用集成',
      requiredError: '请输入正确的 {type}',
      confirm_desc: '请输入 {name} 以确认删除',
      test: '测试',
      description: '此操作无法撤消。这将永久删除 ID 为 {id} 的应用集成',
      columns: {
        description: 'ID',
        params: '参数',
        createdAt: '创建时间'
      },
      testSuccess: '测试消息发送成功'
    },
    dns: {
      step1Title: '登录你的域名注册商',
      step1Desc1: '登录你的域名注册商，找到域名管理页面，并找到名称服务器设置页面。 你可以访问',
      step2Title: '2. 查找 {url} 的 DNS 设置',
      step2Desc: '这可能被称为"DNS 管理","高级设置"或类似名称。',
      step3Title: '3. 添加以下 DNS 记录',
      step3Desc: 'Name可以叫做 "host"，"hostname"，或 "alias"'
    },
    domain: {
      addingDomain: '添加域名...',
      checkingResolvable: '正在检查域名状态...',
      cannotResolve: '{domain} 无法解析，请检查您的 DNS 配置',
      resolvedAddressError: '{domain} 未正确配置指向 {curDomain} 的 CNAME 记录',
      invalidDNSReminder: '{error}。但是，您可以继续添加域名，但无法自动生成证书。',
      continueAdd: '继续添加',
      conflictTitle: '{domain} 已经被使用了',
      conflictDescription: '{domain} 已经被 "{title}" 使用。点击确认，该域名将从 "{from}"移除并添加到 "{to}"。'
    },
    aigne: {
      modelAdapter: '模型提供商',
      modelName: '模型名称',
      baseUrl: 'AIGNE Hub 网址',
      desc: {
        modelAdapter: '提供 AI 模型服务的平台',
        modelName: '特定的模型版本或模型名称',
        key: '{provider} API 密钥用于认证',
        baseUrl: '输入您的 AIGNE Hub 实例的 URL（例如 https://hub.aigne.io）。如果您自行托管，请使用您自己的地址。',
        accessKeyId: '访问模型的唯一密钥 ID',
        secretAccessKey: '与访问密钥 ID 配对的秘密密钥',
        docLink: '查看官方文档以获取更多详细信息和 API 参考'
      },
      configDesc: '将您的 Blocklet 与 AIGNE Hub 集成，以实现对大型语言模型 (LLMs) 的安全、路由访问。 连接后，您的 Blocklet 及其组件可以发送智能请求并立即变得更智能。 您可以使用您自己的自托管 <a href="{url}" target="_blank">AIGNE Hub</a> 或默认的公共实例。',
      failed: 'AIGNE 配置保存失败',
      authorizeAigneHub: '连接到 {name}',
      disconnect: '断开连接',
      disconnectConfirm: '确定要断开与 AIGNE Hub 的连接吗？这将清除当前的 AI 配置。',
      disconnectSuccess: '成功断开与 AIGNE Hub 的连接',
      disconnectFailed: '断开与 AIGNE Hub 的连接失败',
      testConnection: '测试 {provider} 连接',
      invalidUrl: '{provider} URL 无效',
      description: '当前配置在 {name} 运行时生效。需要保存并重启 Blocklet 才能生效。',
      revokeUrlAuthTitle: '确认更改 {url}?',
      revokeUrlAuth: '您确定要更改 {url} 吗？修改后，您的授权将失效，需要重新授权！',
      testSuccess: '成功连接到 AIGNE Hub',
      check: '检查',
      apiKeyNotAuthorized: 'API 密钥未获授权。 请点击连接到 AIGNE Hub 按钮进行授权',
      switchUser: '切换用户',
      connectTimeOut: '连接到 {provider} 超时，请稍后再试',
      restart: {
        title: '重启 Blocklet',
        connectedContent: '你的 Blocklet 当前连接到 {provider}。配置将在重启后生效。你想现在重启吗？',
        notConnectedContent: '你的 Blocklet 当前已与 {provider} 断开连接。配置将在重启后生效。你想现在重启吗？',
        confirm: '立即重启',
        cancel: '稍后重启'
      },
      testFailed: '无法连接到 AIGNE Hub。请检查 URL 或您的网络。',
      addCredits: '购买 Credits',
      transaction: '查看账单',
      connected: '成功连接',
      account: '账户信息',
      pendingCredit: '未付费用',
      infinite: '无限制',
      config: '配置 AIGNE Hub'
    }
  },
  notification: {
    title: '通知',
    empty: '没有动态',
    viewAll: '查看所有动态',
    showRead: '显示已读',
    markAllAsRead: '全部标记为已读',
    markAsRead: '标记为已读',
    proceed: '处理',
    checkingForUpdates: '正在检查更新...',
    email: {
      enable: '启用通知',
      from: '发件人邮箱',
      host: 'SMTP 服务地址',
      port: 'SMTP 服务端口',
      user: 'SMTP 用户名',
      secure: '安全连接',
      password: 'SMTP 密码',
      fromRequired: '请输入发件人邮箱',
      fromInvalid: '发件人邮箱格式不正确',
      receiverRequired: '请输入收件人邮箱',
      receiverInvalid: '收件人邮箱格式不正确',
      hostRequired: '请输入 SMTP 服务地址',
      hostInvalid: '请输入 SMTP 服务地址格式不正确',
      portRequired: '请输入 SMTP 服务端口',
      portInvalid: '请输入 SMTP 服务端口，端口号应该在 0-65535 之间',
      userRequired: '请输入 SMTP 服务用户名',
      passwordRequired: '请输入 SMTP 服务用户密码',
      testSuccess: '测试邮件发送成功',
      testFailed: '测试邮件发送失败',
      testReceiver: '收件人邮箱',
      testSendEmail: '测试邮件发送',
      inputTestReceiver: '请输入测试邮件接收者的邮箱地址',
      disable: '禁用邮件通知',
      disableDescription: '禁用后将不再收到邮件通知，如需收到邮件通知，可以在本页面再次开启',
      unsubscribe: '取消邮件订阅',
      unsubscribeDescription: '取消邮件订阅后将不再收到所有邮件通知',
      subscribe: '订阅邮件',
      subscribeDescription: '如需收到邮件通知，可进入配置页再次开启订阅',
      companyName: '公司名称',
      companyLink: '公司链接',
      companyAddress: '公司地址',
      supportEmail: '支持邮箱',
      emailInvalid: '邮箱无效',
      linkInvalid: '链接无效，应以http或https开头',
      signature: '邮件签名',
      signatureTooltip: '电子邮件签名用于底部，以便向收件人提供发送者的关键信息。'
    },
    comingSoon: '更多通知方式正在建设中',
    unsubscribe: '取消订阅',
    unsubscribeSucceed: '取消订阅成功',
    unsubscribeFailed: '取消订阅失败',
    unsubscribeTokenRequired: '取消订阅链接不存在',
    unsubscribeTokenExpired: '取消订阅链接已过期',
    unsubscribeTokenInvalid: '取消订阅链接有误',
    installComponentError: '未找到卸载的组件 {name}',
    installingComponent: '安装组件{name}',
    pushKit: {
      enable: '启用通知',
      endpoint: 'PushKit 端点',
      endpointInvalid: 'PushKit 端点不是一个有效的网址',
      testSuccess: 'Test PushKit 发送成功',
      testFailed: '测试 PushKit 发送失败',
      testReceiver: 'PushKit 接收器',
      testSend: '测试推送',
      inputTestReceiver: '请输入测试接收者 DID',
      receiverRequired: '需要 PushKit 接收者 DID',
      pushPath: 'PushKit 的 API 路径（默认 /api/push）',
      did: 'PushKit Blocklet DID',
      customOptions: '自定义选项'
    },
    notificationDetails: '通知详情',
    notificationPreview: '通知预览',
    receiver: '接收者',
    filter: '筛选器',
    resend: '重发',
    resendLimit: '您每天最多可以重新发送三次通知。',
    sendStatus: {
      success: '发送成功',
      failed: '发送失败',
      pending: '待发送',
      sentTime: '发送时间：{date}',
      reason: {
        enabled: '用户已开启 {channel} 通知',
        disabled: '用户没有开启 {channel} 通知',
        unavailable: '当前 Blocklet 没有配置 {channel} 通知',
        available: '当前 Blocklet 已配置 {channel} 通知',
        notSent: '当前消息没有向 {channel} 发送',
        offline: '用户未在线'
      },
      count: '{count}',
      total: '总计'
    },
    from: '发送方',
    to: '接收方',
    body: '内容',
    notificationTitle: '标题',
    createdAt: '创建时间',
    status: '状态',
    system: '系统通知',
    severity: '消息等级',
    config: '配置',
    selectChannels: '选择通知渠道',
    selectChannelsTip: '选择需要重发的渠道',
    resendFailedOnly: '仅重发失败渠道',
    statistics: '统计',
    allSender: '所有发送者',
    allSeverity: '所有等级',
    severityType: {
      info: '正常',
      success: '成功',
      warning: '警告',
      error: '错误'
    },
    clear: '清空',
    allDone: '全部完成',
    filterType: {
      all: '全部',
      unread: '未读'
    },
    viewMore: '查看更多'
  },
  router: {
    routerSetting: '域名和网址',
    certSetting: 'SSL 证书',
    defaultSite: '默认',
    urlHelperText: '不以 HTTP/HTTPS 开头的 URL 将被认为是相对路径',
    empty: '点击 “添加 URL” 来增加映射',
    healthy: {
      ok: 'Blocklet 运行中，可访问',
      error: 'Blocklet 未安装或未运行中，无法访问'
    },
    service: {
      select: '选择和配置服务（可选）',
      what: '服务是把请求转交给 Blocklet 前执行的逻辑，比如要求用户登录，检查权限等'
    },
    nonProvider: {
      title: '变更引擎警告',
      description: '如果你将引擎切换为 none，你当前访问的页面可能不再可用，因为它可能是由引擎来提供服务的，是否要继续？',
      confirm: '我知道风险，继续吧'
    },
    validation: {
      urlRequired: 'URL 是必填的',
      redirectCodeRequired: '重定向码是必选的',
      didRequired: '应用是必选的',
      pathPrefixTooLong: '请求的前缀不能超过30个字符',
      pathPrefixCannotBeEmpty: '请求的前缀不能为空',
      domainRequired: '节点域名不能为空',
      invalidUrl: '请填写正确的 URL',
      pathPrefixRequired: 'URL 前缀是必填的',
      redirectUrlRequired: '重定向 URL 是必填的',
      rewriteUrlRequired: '重写到 URL 是必填的'
    },
    domain: {
      addSite: '添加站点',
      validate: {
        emptyTip: '站点域名不能为空',
        suffixTip: '站点域名不能包含 {suffix}'
      },
      add: {
        title: '添加域名',
        description: '请填写你所拥有的合法的域名',
        confirm: '添加',
        cancel: '取消',
        blocklet: '选择 Blocklet',
        redirect: '重定向到哪里?',
        port: '负责处理请求的服务监听在哪个端口？',
        portTip: '保持默认值就好，如果你想把请求转发到非默认端口，可以根据需要修改',
        type: '服务类型',
        component: '选择组件',
        pageGroup: '路由分组',
        pageGroupTip: '该组件具备渲染这里列出的任何一组页面，留空表示渲染所有页面'
      },
      update: {
        title: '更新站点域名',
        label: '站点域名',
        description: '请填写你所拥有的合法的站点域名'
      },
      setup: {
        tipStart: '请将',
        tipEnd: '域名的 DNS 记录按照下面的提示添加',
        recordType: '记录类型',
        recordValue: '记录值'
      },
      verify: {
        ok: '该域名解析正常',
        notResolved: '该域名解析异常，请检查你域名服务商的 DNS 配置'
      },
      https: {
        ok: '该域名已启用 HTTPS',
        bad: '该域名尚未启用 HTTPS'
      },
      delete: {
        title: '删除站点',
        description: '确认之后，你会删除掉 “{name}” 站点, 在下面输入“{name}”，选择删除按钮完成修改，或者选择取消按钮关闭当前弹窗。',
        confirm_desc: '请输入 {name} 以确认删除'
      }
    },
    domainAlias: {
      nftDomain: '使用 DID Names 自动配置',
      showTipHint: '如何配置域名解析？',
      add: {
        title: '添加额外域名',
        domainDescription: '请填写有效的域名',
        forceTip: '当域名已存在时强制添加',
        helperText: '如果输入 HTTP 或者 HTTPS URL, 则会被自动转换为域名。',
        isDidDomainError: '该域名是 DID Domain, 请使用自动配置域名的方式添加该域名。',
        tips: '你可以输入从 DID Names 或任何其他地方购买的域名。如果这是一个 DID 域名，你必须出示 DID 域名 NFT 才能继续。'
      },
      addCustomDomain: {
        name: '自定义域名'
      },
      addDomainNFT: {
        showNFT: '自动配置域名',
        tips: '你可以输入从 DID Names 购买的域名。如果检测到 DID 域名，你必须出示 DID 域名 NFT 才能继续。',
        connect: {
          scan: '使用以下其中一种方法连接 {domain} 到 {appName}',
          confirm: '确认 在 您的 账户',
          success: '授权成功',
          title: '连接 DID Names 到 {appName}'
        },
        buyTip: 'DID 名称将自动完成域名解析，无需手动配置， Blocklet 会在需要时自动更新域名的解析记录。如果您还没有 DID Domain NFT，',
        buy: '购买 DID Domain',
        topLevelDidDomainHint: '对于DID域名，如果您输入顶级域名（例如 example.com），它将自动配置为 www.example.com',
        authorizeFailed: '获取域名 NFT 信息失败，请重试！'
      },
      delete: {
        title: '删除',
        description: '删除“{domain}”后，对该别名的访问可能无法正常处理。',
        confirmPlaceholder: '请输入 "{domain}" 删除'
      },
      custom: '自定义域名',
      noCustom: '无自定义域名',
      noCustomTip: '你的网站尚未配置自定义域名。为增强安全性并提升用户体验，我们建议你配置自己的自定义域名。点击下方开始配置。'
    },
    domainSecurity: {
      title: '站点安全设置',
      cors: {
        title: 'CORS 域名白名单',
        description: '此白名单显示的声明可以往 {name} 发送跨域请求的域名, 多个域名用逗号分隔, 可以用 "*" 来允许任何域名（我们不推荐这么做）',
        domainInvalid: '请输入有效的域名列表'
      }
    },
    rule: {
      add: {
        title: '添加 URL',
        confirm: '添加',
        pathPrefix: '请求的前缀是什么？',
        pathPrefixTip: "如果你填写了 '/prefix'，那么所有以其为前缀的请求都会被转发到配置的 Blocklet",
        blocklet: '把请求代理到哪个服务？',
        port: '把请求代理到哪个端口？',
        portTip: '这里的默认值是应用默认监听的端口，如果你的应用会启用多个端口，你可以根据需要自定义',
        responseType: '回应类型',
        responseBody: '响应内容',
        responseBodyTip: '请将您的回复内容粘贴在这里，不要超过4096个字符',
        responseBodyRequired: '响应内容不能为空'
      },
      delete: {
        title: '删除规则',
        description: '确认之后，你会删除掉 “{name}” URL映射, 在下面输入“{name}”，选择删除按钮完成修改，或者选择取消按钮关闭当前弹窗。',
        confirm_desc: '请输入 {name} 以确认删除',
        cancel: '取消'
      },
      update: {
        title: '更新规则',
        confirm: '确认，更新吧',
        cancel: '取消'
      }
    },
    cert: {
      name: '证书名称',
      domain: '域名',
      commonName: '通用名称',
      boundDomains: '域名',
      action: '操作',
      expired: '已过期',
      leftDays: ' 天 剩余',
      issuedOn: '签发时间',
      expiryOn: '过期时间',
      fingerprintAlg: '指纹算法',
      validityPeriod: '有效期',
      matchedSites: '匹配站点',
      source: '添加方式',
      upload: '手动上传',
      publicCertHelperText: '公开证书可以下载',
      nonPublicCertHelperText: '非公开的证书不能被下载',
      protectedCertHelperText: '受保护的证书不可以编辑',
      unprotectedCertHelperText: '不受保护的证书可以编辑',
      issuing: '正在生成证书',
      sourceTypes: {
        upload: '手动上传',
        lets_encrypt: "Let's Encrypt"
      },
      table: {
        nodata: '暂无数据'
      },
      delete: {
        title: '删除证书',
        description: '确认删除域名 {domain} 的证书？删除后相关服务可能会受到影响，请确认无风险后再删除。',
        confirm: '确认'
      },
      nginx: {
        title: '更新证书',
        titleAdd: '添加证书',
        pem: '证书文件',
        pemTip: '请把证书文件拖拽到这里, 应该以 ".pem" 或 ".crt" 结尾',
        key: '证书私钥',
        keyTip: '请把证书私钥拖拽到这里，应该以 ".pem" 或 ".key" 结尾',
        confirm: '提交',
        cancel: '取消',
        invalidFile: '所选择的文件无效',
        empty: '尚未选择任何文件',
        sourceTypes: {
          upload: '通过上传文件',
          lets_encrypt: "通过 Let's Encrypt 自动生成"
        },
        source: '來源'
      },
      detail: {
        title: '证书详情'
      },
      genLetsEncryptCert: {
        title: "生成 Let's Encrypt 证书",
        dnsTip: '请确保该域名已经解析到了当前节点。',
        description: '添加证书会让服务变得更安全，节点会在证书过期前自动更新证书。'
      }
    },
    gateway: {
      reqLimit: {
        switchLabel: '启用并发请求限制以获得可靠的性能',
        rate: '限制每个 IP 并发请求数为每秒 {rate} 个 (按 IP 限制)',
        title: '请求限制',
        global: '限制网关处理的并发请求数为每秒 {global} 个（全局限制）',
        burstFactor: '速率限制的突发因子，应用于全局和每个IP的限制 (全局: {global}, 单 IP: {rate})',
        methods: '只限制以下 HTTP METHOD 的并发请求（仅对 IP 生效）',
        burstDelay: '请求突发并超过每IP限制时的延迟 ({delay} 秒)'
      },
      cacheEnabled: {
        switchLabel: '启用网关缓存以提升性能',
        title: '网关缓存'
      },
      blockPolicy: {
        switchLabel: '请求封禁',
        addItem: '添加',
        blacklistDesc: '来自这些 IP 的请求将被阻止访问此服务器和所有应用',
        inputPlaceholder: '请输入 IP 地址、CIDR 范围或 URL',
        invalidItem: '无效的 IP 地址、CIDR 范围或 URL',
        title: '请求阻止',
        autoBlocking: {
          switchLabel: '通过实时检测阻止恶意请求',
          windowSize: '用于统计请求的时间窗口大小（秒）',
          windowQuota: '每个 IP 在窗口期内允许的最大请求数',
          blockDuration: '超出窗口配额时按 IP 阻止用户的持续时间（秒）',
          statusCodes: '需要检查的状态代码'
        }
      },
      proxyPolicy: {
        switchLabel: '运行在代理之后',
        trustRecursive: '无条件信任代理',
        trustRecursiveDesc: '使用 X-Forwarded-For 链中的最左边的 IP',
        trustedProxies: '可信代理',
        trustedProxiesDesc: '来自这些 IP 的请求将被信任以获取真实的客户端 IP',
        realIpHeaderLabel: '客户端 IP 标头',
        realIpHeaderDesc: '如果 Blocklet 服务器在诸如 CloudFront 之类的代理后面运行，您可以在此设置客户端真实 IP 的标头。',
        addItem: '添加',
        inputPlaceholder: '输入 IP 地址，CIDR 范围',
        invalidItem: '无效的 IP 地址、CIDR 范围',
        title: '代理政策'
      },
      wafPolicy: {
        switchLabel: '使用 ModSecurity 检测和阻止恶意请求',
        modeDesc: 'Modsecurity 的模式（需要 modsecurity 模块）',
        mode: {
          detectOnly: '仅检测（不会阻止请求）',
          on: '开启（将阻止请求）'
        },
        logLevelDesc: 'ModSecurity 的日志级别（0-9），0 表示禁用审计日志',
        inboundAnomalyScoreThresholdDesc: '入站异常评分阈值 (1-100)，值越低意味着越严格',
        outboundAnomalyScoreThresholdDesc: '外部异常评分阈值 (1-100)，较低值意味着更严格',
        docDesc: '查看文档了解如何设置 modsecurity',
        title: 'Web 应用防火墙'
      }
    }
  },
  noMatch: {
    desc: '我们找不到您要找的页面'
  },
  health: {
    connectionErrorTip: '节点服务节点的连接已经断开，可能是出现了网络异常或者节点服务节点故障',
    connectionRecoveryTip: '节点服务节点的连接刚刚恢复正常',
    connectionStoppedTip: '节点服务节点已经被停止',
    wrongAccessUrlTip: '节点访问地址错误，请使用正确的访问地址'
  },
  debug: {
    title: '您的节点已启动并正在运行'
  },
  embed: {
    iconTip: '点击查看订阅详情'
  },
  team: {
    invite: {
      action: '邀请新人',
      setting: '邀请设置',
      enabled: '禁用此设置以限制只有拥有者/管理员才能邀请新用户',
      disabled: '启用此设置以允许任何用户邀请新用户',
      inviter: '被邀请者'
    },
    add: '添加',
    member: {
      name: '姓名',
      passport: '通行证',
      passports: '通行证',
      lastLogin: '上次登录',
      lastLoginIp: '上次登陆 IP',
      source: '注册来源',
      source_derived: 'OAuth 账户派生',
      source_wallet: 'DID Wallet',
      filter: '条件筛选',
      blockAccess: '禁止登录',
      blockAccessDescription: '该成员将无法登录此应用',
      allowAccess: '允许登录',
      allowAccessDescription: '该成员将可以登录此应用',
      removeUser: '删除成员',
      removeUserDescription: '确认删除用户 "{did}" 及其所有相关数据（已连接账号、通行证、登录会话等）？此操作无法撤销。',
      updateRole: '更新角色',
      revokePassport: '撤销通行证',
      revokePassportDescription: '通行证一旦被撤销，通行证的持有者将无法用其登录，是否继续？',
      enablePassport: '启用通行证',
      enablePassportDescription: '撤销的通行证一旦被重新启用，通行证持有者将可以继续登陆应用，是否继续？',
      passportPermissionTitle: '该通行证具有以下权限：',
      search: '搜索成员',
      onlyApprovedMember: '仅显示已批准',
      inviteDialog: {
        createInviteLink: '生成邀请链接',
        createSuccessTip: '创建邀请链接成功，请复制并发送给被邀请人。该链接只能使用一次，并将在 {expireDate} 过期'
      },
      error: {
        passportEmpty: '通行证不能为空'
      },
      connectedAccounts: '已连接账号',
      connections: '账号绑定',
      federated: '统一登录',
      switch: {
        did: '添加账户',
        profile: '更新身份',
        passport: '切换通行证'
      },
      settings: {
        notification: '通知设置',
        email: '当有动态时给我发送邮件',
        wallet: '当有动态时给我发送钱包通知',
        phone: '当有动态时给我发送短信',
        webhook: '外部钩子',
        add: '添加新钩子',
        url: '自定义 URL',
        slack: 'Slack 通知',
        tested: '测试消息已经发送'
      },
      activeUserSessions: '活跃用户会话',
      forceLogout: '强制注销',
      forceLogoutDescription: '确认是否强制退出此用户？',
      forceLogoutRemoveDescription: '确认是否强制退出此用户(同时删除所有登录会话)？',
      openProfile: '查看个人资料',
      removeUserSuccess: '用户删除成功'
    },
    transferNode: {
      name: '转移所有者',
      inviteDialog: {
        createInviteLink: '生成邀请链接',
        title: '转移节点',
        tips: {
          progress: '转移节点需要对方接受后才能完成转移操作，对方一旦接受，无法再使用当前凭据登录节点。',
          newOwnerPermissions: '新 Owner 将有权管理成员、通行证，以及应用等所有操作。',
          revoke: '如果想收回转移邀请，在"团队 -> 成员 -> 邀请中"页面删除邀请链接即可。'
        },
        createSuccessTip: '创建邀请链接成功，请复制并发送给被邀请人。该链接只能使用一次，并将在 {expireDate} 过期'
      },
      delegateDialog: {
        title: '需要授权',
        scan: '使用以下方法授权服务器转移节点所有权 NFT',
        confirm: '确认在你的账户',
        success: '授权成功'
      }
    },
    transferApp: {
      name: '转移所有者',
      transferDialog: {
        title: '转移应用',
        tips: {
          progress: '转移应用需要对方接受后才能完成转移操作，对方一旦接受，无法再使用当前应用所有者凭据登录应用。',
          newOwnerPermissions: '新 Owner 将有权管理成员、通行证，以及设置等所有操作。'
        },
        createTransferLink: '生成转移链接',
        createSuccessTip1: '创建转移链接成功，被邀请人必须使用 <a style="color: rgb(29, 193, 199)" target="_blank" href="https://www.didwallet.io/">DID Wallet</a> 接收应用所有权',
        createSuccessTip2: '请复制并发送给被邀请人。该链接只能使用一次，并将在 {expireDate} 过期。你的转移链接只会展示一次，关闭此窗口后将无法再次查看',
        createSuccessTip3: '转移成功之后应用会自动重启以使变更生效',
        link: '邀请链接',
        iKnow: '我已复制保存好该链接'
      },
      connectDialog: {
        title: '需要授权',
        scan: '使用以下方法授权应用转移所有权。',
        confirm: '确认 在您的账户中',
        success: '授权成功'
      },
      receiveDialog: {
        title: '接收应用程序所有权',
        scan: '使用以下方法接收应用所有权。',
        confirm: '确认 在 您 的 账户',
        success: '成功获得所有权'
      },
      successTitle: '你已成为应用的所有者',
      visitDashboard: '访问应用控制台',
      description: '你可以将你的应用程序所有权转移到另一个钱包或其他人。'
    },
    permission: {
      create: {
        title: '创建权限',
        description: "格式：<操作>_<资源>\n举例：'query_user', 'mutate_user'"
      },
      delete: {
        title: '删除权限',
        description: '确认删除 {name}？（角色中关联的 {name} 将会同时被删除）'
      },
      error: {
        actionEmpty: '操作不能为空',
        resourceEmpty: '资源不能为空',
        permissionTooLong: '权限不能超过 {length} 个字符',
        descriptionTooLong: '描述不能超过 {length} 个字符'
      }
    },
    passport: {
      view: '查看通行证',
      create: {
        title: '创建通行证',
        titleTip: '名称创建后不可修改，建议在14个字母内'
      },
      bind: {
        title: '绑定',
        roleTip: '绑定后将会获得选定的通行证的所有权限',
        permissionTip: '绑定后将会获得选定的权限',
        transferLeftTitle: '所有权限',
        transferRightTitle: '已添加权限'
      },
      delete: {
        title: '删除通行证',
        description: '删除后，用户持有的此通行证的将失去所有权限，是否继续？'
      },
      error: {
        titleEmpty: '名称不能为空',
        titleTooLong: '名称不能超过 {length} 个字符',
        descriptionEmpty: '描述不能为空'
      },
      issuance: {
        pending: '待领取',
        create: {
          title: '生成链接'
        },
        delete: {
          title: '删除领取链接',
          description: '确认删除 {link}？'
        }
      },
      issue: '颁发通行证',
      disableIssuance: '禁止颁发通行证',
      enableIssuance: '允许颁发通行证',
      disableIssuanceTip: '“颁发通行证”，“邀请成员” 等操作将被禁止',
      enableIssuanceTip: '“颁发通行证”，“邀请成员” 等操作将被允许',
      trustedPassportIssuers: '信任的通行证颁发者',
      trustedIssuers: '信任的颁发者',
      trustedFactories: '信任的 NFT 集合',
      trustedFactoriesTip: '管理信任的 NFT 集合，持有这些集合中 NFT 的用户可以领取指定通行证',
      searchFactoryAddress: '搜索集合 DID',
      configFactories: '配置信任的 NFT 集合',
      configFactoriesTip: '允许用户用特定 NFT 来换取通行证',
      factoryAddress: 'NFT 集合 DID',
      factory404: 'NFT 集合未找到',
      factoryAddressTip: 'NFT 集合必须 ArcBlock 主链上的',
      role: '通行证类型',
      ttl: '通行证过期策略',
      ttlNever: '永不过期',
      ttlMint: '从购买日期算起',
      ttlExchange: '从兑换日期算起',
      ttlTip: '"365d" 意思是 365 天, 你也可以使用类似 "30 days" 或 "24h" 的',
      ttlNeverTip: '通行证将永久有效直到被吊销',
      ttlMintTip: '通行证有效期将从 NFT 购买时间开始计算，直到指定的时间或者被吊销',
      ttlExchangeTip: '通行证将从用户成功交换时起有效，直到您指定的ttl或撤销',
      validUntil: '有效期至: {date}',
      externalPassport: '外部的通信证',
      notTrustedIssuerTip: '该通行证无法使用，因为颁发者未在信任的颁发者列表中',
      issuerDid: '颁发者 DID',
      addNodeToTrustedIssuers: '添加当前 node 为信任的通行证颁发者',
      revoked: '撤销',
      noPermission: '没有权限执行此操作',
      shouldNotDeleteCurrent: '无法删除当前正在使用的通行证',
      mappingRule: '映射规则',
      defaultRule: '默认规则',
      search: '搜索通行证',
      searchIssuerDid: '搜索颁发者 DID',
      issueBy: '由 {name} 颁发',
      configColor: '设置通行证颜色',
      configColorTip: '通过调色盘来自定义通行证的主色调',
      color: '通行证颜色',
      description: '使用此通行证以 {title} 连接 {teamName}',
      displayBuiltin: '内置',
      displayCustom: '自定义',
      typesTip: '自定义通行证类型，以逗号分隔',
      issuanceDate: '签发日期: {date}',
      sourceMaps: {
        recover: '找回',
        issue: '颁发',
        invite: '邀请',
        trusted: '信任'
      },
      related: '相关通行证',
      operationLogs: '操作日志',
      owner: '所有者',
      status: '状态',
      statusMap: {
        valid: '有效',
        revoked: '已撤销',
        expired: '已过期'
      },
      trustedPassportIssuersTip: '管理可用于签发通行证的可信通行证颁发机构',
      issuanceTime: '发行时间',
      relatedDescription: '当前通行证是被找回的，数据流转过程如下',
      passportExpireTime: '设置通行证的过期日期',
      customExpireTime: '自定义过期时间',
      customExpireTimeIsInvalid: '自定义过期时间无效'
    },
    inviting: {
      link: '邀请链接',
      inviter: '邀请人',
      delete: {
        title: '删除邀请链接',
        description: '确认删除 {link}？'
      },
      disabledTip: '邀请功能未开启'
    },
    whoCanAccess: {
      all: {
        title: '所有人可访问'
      },
      owner: {
        title: '只有我自己可访问'
      },
      invited: {
        title: '只有被邀请的人可以访问'
      }
    },
    userFollowers: {
      title: '关注 & 粉丝',
      follow: '关注',
      unfollow: '取消关注',
      followersOnly: '仅关注者可见',
      followers: '粉丝',
      following: '正在关注',
      emptyFollowing: '还没有关注任何人',
      emptyFollowers: '还没有粉丝',
      emptyInvitees: '您还没有邀请任何人',
      invitees: '受邀者'
    },
    orgs: {
      explain: '开启后，用户可以创建和加入组织，在组织内分配角色并管理资源。',
      description: '描述',
      deleteConfirm: '确认删除 {name}？',
      members: '成员',
      myCreated: '我创建的组织',
      myJoined: '我加入的组织',
      myCreatedEmpty: '您还没有创建任何组织',
      myJoinedEmpty: '您还没有加入任何组织',
      deleteConfirmDescription: '删除此组织将移除所有关联的角色和资源。用户仍将保留在系统中，但将失去该组织中的角色。此操作无法撤销。',
      active: '活跃的',
      deleteOrg: '删除当前组织',
      invitedAt: '邀请时间：{time}',
      joinedAt: '加入时间：{time}',
      createNew: '创建新组织',
      viewAll: '查看所有组织',
      validate: {
        nameEmpty: '名称不能为空',
        nameTooLong: '名称不能超过 {length} 个字符',
        descriptionTooLong: '描述不能超过 {length} 个字符'
      },
      mutate: {
        title: '{mode}组织',
        name: '组织名称',
        createSuccess: '组织创建成功',
        updateSuccess: '组织更新成功',
        orgNotEnabled: '组织功能未启用',
        maxMemberPerOrg: '这个组织最多可以邀请{maxMemberPerOrg}个用户',
        maxOrgPerUser: '每个用户最多可创建{maxOrgPerUser}个组织'
      },
      invite: {
        chooseUsersToInvite: '请选择要邀请的用户',
        success: '已向用户发出邀请',
        pleaseSelectUsers: '请选择用户',
        pleaseSelectRole: '请选择角色',
        inviteExternalUsers: '邀请外部用户',
        failed: '{count} 个用户邀请失败，请稍后重试',
        remove: '移除用户',
        removeSuccess: '用户已移除',
        limit: '限制',
        limitTip: '限制组织成员数和用户可创建的组织数',
        maxMembers: '每个组织的最大成员数',
        maxOrgs: '每个用户的最大组织数',
        maxMembersTip: '可邀请加入此组织的最大用户数',
        inviteLinkSendToEmail: '邀请链接已经发送至邮箱（{email}），请查收',
        enterEmailAddress: '请输入邮箱地址',
        inviteTitle: '邀请用户加入{orgName}'
      },
      member: {
        removeMemberConfirm: '确认移除 {name}？',
        removeMemberConfirmDescription: '移除后，用户将失去该组织中的角色和权限。此操作无法撤销。',
        removeInvitingMember: '确认取消邀请{name}？',
        removeInvitingMemberDescription: '移除后，用户将无法加入该组织，需要重新邀请。该操作无法撤销。'
      }
    }
  },
  launcher: {
    provider: '云服务商',
    adminUrl: 'Launcher 管理页面'
  },
  session: {
    blockAccess: '你已被禁止访问此节点'
  },
  launchBlocklet: {
    appInfo: '应用信息',
    appInfoDesc: '确认应用信息',
    author: '应用作者：{author}',
    setup: '设置应用',
    redirect: '跳转',
    alreadyRunning: '应用 {name} 已经运行在当前节点',
    alreadyInstalled: '应用 {name} 已经安装到当前节点，无需重复安装',
    alreadyExists: '该应用已经存在，跳转中...',
    launchSuccess: '{appName} 已经启动成功！',
    nextStep: '下一步',
    purchased: '已购买',
    purchase: '购买',
    agreeAll: '同意并继续',
    agreement: '许可协议',
    installing: ' 正在节点 {serverName} 上安装 {appName}，请稍等片刻',
    redirecting: '安装成功，现正在启动 {appName}',
    start: '启动中',
    launch: '安装应用到节点',
    installSuccess: '应用已经成功安装到节点 {serverName} 并启动',
    openInRegistry: '在应用商店中打开',
    subTitle: '准备在节点 {serverName} 上安装 {appName}',
    installingSubTitle: '正在安装 {appName}',
    access: '打开应用',
    viewApplication: '查看应用',
    newVersion: '新版本',
    newVersionDesc: '应用已经存在，但当前版本可更新',
    later: '稍后',
    upgradeNow: '现在更新',
    introduction: '简介',
    welcome: '欢迎来到应用启动向导',
    accept: '许可协议',
    license: '应用许可',
    next: '同意协议并继续',
    purchaseApp: '购买应用',
    setupAppDesc: '初始化你的应用',
    launched: '启动',
    confirmInstall: '确认安装',
    dialog: {
      title: '成为应用所有者',
      nftFreeDescription: '请提空间购买凭证并创建应用账户以继续',
      nftPaidDescription: '请提空间购买凭证、应用购买凭证、创建应用账户以继续',
      freeDescription: '请创建应用账户以继续',
      paidDescription: '请提供应用购买凭证、并创建应用账户以继续',
      confirm: '在你的账户中确认',
      success: '授权成功',
      authorizationTimeout: '授权超时'
    },
    waiting: {
      verifying: '验证应用元数据...',
      downloading: '下载应用包...',
      extracting: '提取应用包的数据...',
      downloadingComponent: '下载 {name}',
      extractingComponent: '提取 {name}',
      installing: '安装应用组件...',
      installed: '已安装',
      starting: '正在启动应用...',
      done: '您的应用正在启动...',
      parsing: '正在解析应用元数据...',
      initializing: '正在初始化应用配置...',
      initializingOwner: '正在初始化应用所有者...',
      creatingSecurityRules: '正在创建默认安全规则...',
      assigningDomain: '正在为应用分配默认域名...',
      waitingForDomain: '正在等待默认域名生效...'
    },
    error: {
      loadMetaFailed: '获取应用信息出错',
      appMetaNotFound: '没有找到该应用的信息',
      downloadFailed: '下载应用失败，请重试',
      installFailed: '安装应用失败，请重试',
      startFailed: '启动应用失败，请重试',
      launchFailed: '启动应用失败，请重试',
      installedButStopped: '应用安装成功，但是无法启动，解决启动问题之后后可手动启动',
      installedButError: '应用已经安装，但是运行出错了',
      restoreFailed: '还原应用失败,请重试',
      resourceBlocklet: '此 Blocklet 无法直接启动，但你可以将其添加到现有的应用程序中。'
    },
    steps: {
      introduction: '简介',
      installApp: '安装应用',
      purchaseSpace: '选购空间',
      prepareSpace: '准备空间'
    },
    installRelatedComponents: '安装相关的 Blocklets',
    canNotInstall: '无法安装',
    dockerBlockletCantInstall: '无法安装 Blocklet，因为 Blocklet Server 未启用 Docker 或 Docker Network',
    nav: {
      myApps: '我的应用',
      viewMyApps: '查看我的应用'
    },
    withoutWallet: '暂不连接 DID Wallet',
    nwFailed: '获取工作流程失败。',
    alreadyConsumed: '启动会话已被使用',
    redirectToLauncherBlocklet: '正在跳转到 Launcher Blocklet'
  },
  issuePassport: {
    title: '领取通行证',
    description: '使用以下方法接收由 {name} 颁发的通行证',
    dialog: {
      confirm: '确认在你的账户',
      success: '通行证已成功添加到您的 DID Wallet ',
      loginWithPassport: '用此通行证连接',
      scan: '使用以下方法认领通行证',
      autoClose: '页面将在 {seconds} 秒后自动关闭',
      autoJump: '页面将在 {seconds} 秒后自动跳转'
    }
  },
  lostPassport: {
    title: '找回通行证',
    description: '{name} 所有者可使用下列方式找回通行证，成员请联系所有者重新颁发通行证',
    recoverDialog: {
      title: '找回通行证',
      scan: '使用以下方法找回通行证',
      confirm: '在您的 DID Wallet 上确认',
      success: '找回成功'
    },
    receiveDialog: {
      title: '领取通行证',
      scan: '使用以下方法领取通行证',
      confirm: '在您的 DID Wallet 上确认',
      success: '领取成功'
    },
    return: '取消找回操作，返回主页',
    recoverPassport: '找回通行证',
    receivePassport: '领取通行证'
  },
  invite: {
    message: '{name} 邀请你成为 {dapp} 的 {role}',
    success: '你已成功加入 {dapp}',
    receive: '领取通行证',
    validUntil: '过期时间：',
    viewPermission: '查看权限',
    emptyPermission: '没有权限',
    open: '打开',
    description: {
      step1: '下载并设置好您的 {wallet}',
      step2: '点击上面的按钮领取通行证',
      step3: '使用通行证登录 {dapp}'
    },
    transferNFTDialog: {
      title: '接受节点 {name}',
      scan: '连接节点启动器，以完成节点的接收。',
      confirm: '请在 DID Wallet 上确认',
      success: '连接成功，等待确认接收节点。'
    }
  },
  receive: {
    dialog: {
      title: '领取通行证',
      scan: '领取通行证后，您将可以使用此通行证来登录应用',
      confirm: '在您的账户中确认',
      success: '连接成功',
      scanWithDid: '请使用 {did} 帐户接收此通行证。收到通行证后，您可以使用该通行证登录到应用程序。'
    }
  },
  navigation: {
    actionFailed: '操作失败',
    navigation: '导航',
    form: {
      themeConfig: '主题配置',
      contentConfig: '内容配置',
      title: '标题',
      titlePlaceholder: '请输入导航标题',
      titleTooLong: '标题最长为 {len}',
      description: '描述',
      descriptionPlaceholder: '请输入导航描述',
      descriptionTooLong: '描述最长为 {len}',
      icon: '默认图标',
      iconPlaceholder: '请选择一个图标',
      invalidIcon: '图标不存在',
      findMoreIcon: '找到更多图标',
      link: '链接',
      linkPlaceholder: '请输入导航链接',
      invalidLink: '链接格式不正确',
      component: '组件',
      componentPlaceholder: '请选择导航所属的组件',
      role: '角色',
      rolePlaceholder: '请选择导航可见的角色',
      locale: '语言',
      localePlaceholder: '请输入要添加的多语言标识符',
      localeExists: '{value} 已经存在',
      activeIcon: '激活图标',
      activeColor: '激活颜色',
      color: '默认颜色',
      colorPlaceholder: '例如 #FF0000',
      invalidColor: '无效的16进制颜色',
      searchIcons: '搜索图标',
      searchIconsPlaceholder: '如：mdi:home'
    },
    action: {
      add: '增加导航',
      addSub: '增加子导航',
      edit: '编辑导航',
      hide: '隐藏导航',
      show: '显示导航',
      del: '删除导航',
      new: '新建',
      noAddSub: '未安装组件无法添加子导航',
      noEdit: '未安装组件的导航无法编辑',
      noDel: '内置的导航无法删除',
      reset: '重置',
      restConfirmTitle: '将 {section} 导航重置为默认设置？',
      restConfirmDesc: '您的自定义导航将被清除并恢复为默认项目。',
      resetSuccessful: '重置成功',
      delTabBarTitle: '您要删除此导航吗？',
      delTabBarDesc: '删除后，导航将恢复到 Blocklet 的默认配置'
    },
    access: '访问',
    members: '用户',
    passport: '通行证',
    analytics: '分析',
    dashboard: '仪表板',
    studio: '工作室',
    blockletService: 'Blocklet Service',
    didConnect: 'DID Connect',
    didSpaces: 'DID Spaces',
    website: '网站配置',
    operations: '运维工具',
    integration: '服务集成',
    developer: '开发者工具'
  },
  storage: {
    spaces: {
      title: 'DID Spaces',
      tips: '提示',
      label: '请输入 DID Spaces 服务地址',
      connected: {
        title: '已连接的 DID Spaces',
        tag: '已连接'
      },
      connectedWithName: '你已成功连接至 {name}',
      addedWithName: '你已成功添加 {name}',
      connects: '连接',
      reconnect: '重新连接',
      addressCannotEmpty: '地址不能为空',
      addressNotValid: '{url} 不是一个合法的地址',
      authorize: {
        title: '连接 {appName} 至 DID Spaces',
        scan: '使用以下方法允许应用 {appName} 连接到 DID Spaces',
        success: '连接成功'
      },
      provideNFT: {
        title: '请为 {appName} 出示 DID Spaces NFT',
        scan: '使用以下方法允许应用 {appName} 显示DID Space NFT',
        success: '连接成功'
      },
      backup: {
        title: '备份',
        records: '备份记录',
        without: '未备份',
        succeeded: '备份成功',
        failed: '备份失败',
        lastBackup: '上次备份时间',
        lastBackupTip: '距离您上次成功备份已是 {time}，请在“DID Spaces”选项卡中检查你的备份设置',
        noBackup: '没有备份',
        noBackupTip: '尚未创建任何备份。我们建议设置定期备份以保护您的数据和设置'
      },
      autoBackup: {
        title: '自动备份',
        enabled: '自动备份已开启',
        disabled: '自动备份已关闭'
      },
      autoCheckUpdate: {
        title: '自动检测新版本提醒',
        enabled: '自动检测新版本提醒已开启',
        disabled: '自动检测新版本提醒已关闭'
      },
      backupSuccessfully: '备份成功',
      restore: '还原',
      restoreSuccessfully: '还原成功',
      gateway: {
        select: '选择一个 DID Spaces',
        add: {
          title: '添加 DID Spaces',
          label: '输入 DID Spaces 的地址',
          failed: '添加 DID Spaces 失败',
          invalidUrl: '无效的 DID Spaces 网关地址',
          duplicate: '{name} 已连接到此 Blocklet'
        },
        delete: {
          title: '断开连接',
          succeeded: '成功断开连接 DID Space {name}',
          failed: '断开连接失败',
          failedForSelected: '无法断开连接所选的 DID Space',
          descForBackup: '断开连接后，您将无法再将此 Blocklet 的数据备份到此 DID Space。您确定要断开连接吗？\n断开连接后，您可以重新连接到 {name} 以恢复备份操作。',
          descForStorage: '断开连接后，您将无法再将此 Blocklet 的数据备份到此 DID Space。您确定要断开连接吗？\n断开连接后，您可以重新连接到 {name} 以恢复备份操作。'
        },
        connect: {
          title: '连接到 DID Spaces',
          add: '立即连接 DID Spaces',
          addTips: '你还没有连接到任何 DID Space',
          switch: '切换 DID Spaces',
          switchTips: '你已连接到 {name}',
          connected: '已连接'
        },
        switch: {
          failedForMismatchSpace: '请连接到正确的 DID 空间 {name}'
        },
        connectTo: '连接至 DID Spaces',
        title: '门户'
      },
      strategy: {
        title: '备份策略',
        autoBackup: '自动备份',
        backupNow: '立即备份',
        viewBackupFiles: '查看备份文件'
      },
      progress: {
        title: '备份进度'
      },
      record: {
        title: '备份记录',
        emptyData: '暂无记录'
      },
      notYet: '你还没有正在进行中的备份...',
      connect: {
        now: '立即连接',
        title: '使用 DID Wallet 连接',
        provider: '提供您的 DID Spaces 开始备份',
        providerForStorage: '提供您的 DID Space 进行数据存储',
        useWallet: '使用 DID Wallet 连接',
        useWalletReconnect: '使用 DID Wallet 重新连接',
        useSpaceGateway: '使用 DID Spaces 网关连接',
        useSpaceGatewayReconnect: '使用 DID Spaces 网关重新连接',
        switchToSpace: '切换至 DID Space',
        abortBlockletBackup: '停止备份',
        switchToSpaceSucceeded: '已切换到 DID Space {name}',
        succeeded: '你已成功连接至 DID Spaces',
        disconnect: '断开连接'
      },
      disconnected: {
        tag: '连接已断开',
        reconnectNow: '立即重连'
      }
    },
    appLevel: {
      title: '应用级存储',
      description: '应用生成的所有数据都存储在这个 DID Space 上'
    }
  },
  log: {
    lastDays: {
      1: '最近 1 天',
      7: '最近 1 周'
    }
  },
  oauth: {
    commonSettings: '通用设置',
    save: '保存',
    saveSuccess: '保存成功',
    saveFailed: '保存失败',
    issued: '颁发',
    thirdPartyLogin: '第三方登录',
    alreadyBindOAuth: '已绑定第三方登录',
    alreadyBindWallet: '已绑定 DID Wallet',
    viewDocument: '查看文档',
    auth0: {
      enable: '是否开启 Auth0 登录',
      domain: 'Domain',
      domainDescription: '请输入 Auth0 的 Domain',
      clientId: 'Client ID',
      clientIdDescription: '请输入 Auth0 的 Client ID',
      clientSecret: 'Client Secret',
      clientSecretDescription: '需要 Auth0 OAuth 应用程序 Client Secret'
    },
    comingSoon: '更多登录方式正在建设中',
    moreLogin: '更多登录方式',
    federated: '统一登录',
    runTest: '测试',
    github: {
      enable: '启用 Github 登录',
      clientId: 'Client ID',
      clientIdDescription: '需要 Github OAuth 应用的 Client ID',
      clientSecret: 'Client Secret',
      clientSecretDescription: '需要 Github OAuth 应用的 Client Secret'
    },
    twitter: {
      enable: '启用 X 登录',
      clientId: 'Client ID',
      clientIdDescription: '需要 X OAuth 应用的 Client ID',
      clientSecret: 'Client Secret',
      clientSecretDescription: '需要 X OAuth 应用的 Client Secret'
    },
    google: {
      enable: '启用谷歌登录',
      clientId: 'Client ID',
      clientIdDescription: '需要 Google OAuth 应用的 Client ID',
      clientSecret: 'Client Secret',
      clientSecretDescription: '需要 Google OAuth 应用的 Client Secret'
    },
    apple: {
      enable: '启用 Apple 登录',
      teamId: 'Team ID',
      teamIdDescription: '需要 Apple OAuth 应用程序 Team ID',
      serviceId: '服务编号',
      serviceIdDescription: '需要 Apple OAuth 应用 Service ID',
      keyId: 'Key ID',
      keyIdDescription: '需要 Apple OAuth 应用程序 Key ID',
      authKey: 'Auth Key',
      authKeyDescription: '需要苹果OAuth应用程序的 Auth Key',
      bundleId: 'Bundle ID',
      bundleIdDescription: '需要 Apple OAuth 应用 Bundle ID'
    },
    oauth: '第三方登录',
    authorize: 'OAuth 授权',
    client: {
      tab: 'OAuth 应用',
      name: '应用名称',
      clientId: 'Client ID',
      clientSecret: 'Client 秘钥',
      scope: '作用范围',
      redirectUris: '重定向 URI',
      grantTypes: '授权类型',
      responseTypes: '响应类型',
      tokenEndpointAuthMethod: '令牌端点身份验证方法',
      actions: '操作',
      grantResponse: '授权与回应',
      metaContact: 'Meta & 联系方式',
      clientUri: '客户端 URI',
      logoUri: 'Logo URI',
      contacts: '联系人',
      tosUri: '服务条款 URI',
      policyUri: '隐私策略 URI',
      jwksSoftware: 'JWKS & Software',
      jwksUri: 'JWKS URI',
      jwks: 'JWKS',
      softwareId: '软件 ID',
      softwareVersion: '软件版本',
      clientSecretExpiresAt: 'Client 密钥过期时间',
      clientIdIssuedAt: 'Client ID 发行时间',
      oauthAppDetails: 'OAuth 应用详情',
      oauthEndpoints: 'OAuth 端点',
      authorizationEndpoint: '授权端点',
      tokenEndpoint: '令牌端点',
      userinfoEndpoint: '用户信息端点',
      registrationEndpoint: '注册端点',
      endSessionEndpoint: '会话结束 Endpoint',
      validate: {
        clientName: '应用名称必填',
        clientNameMinLength: '应用名称必须至少包含3个字符',
        clientUri: '需要主页 URL',
        clientUriInvalid: '请输入以 http:// 或 https:// 开头的有效网址',
        redirectUris: '需要授权回调 URL',
        redirectUrisInvalid: '请输入以http:// 或 https:// 开头的有效网址',
        contacts: '请输入用逗号分隔的有效邮箱地址',
        tosUri: '需要服务条款 URL',
        tosUriInvalid: '请输入有效的 URL',
        policyUri: '需要隐私策略 URL',
        policyUriInvalid: '请输入有效的 URL',
        jwksUri: '需要 JWKS URI',
        jwksUriInvalid: '请输入有效的URL',
        jwks: '需要 JWKS',
        jwksInvalid: '请输入有效的 JWKS'
      },
      input: {
        clientName: '应用名称',
        clientNamePlaceholder: '用户熟悉并信任的内容',
        clientUri: '主页 URL',
        clientUriPlaceholder: 'https://your-app.com',
        redirectUris: '授权回调 URL',
        redirectUrisPlaceholder: 'https://your-app.com/callback',
        contacts: '联系邮箱',
        contactsPlaceholder: 'admin@your-app.com, support@your-app.com',
        permissions: '选择你需要的权限',
        tosUri: '服务条款 URL',
        tosUriPlaceholder: 'https://your-app.com/terms',
        policyUri: '隐私政策 URL',
        policyUriPlaceholder: 'https://your-app.com/policy',
        jwksUri: 'JWKS URI',
        jwksUriPlaceholder: 'https://your-app.com/jwks',
        jwks: 'JWKS',
        jwksPlaceholder: 'JSON Web 密钥集',
        expireTime: '设置客户端密钥的过期日期以增强安全性'
      },
      helperText: {
        clientName: '用户熟悉并信任的名称',
        clientUri: '你的应用程序主页面的完整 URL',
        redirectUris: '你应用的回调 URL。',
        contacts: '应用程序负责人的电子邮箱地址',
        tosUri: '你应用的服务条款网址。',
        policyUri: '你应用的隐私政策网址。',
        read: '阅读我们的',
        document: 'OAuth 文档',
        more: '获取更多信息。'
      },
      delete: {
        title: '删除 OAuth 客户端',
        description: '你确定要删除这个 {clientName} OAuth 客户端吗？'
      },
      register: '创建新的 OAuth 应用',
      requiredInformation: '所需信息',
      optionalInformation: '可选信息',
      registerButton: '创建',
      logo: 'Logo',
      openRegistration: '开放注册',
      openidConfiguration: 'OpenID 配置',
      createUser: '创建者',
      update: '更新 OAuth 应用',
      listTitle: '启用 OAuth 应用的安全第三方访问',
      tooltipTitle: '使用您应用内置的 OAuth 服务器来授权外部应用使用行业标准协议。赋予用户安全、无缝的身份验证和委托访问控制。',
      empty: '没有添加数据'
    }
  },
  expiration: {
    mobile: {
      tips: {
        success: '{validity}',
        warning: '{validity}',
        error: '订阅已过期'
      },
      loadFailed: '请重试!'
    },
    desktop: {
      tips: {
        success: '订阅将在{validity}后到期',
        warning: '订阅将在{validity}后到期',
        error: '订阅已过期'
      },
      loadFailed: '加载订阅信息失败，请重试!',
      loading: '加载订阅信息...',
      nextInvoice: '下次账单：{date}'
    }
  },
  analytics: {
    trend: '趋势',
    detail: '分布',
    traffic: {
      totalRequests: '总请求数',
      validRequests: '成功请求数',
      failedRequests: '失败请求数',
      uniqueVisitors: '访客数量',
      uniqueFiles: '网址数量',
      uniqueReferrers: '来源数量',
      uniqueNotFound: '404 数量',
      uniqueStaticFiles: '静态资源数量',
      logSize: '日志大小',
      bandwidth: '带宽消耗'
    },
    runtime: '运行时'
  },
  federated: {
    inviteJoinFederatedLogin: '邀请加入统一登录',
    inviteJoinFederatedLoginDescription: '复制以下地址到需要加入的应用中填入，申请加入统一登录',
    federatedLogin: '统一登录',
    joinFederatedLogin: '加入统一登录',
    joinFederatedLoginDescription: '请输入 Master Blocklet 提供的统一登录地址以加入统一登录',
    quitFederatedLogin: '退出统一登录',
    quitFederatedLoginDescription: '退出统一登录后，你仍可以使用普通的登录方式来登录',
    federatedJoinAppUrl: '统一登录地址',
    federatedJoinAppUrlRequired: '请输入统一登录地址',
    failedToGetFederatedLoginAppUrl: '获取统一登录地址失败',
    federatedJoinAppUrlInvalid: '统一登录地址不可用',
    siteDetail: '站点详情',
    approveToJoinLogin: '审核加入统一登录',
    approve: '恢复登录',
    revoke: '禁止登录',
    enableFederatedLogin: '启用统一登录',
    disableFederatedLogin: '禁用统一登录',
    enableFederatedLoginDescription: '启用统一登录后，该站点将自动登录',
    disableFederatedLoginDescription: '禁用统一登录后，该站点将无法自动登录',
    enableFederatedAutoLogin: '开启自动登录',
    enableFederatedAutoLoginDescription: '开启自动登录后，如果当前存在统一登录的状态，则该站点将自动登录统一登录的身份',
    disableFederatedAutoLogin: '关闭自动登录',
    disableFederatedAutoLoginDescription: '关闭自动登录后，该站点将不会自动登录统一登录的用户信息，您仍可选择手动点击登录统一登录的身份',
    info: {
      appId: '应用 DID',
      appPid: '永久 DID',
      migratedFrom: '曾用 DID',
      appName: '应用名称',
      appDescription: '应用描述',
      appUrl: '应用地址',
      appLogo: '应用图标',
      did: '应用 DID',
      serverId: 'Blocklet Server ID',
      serverVersion: 'Blocklet Server 版本',
      version: '应用版本',
      appliedAt: '申请时间',
      status: '状态'
    },
    status: {
      pending: '待审核',
      approved: '已通过',
      rejected: '已拒绝',
      revoked: '已撤销'
    },
    disbandFederatedLogin: '解散统一登录',
    disbandFederatedLoginDescription: '解散统一登录后，将自动让所有成员站点自动退出统一登录站点群',
    syncConfig: '同步站点群配置',
    quitMember: '移除',
    quitMemberDescription: '从站点组中移除指定成员',
    removeFederatedLogin: '移除成员',
    removeFederatedLoginDescription: '从站点组中移除指定成员后，成员只能使用普通登录。',
    title: '什么是统一登录？',
    description: '统一登录可以通过在多个系统中单点登录来实现。你可以邀请其他团队加入统一登录，或主动加入其他组织的统一登录平台。',
    link: '查看文档'
  },
  optionsOrder: {
    1: '选择一',
    2: '选择二'
  },
  securityRule: {
    title: '安全规则',
    sortByDescription: '按匹配优先级排序',
    add: '添加安全规则',
    edit: '编辑安全规则',
    view: '查看安全规则',
    form: {
      precede: '执行顺序',
      pathPattern: '路由匹配规则',
      pathPatternPlaceholder: '请输入路由匹配规则',
      pathPatternErrorText: '路由匹配规则无效',
      accessPolicyOrResponseHeaderPolicyRequired: '至少选择访问策略或响应头策略之一',
      accessPolicy: '访问策略',
      accessPolicyPlaceholder: '请选择访问策略',
      accessPolicyHelperText: '请选择访问策略',
      responseHeaderPolicy: '响应头策略',
      responseHeaderPolicyPlaceholder: '请选择响应头策略',
      responseHeaderPolicyHelperText: '请选择响应头策略',
      remark: '备注',
      remarkPlaceholder: '请输入备注',
      component: '组件',
      componentPlaceholder: '请选择组件'
    },
    delete: {
      title: '删除安全规则？',
      description: '删除安全规则后，规则将不再生效'
    },
    useless: '无用的安全规则'
  },
  responseHeaderPolicy: {
    title: '响应头策略',
    add: '添加响应头策略',
    edit: '编辑响应头策略',
    view: '查看响应头策略',
    form: {
      name: '姓名',
      namePlaceholder: '请输入你的名字',
      description: '描述',
      descriptionPlaceholder: '请输入描述',
      originOverride: '允许覆盖',
      originOverrideHelperText: '是否允许应用程序中的逻辑覆盖该响应头',
      cors: {
        origin: 'Origin',
        originPlaceholder: '支持下列域名格式：http://www.example.com, http://*.example.com, http://www.example.com:8080, (通配符不推荐使用)',
        originHelperText: '域名以 http:// 或 https:// 开头，每行一个，每行一个通配符 *',
        methods: 'Methods',
        allowedHeaders: 'Allowed Headers',
        allowedHeadersPlaceholder: '建议填写 *，支持多行输入',
        allowedHeadersHelperText: '告诉服务器在发送 OPTIONS 请求时，可以在下一请求中使用哪些自定义的 HTTP 请求头，例如: x-blocklet-version',
        exposedHeaders: 'Exposed Headers',
        exposedHeadersPlaceholder: '多行输入支持',
        exposedHeadersHelperText: '配置 Expose-Headers，例如: X-Content-Range',
        maxAge: 'Max-Age (秒)',
        maxAgeHelperText: '通过 OPTIONS 请求获得的结果的有效期，必须是正整数',
        optionsSuccessStatus: 'OPTIONS 成功状态码',
        preflightContinue: '预检是否继续传递给下一中间件',
        credentials: '是否携带凭证',
        smartMode: '智能模式',
        smartModeHelperText: '自动添加当前应用程序的所有域名以及统一登录网站组的所有域名'
      }
    },
    delete: {
      title: '删除响应标题政策？',
      description: '删除响应头策略后，该策略将不再生效'
    }
  },
  accessPolicy: {
    title: '访问策略',
    add: '添加访问策略',
    edit: '编辑访问权限策略',
    view: '查看访问策略',
    form: {
      name: '策略名称',
      namePlaceholder: '请输入策略名称',
      description: '策略描述',
      descriptionPlaceholder: '请输入策略描述',
      roles: '访问角色',
      accessType: '访问类型'
    },
    delete: {
      title: '删除访问策略？',
      description: '删除访问策略后，该策略将不再生效'
    }
  },
  pagination: {
    next: '下一页',
    previous: '上一页',
    rowsPerPage: '每页行数:',
    displayRows: '的',
    jumpToPage: '跳转到页面:'
  },
  webhookEndpoint: {
    createWebhook: '创建 Webhook',
    createWebhookTitle: '创建 Webhook',
    selectAllEvents: '选择所有事件',
    selectAllEventsTooltip: '选择所有可用事件',
    selectedEventsCount: '{count} 个事件已选择',
    selectedCount: '{count} 个已选择',
    eventsCount: '{count} 个事件',
    saveWebhook: '创建 Webhook',
    noAvailableEvents: '没有可用的事件',
    loadingEvents: '加载事件...',
    loadingError: '加载事件失败：{message}',
    title: 'Webhooks',
    noWebhooksAdded: '未添加任何 Webhook',
    validation: {
      urlRequired: 'Webhook URL 是必填的',
      urlInvalid: '请输入有效的 URL',
      descriptionRequired: 'Webhook 描述是必填的',
      eventRequired: '请选择至少一个事件'
    },
    hosted: '托管端点',
    add: '创建 Webhook',
    addTip: '设置你的 webhook 端点以接收实时事件',
    listen: '收听',
    version: 'API 版本',
    attempts: 'Webhook 事件',
    url: {
      label: 'URL',
      description: 'Webhook URL'
    },
    description: {
      label: '描述',
      description: '此端點用途的選填描述'
    },
    events: {
      label: '选择要收听的事件',
      description: '你好, {name}.'
    },
    disabled: '已禁用',
    enabled: '已启用',
    disable: '禁用',
    enable: '启用',
    editWebhookTitle: '更新 Webhook',
    updateWebhook: '更新 Webhook',
    waitingForEvents: '等待接收事件...',
    loadingMore: '正在加载...',
    loadMore: '加载更多',
    response: '回复',
    request: '请求',
    eventData: '事件数据',
    deleteWebhook: {
      title: '删除 Webhook？',
      description: '删除 Webhook 后，Webhook 将不再接收事件'
    },
    success: '成功',
    listTitle: '使用 Webhooks 发送实时事件数据',
    tooltipTitle: '通过发送实时事件通知，无缝连接你的应用到外部系统。Webhooks 支持强大的集成和跨工具及服务的自动化工作流程。',
    triggeredFrom: '此 Webhook 数据来自触发'
  },
  description: {
    environment: '当前变量将在 {name} 运行时生效。需要重启应用程序才能生效。',
    preferences: '当前变量将在 {name} 运行时生效。保存后将应用更改，无需重新启动应用程序。'
  },
  preferencesFor: '{name} 的偏好设置',
  environmentFor: '{name} 的环境变量',
  environmentTips: {
    delete: '你确定要删除此行吗？',
    deleteForbidden: '只有自定义环境变量可以被删除。'
  },
  accessKey: '访问密钥',
  command: '命令',
  mcp: {
    listTitle: '从 MCP 客户端访问你的 Blocklet',
    tooltipTitle: '探索此Blocklet支持的MCP服务器列表，选择一个服务器即可立即查看从客户端加入所需的连接命令。',
    endpoint: 'MCP 端点',
    available: '可用的 MCP 服务器',
    noServer: '没有可用的 MCP 服务器'
  },
  installCommand: '安装命令',
  label: {
    add: '添加',
    apply: '应用标签',
    manage: '管理标签',
    title: '标签',
    description: '描述',
    systemLabel: '系统标签',
    create: '创建标签',
    edit: '编辑标签',
    name: '名称',
    slug: '标识（Slug）',
    parentLabel: '父标签',
    color: '颜色',
    search: '搜索标签',
    saveSuccess: '标签已成功保存',
    delete: '删除',
    deleteTip: '确定删除“{name}”？',
    deleteDesc: '删除标签后，该标签将不再被使用。确定要删除“{name}”吗？',
    deleteSuccess: '标签已成功删除',
    reassignTip: '如果该标签正在被使用，可将相关项目重新分配到其他标签。',
    reassignTo: '选择新的标签',
    recently: '最近',
    noMatching: '未找到匹配的标签',
    noLabels: '尚未创建任何标签',
    filter: '筛选标签',
    createNewLabel: '创建新标签“{name}”',
    actionLabel: '批量分配标签',
    selectLabels: '选择标签',
    nameRequired: '标题为必填项',
    nameMinLength: '标题至少需要 1 个字符',
    nameMaxLength: '标题不能超过 64 个字符',
    slugRequired: '标识（Slug）为必填项',
    slugMinLength: '标识至少需要 1 个字符',
    slugMaxLength: '标识不能超过 128 个字符',
    descriptionMaxLength: '描述不能超过 255 个字符',
    colorRequired: '颜色为必填项',
    colorInvalid: '颜色无效'
  }
};