RSS Git Download  Clone
Raw Blame History 42kB 1091 lines
const strings = {
  error: {
    server_error: "服务器错误,请重试",
    aiPromptTooLong: "AI 提示过长(最多 4096 个字符)",
  },
  title: {
    donate: "捐赠",
    donateTitle: "支持 P3X Redis UI",
    donateDescription: "P3X Redis UI 是一个免费的开源项目。应用程序、AI 功能、Docker 镜像、服务器和基础设施的维护成本均来自开发者自掏腰包。如果您觉得这个工具有用,请考虑通过捐款支持其持续开发。每一份贡献都有助于保持项目的活力和发展。谢谢!",
    jsonRecursive: "展开所有叶子",
    name: "P3X Redis UI",
    nameDonated: "P3X Redis UI+",
    main: "您可以从左下方菜单中选择要连接的Redis进行连接访问",
    statistics: "Statistics",
    error: "错误",
    connectingRedis: "连接到Redis ...",
    socketioConnectError: "Socket.IO 错误",
    db: "DB",
    server: "服务端",
    clients: "客户端",
    memory: "内存",
    persistence: "持久性",
    stats: "统计",
    replication: "同步复制",
    cpu: "CPU",
    cluster: "集群",
    modules: "模块",
    errorstats: "错误统计",
    commandstats: "命令统计",
    latencystats: "延迟统计",
    keysizes: "键大小",
    threads: "线程"
  },
  confirm: {
    dropIndex: "确定要删除此索引吗?",
    uploadBuffer: "您确定上传此二进制数据吗?",
    uploadBufferDone: "二进制数据已上传",
    uploadBufferDoneAndSave: "二进制数据上传并保存在服务器上",
    title: "确认",
    alert: "警告",
    info: "信息",
    deleteListItem: "您确定要删除该列表项吗?",
    deleteHashKey: "您确定要删除该哈希键项吗?",
    deleteStreamTimestamp: "您确定要删除此流时间戳吗?",
    deleteSetMember: "您确定要删除该集合成员?",
    deleteZSetMember: "您确定要删除该有序集合成员?",
    deleteConnection: "确认",
    deleteConnectionText: "您确定要删除此Redis连接吗?",
    deleteNode: "您确定要删除此Redis节点吗?",
    delete: "删除?",
    deleteAllKeys: opts => {
      return `删除此树及其所有键 (${opts.key})?`;
    },
    deleteSearchKeys: opts => {
      return `确定要删除所有匹配 "${opts.pattern}" 的键吗?找到 ${opts.count} 个键。`;
    },
    socketioConnectError: "Socket.IO 无法连接到该服务,请重新加载并尝试解决此错误,客户端无法解决此错误",
    socketioAuthRequired: "Socket.IO 需要授权。请先完成 HTTP Basic Auth(用户名/密码)后再刷新页面。",
    invalidCredentials: "用户名或密码无效。",
    deleteKey: "您确定要删除此键吗?",
    rename: {
      title: "您确定要重命名此键吗?",
      textContent: "如果您点击重命名按钮,它将永久重命名此键。",
      placeholder: "Redis键(必须存在)"
    },
    ttl: {
      title: "您要更改此键的TTL吗?",
      textContent: "如果您点击更改TTL按钮,将更改此键的生存时间,将其设置为空表示永久有效。",
      placeholder: "Redis键的TTL(整数或空)",
      placeholderPlaceholder: "空表示永久存在,否则使用所提供的整数。",
      convertTextToTime: "将文本转换为时间",
      convertTextToTimePlaceholder: "例如,1d 表示 86400"
    }
  },
  language: {
    bg: "Български / Bulgarian",
    cs: "Čeština / Czech",
    de: "Deutsch / German",
    el: "Ελληνικά / Greek",
    en: "英语 / English",
    es: "Español / Spanish",
    fr: "Français / French",
    hu: "Magyar / Hungarian",
    it: "Italiano / Italian",
    ja: "日本語 / Japanese",
    nl: "Nederlands / Dutch",
    pl: "Polski / Polish",
    "pt-PT": "Português / Portuguese",
    ro: "Română / Romanian",
    ru: "Русский / Russian",
    sk: "Slovenčina / Slovak",
    sr: "Српски / Serbian",
    sv: "Svenska / Swedish",
    tr: "Türkçe / Turkish",
    uk: "Українська / Ukrainian",
    zn: "中文 / Chinese",
    ar: "العربية / Arabic",
    az: "Azərbaycanca / Azerbaijani",
    be: "Беларуская / Belarusian",
    bn: "বাংলা / Bengali",
    da: "Dansk / Danish",
    et: "Eesti / Estonian",
    fi: "Suomi / Finnish",
    fil: "Filipino / Filipino",
    he: "עברית / Hebrew",
    hr: "Hrvatski / Croatian",
    hy: "Հայերեն / Armenian",
    id: "Bahasa Indonesia / Indonesian",
    ka: "ქართული / Georgian",
    kk: "Қазақша / Kazakh",
    km: "ខ្មែរ / Khmer",
    ko: "한국어 / Korean",
    ky: "Кыргызча / Kyrgyz",
    lt: "Lietuvių / Lithuanian",
    mk: "Македонски / Macedonian",
    ms: "Bahasa Melayu / Malay",
    ne: "नेपाली / Nepali",
    no: "Norsk / Norwegian",
    "pt-BR": "Português (Brasil) / Portuguese (Brazil)",
    sl: "Slovenščina / Slovenian",
    tg: "Тоҷикӣ / Tajik",
    th: "ไทย / Thai",
    vi: "Tiếng Việt / Vietnamese",
    "zh-HK": "中文(香港) / Chinese (Hong Kong)",
    "zh-TW": "中文(台灣) / Chinese (Taiwan)",
    bs: 'Bosanski / Bosnian',
    si: 'සිංහල / Sinhala',
    sw: 'Kiswahili / Swahili',
    ta: 'தமிழ் / Tamil'
  },
  intention: {
    copy: "复制",
    downloadBuffer: "下載二進位文件",
    setBuffer: "上傳二進位文件",
    exportKeys: "导出键",
    exportAllKeys: (opts) => `导出全部 ${opts.count} 个键`,
    exportSearchResults: (opts) => `导出 ${opts.count} 个结果`,
    deleteAllKeysMenu: (opts) => `删除全部 ${opts.count}`,
    importKeys: "导入键",
    deleteSearchKeys: (opts) => `删除 ${opts.count} 个匹配的键`,
    saveWithFormatJson: "保存格式",
    formatJson: "格式化Json",
    wrap: "自动换行",
    unwrap: "不换行",
    downloadJson: "下载 JSON",
    pubsubMonitor: "PubSub",
    pulse: "Pulse",
    profiler: "Profiler",
    memoryAnalysis: "Analysis",
    language: "语言 / Language",
    ok: "确定",
    addKey: "加入此键",
    addKeyRoot: "加入一个根键",
    reloadKey: "重载键",
    reload: "重载",
    close: "关闭",
    commands: "命令",
    view: "视图",
    statistics: "统计",
    refresh: "刷新",
    pause: "暂停",
    resume: "继续",
    clear: "清除",
    rename: "重命名",
    main: "数据库",
    cancel: "取消",
    theme: "主题",
    github: "GitHub",
    githubRepo: "仓库",
    githubRelease: "发布",
    githubChangelog: "更新日志",
    info: "Info",
    settings: "设置",
    connect: "连接",
    disconnect: "断开",
    logout: "登出",
    overview: "概览",
    console: "控制台",
    noConnections: "没有任何连接,请在设置菜单中添加一个连接。",
    noConnectionsInSettings: "没有连接,您可以在上面添加一个新的连接。",
    connectionAdd: "新连接",
    addGroup: "添加分组",
    extend: "拓展",
    collapse: "折叠",
    add: "添加",
    edit: "编辑",
    save: "保存",
    ttl: "设置 TTL",
    fieldTtl: "字段 TTL",
    digest: "摘要",
    delete: "删除",
    remove: "删除",
    areYouSure: "你确定吗?",
    sure: "确定",
    testConnection: "测试连接",
    getKey: "加载Redis键及相关数据...",
    jsonViewShow: "显示 JSON 树",
    jsonViewEditor: "编辑JSON",
    quickConsole: "快的",
    moveUp: "上移",
    moveDown: "下移",
  },
  diff: {
    reviewChanges: "\u67e5\u770b\u66f4\u6539",
    inline: "\u884c\u5185",
    sideBySide: "\u5e76\u6392",
    additions: "\u65b0\u589e",
    deletions: "\u5220\u9664",
    unchangedLines: "\u672a\u66f4\u6539\u7684\u884c",
    noChanges: "\u672a\u68c0\u6d4b\u5230\u66f4\u6539",
    before: "\u53d8\u66f4\u524d",
    after: "\u53d8\u66f4\u540e",
  },
  label: {
    id: {
      nodeId: '节点号',
      id: "连接ID",
      info: "如果您不想更改以下属性:sshPassword、sshPrivateKey、password、tlsCrt、tlsKey、tlsCa,请在这些属性中输入连接 ID 以保持属性值不变。 如果您希望节点密码具有相同的逻辑,则在节点密码中输入节点 ID。"
    },
    secureFeature: '如果您看到以 P3X 开头的值并且看起来相似,则这是一项安全功能。 要更改设置,只需将这些设置替换为空或其他内容即可保存它们。 如果您不更改设置,这些设置将保留在服务器上的原样。',
    aiTranslating: "翻译中...",
    aiSettings: "AI 设置",
    aiGroqApiKey: "Groq API 密钥",
    aiGroqApiKeyInfo: "可选。使用自己的 Groq API 密钥获得更好性能。免费获取密钥",
    aiGroqApiKeyPlaceholder: "gsk_...",
    aiGroqApiKeySaved: "AI API 密钥已保存",
    aiGroqApiKeyInvalid: "无效的 Groq API 密钥",
    aiGroqApiKeyNotSet: "未设置(使用服务器默认)",
    aiEnabled: "AI 已启用",
    aiEnabledYes: "是",
    aiEnabledNo: "否",
    aiRouteViaNetwork: "通过 network.corifeus.com 路由",
    aiRoutingDirect: "使用您自己的 API 密钥直接向 Groq 发送查询,绕过 network.corifeus.com。",
    aiRoutingNetwork: "AI 查询通过 network.corifeus.com 路由。如果您有自己的免费 Groq API 密钥,可以关闭此开关直接使用 Groq。",
    aiMaxTokens: "AI 最大令牌数",
    aiMaxTokensInfo: "用于 AI 回复的最大令牌数。更高的值可以生成更长的回复,但可能会消耗更多 API 额度。",
    consoleDrawer: {
      toggleTooltip: "切换控制台",
      clearTooltip: "清除回滚记录",
      closeTooltip: "关闭控制台",
      aiSettingsTooltip: "AI 设置",
      modeRedis: "REDIS",
      modeAi: "AI",
      connectionChipNoDb: opts => `${opts.name}`,
      connectionChipWithDb: opts => `${opts.name} · db ${opts.db}`,
      pageChip: opts => `页: ${opts.page}`,
      connectingTo: opts => `正在连接到 ${opts.name}…`,
      connectedTo: opts => `已连接到 ${opts.name}(Redis ${opts.version} ${opts.mode},已加载 ${opts.modules} 个模块)`,
      connectedToNoInfo: opts => `已连接到 ${opts.name}`,
      disconnectedFrom: opts => `已从 ${opts.name} 断开连接`,
      notConnected: "未连接。",
      limitedAiOnly: "仅限受限 AI 模式,仍可进行通用 Redis 问答。",
      connectHint: "如需实时诊断,请输入:connect <name>",
      cheatsheetHint: "输入 ai: help 查看你可以提问的内容。",
      needsConnection: "此功能需要有效连接。请先输入 \"connect <name>\"。",
      aiNeedsConnectionReason: "实时状态 AI(tool use)仅在连接到 Redis 时可用。",
      verbNeedsConnection: opts => `"${opts.verb}" 需要有效连接,请先输入 "connect <name>"。`,
      aiLimitedMode: "AI 当前处于受限模式,连接前只能回答通用 Redis 知识问题。",
      welcomeDisconnected: "欢迎。你目前尚未连接到任何 Redis 实例。",
      readyIndicator: "就绪。",
    },
    cheatsheet: {
      title: "AI 速查表 — 我可以问什么?",
      subtitle: "点击任一提示即可粘贴到控制台,然后按回车。",
      searchPlaceholder: "筛选提示…",
      openOfficialDocs: "Redis 命令 ↗",
      openOfficialDocsTooltip: "在 redis.io 打开官方 Redis 命令参考",
      closeTooltip: "关闭 (Esc)",
      empty: "没有提示符合你的筛选条件。",
      footerHint: "提示:输入 \"ai:\" 后面接任何语言的任何内容 — AI 能理解 54 种语言,并在需要时使用实时的 Redis 状态。",

      // Each group has: name (category label), match (search-filter alias), prompts (array of example strings)
      groups: {
        diagnostics: {
          name: "实时诊断",
          description: "让 AI 通过安全的只读工具调查服务器的实时状态。",
          prompts: [
            "为什么内存这么高?",
            "显示最慢的 10 条查询",
            "有哪些客户端已连接?",
            "maxmemory 策略是什么?",
            "最近有没有键被驱逐?",
            "有没有延迟事件?",
            "服务器已运行多久?",
            "命中率是多少?",
            "显示 CPU 使用率",
            "总结键空间",
            "每种数据类型使用了多少内存?",
            "目前有什么在阻塞服务器?"
          ]
        },
        keys: {
          name: "键",
          description: "无需在树上点击即可查看、查找和分析键。",
          prompts: [
            "找出所有匹配 user:* 的键",
            "每个数据库有多少个键?",
            "显示这个 db 中最大的 hash",
            "找出 TTL 小于 60 秒的键",
            "哪些键没有 TTL?",
            "键 session:abc 是什么类型?",
            "估算 \"session:\" 前缀所使用的内存",
            "显示键 user:42 的对象编码",
            "有没有键即将过期?",
            "哪个命名空间使用了最多内存?"
          ]
        },
        dataTypes: {
          name: "数据类型",
          description: "用自然语言描述对每种 Redis 类型执行创建/读取/更新。",
          prompts: [
            "创建一个名为 user:1 的 hash,字段为 name=Alice age=30",
            "向 list tasks 添加三个元素",
            "向 set favourites 添加成员",
            "向 sorted set leaderboard 添加带分数的成员",
            "向 stream events 追加一个事件",
            "获取 stream events 的最后 10 条记录",
            "获取 hash user:1 的所有字段",
            "获取 set favourites 的成员",
            "从 leaderboard 获取分数前 10 名"
          ]
        },
        modules: {
          name: "模块",
          description: "针对已加载的 Redis 模块的查询(下方分类仅在对应模块存在时显示)。",
          prompts: []
        },
        json: {
          name: "RedisJSON",
          description: "当 ReJSON 模块被加载时可用。",
          prompts: [
            "在 user:42 创建一个 JSON 文档,内容为 { name: \"Alice\", age: 30 }",
            "读取 user:42 的 name 字段",
            "把 user:42 的 age 更新为 31",
            "列出所有 JSON 键",
            "从一个 JSON 文档删除一个字段",
            "使用 JSONPath 获取嵌套字段"
          ]
        },
        search: {
          name: "RediSearch",
          description: "当 search 模块被加载时可用。",
          prompts: [
            "列出所有全文索引",
            "在索引 idx:products 上对 \"redis\" 执行全文搜索",
            "创建一个基于 hash 的索引,字段 title (TEXT) 和 price (NUMERIC)",
            "获取索引 idx:products 的信息",
            "删除索引 idx:products",
            "找出价格介于 10 到 50 之间的文档",
            "编写一个结合文本和向量相似度的混合搜索"
          ]
        },
        timeseries: {
          name: "RedisTimeSeries",
          description: "当 timeseries 模块被加载时可用。",
          prompts: [
            "列出所有 timeseries 键",
            "向 temp:room1 添加一个数据点",
            "获取 temp:room1 从昨天到现在的范围",
            "按标签 sensor=temp 获取多范围",
            "为 temp:room1 生成 100 个正弦波数据点",
            "显示 temp:room1 的保留期与标签"
          ]
        },
        bloom: {
          name: "RedisBloom (Bloom / Cuckoo / Top-K / CMS / T-Digest)",
          description: "当 bf 模块被加载时可用。",
          prompts: [
            "检查条目 foo 是否存在于 bloom filter spam:ips 中",
            "向 bloom filter spam:ips 添加条目",
            "创建一个名为 popular 的 top-K,K=10",
            "对键 /home 查询 count-min sketch traffic",
            "向 t-digest 添加数值并获取第 95 百分位",
            "显示 bloom filter spam:ips 的信息"
          ]
        },
        vectorSet: {
          name: "VectorSet (Redis 8+)",
          description: "当检测到 Redis 8+ 时可用(原生 VECTORSET 类型)。",
          prompts: [
            "向 embeddings 添加一个向量",
            "找出与查询向量最相似的 10 个向量",
            "显示 vectorset embeddings 的维度和数量",
            "从 vectorset embeddings 删除一个元素",
            "使用 VSIM 按元素名称搜索"
          ]
        },
        redis8: {
          name: "Redis 8+ 功能",
          description: "当检测到 Redis 8+ 时显示。",
          prompts: [
            "使用 HEXPIRE 设置 hash 字段的 TTL",
            "获取字符串值的摘要",
            "执行混合全文 + 向量搜索 (FT.HYBRID)",
            "使用 MSETEX 为多个键设置共享过期时间",
            "带消费者组删除 stream 条目 (XDELEX)",
            "显示前 10 个 slot 的 cluster slot-stats"
          ]
        },
        scripting: {
          name: "脚本",
          description: "根据自然语言描述生成 Lua / EVAL 脚本。",
          prompts: [
            "编写一个原子脚本,仅在 Y > 5 时递增计数器 X",
            "使用 Lua 生成 100 个随机键",
            "将这条 shell 管道转换为单个 EVAL:keys user:* | GET | grep inactive | DEL",
            "为了 cluster 安全性,将一个批量操作移植到 Lua",
            "在单个 Lua 调用中完成 check-and-set 风格的更新",
            "遍历一个 hash,删除符合某种模式的字段"
          ]
        },
        cluster: {
          name: "集群",
          description: "仅在 cluster 模式下显示。",
          prompts: [
            "显示 cluster 信息",
            "列出 cluster 节点",
            "按键数量显示前 10 个 slot",
            "按内存显示前 10 个 slot",
            "哪个 master 拥有 slot 5000?"
          ]
        },
        acl: {
          name: "ACL (Redis 6+)",
          description: "查看访问控制用户以及当前连接。",
          prompts: [
            "我以哪个身份连接?",
            "列出所有 ACL 用户",
            "我有哪些权限?",
            "显示 default 用户的规则"
          ]
        },
        qna: {
          name: "常规问答",
          description: "提问 Redis 相关的知识性问题 — 不使用工具,只给答案。",
          prompts: [
            "什么是 ZADD?",
            "cluster failover 是如何工作的?",
            "解释 SCAN 与 KEYS 的区别",
            "什么时候该用 EVAL 而不是多条命令?",
            "Redis 有哪些持久化选项?",
            "RDB 和 AOF 有什么区别?",
            "Redis Sentinel 如何决定新的 master?",
            "解释 cluster 模式下的 hash tag"
          ]
        },
        translate: {
          name: "自然语言 → Redis 命令",
          description: "用中文(或 54 种语言中的任何一种)描述你想做什么,AI 会写出对应的 Redis 命令。",
          prompts: [
            "删除键 user:42",
            "把键 foo 重命名为 bar",
            "让键 session:abc 在 10 秒后过期",
            "把键 source 复制到 destination",
            "把计数器 visits 加 5",
            "把键 greeting 设为 \"hello\",有效 1 小时",
            "显示最常被访问的 10 个键",
            "删除所有匹配 temp:* 的键"
          ]
        }
      }
    },
    ssh: {
      on: 'SSH 开启',
      off: 'SSH 关闭',
      sshHost: 'SSH 主机',
      sshPort: 'SSH端口',
      sshUsername: 'SSH 用户名',
      sshPassword: 'SSH密码',
      sshPrivateKey: 'SSH 私钥'
    },
    isBuffer: opts => `[object ArrayBuffer] 表示該值是二進位緩衝區或該值大於 ${opts.maxValueAsBuffer}`,
    streamValue: `流字段和值是唯一的。 例如:field1 value1 "field 2" "value 2"`,
    streamTimestampId: `'*'表示自动生成或指定为<millisecondsTime>-<sequenceNumber>`,
    unableToLoadKey: ({
      key
    }) => {
      return `无法加载此密钥:: ${key}。可能,密钥被删除了。确切的错误在控制台中。`;
    },
    bigJson: "此JSON对象超过10 kb,因此请确保您知道自己在做什么,因为某些功能可能会缓慢呈现。",
    addNode: "添加节点",
    validateJson: "验证JSON",
    reducedFunction: `功能限制`,
    tooManyKeys: opts => {
      return `对于最大函数允许的键个数为 ${opts.maxLightKeysCount}. 该数据库允许共超过的键总数为 ${opts.count}.但键的排序及范式树等相关信息会被禁用。搜索仅在服务器上进行,而不是客户端搜索。`;
    },
    redisCommandNotFound: "找不到匹配的Redis命令...",
    treeKeyStore: `该排序(自然排序)运行在客户端的浏览器上, 意味着针对大型集合(例如超过1W个键),渲染的时长开销需要增加.Redis中没有键排序, 就像这样。`,
    socketIoTimeout: options => {
      return `Socket.IO 请求超时,请求时最长(最大 ${options.timeout / 1000}秒) ...`;
    },
    resizerInfo: options => {
      return `面板(左/右)的最小宽度是 ${options.width}像素`;
    },
    jsonViewNotParsable: "该值JSON无法解析",
    ttlTitle: "设置TTL时间(秒)",
    passwordSecure: "密码可能为空,但仍会显示字符,这是一项安全功能。",
    aclAuthHint: "使用 Redis ACL 用户名和密码进行身份验证。对于没有密码的默认用户,请留空。",
    treeSeparatorEmpty: "如果树分隔符为空,则树将没有嵌套节点,只有纯列表",
    tlsWithoutCert: "无需额外证书即可启用 TLS",
    tlsRejectUnauthorized: "拒绝未经授权的证书",
    tlsSecure: "如果您看到以 P3X 开头的 TLS 配置或所有 TLS 设置看起来都相同,则这是一项安全功能。 要更改设置,只需将这些设置替换为空或其他内容即可保存。 如果您不更改 TLS 设置,这些设置将保持在服务器上的原样。",
    treeSeparatorEmptyNote: "没有嵌套节点,只是一个纯列表",
    welcomeConsole: "欢迎来到Redis控制台",
    welcomeConsoleInfo: "SHIFT + 上下方向键选择历史记录功能已启用",
    redisListIndexInfo: "空值追加, -1 到前置或保存到光标之处",
    console: "控制台",
    connectiondAdd: "添加连接",
    connectiondEdit: "编辑连接",
    connectiondView: "查看连接",
    connections: "连接",
    keysSort: {
      on: "开启键排序",
      off: "关闭键排序"
    },
    cluster: {
      on: "群集",
      off: "集群关闭"
    },
    sentinel: {
      on: "哨兵開啟",
      off: "哨兵關閉",
      name: '哨兵名称'
    },
    readonly: {
      on: "只读",
      off: "只读关闭"
    },
    theme: {
      light: "浅棕",
      dark: "黑暗企业",
      darkNeu: "暗色",
      darkoBluo: "蓝色",
      enterprise: "企业风",
      redis: "Redis风格",
      matrix: "矩阵"
    },
    connected: opts => {
      return `已连接: ${opts.name}`;
    },
    tree: "树",
    askAuth: "请求授权",
    keyboardShortcuts: "键盘快捷键",
    about: "关于",
    supportedLanguages: "支持的语言",
    version: "版本",
    redisVersion: "Redis 版本",
    modules: "模块",
    shortcutRefresh: "刷新",
    shortcutSearch: "聚焦搜索",
    shortcutNewKey: "新建键",
    shortcutDisconnect: "断开",
    themeAuto: "自动(系统)",
    languageAuto: "Auto (system)",
    shortcutCommandPalette: "命令面板",
    commandPalette: "命令面板",
    noResults: "无结果",
    redisCommandsReference: "Redis 命令",
    ungrouped: "未分组",
    grouped: "已分组",
    connectFirst: "请先连接到 Redis 服务器",
    searchLanguage: "搜索语言...",
    exportProgress: "正在导出键...",
    importProgress: "正在导入键...",
    importPreview: "预览",
    importOverwrite: "覆盖",
    importSkip: "跳过",
    importConflict: "如果键已存在:",
    noKeysToExport: "没有键可导出",
    time: "时间",
    type: "类型",
    format: "格式",
    loading: "加载中...",
    autoRefresh: "自动",
    exportSearchHint: "仅导出与当前搜索匹配的键",
    importSearchHint: "导入适用于整个数据库,而不仅仅是搜索结果",
    deleteSearchHint: "删除所有匹配当前搜索的键",
    deletingSearchKeys: "正在删除匹配的键...",
    importNoKeys: "文件中未找到键",
    desktopNotifications: "桌面通知",
    desktopNotificationsEnabled: "启用桌面通知",
    desktopNotificationsInfo: "当应用程序不在焦点时,接收 Redis 断线和重新连线的操作系统通知。"
  },
  status: {
    dataCopied: "数据在剪贴板中",
    exportDone: "导出完成",
    deletedSearchKeys: (opts) => `已删除 ${opts.count} 个键`,
    indexCreated: "索引已创建",
    indexDropped: "索引已删除",
    importDone: (opts) => `导入完成:${opts.created} 已创建,${opts.skipped} 已跳过,${opts.errors} 个错误`,
    nodeRemoved: "节点已删除",
    keyIsNotExisting: "此键可能已被删除或过期。",
    keyCount: opts => {
      if (opts.keyCount === 0) {
        return "没有任何键";
      } else if (opts.keyCount === 1) {
        return "1 个键";
      } else {
        return `${opts.keyCount} 键`;
      }
    },
    treeExpandAll: "展开所可能的原因是,连接已删除,自动连接失败有树,该操作的代价就是有点费时...",
    noRedisKeys: "此数据库中没有任何键。",
    redisConnected: "Redis 连接成功",
    reverted: "\u5df2\u8fd8\u539f",
    reloadingDataInfo: "重新加载Redis数据信息",
    added: "已添加",
    saved: "已更新",
    cancelled: "已取消",
    deleted: "已删除",
    savedRedis: "Redis数据已保存",
    redisDisconnected: opts => {
      return `该连接有一个错误: ${opts.error.message}`;
    },
    dbChanged: opts => {
      return `db索引设置为 ${opts.db}. `;
    },
    treeDeleted: opts => {
      return `该树已删除 (${opts.key}).`;
    },
    deletedKey: opts => {
      return `该键已删除 (${opts.key}).`;
    },
    renamedKey: "该键已重命名",
    ttlChanged: "该键TTL已被更改",
    notInteger: "输入值不是一个整数",
    persisted: "永久键",
    set: "键已设置/添加",
    connectionRestored: "连接已恢复",
    socketDisconnected: "已断开连接",
    socketError: "连接错误",
    deletedHashKey: "哈希键已删除",
    deletedSetMember: "集合成员已删除",
    deletedListElement: "列表元素已删除",
    deletedZSetMember: "有序集合成员已删除",
    deletedStreamTimestamp: "流条目已删除",
  },
  code: {
    "delete-connection": "此连接已删除,因此您与此Redis实例断开连接。",
    "save-connection": "此连接已更改,因此您与此Redis实例断开连接。 你可以重新连接。",
    "readonly-connections": "连接(添加/保存/删除)只是只读!",
    "readonly-connection-mode": "此连接为只读模式!",
    "list-out-of-bounds": "此列表索引超出范围",
    "invalid-json-value": "The value is not valid JSON.",
    "http_auth_required": "需要授权:请先完成 HTTP Basic Auth 登录后再刷新页面。",
    "auto-connection-failed": "因此,可能导致连接被删除并且自动连接失败。",
    invalid_console_command: "此命令无法通过 GUI 运行。",
    "AI_DISABLED": "AI 已禁用。请在 AI 设置中启用。",
    "AI_PROMPT_REQUIRED": "需要 AI 提示。",
    "GROQ_API_KEY_READONLY": "Groq API 密钥为只读,无法修改。",
    "blocked_api_access": "您的 Groq API 计划不允许访问此模型。请升级您的 Groq 计划或使用 network.corifeus.com 代理。",
    "rate_limit": "已达到 AI 速率限制。请稍后重试或在设置中使用您自己的 Groq API 密钥。"
  },
  form: {
    error: {
      required: "必填",
      port: "端口号范围是 1-65535",
      invalid: "值无效,请重新输入"
    },
    connection: {
      label: {
        name: "连接名字",
        group: "分组",
        host: "主机名",
        port: "端口",
        password: "密码",
        username: "用户名"
      }
    },
    treeSettings: {
      maxValueDisplay: "最大值显示字符串长度",
      maxValueDisplayInfo: "如果最大值显示为零,则显示所有内容,如果大于0,则将截断。 如果它是-1,它将不显示没有编辑字符串的值,对于其他人,它显示所有内容。",
      maxKeys: "最大密钥数",
      maxKeysInfo: "为了避免GUI崩溃,我们限制了最大密钥数。",
      keyCount: (opts) => {
        return `键数: ${opts?.keyCount ?? 0}`;
      },
      label: {
        animation: "使用动画",
        noAnimation: "没有动画",
        undoEnabled: "\u5df2\u542f\u7528\u64a4\u9500",
        undoDisabled: "\u5df2\u7981\u7528\u64a4\u9500",
        diffEnabled: "\u4fdd\u5b58\u524d\u663e\u793a diff",
        diffDisabled: "\u4fdd\u5b58\u524d diff \u5df2\u7981\u7528",
        jsonFormatTwoSpace: "用2个空格格式化JSON",
        jsonFormatFourSpace: "用4个空格格式化JSON",
        formName: "Redis设置",
        searchModeClient: "客户端搜索模式",
        searchModeServer: "服务端搜索模式",
        searchModeStartsWith: "以模式启动搜索",
        searchModeIncludes: "搜索包括模式"
      },
      undoHint: "\u64a4\u9500\u4ec5\u9002\u7528\u4e8e string \u548c JSON \u7c7b\u578b\u7684\u952e",
      field: {
        treeSeparator: "树分隔符",
        treeSeparatorSelector: "树分隔符选择器",
        page: "树分页数",
        keyPageCount: "按键分页数",
        keysSort: "对键进行排序",
        searchMode: "搜索模式",
        searchModeStartsWith: "搜索以 / 开头"
      },
      error: {
        keyPageCount: "密钥页数必须为5到100之间的整数",
        page: "页数必须是10 - 5000之间的整数",
        maxValueDisplay: "最大显示值必须是介于-1和32768之间的整数",
        maxKeys: "最大密钥计数值必须是100到100000之间的整数"
      }
    },
    key: {
      label: {
        formName: {
          add: "添加新的Redis键",
          edit: "编辑 Redis key",
          append: "添加到现有的Redis键"
        }
      },
      field: {
        streamTimestamp: "时间戳记",
        key: "键",
        type: "类型",
        index: "索引",
        hashKey: "哈希键",
        score: "分数",
        value: "值",
        errorRate: "错误率",
        capacity: "容量",
        topk: "Top K",
        width: "宽度",
        depth: "深度",
        decay: "衰减",
        compression: "压缩",
        increment: "增量",
        item: "项目",
        vectorValues: "向量值(以逗号分隔)",
        element: "元素名称",
      },
      error: {
        streamTimestamp: "时间戳是必需的,可以是Redis格式,也可以*",
        key: "键至少存在一个字符",
        hashKey: "哈希表键至少是一个字符",
        score: "排序的集合分数是必需的",
        value: "该值是必填的",
        errorRate: "错误率必须在 0 到 1 之间(例如 0.01)",
        capacity: "容量必须是正整数",
        topk: "Top K 必须是正整数",
        width: "宽度必须是正整数",
        depth: "深度必须是正整数",
        item: "项目是必填的"
      }
    },
    main: {
      label: {
        database: "DB"
      }
    }
  },
  page: {
    search: {
      title: "搜索",
      index: "索引",
      query: "查询",
      results: "结果",
      noIndex: "未找到索引",
      createIndex: "创建索引",
      dropIndex: "删除索引",
      indexInfo: "索引信息",
      indexName: "索引名称",
      prefix: "键前缀(可选)",
      fieldName: "字段名称",
      hybridMode: "混合搜索 (FT.HYBRID)",
      vectorField: "向量字段",
      vectorValues: "向量值",
    },
    monitor: {
      title: "监控",
      memory: "内存",
      opsPerSec: "操作/秒",
      clients: "客户端",
      blocked: "已阻塞",
      hitsMisses: "命中率",
      networkIo: "网络 I/O",
      slowLog: "慢查询日志",
      noSlowQueries: "未记录慢查询",
      confirmSlowLogReset: "确定要重置慢查询日志吗?",
      slowLogResetDone: "慢查询日志已重置",
      totalCommands: "总计",
      expired: "已过期",
      evicted: "已驱逐",
      clientList: "客户端列表",
      topKeys: "内存最大的键",
      killClient: "终止客户端",
      clientKilled: "客户端已终止",
      confirmKillClient: "确定要终止此客户端吗?",
      noKeys: "没有键",
      rss: "RSS",
      peak: "峰值",
      fragmentation: "碎片化",
      hitsAndMisses: "命中 / 未命中",
      noClients: "没有客户端",
      slotStats: "集群槽统计",
      serverInfo: "服务器信息",
      os: "操作系统",
      port: "网络端口",
      pid: "进程号",
      configFile: "配置文件",
      uptime: "正常运行时间",
      keyspace: "Redis 键空间",
      keys: "Redis 键",
      expires: "过期",
      noKeyspace: "没有 Redis 键",
      persistence: "数据持久化",
      rdbLastSave: "RDB 最后保存",
      rdbStatus: "关系数据库状态",
      rdbChanges: "自上次保存以来的更改",
      aofEnabled: "启用 AOF",
      aofSize: "AOF 大小",
      replication: "Redis 复制",
      role: "复制角色",
      replicas: "连接的副本",
      masterHost: "主节点主机",
      linkStatus: "复制链接状态",
      cpu: "中央处理器使用率",
      cpuSys: "系统",
      cpuUser: "用户",
      modules: "已加载 Redis 模块",
      noModules: "未加载 Redis 模块",
      clusterSlotMap: "集群槽位映射",
      slotRange: "槽位范围",
      totalSlots: "总槽位数",
      noClusterData: "没有可用的集群数据",
    },
    analysis: {
      title: "内存分析",
      runAnalysis: "运行分析",
      running: "分析中...",
      typeDistribution: "类型分布",
      prefixMemory: "按前缀分内存",
      topKeysByMemory: "按内存排名的键",
      expirationOverview: "键过期",
      memoryBreakdown: "内存明细",
      keysScanned: "已扫描键",
      totalMemory: "总内存",
      rssMemory: "RSS 内存",
      peakMemory: "峰值内存",
      luaMemory: "Lua 内存",
      overheadMemory: "额外开销",
      datasetMemory: "数据集",
      fragmentation: "碎片化",
      allocator: "分配器",
      withTTL: "有 TTL",
      persistent: "永久",
      avgTTL: "平均 TTL",
      prefix: "前缀",
      keyCount: "键数量",
      memoryUsage: "内存使用量",
      noPrefix: "(无前缀)",
      topN: "Top N",
      maxScanKeys: "最大扫描键数",
      type: "类型",
      noData: "无数据。点击运行分析开始。",
      exportAll: "导出全部",
      memoryDoctor: "Memory Doctor",
      doctorNoData: "点击刷新以运行 Memory Doctor 诊断。",
    },
    acl: {
      title: "ACL 用户",
      loadUsers: "加载用户",
      loading: "加载中...",
      username: "用户名",
      status: "状态",
      enabled: "已启用",
      disabled: "已禁用",
      commands: "命令",
      commandsHint: "例如,+@all or +@read -@dangerous",
      keys: "Redis 键模式",
      keysHint: "例如,~* or ~user:*",
      channels: "Pub/Sub 频道",
      channelsHint: "例如,&* or &notifications:*",
      password: "密码",
      noPassword: "无密码(nopass)",
      passwordHint: "留空以保留当前密码",
      currentUser: "当前",
      createUser: "创建用户",
      editUser: "编辑用户",
      deleteUser: "删除",
      confirmDelete: "确定要删除 ACL 用户吗",
      userDeleted: "ACL 用户已删除",
      userSaved: "ACL 用户已保存",
      cannotDeleteDefault: "无法删除默认用户",
      cannotDeleteSelf: "无法删除当前已连接的用户",
      noUsers: "ACL 需要 Redis 6.0+。",
      groupCommon: "通用",
      groupDataTypes: "数据类型",
      groupOperations: "操作",
      rules: "规则",
      rulesHint: "以空格分隔的令牌(例如 on >password +@all ~* &*)",
      defaultUserWarning: "注意:修改默认用户可能会锁定所有连接。如果发生这种情况,您将需要重新启动 Redis 或使用 redis-cli 来恢复访问。",
    },
    overview: {
      noConnected: "没有任何连接到Redis",
      overviewClients: "按客户端连接计数展示所有连接",
      connectedCount: opt => {
        if (opt.length === 1) {
          return "1 客户端";
        }
        return `${opt.length} 客户端`;
      }
    },
    key: {
      label: {
        key: "键",
        encoding: "编码",
        compression: "压缩",
        aiRateLimited: "已达到 AI 请求限制。请稍后重试或在设置中使用您自己的 Groq API 密钥。",
        aiError: "AI 查询失败",
        length: "大小",
        ttl: "TTL",
        ttlTitle: "生存时间",
        type: "类型",
        ttlNotExpire: "不会过期",
        lengthString: "位元組",
        lengthItem: "项数",
        actions: "操作"
      },
      list: {
        table: {
          index: "索引",
          value: "值"
        }
      },
      hash: {
        table: {
          hashkey: "哈希",
          value: "值"
        }
      },
      set: {
        table: {
          value: "成员"
        }
      },
      zset: {
        table: {
          value: "成员",
          score: "分数"
        }
      },
      stream: {
        table: {
          timestamp: "时间戳ID",
          field: "领域",
          value: "值"
        }
      },
      timeseries: {
        chart: "图表",
        info: "信息",
        addPoint: "添加数据点",
        from: "起始 (ms 或 -)",
        to: "结束 (ms 或 +)",
        aggregation: "聚合",
        timeBucket: "桶 (ms)",
        none: "无",
        dataPoints: "数据点",
        labels: "标签",
        rules: "规则",
        retention: "保留",
        timestamp: "时间戳",
        value: "值",
        retentionHint: "0 = 不过期,或毫秒",
        duplicatePolicy: "重复策略",
        labelsHint: "键1 值1 键2 值2",
        timestampHint: "'*' 表示自动生成,或毫秒时间戳",
        editAllHint: "每行一个数据点:时间戳 值(时间戳可以用 * 表示自动)",
        autoSpread: "自动 * 分散间隔",
        formula: "公式",
        formulaLinear: "线性",
        formulaRandom: "随机",
        formulaSawtooth: "锯齿波",
        formulaPoints: "点数",
        formulaAmplitude: "振幅",
        formulaOffset: "偏移",
        generate: "生成",
        exportChart: "导出 PNG",
        overlay: "叠加键",
        overlayHint: "逗号分隔的键",
        mrangeFilter: "标签过滤器",
        bulkMode: "批量生成",
        mrangeHint: "例如 sensor=temp"
      },
      probabilistic: {
        info: "信息",
        addItem: "添加项目",
        checkItem: "检查项目",
        item: "项目",
        exists: "存在",
        doesNotExist: "不存在",
        topkList: "热门项目",
        topkCount: "数量",
        queryCount: "查询数量",
        queryResult: "查询结果",
        addedSuccessfully: "项目已成功添加",
        deletedSuccessfully: "项目已成功删除",
        quantile: "分位数",
        quantileResult: "结果",
        noItems: "没有项目可显示",
        resetConfirm: "重置此 T-Digest 中的所有数据?"
      },
      vectorset: {
        info: "信息",
        elements: "元素",
        similarity: "相似度搜索",
        searchByElement: "按元素搜索",
        searchByVector: "按向量搜索",
        vectorValues: "向量值",
        element: "元素",
        score: "分数",
        count: "数量",
        addElement: "添加元素",
        attributes: "属性",
        noAttributes: "没有属性",
        dimensions: "维度",
        removeConfirm: "从 VectorSet 中移除此元素?",
        noElements: "没有元素",
        filter: "筛选",
        searchComplete: "搜索完成",
      }
    },
    treeControls: {
      settings: "树设置",
      expandAll: "展开所有",
      collapseAll: "折叠所有",
      level: "级别",
      search: {
        search: "在键中搜索",
        clear: "清空当前搜索结果",
        placeholderClient: "客户端搜索",
        placeholderServer: "服务端搜索",
        info: (opts) => `客户端搜索是匹配输入的文本,服务端搜索则遵循*{search-text}*模式搜索.对于大量数据的搜索最好在服务端进行搜索,而较小数据量可以考虑客户端搜索。如果键数超过  ${opts?.maxLightKeysCount ?? 110000}个的则只能在服务端搜索`,
        largeSetInfo: "在大型集合中,禁用客户端搜索。 所以现在只能进行服务器端搜索。",
        infoDetails: "要了解搜索的工作原理,请查看设置"
      },
      pager: {
        next: "下一页",
        prev: "上一页",
        first: "首页",
        last: "末页"
      }
    }
  },
  time: {
    years: "年份",
    months: "个月",
    days: "天",
    year: "年",
    month: "月",
    day: "天",
    second: "秒",
    seconds: "秒",
    minute: "分钟",
    minutes: "分钟",
    hour: "小时",
    hours: "小时"
  },
  redisTypes: {
    string: "String",
    list: "List",
    hash: "Hash table",
    set: "Set",
    zset: "Sorted set - zset",
    stream: "Stream",
    json: "JSON",
    timeseries: "Time Series",
    bloom: "Bloom 过滤器",
    cuckoo: "Cuckoo 过滤器",
    topk: "Top-K",
    cms: "Count-Min Sketch",
    tdigest: "T-Digest",
    vectorset: "VectorSet",
  },
  promo: {
    title: "AI 网络助手",
    description: "欢迎体验我们在 network.corifeus.com 提供的免费 AI 网络助手,可分析域名、IP、DNS 记录、SSL 证书、邮件安全和网络基础设施。由 AI 驱动,即时提供全面结果。",
    disclaimer: "此推广仅显示在演示站点中,不会出现在 Docker、Electron 或 Web 应用部署中。",
    toastMessage: "试试我们在 network.corifeus.com 提供的免费 AI 网络助手,分析域名、DNS、SSL 等更多内容!",
    visit: "访问 network.corifeus.com",
  }
};
module.exports = strings;