RSS Git Download  Clone
Raw Blame History 42kB 1093 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: "統計數據",
    error: "錯誤",
    connectingRedis: "正在連接到 Redis ...",
    socketioConnectError: "Socket.IO 錯誤",
    db: "DB",
    server: "伺服器",
    clients: "客戶",
    memory: "記憶體",
    persistence: "堅持",
    stats: "統計數據",
    replication: "複製",
    cpu: "CPU",
    cluster: "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: {
    ar: "العربية / Arabic",
    az: "Azərbaycanca / Azerbaijani",
    be: "Беларуская / Belarusian",
    bg: "Български / Bulgarian",
    bn: "বাংলা / Bengali",
    cs: "Čeština / Czech",
    da: "Dansk / Danish",
    de: "Deutsch / German",
    el: "Ελληνικά / Greek",
    en: "English",
    es: "Español / Spanish",
    et: "Eesti / Estonian",
    fi: "Suomi / Finnish",
    fil: "Filipino / Filipino",
    fr: "Français / French",
    he: "עברית / Hebrew",
    hr: "Hrvatski / Croatian",
    hu: "Magyar / Hungarian",
    hy: "Հայերեն / Armenian",
    id: "Bahasa Indonesia / Indonesian",
    it: "Italiano / Italian",
    ja: "日本語 / Japanese",
    ka: "ქართული / Georgian",
    kk: "Қазақша / Kazakh",
    km: "ខ្មែរ / Khmer",
    ko: "한국어 / Korean",
    ky: "Кыргызча / Kyrgyz",
    lt: "Lietuvių / Lithuanian",
    mk: "Македонски / Macedonian",
    ms: "Bahasa Melayu / Malay",
    ne: "नेपाली / Nepali",
    nl: "Nederlands / Dutch",
    no: "Norsk / Norwegian",
    pl: "Polski / Polish",
    "pt-BR": "Português (Brasil) / Portuguese (Brazil)",
    "pt-PT": "Português / Portuguese",
    ro: "Română / Romanian",
    ru: "Русский / Russian",
    sk: "Slovenčina / Slovak",
    sl: "Slovenščina / Slovenian",
    sr: "Српски / Serbian",
    sv: "Svenska / Swedish",
    tg: "Тоҷикӣ / Tajik",
    th: "ไทย / Thai",
    tr: "Türkçe / Turkish",
    uk: "Українська / Ukrainian",
    vi: "Tiếng Việt / Vietnamese",
    "zh-HK": "中文(香港) / Chinese (Hong Kong)",
    "zh-TW": "中文(台灣) / Chinese (Taiwan)",
    zn: "中文 / Chinese",
    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",
    // When you translate the language, keep the Language in English
    // eg. Idioma / 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: "\u6aa2\u8996\u8b8a\u66f4",
    inline: "\u884c\u5167",
    sideBySide: "\u4e26\u6392",
    additions: "\u65b0\u589e",
    deletions: "\u522a\u9664",
    unchangedLines: "\u672a\u8b8a\u66f4\u7684\u884c",
    noChanges: "\u672a\u5075\u6e2c\u5230\u8b8a\u66f4",
    before: "\u8b8a\u66f4\u524d",
    after: "\u8b8a\u66f4\u5f8c",
  },
  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 金鑰,可以關閉此開關,無需經過 network.corifeus.com 直接連到 Groq。",
    aiMaxTokens: "AI 最大 Token 數",
    aiMaxTokensInfo: "AI 回應的最大 token 數量。較高的值可產生較長回應,但可能會使用更多 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: "點擊任一提示即可貼到主控台,再按 Enter。",
      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 pipeline 轉換成單一的 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“字段2”“值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: `排序(自然比較)在客戶端(即瀏覽器)上執行,這意味著它會對大型集合(例如超過 10k 個鍵)造成懲罰,它可能會增加頁面渲染的時間。 Redis中沒有key排序,只有這樣。`,
    socketIoTimeout: options => {
      return `Socket.IO 此請求逾時(最大${options.timeout / 1000} 秒)...`;
    },
    resizerInfo: options => {
      return `左或右面板最小寬度為${options.width}像素`;
    },
    jsonViewNotParsable: "該值不可解析 JSON",
    ttlTitle: "以秒為單位設定 TTL",
    passwordSecure: "密碼可能為空,但仍會顯示字符,這是安全功能。",
    aclAuthHint: "使用 Redis ACL 使用者名稱和密碼進行驗證。對沒有密碼的預設使用者請留空。",
    tlsWithoutCert: "無需額外憑證即可啟用 TLS",
    tlsRejectUnauthorized: "拒絕未經授權的證書",
    tlsSecure: "如果您看到以 P3X 開頭的 TLS 設定或所有 TLS 設定看起來都相同,則這是一項安全功能。要更改設置,只需將這些設置替換為空或其他內容即可保存它們。如果您不更改 TLS 設置,這些設置將保留在伺服器上的原樣。",
    treeSeparatorEmpty: "如果樹分隔符號為空,則樹將沒有巢狀節點,只有一個純列表",
    treeSeparatorEmptyNote: "沒有巢狀節點,只是一個純列表",
    welcomeConsole: "歡迎來到 Redis 控制台",
    welcomeConsoleInfo: "SHIFT + 啟用遊標向上或向下歷史記錄",
    redisListIndexInfo: "為空表示附加,-1 表示新增或儲存到所示位置。",
    console: "主機",
    connectiondAdd: "新增連接",
    connectiondEdit: "編輯連接",
    connectiondView: "查看連接",
    connections: "連接",
    keysSort: {
      on: "鍵排序開啟",
      off: "鑰匙分類"
    },
    cluster: {
      on: "Cluster 開啟",
      off: "Cluster 關閉"
    },
    sentinel: {
      on: "Sentinel 開啟",
      off: "Sentinel 關閉",
      name: "Sentinel 名稱"
    },
    readonly: {
      on: "唯讀開啟",
      off: "只讀關閉"
    },
    theme: {
      light: "光",
      dark: "黑暗企業",
      darkNeu: "黑暗",
      darkoBluo: "達科藍",
      enterprise: "企業",
      redis: "Redis",
      matrix: "矩陣"
    },
    connected: opts => {
      return `已連線:${opts.name}`;
    },
    tree: "樹",
    askAuth: "請求授權",
    keyboardShortcuts: "Keyboard Shortcuts",
    about: "About",
    supportedLanguages: "Supported Languages",
    version: "Version",
    redisVersion: "Redis Version",
    modules: "模組",
    shortcutRefresh: "Refresh",
    shortcutSearch: "Focus Search",
    shortcutNewKey: "New Key",
    shortcutDisconnect: "斷開連接",
    themeAuto: "Auto (system)",
    languageAuto: "Auto (system)",
    shortcutCommandPalette: "命令面板",
    commandPalette: "命令面板",
    noResults: "沒有結果",
    redisCommandsReference: "Redis 命令",
    ungrouped: "未分組",
    grouped: "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\u9084\u539f",
    reloadingDataInfo: "正在重新載入Redis資料訊息",
    added: "已新增",
    saved: "已更新",
    cancelled: "取消",
    deleted: "已刪除",
    savedRedis: "Redis 資料已儲存",
    redisDisconnected: opts => {
      return `目前連線有錯誤:${opts.error.message}`;
    },
    dbChanged: opts => {
      return `資料庫索引設定為${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": "該值無效 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: "Group",
        host: "主機名稱",
        port: "港口",
        password: "密碼",
        username: "使用者名稱"
      }
    },
    treeSettings: {
      maxValueDisplay: "最大值顯示字串長度",
      maxValueDisplayInfo: "如果設定為 0,則顯示完整值。如果大於 0,則截斷至此長度。如果-1:對於字串,隱藏該值直到編輯;對於其他類型,顯示完整內容。",
      maxKeys: "最大按鍵數",
      maxKeysInfo: "為了讓 GUI 不會崩潰,我們限制了最大按鍵數。",
      keyCount: (opts) => {
        return `鑰匙數量:${opts?.keyCount ?? 0}`;
      },
      label: {
        animation: "使用動畫",
        noAnimation: "無動畫",
        undoEnabled: "\u5df2\u555f\u7528\u5fa9\u539f",
        undoDisabled: "\u5df2\u505c\u7528\u5fa9\u539f",
        diffEnabled: "\u5132\u5b58\u524d\u986f\u793a diff",
        diffDisabled: "\u5df2\u505c\u7528\u5132\u5b58\u524d diff",
        jsonFormatTwoSpace: "格式為 JSON,含 2 個空格",
        jsonFormatFourSpace: "格式為 JSON,有 4 個空格",
        formName: "Redis 設定",
        searchModeClient: "客戶搜尋模式",
        searchModeServer: "伺服器搜尋模式",
        searchModeStartsWith: "搜尋以模式開頭",
        searchModeIncludes: "搜尋包含模式"
      },
      undoHint: "\u5fa9\u539f\u50c5\u9069\u7528\u65bc string \u548c JSON \u985e\u578b\u7684\u91d1\u9470",
      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 金鑰",
          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 或網頁應用程式部署中。",
    toastMessage: "試試我們在 network.corifeus.com 的免費 AI 網路助手,分析網域、DNS、SSL 等更多內容!",
    visit: "前往 network.corifeus.com",
  }
};
module.exports = strings;