Quellcode durchsuchen

feat(i18n): update Russian and Traditional Chinese translations for settings and quota

- Revised Russian translations in settings.json for improved clarity and consistency across various UI elements related to proxy configuration, rate limits, and user management.
- Updated Traditional Chinese translations in quota.json and settings.json to ensure proper terminology and enhance user understanding.
- Ensured all changes align with the overall localization strategy for better user experience across different languages.
ding113 vor 3 Monaten
Ursprung
Commit
ebbb8c2ab3
3 geänderte Dateien mit 152 neuen und 152 gelöschten Zeilen
  1. 131 131
      messages/ru/settings.json
  2. 3 3
      messages/zh-TW/quota.json
  3. 18 18
      messages/zh-TW/settings.json

+ 131 - 131
messages/ru/settings.json

@@ -576,44 +576,44 @@
       "proxyConfigured": "Прокси настроен",
       "proxyFallback": "Откат при ошибке прокси",
       "proxyFallbackDesc": "Перейти на прямое соединение при ошибке прокси",
-      "proxyFallbackLabel": "代理失败时降级到直连",
+      "proxyFallbackLabel": "Откат на прямое соединение при ошибке прокси",
       "proxyNotConfigured": "Не настроен",
-      "proxyTestButton": "测试连接",
-      "proxyTestDesc": "测试通过配置的代理访问供应商 URL(使用 HEAD 请求,不消耗额度)",
-      "proxyTestFailed": "连接失败",
-      "proxyTestFillUrl": "请先填写供应商 URL",
-      "proxyTestLabel": "连接测试",
-      "proxyTestNetworkError": "网络错误: {error}",
-      "proxyTestProxyError": "代理错误: {error}",
-      "proxyTestResponseTime": "响应时间: {time}",
-      "proxyTestResultConnectionMethod": "连接方式: {via}",
-      "proxyTestResultConnectionMethodDirect": "直连",
-      "proxyTestResultConnectionMethodProxy": "代理",
-      "proxyTestResultErrorType": "错误类型: {type}",
-      "proxyTestResultFailed": "连接失败",
+      "proxyTestButton": "Проверить соединение",
+      "proxyTestDesc": "Тестирование доступа к URL поставщика через настроенный прокси (использует HEAD запрос, не расходует квоту)",
+      "proxyTestFailed": "Соединение не удалось",
+      "proxyTestFillUrl": "Пожалуйста, сначала заполните URL поставщика",
+      "proxyTestLabel": "Тест соединения",
+      "proxyTestNetworkError": "Сетевая ошибка: {error}",
+      "proxyTestProxyError": "Ошибка прокси: {error}",
+      "proxyTestResponseTime": "Время отклика: {time}",
+      "proxyTestResultConnectionMethod": "Способ соединения: {via}",
+      "proxyTestResultConnectionMethodDirect": "Прямое",
+      "proxyTestResultConnectionMethodProxy": "Прокси",
+      "proxyTestResultErrorType": "Тип ошибки: {type}",
+      "proxyTestResultFailed": "Соединение не удалось",
       "proxyTestResultMessage": "{message}",
-      "proxyTestResultResponseTime": "响应时间: {time}ms",
-      "proxyTestResultStatusCode": "状态码: {code}",
-      "proxyTestResultSuccess": "连接成功 {via}",
-      "proxyTestStatusCode": "| 状态码: {code}",
-      "proxyTestSuccess": "连接成功",
-      "proxyTestTesting": "测试中...",
-      "proxyTestTimeout": "连接超时(5秒)。请检查:\n1. 代理服务器是否可访问\n2. 代理地址和端口是否正确\n3. 代理认证信息是否正确",
-      "proxyTestViaDirect": "(直连)",
-      "proxyTestViaProxy": "(通过代理)",
+      "proxyTestResultResponseTime": "Время отклика: {time}мс",
+      "proxyTestResultStatusCode": "Код статуса: {code}",
+      "proxyTestResultSuccess": "Соединение успешно {via}",
+      "proxyTestStatusCode": "| Код статуса: {code}",
+      "proxyTestSuccess": "Соединение успешно",
+      "proxyTestTesting": "Тестирование...",
+      "proxyTestTimeout": "Тайм-аут соединения (5 секунд). Проверьте:\n1. Доступен ли прокси-сервер\n2. Правильность адреса и порта прокси\n3. Правильность данных аутентификации прокси",
+      "proxyTestViaDirect": "(прямое)",
+      "proxyTestViaProxy": "(через прокси)",
       "proxyUrl": "Адрес прокси",
       "proxyUrlPlaceholder": "например: http://proxy.example.com:8080 или socks5://127.0.0.1:1080",
-      "rateLimitConfig": "限流配置",
-      "rateLimitConfigNone": "无限制",
-      "rateLimitConfigSummary": "5h: ${fiveHour}, 周: ${weekly}, 月: ${monthly}, 并发: {concurrent}",
+      "rateLimitConfig": "Конфигурация ограничения скорости",
+      "rateLimitConfigNone": "Без ограничений",
+      "rateLimitConfigSummary": "5ч: ${fiveHour}, Неделя: ${weekly}, Месяц: ${monthly}, Одновременно: {concurrent}",
       "remark": "Примечание",
       "remarkPlaceholder": "Необязательно: добавить примечание...",
       "removeRedirect": "Удалить переправку",
-      "routingConfig": "路由配置",
-      "routingConfigNone": "未配置",
-      "routingConfigSummary": "{models} 个模型白名单, {redirects} 个重定向",
-      "scheduleParams": "调度参数",
-      "searchClear": "清除搜索",
+      "routingConfig": "Конфигурация маршрутизации",
+      "routingConfigNone": "Не настроено",
+      "routingConfigSummary": "{models} белый список моделей, {redirects} перенаправлений",
+      "scheduleParams": "Параметры планирования",
+      "searchClear": "Очистить поиск",
       "searchPlaceholder": "Поиск по имени, URL, примечанию...",
       "selectProviderType": "Выбрать тип поставщика",
       "sort": "Сортировать поставщиков",
@@ -625,8 +625,8 @@
       "sourceModel": "Исходная модель",
       "sourceModelPlaceholder": "например: claude-sonnet-4-5-20250929",
       "sourceModelRequired": "Имя исходной модели не может быть пустым",
-      "successThreshold": "恢复阈值(次)",
-      "successThresholdDesc": "半开状态下成功多少次后完全恢复",
+      "successThreshold": "Порог восстановления (раз)",
+      "successThresholdDesc": "Количество успешных попыток в полуоткрытом состоянии для полного восстановления",
       "successThresholdPlaceholder": "2",
       "targetModel": "Целевая модель",
       "targetModelPlaceholder": "например: glm-4.6",
@@ -635,35 +635,35 @@
       "testProxyFailed": "Ошибка тестирования прокси",
       "testProxyFailedError": "Ошибка проверки соединения:",
       "testProxySuccess": "Соединение прокси успешно",
-      "validUrlRequired": "请输入有效的 API 地址",
-      "websiteUrl": "供应商官网地址",
-      "websiteUrlDesc": "供应商官网地址,用于快速跳转管理",
-      "websiteUrlInvalid": "请输入有效的供应商官网地址",
+      "validUrlRequired": "Пожалуйста, введите действительный адрес API",
+      "websiteUrl": "Официальный сайт поставщика",
+      "websiteUrlDesc": "Адрес официального сайта поставщика для быстрого перехода к управлению",
+      "websiteUrlInvalid": "Пожалуйста, введите действительный адрес официального сайта поставщика",
       "websiteUrlPlaceholder": "https://example.com",
       "weight": "Вес",
       "weightDesc": "Взвешенная случайная вероятность. В пределах одного приоритета большее число означает выше вероятность выбора.",
-      "weightLabel": "权重",
+      "weightLabel": "Вес",
       "weightPlaceholder": "1"
     },
     "guide": {
-      "after": "过滤后:",
-      "before": "过滤前:",
-      "bestPracticesConcurrent": "• 并发控制:根据供应商 API 限制设置 Session 并发数",
-      "bestPracticesCost": "• 成本倍率:官方倍率为 1.0,自建服务可设置为 0.8-1.2",
-      "bestPracticesLimit": "• 限额设置:根据预算设置 5 小时、7 天、30 天限额",
-      "bestPracticesPriority": "• 优先级设置:核心供应商设为 0,备用供应商设为 1-3",
-      "bestPracticesTitle": "最佳实践建议",
-      "bestPracticesWeight": "• 权重配置:根据供应商容量设置权重(容量大 = 权重高)",
+      "after": "После фильтрации:",
+      "before": "До фильтрации:",
+      "bestPracticesConcurrent": "• Контроль параллелизма: установите количество одновременных сеансов на основе ограничений API поставщика",
+      "bestPracticesCost": "• Множитель стоимости: официальный множитель = 1.0, собственный сервис можно установить 0.8-1.2",
+      "bestPracticesLimit": "• Настройка лимитов: установите лимиты на 5 часов, 7 дней, 30 дней в соответствии с бюджетом",
+      "bestPracticesPriority": "• Настройка приоритета: основные поставщики = 0, резервные = 1-3",
+      "bestPracticesTitle": "Рекомендации по лучшим практикам",
+      "bestPracticesWeight": "• Настройка веса: установите вес в соответствии с емкостью поставщика (большая емкость = больший вес)",
       "circuitBreaker": "Проверка автоматического выключателя",
       "circuitBreakerOpen": "A отфильтрован, осталось: B, C, D",
       "circuitBreakerRecovery": "A автоматически восстанавливается в полуоткрытое после 60 секунд",
       "circuitBreakerRecovery5h": "Автоматическое восстановление после 5-часового скользящего окна",
-      "costOptimize": "2️⃣ 成本优化:同优先级内,成本倍率低的供应商有更高概率",
+      "costOptimize": "2️⃣ Оптимизация стоимости: в пределах одного приоритета поставщики с низким множителем стоимости имеют более высокую вероятность",
       "costSort": "Откат по стоимости",
       "costSortExample": "Все поставщики: A (default), B (premium), C (premium), D (economy)",
       "costSortProb": "Более дешевый C имеет более высокую вероятность выбора",
       "costSortResult": "После сортировки: C (0.8x), A (1.0x)",
-      "decision": "决策:",
+      "decision": "Решение:",
       "group": "Фильтрация групп пользователей",
       "groupDesc": "Если пользователь указал группу поставщиков, система приоритизирует выбор из этой группы",
       "groupDowngrade": "Записать предупреждение и выбрать из глобального пула",
@@ -678,120 +678,120 @@
       "healthCheckCircuit": "Поставщик A потерпел неудачу 5 раз, статус: открыт",
       "healthCheckConcurrent": "Проверить количество активных сеансов на лимит",
       "healthCheckConcurrentExample": "Лимит поставщика C 2, активных 2 сеанса",
-      "healthFilter": "3️⃣ 健康过滤:自动跳过熔断或超限的供应商",
+      "healthFilter": "3️⃣ Фильтрация здоровья: автоматически пропускать поставщиков с размыканием или превышением лимитов",
       "healthFiltered": "B отфильтрован (близко к лимиту), осталось: C, D",
       "healthFiltered2": "C отфильтрован (полный), осталось: D",
       "history": "Проверить историю запросов",
       "historyDesc": "Запрос поставщиков, используемых этим ключом за последние 10 секунд",
       "priority": "Приоритизация по уровням",
       "priorityExample": "4 включенных поставщика с разными приоритетами",
-      "priorityFirst": "1️⃣ 优先级优先:只从最高优先级(数值最小)的供应商中选择",
+      "priorityFirst": "1️⃣ Приоритет в первую очередь: выбирать только из поставщиков с наивысшим приоритетом (наименьшее число)",
       "priorityResult": "Отфильтровано к приоритету (0): A, C",
       "priorityStep": "Система сначала фильтрует по приоритету, выбирая только из поставщиков с наивысшим приоритетом",
       "randomResult": "В конце выбран C",
       "randomSelect": "Взвешенный случайный",
       "reset": "Ручной сброс автоматического выключателя",
       "resetSuccess": "Автоматический выключатель сброшен",
-      "scenario1Desc": "系统首先按优先级过滤,只从最高优先级的供应商中选择",
-      "scenario1Step1": "初始状态",
-      "scenario1Step1After": "筛选出最高优先级(0)的供应商:A, C",
-      "scenario1Step1Before": "供应商 A (优先级 0), B (优先级 1), C (优先级 0), D (优先级 2)",
-      "scenario1Step1Decision": "只从 A 和 C 中选择,B 和 D 被过滤",
-      "scenario1Step1Desc": "有 4 个已启用的供应商,优先级各不相同",
-      "scenario1Step2": "成本排序",
-      "scenario1Step2After": "排序后:C (0.8x), A (1.0x)",
-      "scenario1Step2Before": "A (成本 1.0x), C (成本 0.8x)",
-      "scenario1Step2Decision": "成本更低的 C 有更高的被选中概率",
-      "scenario1Step2Desc": "在同优先级内,按成本倍率从低到高排序",
-      "scenario1Step3": "加权随机",
-      "scenario1Step3After": "C 被选中概率 75%, A 被选中概率 25%",
-      "scenario1Step3Before": "C (权重 3), A (权重 1)",
-      "scenario1Step3Decision": "最终随机选择了 C",
-      "scenario1Step3Desc": "使用权重进行随机选择,权重越高被选中概率越大",
-      "scenario1Title": "优先级分层选择",
-      "scenario2Desc": "如果用户指定了供应商组,系统会优先从该组中选择",
-      "scenario2Step1": "检查用户分组",
-      "scenario2Step1After": "过滤出 'premium' 组:B, C",
-      "scenario2Step1Before": "所有供应商:A (default), B (premium), C (premium), D (economy)",
-      "scenario2Step1Decision": "只从 B 和 C 中选择",
-      "scenario2Step1Desc": "用户配置了 providerGroup = 'premium'",
-      "scenario2Step2": "分组降级",
-      "scenario2Step2After": "降级到所有启用的供应商:A, B, C, D",
-      "scenario2Step2Before": "用户组 'vip' 内的供应商全部禁用或超限",
-      "scenario2Step2Decision": "记录警告并从全局供应商池中选择",
-      "scenario2Step2Desc": "如果用户组内没有可用供应商,降级到所有供应商",
-      "scenario2Title": "用户分组过滤",
-      "scenario3Desc": "系统自动过滤掉熔断或超限的供应商",
-      "scenario3Step1": "熔断器检查",
-      "scenario3Step1After": "A 被过滤,剩余:B, C, D",
-      "scenario3Step1Before": "供应商 A 连续失败 5 次,熔断器状态:open",
-      "scenario3Step1Decision": "A 在 60 秒后自动恢复到半开状态",
-      "scenario3Step1Desc": "连续失败 5 次后熔断器打开,60 秒内不可用",
-      "scenario3Step2": "金额限流",
-      "scenario3Step2After": "B 被过滤(接近限额),剩余:C, D",
-      "scenario3Step2Before": "供应商 B 的 5 小时限额 $10,已消耗 $9.8",
-      "scenario3Step2Decision": "5 小时窗口滑动后自动恢复",
-      "scenario3Step2Desc": "检查 5 小时、7 天、30 天的消费额度是否超限",
-      "scenario3Step3": "并发 Session 限制",
-      "scenario3Step3After": "C 被过滤(已满),剩余:D",
-      "scenario3Step3Before": "供应商 C 并发限制 2,当前活跃 Session 数:2",
-      "scenario3Step3Decision": "Session 过期(5 分钟)后自动释放",
-      "scenario3Step3Desc": "检查当前活跃 Session 数是否超过配置的并发限制",
-      "scenario3Title": "健康度过滤(熔断器 + 限流)",
-      "scenario4Desc": "连续对话优先使用同一供应商,利用 Claude 的上下文缓存",
-      "scenario4Step1": "检查历史请求",
-      "scenario4Step1After": "检查 B 是否启用且健康",
-      "scenario4Step1Before": "最近一次请求使用了供应商 B",
-      "scenario4Step1Decision": "B 可用,直接复用,跳过随机选择",
-      "scenario4Step1Desc": "查询该 API Key 最近 10 秒内使用的供应商",
-      "scenario4Step2": "复用失效",
-      "scenario4Step2After": "进入正常选择流程",
-      "scenario4Step2Before": "上次使用的供应商 B 已被禁用或熔断",
-      "scenario4Step2Decision": "从其他可用供应商中选择",
-      "scenario4Step2Desc": "如果上次使用的供应商不可用,则重新选择",
-      "scenario4Title": "会话复用机制",
-      "scenariosTitle": "交互式场景演示",
+      "scenario1Desc": "Система сначала фильтрует по приоритету, выбирая только из поставщиков с наивысшим приоритетом",
+      "scenario1Step1": "Начальное состояние",
+      "scenario1Step1After": "Отфильтрованы поставщики с наивысшим приоритетом (0): A, C",
+      "scenario1Step1Before": "Поставщик A (приоритет 0), B (приоритет 1), C (приоритет 0), D (приоритет 2)",
+      "scenario1Step1Decision": "Выбирать только из A и C, B и D отфильтрованы",
+      "scenario1Step1Desc": "Имеется 4 включенных поставщика с разными приоритетами",
+      "scenario1Step2": "Сортировка по стоимости",
+      "scenario1Step2After": "После сортировки: C (0.8x), A (1.0x)",
+      "scenario1Step2Before": "A (стоимость 1.0x), C (стоимость 0.8x)",
+      "scenario1Step2Decision": "C с более низкой стоимостью имеет более высокую вероятность выбора",
+      "scenario1Step2Desc": "В пределах одного приоритета сортировка по множителю стоимости от низкого к высокому",
+      "scenario1Step3": "Взвешенный случайный выбор",
+      "scenario1Step3After": "C имеет вероятность выбора 75%, A имеет вероятность 25%",
+      "scenario1Step3Before": "C (вес 3), A (вес 1)",
+      "scenario1Step3Decision": "В итоге выбран C",
+      "scenario1Step3Desc": "Использование веса для случайного выбора, чем выше вес, тем выше вероятность выбора",
+      "scenario1Title": "Выбор по уровням приоритета",
+      "scenario2Desc": "Если пользователь указал группу поставщиков, система приоритизирует выбор из этой группы",
+      "scenario2Step1": "Проверка группы пользователя",
+      "scenario2Step1After": "Отфильтрована группа 'premium': B, C",
+      "scenario2Step1Before": "Все поставщики: A (default), B (premium), C (premium), D (economy)",
+      "scenario2Step1Decision": "Выбирать только из B и C",
+      "scenario2Step1Desc": "Пользователь настроил providerGroup = 'premium'",
+      "scenario2Step2": "Откат группировки",
+      "scenario2Step2After": "Откат на всех включенных поставщиков: A, B, C, D",
+      "scenario2Step2Before": "Все поставщики в группе пользователя 'vip' отключены или превышены",
+      "scenario2Step2Decision": "Записать предупреждение и выбрать из глобального пула поставщиков",
+      "scenario2Step2Desc": "Если в группе пользователя нет доступных поставщиков, откат на всех поставщиков",
+      "scenario2Title": "Фильтрация группы пользователей",
+      "scenario3Desc": "Система автоматически фильтрует поставщиков с размыканием или превышением лимитов",
+      "scenario3Step1": "Проверка автоматического выключателя",
+      "scenario3Step1After": "A отфильтрован, осталось: B, C, D",
+      "scenario3Step1Before": "Поставщик A потерпел неудачу 5 раз подряд, состояние выключателя: открыт",
+      "scenario3Step1Decision": "A автоматически восстанавливается в полуоткрытое состояние через 60 секунд",
+      "scenario3Step1Desc": "После 5 последовательных сбоев выключатель открывается, недоступен в течение 60 секунд",
+      "scenario3Step2": "Ограничение по сумме",
+      "scenario3Step2After": "B отфильтрован (близко к лимиту), осталось: C, D",
+      "scenario3Step2Before": "Лимит поставщика B за 5 часов $10, потрачено $9.8",
+      "scenario3Step2Decision": "Автоматическое восстановление после сдвига 5-часового окна",
+      "scenario3Step2Desc": "Проверка превышения лимитов расходов за 5 часов, 7 дней, 30 дней",
+      "scenario3Step3": "Ограничение одновременных сеансов",
+      "scenario3Step3After": "C отфильтрован (полон), осталось: D",
+      "scenario3Step3Before": "Лимит одновременных сеансов поставщика C 2, текущее количество активных сеансов: 2",
+      "scenario3Step3Decision": "Автоматическое освобождение после истечения сеанса (5 минут)",
+      "scenario3Step3Desc": "Проверка превышения настроенного лимита одновременных сеансов",
+      "scenario3Title": "Фильтрация здоровья (автоматический выключатель + ограничение)",
+      "scenario4Desc": "Последовательные диалоги приоритетно используют одного поставщика для использования кэша контекста Claude",
+      "scenario4Step1": "Проверка истории запросов",
+      "scenario4Step1After": "Проверить, включен ли B и работоспособен",
+      "scenario4Step1Before": "Последний запрос использовал поставщика B",
+      "scenario4Step1Decision": "B доступен, повторно использовать напрямую, пропустить случайный выбор",
+      "scenario4Step1Desc": "Запрос поставщиков, используемых этим API ключом за последние 10 секунд",
+      "scenario4Step2": "Повторное использование недействительно",
+      "scenario4Step2After": "Вход в нормальный процесс выбора",
+      "scenario4Step2Before": "Последний использованный поставщик B был отключен или разомкнут",
+      "scenario4Step2Decision": "Выбрать из других доступных поставщиков",
+      "scenario4Step2Desc": "Если последний использованный поставщик недоступен, выполнить повторный выбор",
+      "scenario4Title": "Механизм повторного использования сеансов",
+      "scenariosTitle": "Интерактивная демонстрация сценариев",
       "session": "Механизм переиспользования сеансов",
       "sessionDesc": "Если последний использованный поставщик недоступен, переходим к переполнению",
       "sessionExample": "Последний запрос использовал поставщика B",
       "sessionExpired": "Сеанс автоматически освобождается после истечения (5 минут)",
       "sessionFallback": "Выбрать из других доступных поставщиков",
       "sessionLastUsed": "B доступен, переиспользуем, пропускаем случайный выбор",
-      "sessionReuse": "4️⃣ 会话复用:连续对话复用同一供应商,节省上下文成本",
+      "sessionReuse": "4️⃣ Повторное использование сеанса: последовательные диалоги повторно используют одного поставщика для экономии затрат на контекст",
       "sessionUnavailable": "Последний использованный поставщик B отключен или замкнут",
-      "step": "步骤",
-      "title": "核心原则",
+      "step": "Шаг",
+      "title": "Основные принципы",
       "weight": "Взвешенный случайный выбор по весу",
       "weightCalc": "C имеет вероятность 75%, A имеет вероятность 25%",
       "weightExample": "C (вес 3), A (вес 1)"
     },
-    "keyLoading": "加载中...",
-    "noProviders": "暂无服务商配置",
-    "noProvidersDesc": "添加你的第一个 API 服务商",
+    "keyLoading": "Загрузка...",
+    "noProviders": "Нет настроенных поставщиков",
+    "noProvidersDesc": "Добавьте вашего первого поставщика API",
     "notFound": "Поставщики не найдены",
-    "official": "官网",
-    "resetCircuit": "熔断器已重置",
-    "resetCircuitDesc": "供应商 \"{name}\" 的熔断状态已解除",
-    "resetCircuitFailed": "重置熔断器失败",
+    "official": "Официальный сайт",
+    "resetCircuit": "Автоматический выключатель сброшен",
+    "resetCircuitDesc": "Состояние размыкания поставщика \"{name}\" снято",
+    "resetCircuitFailed": "Не удалось сбросить автоматический выключатель",
     "scheduling": "Подробное объяснение политики планирования",
     "schedulingDesc": "Понимание того, как работает выбор поставщика: приоритизация, переиспользование сеансов, балансировка нагрузки и отказоустойчивость",
-    "searchNoResults": "未找到匹配的供应商",
-    "searchResults": "找到 {count} 个匹配的供应商",
+    "searchNoResults": "Поставщики не найдены",
+    "searchResults": "Найдено {count} поставщиков",
     "section": {
-      "description": "配置上游服务商的金额限流和并发限制,留空表示无限制。",
-      "title": "服务商管理"
+      "description": "Настройка ограничений по расходам и параллельным сеансам для вышестоящих поставщиков. Оставьте пустым для неограниченного доступа.",
+      "title": "Управление поставщиками"
     },
     "subtitle": "Управление поставщиками",
     "subtitleDesc": "Настройка ограничений по расходам и параллельным сеансам. Оставьте пустым для неограниченного доступа.",
     "title": "Управление поставщиками",
-    "todayUsage": "今日用量",
-    "todayUsageCount": "{count} ",
-    "toggleFailed": "状态切换失败",
-    "toggleSuccess": "供应商已{status}",
-    "toggleSuccessDesc": "供应商 \"{name}\" 状态已更新",
-    "updateFailed": "更新服务商失败",
-    "viewKey": "查看完整 API Key",
-    "viewKeyDesc": "请妥善保管,不要泄露给他人"
+    "todayUsage": "Использование сегодня",
+    "todayUsageCount": "{count} раз",
+    "toggleFailed": "Не удалось переключить статус",
+    "toggleSuccess": "Поставщик {status}",
+    "toggleSuccessDesc": "Статус поставщика \"{name}\" обновлен",
+    "updateFailed": "Не удалось обновить поставщика",
+    "viewKey": "Просмотреть полный API ключ",
+    "viewKeyDesc": "Пожалуйста, храните бережно и не раскрывайте другим"
   },
   "sensitiveWords": {
     "add": "Добавить чувствительное слово",

+ 3 - 3
messages/zh-TW/quota.json

@@ -1,9 +1,9 @@
 {
   "header": {
-    "title": "用配额",
+    "title": "用配额",
     "role": {
       "admin": "管理员",
-      "user": "用"
+      "user": "用"
     },
     "keysCountSuffix": "个密钥",
     "rpm": "请求限流",
@@ -32,7 +32,7 @@
     }
   },
   "toolbar": {
-    "searchPlaceholder": "搜索用名或密钥",
+    "searchPlaceholder": "搜索用名或密钥",
     "filter": "筛选",
     "sort": "排序",
     "refresh": "刷新",

+ 18 - 18
messages/zh-TW/settings.json

@@ -2,17 +2,17 @@
   "clientVersions": {
     "description": "管理用戶端版本要求,確保使用者使用最新的穩定版本。VSCode 外掛和 CLI 作為獨立用戶端分別管理版本。",
     "empty": {
-      "description": "过去 7 天内没有活跃用使用可识别的客户端",
+      "description": "过去 7 天内没有活跃用使用可识别的客户端",
       "title": "暂无客户端数据"
     },
     "features": {
       "activeWindow": "活跃窗口:",
-      "activeWindowDesc": "仅统计过去 7 天内有请求的用",
+      "activeWindowDesc": "仅统计过去 7 天内有请求的用",
       "autoDetect": "系统会自动检测每种客户端的最新稳定版本(GA 版本)",
-      "blockOldVersion": "使用旧版本的用将收到 HTTP 400 错误,无法继续使用服务",
+      "blockOldVersion": "使用旧版本的用将收到 HTTP 400 错误,无法继续使用服务",
       "errorMessage": "错误提示中包含当前版本和需要升级的版本号",
       "gaRule": "判定规则:",
-      "gaRuleDesc": "当某个版本被 1 个以上用使用时,视为 GA 版本",
+      "gaRuleDesc": "当某个版本被 1 个以上用使用时,视为 GA 版本",
       "recommendation": "推荐做法:",
       "recommendationDesc": "先观察下方的版本分布,确认新版本稳定后再启用。",
       "title": "功能说明",
@@ -20,11 +20,11 @@
     },
     "section": {
       "distribution": {
-        "description": "显示过去 7 天内活跃用的客户端版本信息。每种客户端类型独立统计 GA 版本。",
+        "description": "显示过去 7 天内活跃用的客户端版本信息。每种客户端类型独立统计 GA 版本。",
         "title": "客户端版本分布"
       },
       "settings": {
-        "description": "启用后,系统将自动检测客户端版本并拦截旧版本用的请求。",
+        "description": "启用后,系统将自动检测客户端版本并拦截旧版本用的请求。",
         "title": "升级提醒设置"
       }
     },
@@ -34,11 +34,11 @@
       "lastActive": "最后活跃时间",
       "latest": "最新",
       "needsUpgrade": "需升级",
-      "noUsers": "暂无用数据",
+      "noUsers": "暂无用数据",
       "status": "状态",
       "unknown": "未知",
-      "user": "用",
-      "usersCount": "{count} 位用",
+      "user": "用",
+      "usersCount": "{count} 位用",
       "version": "当前版本"
     },
     "title": "用戶端升級提醒",
@@ -500,7 +500,7 @@
       "groupPlaceholder": "例如: premium, economy",
       "joinClaudePool": "加入 Claude 调度池",
       "joinClaudePoolDesc": "启用后,此供应商将与 Claude 类型供应商一起参与负载均衡调度",
-      "joinClaudePoolHelp": "仅当模型重定向配置中存在映射到 claude-* 模型时可用。启用后,当用请求 claude-* 模型时,此供应商也会参与调度选择。",
+      "joinClaudePoolHelp": "仅当模型重定向配置中存在映射到 claude-* 模型时可用。启用后,当用请求 claude-* 模型时,此供应商也会参与调度选择。",
       "leaveEmpty": "留空表示無限制",
       "limit0Means": "0 表示無限制",
       "limit5hLabel": "5小时消费上限 (USD)",
@@ -523,7 +523,7 @@
       "modelRedirectsExists": "模型 \"{model}\" 已存在重定向规则",
       "modelRedirectsLabel": "模型重定向配置",
       "modelRedirectsOptional": "(可选)",
-      "modelRedirectsSourceModel": "用请求的模型",
+      "modelRedirectsSourceModel": "用请求的模型",
       "modelRedirectsSourcePlaceholder": "例如: claude-sonnet-4-5-20250929",
       "modelRedirectsSourceRequired": "源模型名称不能为空",
       "modelRedirectsTargetModel": "实际转发的模型",
@@ -554,7 +554,7 @@
       "priorityDesc": "同優先級內,按成本倍率從低到高排序",
       "priorityLabel": "优先级",
       "priorityPlaceholder": "0",
-      "providerGroupDesc": "供应商分组标签。只有用户的 providerGroup 与此值匹配时,该用户才能使用此供应商。示例:设置为 \"premium\" 表示只供 providerGroup=\"premium\" 的用使用",
+      "providerGroupDesc": "供应商分组标签。只有用戶的 providerGroup 与此值匹配时,该用戶才能使用此供应商。示例:设置为 \"premium\" 表示只供 providerGroup=\"premium\" 的用使用",
       "providerGroupLabel": "供应商分组",
       "providerGroupPlaceholder": "例如: premium, economy",
       "providerName": "服务商名称",
@@ -709,18 +709,18 @@
       "scenario1Step3Decision": "最终随机选择了 C",
       "scenario1Step3Desc": "使用权重进行随机选择,权重越高被选中概率越大",
       "scenario1Title": "优先级分层选择",
-      "scenario2Desc": "如果用指定了供应商组,系统会优先从该组中选择",
-      "scenario2Step1": "检查用分组",
+      "scenario2Desc": "如果用指定了供应商组,系统会优先从该组中选择",
+      "scenario2Step1": "检查用分组",
       "scenario2Step1After": "过滤出 'premium' 组:B, C",
       "scenario2Step1Before": "所有供应商:A (default), B (premium), C (premium), D (economy)",
       "scenario2Step1Decision": "只从 B 和 C 中选择",
-      "scenario2Step1Desc": "用配置了 providerGroup = 'premium'",
+      "scenario2Step1Desc": "用配置了 providerGroup = 'premium'",
       "scenario2Step2": "分组降级",
       "scenario2Step2After": "降级到所有启用的供应商:A, B, C, D",
-      "scenario2Step2Before": "用组 'vip' 内的供应商全部禁用或超限",
+      "scenario2Step2Before": "用组 'vip' 内的供应商全部禁用或超限",
       "scenario2Step2Decision": "记录警告并从全局供应商池中选择",
-      "scenario2Step2Desc": "如果用组内没有可用供应商,降级到所有供应商",
-      "scenario2Title": "用分组过滤",
+      "scenario2Step2Desc": "如果用组内没有可用供应商,降级到所有供应商",
+      "scenario2Title": "用分组过滤",
       "scenario3Desc": "系统自动过滤掉熔断或超限的供应商",
       "scenario3Step1": "熔断器检查",
       "scenario3Step1After": "A 被过滤,剩余:B, C, D",