From 736ee58b8ed5e24fdddd86ed7f6f796a0060d41f Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:39:21 +0700 Subject: [PATCH 01/25] Share one SettingsSnapshot test fixture --- apps/desktop-tauri/src/App.test.tsx | 80 +----------------- .../src/floatbar/FloatBar.test.tsx | 73 +--------------- .../src/surfaces/TrayPanel.test.tsx | 84 ++----------------- .../surfaces/settings/tabs/AboutTab.test.tsx | 64 +------------- .../settings/tabs/AdvancedTab.test.tsx | 64 +------------- .../settings/tabs/GeneralTab.test.tsx | 66 +-------------- apps/desktop-tauri/src/test/fixtures.ts | 78 +++++++++++++++++ 7 files changed, 99 insertions(+), 410 deletions(-) create mode 100644 apps/desktop-tauri/src/test/fixtures.ts diff --git a/apps/desktop-tauri/src/App.test.tsx b/apps/desktop-tauri/src/App.test.tsx index 05c3355627..86c58c821c 100644 --- a/apps/desktop-tauri/src/App.test.tsx +++ b/apps/desktop-tauri/src/App.test.tsx @@ -60,88 +60,14 @@ vi.mock("./hooks/useSurfaceSnapshot", () => ({ import App from "./App"; import { buildBundle } from "./test/localeHarness"; import type { BootstrapState, SettingsSnapshot } from "./types/bridge"; +import { makeSettings } from "./test/fixtures"; -function settings(overrides: Partial = {}): SettingsSnapshot { - return { - enabledProviders: ["codex", "claude"], - refreshIntervalSecs: 300, - adaptiveRefresh: false, - refreshAllProvidersOnMenuOpen: false, - lowPowerMode: false, - startAtLogin: false, - startMinimized: false, - showNotifications: true, - soundEnabled: true, - notificationSoundTheme: "windows", - notificationSoundPaths: { - predictiveWarning: null, - highUsage: null, - criticalUsage: null, - exhausted: null, - statusIssue: null, - sessionDepleted: null, - sessionRestored: null, - }, - highUsageThreshold: 70, - criticalUsageThreshold: 90, - predictivePaceWarningEnabled: false, - credentialExpiryNotificationsEnabled: false, - trayIconMode: "single", - switcherShowsIcons: true, - menuBarShowsHighestUsage: false, - menuBarShowsPercent: false, - menuBarColorPace: false, - showAsUsed: true, - showAllTokenAccountsInMenu: false, - enableAnimations: true, - resetTimeRelative: true, - showResetWhenExhausted: false, - menuBarDisplayMode: "detailed", - overviewLayout: "detailed", - hidePersonalInfo: false, - updateChannel: "stable", - autoDownloadUpdates: false, - installUpdatesOnQuit: false, - globalShortcut: "Ctrl+Shift+U", - switcherShortcuts: {}, - codexCustomSessionsDirs: [], - uiLanguage: "english", - // "dark" (not "auto") so useTheme's effect short-circuits before ever - // touching window.matchMedia, which jsdom doesn't implement here. - theme: "dark", - windowScalePercent: 125, - trayScalePercent: 100, - trayPanelAlwaysOnTop: false, - powertoysStatusPipeEnabled: false, - claudeAvoidKeychainPrompts: false, - codexSparkUsageVisible: true, - disableKeychainAccess: false, - providerMetrics: {}, - floatBarEnabled: false, - floatBarOpacity: 80, - floatBarScale: 100, - floatBarOrientation: "horizontal", - floatBarStyle: "floating", - floatBarClickThrough: false, - floatBarProviderIds: [], - floatBarDarkText: false, - floatBarShowResetInline: false, - floatBarShowCost: false, - claudeDailyRoutinesUsageVisible: true, - claudeAllowReadingClaudeCodeCredentials: false, - alibabaTokenPlanRegion: "cn", - weeklyProgressWorkDays: null, - costSummaryDisplayStyle: "compact", - providerAccentColors: {}, - ...overrides, - }; -} function bootstrap(): BootstrapState { return { contractVersion: "v1", providers: [], - settings: settings(), + settings: makeSettings(), }; } @@ -151,7 +77,7 @@ describe("App window-label routing", () => { webviewWindowMocks.label = "main"; surfaceMocks.snapshot = { mode: "hidden", target: { kind: "summary" } }; tauriMocks.getBootstrapState.mockResolvedValue(bootstrap()); - tauriMocks.getSettingsSnapshot.mockResolvedValue(settings()); + tauriMocks.getSettingsSnapshot.mockResolvedValue(makeSettings()); tauriMocks.checkForUpdates.mockResolvedValue({ status: "idle", version: null, diff --git a/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx b/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx index ea6e6b4d52..46f0ae48c3 100644 --- a/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx +++ b/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx @@ -41,6 +41,7 @@ import type { RateWindowSnapshot, SettingsSnapshot, } from "../types/bridge"; +import { makeSettings } from "../test/fixtures"; type RateWindowOptions = { exhausted?: boolean; @@ -129,77 +130,7 @@ function snapshot( } function settings(overrides: Partial = {}): SettingsSnapshot { - return { - enabledProviders: ["claude", "codex"], - refreshIntervalSecs: 300, - adaptiveRefresh: false, - refreshAllProvidersOnMenuOpen: false, - lowPowerMode: false, - startAtLogin: false, - startMinimized: false, - showNotifications: true, - soundEnabled: true, - notificationSoundTheme: "windows", - notificationSoundPaths: { - predictiveWarning: null, - highUsage: null, - criticalUsage: null, - exhausted: null, - statusIssue: null, - sessionDepleted: null, - sessionRestored: null, - }, - highUsageThreshold: 70, - criticalUsageThreshold: 90, - predictivePaceWarningEnabled: false, - credentialExpiryNotificationsEnabled: false, - trayIconMode: "single", - switcherShowsIcons: true, - menuBarShowsHighestUsage: false, - menuBarShowsPercent: false, - menuBarColorPace: false, - showAsUsed: true, - showAllTokenAccountsInMenu: false, - enableAnimations: true, - resetTimeRelative: true, - showResetWhenExhausted: false, - menuBarDisplayMode: "detailed", - overviewLayout: "detailed", - hidePersonalInfo: false, - updateChannel: "stable", - autoDownloadUpdates: false, - installUpdatesOnQuit: false, - globalShortcut: "Ctrl+Shift+U", - switcherShortcuts: {}, - codexCustomSessionsDirs: [], - uiLanguage: "english", - theme: "dark", - windowScalePercent: 125, - trayScalePercent: 100, - trayPanelAlwaysOnTop: false, - powertoysStatusPipeEnabled: false, - claudeAvoidKeychainPrompts: false, - codexSparkUsageVisible: true, - disableKeychainAccess: false, - providerMetrics: {}, - floatBarEnabled: true, - floatBarOpacity: 80, - floatBarScale: 100, - floatBarOrientation: "horizontal", - floatBarStyle: "floating", - floatBarClickThrough: false, - floatBarProviderIds: [], - floatBarDarkText: false, - floatBarShowResetInline: false, - floatBarShowCost: false, - claudeDailyRoutinesUsageVisible: true, - claudeAllowReadingClaudeCodeCredentials: false, - alibabaTokenPlanRegion: "cn", - weeklyProgressWorkDays: null, - costSummaryDisplayStyle: "compact", - providerAccentColors: {}, - ...overrides, - }; + return makeSettings({ enabledProviders: ["claude", "codex"], floatBarEnabled: true, ...overrides }); } function bootstrap(settingsOverrides: Partial = {}): BootstrapState { diff --git a/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx b/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx index 0556b6466d..431d890151 100644 --- a/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx +++ b/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx @@ -73,6 +73,7 @@ import type { ProviderUsageSnapshot, SettingsSnapshot, } from "../types/bridge"; +import { makeSettings } from "../test/fixtures"; function rateWindow(used: number) { return { @@ -124,79 +125,6 @@ function providerWithThreeQuotaWindows( return snapshot; } -function settings(overrides: Partial = {}): SettingsSnapshot { - return { - enabledProviders: ["codex", "claude"], - refreshIntervalSecs: 300, - adaptiveRefresh: false, - refreshAllProvidersOnMenuOpen: false, - lowPowerMode: false, - startAtLogin: false, - startMinimized: false, - showNotifications: true, - soundEnabled: true, - notificationSoundTheme: "windows", - notificationSoundPaths: { - predictiveWarning: null, - highUsage: null, - criticalUsage: null, - exhausted: null, - statusIssue: null, - sessionDepleted: null, - sessionRestored: null, - }, - highUsageThreshold: 70, - criticalUsageThreshold: 90, - predictivePaceWarningEnabled: false, - credentialExpiryNotificationsEnabled: false, - trayIconMode: "single", - switcherShowsIcons: true, - menuBarShowsHighestUsage: false, - menuBarShowsPercent: false, - menuBarColorPace: false, - showAsUsed: true, - showAllTokenAccountsInMenu: false, - enableAnimations: true, - resetTimeRelative: true, - showResetWhenExhausted: false, - menuBarDisplayMode: "detailed", - overviewLayout: "detailed", - hidePersonalInfo: false, - updateChannel: "stable", - autoDownloadUpdates: false, - installUpdatesOnQuit: false, - globalShortcut: "Ctrl+Shift+U", - switcherShortcuts: {}, - codexCustomSessionsDirs: [], - uiLanguage: "english", - theme: "dark", - windowScalePercent: 125, - trayScalePercent: 100, - trayPanelAlwaysOnTop: false, - powertoysStatusPipeEnabled: false, - claudeAvoidKeychainPrompts: false, - codexSparkUsageVisible: true, - disableKeychainAccess: false, - providerMetrics: {}, - floatBarEnabled: false, - floatBarOpacity: 80, - floatBarScale: 100, - floatBarOrientation: "horizontal", - floatBarStyle: "floating", - floatBarClickThrough: false, - floatBarProviderIds: [], - floatBarDarkText: false, - floatBarShowResetInline: false, - floatBarShowCost: false, - claudeDailyRoutinesUsageVisible: true, - claudeAllowReadingClaudeCodeCredentials: false, - alibabaTokenPlanRegion: "cn", - weeklyProgressWorkDays: null, - costSummaryDisplayStyle: "compact", - providerAccentColors: {}, - ...overrides, - }; -} function bootstrap( settingsOverrides: Partial = {}, @@ -205,7 +133,7 @@ function bootstrap( return { contractVersion: "v1", providers: catalog, - settings: settings(settingsOverrides), + settings: makeSettings(settingsOverrides), }; } @@ -215,7 +143,7 @@ function renderTrayPanel( catalog: ProviderCatalogEntry[] = [], ) { tauriMocks.getCachedProviders.mockResolvedValue(providers); - const snapshot = settings(settingsOverrides); + const snapshot = makeSettings(settingsOverrides); tauriMocks.getSettingsSnapshot.mockResolvedValue(snapshot); return render( @@ -261,8 +189,8 @@ describe("TrayPanel provider grid", () => { mode: "trayPanel", target: { kind: "summary" }, }); - tauriMocks.getSettingsSnapshot.mockResolvedValue(settings()); - tauriMocks.updateSettings.mockResolvedValue(settings()); + tauriMocks.getSettingsSnapshot.mockResolvedValue(makeSettings()); + tauriMocks.updateSettings.mockResolvedValue(makeSettings()); tauriMocks.getUpdateState.mockResolvedValue({ status: "idle", version: null, @@ -813,7 +741,7 @@ describe("TrayPanel provider grid", () => { tauriMocks.getCachedProviders.mockResolvedValue([ provider("claude", "Claude", 35), ]); - tauriMocks.getSettingsSnapshot.mockResolvedValue(settings({ showAsUsed: false })); + tauriMocks.getSettingsSnapshot.mockResolvedValue(makeSettings({ showAsUsed: false })); rerender( diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx index 7634e0146e..648e5c0fdc 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx @@ -36,77 +36,19 @@ vi.mock("../../../hooks/useUpdateState", () => ({ import AboutTab from "./AboutTab"; import type { SettingsSnapshot } from "../../../types/bridge"; +import { makeSettings } from "../../../test/fixtures"; -const settings: SettingsSnapshot = { +const settings: SettingsSnapshot = makeSettings({ enabledProviders: [], - refreshIntervalSecs: 300, - adaptiveRefresh: false, - refreshAllProvidersOnMenuOpen: false, - lowPowerMode: false, - startAtLogin: false, - startMinimized: false, - showNotifications: true, - soundEnabled: true, - notificationSoundTheme: "windows", - notificationSoundPaths: { - predictiveWarning: null, - highUsage: null, - criticalUsage: null, - exhausted: null, - statusIssue: null, - sessionDepleted: null, - sessionRestored: null, - }, - highUsageThreshold: 70, - criticalUsageThreshold: 90, - predictivePaceWarningEnabled: false, - credentialExpiryNotificationsEnabled: false, - trayIconMode: "single", - switcherShowsIcons: true, menuBarShowsHighestUsage: true, menuBarShowsPercent: true, - menuBarColorPace: false, showAsUsed: false, showAllTokenAccountsInMenu: true, - enableAnimations: true, - resetTimeRelative: true, - showResetWhenExhausted: false, menuBarDisplayMode: "compact", - overviewLayout: "detailed", - hidePersonalInfo: false, - autoDownloadUpdates: false, - installUpdatesOnQuit: false, globalShortcut: "", - switcherShortcuts: {}, - codexCustomSessionsDirs: [], - updateChannel: "stable", - uiLanguage: "english", - theme: "dark", - windowScalePercent: 125, - trayScalePercent: 100, - trayPanelAlwaysOnTop: false, - powertoysStatusPipeEnabled: false, claudeAvoidKeychainPrompts: true, - codexSparkUsageVisible: true, - disableKeychainAccess: false, - providerMetrics: {}, - floatBarEnabled: false, floatBarOpacity: 0.9, - floatBarScale: 100, - floatBarOrientation: "horizontal", - floatBarStyle: "floating", - floatBarClickThrough: false, - floatBarProviderIds: [], - floatBarDarkText: false, - floatBarShowResetInline: false, - floatBarShowCost: false, - claudeDailyRoutinesUsageVisible: true, - claudeAllowReadingClaudeCodeCredentials: false, - alibabaTokenPlanRegion: "cn", - weeklyProgressWorkDays: null, - costSummaryDisplayStyle: "compact", - providerAccentColors: {}, -}; +}); describe("AboutTab", () => { beforeEach(() => { diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx index 2bf33797de..4bbddc9f38 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx @@ -14,77 +14,19 @@ vi.mock("../../../hooks/useLocale", () => ({ import AdvancedTab from "./AdvancedTab"; import type { SettingsSnapshot } from "../../../types/bridge"; +import { makeSettings } from "../../../test/fixtures"; -const settings: SettingsSnapshot = { +const settings: SettingsSnapshot = makeSettings({ enabledProviders: [], - refreshIntervalSecs: 300, - adaptiveRefresh: false, - refreshAllProvidersOnMenuOpen: false, - lowPowerMode: false, - startAtLogin: false, - startMinimized: false, - showNotifications: true, - soundEnabled: true, - notificationSoundTheme: "windows", - highUsageThreshold: 70, - criticalUsageThreshold: 90, - predictivePaceWarningEnabled: false, - credentialExpiryNotificationsEnabled: false, - trayIconMode: "single", - switcherShowsIcons: true, menuBarShowsHighestUsage: true, menuBarShowsPercent: true, - menuBarColorPace: false, showAsUsed: false, showAllTokenAccountsInMenu: true, - enableAnimations: true, - resetTimeRelative: true, - showResetWhenExhausted: false, menuBarDisplayMode: "compact", - overviewLayout: "detailed", - notificationSoundPaths: { - predictiveWarning: null, - highUsage: null, - criticalUsage: null, - exhausted: null, - statusIssue: null, - sessionDepleted: null, - sessionRestored: null, - }, - hidePersonalInfo: false, - autoDownloadUpdates: false, - installUpdatesOnQuit: false, globalShortcut: "", - switcherShortcuts: {}, - codexCustomSessionsDirs: [], - updateChannel: "stable", - uiLanguage: "english", - theme: "dark", - windowScalePercent: 125, - trayScalePercent: 100, - trayPanelAlwaysOnTop: false, - powertoysStatusPipeEnabled: false, claudeAvoidKeychainPrompts: true, - codexSparkUsageVisible: true, - disableKeychainAccess: false, - providerMetrics: {}, - floatBarEnabled: false, floatBarOpacity: 0.9, - floatBarScale: 100, - floatBarOrientation: "horizontal", - floatBarStyle: "floating", - floatBarClickThrough: false, - floatBarProviderIds: [], - floatBarDarkText: false, - floatBarShowResetInline: false, - floatBarShowCost: false, - claudeDailyRoutinesUsageVisible: true, - claudeAllowReadingClaudeCodeCredentials: false, - alibabaTokenPlanRegion: "cn", - weeklyProgressWorkDays: null, - costSummaryDisplayStyle: "compact", - providerAccentColors: {}, -}; +}); describe("AdvancedTab", () => { beforeEach(() => { diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx index 5185a6f884..1b47d85040 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx @@ -37,80 +37,22 @@ vi.mock("@tauri-apps/plugin-dialog", () => ({ import GeneralTab from "./GeneralTab"; import type { SettingsSnapshot } from "../../../types/bridge"; +import { makeSettings } from "../../../test/fixtures"; import { invoke } from "@tauri-apps/api/core"; import { open } from "@tauri-apps/plugin-dialog"; -const settings: SettingsSnapshot = { +const settings: SettingsSnapshot = makeSettings({ enabledProviders: [], - preferredCurrencyCode: "AUTO", - refreshIntervalSecs: 300, - adaptiveRefresh: false, - refreshAllProvidersOnMenuOpen: false, - lowPowerMode: false, - startAtLogin: false, - startMinimized: false, - showNotifications: true, - soundEnabled: true, - notificationSoundTheme: "windows", - notificationSoundPaths: { - predictiveWarning: null, - highUsage: null, - criticalUsage: null, - exhausted: null, - statusIssue: null, - sessionDepleted: null, - sessionRestored: null, - }, - highUsageThreshold: 70, - criticalUsageThreshold: 90, - predictivePaceWarningEnabled: false, - credentialExpiryNotificationsEnabled: false, - trayIconMode: "single", - switcherShowsIcons: true, menuBarShowsHighestUsage: true, menuBarShowsPercent: true, - menuBarColorPace: false, showAsUsed: false, showAllTokenAccountsInMenu: true, - enableAnimations: true, - resetTimeRelative: true, menuBarDisplayMode: "compact", - overviewLayout: "detailed", - windowScalePercent: 125, - trayScalePercent: 100, - trayPanelAlwaysOnTop: false, - powertoysStatusPipeEnabled: false, - hidePersonalInfo: false, - autoDownloadUpdates: false, - installUpdatesOnQuit: false, globalShortcut: "", - switcherShortcuts: {}, - codexCustomSessionsDirs: [], - updateChannel: "stable", - uiLanguage: "english", - theme: "dark", claudeAvoidKeychainPrompts: true, - codexSparkUsageVisible: true, - disableKeychainAccess: false, - providerMetrics: {}, - floatBarEnabled: false, floatBarOpacity: 0.9, - floatBarScale: 100, - floatBarOrientation: "horizontal", - floatBarStyle: "floating", - floatBarClickThrough: false, - floatBarProviderIds: [], - floatBarDarkText: false, - floatBarShowResetInline: false, - floatBarShowCost: false, - claudeDailyRoutinesUsageVisible: true, - claudeAllowReadingClaudeCodeCredentials: false, - alibabaTokenPlanRegion: "cn", - weeklyProgressWorkDays: null, - costSummaryDisplayStyle: "compact", - providerAccentColors: {}, - showResetWhenExhausted: false, -}; + preferredCurrencyCode: "AUTO", +}); describe("GeneralTab running version", () => { it("shows the running app version on the general tab", async () => { diff --git a/apps/desktop-tauri/src/test/fixtures.ts b/apps/desktop-tauri/src/test/fixtures.ts new file mode 100644 index 0000000000..befe1dc065 --- /dev/null +++ b/apps/desktop-tauri/src/test/fixtures.ts @@ -0,0 +1,78 @@ +import type { SettingsSnapshot } from "../types/bridge"; + +/** A complete SettingsSnapshot with stable defaults; tests pass only the fields they assert on. */ +export function makeSettings(overrides: Partial = {}): SettingsSnapshot { + return { + enabledProviders: ["codex", "claude"], + refreshIntervalSecs: 300, + adaptiveRefresh: false, + refreshAllProvidersOnMenuOpen: false, + lowPowerMode: false, + startAtLogin: false, + startMinimized: false, + showNotifications: true, + soundEnabled: true, + notificationSoundTheme: "windows", + notificationSoundPaths: { + predictiveWarning: null, + highUsage: null, + criticalUsage: null, + exhausted: null, + statusIssue: null, + sessionDepleted: null, + sessionRestored: null, + }, + highUsageThreshold: 70, + criticalUsageThreshold: 90, + predictivePaceWarningEnabled: false, + credentialExpiryNotificationsEnabled: false, + trayIconMode: "single", + switcherShowsIcons: true, + menuBarShowsHighestUsage: false, + menuBarShowsPercent: false, + menuBarColorPace: false, + showAsUsed: true, + showAllTokenAccountsInMenu: false, + enableAnimations: true, + resetTimeRelative: true, + showResetWhenExhausted: false, + menuBarDisplayMode: "detailed", + overviewLayout: "detailed", + hidePersonalInfo: false, + updateChannel: "stable", + autoDownloadUpdates: false, + installUpdatesOnQuit: false, + globalShortcut: "Ctrl+Shift+U", + switcherShortcuts: {}, + codexCustomSessionsDirs: [], + uiLanguage: "english", + // "dark" (not "auto") so useTheme's effect short-circuits before ever + // touching window.matchMedia, which jsdom doesn't implement here. + theme: "dark", + windowScalePercent: 125, + trayScalePercent: 100, + trayPanelAlwaysOnTop: false, + powertoysStatusPipeEnabled: false, + claudeAvoidKeychainPrompts: false, + codexSparkUsageVisible: true, + disableKeychainAccess: false, + providerMetrics: {}, + floatBarEnabled: false, + floatBarOpacity: 80, + floatBarScale: 100, + floatBarOrientation: "horizontal", + floatBarStyle: "floating", + floatBarClickThrough: false, + floatBarProviderIds: [], + floatBarDarkText: false, + floatBarShowResetInline: false, + floatBarShowCost: false, + claudeDailyRoutinesUsageVisible: true, + claudeAllowReadingClaudeCodeCredentials: false, + alibabaTokenPlanRegion: "cn", + weeklyProgressWorkDays: null, + costSummaryDisplayStyle: "compact", + providerAccentColors: {}, + ...overrides, + }; +} From 2524ffecf2cd7bceef9239483165642f74656c6f Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:44:24 +0700 Subject: [PATCH 02/25] Share rate-window test builder --- apps/desktop-tauri/src/App.test.tsx | 2 +- .../src/components/MenuCard.test.tsx | 27 ++----------- .../src/floatbar/FloatBar.test.tsx | 16 ++------ .../src/lib/usageWindows.test.ts | 40 ++++++------------- .../src/surfaces/TrayPanel.period.test.tsx | 18 ++------- .../src/surfaces/TrayPanel.test.tsx | 23 +++-------- .../sections/MenuBarMetricSection.test.tsx | 30 +++++--------- .../providers/sections/UsageSection.test.tsx | 34 +++++----------- .../settings/tabs/ProvidersTab.test.tsx | 25 ++---------- apps/desktop-tauri/src/test/fixtures.ts | 20 +++++++++- 10 files changed, 72 insertions(+), 163 deletions(-) diff --git a/apps/desktop-tauri/src/App.test.tsx b/apps/desktop-tauri/src/App.test.tsx index 86c58c821c..53047f7e65 100644 --- a/apps/desktop-tauri/src/App.test.tsx +++ b/apps/desktop-tauri/src/App.test.tsx @@ -59,7 +59,7 @@ vi.mock("./hooks/useSurfaceSnapshot", () => ({ import App from "./App"; import { buildBundle } from "./test/localeHarness"; -import type { BootstrapState, SettingsSnapshot } from "./types/bridge"; +import type { BootstrapState } from "./types/bridge"; import { makeSettings } from "./test/fixtures"; diff --git a/apps/desktop-tauri/src/components/MenuCard.test.tsx b/apps/desktop-tauri/src/components/MenuCard.test.tsx index 1f8fd03cd5..9bacc49c7b 100644 --- a/apps/desktop-tauri/src/components/MenuCard.test.tsx +++ b/apps/desktop-tauri/src/components/MenuCard.test.tsx @@ -23,34 +23,15 @@ vi.mock("@tauri-apps/api/event", () => eventMocks); import { LocaleProvider } from "../i18n/LocaleProvider"; import { buildBundle } from "../test/localeHarness"; import { loadStyles, ruleBlock } from "../test/styles"; -import type { ProviderUsageSnapshot } from "../types/bridge"; +import type { ProviderUsageSnapshot, RateWindowSnapshot } from "../types/bridge"; import MenuCard from "./MenuCard"; +import { makeRateWindow } from "../test/fixtures"; function rateWindow( usedPercent = 0, - opts: { - exhausted?: boolean; - resetDescription?: string | null; - reservePercent?: number | null; - reserveDescription?: string | null; - reserveWillLastToReset?: boolean; - reserveEtaSeconds?: number | null; - windowMinutes?: number | null; - resetsAt?: string | null; - } = {}, + { exhausted = false, ...rest }: Partial & { exhausted?: boolean } = {}, ) { - return { - usedPercent, - remainingPercent: 100 - usedPercent, - windowMinutes: opts.windowMinutes ?? null, - resetsAt: opts.resetsAt ?? null, - resetDescription: opts.resetDescription ?? null, - isExhausted: opts.exhausted ?? false, - reservePercent: opts.reservePercent ?? null, - reserveDescription: opts.reserveDescription ?? null, - reserveWillLastToReset: opts.reserveWillLastToReset ?? false, - reserveEtaSeconds: opts.reserveEtaSeconds ?? null, - }; + return makeRateWindow(usedPercent, { isExhausted: exhausted, reserveWillLastToReset: false, ...rest }); } function provider( diff --git a/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx b/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx index 46f0ae48c3..48e4ae451a 100644 --- a/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx +++ b/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx @@ -41,7 +41,7 @@ import type { RateWindowSnapshot, SettingsSnapshot, } from "../types/bridge"; -import { makeSettings } from "../test/fixtures"; +import { makeRateWindow, makeSettings } from "../test/fixtures"; type RateWindowOptions = { exhausted?: boolean; @@ -51,22 +51,14 @@ type RateWindowOptions = { descriptionIsDetail?: boolean; }; -function rateWindow( - used: number, - opts: RateWindowOptions = {}, -): RateWindowSnapshot { - return { - usedPercent: used, - remainingPercent: 100 - used, - windowMinutes: null, +function rateWindow(used: number, opts: RateWindowOptions = {}): RateWindowSnapshot { + return makeRateWindow(used, { resetsAt: opts.resetsAt ?? null, resetDescription: opts.resetDescription ?? null, isExhausted: opts.exhausted ?? false, isInformational: opts.informational, descriptionIsDetail: opts.descriptionIsDetail, - reservePercent: null, - reserveDescription: null, - }; + }); } function snapshot( diff --git a/apps/desktop-tauri/src/lib/usageWindows.test.ts b/apps/desktop-tauri/src/lib/usageWindows.test.ts index e5183d7153..692a06bbc5 100644 --- a/apps/desktop-tauri/src/lib/usageWindows.test.ts +++ b/apps/desktop-tauri/src/lib/usageWindows.test.ts @@ -1,51 +1,35 @@ import { describe, expect, it } from "vitest"; -import type { RateWindowSnapshot } from "../types/bridge"; import { resetDescriptionFallback, selectSingleMetricUsageWindow, windowDetailText, } from "./usageWindows"; - -function rateWindow( - overrides: Partial = {}, -): RateWindowSnapshot { - return { - usedPercent: 0, - remainingPercent: 100, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - ...overrides, - }; -} +import { makeRateWindow } from "../test/fixtures"; describe("selectSingleMetricUsageWindow", () => { it("returns a normal primary when a secondary exists", () => { - const primary = rateWindow(); - const secondary = rateWindow({ isInformational: true }); + const primary = makeRateWindow(); + const secondary = makeRateWindow(0, { isInformational: true }); expect(selectSingleMetricUsageWindow({ primary, secondary })).toBe(primary); }); it("returns a real secondary when the primary is informational", () => { - const primary = rateWindow({ isInformational: true }); - const secondary = rateWindow(); + const primary = makeRateWindow(0, { isInformational: true }); + const secondary = makeRateWindow(); expect(selectSingleMetricUsageWindow({ primary, secondary })).toBe(secondary); }); it("returns an informational primary when the secondary is null", () => { - const primary = rateWindow({ isInformational: true }); + const primary = makeRateWindow(0, { isInformational: true }); expect(selectSingleMetricUsageWindow({ primary, secondary: null })).toBe(primary); }); it("returns an informational primary when the secondary is informational", () => { - const primary = rateWindow({ isInformational: true }); - const secondary = rateWindow({ isInformational: true }); + const primary = makeRateWindow(0, { isInformational: true }); + const secondary = makeRateWindow(0, { isInformational: true }); expect(selectSingleMetricUsageWindow({ primary, secondary })).toBe(primary); }); @@ -55,14 +39,14 @@ describe("detail-backed descriptions", () => { const amounts = "34.07 EUR / 255.00 EUR · 220.93 EUR remaining"; it("keeps ordinary descriptions as the reset fallback and shows no detail line", () => { - const window = rateWindow({ resetDescription: "Resets in 2h" }); + const window = makeRateWindow(0, { resetDescription: "Resets in 2h" }); expect(resetDescriptionFallback(window)).toBe("Resets in 2h"); expect(windowDetailText(window)).toBeNull(); }); it("moves a detail-backed description out of the reset fallback", () => { - const window = rateWindow({ resetDescription: ` ${amounts} `, descriptionIsDetail: true }); + const window = makeRateWindow(0, { resetDescription: ` ${amounts} `, descriptionIsDetail: true }); expect(resetDescriptionFallback(window)).toBeNull(); expect(windowDetailText(window)).toBe(amounts); @@ -70,11 +54,11 @@ describe("detail-backed descriptions", () => { it("ignores blank and informational detail-backed descriptions", () => { expect( - windowDetailText(rateWindow({ resetDescription: " ", descriptionIsDetail: true })), + windowDetailText(makeRateWindow(0, { resetDescription: " ", descriptionIsDetail: true })), ).toBeNull(); expect( windowDetailText( - rateWindow({ resetDescription: amounts, descriptionIsDetail: true, isInformational: true }), + makeRateWindow(0, { resetDescription: amounts, descriptionIsDetail: true, isInformational: true }), ), ).toBeNull(); }); diff --git a/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx b/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx index 0f6263c089..4fda5f9eea 100644 --- a/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx +++ b/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx @@ -59,25 +59,13 @@ import TrayPanel from "./TrayPanel"; import { LocaleProvider } from "../i18n/LocaleProvider"; import { buildBundle } from "../test/localeHarness"; import type { ProviderUsageSnapshot, SettingsSnapshot } from "../types/bridge"; - -function rateWindow(used: number) { - return { - usedPercent: used, - remainingPercent: 100 - used, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }; -} +import { makeRateWindow } from "../test/fixtures"; const codex: ProviderUsageSnapshot = { providerId: "codex", displayName: "Codex", - primary: rateWindow(35), - selectedMetric: rateWindow(35), + primary: makeRateWindow(35), + selectedMetric: makeRateWindow(35), primaryLabel: "Monthly", secondary: null, modelSpecific: null, diff --git a/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx b/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx index 431d890151..e4182364b8 100644 --- a/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx +++ b/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx @@ -73,27 +73,14 @@ import type { ProviderUsageSnapshot, SettingsSnapshot, } from "../types/bridge"; -import { makeSettings } from "../test/fixtures"; - -function rateWindow(used: number) { - return { - usedPercent: used, - remainingPercent: 100 - used, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }; -} +import { makeRateWindow, makeSettings } from "../test/fixtures"; function provider(id: string, displayName: string, used = 20): ProviderUsageSnapshot { return { providerId: id, displayName, - primary: rateWindow(used), - selectedMetric: rateWindow(used), + primary: makeRateWindow(used), + selectedMetric: makeRateWindow(used), primaryLabel: "Monthly", secondary: null, modelSpecific: null, @@ -118,9 +105,9 @@ function providerWithThreeQuotaWindows( displayName: string, ): ProviderUsageSnapshot { const snapshot = provider(id, displayName); - snapshot.secondary = rateWindow(35); + snapshot.secondary = makeRateWindow(35); snapshot.secondaryLabel = "Weekly"; - snapshot.tertiary = rateWindow(50); + snapshot.tertiary = makeRateWindow(50); snapshot.tertiaryLabel = "Monthly"; return snapshot; } diff --git a/apps/desktop-tauri/src/surfaces/settings/providers/sections/MenuBarMetricSection.test.tsx b/apps/desktop-tauri/src/surfaces/settings/providers/sections/MenuBarMetricSection.test.tsx index cd6a558e8c..46f36a181e 100644 --- a/apps/desktop-tauri/src/surfaces/settings/providers/sections/MenuBarMetricSection.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/providers/sections/MenuBarMetricSection.test.tsx @@ -2,6 +2,7 @@ import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import type { ProviderDetail } from "../../../../types/bridge"; import { MenuBarMetricSection } from "./MenuBarMetricSection"; +import { makeRateWindow } from "../../../../test/fixtures"; function provider(extra = true): ProviderDetail { return { @@ -23,7 +24,7 @@ function provider(extra = true): ProviderDetail { modelSpecific: null, tertiary: null, extraRateWindows: extra - ? [{ id: "additional_budget", title: "Additional Budget", window: rateWindow(42) }] + ? [{ id: "additional_budget", title: "Additional Budget", window: makeRateWindow(42) }] : [], cost: null, pace: null, @@ -45,9 +46,9 @@ function mistral(observed = true): ProviderDetail { displayName: "Mistral", primaryMetricLabel: "Included API", monthlyPlanWindowId: "mistral-monthly-plan", - session: observed ? rateWindow(2) : null, + session: observed ? makeRateWindow(2) : null, extraRateWindows: observed - ? [{ id: "mistral-monthly-plan", title: "Monthly Plan", window: rateWindow(42) }] + ? [{ id: "mistral-monthly-plan", title: "Monthly Plan", window: makeRateWindow(42) }] : [], hasSnapshot: observed, }; @@ -57,19 +58,6 @@ function optionNames() { return screen.getAllByRole("option").map((option) => option.textContent); } -function rateWindow(usedPercent: number) { - return { - usedPercent, - remainingPercent: 100 - usedPercent, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }; -} - describe("MenuBarMetricSection", () => { it("renders the provider-declared tertiary label key before observation", () => { const base = provider(false); @@ -94,7 +82,7 @@ describe("MenuBarMetricSection", () => { providerMetrics: { opencodego: "tertiary" }, }); - const observed = { ...base, tertiary: rateWindow(37) }; + const observed = { ...base, tertiary: makeRateWindow(37) }; rerender( { it("keeps the generic tertiary label when no provider key is declared", () => { const base = provider(false); - base.tertiary = rateWindow(37); + base.tertiary = makeRateWindow(37); render( { const aixy = provider(); aixy.id = "aixy"; aixy.displayName = "Aixy"; - aixy.weekly = rateWindow(40); + aixy.weekly = makeRateWindow(40); render( { const base = provider(false); base.id = "litellm"; base.displayName = "LiteLLM"; - base.weekly = rateWindow(30); + base.weekly = makeRateWindow(30); base.primaryLabel = "Fuel Pack"; base.secondaryLabel = "Gemini Pro"; @@ -247,7 +235,7 @@ it("offers the provider-declared lane labels in the metric picker", () => { it("keeps the generic metric labels when the provider declares none", () => { const base = provider(false); - base.weekly = rateWindow(30); + base.weekly = makeRateWindow(30); render( ({ getLocaleStrings: vi.fn(), @@ -20,19 +21,6 @@ vi.mock("../../../../lib/tauri", async (importOriginal) => ({ })); vi.mock("@tauri-apps/api/event", () => eventMocks); -function rateWindow(usedPercent: number) { - return { - usedPercent, - remainingPercent: 100 - usedPercent, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }; -} - function provider(): ProviderDetail { return { id: "copilot", @@ -48,12 +36,12 @@ function provider(): ProviderDetail { sourceLabel: null, organization: null, lastUpdated: null, - session: rateWindow(20), + session: makeRateWindow(20), weekly: null, modelSpecific: null, tertiary: null, extraRateWindows: [ - { id: "additional_budget", title: "Additional Budget", window: rateWindow(42) }, + { id: "additional_budget", title: "Additional Budget", window: makeRateWindow(42) }, ], cost: null, pace: null, @@ -100,7 +88,7 @@ describe("UsageSection", () => { ? new Date(Date.now() + 3 * 60 * 60 * 1000 + 30_000).toISOString() : null; detail.session = { - ...rateWindow(75), + ...makeRateWindow(75), resetsAt, resetDescription: "19.17 EUR / 25.50 EUR · 6.33 EUR remaining", descriptionIsDetail: true, @@ -110,7 +98,7 @@ describe("UsageSection", () => { id: "mistral-monthly-plan", title: "Monthly Plan", window: { - ...rateWindow(13), + ...makeRateWindow(13), resetsAt, resetDescription: "34.07 EUR / 255.00 EUR · 220.93 EUR remaining", descriptionIsDetail: true, @@ -139,7 +127,7 @@ describe("UsageSection", () => { it("filters only hidden metric and extra rows", async () => { const detail = provider(); - detail.weekly = rateWindow(30); + detail.weekly = makeRateWindow(30); detail.hiddenUsageItemIds = [ "metric:primary", "metric:extra-additional_budget", @@ -159,7 +147,7 @@ describe("UsageSection", () => { it("marks an unavailable session without rendering a quota bar", async () => { const detail = provider(); detail.session = { - ...rateWindow(0), + ...makeRateWindow(0), isInformational: true, resetDescription: "No active 5h session", }; @@ -180,7 +168,7 @@ describe("UsageSection", () => { detail.id = "kimi"; detail.displayName = "Kimi"; detail.session = { - ...rateWindow(0), + ...makeRateWindow(0), resetsAt: new Date(Date.now() + 3 * 60 * 60 * 1000).toISOString(), monthlyLimitBlock: { resetsAt: blockResetsAt }, }; @@ -188,7 +176,7 @@ describe("UsageSection", () => { { id: "kimi-monthly", title: "Total usage", - window: { ...rateWindow(100), isExhausted: true, resetsAt: blockResetsAt }, + window: { ...makeRateWindow(100), isExhausted: true, resetsAt: blockResetsAt }, }, ]; return detail; @@ -264,7 +252,7 @@ describe("UsageSection", () => { it("shows provider-declared lane labels in settings bars", async () => { const detail = provider(); - detail.weekly = rateWindow(30); + detail.weekly = makeRateWindow(30); detail.primaryLabel = "Fuel Pack"; detail.secondaryLabel = "Gemini Pro"; @@ -282,7 +270,7 @@ describe("UsageSection", () => { it("keeps the generic labels when the provider declares none", async () => { const detail = provider(); - detail.weekly = rateWindow(30); + detail.weekly = makeRateWindow(30); render( diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx index 7d17774a44..13ded030a9 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx @@ -3,7 +3,6 @@ import { describe, expect, it, vi } from "vitest"; import type { ProviderCatalogEntry, ProviderUsageSnapshot, - RateWindowSnapshot, SettingsSnapshot, } from "../../../types/bridge"; @@ -23,23 +22,7 @@ vi.mock("../providers/ProviderDetailPane", () => ({ })); import ProvidersTab from "./ProvidersTab"; - -function rateWindow( - usedPercent: number, - isInformational?: boolean, -): RateWindowSnapshot { - return { - usedPercent, - remainingPercent: 100 - usedPercent, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - isInformational, - reservePercent: null, - reserveDescription: null, - }; -} +import { makeRateWindow } from "../../../test/fixtures"; const provider: ProviderCatalogEntry = { id: "codex", @@ -58,9 +41,9 @@ describe("ProvidersTab", () => { const snapshot: ProviderUsageSnapshot = { providerId: provider.id, displayName: provider.displayName, - primary: rateWindow(0, true), - selectedMetric: rateWindow(42), - secondary: rateWindow(42), + primary: makeRateWindow(0, { isInformational: true }), + selectedMetric: makeRateWindow(42), + secondary: makeRateWindow(42), modelSpecific: null, tertiary: null, extraRateWindows: [], diff --git a/apps/desktop-tauri/src/test/fixtures.ts b/apps/desktop-tauri/src/test/fixtures.ts index befe1dc065..221b763d7e 100644 --- a/apps/desktop-tauri/src/test/fixtures.ts +++ b/apps/desktop-tauri/src/test/fixtures.ts @@ -1,4 +1,4 @@ -import type { SettingsSnapshot } from "../types/bridge"; +import type { RateWindowSnapshot, SettingsSnapshot } from "../types/bridge"; /** A complete SettingsSnapshot with stable defaults; tests pass only the fields they assert on. */ export function makeSettings(overrides: Partial = {}): SettingsSnapshot { @@ -76,3 +76,21 @@ export function makeSettings(overrides: Partial = {}): Setting ...overrides, }; } + +/** A non-exhausted rate window at `usedPercent`, with no reset or reserve data unless overridden. */ +export function makeRateWindow( + usedPercent = 0, + overrides: Partial = {}, +): RateWindowSnapshot { + return { + usedPercent, + remainingPercent: 100 - usedPercent, + windowMinutes: null, + resetsAt: null, + resetDescription: null, + isExhausted: false, + reservePercent: null, + reserveDescription: null, + ...overrides, + }; +} From 672e8e1cea7090f545b4d5cbfa15cb3ed8274111 Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:46:57 +0700 Subject: [PATCH 03/25] Share provider usage snapshot test builder --- .../components/MenuCard.chartRefresh.test.tsx | 30 ++----------- .../src/components/MenuCard.test.tsx | 18 ++------ .../src/components/providerGridUtils.test.ts | 45 +++---------------- .../src/floatbar/FloatBar.test.tsx | 17 ++----- .../src/hooks/useProviders.test.tsx | 41 +++-------------- .../src/lib/providerOrder.test.ts | 38 ++-------------- .../src/surfaces/TrayPanel.period.test.tsx | 21 ++------- .../src/surfaces/TrayPanel.test.tsx | 21 ++------- .../settings/tabs/ProvidersTab.test.tsx | 19 ++------ apps/desktop-tauri/src/test/fixtures.ts | 34 +++++++++++++- 10 files changed, 65 insertions(+), 219 deletions(-) diff --git a/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx b/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx index 90db174a22..0ed6453504 100644 --- a/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx +++ b/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx @@ -17,45 +17,23 @@ vi.mock("../lib/tauri", async (importOriginal) => ({ vi.mock("@tauri-apps/api/event", () => ({ listen: vi.fn().mockResolvedValue(() => {}) })); import { LocaleProvider } from "../i18n/LocaleProvider"; +import { makeRateWindow, makeUsageSnapshot } from "../test/fixtures"; import { buildBundle } from "../test/localeHarness"; import type { ProviderUsageSnapshot } from "../types/bridge"; import MenuCard from "./MenuCard"; -const window0 = { - usedPercent: 10, - remainingPercent: 90, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - reserveWillLastToReset: false, - reserveEtaSeconds: null, -}; +const window0 = makeRateWindow(10, { reserveWillLastToReset: false, reserveEtaSeconds: null }); function snapshot(updatedAt: string): ProviderUsageSnapshot { - return { - providerId: "claude", + return makeUsageSnapshot("claude", { displayName: "Claude", primary: window0, selectedMetric: window0, - secondary: null, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, sourceLabel: "oauth", updatedAt, - error: null, errorState: "unknown", - pace: null, - accountOrganization: null, - trayStatusLabel: null, fetchDurationMs: null, - }; + }); } function card(updatedAt: string) { diff --git a/apps/desktop-tauri/src/components/MenuCard.test.tsx b/apps/desktop-tauri/src/components/MenuCard.test.tsx index 9bacc49c7b..978abf40b3 100644 --- a/apps/desktop-tauri/src/components/MenuCard.test.tsx +++ b/apps/desktop-tauri/src/components/MenuCard.test.tsx @@ -25,7 +25,7 @@ import { buildBundle } from "../test/localeHarness"; import { loadStyles, ruleBlock } from "../test/styles"; import type { ProviderUsageSnapshot, RateWindowSnapshot } from "../types/bridge"; import MenuCard from "./MenuCard"; -import { makeRateWindow } from "../test/fixtures"; +import { makeRateWindow, makeUsageSnapshot } from "../test/fixtures"; function rateWindow( usedPercent = 0, @@ -39,28 +39,16 @@ function provider( usedPercent = 0, opts: { exhausted?: boolean; resetDescription?: string | null; resetsAt?: string | null } = {}, ): ProviderUsageSnapshot { - return { - providerId: "claude", + return makeUsageSnapshot("claude", { displayName: "Claude", primary: rateWindow(usedPercent, opts), selectedMetric: rateWindow(usedPercent, opts), primaryLabel: "Session", - secondary: null, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, sourceLabel: "oauth", - updatedAt: "2026-05-24T00:00:00Z", error, errorState: "unknown", - pace: null, - accountOrganization: null, - trayStatusLabel: null, fetchDurationMs: null, - }; + }); } function renderCard( diff --git a/apps/desktop-tauri/src/components/providerGridUtils.test.ts b/apps/desktop-tauri/src/components/providerGridUtils.test.ts index e6336ad02d..7ea337c7dd 100644 --- a/apps/desktop-tauri/src/components/providerGridUtils.test.ts +++ b/apps/desktop-tauri/src/components/providerGridUtils.test.ts @@ -1,55 +1,20 @@ import { describe, expect, it } from "vitest"; +import { makeRateWindow, makeUsageSnapshot } from "../test/fixtures"; import type { ProviderUsageSnapshot } from "../types/bridge"; import { prioritizeProviders } from "./providerGridUtils"; function provider(id: string): ProviderUsageSnapshot { - return { - providerId: id, - displayName: id, - primary: { - usedPercent: 0, - remainingPercent: 100, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - reserveWillLastToReset: false, - reserveEtaSeconds: null, - }, - selectedMetric: { - usedPercent: 0, - remainingPercent: 100, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - reserveWillLastToReset: false, - reserveEtaSeconds: null, - }, + return makeUsageSnapshot(id, { + primary: makeRateWindow(0, { reserveWillLastToReset: false, reserveEtaSeconds: null }), + selectedMetric: makeRateWindow(0, { reserveWillLastToReset: false, reserveEtaSeconds: null }), primaryLabel: undefined, - secondary: null, secondaryLabel: undefined, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, sourceLabel: "oauth", updatedAt: "2026-07-31T00:00:00Z", - error: null, - errorState: "ready", - pace: null, - accountOrganization: null, - trayStatusLabel: null, fetchDurationMs: null, - }; + }); } function ids(list: ProviderUsageSnapshot[]): string[] { diff --git a/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx b/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx index 48e4ae451a..07a18507f9 100644 --- a/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx +++ b/apps/desktop-tauri/src/floatbar/FloatBar.test.tsx @@ -41,7 +41,7 @@ import type { RateWindowSnapshot, SettingsSnapshot, } from "../types/bridge"; -import { makeRateWindow, makeSettings } from "../test/fixtures"; +import { makeRateWindow, makeSettings, makeUsageSnapshot } from "../test/fixtures"; type RateWindowOptions = { exhausted?: boolean; @@ -99,26 +99,15 @@ function snapshot( ? secondary : primary; - return { - providerId: id, + return makeUsageSnapshot(id, { displayName: display, primary, selectedMetric, secondary, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, - sourceLabel: "auto", updatedAt: "2026-05-15T00:00:00Z", error: opts.error ?? null, errorState: opts.errorState ?? "ready", - pace: null, - accountOrganization: null, - trayStatusLabel: null, - }; + }); } function settings(overrides: Partial = {}): SettingsSnapshot { diff --git a/apps/desktop-tauri/src/hooks/useProviders.test.tsx b/apps/desktop-tauri/src/hooks/useProviders.test.tsx index 93601110d9..fc6194101c 100644 --- a/apps/desktop-tauri/src/hooks/useProviders.test.tsx +++ b/apps/desktop-tauri/src/hooks/useProviders.test.tsx @@ -17,49 +17,18 @@ vi.mock("../lib/tauri", () => tauriMocks); vi.mock("@tauri-apps/api/event", () => eventMocks); import { useProviders } from "./useProviders"; +import { makeRateWindow, makeUsageSnapshot } from "../test/fixtures"; import type { ProviderUsageSnapshot } from "../types/bridge"; function provider(id: string, usedPercent = 20): ProviderUsageSnapshot { - return { - providerId: id, - displayName: id, - primary: { - usedPercent, - remainingPercent: 100 - usedPercent, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }, - selectedMetric: { - usedPercent, - remainingPercent: 100 - usedPercent, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }, + return makeUsageSnapshot(id, { + primary: makeRateWindow(usedPercent), + selectedMetric: makeRateWindow(usedPercent), primaryLabel: "Session", - secondary: null, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, sourceLabel: "CLI", updatedAt: new Date().toISOString(), - error: null, - errorState: "ready", - pace: null, - accountOrganization: null, - trayStatusLabel: null, fetchDurationMs: null, - }; + }); } function providerResettingAt(id: string, resetsAt: string): ProviderUsageSnapshot { diff --git a/apps/desktop-tauri/src/lib/providerOrder.test.ts b/apps/desktop-tauri/src/lib/providerOrder.test.ts index 4ff5c852c6..bd475b8d30 100644 --- a/apps/desktop-tauri/src/lib/providerOrder.test.ts +++ b/apps/desktop-tauri/src/lib/providerOrder.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from "vitest"; import { orderProviderSnapshots } from "./providerOrder"; +import { makeUsageSnapshot } from "../test/fixtures"; import type { ProviderCatalogEntry, ProviderUsageSnapshot } from "../types/bridge"; const catalog: ProviderCatalogEntry[] = [ @@ -9,44 +10,11 @@ const catalog: ProviderCatalogEntry[] = [ ]; function snapshot(providerId: string, displayName: string): ProviderUsageSnapshot { - return { - providerId, + return makeUsageSnapshot(providerId, { displayName, - primary: { - usedPercent: 0, - remainingPercent: 100, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }, - selectedMetric: { - usedPercent: 0, - remainingPercent: 100, - windowMinutes: null, - resetsAt: null, - resetDescription: null, - isExhausted: false, - reservePercent: null, - reserveDescription: null, - }, - secondary: null, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, sourceLabel: "test", updatedAt: "2026-01-01T00:00:00Z", - error: null, - errorState: "ready", - pace: null, - accountOrganization: null, - trayStatusLabel: null, - }; + }); } describe("orderProviderSnapshots", () => { diff --git a/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx b/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx index 4fda5f9eea..c743b9d5f6 100644 --- a/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx +++ b/apps/desktop-tauri/src/surfaces/TrayPanel.period.test.tsx @@ -59,30 +59,15 @@ import TrayPanel from "./TrayPanel"; import { LocaleProvider } from "../i18n/LocaleProvider"; import { buildBundle } from "../test/localeHarness"; import type { ProviderUsageSnapshot, SettingsSnapshot } from "../types/bridge"; -import { makeRateWindow } from "../test/fixtures"; +import { makeRateWindow, makeUsageSnapshot } from "../test/fixtures"; -const codex: ProviderUsageSnapshot = { - providerId: "codex", +const codex: ProviderUsageSnapshot = makeUsageSnapshot("codex", { displayName: "Codex", primary: makeRateWindow(35), selectedMetric: makeRateWindow(35), primaryLabel: "Monthly", - secondary: null, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, - sourceLabel: "auto", - updatedAt: "2026-05-24T00:00:00Z", - error: null, - errorState: "ready", - pace: null, - accountOrganization: null, - trayStatusLabel: null, fetchDurationMs: null, -}; +}); const settings = { enabledProviders: ["codex"], diff --git a/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx b/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx index e4182364b8..887de2314e 100644 --- a/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx +++ b/apps/desktop-tauri/src/surfaces/TrayPanel.test.tsx @@ -73,31 +73,16 @@ import type { ProviderUsageSnapshot, SettingsSnapshot, } from "../types/bridge"; -import { makeRateWindow, makeSettings } from "../test/fixtures"; +import { makeRateWindow, makeSettings, makeUsageSnapshot } from "../test/fixtures"; function provider(id: string, displayName: string, used = 20): ProviderUsageSnapshot { - return { - providerId: id, + return makeUsageSnapshot(id, { displayName, primary: makeRateWindow(used), selectedMetric: makeRateWindow(used), primaryLabel: "Monthly", - secondary: null, - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, - sourceLabel: "auto", - updatedAt: "2026-05-24T00:00:00Z", - error: null, - errorState: "ready", - pace: null, - accountOrganization: null, - trayStatusLabel: null, fetchDurationMs: null, - }; + }); } function providerWithThreeQuotaWindows( diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx index 13ded030a9..050fe479f6 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx @@ -22,7 +22,7 @@ vi.mock("../providers/ProviderDetailPane", () => ({ })); import ProvidersTab from "./ProvidersTab"; -import { makeRateWindow } from "../../../test/fixtures"; +import { makeRateWindow, makeUsageSnapshot } from "../../../test/fixtures"; const provider: ProviderCatalogEntry = { id: "codex", @@ -38,26 +38,13 @@ const settings = { describe("ProvidersTab", () => { it("shows the real secondary percentage when the primary is informational", () => { - const snapshot: ProviderUsageSnapshot = { - providerId: provider.id, + const snapshot: ProviderUsageSnapshot = makeUsageSnapshot(provider.id, { displayName: provider.displayName, primary: makeRateWindow(0, { isInformational: true }), selectedMetric: makeRateWindow(42), secondary: makeRateWindow(42), - modelSpecific: null, - tertiary: null, - extraRateWindows: [], - cost: null, - planName: null, - accountEmail: null, - sourceLabel: "auto", updatedAt: new Date().toISOString(), - error: null, - errorState: "ready", - pace: null, - accountOrganization: null, - trayStatusLabel: null, - }; + }); hookMocks.useProviders.mockReturnValue({ providers: [snapshot] }); render( diff --git a/apps/desktop-tauri/src/test/fixtures.ts b/apps/desktop-tauri/src/test/fixtures.ts index 221b763d7e..2b0c45cf19 100644 --- a/apps/desktop-tauri/src/test/fixtures.ts +++ b/apps/desktop-tauri/src/test/fixtures.ts @@ -1,4 +1,8 @@ -import type { RateWindowSnapshot, SettingsSnapshot } from "../types/bridge"; +import type { + ProviderUsageSnapshot, + RateWindowSnapshot, + SettingsSnapshot, +} from "../types/bridge"; /** A complete SettingsSnapshot with stable defaults; tests pass only the fields they assert on. */ export function makeSettings(overrides: Partial = {}): SettingsSnapshot { @@ -94,3 +98,31 @@ export function makeRateWindow( ...overrides, }; } + +/** A ready snapshot for `providerId` with 0% primary and selected windows and no optional data. */ +export function makeUsageSnapshot( + providerId: string, + overrides: Partial = {}, +): ProviderUsageSnapshot { + return { + providerId, + displayName: providerId, + primary: makeRateWindow(), + selectedMetric: makeRateWindow(), + secondary: null, + modelSpecific: null, + tertiary: null, + extraRateWindows: [], + cost: null, + planName: null, + accountEmail: null, + sourceLabel: "auto", + updatedAt: "2026-05-24T00:00:00Z", + error: null, + errorState: "ready", + pace: null, + accountOrganization: null, + trayStatusLabel: null, + ...overrides, + }; +} From 59c94345ec952e0c43504243f3af7bccf0abc6c7 Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:48:29 +0700 Subject: [PATCH 04/25] Share locale and event vi.mock factories --- apps/desktop-tauri/src/components/AgentSessions.test.tsx | 4 +--- apps/desktop-tauri/src/components/ClaudeAccountUsage.test.tsx | 2 +- apps/desktop-tauri/src/components/ClaudeAccountsMenu.test.tsx | 2 +- apps/desktop-tauri/src/components/GrokAccountsMenu.test.tsx | 2 +- .../src/components/MenuCard.chartRefresh.test.tsx | 2 +- apps/desktop-tauri/src/components/ProviderGrid.test.tsx | 4 +--- apps/desktop-tauri/src/components/ShortcutCapture.test.tsx | 4 +--- apps/desktop-tauri/src/floatbar/SettingsSection.test.tsx | 4 +--- apps/desktop-tauri/src/hooks/useFormattedResetTime.test.tsx | 4 +--- apps/desktop-tauri/src/hooks/useLocale.test.tsx | 4 +--- .../src/surfaces/settings/SwitcherShortcutsSection.test.tsx | 4 +--- .../sections/credentials/GrokAccountsSection.test.tsx | 2 +- .../src/surfaces/settings/tabs/AboutTab.test.tsx | 4 +--- .../src/surfaces/settings/tabs/AdvancedTab.test.tsx | 4 +--- .../src/surfaces/settings/tabs/DisplayTab.test.tsx | 4 +--- .../src/surfaces/settings/tabs/GeneralTab.test.tsx | 4 +--- .../settings/tabs/PreferencesTransferSection.test.tsx | 4 +--- .../src/surfaces/settings/tabs/ProvidersTab.test.tsx | 4 +--- .../src/surfaces/settings/tabs/UsageSpendTab.test.tsx | 4 +--- apps/desktop-tauri/src/test/mocks/event.ts | 4 ++++ apps/desktop-tauri/src/test/mocks/locale.ts | 2 ++ 21 files changed, 25 insertions(+), 47 deletions(-) create mode 100644 apps/desktop-tauri/src/test/mocks/event.ts create mode 100644 apps/desktop-tauri/src/test/mocks/locale.ts diff --git a/apps/desktop-tauri/src/components/AgentSessions.test.tsx b/apps/desktop-tauri/src/components/AgentSessions.test.tsx index 8d22f7391d..9d4940bc5e 100644 --- a/apps/desktop-tauri/src/components/AgentSessions.test.tsx +++ b/apps/desktop-tauri/src/components/AgentSessions.test.tsx @@ -11,9 +11,7 @@ vi.mock("../lib/tauri", () => ({ focusAgentSession: api.focusAgentSession, })); // t(key) returns the key, so provider labels assert against locale-key names. -vi.mock("../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key, language: "english" }), -})); +vi.mock("../hooks/useLocale", () => import("../test/mocks/locale")); import AgentSessions from "./AgentSessions"; import type { AgentSession } from "../types/bridge"; diff --git a/apps/desktop-tauri/src/components/ClaudeAccountUsage.test.tsx b/apps/desktop-tauri/src/components/ClaudeAccountUsage.test.tsx index b9ba43486d..f312d24745 100644 --- a/apps/desktop-tauri/src/components/ClaudeAccountUsage.test.tsx +++ b/apps/desktop-tauri/src/components/ClaudeAccountUsage.test.tsx @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from "vitest"; import type { ClaudeAccount } from "../types/bridge"; import ClaudeAccountUsage from "./ClaudeAccountUsage"; -vi.mock("../hooks/useLocale", () => ({ useLocale: () => ({ t: (key: string) => key }) })); +vi.mock("../hooks/useLocale", () => import("../test/mocks/locale")); const t = (key: string) => key; const account: ClaudeAccount = { id: "one:org", email: "one@example.test", organization: null, plan: "max", isActive: false, isSaved: true, diff --git a/apps/desktop-tauri/src/components/ClaudeAccountsMenu.test.tsx b/apps/desktop-tauri/src/components/ClaudeAccountsMenu.test.tsx index 4906e1524a..5c224e8c07 100644 --- a/apps/desktop-tauri/src/components/ClaudeAccountsMenu.test.tsx +++ b/apps/desktop-tauri/src/components/ClaudeAccountsMenu.test.tsx @@ -21,7 +21,7 @@ const mocks = vi.hoisted(() => { }); vi.mock("../lib/tauri", () => mocks); vi.mock("@tauri-apps/api/event", () => ({ listen: mocks.listen })); -vi.mock("../hooks/useLocale", () => ({ useLocale: () => ({ t: (key: string) => key }) })); +vi.mock("../hooks/useLocale", () => import("../test/mocks/locale")); import ClaudeAccountsMenu from "./ClaudeAccountsMenu"; const first: ClaudeAccount = { id: "first:org", email: "first@example.com", organization: "Personal", plan: "max", isActive: true, isSaved: true }; diff --git a/apps/desktop-tauri/src/components/GrokAccountsMenu.test.tsx b/apps/desktop-tauri/src/components/GrokAccountsMenu.test.tsx index a038393de8..839767deb3 100644 --- a/apps/desktop-tauri/src/components/GrokAccountsMenu.test.tsx +++ b/apps/desktop-tauri/src/components/GrokAccountsMenu.test.tsx @@ -17,7 +17,7 @@ vi.mock("@tauri-apps/api/event", () => ({ return Promise.resolve(() => mocks.listeners.delete(event)); }, })); -vi.mock("../hooks/useLocale", () => ({ useLocale: () => ({ t: (key: string) => key }) })); +vi.mock("../hooks/useLocale", () => import("../test/mocks/locale")); import GrokAccountsMenu from "./GrokAccountsMenu"; const first: GrokAccount = { diff --git a/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx b/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx index 0ed6453504..8b36d224bb 100644 --- a/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx +++ b/apps/desktop-tauri/src/components/MenuCard.chartRefresh.test.tsx @@ -14,7 +14,7 @@ vi.mock("../lib/tauri", async (importOriginal) => ({ ...(await importOriginal()), ...tauriMocks, })); -vi.mock("@tauri-apps/api/event", () => ({ listen: vi.fn().mockResolvedValue(() => {}) })); +vi.mock("@tauri-apps/api/event", () => import("../test/mocks/event")); import { LocaleProvider } from "../i18n/LocaleProvider"; import { makeRateWindow, makeUsageSnapshot } from "../test/fixtures"; diff --git a/apps/desktop-tauri/src/components/ProviderGrid.test.tsx b/apps/desktop-tauri/src/components/ProviderGrid.test.tsx index 764a779ed7..ff3099f95b 100644 --- a/apps/desktop-tauri/src/components/ProviderGrid.test.tsx +++ b/apps/desktop-tauri/src/components/ProviderGrid.test.tsx @@ -3,9 +3,7 @@ import { afterEach, describe, expect, it, vi } from "vitest"; import ProviderGrid from "./ProviderGrid"; import { providerPlaceholder } from "../lib/trayProviders"; -vi.mock("../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key, language: "english" }), -})); +vi.mock("../hooks/useLocale", () => import("../test/mocks/locale")); const providers = [ providerPlaceholder("codex", "Codex"), diff --git a/apps/desktop-tauri/src/components/ShortcutCapture.test.tsx b/apps/desktop-tauri/src/components/ShortcutCapture.test.tsx index 28ed6732de..69bc893415 100644 --- a/apps/desktop-tauri/src/components/ShortcutCapture.test.tsx +++ b/apps/desktop-tauri/src/components/ShortcutCapture.test.tsx @@ -7,9 +7,7 @@ vi.mock("../lib/tauri", () => ({ setUiLanguage: vi.fn(), })); -vi.mock("@tauri-apps/api/event", () => ({ - listen: vi.fn().mockResolvedValue(() => {}), -})); +vi.mock("@tauri-apps/api/event", () => import("../test/mocks/event")); import { LocaleProvider } from "../i18n/LocaleProvider"; import { ShortcutCapture } from "./ShortcutCapture"; diff --git a/apps/desktop-tauri/src/floatbar/SettingsSection.test.tsx b/apps/desktop-tauri/src/floatbar/SettingsSection.test.tsx index ba16810e5d..ad36f02120 100644 --- a/apps/desktop-tauri/src/floatbar/SettingsSection.test.tsx +++ b/apps/desktop-tauri/src/floatbar/SettingsSection.test.tsx @@ -3,9 +3,7 @@ import { describe, expect, it, vi } from "vitest"; import type { SettingsSnapshot } from "../types/bridge"; import FloatBarSettingsSection from "./SettingsSection"; -vi.mock("../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key }), -})); +vi.mock("../hooks/useLocale", () => import("../test/mocks/locale")); const settings = { floatBarEnabled: true, diff --git a/apps/desktop-tauri/src/hooks/useFormattedResetTime.test.tsx b/apps/desktop-tauri/src/hooks/useFormattedResetTime.test.tsx index ce682dd58c..fe6d439757 100644 --- a/apps/desktop-tauri/src/hooks/useFormattedResetTime.test.tsx +++ b/apps/desktop-tauri/src/hooks/useFormattedResetTime.test.tsx @@ -15,9 +15,7 @@ vi.mock("../lib/tauri", () => ({ setUiLanguage: vi.fn(), })); -vi.mock("@tauri-apps/api/event", () => ({ - listen: vi.fn().mockResolvedValue(() => {}), -})); +vi.mock("@tauri-apps/api/event", () => import("../test/mocks/event")); function Probe({ resetsAt, diff --git a/apps/desktop-tauri/src/hooks/useLocale.test.tsx b/apps/desktop-tauri/src/hooks/useLocale.test.tsx index d7a559b821..ec7da02852 100644 --- a/apps/desktop-tauri/src/hooks/useLocale.test.tsx +++ b/apps/desktop-tauri/src/hooks/useLocale.test.tsx @@ -7,9 +7,7 @@ vi.mock("../lib/tauri", () => ({ setUiLanguage: vi.fn(), })); -vi.mock("@tauri-apps/api/event", () => ({ - listen: vi.fn().mockResolvedValue(() => {}), -})); +vi.mock("@tauri-apps/api/event", () => import("../test/mocks/event")); import { LocaleProvider } from "../i18n/LocaleProvider"; import { useLocale } from "./useLocale"; diff --git a/apps/desktop-tauri/src/surfaces/settings/SwitcherShortcutsSection.test.tsx b/apps/desktop-tauri/src/surfaces/settings/SwitcherShortcutsSection.test.tsx index 57d684519a..f99094fa57 100644 --- a/apps/desktop-tauri/src/surfaces/settings/SwitcherShortcutsSection.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/SwitcherShortcutsSection.test.tsx @@ -1,9 +1,7 @@ import { act, fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; -vi.mock("../../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key, language: "english" }), -})); +vi.mock("../../hooks/useLocale", () => import("../../test/mocks/locale")); import SwitcherShortcutsSection from "./SwitcherShortcutsSection"; import type { SettingsSnapshot } from "../../types/bridge"; diff --git a/apps/desktop-tauri/src/surfaces/settings/providers/sections/credentials/GrokAccountsSection.test.tsx b/apps/desktop-tauri/src/surfaces/settings/providers/sections/credentials/GrokAccountsSection.test.tsx index 208cebd40d..7255feb2e4 100644 --- a/apps/desktop-tauri/src/surfaces/settings/providers/sections/credentials/GrokAccountsSection.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/providers/sections/credentials/GrokAccountsSection.test.tsx @@ -17,7 +17,7 @@ const events = vi.hoisted(() => ({ })); vi.mock("../../../../../lib/tauri", () => mocks); vi.mock("@tauri-apps/api/event", () => events); -vi.mock("../../../../../hooks/useLocale", () => ({ useLocale: () => ({ t: (key: string) => key }) })); +vi.mock("../../../../../hooks/useLocale", () => import("../../../../../test/mocks/locale")); import { GrokAccountsSection } from "./GrokAccountsSection"; const t = (key: string) => key; diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx index 648e5c0fdc..35e3c4256e 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/AboutTab.test.tsx @@ -15,9 +15,7 @@ const updateMocks = vi.hoisted(() => ({ })); vi.mock("../../../lib/tauri", () => tauriMocks); -vi.mock("../../../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key }), -})); +vi.mock("../../../hooks/useLocale", () => import("../../../test/mocks/locale")); vi.mock("../../../hooks/useUpdateState", () => ({ useUpdateState: () => ({ updateState: { diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx index 4bbddc9f38..74907e6e8f 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.test.tsx @@ -8,9 +8,7 @@ const tauriMocks = vi.hoisted(() => ({ })); vi.mock("../../../lib/tauri", () => tauriMocks); -vi.mock("../../../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key }), -})); +vi.mock("../../../hooks/useLocale", () => import("../../../test/mocks/locale")); import AdvancedTab from "./AdvancedTab"; import type { SettingsSnapshot } from "../../../types/bridge"; diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.test.tsx index 8c57e3a31a..0db49beda8 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.test.tsx @@ -1,9 +1,7 @@ import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; -vi.mock("../../../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key, language: "english" }), -})); +vi.mock("../../../hooks/useLocale", () => import("../../../test/mocks/locale")); // The FloatBar section pulls in its own bridge dependencies; it is irrelevant // to the display controls under test. vi.mock("../../../floatbar/SettingsSection", () => ({ diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx index 1b47d85040..1a5735a31b 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/GeneralTab.test.tsx @@ -1,9 +1,7 @@ import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; -vi.mock("../../../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key }), -})); +vi.mock("../../../hooks/useLocale", () => import("../../../test/mocks/locale")); // Mock Tauri invoke for get_available_languages vi.mock("@tauri-apps/api/core", () => ({ diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/PreferencesTransferSection.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/PreferencesTransferSection.test.tsx index 7e98389cc7..9090effc34 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/PreferencesTransferSection.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/PreferencesTransferSection.test.tsx @@ -16,9 +16,7 @@ vi.mock("../../../lib/tauri", () => ({ exportPreferences: mocks.exportPreferences, importPreferences: mocks.importPreferences, })); -vi.mock("../../../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key }), -})); +vi.mock("../../../hooks/useLocale", () => import("../../../test/mocks/locale")); import PreferencesTransferSection from "./PreferencesTransferSection"; diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx index 050fe479f6..62458e3197 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/ProvidersTab.test.tsx @@ -11,9 +11,7 @@ const hookMocks = vi.hoisted(() => ({ })); vi.mock("../../../hooks/useProviders", () => hookMocks); -vi.mock("../../../hooks/useLocale", () => ({ - useLocale: () => ({ t: (key: string) => key }), -})); +vi.mock("../../../hooks/useLocale", () => import("../../../test/mocks/locale")); vi.mock("../../../lib/tauri", () => ({ reorderProviders: vi.fn().mockResolvedValue(undefined), })); diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/UsageSpendTab.test.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/UsageSpendTab.test.tsx index 7ed5879627..3e96c2cf93 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/UsageSpendTab.test.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/UsageSpendTab.test.tsx @@ -10,9 +10,7 @@ const tauriMocks = vi.hoisted(() => ({ vi.mock("../../../lib/tauri", () => tauriMocks); vi.mock("@tauri-apps/plugin-dialog", () => ({ save: vi.fn() })); -vi.mock("@tauri-apps/api/event", () => ({ - listen: vi.fn().mockResolvedValue(() => {}), -})); +vi.mock("@tauri-apps/api/event", () => import("../../../test/mocks/event")); const EN: Record = { CostPeriodMonthToDate: "Month to date", diff --git a/apps/desktop-tauri/src/test/mocks/event.ts b/apps/desktop-tauri/src/test/mocks/event.ts new file mode 100644 index 0000000000..5f72f9efc6 --- /dev/null +++ b/apps/desktop-tauri/src/test/mocks/event.ts @@ -0,0 +1,4 @@ +import { vi } from "vitest"; + +/** vi.mock factory for @tauri-apps/api/event: listen resolves to a no-op unlisten. */ +export const listen = vi.fn().mockResolvedValue(() => {}); diff --git a/apps/desktop-tauri/src/test/mocks/locale.ts b/apps/desktop-tauri/src/test/mocks/locale.ts new file mode 100644 index 0000000000..93e4756c85 --- /dev/null +++ b/apps/desktop-tauri/src/test/mocks/locale.ts @@ -0,0 +1,2 @@ +/** vi.mock factory for hooks/useLocale: identity translations under English. */ +export const useLocale = () => ({ t: (key: string) => key, language: "english" }); From 49fe5629b16258fc19705a6f3d70e6389b04ab47 Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:49:18 +0700 Subject: [PATCH 05/25] Delete unused chart geometry exports --- .../src/components/charts/chartGeometry.ts | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/apps/desktop-tauri/src/components/charts/chartGeometry.ts b/apps/desktop-tauri/src/components/charts/chartGeometry.ts index b428908d56..b7623babb6 100644 --- a/apps/desktop-tauri/src/components/charts/chartGeometry.ts +++ b/apps/desktop-tauri/src/components/charts/chartGeometry.ts @@ -2,7 +2,6 @@ export const WIDTH = 280; export const DATE_EDGE_PADDING = 36; export const BAR_GAP = 2; export const PLOT_WIDTH = WIDTH - DATE_EDGE_PADDING * 2; -export const AXIS_MAX_X = WIDTH / 2; const SCROLLABLE_BAR_WIDTH = 1.5; export function shouldRenderCenterMax(count: number): boolean { @@ -29,25 +28,6 @@ export function getBarCenter(index: number, count: number, width = WIDTH): numbe return getBarX(index, count, width) + getBarWidth(count, width) / 2; } -export interface BarGeometry { - barWidth: number; - showCenterMax: boolean; - x: (index: number) => number; - center: (index: number) => number; -} - -export function getBarGeometry(count: number, width = WIDTH): BarGeometry { - const barWidth = getBarWidth(count, width); - const x = (index: number) => getBarX(index, count, width); - - return { - barWidth, - showCenterMax: shouldRenderCenterMax(count), - x, - center: (index: number) => x(index) + barWidth / 2, - }; -} - export function getLineX(index: number, count: number): number { if (count <= 1) return DATE_EDGE_PADDING; return DATE_EDGE_PADDING + (index / (count - 1)) * PLOT_WIDTH; From 650cb60fd1108c225014da537bc0bce31cdf38db Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:49:36 +0700 Subject: [PATCH 06/25] Delete unused mergeValidCurrencyRates --- apps/desktop-tauri/src/lib/currency.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/apps/desktop-tauri/src/lib/currency.ts b/apps/desktop-tauri/src/lib/currency.ts index 110744de74..0b92d16103 100644 --- a/apps/desktop-tauri/src/lib/currency.ts +++ b/apps/desktop-tauri/src/lib/currency.ts @@ -68,17 +68,6 @@ export function formatDisplayCurrency( } } -export function mergeValidCurrencyRates(input: Record): Record { - const rates = { ...FALLBACK_CURRENCY_RATES }; - for (const code of SUPPORTED_CURRENCIES) { - const value = input[code]; - if (Number.isFinite(value) && value > 0 && (code !== "USD" || Math.abs(value - 1) <= Number.EPSILON)) { - rates[code] = value; - } - } - return rates; -} - export function sumDisplayCurrencyAmounts( rows: Array<{ amount: number | null | undefined; currency: string }>, preferredCode: string, From efceeba833429cb87cd7f760b158e615b00b9d5a Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:50:01 +0700 Subject: [PATCH 07/25] Delete FALLBACK_CURRENCY_RATES, unused after mergeValidCurrencyRates --- apps/desktop-tauri/src/lib/currency.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/desktop-tauri/src/lib/currency.ts b/apps/desktop-tauri/src/lib/currency.ts index 0b92d16103..22286a0a83 100644 --- a/apps/desktop-tauri/src/lib/currency.ts +++ b/apps/desktop-tauri/src/lib/currency.ts @@ -3,10 +3,6 @@ import { CURRENCY_CATALOG } from "./currencyCatalog.generated"; // The catalog (order, symbols, offline rates) is generated from rust/src/currency.rs. export const SUPPORTED_CURRENCIES: readonly string[] = CURRENCY_CATALOG.map((entry) => entry.code); -export const FALLBACK_CURRENCY_RATES: Record = Object.fromEntries( - CURRENCY_CATALOG.map((entry) => [entry.code, entry.fallbackRate]), -); - export const CURRENCY_PICKER_OPTIONS: ReadonlyArray<{ value: string; label: string }> = CURRENCY_CATALOG.map((entry) => ({ value: entry.code, label: `${entry.code} (${entry.symbol})` })); From 146d586dff197102daa767711c61cb8d66f97e4c Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:50:25 +0700 Subject: [PATCH 08/25] Delete unused MenuSummary and its test --- .../src/components/MenuSurface.test.tsx | 56 ------------------- .../src/components/MenuSurface.tsx | 31 ---------- 2 files changed, 87 deletions(-) delete mode 100644 apps/desktop-tauri/src/components/MenuSurface.test.tsx diff --git a/apps/desktop-tauri/src/components/MenuSurface.test.tsx b/apps/desktop-tauri/src/components/MenuSurface.test.tsx deleted file mode 100644 index 041df7ec2e..0000000000 --- a/apps/desktop-tauri/src/components/MenuSurface.test.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { render, screen } from "@testing-library/react"; -import { beforeEach, describe, expect, it, vi } from "vitest"; - -const tauriMocks = vi.hoisted(() => ({ - getLocaleStrings: vi.fn(), - setUiLanguage: vi.fn(), -})); - -const eventMocks = vi.hoisted(() => ({ - listen: vi.fn(), -})); - -vi.mock("../lib/tauri", async (importOriginal) => ({ - ...(await importOriginal()), - ...tauriMocks, -})); -vi.mock("@tauri-apps/api/event", () => eventMocks); - -import { LocaleProvider } from "../i18n/LocaleProvider"; -import { buildBundle } from "../test/localeHarness"; -import { MenuSummary } from "./MenuSurface"; - -function renderSummary(total: number) { - return render( - - - , - ); -} - -describe("MenuSummary", () => { - beforeEach(() => { - vi.clearAllMocks(); - tauriMocks.getLocaleStrings.mockResolvedValue( - buildBundle({ SummaryProvidersLabel: "providers" }), - ); - eventMocks.listen.mockResolvedValue(() => {}); - }); - - it("uses a singular provider label for one provider", async () => { - renderSummary(1); - - expect(await screen.findByText("1 provider")).toBeInTheDocument(); - }); - - it("keeps the plural provider label for multiple providers", async () => { - renderSummary(2); - - expect(await screen.findByText("2 providers")).toBeInTheDocument(); - }); -}); diff --git a/apps/desktop-tauri/src/components/MenuSurface.tsx b/apps/desktop-tauri/src/components/MenuSurface.tsx index f9b08c48b0..0ebcfd5532 100644 --- a/apps/desktop-tauri/src/components/MenuSurface.tsx +++ b/apps/desktop-tauri/src/components/MenuSurface.tsx @@ -72,37 +72,6 @@ export default function MenuSurface({ ); } -interface MenuSummaryProps { - total: number; - errorCount: number; - isRefreshing: boolean; - lastRefresh: { providerCount: number; errorCount: number } | null; -} - -export function MenuSummary({ - total, - errorCount, - isRefreshing, - lastRefresh, -}: MenuSummaryProps) { - const { t } = useLocale(); - const providersLabel = t("SummaryProvidersLabel"); - const providerLabel = - total === 1 && providersLabel.toLocaleLowerCase("en-US") === "providers" - ? "provider" - : providersLabel; - const parts: string[] = [`${total} ${providerLabel}`]; - if (isRefreshing) { - parts.push(t("SummaryRefreshing")); - } else if (lastRefresh && lastRefresh.errorCount > 0) { - parts.push(`${lastRefresh.errorCount} ${t("SummaryFailed")}`); - } - if (!isRefreshing && errorCount > 0) { - parts.push(`${errorCount} ${t("SummaryWithErrors")}`); - } - return
{parts.join(" · ")}
; -} - interface MenuEmptyProps { isLoading: boolean; onSettings: () => void; From 03b506440c60e29541c0bb4541cac340ebc5d0bf Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:50:53 +0700 Subject: [PATCH 09/25] Delete unused providerDisplayDetailTitle and its test --- .../src/lib/providerLabels.test.ts | 27 +------------------ apps/desktop-tauri/src/lib/providerLabels.ts | 13 --------- 2 files changed, 1 insertion(+), 39 deletions(-) diff --git a/apps/desktop-tauri/src/lib/providerLabels.test.ts b/apps/desktop-tauri/src/lib/providerLabels.test.ts index a22cbacddf..e1d002cb10 100644 --- a/apps/desktop-tauri/src/lib/providerLabels.test.ts +++ b/apps/desktop-tauri/src/lib/providerLabels.test.ts @@ -1,35 +1,10 @@ import { describe, expect, it } from "vitest"; import type { LocaleKey } from "../i18n/keys"; -import type { ProviderDisplayDetail } from "../types/bridge"; -import { - providerCostPeriodTitle, - providerDisplayDetailTitle, -} from "./providerLabels"; +import { providerCostPeriodTitle } from "./providerLabels"; const translate = (key: LocaleKey) => `translated:${key}`; describe("provider labels", () => { - it("localizes Atlas Cloud display labels and preserves other provider titles", () => { - const atlasBalance: ProviderDisplayDetail = { - id: "atlascloud-available", - sectionTitle: null, - title: "Available balance", - value: "$95.50", - secondaryValue: null, - progress: null, - }; - const other: ProviderDisplayDetail = { - ...atlasBalance, - id: "other", - title: "Credits", - }; - - expect(providerDisplayDetailTitle(atlasBalance, translate)).toBe( - "translated:AtlasCloudAvailableBalance", - ); - expect(providerDisplayDetailTitle(other, translate)).toBe("Credits"); - }); - it("localizes Atlas Cloud balance period and generic period text", () => { expect( providerCostPeriodTitle("atlascloud", "Atlas Cloud balance", translate), diff --git a/apps/desktop-tauri/src/lib/providerLabels.ts b/apps/desktop-tauri/src/lib/providerLabels.ts index 17963e7b0d..4688fb1578 100644 --- a/apps/desktop-tauri/src/lib/providerLabels.ts +++ b/apps/desktop-tauri/src/lib/providerLabels.ts @@ -1,25 +1,12 @@ import type { LocaleKey } from "../i18n/keys"; -import type { ProviderDisplayDetail } from "../types/bridge"; import { localizeProviderText } from "./providerText"; type Translate = (key: LocaleKey) => string; -const DISPLAY_DETAIL_TITLE_KEYS: ReadonlyMap = new Map([ - ["atlascloud-available", "AtlasCloudAvailableBalance"], -]); - const COST_PERIOD_KEYS: ReadonlyMap = new Map([ ["atlascloud:Atlas Cloud balance", "AtlasCloudBalance"], ]); -export function providerDisplayDetailTitle( - detail: ProviderDisplayDetail, - t: Translate, -): string { - const key = DISPLAY_DETAIL_TITLE_KEYS.get(detail.id); - return key ? t(key) : detail.title; -} - export function providerCostPeriodTitle( providerId: string, period: string, From eed954b6a9c5cdae57cd314dd46aea0cd4930a4c Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:50:53 +0700 Subject: [PATCH 10/25] Delete unused paceCategoryKey and its test --- .../src/surfaces/tray/paceCategory.test.ts | 15 +-------------- .../src/surfaces/tray/paceCategory.ts | 14 -------------- 2 files changed, 1 insertion(+), 28 deletions(-) diff --git a/apps/desktop-tauri/src/surfaces/tray/paceCategory.test.ts b/apps/desktop-tauri/src/surfaces/tray/paceCategory.test.ts index cbbcd0c4b7..f91d23a37d 100644 --- a/apps/desktop-tauri/src/surfaces/tray/paceCategory.test.ts +++ b/apps/desktop-tauri/src/surfaces/tray/paceCategory.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { paceCategory, paceCategoryKey } from "./paceCategory"; +import { paceCategory } from "./paceCategory"; import type { PaceSnapshot } from "../../types/bridge"; type Stage = PaceSnapshot["stage"]; @@ -24,17 +24,4 @@ describe("paceCategory", () => { // @ts-expect-error — deliberately exercising the default arm. expect(paceCategory("wat")).toBe("steady"); }); - - it("maps each category to a distinct locale key", () => { - const keys = (["slow", "steady", "racing", "burning"] as const).map( - paceCategoryKey, - ); - expect(new Set(keys).size).toBe(4); - expect(keys).toEqual([ - "TrayPaceBadgeSlow", - "TrayPaceBadgeSteady", - "TrayPaceBadgeRacing", - "TrayPaceBadgeBurning", - ]); - }); }); diff --git a/apps/desktop-tauri/src/surfaces/tray/paceCategory.ts b/apps/desktop-tauri/src/surfaces/tray/paceCategory.ts index ac3b86aa49..4e6c196b00 100644 --- a/apps/desktop-tauri/src/surfaces/tray/paceCategory.ts +++ b/apps/desktop-tauri/src/surfaces/tray/paceCategory.ts @@ -1,5 +1,4 @@ import type { PaceSnapshot } from "../../types/bridge"; -import type { LocaleKey } from "../../i18n/keys"; /** * Broad pace categories used for the tray / pop-out pace badge. @@ -27,16 +26,3 @@ export function paceCategory(stage: PaceSnapshot["stage"]): PaceCategory { return "steady"; } } - -export function paceCategoryKey(category: PaceCategory): LocaleKey { - switch (category) { - case "slow": - return "TrayPaceBadgeSlow"; - case "steady": - return "TrayPaceBadgeSteady"; - case "racing": - return "TrayPaceBadgeRacing"; - case "burning": - return "TrayPaceBadgeBurning"; - } -} From f8efab9f7fdee4d8cf8ac0f33adb22b16c77dede Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:51:38 +0700 Subject: [PATCH 11/25] Delete five unused bridge invoke wrappers --- apps/desktop-tauri/src/lib/tauri.ts | 40 ----------------------------- 1 file changed, 40 deletions(-) diff --git a/apps/desktop-tauri/src/lib/tauri.ts b/apps/desktop-tauri/src/lib/tauri.ts index d1f8b7131a..cc6b06173c 100644 --- a/apps/desktop-tauri/src/lib/tauri.ts +++ b/apps/desktop-tauri/src/lib/tauri.ts @@ -15,7 +15,6 @@ import type { Language, LocaleStrings, NotificationSoundEvent, - ProviderCatalogEntry, ProviderChartData, ProviderDetail, ProviderLocalUsageSummary, @@ -38,8 +37,6 @@ import type { SessionFocusResult, TrayVisibilityStatusDto, UsageSpendSummary, - SpendContract, - CodexLocalProjectUsageSnapshot, CodexAccount, CodexAccountUsageSnapshot, CodexAccountsStateBridge, @@ -78,10 +75,6 @@ export function getBootstrapState(): Promise { return invoke("get_bootstrap_state"); } -export function getProviderCatalog(): Promise { - return invoke("get_provider_catalog"); -} - export function reorderProviders(ids: string[]): Promise { return invoke("reorder_providers", { ids }); } @@ -317,27 +310,6 @@ export function importPreferences(path: string): Promise { return invoke("import_preferences", { path }); } -export function getSpendContract( - providerId: string, - options?: { period?: string; includeOpenCodex?: boolean }, -): Promise { - return invoke("get_spend_contract", { - providerId, - period: options?.period ?? null, - includeOpenCodex: options?.includeOpenCodex ?? null, - }); -} - -export function getCodexWorkspacesSnapshot(options?: { - forceRefresh?: boolean; - historyDays?: number; -}): Promise { - return invoke("get_codex_workspaces_snapshot", { - forceRefresh: options?.forceRefresh ?? null, - historyDays: options?.historyDays ?? null, - }); -} - // ── Token account bridge ───────────────────────────────────────────── export function getTokenAccountProviders(): Promise { @@ -571,10 +543,6 @@ export function quitApp(): Promise { // ── Codex multi-account (ADR 0003) ─────────────────────────────────── -export function codexAccountsList(): Promise { - return invoke("codex_accounts_list"); -} - export function codexAccountAdd(): Promise { return invoke("codex_account_add"); } @@ -597,14 +565,6 @@ export function codexAccountFetch( return invoke("codex_account_fetch", { id }); } -export function codexAccountSnapshots(): Promise< - Record -> { - return invoke>( - "codex_account_snapshots", - ); -} - export function codexAccountRestartDesktop( switchId: string, ): Promise { From 8a3f27fb7196d6e8f04bf31edc0c2b82fee1292e Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 12:52:53 +0700 Subject: [PATCH 12/25] Load provider icons with import.meta.glob and derive registry ids --- .../src/components/providers/providerIcons.ts | 344 ++++++------------ 1 file changed, 107 insertions(+), 237 deletions(-) diff --git a/apps/desktop-tauri/src/components/providers/providerIcons.ts b/apps/desktop-tauri/src/components/providers/providerIcons.ts index 082672f4d2..603e1bfca0 100644 --- a/apps/desktop-tauri/src/components/providers/providerIcons.ts +++ b/apps/desktop-tauri/src/components/providers/providerIcons.ts @@ -1,75 +1,5 @@ -// Ported from rust/src/native_ui/provider_icons.rs and -// rust/src/native_ui/theme.rs::{provider_color, provider_icon}. -// Keep in sync with the Rust registries when new providers are added. - -import abacus from "./icons/ProviderIcon-abacus.svg?raw"; -import alibaba from "./icons/ProviderIcon-alibaba.svg?raw"; -import amp from "./icons/ProviderIcon-amp.svg?raw"; -import antigravity from "./icons/ProviderIcon-antigravity.svg?raw"; -import atlascloud from "./icons/ProviderIcon-atlascloud.svg?raw"; -import augment from "./icons/ProviderIcon-augment.svg?raw"; -import bedrock from "./icons/ProviderIcon-bedrock.svg?raw"; -import claude from "./icons/ProviderIcon-claude.svg?raw"; -import codebuff from "./icons/ProviderIcon-codebuff.svg?raw"; -import coderabbit from "./icons/ProviderIcon-coderabbit.svg?raw"; -import codex from "./icons/ProviderIcon-codex.svg?raw"; -import commandcode from "./icons/ProviderIcon-commandcode.svg?raw"; -import copilot from "./icons/ProviderIcon-copilot.svg?raw"; -import crossmodel from "./icons/ProviderIcon-crossmodel.svg?raw"; -import cursor from "./icons/ProviderIcon-cursor.svg?raw"; -import deepgram from "./icons/ProviderIcon-deepgram.svg?raw"; -import deepinfra from "./icons/ProviderIcon-deepinfra.svg?raw"; -import devpass from "./icons/ProviderIcon-devpass.svg?raw"; -import fireworks from "./icons/ProviderIcon-fireworks.svg?raw"; -import aiand from "./icons/ProviderIcon-aiand.svg?raw"; -import aixy from "./icons/ProviderIcon-aixy.svg?raw"; -import clinepass from "./icons/ProviderIcon-clinepass.svg?raw"; -import longcat from "./icons/ProviderIcon-longcat.svg?raw"; -import neuralwatt from "./icons/ProviderIcon-neuralwatt.svg?raw"; -import zoommate from "./icons/ProviderIcon-zoommate.svg?raw"; -import zenmux from "./icons/ProviderIcon-zenmux.svg?raw"; -import deepseek from "./icons/ProviderIcon-deepseek.svg?raw"; -import doubao from "./icons/ProviderIcon-doubao.svg?raw"; -import elevenlabs from "./icons/ProviderIcon-elevenlabs.svg?raw"; -import factory from "./icons/ProviderIcon-factory.svg?raw"; -import gemini from "./icons/ProviderIcon-gemini.svg?raw"; -import grok from "./icons/ProviderIcon-grok.svg?raw"; -import groq from "./icons/ProviderIcon-groq.svg?raw"; -import huggingface from "./icons/ProviderIcon-huggingface.svg?raw"; -import jetbrains from "./icons/ProviderIcon-jetbrains.svg?raw"; -import kilo from "./icons/ProviderIcon-kilo.svg?raw"; -import kimi from "./icons/ProviderIcon-kimi.svg?raw"; -import kiro from "./icons/ProviderIcon-kiro.svg?raw"; -import llmman from "./icons/ProviderIcon-llmman.svg?raw"; -import llmproxy from "./icons/ProviderIcon-llmproxy.svg?raw"; -import manus from "./icons/ProviderIcon-manus.svg?raw"; -import meta from "./icons/ProviderIcon-meta.svg?raw"; -import mimo from "./icons/ProviderIcon-mimo.svg?raw"; -import minimax from "./icons/ProviderIcon-minimax.svg?raw"; -import mistral from "./icons/ProviderIcon-mistral.svg?raw"; -import muse from "./icons/ProviderIcon-muse.svg?raw"; -import notion from "./icons/ProviderIcon-notion.svg?raw"; -import nous from "./icons/ProviderIcon-nous.svg?raw"; -import xai from "./icons/ProviderIcon-xai.svg?raw"; -import xkiro from "./icons/ProviderIcon-xkiro.svg?raw"; -import ollama from "./icons/ProviderIcon-ollama.svg?raw"; -import opencode from "./icons/ProviderIcon-opencode.svg?raw"; -import opencodego from "./icons/ProviderIcon-opencodego.svg?raw"; -import openrouter from "./icons/ProviderIcon-openrouter.svg?raw"; -import perplexity from "./icons/ProviderIcon-perplexity.svg?raw"; -import qoder from "./icons/ProviderIcon-qoder.svg?raw"; -import raycast from "./icons/ProviderIcon-raycast.svg?raw"; -import replicate from "./icons/ProviderIcon-replicate.svg?raw"; -import sakana from "./icons/ProviderIcon-sakana.svg?raw"; -import stepfun from "./icons/ProviderIcon-stepfun.svg?raw"; -import sub2api from "./icons/ProviderIcon-sub2api.svg?raw"; -import t3chat from "./icons/ProviderIcon-t3chat.svg?raw"; -import venice from "./icons/ProviderIcon-venice.svg?raw"; -import vercel from "./icons/ProviderIcon-vercel.svg?raw"; -import vertexai from "./icons/ProviderIcon-vertexai.svg?raw"; -import warp from "./icons/ProviderIcon-warp.svg?raw"; -import windsurf from "./icons/ProviderIcon-windsurf.svg?raw"; -import zai from "./icons/ProviderIcon-zai.svg?raw"; +// Brand colors mirror the Rust `brand_color` table in rust/src/core/provider.rs; +// providerIcons.test.ts fails when the ids or colors drift. /** * Replace hard-coded fills/strokes in the bundled brand SVGs with @@ -95,175 +25,115 @@ export interface ProviderIcon { svgPath?: string; } -const RAW: Record = { - abacus: tint(abacus), - alibaba: tint(alibaba), - amp: tint(amp), - antigravity: tint(antigravity), - atlascloud: tint(atlascloud), - augment: tint(augment), - bedrock: tint(bedrock), - claude: tint(claude), - codebuff: tint(codebuff), - coderabbit: tint(coderabbit), - codex: tint(codex), - commandcode: tint(commandcode), - copilot: tint(copilot), - crossmodel: tint(crossmodel), - cursor: tint(cursor), - deepgram: tint(deepgram), - deepinfra: tint(deepinfra), - devpass: tint(devpass), - fireworks: tint(fireworks), - aiand: tint(aiand), - aixy: tint(aixy), - clinepass: tint(clinepass), - longcat: tint(longcat), - neuralwatt: tint(neuralwatt), - zoommate: tint(zoommate), - zenmux: tint(zenmux), - deepseek: tint(deepseek), - doubao: tint(doubao), - elevenlabs: tint(elevenlabs), - factory: tint(factory), - gemini: tint(gemini), - grok: tint(grok), - groq: tint(groq), - huggingface: tint(huggingface), - jetbrains: tint(jetbrains), - kilo: tint(kilo), - kimi: tint(kimi), - kiro: tint(kiro), - llmman: tint(llmman), - llmproxy: tint(llmproxy), - manus: tint(manus), - meta: tint(meta), - mimo: tint(mimo), - minimax: tint(minimax), - notion: tint(notion), - nous: tint(nous), - xai: tint(xai), - xkiro: tint(xkiro), - mistral: tint(mistral), - muse: tint(muse), - ollama: tint(ollama), - opencode: tint(opencode), - opencodego: tint(opencodego), - openrouter: tint(openrouter), - perplexity: tint(perplexity), - qoder: tint(qoder), - raycast: tint(raycast), - replicate: tint(replicate), - sakana: tint(sakana), - stepfun: tint(stepfun), - sub2api: tint(sub2api), - t3chat: tint(t3chat), - venice: tint(venice), - vercel: tint(vercel), - vertexai: tint(vertexai), - warp: tint(warp), - windsurf: tint(windsurf), - zai: tint(zai), -}; +// Each icons/ProviderIcon-.svg is RAW[]. +const RAW: Record = Object.fromEntries( + Object.entries( + import.meta.glob("./icons/ProviderIcon-*.svg", { + query: "?raw", + import: "default", + eager: true, + }), + ).map(([path, svg]) => [path.slice("./icons/ProviderIcon-".length, -".svg".length), tint(svg)]), +); -/** - * Registry of provider icons. Matches the entries in - * `rust/src/native_ui/provider_icons.rs` and pulls brand colors / fallback - * letters from `rust/src/native_ui/theme.rs::{provider_color, provider_icon}`. - */ -export const PROVIDER_ICON_REGISTRY: Record = { - alibaba: { id: "alibaba", brandColor: "#ff6a00", fallbackLetter: "阿", svgPath: RAW.alibaba }, - alibabatokenplan: { id: "alibabatokenplan", brandColor: "#ff6a00", fallbackLetter: "阿", svgPath: RAW.alibaba }, - amp: { id: "amp", brandColor: "#f34e3f", fallbackLetter: "⚡", svgPath: RAW.amp }, - antigravity: { id: "antigravity", brandColor: "#60ba7e", fallbackLetter: "◉", svgPath: RAW.antigravity }, - augment: { id: "augment", brandColor: "#1aa049", fallbackLetter: "A", svgPath: RAW.augment }, - claude: { id: "claude", brandColor: "#cc7c5e", fallbackLetter: "◈", svgPath: RAW.claude }, - pi: { id: "pi", brandColor: "#7c3aed", fallbackLetter: "P" }, - codebuff: { id: "codebuff", brandColor: "#00ff95", fallbackLetter: "B", svgPath: RAW.codebuff }, - coderabbit: { id: "coderabbit", brandColor: "#ff5c35", fallbackLetter: "C", svgPath: RAW.coderabbit }, - codex: { id: "codex", brandColor: "#49a3b0", fallbackLetter: "◆", svgPath: RAW.codex }, - copilot: { id: "copilot", brandColor: "#a855f7", fallbackLetter: "⬡", svgPath: RAW.copilot }, - cursor: { id: "cursor", brandColor: "#f54e00", fallbackLetter: "▸", svgPath: RAW.cursor }, - deepgram: { id: "deepgram", brandColor: "#13ef93", fallbackLetter: "D", svgPath: RAW.deepgram }, - deepinfra: { id: "deepinfra", brandColor: "#2a3275", fallbackLetter: "D", svgPath: RAW.deepinfra }, - devpass: { id: "devpass", brandColor: "#2563eb", fallbackLetter: "D", svgPath: RAW.devpass }, - fireworks: { id: "fireworks", brandColor: "#f25b1c", fallbackLetter: "F", svgPath: RAW.fireworks }, - aiand: { id: "aiand", brandColor: "#e25c2b", fallbackLetter: "&", svgPath: RAW.aiand }, - clinepass: { id: "clinepass", brandColor: "#5487c8", fallbackLetter: "C", svgPath: RAW.clinepass }, - longcat: { id: "longcat", brandColor: "#29e154", fallbackLetter: "L", svgPath: RAW.longcat }, - neuralwatt: { id: "neuralwatt", brandColor: "#d55934", fallbackLetter: "N", svgPath: RAW.neuralwatt }, - zoommate: { id: "zoommate", brandColor: "#0B5CFF", fallbackLetter: "Z", svgPath: RAW.zoommate }, - zenmux: { id: "zenmux", brandColor: "#6c5ce7", fallbackLetter: "Z", svgPath: RAW.zenmux }, - deepseek: { id: "deepseek", brandColor: "#4d6bfe", fallbackLetter: "D", svgPath: RAW.deepseek }, - elevenlabs: { id: "elevenlabs", brandColor: "#111827", fallbackLetter: "E", svgPath: RAW.elevenlabs }, - factory: { id: "factory", brandColor: "#ff6b35", fallbackLetter: "◎", svgPath: RAW.factory }, - gemini: { id: "gemini", brandColor: "#ab87ea", fallbackLetter: "✦", svgPath: RAW.gemini }, - grok: { id: "grok", brandColor: "#111827", fallbackLetter: "G", svgPath: RAW.grok }, - groq: { id: "groq", brandColor: "#f55036", fallbackLetter: "G", svgPath: RAW.groq }, - bifrost: { id: "bifrost", brandColor: "#33c09e", fallbackLetter: "B" }, - aixy: { id: "aixy", brandColor: "#123650", fallbackLetter: "A", svgPath: RAW.aixy }, - gitkraken: { id: "gitkraken", brandColor: "#179287", fallbackLetter: "G" }, - huggingface: { id: "huggingface", brandColor: "#ffd21e", fallbackLetter: "H", svgPath: RAW.huggingface }, - hyper: { id: "hyper", brandColor: "#ff60ff", fallbackLetter: "H" }, - helmcode: { id: "helmcode", brandColor: "#4f46e5", fallbackLetter: "H" }, - v0: { id: "v0", brandColor: "#111827", fallbackLetter: "V" }, - typesafe: { id: "typesafe", brandColor: "#2563eb", fallbackLetter: "T" }, - jetbrains: { id: "jetbrains", brandColor: "#ff3399", fallbackLetter: "J", svgPath: RAW.jetbrains }, - kilo: { id: "kilo", brandColor: "#5d87ff", fallbackLetter: "K", svgPath: RAW.kilo }, - bedrock: { id: "bedrock", brandColor: "#01a88d", fallbackLetter: "B", svgPath: RAW.bedrock }, - kimi: { id: "kimi", brandColor: "#fe603c", fallbackLetter: "☽", svgPath: RAW.kimi }, - kimik2: { id: "kimik2", brandColor: "#4c00ff", fallbackLetter: "☽", svgPath: RAW.kimi }, - kiro: { id: "kiro", brandColor: "#9046ff", fallbackLetter: "K", svgPath: RAW.kiro }, - llmman: { id: "llmman", brandColor: "#6CC5B0", fallbackLetter: "L", svgPath: RAW.llmman }, - llmproxy: { id: "llmproxy", brandColor: "#4f46e5", fallbackLetter: "L", svgPath: RAW.llmproxy }, - minimax: { id: "minimax", brandColor: "#fe603c", fallbackLetter: "M", svgPath: RAW.minimax }, - mistral: { id: "mistral", brandColor: "#ff5229", fallbackLetter: "M", svgPath: RAW.mistral }, - muse: { id: "muse", brandColor: "#0668e1", fallbackLetter: "M", svgPath: RAW.muse }, - ollama: { id: "ollama", brandColor: "#8b95b0", fallbackLetter: "○", svgPath: RAW.ollama }, - azureopenai: { id: "azureopenai", brandColor: "#0078d4", fallbackLetter: "A" }, - t3chat: { id: "t3chat", brandColor: "#8b5cf6", fallbackLetter: "T", svgPath: RAW.t3chat }, - opencode: { id: "opencode", brandColor: "#3b82f6", fallbackLetter: "○", svgPath: RAW.opencode }, - opencodego: { id: "opencodego", brandColor: "#3b82f6", fallbackLetter: "○", svgPath: RAW.opencodego }, - openrouter: { id: "openrouter", brandColor: "#6b7280", fallbackLetter: "R", svgPath: RAW.openrouter }, - perplexity: { id: "perplexity", brandColor: "#1fb8cd", fallbackLetter: "P", svgPath: RAW.perplexity }, - vertexai: { id: "vertexai", brandColor: "#4285f4", fallbackLetter: "△", svgPath: RAW.vertexai }, - warp: { id: "warp", brandColor: "#6366f1", fallbackLetter: "W", svgPath: RAW.warp }, - windsurf: { id: "windsurf", brandColor: "#22c55e", fallbackLetter: "W", svgPath: RAW.windsurf }, - wayfinder: { id: "wayfinder", brandColor: "#14b8a6", fallbackLetter: "W" }, - zai: { id: "zai", brandColor: "#e85a6a", fallbackLetter: "Z", svgPath: RAW.zai }, +/** Provider icons keyed by normalized provider id. */ +const ICON_ENTRIES: Record> = { + alibaba: { brandColor: "#ff6a00", fallbackLetter: "阿", svgPath: RAW.alibaba }, + alibabatokenplan: { brandColor: "#ff6a00", fallbackLetter: "阿", svgPath: RAW.alibaba }, + amp: { brandColor: "#f34e3f", fallbackLetter: "⚡", svgPath: RAW.amp }, + antigravity: { brandColor: "#60ba7e", fallbackLetter: "◉", svgPath: RAW.antigravity }, + augment: { brandColor: "#1aa049", fallbackLetter: "A", svgPath: RAW.augment }, + claude: { brandColor: "#cc7c5e", fallbackLetter: "◈", svgPath: RAW.claude }, + pi: { brandColor: "#7c3aed", fallbackLetter: "P" }, + codebuff: { brandColor: "#00ff95", fallbackLetter: "B", svgPath: RAW.codebuff }, + coderabbit: { brandColor: "#ff5c35", fallbackLetter: "C", svgPath: RAW.coderabbit }, + codex: { brandColor: "#49a3b0", fallbackLetter: "◆", svgPath: RAW.codex }, + copilot: { brandColor: "#a855f7", fallbackLetter: "⬡", svgPath: RAW.copilot }, + cursor: { brandColor: "#f54e00", fallbackLetter: "▸", svgPath: RAW.cursor }, + deepgram: { brandColor: "#13ef93", fallbackLetter: "D", svgPath: RAW.deepgram }, + deepinfra: { brandColor: "#2a3275", fallbackLetter: "D", svgPath: RAW.deepinfra }, + devpass: { brandColor: "#2563eb", fallbackLetter: "D", svgPath: RAW.devpass }, + fireworks: { brandColor: "#f25b1c", fallbackLetter: "F", svgPath: RAW.fireworks }, + aiand: { brandColor: "#e25c2b", fallbackLetter: "&", svgPath: RAW.aiand }, + clinepass: { brandColor: "#5487c8", fallbackLetter: "C", svgPath: RAW.clinepass }, + longcat: { brandColor: "#29e154", fallbackLetter: "L", svgPath: RAW.longcat }, + neuralwatt: { brandColor: "#d55934", fallbackLetter: "N", svgPath: RAW.neuralwatt }, + zoommate: { brandColor: "#0B5CFF", fallbackLetter: "Z", svgPath: RAW.zoommate }, + zenmux: { brandColor: "#6c5ce7", fallbackLetter: "Z", svgPath: RAW.zenmux }, + deepseek: { brandColor: "#4d6bfe", fallbackLetter: "D", svgPath: RAW.deepseek }, + elevenlabs: { brandColor: "#111827", fallbackLetter: "E", svgPath: RAW.elevenlabs }, + factory: { brandColor: "#ff6b35", fallbackLetter: "◎", svgPath: RAW.factory }, + gemini: { brandColor: "#ab87ea", fallbackLetter: "✦", svgPath: RAW.gemini }, + grok: { brandColor: "#111827", fallbackLetter: "G", svgPath: RAW.grok }, + groq: { brandColor: "#f55036", fallbackLetter: "G", svgPath: RAW.groq }, + bifrost: { brandColor: "#33c09e", fallbackLetter: "B" }, + aixy: { brandColor: "#123650", fallbackLetter: "A", svgPath: RAW.aixy }, + gitkraken: { brandColor: "#179287", fallbackLetter: "G" }, + huggingface: { brandColor: "#ffd21e", fallbackLetter: "H", svgPath: RAW.huggingface }, + hyper: { brandColor: "#ff60ff", fallbackLetter: "H" }, + helmcode: { brandColor: "#4f46e5", fallbackLetter: "H" }, + v0: { brandColor: "#111827", fallbackLetter: "V" }, + typesafe: { brandColor: "#2563eb", fallbackLetter: "T" }, + jetbrains: { brandColor: "#ff3399", fallbackLetter: "J", svgPath: RAW.jetbrains }, + kilo: { brandColor: "#5d87ff", fallbackLetter: "K", svgPath: RAW.kilo }, + bedrock: { brandColor: "#01a88d", fallbackLetter: "B", svgPath: RAW.bedrock }, + kimi: { brandColor: "#fe603c", fallbackLetter: "☽", svgPath: RAW.kimi }, + kimik2: { brandColor: "#4c00ff", fallbackLetter: "☽", svgPath: RAW.kimi }, + kiro: { brandColor: "#9046ff", fallbackLetter: "K", svgPath: RAW.kiro }, + llmman: { brandColor: "#6CC5B0", fallbackLetter: "L", svgPath: RAW.llmman }, + llmproxy: { brandColor: "#4f46e5", fallbackLetter: "L", svgPath: RAW.llmproxy }, + minimax: { brandColor: "#fe603c", fallbackLetter: "M", svgPath: RAW.minimax }, + mistral: { brandColor: "#ff5229", fallbackLetter: "M", svgPath: RAW.mistral }, + muse: { brandColor: "#0668e1", fallbackLetter: "M", svgPath: RAW.muse }, + ollama: { brandColor: "#8b95b0", fallbackLetter: "○", svgPath: RAW.ollama }, + azureopenai: { brandColor: "#0078d4", fallbackLetter: "A" }, + t3chat: { brandColor: "#8b5cf6", fallbackLetter: "T", svgPath: RAW.t3chat }, + opencode: { brandColor: "#3b82f6", fallbackLetter: "○", svgPath: RAW.opencode }, + opencodego: { brandColor: "#3b82f6", fallbackLetter: "○", svgPath: RAW.opencodego }, + openrouter: { brandColor: "#6b7280", fallbackLetter: "R", svgPath: RAW.openrouter }, + perplexity: { brandColor: "#1fb8cd", fallbackLetter: "P", svgPath: RAW.perplexity }, + vertexai: { brandColor: "#4285f4", fallbackLetter: "△", svgPath: RAW.vertexai }, + warp: { brandColor: "#6366f1", fallbackLetter: "W", svgPath: RAW.warp }, + windsurf: { brandColor: "#22c55e", fallbackLetter: "W", svgPath: RAW.windsurf }, + wayfinder: { brandColor: "#14b8a6", fallbackLetter: "W" }, + zai: { brandColor: "#e85a6a", fallbackLetter: "Z", svgPath: RAW.zai }, // Aliases / Rust-side normalizations without their own SVG. - nanogpt: { id: "nanogpt", brandColor: "#687fa1", fallbackLetter: "N" }, - infini: { id: "infini", brandColor: "#687fa1", fallbackLetter: "I" }, - abacus: { id: "abacus", brandColor: "#814ee8", fallbackLetter: "A", svgPath: RAW.abacus }, - atlascloud: { id: "atlascloud", brandColor: "#5975F5", fallbackLetter: "A", svgPath: RAW.atlascloud }, - manus: { id: "manus", brandColor: "#34322d", fallbackLetter: "M", svgPath: RAW.manus }, - mimo: { id: "mimo", brandColor: "#ff6900", fallbackLetter: "M", svgPath: RAW.mimo }, - doubao: { id: "doubao", brandColor: "#2563eb", fallbackLetter: "D", svgPath: RAW.doubao }, - commandcode: { id: "commandcode", brandColor: "#8c4edd", fallbackLetter: "C", svgPath: RAW.commandcode }, - crossmodel: { id: "crossmodel", brandColor: "#c084fc", fallbackLetter: "X", svgPath: RAW.crossmodel }, - qoder: { id: "qoder", brandColor: "#2563eb", fallbackLetter: "Q", svgPath: RAW.qoder }, - raycast: { id: "raycast", brandColor: "#FF6363", fallbackLetter: "R", svgPath: RAW.raycast }, - replicate: { id: "replicate", brandColor: "#000000", fallbackLetter: "R", svgPath: RAW.replicate }, - codebuddy: { id: "codebuddy", brandColor: "#0052d9", fallbackLetter: "C" }, - sakana: { id: "sakana", brandColor: "#0ea5e9", fallbackLetter: "S", svgPath: RAW.sakana }, - stepfun: { id: "stepfun", brandColor: "#999999", fallbackLetter: "S", svgPath: RAW.stepfun }, - sub2api: { id: "sub2api", brandColor: "#14b8a6", fallbackLetter: "S", svgPath: RAW.sub2api }, - venice: { id: "venice", brandColor: "#3c8fdd", fallbackLetter: "V", svgPath: RAW.venice }, - vercel: { id: "vercel", brandColor: "#737373", fallbackLetter: "V", svgPath: RAW.vercel }, - openaiapi: { id: "openaiapi", brandColor: "#10a37f", fallbackLetter: "O" }, - chutes: { id: "chutes", brandColor: "#ff5c35", fallbackLetter: "C" }, - litellm: { id: "litellm", brandColor: "#0ea5e9", fallbackLetter: "L" }, - poe: { id: "poe", brandColor: "#5d5fef", fallbackLetter: "P" }, - devin: { id: "devin", brandColor: "#317cff", fallbackLetter: "D" }, - zed: { id: "zed", brandColor: "#084ccf", fallbackLetter: "Z" }, - qwencloud: { id: "qwencloud", brandColor: "#615CED", fallbackLetter: "Q" }, - notion: { id: "notion", brandColor: "#337EA9", fallbackLetter: "N", svgPath: RAW.notion }, - nous: { id: "nous", brandColor: "#D6A55C", fallbackLetter: "N", svgPath: RAW.nous }, - xai: { id: "xai", brandColor: "#8e8e93", fallbackLetter: "X", svgPath: RAW.xai }, - xkiro: { id: "xkiro", brandColor: "#52c99b", fallbackLetter: "X", svgPath: RAW.xkiro }, - meta: { id: "meta", brandColor: "#0467DF", fallbackLetter: "M", svgPath: RAW.meta }, + nanogpt: { brandColor: "#687fa1", fallbackLetter: "N" }, + infini: { brandColor: "#687fa1", fallbackLetter: "I" }, + abacus: { brandColor: "#814ee8", fallbackLetter: "A", svgPath: RAW.abacus }, + atlascloud: { brandColor: "#5975F5", fallbackLetter: "A", svgPath: RAW.atlascloud }, + manus: { brandColor: "#34322d", fallbackLetter: "M", svgPath: RAW.manus }, + mimo: { brandColor: "#ff6900", fallbackLetter: "M", svgPath: RAW.mimo }, + doubao: { brandColor: "#2563eb", fallbackLetter: "D", svgPath: RAW.doubao }, + commandcode: { brandColor: "#8c4edd", fallbackLetter: "C", svgPath: RAW.commandcode }, + crossmodel: { brandColor: "#c084fc", fallbackLetter: "X", svgPath: RAW.crossmodel }, + qoder: { brandColor: "#2563eb", fallbackLetter: "Q", svgPath: RAW.qoder }, + raycast: { brandColor: "#FF6363", fallbackLetter: "R", svgPath: RAW.raycast }, + replicate: { brandColor: "#000000", fallbackLetter: "R", svgPath: RAW.replicate }, + codebuddy: { brandColor: "#0052d9", fallbackLetter: "C" }, + sakana: { brandColor: "#0ea5e9", fallbackLetter: "S", svgPath: RAW.sakana }, + stepfun: { brandColor: "#999999", fallbackLetter: "S", svgPath: RAW.stepfun }, + sub2api: { brandColor: "#14b8a6", fallbackLetter: "S", svgPath: RAW.sub2api }, + venice: { brandColor: "#3c8fdd", fallbackLetter: "V", svgPath: RAW.venice }, + vercel: { brandColor: "#737373", fallbackLetter: "V", svgPath: RAW.vercel }, + openaiapi: { brandColor: "#10a37f", fallbackLetter: "O" }, + chutes: { brandColor: "#ff5c35", fallbackLetter: "C" }, + litellm: { brandColor: "#0ea5e9", fallbackLetter: "L" }, + poe: { brandColor: "#5d5fef", fallbackLetter: "P" }, + devin: { brandColor: "#317cff", fallbackLetter: "D" }, + zed: { brandColor: "#084ccf", fallbackLetter: "Z" }, + qwencloud: { brandColor: "#615CED", fallbackLetter: "Q" }, + notion: { brandColor: "#337EA9", fallbackLetter: "N", svgPath: RAW.notion }, + nous: { brandColor: "#D6A55C", fallbackLetter: "N", svgPath: RAW.nous }, + xai: { brandColor: "#8e8e93", fallbackLetter: "X", svgPath: RAW.xai }, + xkiro: { brandColor: "#52c99b", fallbackLetter: "X", svgPath: RAW.xkiro }, + meta: { brandColor: "#0467DF", fallbackLetter: "M", svgPath: RAW.meta }, }; +export const PROVIDER_ICON_REGISTRY: Record = Object.fromEntries( + Object.entries(ICON_ENTRIES).map(([id, entry]) => [id, { id, ...entry }]), +); + const ALIASES: Record = { droid: "factory", "z.ai": "zai", From 590cd43468cba0ed25514b18f7a5767542b98ced Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 13:01:38 +0700 Subject: [PATCH 13/25] Delete unused locale keys --- .../src/components/MenuCard.test.tsx | 1 - apps/desktop-tauri/src/i18n/keys.ts | 219 ---------------- rust/src/locale.rs | 239 ------------------ rust/src/locale/en-US.ftl | 217 ---------------- rust/src/locale/es-MX.ftl | 217 ---------------- rust/src/locale/ja-JP.ftl | 217 ---------------- rust/src/locale/ko-KR.ftl | 217 ---------------- rust/src/locale/pt-BR.ftl | 217 ---------------- rust/src/locale/ru-RU.ftl | 217 ---------------- rust/src/locale/tests.rs | 18 -- rust/src/locale/tr-TR.ftl | 217 ---------------- rust/src/locale/uk-UA.ftl | 217 ---------------- rust/src/locale/zh-CN.ftl | 217 ---------------- rust/src/locale/zh-TW.ftl | 217 ---------------- 14 files changed, 2647 deletions(-) diff --git a/apps/desktop-tauri/src/components/MenuCard.test.tsx b/apps/desktop-tauri/src/components/MenuCard.test.tsx index 978abf40b3..182fe58efb 100644 --- a/apps/desktop-tauri/src/components/MenuCard.test.tsx +++ b/apps/desktop-tauri/src/components/MenuCard.test.tsx @@ -89,7 +89,6 @@ describe("MenuCard", () => { buildBundle({ ActionCopyError: "Copy error", ApiSpendTitle: "API spend", - AtlasCloudAvailableBalance: "Available balance", AtlasCloudBalance: "Atlas Cloud balance", DetailPaceRunsOutIn: "Runs out in", PanelEstimatedFromLocalLogs: "Estimated from local logs", diff --git a/apps/desktop-tauri/src/i18n/keys.ts b/apps/desktop-tauri/src/i18n/keys.ts index f64b59e2c3..905747610e 100644 --- a/apps/desktop-tauri/src/i18n/keys.ts +++ b/apps/desktop-tauri/src/i18n/keys.ts @@ -10,12 +10,9 @@ export const ALL_LOCALE_KEYS = [ "TabNotifications", "TabMenuBar", "TabMenu", - "TabApiKeys", - "TabCookies", "TabUsageSpend", "TabAdvanced", "TabAbout", - "TabShortcuts", "InterfaceLanguage", "StartupSettings", "StartAtLogin", @@ -24,8 +21,6 @@ export const ALL_LOCALE_KEYS = [ "StartMinimizedHelper", "ShowNotificationsHelper", "SoundEnabledHelper", - "HighUsageThresholdHelper", - "CriticalUsageThresholdHelper", "ShowNotifications", "SoundEnabled", "NotificationSoundTheme", @@ -50,9 +45,7 @@ export const ALL_LOCALE_KEYS = [ "NotificationSoundEventSessionDepletedHelper", "NotificationSoundEventSessionRestored", "NotificationSoundEventSessionRestoredHelper", - "HighUsageThreshold", "HighUsageAlert", - "CriticalUsageThreshold", "CriticalUsageAlert", "PredictivePaceWarnings", "PredictivePaceWarningsHelper", @@ -77,41 +70,25 @@ export const ALL_LOCALE_KEYS = [ "CredentialExpiryNotificationsHelper", "CredentialExpiryTitle", "CredentialExpiryBody", - "UsageDisplay", - "ShowUsageAsUsed", - "ShowUsageAsUsedHelper", "ResetTimeRelative", "ResetTimeRelativeHelper", "ShowResetWhenExhausted", "ShowResetWhenExhaustedHelper", "ShowPace", "ShowPaceHelper", - "TrayIcon", - "MergeTrayIcons", - "MergeTrayIconsHelper", - "PerProviderTrayIcons", - "PerProviderTrayIconsHelper", "ProviderEnabled", "ProviderDisabled", - "ProviderInfo", "ProviderUsage", - "AtlasCloudAvailableBalance", "AtlasCloudBalance", "PanelUsageDetails", "AuthType", "DataSource", - "ProviderNotDetected", - "ProviderLastFetchFailed", "ProviderUsageNotFetchedYet", - "ProviderNotFetchedYetTitle", - "ProviderDisabledNoRecentData", "ProviderSourceAutoShort", "ProviderSourceWebShort", "ProviderSourceCliShort", "ProviderSourceOauthShort", "ProviderSourceApiShort", - "ProviderSourceGithubApiShort", - "ProviderSourceLocalShort", "ProviderSourceKiroEnvShort", "WayfinderGatewayTitle", "WayfinderGatewayLabel", @@ -129,67 +106,22 @@ export const ALL_LOCALE_KEYS = [ "WayfinderOffline", "WayfinderDryRun", "WayfinderMissingKeys", - "TrackingItem", - "MainWindowLiveUsageData", - "StartTrackingUsage", - "ClickTrayIconForMetrics", - "BrowserCookieImport", - "ImportFromBrowser", - "NoCookiesFoundInBrowser", - "SelectBrowser", - "ImportCookies", - "ImportSuccess", - "ImportFailed", - "SaveFailed", - "CookiesAutoImport", "QuickActions", "OpenProviderDashboard", - "OllamaNoDashboard", - "ApiKeysTitle", - "ApiKeysDescription", "AddKey", "KeySet", - "KeyRequired", "Remove", - "GetKey", - "SavedCookies", - "AddManualCookie", "CookieHeader", - "PasteHere", - "DeleteCookie", - "CookieSaved", - "CookieDeleted", - "RefreshSettings", "Animations", "MenuBar", - "Fun", - "GlobalShortcut", "Privacy", "Updates", "UpdateChannel", - "UpdateChannelStable", - "UpdateChannelBeta", "Never", "LastUpdated", "NeverUpdated", - "MinutesAgo", - "HoursAgo", - "DaysAgo", - "BuiltWithRust", - "OriginalMacOSVersion", - "Links", - "BuildInfo", - "EnabledProviders", "Appearance", - "ThemeSelection", - "LightMode", - "DarkMode", - "AboutTitle", "Version", - "ActionRefreshAll", - "ActionSettings", - "ActionClose", - "ProviderAccount", "ProviderSession", "ProviderWeekly", "ProviderMonthly", @@ -201,54 +133,22 @@ export const ALL_LOCALE_KEYS = [ "DeepSeekPricingNext", "DeepSeekPricingEffective", "DeepSeekPricingAdvice", - "ProviderModel", - "ProviderPlan", - "ProviderNextReset", - "ProviderNoRecentUsage", - "ProviderNotSignedIn", - "SummaryTab", "StateLoadingProviders", - "StateNoProviderData", "StateNoProviderSelected", - "StateSummaryRefreshPending", "StateError", - "StateRetry", - "StateDownload", - "StateRestartAndUpdate", - "CreditsTitle", - "UpdateRestartAndUpdate", - "UpdateRetry", - "UpdateDownload", "UpdateDownloading", "UpdateReady", - "UpdateFailed", - "ButtonOpenProviderSettings", "MenuSettings", "MenuAbout", "MenuQuit", - "StatusJustUpdated", - "StatusUnableToGetUsage", "ActionRefresh", "ActionSwitchAccount", "ActionUsageDashboard", "ActionStatusPage", "ActionCopyError", "ActionBuyCredits", - "PaceOnTrack", - "PaceBehind", "MetricResetsIn", - "SectionUsageBreakdown", - "SectionCost", "ResetInProgress", - "TomorrowAt", - "UsedPercent", - "RemainingPercent", - "RemainingAmount", - "Tokens1K", - "TodayCost", - "Last30DaysCost", - "StatusLabel", - "TrayOpenCodexBar", "TrayPopOutDashboard", "TrayShowFloatBar", "TrayStayAwakeActive", @@ -256,9 +156,7 @@ export const ALL_LOCALE_KEYS = [ "TrayProviders", "TraySettings", "TrayCheckForUpdates", - "TrayQuit", "TrayLoading", - "TrayNoProviders", "TraySessionPercent", "TrayWeeklyPercent", "TrayStatusError", @@ -267,28 +165,19 @@ export const ALL_LOCALE_KEYS = [ "TrayStatusPartial", "TrayWeeklyExhausted", "TrayCreditsRemaining", - "TrayStatusRowLoading", "TrayStatusRowError", - "TrayCreditsRow", - "TrayProviderPopOut", - "TrayProviderRefresh", - "TrayProviderSettings", - "TrayProviderQuit", "State", "Source", - "Updated", "UpdatedJustNow", "UpdatedMinutesAgo", "UpdatedHoursAgo", "UpdatedDaysAgo", "Status", - "AllSystemsOperational", "Plan", "Account", "ProviderSessionLabel", "ProviderWeeklyLabel", "ClaudeScopedWeeklyLabel", - "ProviderCodeReviewLabel", "ResetsInShort", "ResetsInDaysHours", "ResetsInHoursMinutes", @@ -299,14 +188,7 @@ export const ALL_LOCALE_KEYS = [ "NextExpiresDueNow", "InventoryAvailableCount", "TrayDisplayTitle", - "ShowInTray", "CreditsLabel", - "CreditsLeft", - "CostTitle", - "TodayCostFull", - "Last30DaysCostFull", - "ProviderSettingsTitle", - "ProviderAccountsTitle", "ProviderOptionsTitle", "MenuBarMetric", "MenuBarMetricHelper", @@ -315,16 +197,8 @@ export const ALL_LOCALE_KEYS = [ "ProviderZedUsageSourceAutoHelp", "ProviderZedUsageSourceApiHelp", "ProviderZedUsageSourceWebHelp", - "ProviderNoCodexAccountsDetected", "ProviderCodexAutoImportHelp", "ProviderCodexHistoryHelp", - "ProviderOpenAiCookies", - "ProviderHistoricalTracking", - "ProviderOpenAiWebExtras", - "ProviderOpenAiWebExtrasHelp", - "ProviderCodexCreditsUnavailable", - "ProviderCodexLastFetchFailedTitle", - "ProviderCodexNotRunningHelp", "ProviderCookieSource", "CookieSourceManual", "ProviderRaycastAutoImportHelp", @@ -385,16 +259,11 @@ export const ALL_LOCALE_KEYS = [ "ProviderManualCookieMissing", "ProviderUseAutomaticCookies", "ProviderRegion", - "ProviderClaudeCookies", "ProviderClaudeCookiesHelp", "ProviderClaudeAvoidKeychainPrompts", "ProviderClaudeAvoidKeychainPromptsHelp", - "ProviderClaudeDailyRoutinesUsage", - "ProviderClaudeDailyRoutinesUsageHelp", "ProviderClaudeAllowReadingClaudeCodeCredentials", "ProviderClaudeAllowReadingClaudeCodeCredentialsHelp", - "ProviderCodexSparkUsage", - "ProviderCodexSparkUsageHelp", "CopilotSeatCreditTitle", "CopilotSeatCreditHelper", "CopilotSeatCreditInvalid", @@ -462,9 +331,6 @@ export const ALL_LOCALE_KEYS = [ "CodexSwitchRestartPrompt", "CodexAccountsRestartDesktop", "ProviderCursorCookieSourceHelp", - "ProviderCursorCreditsHelp", - "AutoFallbackHelp", - "ProviderSourceOauthWeb", "Automatic", "Average", "ExtraUsage", @@ -482,7 +348,6 @@ export const ALL_LOCALE_KEYS = [ "HooksEnableLabel", "HooksEnableHelper", "HooksConfigPathHint", - "NetworkProxyInvalidUrl", "NetworkProxyPasswordHelper", "NetworkProxyPasswordLabel", "NetworkProxyUserLabel", @@ -517,12 +382,10 @@ export const ALL_LOCALE_KEYS = [ "UsageSpendKnownSubtotal", "IncompleteRequestsLabel", "IncompleteRequestsDetail", - "UsageSpendAllTimeHistory", "UsageSpendCustomPricing", "UsageSpendDailyLedger", "UsageSpendDailyLedgerHelper", "UsageSpendNoDailyData", - "OverviewSpendTitle", "OverviewSpendProviderCoverage", "OverviewSpendEstimate", "UsageSpendProjects", @@ -562,75 +425,29 @@ export const ALL_LOCALE_KEYS = [ "AgentSessionsSshHostsHelper", "AgentSessionsLoading", "AgentSessionsEmpty", - "UpdatesTitle", "UpdateChannelChoice", "UpdateChannelChoiceHelper", "AutoDownloadUpdates", "AutoDownloadUpdatesHelper", - "InstallUpdatesOnQuit", - "InstallUpdatesOnQuitHelper", - "KeyboardShortcutsTitle", - "GlobalShortcutLabel", - "GlobalShortcutHelper", - "ShortcutFormatHint", "Saved", "InvalidFormat", - "ShortcutHintPlaceholder", - "SelectProvider", - "RefreshInterval30Sec", "RefreshInterval1Min", "RefreshInterval5Min", - "RefreshInterval10Min", - "BrowserCookiesTitle", - "CookieImport", "Provider", - "SelectPlaceholder", - "AutoRefreshInterval", - "AboutDescription", - "AboutDescriptionLine2", - "ViewOnGitHub", "SubmitIssue", - "MaintainedBy", - "CommitLabel", - "BuildDateLabel", "Save", "Cancel", "Label", "Token", - "AddAccount", - "AccountAdded", - "AccountRemoved", - "AccountSwitched", - "AccountLabelHint", - "EnterApiKeyFor", "PasteApiKeyHere", - "ApiKeySaved", - "ApiKeyRemoved", - "EnvironmentVariable", - "CookieSavedForProvider", - "CookieRemovedForProvider", - "ShowUsedPercent", - "ShowRemainingPercent", "UpdateAvailableMessage", - "UpdateReadyMessage", - "UpdateFailedMessage", - "UpdateDownloadingMessage", - "TabTokenAccounts", "SectionRefresh", "SectionNotifications", "SectionUsageThresholds", "SectionKeyboard", - "SectionUsageRendering", - "SectionTime", "SectionLanguage", "PreferredCurrencyLabel", "PreferredCurrencyHelper", - "SectionCredentialsSecurity", - "SectionDebug", - "SectionApiKeys", - "SectionSavedCookies", - "SectionImportFromBrowser", - "SectionAddCookieManually", "SectionTokenAccounts", "SectionSavedAccounts", "SectionAddAccount", @@ -706,8 +523,6 @@ export const ALL_LOCALE_KEYS = [ "OverviewLayoutCompact", "ShowAllTokenAccountsLabel", "ShowAllTokenAccountsHelper", - "EnableAnimationsLabel", - "EnableAnimationsHelper", "UpdateChannelStableOption", "UpdateChannelBetaOption", "CodexLocalLogsTitle", @@ -725,23 +540,14 @@ export const ALL_LOCALE_KEYS = [ "ThemeLightOption", "ThemeDarkOption", "SettingsStatusSaving", - "ApiKeysTabHint", "FetchingProviderData", "NoProvidersConfigured", "EnableProvidersHint", "OpenSettingsButton", - "TooltipRefresh", - "TrayCardErrorBadge", - "SummaryProvidersLabel", - "SummaryRefreshing", - "SummaryFailed", - "SummaryWithErrors", - "DetailBackButton", "DetailWindowPrimary", "DetailWindowSecondary", "DetailWindowModelSpecific", "DetailWindowTertiary", - "DetailWindowMinutesSuffix", "DetailWindowExhausted", "DetailPaceTitle", "DetailPaceOnTrack", @@ -812,7 +618,6 @@ export const ALL_LOCALE_KEYS = [ "FloatBarRemainingSuffix", "FloatBarShowCost", "FloatBarShowCostDescription", - "BannerCheckingForUpdates", "BannerUpdateAvailablePrefix", "BannerDownloadButton", "BannerViewRelease", @@ -833,11 +638,6 @@ export const ALL_LOCALE_KEYS = [ "ProviderStatusError", "ProviderStatusLoading", "ProviderStatusDisabled", - "ProviderDetailPlaceholder", - "ProviderIssueNeedsSignIn", - "ProviderIssueFetchNeedsAttention", - "ProviderIssueCopy", - "ProviderIssueUnsupportedSourceModePrefix", "ProviderIssueAuthRequired", "ProviderIssueSessionExpired", "ProviderIssueLocalRuntimeOffline", @@ -876,7 +676,6 @@ export const ALL_LOCALE_KEYS = [ "CredsOpenFolderAction", "CredsRefreshDetectionAction", "CredsSavePathAction", - "CredsBrowseAction", "CredsGeminiCliLabel", "CredsGeminiCliHelperPrefix", "CredsGeminiCliSetupAction", @@ -891,8 +690,6 @@ export const ALL_LOCALE_KEYS = [ "CredsJetBrainsHelperMissing", "CredsJetBrainsCustomPathLabel", "CredsJetBrainsCustomPathPlaceholder", - "CredsJetBrainsSelectLabel", - "CredsJetBrainsAutoDetectOption", "CredsKiroLabel", "CredsKiroHelperAvailablePrefix", "CredsKiroHelperMissing", @@ -917,19 +714,11 @@ export const ALL_LOCALE_KEYS = [ "TokenAccountGithubLoginButton", "TokenAccountEmpty", "TokenAccountLabelPlaceholder", - "TokenAccountProviderLabel", - "TokenAccountProviderPlaceholder", "TokenAccountAddedPrefix", "TokenAccountUsedPrefix", - "TokenAccountTabHint", - "TokenAccountNoSupported", "TokenAccountInlineSummary", // Phase 9 — Tray / pop-out pace badges + countdowns - "TrayPaceBadgeSlow", - "TrayPaceBadgeSteady", - "TrayPaceBadgeRacing", - "TrayPaceBadgeBurning", "TrayResetsInLabel", "TrayResetsDueNow", @@ -976,12 +765,6 @@ export const ALL_LOCALE_KEYS = [ "DiagnosticsCopied", "DiagnosticsCopyFailed", - // Tauri desktop shell — Cookies tab hints / placeholder - "SavedCookiesHint", - "ImportFromBrowserHint", - "NoBrowsersDetectedHint", - "CookieHeaderValuePlaceholder", - // Tauri desktop shell — API key section fields "ApiKeyTitle", "ApiKeyNotSet", @@ -1053,7 +836,6 @@ export const ALL_LOCALE_KEYS = [ // Mistral PAYG monthly spend (#2821, #2947) "MistralMonthlySpend", - "MistralMonthlySpendHelper", // Mistral Monthly Plan menu bar metric (upstream 0.70.0 #4072) "MetricMonthlyPlan", @@ -1076,7 +858,6 @@ export const ALL_LOCALE_KEYS = [ "ProviderAutoResumeAfterQuotaResetHelper", // Recorded remaining-quota burndown (upstream 0.70.0 #4085) - "BurndownChartTitle", "BurndownChartAriaLabel", // History window for local cost surfaces (upstream 0.67.0 reporting periods) diff --git a/rust/src/locale.rs b/rust/src/locale.rs index eeafc73f0f..fcf488fc96 100644 --- a/rust/src/locale.rs +++ b/rust/src/locale.rs @@ -194,12 +194,9 @@ locale_keys! { TabNotifications, TabMenuBar, TabMenu, - TabApiKeys, - TabCookies, TabUsageSpend, TabAdvanced, TabAbout, - TabShortcuts, // General settings (Preferences) InterfaceLanguage, @@ -214,8 +211,6 @@ locale_keys! { // Notification settings (Preferences) ShowNotificationsHelper, SoundEnabledHelper, - HighUsageThresholdHelper, - CriticalUsageThresholdHelper, // Notification settings (Preferences) ShowNotifications, @@ -242,9 +237,7 @@ locale_keys! { NotificationSoundEventSessionDepletedHelper, NotificationSoundEventSessionRestored, NotificationSoundEventSessionRestoredHelper, - HighUsageThreshold, HighUsageAlert, - CriticalUsageThreshold, CriticalUsageAlert, PredictivePaceWarnings, PredictivePaceWarningsHelper, @@ -271,43 +264,27 @@ locale_keys! { CredentialExpiryBody, // Display settings (Preferences) - UsageDisplay, - ShowUsageAsUsed, - ShowUsageAsUsedHelper, ResetTimeRelative, ResetTimeRelativeHelper, ShowResetWhenExhausted, ShowResetWhenExhaustedHelper, ShowPace, ShowPaceHelper, - TrayIcon, - MergeTrayIcons, - MergeTrayIconsHelper, - PerProviderTrayIcons, - PerProviderTrayIconsHelper, // Provider settings (Preferences) ProviderEnabled, ProviderDisabled, - ProviderInfo, ProviderUsage, - AtlasCloudAvailableBalance, AtlasCloudBalance, PanelUsageDetails, AuthType, DataSource, - ProviderNotDetected, - ProviderLastFetchFailed, ProviderUsageNotFetchedYet, - ProviderNotFetchedYetTitle, - ProviderDisabledNoRecentData, ProviderSourceAutoShort, ProviderSourceWebShort, ProviderSourceCliShort, ProviderSourceOauthShort, ProviderSourceApiShort, - ProviderSourceGithubApiShort, - ProviderSourceLocalShort, ProviderSourceKiroEnvShort, WayfinderGatewayTitle, WayfinderGatewayLabel, @@ -325,81 +302,34 @@ locale_keys! { WayfinderOffline, WayfinderDryRun, WayfinderMissingKeys, - TrackingItem, - MainWindowLiveUsageData, - StartTrackingUsage, - ClickTrayIconForMetrics, // Browser cookie import (Preferences) - BrowserCookieImport, - ImportFromBrowser, - NoCookiesFoundInBrowser, - SelectBrowser, - ImportCookies, - ImportSuccess, - ImportFailed, - SaveFailed, - CookiesAutoImport, QuickActions, OpenProviderDashboard, - OllamaNoDashboard, // API Keys tab (Preferences) - ApiKeysTitle, - ApiKeysDescription, AddKey, KeySet, - KeyRequired, Remove, - GetKey, // Cookies tab (Preferences) - SavedCookies, - AddManualCookie, CookieHeader, - PasteHere, - DeleteCookie, - CookieSaved, - CookieDeleted, // Advanced tab (Preferences) - RefreshSettings, Animations, MenuBar, - Fun, - GlobalShortcut, Privacy, Updates, UpdateChannel, - UpdateChannelStable, - UpdateChannelBeta, Never, LastUpdated, NeverUpdated, - MinutesAgo, - HoursAgo, - DaysAgo, - BuiltWithRust, - OriginalMacOSVersion, - Links, - BuildInfo, - EnabledProviders, Appearance, - ThemeSelection, - LightMode, - DarkMode, // About (Preferences) - AboutTitle, Version, - // Main popup - Header actions - ActionRefreshAll, - ActionSettings, - ActionClose, - // Main popup - Provider section - ProviderAccount, ProviderSession, ProviderWeekly, ProviderMonthly, @@ -411,46 +341,21 @@ locale_keys! { DeepSeekPricingNext, DeepSeekPricingEffective, DeepSeekPricingAdvice, - ProviderModel, - ProviderPlan, - ProviderNextReset, - ProviderNoRecentUsage, - ProviderNotSignedIn, - SummaryTab, // Main popup - Loading/Empty/Error states (non-happy-path) StateLoadingProviders, - StateNoProviderData, StateNoProviderSelected, - StateSummaryRefreshPending, StateError, - StateRetry, - StateDownload, - StateRestartAndUpdate, - - // Main popup - Credits - CreditsTitle, // Main popup - Update banner (non-happy-path) - UpdateRestartAndUpdate, - UpdateRetry, - UpdateDownload, UpdateDownloading, UpdateReady, - UpdateFailed, - - // Main popup - Settings button - ButtonOpenProviderSettings, // Main popup - Bottom menu (Actions) MenuSettings, MenuAbout, MenuQuit, - // Main popup - Status strings - StatusJustUpdated, - StatusUnableToGetUsage, - // Main popup - Provider detail actions ActionRefresh, ActionSwitchAccount, @@ -459,30 +364,13 @@ locale_keys! { ActionCopyError, ActionBuyCredits, - // Main popup - Pace status - PaceOnTrack, - PaceBehind, - // Main popup - Reset prefix MetricResetsIn, - // Main popup - Section titles - SectionUsageBreakdown, - SectionCost, - // Main popup - Usage/reset labels ResetInProgress, - TomorrowAt, - UsedPercent, - RemainingPercent, - RemainingAmount, - Tokens1K, - TodayCost, - Last30DaysCost, - StatusLabel, // Tray - Single icon mode - TrayOpenCodexBar, TrayPopOutDashboard, TrayShowFloatBar, TrayStayAwakeActive, @@ -490,9 +378,7 @@ locale_keys! { TrayProviders, TraySettings, TrayCheckForUpdates, - TrayQuit, TrayLoading, - TrayNoProviders, TraySessionPercent, TrayWeeklyPercent, TrayStatusError, @@ -501,26 +387,16 @@ locale_keys! { TrayStatusPartial, TrayWeeklyExhausted, TrayCreditsRemaining, - TrayStatusRowLoading, TrayStatusRowError, - TrayCreditsRow, - - // Tray - Per-provider mode - TrayProviderPopOut, - TrayProviderRefresh, - TrayProviderSettings, - TrayProviderQuit, // Provider settings - Live renderer specific State, Source, - Updated, UpdatedJustNow, UpdatedMinutesAgo, UpdatedHoursAgo, UpdatedDaysAgo, Status, - AllSystemsOperational, Plan, Account, @@ -528,7 +404,6 @@ locale_keys! { ProviderSessionLabel, ProviderWeeklyLabel, ClaudeScopedWeeklyLabel, - ProviderCodeReviewLabel, ResetsInShort, ResetsInDaysHours, ResetsInHoursMinutes, @@ -541,20 +416,11 @@ locale_keys! { // Provider detail - Tray Display TrayDisplayTitle, - ShowInTray, // Provider detail - Credits CreditsLabel, - CreditsLeft, - - // Provider detail - Cost - CostTitle, - TodayCostFull, - Last30DaysCostFull, // Provider detail - Settings section - ProviderSettingsTitle, - ProviderAccountsTitle, ProviderOptionsTitle, MenuBarMetric, MenuBarMetricHelper, @@ -563,16 +429,8 @@ locale_keys! { ProviderZedUsageSourceAutoHelp, ProviderZedUsageSourceApiHelp, ProviderZedUsageSourceWebHelp, - ProviderNoCodexAccountsDetected, ProviderCodexAutoImportHelp, ProviderCodexHistoryHelp, - ProviderOpenAiCookies, - ProviderHistoricalTracking, - ProviderOpenAiWebExtras, - ProviderOpenAiWebExtrasHelp, - ProviderCodexCreditsUnavailable, - ProviderCodexLastFetchFailedTitle, - ProviderCodexNotRunningHelp, ProviderCookieSource, CookieSourceManual, ProviderRaycastAutoImportHelp, @@ -633,16 +491,11 @@ locale_keys! { ProviderManualCookieMissing, ProviderUseAutomaticCookies, ProviderRegion, - ProviderClaudeCookies, ProviderClaudeCookiesHelp, ProviderClaudeAvoidKeychainPrompts, ProviderClaudeAvoidKeychainPromptsHelp, - ProviderClaudeDailyRoutinesUsage, - ProviderClaudeDailyRoutinesUsageHelp, ProviderClaudeAllowReadingClaudeCodeCredentials, ProviderClaudeAllowReadingClaudeCodeCredentialsHelp, - ProviderCodexSparkUsage, - ProviderCodexSparkUsageHelp, CopilotSeatCreditTitle, CopilotSeatCreditHelper, CopilotSeatCreditInvalid, @@ -710,9 +563,6 @@ locale_keys! { CodexSwitchRestartPrompt, CodexAccountsRestartDesktop, ProviderCursorCookieSourceHelp, - ProviderCursorCreditsHelp, - AutoFallbackHelp, - ProviderSourceOauthWeb, Automatic, Average, ExtraUsage, @@ -741,7 +591,6 @@ locale_keys! { NetworkProxyUserLabel, NetworkProxyPasswordLabel, NetworkProxyPasswordHelper, - NetworkProxyInvalidUrl, UsageSpendTitle, UsageSpendCaption, UsageSpendModels, @@ -767,12 +616,10 @@ locale_keys! { UsageSpendKnownSubtotal, IncompleteRequestsLabel, IncompleteRequestsDetail, - UsageSpendAllTimeHistory, UsageSpendCustomPricing, UsageSpendDailyLedger, UsageSpendDailyLedgerHelper, UsageSpendNoDailyData, - OverviewSpendTitle, OverviewSpendProviderCoverage, OverviewSpendEstimate, UsageSpendProjects, @@ -812,91 +659,41 @@ locale_keys! { AgentSessionsSshHostsHelper, AgentSessionsLoading, AgentSessionsEmpty, - UpdatesTitle, UpdateChannelChoice, UpdateChannelChoiceHelper, AutoDownloadUpdates, AutoDownloadUpdatesHelper, - InstallUpdatesOnQuit, - InstallUpdatesOnQuitHelper, // Keyboard shortcuts - KeyboardShortcutsTitle, - GlobalShortcutLabel, - GlobalShortcutHelper, - ShortcutFormatHint, Saved, InvalidFormat, - ShortcutHintPlaceholder, - - // Display/Preferences helpers - SelectProvider, // Refresh interval labels - RefreshInterval30Sec, RefreshInterval1Min, RefreshInterval5Min, - RefreshInterval10Min, // Cookies tab - BrowserCookiesTitle, - CookieImport, Provider, - SelectPlaceholder, - AutoRefreshInterval, // About tab - render_about_tab - AboutDescription, - AboutDescriptionLine2, - ViewOnGitHub, SubmitIssue, - MaintainedBy, - CommitLabel, - BuildDateLabel, // Shared form controls Save, Cancel, Label, Token, - AddAccount, - AccountAdded, - AccountRemoved, - AccountSwitched, - AccountLabelHint, - EnterApiKeyFor, PasteApiKeyHere, - ApiKeySaved, - ApiKeyRemoved, - EnvironmentVariable, - CookieSavedForProvider, - CookieRemovedForProvider, - - // Usage helper functions - ShowUsedPercent, - ShowRemainingPercent, // Main popup - Update banner messages (non-happy-path) UpdateAvailableMessage, - UpdateReadyMessage, - UpdateFailedMessage, - UpdateDownloadingMessage, // Tauri desktop shell — Settings section headings - TabTokenAccounts, SectionRefresh, SectionNotifications, SectionUsageThresholds, SectionKeyboard, - SectionUsageRendering, - SectionTime, SectionLanguage, - SectionCredentialsSecurity, - SectionDebug, - SectionApiKeys, - SectionSavedCookies, - SectionImportFromBrowser, - SectionAddCookieManually, SectionTokenAccounts, SectionSavedAccounts, SectionAddAccount, @@ -976,8 +773,6 @@ locale_keys! { OverviewLayoutCompact, ShowAllTokenAccountsLabel, ShowAllTokenAccountsHelper, - EnableAnimationsLabel, - EnableAnimationsHelper, // Tauri desktop shell — Advanced tab fields UpdateChannelStableOption, UpdateChannelBetaOption, @@ -999,27 +794,18 @@ locale_keys! { // Tauri desktop shell — settings status / common SettingsStatusSaving, - ApiKeysTabHint, // Tauri desktop shell — tray / popout FetchingProviderData, NoProvidersConfigured, EnableProvidersHint, OpenSettingsButton, - TooltipRefresh, - TrayCardErrorBadge, - SummaryProvidersLabel, - SummaryRefreshing, - SummaryFailed, - SummaryWithErrors, // Tauri desktop shell — provider detail - DetailBackButton, DetailWindowPrimary, DetailWindowSecondary, DetailWindowModelSpecific, DetailWindowTertiary, - DetailWindowMinutesSuffix, DetailWindowExhausted, DetailPaceTitle, DetailPaceOnTrack, @@ -1092,7 +878,6 @@ locale_keys! { FloatBarShowCostDescription, // Tauri desktop shell — update banner - BannerCheckingForUpdates, BannerUpdateAvailablePrefix, BannerDownloadButton, BannerViewRelease, @@ -1115,11 +900,6 @@ locale_keys! { ProviderStatusError, ProviderStatusLoading, ProviderStatusDisabled, - ProviderDetailPlaceholder, - ProviderIssueNeedsSignIn, - ProviderIssueFetchNeedsAttention, - ProviderIssueCopy, - ProviderIssueUnsupportedSourceModePrefix, ProviderIssueAuthRequired, ProviderIssueSessionExpired, ProviderIssueLocalRuntimeOffline, @@ -1159,7 +939,6 @@ locale_keys! { CredsOpenFolderAction, CredsRefreshDetectionAction, CredsSavePathAction, - CredsBrowseAction, CredsGeminiCliLabel, CredsGeminiCliHelperPrefix, CredsGeminiCliSetupAction, @@ -1174,8 +953,6 @@ locale_keys! { CredsJetBrainsHelperMissing, CredsJetBrainsCustomPathLabel, CredsJetBrainsCustomPathPlaceholder, - CredsJetBrainsSelectLabel, - CredsJetBrainsAutoDetectOption, CredsKiroLabel, CredsKiroHelperAvailablePrefix, CredsKiroHelperMissing, @@ -1201,19 +978,11 @@ locale_keys! { TokenAccountGithubLoginButton, TokenAccountEmpty, TokenAccountLabelPlaceholder, - TokenAccountProviderLabel, - TokenAccountProviderPlaceholder, TokenAccountAddedPrefix, TokenAccountUsedPrefix, - TokenAccountTabHint, - TokenAccountNoSupported, TokenAccountInlineSummary, // Phase 9 - Tray / pop-out pace badges + countdowns - TrayPaceBadgeSlow, - TrayPaceBadgeSteady, - TrayPaceBadgeRacing, - TrayPaceBadgeBurning, TrayResetsInLabel, TrayResetsDueNow, @@ -1260,12 +1029,6 @@ locale_keys! { DiagnosticsCopied, DiagnosticsCopyFailed, - // Tauri desktop shell — Cookies tab hints / placeholder - SavedCookiesHint, - ImportFromBrowserHint, - NoBrowsersDetectedHint, - CookieHeaderValuePlaceholder, - // Tauri desktop shell — API key section fields ApiKeyTitle, ApiKeyNotSet, @@ -1337,7 +1100,6 @@ locale_keys! { // Mistral PAYG monthly spend (#2821, #2947) MistralMonthlySpend, - MistralMonthlySpendHelper, // Mistral Monthly Plan menu bar metric (upstream 0.70.0 #4072) MetricMonthlyPlan, @@ -1360,7 +1122,6 @@ locale_keys! { ProviderAutoResumeAfterQuotaResetHelper, // Recorded remaining-quota burndown (upstream 0.70.0 #4085) - BurndownChartTitle, BurndownChartAriaLabel, // History window for local cost surfaces (upstream 0.67.0 reporting periods) diff --git a/rust/src/locale/en-US.ftl b/rust/src/locale/en-US.ftl index 4d60d79956..42b8fc2a3f 100644 --- a/rust/src/locale/en-US.ftl +++ b/rust/src/locale/en-US.ftl @@ -3,12 +3,9 @@ TabProviders = Providers TabNotifications = Notifications TabMenuBar = Menu Bar TabMenu = Menu -TabApiKeys = API Keys -TabCookies = Cookies TabUsageSpend = Usage & Spend TabAdvanced = Advanced TabAbout = About -TabShortcuts = Shortcuts InterfaceLanguage = Interface Language PreferredCurrencyLabel = Preferred currency PreferredCurrencyHelper = Convert supported provider costs for display. Auto keeps each provider's source currency. @@ -19,8 +16,6 @@ StartAtLoginHelper = Login automatically after system startup StartMinimizedHelper = Start minimized to system tray ShowNotificationsHelper = Alert when usage thresholds are reached SoundEnabledHelper = Play sound when thresholds are reached -HighUsageThresholdHelper = Show warning at this usage level -CriticalUsageThresholdHelper = Show critical alert at this level ShowNotifications = Show Notifications SoundEnabled = Sound Alerts NotificationSoundTheme = Default sound set @@ -45,9 +40,7 @@ NotificationSoundEventSessionDepleted = Session depleted NotificationSoundEventSessionDepletedHelper = A session quota reaches 100%. NotificationSoundEventSessionRestored = Session restored NotificationSoundEventSessionRestoredHelper = A depleted session becomes available again. -HighUsageThreshold = High Usage Threshold HighUsageAlert = High Usage Alert -CriticalUsageThreshold = Critical Usage Threshold CriticalUsageAlert = Critical Alert PredictivePaceWarnings = Predictive Pace Warnings PredictivePaceWarningsHelper = Alert when Codex or Claude usage is likely to run out before reset @@ -72,41 +65,25 @@ CredentialExpiryNotifications = Credential Expiry Alerts CredentialExpiryNotificationsHelper = Alert once when a provider account needs to sign in again CredentialExpiryTitle = { "{}" } needs sign-in CredentialExpiryBody = Open CodexBar to review the account error and sign in again. -UsageDisplay = Usage Display -ShowUsageAsUsed = Show Usage as Used -ShowUsageAsUsedHelper = Display as used percentage instead of remaining ResetTimeRelative = Relative Reset Time ResetTimeRelativeHelper = Show "2h 30m" instead of "3:00 PM" ShowResetWhenExhausted = Show reset time when exhausted ShowResetWhenExhaustedHelper = Replace an exhausted percentage with its live reset countdown ShowPace = Show pace ShowPaceHelper = Show usage pace, on-pace budgets, and forecast text in provider cards -TrayIcon = Tray Icon -MergeTrayIcons = Merge Tray Icons -MergeTrayIconsHelper = Show all providers in a single tray icon -PerProviderTrayIcons = Per-Provider Icons -PerProviderTrayIconsHelper = Show separate tray icon for each enabled provider ProviderEnabled = Enabled ProviderDisabled = Disabled -ProviderInfo = Info ProviderUsage = Usage -AtlasCloudAvailableBalance = Available balance AtlasCloudBalance = Atlas Cloud balance PanelUsageDetails = Usage details AuthType = Authentication DataSource = Data Source -ProviderNotDetected = not detected -ProviderLastFetchFailed = last fetch failed ProviderUsageNotFetchedYet = usage not fetched yet -ProviderNotFetchedYetTitle = Not fetched yet -ProviderDisabledNoRecentData = Disabled — no recent data ProviderSourceAutoShort = auto ProviderSourceWebShort = web ProviderSourceCliShort = cli ProviderSourceOauthShort = oauth ProviderSourceApiShort = api -ProviderSourceGithubApiShort = github api -ProviderSourceLocalShort = local ProviderSourceKiroEnvShort = kiro env WayfinderGatewayTitle = Wayfinder Gateway WayfinderGatewayLabel = Gateway URL @@ -124,118 +101,41 @@ WayfinderSaved = Saved WayfinderOffline = Gateway offline WayfinderDryRun = Dry run WayfinderMissingKeys = Missing keys -TrackingItem = Tracked Item -MainWindowLiveUsageData = Live usage data in main window -StartTrackingUsage = Enable to start tracking usage -ClickTrayIconForMetrics = Click tray icon for live metrics -BrowserCookieImport = Browser Cookie Import -ImportFromBrowser = Import { "{}" } cookies from browser -NoCookiesFoundInBrowser = No cookies found in { "{}" }. Please log in first. -SelectBrowser = Select browser... -ImportCookies = Import Cookies -ImportSuccess = Imported cookies for { "{}" } -ImportFailed = Import failed: { "{}" } -SaveFailed = Save failed: { "{}" } -CookiesAutoImport = Cookies are automatically imported from Chrome, Edge, Brave and Firefox QuickActions = Quick Actions OpenProviderDashboard = Open { "{}" } Dashboard -OllamaNoDashboard = Ollama runs locally, no dashboard -ApiKeysTitle = API Keys -ApiKeysDescription = Configure access tokens for providers that require authentication. AddKey = + Add Key KeySet = Set -KeyRequired = Key Required Remove = Remove -GetKey = Get key → -SavedCookies = Saved Cookies -AddManualCookie = Add Manual Cookie CookieHeader = Cookie Header -PasteHere = Paste here... -DeleteCookie = Delete -CookieSaved = Saved { "{}" } cookies -CookieDeleted = Deleted cookies for { "{}" } -RefreshSettings = Refresh Animations = Animations MenuBar = Menu Bar -Fun = Fun -GlobalShortcut = Global Shortcut Privacy = Privacy Updates = Updates UpdateChannel = Update Channel -UpdateChannelStable = Stable -UpdateChannelBeta = Beta Never = Never LastUpdated = Updated NeverUpdated = Never updated -MinutesAgo = { "{}" } minutes ago -HoursAgo = { "{}" } hours ago -DaysAgo = { "{}" } days ago -BuiltWithRust = Built with Rust + egui -OriginalMacOSVersion = Original macOS version -Links = Links -BuildInfo = Build Info -EnabledProviders = Enabled Providers Appearance = Appearance -ThemeSelection = Theme -LightMode = Light -DarkMode = Dark -AboutTitle = About CodexBar Version = Version -ActionRefreshAll = Refresh All -ActionSettings = Settings -ActionClose = ✕ -ProviderAccount = Account ProviderSession = Session ProviderWeekly = Weekly ProviderMonthly = 30-Day -ProviderModel = Model -ProviderPlan = Plan -ProviderNextReset = Next Reset -ProviderNoRecentUsage = No recent usage -ProviderNotSignedIn = Not signed in -SummaryTab = Summary StateLoadingProviders = Loading providers... -StateNoProviderData = No provider data. StateNoProviderSelected = No provider selected. -StateSummaryRefreshPending = Updating after all provider refreshes finish StateError = Error -StateRetry = Retry -StateDownload = Download -StateRestartAndUpdate = Restart & Update -CreditsTitle = Credits -UpdateRestartAndUpdate = Restart & Update -UpdateRetry = Retry -UpdateDownload = Download UpdateDownloading = Downloading UpdateReady = Ready to install -UpdateFailed = Update failed -ButtonOpenProviderSettings = Open provider settings MenuSettings = Settings... MenuAbout = About CodexBar MenuQuit = Quit -StatusJustUpdated = Just updated -StatusUnableToGetUsage = Unable to get usage ActionRefresh = Refresh ActionSwitchAccount = Switch account... ActionUsageDashboard = Usage dashboard ActionStatusPage = Status page ActionCopyError = Copy error ActionBuyCredits = Buy credits... -PaceOnTrack = On track -PaceBehind = Behind MetricResetsIn = Resets in -SectionUsageBreakdown = Usage Breakdown -SectionCost = Cost ResetInProgress = Resetting... -TomorrowAt = Tomorrow at { "{}" } -UsedPercent = { "{:.0}" }% used -RemainingPercent = { "{:.0}" }% remaining -RemainingAmount = { "{:.2}" } remaining -Tokens1K = 1K tokens -TodayCost = Today: ${ "{:.2}" } -Last30DaysCost = Last 30 days: ${ "{:.2}" } -StatusLabel = Status: { "{}" } -TrayOpenCodexBar = Pop Out Dashboard TrayPopOutDashboard = Pop Out Dashboard TrayShowFloatBar = Show Float Bar TrayStayAwakeActive = Stay Awake: local agent session is live @@ -243,9 +143,7 @@ TrayRefreshAll = Refresh All TrayProviders = Providers TraySettings = Settings... TrayCheckForUpdates = Check for Updates -TrayQuit = Quit TrayLoading = CodexBar - Loading... -TrayNoProviders = CodexBar - No providers available TraySessionPercent = Session { "{}" }% TrayWeeklyPercent = Weekly { "{}" }% TrayStatusError = { " (Error)" } @@ -254,28 +152,19 @@ TrayStatusIncident = { " (Incident)" } TrayStatusPartial = { " (Partial outage)" } TrayWeeklyExhausted = Weekly quota exhausted TrayCreditsRemaining = Credits remaining { "{}" }% -TrayStatusRowLoading = Loading... TrayStatusRowError = Error -TrayCreditsRow = Credits { "{}" }% -TrayProviderPopOut = Pop Out Dashboard -TrayProviderRefresh = Refresh -TrayProviderSettings = Settings... -TrayProviderQuit = Quit State = State Source = Source -Updated = Updated UpdatedJustNow = Updated just now UpdatedMinutesAgo = { "{}" } minutes ago UpdatedHoursAgo = { "{}" } hours ago UpdatedDaysAgo = { "{}" } days ago Status = Status -AllSystemsOperational = All systems operational Plan = Plan Account = Account ProviderSessionLabel = Session ProviderWeeklyLabel = Weekly ClaudeScopedWeeklyLabel = { "{}" } weekly -ProviderCodeReviewLabel = Code review ResetsInShort = Resets in ResetsInDaysHours = Resets in { "{}" }d { "{}" }h ResetsInHoursMinutes = Resets in { "{}" }h { "{}" }m @@ -288,14 +177,7 @@ InventoryAvailableCount = { "{}" } available FloatBarShowCost = Show Local Cost FloatBarShowCostDescription = Shows estimated local usage cost in the floating bar. TrayDisplayTitle = Tray Display -ShowInTray = Show in tray CreditsLabel = Credits -CreditsLeft = { "{:.1}" } left -CostTitle = Cost -TodayCostFull = Today: ${ "{:.2}" } • { "{}" } tokens -Last30DaysCostFull = Last 30 days: ${ "{:.2}" } • { "{}" } tokens -ProviderSettingsTitle = Settings -ProviderAccountsTitle = Accounts ProviderOptionsTitle = Options MenuBarMetric = Menu and floating bar metric MenuBarMetricHelper = Choose which window drives the menu bar and floating bar percentages. @@ -304,31 +186,18 @@ ProviderZedBrowserSession = Browser session ProviderZedUsageSourceAutoHelp = Uses the Zed editor credential; browser billing is used only when Browser session is selected. ProviderZedUsageSourceApiHelp = Uses the Zed editor credential only. ProviderZedUsageSourceWebHelp = Reads token spend only from the selected zed.dev browser session or saved Cookie header; it never falls back to the editor credential. -ProviderNoCodexAccountsDetected = No Codex accounts detected yet. ProviderCodexAutoImportHelp = Automatic imports browser cookies for dashboard extras. ProviderCodexHistoryHelp = Stores local Codex usage history (8 weeks) to personalize Pace predictions. -ProviderOpenAiCookies = OpenAI cookies -ProviderHistoricalTracking = Historical tracking -ProviderOpenAiWebExtras = OpenAI web extras -ProviderOpenAiWebExtrasHelp = Show usage breakdown, credits history, and code review via chatgpt.com. -ProviderCodexCreditsUnavailable = Credits unavailable; keep Codex running to refresh. -ProviderCodexLastFetchFailedTitle = Last Codex fetch failed: -ProviderCodexNotRunningHelp = Codex not running. Try running a Codex command first. ProviderCookieSource = Cookie source CookieSourceManual = Manual ProviderManualCookieMissing = No cookie header pasted. ProviderUseAutomaticCookies = Use automatic cookies ProviderRegion = Region -ProviderClaudeCookies = Claude cookies ProviderClaudeCookiesHelp = Browser cookies/sessionKey are preferred because they match Claude's settings usage page. ProviderClaudeAvoidKeychainPrompts = Avoid Keychain prompts ProviderClaudeAvoidKeychainPromptsHelp = Use /usr/bin/security to read Claude credentials and avoid CodexBar keychain prompts. -ProviderClaudeDailyRoutinesUsage = Show Daily Routines usage -ProviderClaudeDailyRoutinesUsageHelp = Show the Daily Routines quota row for Claude web and OAuth usage. ProviderClaudeAllowReadingClaudeCodeCredentials = Allow reading Claude Code's credentials ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = Lets CodexBar read (and refresh) Claude Code's own OAuth credentials for higher-fidelity usage. Off by default; without it, Auto falls back to reduced-fidelity CLI usage. -ProviderCodexSparkUsage = Show Codex Spark usage -ProviderCodexSparkUsageHelp = Show Codex Spark quota rows without hiding credits or other extra usage. CopilotSeatCreditTitle = Copilot seat AI-credit allowance CopilotSeatCreditHelper = Optional denominator for the Copilot credits-used counter. Automatic mode uses it only when no metered quota is available. CopilotSeatCreditInvalid = Enter a finite allowance greater than zero, or leave it empty. @@ -349,9 +218,6 @@ CodexSwitchSuccess = Active account switched. CodexSwitchRestartPrompt = Restart Codex Desktop to load the restored session? CodexAccountsRestartDesktop = Restart Codex Desktop ProviderCursorCookieSourceHelp = Automatic imports browser cookies or stored sessions. -ProviderCursorCreditsHelp = On-demand usage beyond included plan limits. -AutoFallbackHelp = Auto falls back to the next source if the preferred one fails. -ProviderSourceOauthWeb = OAuth + Web Automatic = Automatic Average = Average ExtraUsage = Extra usage @@ -392,12 +258,10 @@ UsageSpendTokens = tokens UsageSpendKnownSubtotal = ≥{ "{}" } known IncompleteRequestsLabel = Incomplete IncompleteRequestsDetail = { "{}" } requests lacked final usage and were excluded from tokens and cost -UsageSpendAllTimeHistory = All-time is backed by the latest UsageSpendCustomPricing = custom pricing UsageSpendDailyLedger = Daily ledger UsageSpendDailyLedgerHelper = Recorded daily cost and token totals. Unknown means the source did not establish that value. UsageSpendNoDailyData = No daily history yet. -OverviewSpendTitle = Usage & Spend · 30d OverviewSpendProviderCoverage = { "{}" } of { "{}" } providers have spend OverviewSpendEstimate = local/provider estimates UsageSpendProjects = Projects @@ -430,73 +294,27 @@ AgentSessionsSshHostsLabel = SSH hosts AgentSessionsSshHostsHelper = Comma-separated SSH targets. Connections use non-interactive mode and short timeouts. AgentSessionsLoading = Looking for agent sessions... AgentSessionsEmpty = No active agent sessions. -UpdatesTitle = Updates UpdateChannelChoice = Update Channel UpdateChannelChoiceHelper = Choose between stable and beta preview versions AutoDownloadUpdates = Check for updates automatically AutoDownloadUpdatesHelper = Download installer updates in the background when a new release is found -InstallUpdatesOnQuit = Install updates on quit -InstallUpdatesOnQuitHelper = Automatically launch a ready installer when you quit CodexBar -KeyboardShortcutsTitle = Keyboard Shortcuts -GlobalShortcutLabel = Global Shortcut -GlobalShortcutHelper = Press this shortcut to open CodexBar from anywhere -ShortcutFormatHint = Format: Ctrl+Shift+Key, Alt+Ctrl+Key, etc. Restart required to apply changes. Saved = Saved (restart to apply) InvalidFormat = Invalid shortcut format -ShortcutHintPlaceholder = e.g., Ctrl+Shift+U -SelectProvider = Select a provider -RefreshInterval30Sec = 30 sec RefreshInterval1Min = 1 min RefreshInterval5Min = 5 min -RefreshInterval10Min = 10 min -BrowserCookiesTitle = Browser Cookies -CookieImport = Cookie Import Provider = Provider -SelectPlaceholder = Select... -AutoRefreshInterval = Auto-refresh interval -AboutDescription = A Windows port of the original macOS version. -AboutDescriptionLine2 = Track AI provider usage in your system tray. -ViewOnGitHub = → View on GitHub SubmitIssue = → Submit an Issue -MaintainedBy = Maintained by CodexBar contributors -CommitLabel = Commit -BuildDateLabel = Built Save = Save Cancel = Cancel Label = Label Token = Token -AddAccount = Add Account -AccountAdded = Account added -AccountRemoved = Account removed -AccountSwitched = Account switched -AccountLabelHint = e.g., Work Account, Personal... -EnterApiKeyFor = Enter API key for { "{}" } PasteApiKeyHere = Paste your API key here... -ApiKeySaved = Saved API key for { "{}" } -ApiKeyRemoved = Removed API key for { "{}" } -EnvironmentVariable = Environment variable -CookieSavedForProvider = Saved cookies for { "{}" } -CookieRemovedForProvider = Removed cookies for { "{}" } -ShowUsedPercent = { "{:.0}" }% used -ShowRemainingPercent = { "{:.0}" }% remaining UpdateAvailableMessage = Update available: { "{}" } -UpdateReadyMessage = { "{}" } ready to install -UpdateFailedMessage = Update failed: { "{}" } -UpdateDownloadingMessage = Downloading { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = Tokens SectionRefresh = Automation SectionNotifications = Notifications SectionUsageThresholds = Usage Thresholds SectionKeyboard = Keyboard -SectionUsageRendering = Usage rendering -SectionTime = Time SectionLanguage = Language -SectionCredentialsSecurity = Credentials & Security -SectionDebug = Debug -SectionApiKeys = API Keys -SectionSavedCookies = Saved Cookies -SectionImportFromBrowser = Import from Browser -SectionAddCookieManually = Add Cookie Manually SectionTokenAccounts = Token Accounts SectionSavedAccounts = Saved Accounts SectionAddAccount = Add Account @@ -572,8 +390,6 @@ OverviewLayoutDetailed = Detailed OverviewLayoutCompact = Compact ShowAllTokenAccountsLabel = Show all token accounts ShowAllTokenAccountsHelper = List all token accounts in provider menus instead of collapsing them. -EnableAnimationsLabel = Enable animations -EnableAnimationsHelper = Smooth transitions and animated progress bars. UpdateChannelStableOption = Stable UpdateChannelBetaOption = Beta CodexLocalLogsTitle = Codex local logs @@ -591,23 +407,14 @@ ThemeAutoOption = Auto (system) ThemeLightOption = Light ThemeDarkOption = Dark SettingsStatusSaving = Saving… -ApiKeysTabHint = Configure API keys for providers that use token-based authentication. Keys are stored locally and never transmitted. FetchingProviderData = Fetching provider data… NoProvidersConfigured = No providers configured. EnableProvidersHint = Enable providers in Settings to see usage data. OpenSettingsButton = Open Settings -TooltipRefresh = Refresh -TrayCardErrorBadge = Error -SummaryProvidersLabel = providers -SummaryRefreshing = refreshing… -SummaryFailed = failed -SummaryWithErrors = with errors -DetailBackButton = Back DetailWindowPrimary = Primary DetailWindowSecondary = Secondary DetailWindowModelSpecific = Model-specific DetailWindowTertiary = Tertiary -DetailWindowMinutesSuffix = m window DetailWindowExhausted = Exhausted DetailPaceTitle = Pace DetailPaceOnTrack = On track @@ -676,7 +483,6 @@ PanelReserveRunsOutInDaysHours = Runs out in { "{}" }d { "{}" }h PanelReserveRunsOutInHours = Runs out in { "{}" }h FloatBarNoProviders = No providers FloatBarRemainingSuffix = remaining -BannerCheckingForUpdates = Checking for updates… BannerUpdateAvailablePrefix = Update BannerDownloadButton = Download BannerViewRelease = View Release @@ -697,11 +503,6 @@ ProviderStatusStale = Stale ProviderStatusError = Error ProviderStatusLoading = Loading ProviderStatusDisabled = Disabled -ProviderDetailPlaceholder = Detail pane arriving in Phase 6b -ProviderIssueNeedsSignIn = needs sign-in -ProviderIssueFetchNeedsAttention = Provider fetch needs attention -ProviderIssueCopy = Copy -ProviderIssueUnsupportedSourceModePrefix = Source mode not supported for this provider ProviderIssueAuthRequired = Sign-in required ProviderIssueSessionExpired = Session expired ProviderIssueLocalRuntimeOffline = Local runtime offline @@ -747,7 +548,6 @@ CredsStatusUnavailable = Unavailable CredsOpenFolderAction = Open credentials folder CredsRefreshDetectionAction = Refresh detection CredsSavePathAction = Save path -CredsBrowseAction = Browse… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = Uses OAuth credentials from CredsGeminiCliSetupAction = Setup Gemini CLI @@ -762,8 +562,6 @@ CredsJetBrainsHelperCustomPrefix = Using custom IDE base path CredsJetBrainsHelperMissing = Install a JetBrains IDE with AI Assistant enabled, then refresh CodexBar. CredsJetBrainsCustomPathLabel = Custom path CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = Select the JetBrains IDE to monitor. -CredsJetBrainsAutoDetectOption = Auto-detect CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = Detected at CredsKiroHelperMissing = kiro-cli: not found on PATH or known install locations. @@ -775,17 +573,9 @@ TokenAccountAddButton = Add Account TokenAccountGithubLoginButton = Sign in with GitHub TokenAccountEmpty = No accounts saved for this provider. TokenAccountLabelPlaceholder = Label (e.g. Work, Personal)… -TokenAccountProviderLabel = Provider -TokenAccountProviderPlaceholder = Select provider… TokenAccountAddedPrefix = Added TokenAccountUsedPrefix = Used -TokenAccountTabHint = Manage multiple session tokens or API tokens per provider. The active account is used for all fetches. Only providers that require manual tokens appear here. -TokenAccountNoSupported = No providers currently support token accounts. TokenAccountInlineSummary = Token accounts -TrayPaceBadgeSlow = Slow -TrayPaceBadgeSteady = Steady -TrayPaceBadgeRacing = Racing -TrayPaceBadgeBurning = Burning TrayResetsInLabel = Resets in { "{}" } TrayResetsDueNow = Resetting… @@ -828,10 +618,6 @@ DiagnosticsSectionHeading = Diagnostics DiagnosticsCopyButton = Copy diagnostics DiagnosticsCopied = Diagnostics copied to clipboard DiagnosticsCopyFailed = Could not copy diagnostics -SavedCookiesHint = Manual cookie overrides for browser-authenticated providers. These are used when automatic browser cookie extraction is unavailable. -ImportFromBrowserHint = Extract cookies automatically from a signed-in browser. The browser must be installed on this machine and you must be signed in to the provider in that browser. -NoBrowsersDetectedHint = No supported browsers detected on this machine, or automatic cookie extraction is unavailable (requires Windows with Chrome, Edge, Brave, or Firefox installed). Use the manual paste form below instead. -CookieHeaderValuePlaceholder = Paste cookie header value… ApiKeyTitle = API Key ApiKeyNotSet = Not set ApiKeyUpdate = Update @@ -907,7 +693,6 @@ NetworkProxyUrlHelper = Example: http://127.0.0.1:7890 (http or https only). NetworkProxyUserLabel = Username (optional) NetworkProxyPasswordLabel = Password (optional) NetworkProxyPasswordHelper = Stored in local settings.json. Prefer a local proxy without auth when possible. -NetworkProxyInvalidUrl = Invalid proxy URL. Use http://host:port. DeepSeekPricingTitle = DeepSeek pricing DeepSeekPricingStandard = Standard / pre-schedule @@ -918,7 +703,6 @@ DeepSeekPricingNext = Next transition: DeepSeekPricingEffective = Effective local time: DeepSeekPricingAdvice = Official schedule: peak 01:00-04:00 and 06:00-10:00 UTC; off-peak is half-price. MistralMonthlySpend = Monthly API spend -MistralMonthlySpendHelper = Current-month API usage for pay-as-you-go Mistral accounts. MetricMonthlyPlan = Monthly Plan CostSummaryDisplayStyle = Cost summary display CostSummaryDisplayStyleHelper = Choose how cost is shown on every provider card. @@ -1006,7 +790,6 @@ PanelPeriodTokens = { "{}" } tokens OverviewSpendPeriodTitle = Usage & Spend · { "{}" } UsageSpendModelsPeriodCaption = Local model history for: { "{}" }. UsageSpendProjectsPeriodCaption = Ranked Codex local project spend for: { "{}" } -BurndownChartTitle = Usage remaining BurndownChartAriaLabel = Recorded remaining quota burndown ProviderRaycastAutoImportHelp = Automatically imports the signed-in www.raycast.com session from Chrome. ProviderRaycastManualCookieHelp = Paste a Cookie header from www.raycast.com/settings. diff --git a/rust/src/locale/es-MX.ftl b/rust/src/locale/es-MX.ftl index af7de2d65b..5064b7a4e3 100644 --- a/rust/src/locale/es-MX.ftl +++ b/rust/src/locale/es-MX.ftl @@ -3,12 +3,9 @@ TabProviders = Proveedores TabNotifications = Notificaciones TabMenuBar = Barra de menú TabMenu = Menú -TabApiKeys = Claves API -TabCookies = Cookies TabUsageSpend = Uso y gastos TabAdvanced = Avanzado TabAbout = Acerca de -TabShortcuts = Atajos InterfaceLanguage = Idioma de la interfaz PreferredCurrencyLabel = Moneda preferida PreferredCurrencyHelper = Convierte los costos compatibles de los proveedores para mostrarlos. Auto conserva la moneda de origen de cada proveedor. @@ -19,8 +16,6 @@ StartAtLoginHelper = Iniciar sesión automáticamente al arrancar el sistema StartMinimizedHelper = Iniciar minimizado en la bandeja del sistema ShowNotificationsHelper = Alertar cuando se alcancen los umbrales de uso SoundEnabledHelper = Reproducir sonido cuando se alcancen los umbrales -HighUsageThresholdHelper = Mostrar advertencia en este nivel de uso -CriticalUsageThresholdHelper = Mostrar alerta crítica en este nivel ShowNotifications = Mostrar notificaciones SoundEnabled = Alertas sonoras NotificationSoundTheme = Conjunto de sonidos predeterminado @@ -45,41 +40,23 @@ NotificationSoundEventSessionDepleted = Sesión agotada NotificationSoundEventSessionDepletedHelper = La cuota de una sesión llegó al 100%. NotificationSoundEventSessionRestored = Sesión restaurada NotificationSoundEventSessionRestoredHelper = Una sesión agotada vuelve a estar disponible. -HighUsageThreshold = Umbral de uso alto HighUsageAlert = Alerta de uso alto -CriticalUsageThreshold = Umbral de uso crítico CriticalUsageAlert = Alerta crítica -UsageDisplay = Visualización de uso -ShowUsageAsUsed = Mostrar como usado -ShowUsageAsUsedHelper = Mostrar como porcentaje usado en lugar de restante ResetTimeRelative = Tiempo relativo de reinicio ResetTimeRelativeHelper = Mostrar "2h 30m" en lugar de "3:00 PM" -TrayIcon = Ícono de bandeja -MergeTrayIcons = Combinar íconos de bandeja -MergeTrayIconsHelper = Mostrar todos los proveedores en un solo ícono de bandeja -PerProviderTrayIcons = Íconos por proveedor -PerProviderTrayIconsHelper = Mostrar un ícono de bandeja separado por cada proveedor habilitado ProviderEnabled = Habilitado ProviderDisabled = Deshabilitado -ProviderInfo = Información ProviderUsage = Uso -AtlasCloudAvailableBalance = Saldo disponible AtlasCloudBalance = Saldo de Atlas Cloud PanelUsageDetails = Detalles de uso AuthType = Autenticación DataSource = Fuente de datos -ProviderNotDetected = no detectado -ProviderLastFetchFailed = última consulta fallida ProviderUsageNotFetchedYet = uso no consultado aún -ProviderNotFetchedYetTitle = Aún no consultado -ProviderDisabledNoRecentData = Deshabilitado — sin datos recientes ProviderSourceAutoShort = auto ProviderSourceWebShort = web ProviderSourceCliShort = cli ProviderSourceOauthShort = oauth ProviderSourceApiShort = api -ProviderSourceGithubApiShort = api de github -ProviderSourceLocalShort = local ProviderSourceKiroEnvShort = entorno kiro WayfinderGatewayTitle = Gateway de Wayfinder WayfinderGatewayLabel = URL del gateway @@ -97,118 +74,41 @@ WayfinderSaved = Ahorrado WayfinderOffline = Gateway sin conexión WayfinderDryRun = Simulación WayfinderMissingKeys = Claves faltantes -TrackingItem = Elemento rastreado -MainWindowLiveUsageData = Datos de uso en vivo en ventana principal -StartTrackingUsage = Habilitar para comenzar a rastrear el uso -ClickTrayIconForMetrics = Clic en ícono de bandeja para métricas en vivo -BrowserCookieImport = Importación de cookies del navegador -ImportFromBrowser = Importar cookies de { "{}" } desde el navegador -NoCookiesFoundInBrowser = No se encontraron cookies en { "{}" }. Inicie sesión primero. -SelectBrowser = Seleccionar navegador... -ImportCookies = Importar cookies -ImportSuccess = Cookies importadas para { "{}" } -ImportFailed = Importación fallida: { "{}" } -SaveFailed = Guardado fallido: { "{}" } -CookiesAutoImport = Las cookies se importan automáticamente desde Chrome, Edge, Brave y Firefox QuickActions = Acciones rápidas OpenProviderDashboard = Abrir panel de { "{}" } -OllamaNoDashboard = Ollama se ejecuta localmente, sin panel -ApiKeysTitle = Claves API -ApiKeysDescription = Configurar tokens de acceso para proveedores que requieren autenticación. AddKey = + Agregar clave KeySet = Establecida -KeyRequired = Requiere clave Remove = Eliminar -GetKey = Obtener clave → -SavedCookies = Cookies guardadas -AddManualCookie = Agregar cookie manual CookieHeader = Encabezado de cookie -PasteHere = Pegar aquí... -DeleteCookie = Eliminar -CookieSaved = { "{}" } cookies guardadas -CookieDeleted = Cookies eliminadas para { "{}" } -RefreshSettings = Actualizar Animations = Animaciones MenuBar = Barra de menú -Fun = Diversión -GlobalShortcut = Atajo global Privacy = Privacidad Updates = Actualizaciones UpdateChannel = Canal de actualización -UpdateChannelStable = Estable -UpdateChannelBeta = Beta Never = Nunca LastUpdated = Actualizado NeverUpdated = Nunca actualizado -MinutesAgo = Hace { "{}" } minutos -HoursAgo = Hace { "{}" } horas -DaysAgo = Hace { "{}" } días -BuiltWithRust = Construido con Rust + egui -OriginalMacOSVersion = Versión original de macOS -Links = Enlaces -BuildInfo = Información de compilación -EnabledProviders = Proveedores habilitados Appearance = Apariencia -ThemeSelection = Tema -LightMode = Claro -DarkMode = Oscuro -AboutTitle = Acerca de CodexBar Version = Versión -ActionRefreshAll = Actualizar todo -ActionSettings = Configuración -ActionClose = ✕ -ProviderAccount = Cuenta ProviderSession = Sesión ProviderWeekly = Semanal ProviderMonthly = 30 días -ProviderModel = Modelo -ProviderPlan = Plan -ProviderNextReset = Próximo reinicio -ProviderNoRecentUsage = Sin uso reciente -ProviderNotSignedIn = Sin iniciar sesión -SummaryTab = Resumen StateLoadingProviders = Cargando proveedores... -StateNoProviderData = Sin datos de proveedores. StateNoProviderSelected = Ningún proveedor seleccionado. -StateSummaryRefreshPending = Actualizando después de que terminen todas las consultas StateError = Error -StateRetry = Reintentar -StateDownload = Descargar -StateRestartAndUpdate = Reiniciar y actualizar -CreditsTitle = Créditos -UpdateRestartAndUpdate = Reiniciar y actualizar -UpdateRetry = Reintentar -UpdateDownload = Descargar UpdateDownloading = Descargando UpdateReady = Listo para instalar -UpdateFailed = Actualización fallida -ButtonOpenProviderSettings = Abrir configuración del proveedor MenuSettings = Configuración... MenuAbout = Acerca de CodexBar MenuQuit = Salir -StatusJustUpdated = Recién actualizado -StatusUnableToGetUsage = No se pudo obtener el uso ActionRefresh = Actualizar ActionSwitchAccount = Cambiar cuenta... ActionUsageDashboard = Panel de uso ActionStatusPage = Página de estado ActionCopyError = Copiar error ActionBuyCredits = Comprar créditos... -PaceOnTrack = En ritmo -PaceBehind = Atrasado MetricResetsIn = Reinicia en -SectionUsageBreakdown = Desglose de uso -SectionCost = Costo ResetInProgress = Reiniciando... -TomorrowAt = Mañana a las { "{}" } -UsedPercent = { "{:.0}" }% usado -RemainingPercent = { "{:.0}" }% restante -RemainingAmount = { "{:.2}" } restante -Tokens1K = 1K tokens -TodayCost = Hoy: ${ "{:.2}" } -Last30DaysCost = Últimos 30 días: ${ "{:.2}" } -StatusLabel = Estado: { "{}" } -TrayOpenCodexBar = Abrir panel TrayPopOutDashboard = Abrir panel TrayShowFloatBar = Mostrar barra flotante TrayStayAwakeActive = Mantener activo: hay una sesión de agente local en curso @@ -216,9 +116,7 @@ TrayRefreshAll = Actualizar todo TrayProviders = Proveedores TraySettings = Configuración... TrayCheckForUpdates = Buscar actualizaciones -TrayQuit = Salir TrayLoading = CodexBar - Cargando... -TrayNoProviders = CodexBar - Sin proveedores disponibles TraySessionPercent = Sesión { "{}" }% TrayWeeklyPercent = Semanal { "{}" }% TrayStatusError = { " (Error)" } @@ -227,28 +125,19 @@ TrayStatusIncident = { " (Incidente)" } TrayStatusPartial = { " (Interrupción parcial)" } TrayWeeklyExhausted = Límite semanal agotado TrayCreditsRemaining = Créditos restantes { "{}" }% -TrayStatusRowLoading = Cargando... TrayStatusRowError = Error -TrayCreditsRow = Créditos { "{}" }% -TrayProviderPopOut = Abrir panel -TrayProviderRefresh = Actualizar -TrayProviderSettings = Configuración... -TrayProviderQuit = Salir State = Estado Source = Fuente -Updated = Actualizado UpdatedJustNow = Recién actualizado UpdatedMinutesAgo = Hace { "{}" } minutos UpdatedHoursAgo = Hace { "{}" } horas UpdatedDaysAgo = Hace { "{}" } días Status = Estado -AllSystemsOperational = Todos los sistemas funcionando Plan = Plan Account = Cuenta ProviderSessionLabel = Sesión ProviderWeeklyLabel = Semanal ClaudeScopedWeeklyLabel = { "{}" } semanal -ProviderCodeReviewLabel = Revisión de código ResetsInShort = Reinicia en ResetsInDaysHours = Reinicia en { "{}" }d { "{}" }h ResetsInHoursMinutes = Reinicia en { "{}" }h { "{}" }m @@ -261,14 +150,7 @@ InventoryAvailableCount = { "{}" } disponibles FloatBarShowCost = Mostrar costo local FloatBarShowCostDescription = Muestra el costo estimado del uso local en la barra flotante. TrayDisplayTitle = Pantalla de bandeja -ShowInTray = Mostrar en bandeja CreditsLabel = Créditos -CreditsLeft = { "{:.1}" } restantes -CostTitle = Costo -TodayCostFull = Hoy: ${ "{:.2}" } • { "{}" } tokens -Last30DaysCostFull = Últimos 30 días: ${ "{:.2}" } • { "{}" } tokens -ProviderSettingsTitle = Configuración -ProviderAccountsTitle = Cuentas ProviderOptionsTitle = Opciones MenuBarMetric = Métrica de las barras de menú y flotante MenuBarMetricHelper = Elige qué ventana controla los porcentajes de las barras de menú y flotante. @@ -277,31 +159,18 @@ ProviderZedBrowserSession = Sesión del navegador ProviderZedUsageSourceAutoHelp = Usa la credencial del editor de Zed; la facturación del navegador solo se usa al seleccionar «Sesión del navegador». ProviderZedUsageSourceApiHelp = Usa solo la credencial del editor de Zed. ProviderZedUsageSourceWebHelp = Lee el gasto de tokens solo de la sesión seleccionada de zed.dev o del encabezado Cookie guardado; nunca recurre a la credencial del editor. -ProviderNoCodexAccountsDetected = Aún no se detectaron cuentas de Codex. ProviderCodexAutoImportHelp = Importa automáticamente cookies del navegador para extras del panel. ProviderCodexHistoryHelp = Almacena el historial local de uso de Codex (8 semanas) para personalizar predicciones de ritmo. -ProviderOpenAiCookies = Cookies de OpenAI -ProviderHistoricalTracking = Seguimiento histórico -ProviderOpenAiWebExtras = Extras web de OpenAI -ProviderOpenAiWebExtrasHelp = Mostrar desglose de uso, historial de créditos y revisión de código vía chatgpt.com. -ProviderCodexCreditsUnavailable = Créditos no disponibles; mantenga Codex en ejecución para actualizar. -ProviderCodexLastFetchFailedTitle = Última consulta de Codex fallida: -ProviderCodexNotRunningHelp = Codex no está en ejecución. Intente ejecutar un comando de Codex primero. ProviderCookieSource = Fuente de cookies CookieSourceManual = Manual ProviderManualCookieMissing = No se pegó ningún encabezado de cookie. ProviderUseAutomaticCookies = Usar cookies automáticas ProviderRegion = Región -ProviderClaudeCookies = Cookies de Claude ProviderClaudeCookiesHelp = Se prefieren cookies/sessionKey del navegador porque coinciden con la página de uso de configuración de Claude. ProviderClaudeAvoidKeychainPrompts = Evitar avisos de llavero ProviderClaudeAvoidKeychainPromptsHelp = Usar /usr/bin/security para leer credenciales de Claude y evitar avisos de llavero de CodexBar. -ProviderClaudeDailyRoutinesUsage = Mostrar uso de Daily Routines -ProviderClaudeDailyRoutinesUsageHelp = Muestra la fila de cuota Daily Routines en el uso web/OAuth de Claude. ProviderClaudeAllowReadingClaudeCodeCredentials = Permitir leer las credenciales de Claude Code ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = Permite que CodexBar lea (y renueve) las credenciales OAuth de Claude Code para obtener un uso más preciso. Desactivado por defecto; sin esto, Auto recurre al uso por CLI con menor precisión. -ProviderCodexSparkUsage = Mostrar uso de Codex Spark -ProviderCodexSparkUsageHelp = Muestra las filas de cuota de Codex Spark sin ocultar los créditos ni otro uso adicional. CopilotSeatCreditTitle = Límite de créditos de IA por licencia de Copilot CopilotSeatCreditHelper = Denominador opcional del contador de créditos usados de Copilot. El modo automático solo lo usa cuando no hay cuota medida disponible. CopilotSeatCreditInvalid = Ingresa un límite finito mayor que cero o déjalo vacío. @@ -322,9 +191,6 @@ CodexSwitchSuccess = Cuenta activa cambiada. CodexSwitchRestartPrompt = ¿Reiniciar Codex Desktop para cargar la sesión restaurada? CodexAccountsRestartDesktop = Reiniciar Codex Desktop ProviderCursorCookieSourceHelp = Importa automáticamente cookies del navegador o sesiones almacenadas. -ProviderCursorCreditsHelp = Uso bajo demanda más allá de los límites del plan incluido. -AutoFallbackHelp = Auto recurre a la siguiente fuente si la preferida falla. -ProviderSourceOauthWeb = OAuth + Web Automatic = Automático Average = Promedio ExtraUsage = Uso extra @@ -365,7 +231,6 @@ UsageSpendTokens = tokens UsageSpendKnownSubtotal = ≥{ "{}" } conocido IncompleteRequestsLabel = Incompletas IncompleteRequestsDetail = { "{}" } solicitudes no tenían el uso final y se excluyeron de los tokens y el costo -UsageSpendAllTimeHistory = El historial completo se respalda con los últimos UsageSpendCustomPricing = precios personalizados UsageSpendRefresh = Actualizar UsageSpendLoading = Scanning... @@ -379,7 +244,6 @@ UsageSpendColSource = Origen UsageSpendDailyLedger = Registro diario UsageSpendDailyLedgerHelper = Totales diarios registrados de costo y tokens. Un valor desconocido indica que la fuente no lo estableció. UsageSpendNoDailyData = Aún no hay historial diario. -OverviewSpendTitle = Uso y gastos · 30 d OverviewSpendProviderCoverage = { "{}" } de { "{}" } proveedores con gasto OverviewSpendEstimate = estimaciones locales/del proveedor UsageSpendProjects = Proyectos @@ -403,73 +267,27 @@ AgentSessionsSshHostsLabel = Hosts SSH AgentSessionsSshHostsHelper = Destinos SSH separados por comas. Las conexiones usan modo no interactivo y tiempos de espera cortos. AgentSessionsLoading = Buscando sesiones de agentes... AgentSessionsEmpty = No hay sesiones de agentes activas. -UpdatesTitle = Actualizaciones UpdateChannelChoice = Canal de actualización UpdateChannelChoiceHelper = Elegir entre versiones estables y versiones beta de prueba AutoDownloadUpdates = Buscar actualizaciones automáticamente AutoDownloadUpdatesHelper = Descargar actualizaciones del instalador en segundo plano cuando se encuentre una nueva versión -InstallUpdatesOnQuit = Instalar actualizaciones al salir -InstallUpdatesOnQuitHelper = Iniciar automáticamente un instalador listo al salir de CodexBar -KeyboardShortcutsTitle = Atajos de teclado -GlobalShortcutLabel = Atajo global -GlobalShortcutHelper = Presione este atajo para abrir CodexBar desde cualquier lugar -ShortcutFormatHint = Formato: Ctrl+Shift+Tecla, Alt+Ctrl+Tecla, etc. Se requiere reiniciar para aplicar cambios. Saved = Guardado (reiniciar para aplicar) InvalidFormat = Formato de atajo no válido -ShortcutHintPlaceholder = p. ej., Ctrl+Shift+U -SelectProvider = Seleccionar un proveedor -RefreshInterval30Sec = 30 seg RefreshInterval1Min = 1 min RefreshInterval5Min = 5 min -RefreshInterval10Min = 10 min -BrowserCookiesTitle = Cookies del navegador -CookieImport = Importación de cookies Provider = Proveedor -SelectPlaceholder = Seleccionar... -AutoRefreshInterval = Intervalo de actualización automática -AboutDescription = Una adaptación para Windows de la versión original de macOS. -AboutDescriptionLine2 = Rastree el uso de proveedores de IA en su bandeja del sistema. -ViewOnGitHub = → Ver en GitHub SubmitIssue = → Reportar un problema -MaintainedBy = Mantenido por colaboradores de CodexBar -CommitLabel = Commit -BuildDateLabel = Compilado Save = Guardar Cancel = Cancelar Label = Etiqueta Token = Token -AddAccount = Agregar cuenta -AccountAdded = Cuenta agregada -AccountRemoved = Cuenta eliminada -AccountSwitched = Cuenta cambiada -AccountLabelHint = p. ej., Cuenta de trabajo, Personal... -EnterApiKeyFor = Ingresar clave API para { "{}" } PasteApiKeyHere = Pegue su clave API aquí... -ApiKeySaved = Clave API guardada para { "{}" } -ApiKeyRemoved = Clave API eliminada para { "{}" } -EnvironmentVariable = Variable de entorno -CookieSavedForProvider = Cookies guardadas para { "{}" } -CookieRemovedForProvider = Cookies eliminadas para { "{}" } -ShowUsedPercent = { "{:.0}" }% usado -ShowRemainingPercent = { "{:.0}" }% restante UpdateAvailableMessage = Actualización disponible: { "{}" } -UpdateReadyMessage = { "{}" } lista para instalar -UpdateFailedMessage = Actualización fallida: { "{}" } -UpdateDownloadingMessage = Descargando { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = Tokens SectionRefresh = Automatización SectionNotifications = Notificaciones SectionUsageThresholds = Umbrales de uso SectionKeyboard = Teclado -SectionUsageRendering = Representación de uso -SectionTime = Tiempo SectionLanguage = Idioma -SectionCredentialsSecurity = Credenciales y seguridad -SectionDebug = Depuración -SectionApiKeys = Claves API -SectionSavedCookies = Cookies guardadas -SectionImportFromBrowser = Importar del navegador -SectionAddCookieManually = Agregar cookie manualmente SectionTokenAccounts = Cuentas de token SectionSavedAccounts = Cuentas guardadas SectionAddAccount = Agregar cuenta @@ -590,8 +408,6 @@ OverviewLayoutLabel = Diseño de Overview OverviewLayoutHelper = Elige cuánta información muestra Overview. OverviewLayoutDetailed = Detallado OverviewLayoutCompact = Compacto -EnableAnimationsLabel = Habilitar animaciones -EnableAnimationsHelper = Transiciones suaves y barras de progreso animadas. UpdateChannelStableOption = Estable UpdateChannelBetaOption = Beta CodexLocalLogsTitle = Logs locales de Codex @@ -609,23 +425,14 @@ ThemeAutoOption = Auto (sistema) ThemeLightOption = Claro ThemeDarkOption = Oscuro SettingsStatusSaving = Guardando… -ApiKeysTabHint = Configurar claves API para proveedores que usan autenticación basada en tokens. Las claves se almacenan localmente y nunca se transmiten. FetchingProviderData = Obteniendo datos del proveedor… NoProvidersConfigured = No hay proveedores configurados. EnableProvidersHint = Habilite proveedores en Configuración para ver datos de uso. OpenSettingsButton = Abrir configuración -TooltipRefresh = Actualizar -TrayCardErrorBadge = Error -SummaryProvidersLabel = proveedores -SummaryRefreshing = actualizando… -SummaryFailed = fallido -SummaryWithErrors = con errores -DetailBackButton = Volver DetailWindowPrimary = Principal DetailWindowSecondary = Secundario DetailWindowModelSpecific = Específico del modelo DetailWindowTertiary = Terciario -DetailWindowMinutesSuffix = ventana de m DetailWindowExhausted = Agotado DetailPaceTitle = Ritmo DetailPaceOnTrack = En ritmo @@ -694,7 +501,6 @@ PanelReserveRunsOutInDaysHours = Se agota en { "{}" }d { "{}" }h PanelReserveRunsOutInHours = Se agota en { "{}" }h FloatBarNoProviders = Sin proveedores FloatBarRemainingSuffix = restante -BannerCheckingForUpdates = Buscando actualizaciones… BannerUpdateAvailablePrefix = Actualización BannerDownloadButton = Descargar BannerViewRelease = Ver versión @@ -715,11 +521,6 @@ ProviderStatusStale = Desactualizado ProviderStatusError = Error ProviderStatusLoading = Cargando ProviderStatusDisabled = Deshabilitado -ProviderDetailPlaceholder = Panel de detalle llegando en Fase 6b -ProviderIssueNeedsSignIn = Requiere inicio de sesión -ProviderIssueFetchNeedsAttention = La consulta del proveedor necesita atención -ProviderIssueCopy = Copiar -ProviderIssueUnsupportedSourceModePrefix = Modo de origen no soportado para este proveedor ProviderIssueAuthRequired = Se requiere iniciar sesión ProviderIssueSessionExpired = La sesión expiró ProviderIssueLocalRuntimeOffline = Runtime local sin conexión @@ -765,7 +566,6 @@ CredsStatusUnavailable = No disponible CredsOpenFolderAction = Abrir carpeta de credenciales CredsRefreshDetectionAction = Actualizar detección CredsSavePathAction = Guardar ruta -CredsBrowseAction = Explorar… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = Usa credenciales OAuth de CredsGeminiCliSetupAction = Configurar Gemini CLI @@ -780,8 +580,6 @@ CredsJetBrainsHelperCustomPrefix = Usando ruta base de IDE personalizada CredsJetBrainsHelperMissing = Instale un IDE de JetBrains con AI Assistant habilitado, luego actualice CodexBar. CredsJetBrainsCustomPathLabel = Ruta personalizada CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = Seleccione el IDE de JetBrains a monitorear. -CredsJetBrainsAutoDetectOption = Detectar automáticamente CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = Detectado en CredsKiroHelperMissing = kiro-cli: no se encontró en PATH ni en ubicaciones de instalación conocidas. @@ -793,17 +591,9 @@ TokenAccountAddButton = Agregar cuenta TokenAccountGithubLoginButton = Iniciar sesión con GitHub TokenAccountEmpty = No hay cuentas guardadas para este proveedor. TokenAccountLabelPlaceholder = Etiqueta (p. ej. Trabajo, Personal)… -TokenAccountProviderLabel = Proveedor -TokenAccountProviderPlaceholder = Seleccionar proveedor… TokenAccountAddedPrefix = Agregada TokenAccountUsedPrefix = Usada -TokenAccountTabHint = Administrar múltiples tokens de sesión o tokens API por proveedor. La cuenta activa se usa para todas las consultas. Solo los proveedores que requieren tokens manuales aparecen aquí. -TokenAccountNoSupported = Actualmente ningún proveedor admite cuentas de token. TokenAccountInlineSummary = Cuentas de token -TrayPaceBadgeSlow = Lento -TrayPaceBadgeSteady = Constante -TrayPaceBadgeRacing = Acelerado -TrayPaceBadgeBurning = Crítico TrayResetsInLabel = Reinicia en { "{}" } TrayResetsDueNow = Reiniciando… FloatBarSectionTitle = Barra flotante @@ -845,10 +635,6 @@ DiagnosticsSectionHeading = Diagnóstico DiagnosticsCopyButton = Copiar diagnóstico DiagnosticsCopied = Diagnóstico copiado al portapapeles DiagnosticsCopyFailed = No se pudo copiar el diagnóstico -SavedCookiesHint = Cookies manuales para proveedores que se autentican con el navegador. Se usan cuando la extracción automática de cookies no está disponible. -ImportFromBrowserHint = Extrae cookies automáticamente de un navegador con sesión iniciada. El navegador debe estar instalado en este equipo y debes haber iniciado sesión en el proveedor en ese navegador. -NoBrowsersDetectedHint = No se detectaron navegadores compatibles en este equipo o la extracción automática de cookies no está disponible (requiere Windows con Chrome, Edge, Brave o Firefox instalado). Usa el formulario manual de abajo. -CookieHeaderValuePlaceholder = Pega el valor del encabezado de cookie… ApiKeyTitle = Clave API ApiKeyNotSet = No establecida ApiKeyUpdate = Actualizar @@ -906,7 +692,6 @@ NetworkProxyUrlHelper = Ejemplo: http://127.0.0.1:7890 (solo http o https). NetworkProxyUserLabel = Usuario (opcional) NetworkProxyPasswordLabel = Contraseña (opcional) NetworkProxyPasswordHelper = Se guarda en settings.json local. Si es posible, prefiere un proxy local sin autenticación. -NetworkProxyInvalidUrl = URL de proxy no válida. Usa http://host:port. DeepSeekPricingTitle = Precios de DeepSeek DeepSeekPricingStandard = Estándar / antes del horario @@ -917,7 +702,6 @@ DeepSeekPricingNext = Próxima transición: DeepSeekPricingEffective = Hora local efectiva: DeepSeekPricingAdvice = Horario oficial: pico 01:00-04:00 y 06:00-10:00 UTC; en horas valle el precio es la mitad. MistralMonthlySpend = Gasto de API mensual -MistralMonthlySpendHelper = Uso de API del mes actual para cuentas de pago por uso de Mistral. MetricMonthlyPlan = Plan mensual CostSummaryDisplayStyle = Estilo de resumen de costos CostSummaryDisplayStyleHelper = Elige cómo se muestran los costos en cada tarjeta de proveedor. @@ -1003,7 +787,6 @@ PanelPeriodTokens = Tokens: { "{}" } OverviewSpendPeriodTitle = Uso y gastos · { "{}" } UsageSpendModelsPeriodCaption = Historial local de modelos para: { "{}" }. UsageSpendProjectsPeriodCaption = Gasto local de proyectos de Codex, ordenado, para: { "{}" } -BurndownChartTitle = Uso restante BurndownChartAriaLabel = Consumo registrado de la cuota restante ProviderRaycastAutoImportHelp = Importa automáticamente desde Chrome la sesión iniciada en www.raycast.com. ProviderRaycastManualCookieHelp = Pega un encabezado Cookie de www.raycast.com/settings. diff --git a/rust/src/locale/ja-JP.ftl b/rust/src/locale/ja-JP.ftl index 4eee267303..0e40400d7e 100644 --- a/rust/src/locale/ja-JP.ftl +++ b/rust/src/locale/ja-JP.ftl @@ -3,12 +3,9 @@ TabProviders = プロバイダー TabNotifications = 通知 TabMenuBar = メニューバー TabMenu = メニュー -TabApiKeys = API キー -TabCookies = Cookie TabUsageSpend = 使用量とコスト TabAdvanced = 詳細 TabAbout = 情報 -TabShortcuts = ショートカット InterfaceLanguage = 表示言語 PreferredCurrencyLabel = 優先通貨 PreferredCurrencyHelper = 対応プロバイダーのコストを換算して表示します。「自動」は各プロバイダー本来の通貨を維持します。 @@ -19,8 +16,6 @@ StartAtLoginHelper = システム起動後に自動的にログインします StartMinimizedHelper = システムトレイに最小化して起動します ShowNotificationsHelper = 使用量がしきい値に達したときに通知する SoundEnabledHelper = しきい値に達したときにサウンドを鳴らす -HighUsageThresholdHelper = この使用量で警告を表示 -CriticalUsageThresholdHelper = このレベルで重大なアラートを表示 ShowNotifications = 通知を表示 SoundEnabled = サウンド通知 NotificationSoundTheme = 既定の通知音セット @@ -45,41 +40,23 @@ NotificationSoundEventSessionDepleted = セッション枯渇 NotificationSoundEventSessionDepletedHelper = セッション使用量が 100% に達したときに通知します。 NotificationSoundEventSessionRestored = セッション復旧 NotificationSoundEventSessionRestoredHelper = 枯渇したセッションが再び利用可能になったときに通知します。 -HighUsageThreshold = 高使用量しきい値 HighUsageAlert = 高使用量アラート -CriticalUsageThreshold = 重大使用量しきい値 CriticalUsageAlert = 重大アラート -UsageDisplay = 使用量表示 -ShowUsageAsUsed = 使用量を消費済みで表示 -ShowUsageAsUsedHelper = 残量ではなく消費済み割合で表示 ResetTimeRelative = 相対リセット時刻 ResetTimeRelativeHelper = "3:00 PM" の代わりに "2時間30分" の形式で表示 -TrayIcon = トレイアイコン -MergeTrayIcons = トレイアイコンを統合 -MergeTrayIconsHelper = すべてのプロバイダーを1つのトレイアイコンに表示 -PerProviderTrayIcons = プロバイダー別アイコン -PerProviderTrayIconsHelper = 有効なプロバイダーごとに個別のトレイアイコンを表示 ProviderEnabled = 有効 ProviderDisabled = 無効 -ProviderInfo = 情報 ProviderUsage = 使用量 -AtlasCloudAvailableBalance = 利用可能残高 AtlasCloudBalance = Atlas Cloud の残高 PanelUsageDetails = 使用量の詳細 AuthType = 認証 DataSource = データソース -ProviderNotDetected = 未検出 -ProviderLastFetchFailed = 前回の取得に失敗 ProviderUsageNotFetchedYet = 使用量未取得 -ProviderNotFetchedYetTitle = 未取得 -ProviderDisabledNoRecentData = 無効 — 最近のデータなし ProviderSourceAutoShort = 自動 ProviderSourceWebShort = web ProviderSourceCliShort = cli ProviderSourceOauthShort = oauth ProviderSourceApiShort = api -ProviderSourceGithubApiShort = github api -ProviderSourceLocalShort = ローカル ProviderSourceKiroEnvShort = kiro env WayfinderGatewayTitle = Wayfinder ゲートウェイ WayfinderGatewayLabel = ゲートウェイ URL @@ -97,118 +74,41 @@ WayfinderSaved = 節約 WayfinderOffline = ゲートウェイオフライン WayfinderDryRun = ドライラン WayfinderMissingKeys = 不足しているキー -TrackingItem = 追跡アイテム -MainWindowLiveUsageData = メインウィンドウにリアルタイム使用量を表示 -StartTrackingUsage = 使用量追跡を有効化して開始 -ClickTrayIconForMetrics = ライブメトリクスはトレイアイコンをクリック -BrowserCookieImport = ブラウザ Cookie のインポート -ImportFromBrowser = ブラウザから { "{}" } の Cookie をインポート -NoCookiesFoundInBrowser = { "{}" } に Cookie が見つかりません。先にログインしてください。 -SelectBrowser = ブラウザを選択… -ImportCookies = Cookie をインポート -ImportSuccess = { "{}" } の Cookie をインポートしました -ImportFailed = インポート失敗: { "{}" } -SaveFailed = 保存失敗: { "{}" } -CookiesAutoImport = Cookie は Chrome、Edge、Brave、Firefox から自動的にインポートされます QuickActions = クイック操作 OpenProviderDashboard = { "{}" } のダッシュボードを開く -OllamaNoDashboard = Ollama はローカルで動作します。ダッシュボードはありません -ApiKeysTitle = API キー -ApiKeysDescription = 認証が必要なプロバイダーのアクセストークンを設定します。 AddKey = + キーを追加 KeySet = 設定済み -KeyRequired = キー必須 Remove = 削除 -GetKey = キーを取得 → -SavedCookies = 保存済み Cookie -AddManualCookie = Cookie を手動追加 CookieHeader = Cookie ヘッダー -PasteHere = ここに貼り付け… -DeleteCookie = 削除 -CookieSaved = { "{}" } の Cookie を保存しました -CookieDeleted = { "{}" } の Cookie を削除しました -RefreshSettings = 更新 Animations = アニメーション MenuBar = メニューバー -Fun = ファン -GlobalShortcut = グローバルショートカット Privacy = プライバシー Updates = アップデート UpdateChannel = アップデートチャネル -UpdateChannelStable = 安定版 -UpdateChannelBeta = ベータ版 Never = なし LastUpdated = 更新日時 NeverUpdated = 未更新 -MinutesAgo = { "{}" } 分前 -HoursAgo = { "{}" } 時間前 -DaysAgo = { "{}" } 日前 -BuiltWithRust = Rust + egui でビルド -OriginalMacOSVersion = オリジナルの macOS 版 -Links = リンク -BuildInfo = ビルド情報 -EnabledProviders = 有効なプロバイダー Appearance = 外観 -ThemeSelection = テーマ -LightMode = ライト -DarkMode = ダーク -AboutTitle = CodexBar について Version = バージョン -ActionRefreshAll = すべて更新 -ActionSettings = 設定 -ActionClose = ✕ -ProviderAccount = アカウント ProviderSession = セッション ProviderWeekly = 週間 ProviderMonthly = 30日 -ProviderModel = モデル -ProviderPlan = プラン -ProviderNextReset = 次回リセット -ProviderNoRecentUsage = 最近の使用量なし -ProviderNotSignedIn = 未サインイン -SummaryTab = サマリー StateLoadingProviders = プロバイダーを読み込み中... -StateNoProviderData = プロバイダーデータがありません。 StateNoProviderSelected = プロバイダーが選択されていません。 -StateSummaryRefreshPending = 全プロバイダーの更新完了後に反映します StateError = エラー -StateRetry = 再試行 -StateDownload = ダウンロード -StateRestartAndUpdate = 再起動して更新 -CreditsTitle = クレジット -UpdateRestartAndUpdate = 再起動して更新 -UpdateRetry = 再試行 -UpdateDownload = ダウンロード UpdateDownloading = ダウンロード中 UpdateReady = インストール準備完了 -UpdateFailed = 更新失敗 -ButtonOpenProviderSettings = プロバイダー設定を開く MenuSettings = 設定... MenuAbout = CodexBar について MenuQuit = 終了 -StatusJustUpdated = 更新済み -StatusUnableToGetUsage = 使用量を取得できません ActionRefresh = 更新 ActionSwitchAccount = アカウントを切り替え… ActionUsageDashboard = 使用量ダッシュボード ActionStatusPage = ステータスページ ActionCopyError = エラーをコピー ActionBuyCredits = クレジットを購入… -PaceOnTrack = 順調 -PaceBehind = 遅れ MetricResetsIn = リセットまで -SectionUsageBreakdown = 使用量の内訳 -SectionCost = コスト ResetInProgress = リセット中... -TomorrowAt = 明日 { "{}" } -UsedPercent = 使用済み { "{:.0}" }% -RemainingPercent = 残り { "{:.0}" }% -RemainingAmount = 残り { "{:.2}" } -Tokens1K = 1K トークン -TodayCost = 今日:${ "{:.2}" } -Last30DaysCost = 過去30日間:${ "{:.2}" } -StatusLabel = ステータス: { "{}" } -TrayOpenCodexBar = ダッシュボードを開く TrayPopOutDashboard = ダッシュボードを開く TrayShowFloatBar = フロートバーを表示 TrayStayAwakeActive = スリープ防止: ローカルエージェントのセッション実行中 @@ -216,9 +116,7 @@ TrayRefreshAll = すべて更新 TrayProviders = プロバイダー TraySettings = 設定... TrayCheckForUpdates = 更新を確認 -TrayQuit = 終了 TrayLoading = CodexBar - 読み込み中... -TrayNoProviders = CodexBar - 利用可能なプロバイダーがありません TraySessionPercent = セッション { "{}" }% TrayWeeklyPercent = 週間 { "{}" }% TrayStatusError = { " (エラー)" } @@ -227,28 +125,19 @@ TrayStatusIncident = { " (インシデント)" } TrayStatusPartial = { " (一部停止)" } TrayWeeklyExhausted = 週間の割り当てを使い切りました TrayCreditsRemaining = 残りクレジット { "{}" }% -TrayStatusRowLoading = 読み込み中... TrayStatusRowError = エラー -TrayCreditsRow = クレジット { "{}" }% -TrayProviderPopOut = ダッシュボードをポップアウト -TrayProviderRefresh = 更新 -TrayProviderSettings = 設定… -TrayProviderQuit = 終了 State = 状態 Source = ソース -Updated = 更新 UpdatedJustNow = たった今 UpdatedMinutesAgo = { "{}" }分前 UpdatedHoursAgo = { "{}" }時間前 UpdatedDaysAgo = { "{}" }日前 Status = ステータス -AllSystemsOperational = 全システム正常 Plan = プラン Account = アカウント ProviderSessionLabel = セッション ProviderWeeklyLabel = 週間 ClaudeScopedWeeklyLabel = { "{}" } (週間) -ProviderCodeReviewLabel = コードレビュー ResetsInShort = リセットまで ResetsInDaysHours = リセットまで { "{}" }日 { "{}" }時間 ResetsInHoursMinutes = リセットまで { "{}" }時間 { "{}" }分 @@ -261,14 +150,7 @@ InventoryAvailableCount = { "{}" } 件利用可能 FloatBarShowCost = ローカルコストを表示 FloatBarShowCostDescription = フローティングバーにローカル使用量の推定コストを表示します。 TrayDisplayTitle = トレイ表示 -ShowInTray = トレイに表示 CreditsLabel = クレジット -CreditsLeft = 残り { "{:.1}" } -CostTitle = コスト -TodayCostFull = 今日:${ "{:.2}" } • { "{}" }トークン -Last30DaysCostFull = 過去30日間:${ "{:.2}" } • { "{}" }トークン -ProviderSettingsTitle = 設定 -ProviderAccountsTitle = アカウント ProviderOptionsTitle = オプション MenuBarMetric = メニューバーとフローティングバーのメトリクス MenuBarMetricHelper = メニューバーとフローティングバーのパーセント表示に使用する時間枠を選択します。 @@ -277,31 +159,18 @@ ProviderZedBrowserSession = ブラウザーセッション ProviderZedUsageSourceAutoHelp = Zed エディターの認証情報を使用します。ブラウザー課金を使うのは「ブラウザーセッション」を選択した場合のみです。 ProviderZedUsageSourceApiHelp = Zed エディターの認証情報のみを使用します。 ProviderZedUsageSourceWebHelp = 選択した zed.dev のブラウザーセッションまたは保存済み Cookie ヘッダーからのみトークン使用額を読み取り、エディターの認証情報にはフォールバックしません。 -ProviderNoCodexAccountsDetected = Codex アカウントはまだ検出されていません。 ProviderCodexAutoImportHelp = ダッシュボードの追加情報のためブラウザ Cookie を自動インポートします。 ProviderCodexHistoryHelp = Pace 予測をパーソナライズするため、ローカルの Codex 使用履歴(8週間)を保存します。 -ProviderOpenAiCookies = OpenAI Cookie -ProviderHistoricalTracking = 履歴トラッキング -ProviderOpenAiWebExtras = OpenAI Web 追加情報 -ProviderOpenAiWebExtrasHelp = chatgpt.com 経由で使用量の内訳・クレジット履歴・コードレビューを表示。 -ProviderCodexCreditsUnavailable = クレジット利用不可。更新するには Codex を実行し続けてください。 -ProviderCodexLastFetchFailedTitle = 前回の Codex 取得に失敗: -ProviderCodexNotRunningHelp = Codex が実行されていません。先に Codex コマンドを実行してみてください。 ProviderCookieSource = Cookie ソース CookieSourceManual = 手動 ProviderManualCookieMissing = Cookie ヘッダーが貼り付けられていません。 ProviderUseAutomaticCookies = Cookie の自動取得を使用 ProviderRegion = リージョン -ProviderClaudeCookies = Claude Cookie ProviderClaudeCookiesHelp = Claude の設定使用量ページに合致するため、ブラウザ Cookie / sessionKey が優先されます。 ProviderClaudeAvoidKeychainPrompts = キーチェーン要求を出さない ProviderClaudeAvoidKeychainPromptsHelp = /usr/bin/security を使って Claude 認証情報を読み込み、CodexBar のキーチェーン要求を回避します。 -ProviderClaudeDailyRoutinesUsage = Daily Routines の使用量を表示 -ProviderClaudeDailyRoutinesUsageHelp = Claude の Web/OAuth 使用量に Daily Routines 行を表示します。 ProviderClaudeAllowReadingClaudeCodeCredentials = Claude Code の認証情報の読み取りを許可 ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = CodexBar が Claude Code 自身の OAuth 認証情報を読み取り(更新)して、より高精度な使用量を取得できるようにします。既定ではオフです。オフの場合、自動は精度の低い CLI の使用量にフォールバックします。 -ProviderCodexSparkUsage = Codex Spark の使用量を表示 -ProviderCodexSparkUsageHelp = クレジットやその他の追加使用量を非表示にせず、Codex Spark のクレジット行を表示します。 CopilotSeatCreditTitle = Copilot シートの AI クレジット上限 CopilotSeatCreditHelper = Copilot のクレジット使用量カウンターの分母(任意)。自動モードでは、従量制の割り当てがない場合にのみ使用します。 CopilotSeatCreditInvalid = 0 より大きい有限の値を入力するか、空欄にしてください。 @@ -322,9 +191,6 @@ CodexSwitchSuccess = アクティブなアカウントを切り替えました CodexSwitchRestartPrompt = 復元したセッションを読み込むため Codex Desktop を再起動しますか? CodexAccountsRestartDesktop = Codex Desktop を再起動 ProviderCursorCookieSourceHelp = ブラウザ Cookie または保存済みセッションを自動インポートします。 -ProviderCursorCreditsHelp = プランに含まれる上限を超えたオンデマンド使用量。 -AutoFallbackHelp = 優先ソースが失敗した場合、自動的に次のソースにフォールバックします。 -ProviderSourceOauthWeb = OAuth + Web Automatic = 自動 Average = 平均 ExtraUsage = 追加使用量 @@ -365,7 +231,6 @@ UsageSpendTokens = トークン UsageSpendKnownSubtotal = 確定分 ≥{ "{}" } IncompleteRequestsLabel = 未完了 IncompleteRequestsDetail = { "{}" } 件のリクエストに最終的な使用量がなかったため、トークンとコストから除外しました -UsageSpendAllTimeHistory = 全期間は最新の次の内容に基づきます: UsageSpendCustomPricing = カスタム価格 UsageSpendRefresh = 更新 UsageSpendLoading = Scanning... @@ -379,7 +244,6 @@ UsageSpendColSource = ソース UsageSpendDailyLedger = 日別の記録 UsageSpendDailyLedgerHelper = 記録された日ごとのコストとトークンの合計です。不明な値は、ソースがその値を確定できなかったことを示します。 UsageSpendNoDailyData = 日別の履歴はまだありません。 -OverviewSpendTitle = 使用量とコスト · 30日 OverviewSpendProviderCoverage = { "{}" } / { "{}" } プロバイダーにコストあり OverviewSpendEstimate = ローカル/プロバイダーの推定値 UsageSpendProjects = プロジェクト @@ -403,73 +267,27 @@ AgentSessionsSshHostsLabel = SSH ホスト AgentSessionsSshHostsHelper = カンマ区切りの SSH ターゲット。接続は非対話モード・短いタイムアウトを使用。 AgentSessionsLoading = エージェントセッションを検索中… AgentSessionsEmpty = アクティブなエージェントセッションはありません。 -UpdatesTitle = アップデート UpdateChannelChoice = アップデートチャネル UpdateChannelChoiceHelper = 安定版とベータプレビュー版を選択 AutoDownloadUpdates = 更新を自動的に確認 AutoDownloadUpdatesHelper = 新しいリリースが見つかったらバックグラウンドでインストーラをダウンロード -InstallUpdatesOnQuit = 終了時にアップデートをインストール -InstallUpdatesOnQuitHelper = CodexBar 終了時に準備完了したインストーラを自動起動 -KeyboardShortcutsTitle = キーボードショートカット -GlobalShortcutLabel = グローバルショートカット -GlobalShortcutHelper = このショートカットでどこからでも CodexBar を開けます -ShortcutFormatHint = 形式: Ctrl+Shift+Key、Alt+Ctrl+Key など。変更の反映には再起動が必要。 Saved = 保存済み(再起動で反映) InvalidFormat = 無効なショートカット形式 -ShortcutHintPlaceholder = 例:Ctrl+Shift+U -SelectProvider = プロバイダーを選択 -RefreshInterval30Sec = 30秒 RefreshInterval1Min = 1分 RefreshInterval5Min = 5分 -RefreshInterval10Min = 10分 -BrowserCookiesTitle = ブラウザ Cookie -CookieImport = Cookie インポート Provider = プロバイダー -SelectPlaceholder = 選択… -AutoRefreshInterval = 自動更新間隔 -AboutDescription = オリジナル macOS 版の Windows 移植版。 -AboutDescriptionLine2 = システムトレイで AI プロバイダーの使用量を追跡。 -ViewOnGitHub = → GitHub で見る SubmitIssue = → 問題を報告 -MaintainedBy = CodexBar コントリビューターがメンテナンス -CommitLabel = コミット -BuildDateLabel = ビルド日時 Save = 保存 Cancel = キャンセル Label = ラベル Token = トークン -AddAccount = アカウントを追加 -AccountAdded = アカウントを追加しました -AccountRemoved = アカウントを削除しました -AccountSwitched = アカウントを切り替えました -AccountLabelHint = 例: 仕事用、個人用… -EnterApiKeyFor = { "{}" } の API キーを入力 PasteApiKeyHere = ここに API キーを貼り付け… -ApiKeySaved = { "{}" } の API キーを保存しました -ApiKeyRemoved = { "{}" } の API キーを削除しました -EnvironmentVariable = 環境変数 -CookieSavedForProvider = { "{}" } の Cookie を保存しました -CookieRemovedForProvider = { "{}" } の Cookie を削除しました -ShowUsedPercent = 使用済み { "{:.0}" }% -ShowRemainingPercent = 残り { "{:.0}" }% UpdateAvailableMessage = 更新があります: { "{}" } -UpdateReadyMessage = { "{}" } をインストールできます -UpdateFailedMessage = 更新に失敗: { "{}" } -UpdateDownloadingMessage = ダウンロード中 { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = トークン SectionRefresh = 自動化 SectionNotifications = 通知 SectionUsageThresholds = 使用量しきい値 SectionKeyboard = キーボード -SectionUsageRendering = 使用量の表示 -SectionTime = 時刻 SectionLanguage = 言語 -SectionCredentialsSecurity = 認証情報とセキュリティ -SectionDebug = デバッグ -SectionApiKeys = API キー -SectionSavedCookies = 保存済み Cookie -SectionImportFromBrowser = ブラウザからインポート -SectionAddCookieManually = Cookie を手動追加 SectionTokenAccounts = トークンアカウント SectionSavedAccounts = 保存済みアカウント SectionAddAccount = アカウントを追加 @@ -545,8 +363,6 @@ OverviewLayoutLabel = Overview レイアウト OverviewLayoutHelper = Overview に表示する情報量を選択します。 OverviewLayoutDetailed = 詳細 OverviewLayoutCompact = コンパクト -EnableAnimationsLabel = アニメーションを有効化 -EnableAnimationsHelper = スムーズなトランジションとプログレスバーのアニメーション。 UpdateChannelStableOption = 安定版 UpdateChannelBetaOption = ベータ版 CodexLocalLogsTitle = Codex ローカルログ @@ -564,23 +380,14 @@ ThemeAutoOption = 自動(システム) ThemeLightOption = ライト ThemeDarkOption = ダーク SettingsStatusSaving = 保存中… -ApiKeysTabHint = トークン認証を使うプロバイダーの API キーを設定。キーはローカルに保存され、送信されません。 FetchingProviderData = プロバイダーデータを取得中… NoProvidersConfigured = プロバイダーが設定されていません。 EnableProvidersHint = 使用量データを見るには設定でプロバイダーを有効化。 OpenSettingsButton = 設定を開く -TooltipRefresh = 更新 -TrayCardErrorBadge = エラー -SummaryProvidersLabel = プロバイダー -SummaryRefreshing = 更新中… -SummaryFailed = 失敗 -SummaryWithErrors = エラーあり -DetailBackButton = 戻る DetailWindowPrimary = プライマリ DetailWindowSecondary = セカンダリ DetailWindowModelSpecific = モデル別 DetailWindowTertiary = 第3枠 -DetailWindowMinutesSuffix = 分ウィンドウ DetailWindowExhausted = 使い切りました DetailPaceTitle = ペース DetailPaceOnTrack = 順調 @@ -649,7 +456,6 @@ PanelReserveRunsOutInDaysHours = 残り { "{}" }日 { "{}" }時間 PanelReserveRunsOutInHours = 残り { "{}" }時間 FloatBarNoProviders = プロバイダーなし FloatBarRemainingSuffix = 残り -BannerCheckingForUpdates = 更新を確認中… BannerUpdateAvailablePrefix = 更新 BannerDownloadButton = ダウンロード BannerViewRelease = リリースを見る @@ -670,11 +476,6 @@ ProviderStatusStale = 古い ProviderStatusError = エラー ProviderStatusLoading = 読み込み中 ProviderStatusDisabled = 無効 -ProviderDetailPlaceholder = 詳細ペーンは Phase 6b で実装予定 -ProviderIssueNeedsSignIn = サインインが必要 -ProviderIssueFetchNeedsAttention = プロバイダーの取得に対応が必要 -ProviderIssueCopy = コピー -ProviderIssueUnsupportedSourceModePrefix = このプロバイダーではソースモード未サポート ProviderIssueAuthRequired = サインインが必要です ProviderIssueSessionExpired = セッションの有効期限が切れました ProviderIssueLocalRuntimeOffline = ローカルランタイムはオフラインです @@ -720,7 +521,6 @@ CredsStatusUnavailable = 利用不可 CredsOpenFolderAction = 認証情報フォルダーを開く CredsRefreshDetectionAction = 検出を更新 CredsSavePathAction = パスを保存 -CredsBrowseAction = 参照… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = OAuth 認証情報を使用: CredsGeminiCliSetupAction = Gemini CLI をセットアップ @@ -735,8 +535,6 @@ CredsJetBrainsHelperCustomPrefix = カスタム IDE ベースパスを使用 CredsJetBrainsHelperMissing = AI Assistant を有効化した JetBrains IDE をインストールしてから CodexBar を更新。 CredsJetBrainsCustomPathLabel = カスタムパス CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = 監視する JetBrains IDE を選択。 -CredsJetBrainsAutoDetectOption = 自動検出 CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = 検出場所: CredsKiroHelperMissing = kiro-cli: PATH または既知のインストール先に見つかりません。 @@ -748,17 +546,9 @@ TokenAccountAddButton = アカウントを追加 TokenAccountGithubLoginButton = GitHub でサインイン TokenAccountEmpty = このプロバイダーに保存済みのアカウントなし。 TokenAccountLabelPlaceholder = ラベル(例: 仕事用、個人用)… -TokenAccountProviderLabel = プロバイダー -TokenAccountProviderPlaceholder = プロバイダーを選択… TokenAccountAddedPrefix = 追加済み TokenAccountUsedPrefix = 使用済み -TokenAccountTabHint = プロバイダーごとに複数のセッショントークンや API トークンを管理。アクティブなアカウントがすべての取得に使用。手動トークンが必要なプロバイダーのみ表示。 -TokenAccountNoSupported = 現在トークンアカウントをサポートするプロバイダーなし。 TokenAccountInlineSummary = トークンアカウント -TrayPaceBadgeSlow = 低速 -TrayPaceBadgeSteady = 安定 -TrayPaceBadgeRacing = 加速 -TrayPaceBadgeBurning = 超速 TrayResetsInLabel = リセットまで { "{}" } TrayResetsDueNow = リセット中… PredictivePaceWarnings = 予測ペース警告 @@ -809,7 +599,6 @@ ApiKeyUpdate = 更新 AppName = CodexBar BarChartAriaLabel = 棒グラフ BootstrapFailed = 初期化に失敗しました -CookieHeaderValuePlaceholder = Cookie ヘッダーの値を貼り付け… DevinApiTitle = Devin API DevinOrganizationHelp = Devin の請求クォータ使用量を取得するため、保存済みの Bearer トークンとともに使用します。 DevinOrganizationLabel = 組織 @@ -838,14 +627,12 @@ FloatBarStyle = スタイル FloatBarStyleFloating = フローティングガラス FloatBarStyleHelper = 従来のフローティングガラス表示か、Windows のタスクバーウィジェット表示を選択します。 FloatBarStyleTaskbar = タスクバーウィジェット -ImportFromBrowserHint = サインイン済みのブラウザーから Cookie を自動抽出します。このコンピューターにブラウザーがインストールされ、対象プロバイダーにサインインしている必要があります。 LiteLlmApiTitle = LiteLLM API LiteLlmBaseUrlHelp = LiteLLM の /key/info を取得するため、保存済みの API キーとともに使用します。 LiteLlmBaseUrlLabel = ベース URL LiteLlmBaseUrlPlaceholder = https://litellm.example.com LoadingShellContract = アプリ構成を読み込み中… LoadingShellContractHint = Rust ブリッジからプロバイダー、画面、設定の情報を待っています。 -NoBrowsersDetectedHint = 対応ブラウザーが見つからないか、Cookie の自動抽出を利用できません(Chrome、Edge、Brave、Firefox がインストールされた Windows が必要です)。代わりに、下の手動入力フォームを使用してください。 OpenAiAdminApiTitle = OpenAI Admin API OpenAiProjectIdHelp = 組織全体の使用量を取得する場合は空欄にします。プロジェクト ID を設定すると、Admin API による OpenAI の使用量とコストの取得範囲をそのプロジェクトに限定します。 OpenAiProjectIdLabel = プロジェクト ID @@ -863,7 +650,6 @@ RefreshInterval1Hour = 1時間 RefreshInterval30Min = 30分 RefreshIntervalManual = 手動 RefreshIntervalAdaptive = アダプティブ -SavedCookiesHint = ブラウザー認証を使用するプロバイダー向けの手動 Cookie 設定です。Cookie の自動抽出を利用できない場合に使用されます。 SettingsWindowTitle = CodexBar 設定 StackedBarChartAriaLabel = 積み上げ棒グラフ TokenAccountTokenPlaceholder = トークンを貼り付け… @@ -907,7 +693,6 @@ NetworkProxyUrlHelper = 例: http://127.0.0.1:7890 (http または https のみ) NetworkProxyUserLabel = ユーザー名 (任意) NetworkProxyPasswordLabel = パスワード (任意) NetworkProxyPasswordHelper = ローカルの settings.json に保存されます。可能であれば認証なしのローカルプロキシを推奨します。 -NetworkProxyInvalidUrl = プロキシ URL が無効です。http://host:port の形式で指定してください。 DeepSeekPricingTitle = DeepSeek の料金 DeepSeekPricingStandard = 標準 / スケジュール前 @@ -918,7 +703,6 @@ DeepSeekPricingNext = 次の切り替え: DeepSeekPricingEffective = 適用ローカル時刻: DeepSeekPricingAdvice = 公式スケジュール: ピークは UTC 01:00-04:00 と 06:00-10:00、オフピークは半額です。 MistralMonthlySpend = 月間 API 費用 -MistralMonthlySpendHelper = 従量課金 Mistral アカウントの当月 API 使用量。 MetricMonthlyPlan = 月額プラン CostSummaryDisplayStyle = 費用サマリー表示スタイル CostSummaryDisplayStyleHelper = 各プロバイダーカードの費用表示方法を選択します。 @@ -1004,7 +788,6 @@ PanelPeriodTokens = { "{}" } のトークン OverviewSpendPeriodTitle = 使用量とコスト · { "{}" } UsageSpendModelsPeriodCaption = ローカルのモデル履歴の期間: { "{}" }。 UsageSpendProjectsPeriodCaption = Codex ローカルプロジェクトのコストランキングの期間: { "{}" } -BurndownChartTitle = 残り使用量 BurndownChartAriaLabel = 記録された残りクォータの推移 ProviderRaycastAutoImportHelp = Chrome からサインイン済みの www.raycast.com セッションを自動でインポートします。 ProviderRaycastManualCookieHelp = www.raycast.com/settings の Cookie ヘッダーを貼り付けます。 diff --git a/rust/src/locale/ko-KR.ftl b/rust/src/locale/ko-KR.ftl index 5dcb6cdd23..3b85cfb1e4 100644 --- a/rust/src/locale/ko-KR.ftl +++ b/rust/src/locale/ko-KR.ftl @@ -3,12 +3,9 @@ TabProviders = 제공업체 TabNotifications = 알림 TabMenuBar = 메뉴 바 TabMenu = 메뉴 -TabApiKeys = API 키 -TabCookies = 쿠키 TabUsageSpend = 사용량 및 비용 TabAdvanced = 고급 TabAbout = 정보 -TabShortcuts = 단축키 InterfaceLanguage = 인터페이스 언어 PreferredCurrencyLabel = 선호 통화 PreferredCurrencyHelper = 지원되는 제공업체 비용을 변환하여 표시합니다. 자동은 각 제공업체의 원래 통화를 유지합니다. @@ -19,8 +16,6 @@ StartAtLoginHelper = 시스템 시작 시 자동으로 앱을 실행합니다 StartMinimizedHelper = 시스템 트레이로 최소화된 상태로 시작합니다 ShowNotificationsHelper = 사용량 임계값에 도달하면 알림 SoundEnabledHelper = 임계값에 도달하면 소리 재생 -HighUsageThresholdHelper = 이 사용량 수준에서 경고 표시 -CriticalUsageThresholdHelper = 이 수준에서 위험 경고 표시 ShowNotifications = 알림 표시 SoundEnabled = 소리 알림 NotificationSoundTheme = 기본 알림 소리 모음 @@ -45,41 +40,23 @@ NotificationSoundEventSessionDepleted = 세션 소진 NotificationSoundEventSessionDepletedHelper = 세션 할당량이 100%에 도달했을 때 알립니다. NotificationSoundEventSessionRestored = 세션 복구 NotificationSoundEventSessionRestoredHelper = 소진된 세션을 다시 사용할 수 있을 때 알립니다. -HighUsageThreshold = 높은 사용량 임계값 HighUsageAlert = 높은 사용량 경고 -CriticalUsageThreshold = 위험 사용량 임계값 CriticalUsageAlert = 위험 경고 -UsageDisplay = 사용량 표시 -ShowUsageAsUsed = 사용된 양으로 표시 -ShowUsageAsUsedHelper = 남은 양 대신 사용된 백분율로 표시 ResetTimeRelative = 상대적인 초기화 시간 ResetTimeRelativeHelper = "3:00 PM" 대신 "2시간 30분"으로 표시 -TrayIcon = 트레이 아이콘 -MergeTrayIcons = 트레이 아이콘 병합 -MergeTrayIconsHelper = 모든 제공업체를 단일 트레이 아이콘에 표시 -PerProviderTrayIcons = 제공업체별 아이콘 -PerProviderTrayIconsHelper = 활성화된 각 제공업체에 대해 별도의 트레이 아이콘 표시 ProviderEnabled = 활성화됨 ProviderDisabled = 비활성화됨 -ProviderInfo = 정보 ProviderUsage = 사용량 -AtlasCloudAvailableBalance = 사용 가능 잔액 AtlasCloudBalance = Atlas Cloud 잔액 PanelUsageDetails = 사용량 상세 AuthType = 인증 DataSource = 데이터 소스 -ProviderNotDetected = 감지되지 않음 -ProviderLastFetchFailed = 최근 가져오기 실패 ProviderUsageNotFetchedYet = 아직 사용량을 가져오지 않음 -ProviderNotFetchedYetTitle = 아직 가져오지 않음 -ProviderDisabledNoRecentData = 비활성화됨 — 최근 데이터 없음 ProviderSourceAutoShort = 자동 ProviderSourceWebShort = 웹 ProviderSourceCliShort = CLI ProviderSourceOauthShort = OAuth ProviderSourceApiShort = API -ProviderSourceGithubApiShort = GitHub API -ProviderSourceLocalShort = 로컬 ProviderSourceKiroEnvShort = Kiro Env WayfinderGatewayTitle = Wayfinder 게이트웨이 WayfinderGatewayLabel = 게이트웨이 URL @@ -97,118 +74,41 @@ WayfinderSaved = 절약 WayfinderOffline = 게이트웨이 오프라인 WayfinderDryRun = 드라이 런 WayfinderMissingKeys = 누락된 키 -TrackingItem = 추적 대상 -MainWindowLiveUsageData = 기본 창의 실시간 사용량 데이터 -StartTrackingUsage = 사용량 추적을 시작하려면 활성화 -ClickTrayIconForMetrics = 실시간 메트릭을 보려면 트레이 아이콘을 클릭하세요 -BrowserCookieImport = 브라우저 쿠키 가져오기 -ImportFromBrowser = 브라우저에서 { "{}" } 쿠키 가져오기 -NoCookiesFoundInBrowser = { "{}" }에서 쿠키를 찾을 수 없습니다. 먼저 로그인해 주세요. -SelectBrowser = 브라우저 선택... -ImportCookies = 쿠키 가져오기 -ImportSuccess = { "{}" } 쿠키를 가져왔습니다 -ImportFailed = 가져오기 실패: { "{}" } -SaveFailed = 저장 실패: { "{}" } -CookiesAutoImport = Chrome, Edge, Brave, Firefox에서 쿠키를 자동으로 가져옵니다 QuickActions = 빠른 작업 OpenProviderDashboard = { "{}" } 대시보드 열기 -OllamaNoDashboard = Ollama는 로컬에서 실행되며 대시보드가 없습니다 -ApiKeysTitle = API 키 -ApiKeysDescription = 인증이 필요한 제공업체의 액세스 토큰을 구성합니다. AddKey = + 키 추가 KeySet = 설정됨 -KeyRequired = 키 필요 Remove = 제거 -GetKey = 키 받기 → -SavedCookies = 저장된 쿠키 -AddManualCookie = 수동 쿠키 추가 CookieHeader = 쿠키 헤더 -PasteHere = 여기에 붙여넣기... -DeleteCookie = 삭제 -CookieSaved = { "{}" }개 쿠키 저장됨 -CookieDeleted = { "{}" } 쿠키가 삭제되었습니다 -RefreshSettings = 새로고침 Animations = 애니메이션 MenuBar = 메뉴 바 -Fun = 재미 -GlobalShortcut = 글로벌 단축키 Privacy = 개인정보 보호 Updates = 업데이트 UpdateChannel = 업데이트 채널 -UpdateChannelStable = 안정(Stable) -UpdateChannelBeta = 베타(Beta) Never = 안 함 LastUpdated = 최근 업데이트 NeverUpdated = 업데이트된 적 없음 -MinutesAgo = { "{}" }분 전 -HoursAgo = { "{}" }시간 전 -DaysAgo = { "{}" }일 전 -BuiltWithRust = Rust + egui로 구축됨 -OriginalMacOSVersion = 원본 macOS 버전 -Links = 링크 -BuildInfo = 빌드 정보 -EnabledProviders = 활성화된 제공업체 Appearance = 테마 -ThemeSelection = 테마 -LightMode = 라이트 -DarkMode = 다크 -AboutTitle = CodexBar 정보 Version = 버전 -ActionRefreshAll = 모두 새로고침 -ActionSettings = 설정 -ActionClose = ✕ -ProviderAccount = 계정 ProviderSession = 세션 ProviderWeekly = 주간 ProviderMonthly = 30일 -ProviderModel = 모델 -ProviderPlan = 요금제 -ProviderNextReset = 다음 초기화 -ProviderNoRecentUsage = 최근 사용량 없음 -ProviderNotSignedIn = 로그인하지 않음 -SummaryTab = 요약 StateLoadingProviders = 제공업체 로딩 중... -StateNoProviderData = 제공업체 데이터가 없습니다. StateNoProviderSelected = 선택된 제공업체가 없습니다. -StateSummaryRefreshPending = 모든 제공업체 새로고침 완료 후 업데이트 중 StateError = 오류 -StateRetry = 재시도 -StateDownload = 다운로드 -StateRestartAndUpdate = 재시작 및 업데이트 -CreditsTitle = 크레딧 -UpdateRestartAndUpdate = 재시작 및 업데이트 -UpdateRetry = 재시도 -UpdateDownload = 다운로드 UpdateDownloading = 다운로드 중 UpdateReady = 설치 준비 완료 -UpdateFailed = 업데이트 실패 -ButtonOpenProviderSettings = 제공업체 설정 열기 MenuSettings = 설정... MenuAbout = CodexBar 정보 MenuQuit = 종료 -StatusJustUpdated = 방금 업데이트됨 -StatusUnableToGetUsage = 사용량을 가져올 수 없음 ActionRefresh = 새로고침 ActionSwitchAccount = 계정 전환... ActionUsageDashboard = 사용량 대시보드 ActionStatusPage = 상태 페이지 ActionCopyError = 오류 복사 ActionBuyCredits = 크레딧 구매... -PaceOnTrack = 정상 진행 -PaceBehind = 지연됨 MetricResetsIn = 초기화까지 -SectionUsageBreakdown = 사용량 내역 -SectionCost = 비용 ResetInProgress = 초기화 중... -TomorrowAt = 내일 { "{}" } -UsedPercent = { "{:.0}" }% 사용됨 -RemainingPercent = { "{:.0}" }% 남음 -RemainingAmount = { "{:.2}" } 남음 -Tokens1K = 1K 토큰 -TodayCost = 오늘: ${ "{:.2}" } -Last30DaysCost = 최근 30일: ${ "{:.2}" } -StatusLabel = 상태: { "{}" } -TrayOpenCodexBar = 대시보드 띄우기 TrayPopOutDashboard = 대시보드 띄우기 TrayShowFloatBar = 플로트 바 표시 TrayStayAwakeActive = 절전 방지: 로컬 에이전트 세션 실행 중 @@ -216,9 +116,7 @@ TrayRefreshAll = 모두 새로고침 TrayProviders = 제공업체 TraySettings = 설정... TrayCheckForUpdates = 업데이트 확인 -TrayQuit = 종료 TrayLoading = CodexBar - 로딩 중... -TrayNoProviders = CodexBar - 사용 가능한 제공업체 없음 TraySessionPercent = 세션 { "{}" }% TrayWeeklyPercent = 주간 { "{}" }% TrayStatusError = { " (오류)" } @@ -227,28 +125,19 @@ TrayStatusIncident = { " (장애)" } TrayStatusPartial = { " (부분 장애)" } TrayWeeklyExhausted = 주간 할당량 모두 사용함 TrayCreditsRemaining = 남은 크레딧 { "{}" }% -TrayStatusRowLoading = 로딩 중... TrayStatusRowError = 오류 -TrayCreditsRow = 크레딧 { "{}" }% -TrayProviderPopOut = 대시보드 띄우기 -TrayProviderRefresh = 새로고침 -TrayProviderSettings = 설정... -TrayProviderQuit = 종료 State = 상태 Source = 소스 -Updated = 업데이트됨 UpdatedJustNow = 방금 업데이트됨 UpdatedMinutesAgo = { "{}" }분 전 UpdatedHoursAgo = { "{}" }시간 전 UpdatedDaysAgo = { "{}" }일 전 Status = 상태 -AllSystemsOperational = 모든 시스템 정상 작동 중 Plan = 요금제 Account = 계정 ProviderSessionLabel = 세션 ProviderWeeklyLabel = 주간 ClaudeScopedWeeklyLabel = { "{}" } 주간 -ProviderCodeReviewLabel = 코드 리뷰 ResetsInShort = 초기화까지 ResetsInDaysHours = 초기화까지 { "{}" }일 { "{}" }시간 ResetsInHoursMinutes = 초기화까지 { "{}" }시간 { "{}" }분 @@ -261,14 +150,7 @@ InventoryAvailableCount = { "{}" }개 사용 가능 FloatBarShowCost = 로컬 비용 표시 FloatBarShowCostDescription = 플로팅 바에 로컬 사용량의 예상 비용을 표시합니다. TrayDisplayTitle = 트레이 표시 -ShowInTray = 트레이에 표시 CreditsLabel = 크레딧 -CreditsLeft = { "{:.1}" } 남음 -CostTitle = 비용 -TodayCostFull = 오늘: ${ "{:.2}" } • { "{}" } 토큰 -Last30DaysCostFull = 최근 30일: ${ "{:.2}" } • { "{}" } 토큰 -ProviderSettingsTitle = 설정 -ProviderAccountsTitle = 계정 ProviderOptionsTitle = 옵션 MenuBarMetric = 메뉴 바 및 플로팅 바 메트릭 MenuBarMetricHelper = 메뉴 바와 플로팅 바의 백분율을 결정할 시간 창을 선택합니다. @@ -277,31 +159,18 @@ ProviderZedBrowserSession = 브라우저 세션 ProviderZedUsageSourceAutoHelp = Zed 편집기 자격 증명을 사용하며, 브라우저 결제 정보는 브라우저 세션을 선택한 경우에만 사용합니다. ProviderZedUsageSourceApiHelp = Zed 편집기 자격 증명만 사용합니다. ProviderZedUsageSourceWebHelp = 선택한 zed.dev 브라우저 세션 또는 저장된 Cookie 헤더에서만 토큰 사용액을 읽으며 편집기 자격 증명으로 대체하지 않습니다. -ProviderNoCodexAccountsDetected = 감지된 Codex 계정이 아직 없습니다. ProviderCodexAutoImportHelp = 대시보드 추가 기능을 위해 브라우저 쿠키를 자동으로 가져옵니다. ProviderCodexHistoryHelp = 사용 속도 예측을 개인화하기 위해 로컬 Codex 사용 기록(8주)을 저장합니다. -ProviderOpenAiCookies = OpenAI 쿠키 -ProviderHistoricalTracking = 기록 추적 -ProviderOpenAiWebExtras = OpenAI 웹 추가 기능 -ProviderOpenAiWebExtrasHelp = chatgpt.com을 통해 상세 사용량, 크레딧 내역 및 코드 리뷰를 보여줍니다. -ProviderCodexCreditsUnavailable = 크레딧을 사용할 수 없습니다. 새로 고치려면 Codex를 계속 실행해 두세요. -ProviderCodexLastFetchFailedTitle = 최근 Codex 가져오기 실패: -ProviderCodexNotRunningHelp = Codex가 실행 중이 아닙니다. 먼저 Codex 명령을 실행해 보세요. ProviderCookieSource = 쿠키 소스 CookieSourceManual = 수동 ProviderManualCookieMissing = 붙여넣은 쿠키 헤더가 없습니다. ProviderUseAutomaticCookies = 자동 쿠키 사용 ProviderRegion = 지역 -ProviderClaudeCookies = Claude 쿠키 ProviderClaudeCookiesHelp = 브라우저 쿠키/`sessionKey`가 Claude의 설정 사용량 페이지와 일치하므로 권장됩니다. ProviderClaudeAvoidKeychainPrompts = 키체인 메시지 표시 방지 ProviderClaudeAvoidKeychainPromptsHelp = Claude 자격 증명을 읽을 때 `/usr/bin/security`를 사용하여 CodexBar 키체인 권한 창이 뜨지 않도록 합니다. -ProviderClaudeDailyRoutinesUsage = Daily Routines 사용량 표시 -ProviderClaudeDailyRoutinesUsageHelp = Claude 웹/OAuth 사용량에 Daily Routines 할당량 행을 표시합니다. ProviderClaudeAllowReadingClaudeCodeCredentials = Claude Code 자격 증명 읽기 허용 ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = CodexBar가 Claude Code의 OAuth 자격 증명을 읽고 갱신하도록 허용하여 더 정확한 사용량을 가져옵니다. 기본값은 꺼짐이며, 꺼져 있으면 자동 모드는 정확도가 낮은 CLI 사용량으로 대체됩니다. -ProviderCodexSparkUsage = Codex Spark 사용량 표시 -ProviderCodexSparkUsageHelp = 크레딧이나 기타 추가 사용량을 숨기지 않고 Codex Spark 할당량 행을 표시합니다. CopilotSeatCreditTitle = Copilot 시트 AI 크레딧 허용량 CopilotSeatCreditHelper = Copilot 크레딧 사용량 카운터의 기준값(선택 사항)입니다. 자동 모드에서는 종량제 할당량이 없을 때만 사용합니다. CopilotSeatCreditInvalid = 0보다 큰 유한한 값을 입력하거나 비워 두세요. @@ -322,9 +191,6 @@ CodexSwitchSuccess = 활성 계정을 전환했습니다. CodexSwitchRestartPrompt = 복원된 세션을 불러오려면 Codex Desktop을 다시 시작할까요? CodexAccountsRestartDesktop = Codex Desktop 다시 시작 ProviderCursorCookieSourceHelp = 브라우저 쿠키 또는 저장된 세션을 자동으로 가져옵니다. -ProviderCursorCreditsHelp = 기본 요금제 한도를 초과하는 온디맨드 사용량. -AutoFallbackHelp = 기본 소스가 실패하면 자동으로 다음 소스로 전환합니다. -ProviderSourceOauthWeb = OAuth + 웹 Automatic = 자동 Average = 평균 ExtraUsage = 추가 사용량 @@ -365,7 +231,6 @@ UsageSpendTokens = 토큰 UsageSpendKnownSubtotal = 확인된 합계 ≥{ "{}" } IncompleteRequestsLabel = 미완료 IncompleteRequestsDetail = 최종 사용량이 없는 요청 { "{}" }건은 토큰과 비용에서 제외되었습니다 -UsageSpendAllTimeHistory = 전체 기간은 다음을 기준으로 합니다: UsageSpendCustomPricing = 사용자 지정 가격 UsageSpendRefresh = 새로 고침 UsageSpendLoading = Scanning... @@ -379,7 +244,6 @@ UsageSpendColSource = 소스 UsageSpendDailyLedger = 일별 기록 UsageSpendDailyLedgerHelper = 기록된 일별 비용 및 토큰 합계입니다. 알 수 없는 값은 소스가 해당 값을 확인하지 못했음을 의미합니다. UsageSpendNoDailyData = 아직 일별 기록이 없습니다. -OverviewSpendTitle = 사용량 및 비용 · 30일 OverviewSpendProviderCoverage = { "{}" }/{ "{}" }개 제공업체에 비용 있음 OverviewSpendEstimate = 로컬/제공업체 추정치 UsageSpendProjects = 프로젝트 @@ -403,73 +267,27 @@ AgentSessionsSshHostsLabel = SSH 호스트 AgentSessionsSshHostsHelper = 쉼표로 구분된 SSH 대상입니다. 연결은 비대화형 모드와 짧은 제한 시간을 사용합니다. AgentSessionsLoading = 에이전트 세션을 찾는 중... AgentSessionsEmpty = 활성 에이전트 세션이 없습니다. -UpdatesTitle = 업데이트 UpdateChannelChoice = 업데이트 채널 UpdateChannelChoiceHelper = 안정 버전과 베타 미리보기 버전 중 선택 AutoDownloadUpdates = 업데이트 자동 확인 AutoDownloadUpdatesHelper = 새 릴리스가 발견되면 백그라운드에서 설치 프로그램 업데이트 다운로드 -InstallUpdatesOnQuit = 종료 시 업데이트 설치 -InstallUpdatesOnQuitHelper = CodexBar를 종료할 때 준비된 설치 프로그램을 자동으로 실행합니다. -KeyboardShortcutsTitle = 키보드 단축키 -GlobalShortcutLabel = 글로벌 단축키 -GlobalShortcutHelper = 어디서나 이 단축키를 눌러 CodexBar를 엽니다 -ShortcutFormatHint = 형식: Ctrl+Shift+Key, Alt+Ctrl+Key 등. 변경 사항을 적용하려면 재시작이 필요합니다. Saved = 저장됨 (적용하려면 재시작) InvalidFormat = 유효하지 않은 단축키 형식 -ShortcutHintPlaceholder = 예: Ctrl+Shift+U -SelectProvider = 제공업체 선택 -RefreshInterval30Sec = 30초 RefreshInterval1Min = 1분 RefreshInterval5Min = 5분 -RefreshInterval10Min = 10분 -BrowserCookiesTitle = 브라우저 쿠키 -CookieImport = 쿠키 가져오기 Provider = 제공업체 -SelectPlaceholder = 선택... -AutoRefreshInterval = 자동 새로고침 간격 -AboutDescription = 오리지널 macOS 버전의 Windows 이식 버전입니다. -AboutDescriptionLine2 = 시스템 트레이에서 AI 제공업체의 사용량을 추적하세요. -ViewOnGitHub = → GitHub에서 보기 SubmitIssue = → 이슈 제출 -MaintainedBy = CodexBar 기여자들에 의해 유지 관리됨 -CommitLabel = 커밋 -BuildDateLabel = 빌드 날짜 Save = 저장 Cancel = 취소 Label = 라벨 Token = 토큰 -AddAccount = 계정 추가 -AccountAdded = 계정이 추가되었습니다 -AccountRemoved = 계정이 제거되었습니다 -AccountSwitched = 계정이 전환되었습니다 -AccountLabelHint = 예: 회사 계정, 개인 계정... -EnterApiKeyFor = { "{}" }의 API 키 입력 PasteApiKeyHere = 여기에 API 키 붙여넣기... -ApiKeySaved = { "{}" }의 API 키 저장됨 -ApiKeyRemoved = { "{}" }의 API 키 제거됨 -EnvironmentVariable = 환경 변수 -CookieSavedForProvider = { "{}" }의 쿠키 저장됨 -CookieRemovedForProvider = { "{}" }의 쿠키 제거됨 -ShowUsedPercent = { "{:.0}" }% 사용됨 -ShowRemainingPercent = { "{:.0}" }% 남음 UpdateAvailableMessage = 사용 가능한 업데이트: { "{}" } -UpdateReadyMessage = { "{}" } 설치 준비 완료 -UpdateFailedMessage = 업데이트 실패: { "{}" } -UpdateDownloadingMessage = { "{}" } 다운로드 중 ({ "{:.0}" }%) -TabTokenAccounts = 토큰 SectionRefresh = 자동화 SectionNotifications = 알림 SectionUsageThresholds = 사용량 임계값 SectionKeyboard = 키보드 -SectionUsageRendering = 사용량 렌더링 -SectionTime = 시간 SectionLanguage = 언어 -SectionCredentialsSecurity = 자격 증명 및 보안 -SectionDebug = 디버그 -SectionApiKeys = API 키 -SectionSavedCookies = 저장된 쿠키 -SectionImportFromBrowser = 브라우저에서 가져오기 -SectionAddCookieManually = 수동으로 쿠키 추가 SectionTokenAccounts = 토큰 계정 SectionSavedAccounts = 저장된 계정 SectionAddAccount = 계정 추가 @@ -590,8 +408,6 @@ OverviewLayoutLabel = Overview 레이아웃 OverviewLayoutHelper = Overview에 표시되는 정보의 양을 선택합니다. OverviewLayoutDetailed = 자세히 OverviewLayoutCompact = 컴팩트 -EnableAnimationsLabel = 애니메이션 활성화 -EnableAnimationsHelper = 부드러운 전환 효과 및 애니메이션 진행 표시줄을 사용합니다. UpdateChannelStableOption = 안정(Stable) UpdateChannelBetaOption = 베타(Beta) CodexLocalLogsTitle = Codex 로컬 로그 @@ -609,23 +425,14 @@ ThemeAutoOption = 자동 (시스템) ThemeLightOption = 라이트 ThemeDarkOption = 다크 SettingsStatusSaving = 저장 중… -ApiKeysTabHint = 토큰 기반 인증을 사용하는 제공업체의 API 키를 구성합니다. 키는 로컬에 저장되며 절대 전송되지 않습니다. FetchingProviderData = 제공업체 데이터 가져오는 중… NoProvidersConfigured = 구성된 제공업체가 없습니다. EnableProvidersHint = 사용량 데이터를 보려면 설정에서 제공업체를 활성화하세요. OpenSettingsButton = 설정 열기 -TooltipRefresh = 새로고침 -TrayCardErrorBadge = 오류 -SummaryProvidersLabel = 제공업체 -SummaryRefreshing = 새로고침 중… -SummaryFailed = 실패 -SummaryWithErrors = 오류 있음 -DetailBackButton = 뒤로 DetailWindowPrimary = 기본 DetailWindowSecondary = 보조 DetailWindowModelSpecific = 모델별 DetailWindowTertiary = 3차 -DetailWindowMinutesSuffix = 분 창 DetailWindowExhausted = 모두 사용됨 DetailPaceTitle = 사용 속도 DetailPaceOnTrack = 정상 진행 @@ -694,7 +501,6 @@ PanelReserveRunsOutInDaysHours = { "{}" }일 { "{}" }시간 후 소진 PanelReserveRunsOutInHours = { "{}" }시간 후 소진 FloatBarNoProviders = 공급자 없음 FloatBarRemainingSuffix = 남음 -BannerCheckingForUpdates = 업데이트 확인 중… BannerUpdateAvailablePrefix = 업데이트 BannerDownloadButton = 다운로드 BannerViewRelease = 릴리스 보기 @@ -715,11 +521,6 @@ ProviderStatusStale = 이전 데이터 ProviderStatusError = 오류 ProviderStatusLoading = 로딩 중 ProviderStatusDisabled = 비활성화됨 -ProviderDetailPlaceholder = 세부 정보 패널은 6b단계에 제공될 예정입니다 -ProviderIssueNeedsSignIn = 로그인이 필요합니다 -ProviderIssueFetchNeedsAttention = 제공업체 데이터 가져오기에 확인이 필요합니다 -ProviderIssueCopy = 복사 -ProviderIssueUnsupportedSourceModePrefix = 이 제공업체는 선택한 소스 모드를 지원하지 않습니다 ProviderIssueAuthRequired = 로그인이 필요합니다 ProviderIssueSessionExpired = 세션이 만료되었습니다 ProviderIssueLocalRuntimeOffline = 로컬 런타임이 오프라인입니다 @@ -765,7 +566,6 @@ CredsStatusUnavailable = 사용 불가능 CredsOpenFolderAction = 자격 증명 폴더 열기 CredsRefreshDetectionAction = 감지 새로고침 CredsSavePathAction = 경로 저장 -CredsBrowseAction = 찾아보기… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = 다음 경로의 OAuth 자격 증명 사용: CredsGeminiCliSetupAction = Gemini CLI 설정 @@ -780,8 +580,6 @@ CredsJetBrainsHelperCustomPrefix = 사용자 정의 IDE 기본 경로 사용: CredsJetBrainsHelperMissing = AI Assistant가 활성화된 JetBrains IDE를 설치한 후 CodexBar를 새로 고치십시오. CredsJetBrainsCustomPathLabel = 사용자 정의 경로 CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = 모니터링할 JetBrains IDE를 선택하십시오. -CredsJetBrainsAutoDetectOption = 자동 감지 CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = 감지된 위치: CredsKiroHelperMissing = `kiro-cli`: PATH 또는 알려진 설치 위치에서 찾을 수 없습니다. @@ -793,17 +591,9 @@ TokenAccountAddButton = 계정 추가 TokenAccountGithubLoginButton = GitHub로 로그인 TokenAccountEmpty = 이 제공업체에 대해 저장된 계정이 없습니다. TokenAccountLabelPlaceholder = 라벨 (예: 업무용, 개인용)… -TokenAccountProviderLabel = 제공업체 -TokenAccountProviderPlaceholder = 제공업체 선택… TokenAccountAddedPrefix = 추가됨 TokenAccountUsedPrefix = 사용됨 -TokenAccountTabHint = 제공업체별로 여러 세션 토큰 또는 API 토큰을 관리합니다. 활성 계정이 모든 데이터 가져오기에 사용됩니다. 수동 토큰이 필요한 제공업체만 여기에 표시됩니다. -TokenAccountNoSupported = 현재 토큰 계정을 지원하는 제공업체가 없습니다. TokenAccountInlineSummary = 토큰 계정 -TrayPaceBadgeSlow = 느림 -TrayPaceBadgeSteady = 안정적 -TrayPaceBadgeRacing = 빠름 -TrayPaceBadgeBurning = 매우 빠름 TrayResetsInLabel = 초기화까지 { "{}" } TrayResetsDueNow = 초기화 중… FloatBarSectionTitle = 플로트 바 @@ -845,10 +635,6 @@ DiagnosticsSectionHeading = 진단 DiagnosticsCopyButton = 진단 정보 복사 DiagnosticsCopied = 진단 정보를 클립보드에 복사했습니다 DiagnosticsCopyFailed = 진단 정보를 복사할 수 없습니다 -SavedCookiesHint = 브라우저 인증 제공업체용 수동 쿠키 재정의입니다. 자동 브라우저 쿠키 추출을 사용할 수 없을 때 사용됩니다. -ImportFromBrowserHint = 로그인된 브라우저에서 쿠키를 자동으로 추출합니다. 이 PC에 브라우저가 설치되어 있어야 하며, 해당 브라우저에서 제공업체에 로그인되어 있어야 합니다. -NoBrowsersDetectedHint = 지원되는 브라우저가 감지되지 않았거나 자동 쿠키 추출을 사용할 수 없습니다(Chrome, Edge, Brave 또는 Firefox가 설치된 Windows 필요). 아래의 수동 붙여넣기 양식을 사용하세요. -CookieHeaderValuePlaceholder = 쿠키 헤더 값 붙여넣기… ApiKeyTitle = API 키 ApiKeyNotSet = 설정되지 않음 ApiKeyUpdate = 업데이트 @@ -906,7 +692,6 @@ NetworkProxyUrlHelper = 예: http://127.0.0.1:7890 (http 또는 https만 가능) NetworkProxyUserLabel = 사용자 이름(선택) NetworkProxyPasswordLabel = 비밀번호(선택) NetworkProxyPasswordHelper = 로컬 settings.json에 저장됩니다. 가능하면 인증이 없는 로컬 프록시를 권장합니다. -NetworkProxyInvalidUrl = 프록시 URL이 잘못되었습니다. http://host:port 형식을 사용하세요. DeepSeekPricingTitle = DeepSeek 요금 DeepSeekPricingStandard = 표준 / 일정 적용 전 @@ -917,7 +702,6 @@ DeepSeekPricingNext = 다음 전환: DeepSeekPricingEffective = 적용 현지 시간: DeepSeekPricingAdvice = 공식 일정: 피크 01:00-04:00 및 06:00-10:00 UTC, 비피크는 반값입니다. MistralMonthlySpend = 월간 API 비용 -MistralMonthlySpendHelper = 종량제 Mistral 계정의 당월 API 사용량입니다. MetricMonthlyPlan = 월간 요금제 CostSummaryDisplayStyle = 비용 요약 표시 스타일 CostSummaryDisplayStyleHelper = 각 공급자 카드에 비용을 표시하는 방법을 선택합니다. @@ -1003,7 +787,6 @@ PanelPeriodTokens = { "{}" } 토큰 OverviewSpendPeriodTitle = 사용량 및 비용 · { "{}" } UsageSpendModelsPeriodCaption = 로컬 모델 기록 기간: { "{}" }. UsageSpendProjectsPeriodCaption = Codex 로컬 프로젝트 비용 순위 기간: { "{}" } -BurndownChartTitle = 남은 사용량 BurndownChartAriaLabel = 기록된 남은 할당량 소진 추이 ProviderRaycastAutoImportHelp = Chrome에서 로그인된 www.raycast.com 세션을 자동으로 가져옵니다. ProviderRaycastManualCookieHelp = www.raycast.com/settings의 Cookie 헤더를 붙여넣습니다. diff --git a/rust/src/locale/pt-BR.ftl b/rust/src/locale/pt-BR.ftl index ef6f9509f1..8987e6db50 100644 --- a/rust/src/locale/pt-BR.ftl +++ b/rust/src/locale/pt-BR.ftl @@ -3,12 +3,9 @@ TabProviders = Provedores TabNotifications = Notificações TabMenuBar = Barra de menus TabMenu = Menu -TabApiKeys = Chaves de API -TabCookies = Cookies TabUsageSpend = Uso e gastos TabAdvanced = Avançado TabAbout = Sobre -TabShortcuts = Atalhos InterfaceLanguage = Idioma da interface PreferredCurrencyLabel = Moeda preferida PreferredCurrencyHelper = Converte os custos dos provedores compatíveis para exibição. Automático mantém a moeda de origem de cada provedor. @@ -19,8 +16,6 @@ StartAtLoginHelper = Iniciar o CodexBar automaticamente ao entrar no sistema StartMinimizedHelper = Iniciar minimizado na bandeja do sistema ShowNotificationsHelper = Alertar quando os limites de uso forem atingidos SoundEnabledHelper = Reproduzir um som quando os limites forem atingidos -HighUsageThresholdHelper = Exibir um aviso neste nível de uso -CriticalUsageThresholdHelper = Exibir um alerta crítico neste nível ShowNotifications = Mostrar notificações SoundEnabled = Alertas sonoros NotificationSoundTheme = Conjunto de sons padrão @@ -45,9 +40,7 @@ NotificationSoundEventSessionDepleted = Sessão esgotada NotificationSoundEventSessionDepletedHelper = A cota de uma sessão atingiu 100%. NotificationSoundEventSessionRestored = Sessão restaurada NotificationSoundEventSessionRestoredHelper = Uma sessão esgotada voltou a ficar disponível. -HighUsageThreshold = Limite de uso alto HighUsageAlert = Alerta de uso alto -CriticalUsageThreshold = Limite de uso crítico CriticalUsageAlert = Alerta crítico PredictivePaceWarnings = Avisos preditivos de ritmo PredictivePaceWarningsHelper = Alertar quando o uso do Codex ou Claude puder acabar antes da renovação @@ -68,41 +61,25 @@ NotificationSessionRestoredBody = Sessão de { "{}" } restaurada. A cota da sess NotificationWindowSession = sessão NotificationWindowWeekly = semanal NotificationWindowUsage = uso -UsageDisplay = Exibição de uso -ShowUsageAsUsed = Mostrar uso consumido -ShowUsageAsUsedHelper = Exibir o percentual usado em vez do restante ResetTimeRelative = Horário de renovação relativo ResetTimeRelativeHelper = Mostrar "2h 30min" em vez de "15:00" ShowResetWhenExhausted = Mostrar renovação quando esgotado ShowResetWhenExhaustedHelper = Substituir o percentual esgotado pela contagem regressiva da renovação ShowPace = Mostrar ritmo ShowPaceHelper = Mostrar ritmo de uso, orçamentos e previsões nos cartões dos provedores -TrayIcon = Ícone da bandeja -MergeTrayIcons = Unir ícones da bandeja -MergeTrayIconsHelper = Mostrar todos os provedores em um único ícone da bandeja -PerProviderTrayIcons = Ícones por provedor -PerProviderTrayIconsHelper = Mostrar um ícone separado para cada provedor ativado ProviderEnabled = Ativado ProviderDisabled = Desativado -ProviderInfo = Informações ProviderUsage = Uso -AtlasCloudAvailableBalance = Saldo disponível AtlasCloudBalance = Saldo da Atlas Cloud PanelUsageDetails = Detalhes do uso AuthType = Autenticação DataSource = Fonte de dados -ProviderNotDetected = não detectado -ProviderLastFetchFailed = falha na última consulta ProviderUsageNotFetchedYet = uso ainda não consultado -ProviderNotFetchedYetTitle = Ainda não consultado -ProviderDisabledNoRecentData = Desativado — sem dados recentes ProviderSourceAutoShort = automático ProviderSourceWebShort = web ProviderSourceCliShort = cli ProviderSourceOauthShort = oauth ProviderSourceApiShort = api -ProviderSourceGithubApiShort = api do github -ProviderSourceLocalShort = local ProviderSourceKiroEnvShort = ambiente kiro WayfinderGatewayTitle = Gateway Wayfinder WayfinderGatewayLabel = URL do gateway @@ -120,127 +97,48 @@ WayfinderSaved = Salvo WayfinderOffline = Gateway offline WayfinderDryRun = Simulação WayfinderMissingKeys = Chaves ausentes -TrackingItem = Item monitorado -MainWindowLiveUsageData = Dados de uso em tempo real na janela principal -StartTrackingUsage = Ative para começar a monitorar o uso -ClickTrayIconForMetrics = Clique no ícone da bandeja para ver as métricas ao vivo -BrowserCookieImport = Importação de cookies do navegador -ImportFromBrowser = Importar cookies de { "{}" } do navegador -NoCookiesFoundInBrowser = Nenhum cookie encontrado no { "{}" }. Entre na sua conta primeiro. -SelectBrowser = Selecione o navegador... -ImportCookies = Importar cookies -ImportSuccess = Cookies de { "{}" } importados -ImportFailed = Falha na importação: { "{}" } -SaveFailed = Falha ao salvar: { "{}" } -CookiesAutoImport = Os cookies são importados automaticamente do Chrome, Edge, Brave e Firefox QuickActions = Ações rápidas OpenProviderDashboard = Abrir painel do { "{}" } -OllamaNoDashboard = O Ollama é executado localmente e não possui painel -ApiKeysTitle = Chaves de API -ApiKeysDescription = Configure os tokens de acesso dos provedores que exigem autenticação. AddKey = + Adicionar chave KeySet = Definida -KeyRequired = Chave obrigatória Remove = Remover -GetKey = Obter chave → -SavedCookies = Cookies salvos -AddManualCookie = Adicionar cookie manual CookieHeader = Cabeçalho do cookie -PasteHere = Cole aqui... -DeleteCookie = Excluir -CookieSaved = Cookies de { "{}" } salvos -CookieDeleted = Cookies de { "{}" } excluídos -RefreshSettings = Atualização Animations = Animações MenuBar = Barra de menus -Fun = Diversão -GlobalShortcut = Atalho global Privacy = Privacidade Updates = Atualizações UpdateChannel = Canal de atualização -UpdateChannelStable = Estável -UpdateChannelBeta = Beta Never = Nunca LastUpdated = Atualizado NeverUpdated = Nunca atualizado -MinutesAgo = há { "{}" } minutos -HoursAgo = há { "{}" } horas -DaysAgo = há { "{}" } dias -BuiltWithRust = Criado com Rust + egui -OriginalMacOSVersion = Versão original para macOS -Links = Links -BuildInfo = Informações da compilação -EnabledProviders = Provedores ativados Appearance = Aparência -ThemeSelection = Tema -LightMode = Claro -DarkMode = Escuro -AboutTitle = Sobre o CodexBar Version = Versão -ActionRefreshAll = Atualizar tudo -ActionSettings = Configurações -ActionClose = ✕ -ProviderAccount = Conta ProviderSession = Sessão ProviderWeekly = Semanal ProviderMonthly = 30 dias -ProviderModel = Modelo -ProviderPlan = Plano -ProviderNextReset = Próxima renovação -ProviderNoRecentUsage = Sem uso recente -ProviderNotSignedIn = Não conectado -SummaryTab = Resumo StateLoadingProviders = Carregando provedores... -StateNoProviderData = Nenhum dado de provedor. StateNoProviderSelected = Nenhum provedor selecionado. -StateSummaryRefreshPending = Atualizando após a conclusão de todas as consultas StateError = Erro -StateRetry = Tentar novamente -StateDownload = Baixar -StateRestartAndUpdate = Reiniciar e atualizar -CreditsTitle = Créditos -UpdateRestartAndUpdate = Reiniciar e atualizar -UpdateRetry = Tentar novamente -UpdateDownload = Baixar UpdateDownloading = Baixando UpdateReady = Pronto para instalar -UpdateFailed = Falha na atualização -ButtonOpenProviderSettings = Abrir configurações do provedor MenuSettings = Configurações... MenuAbout = Sobre o CodexBar MenuQuit = Sair -StatusJustUpdated = Atualizado agora -StatusUnableToGetUsage = Não foi possível obter o uso ActionRefresh = Atualizar ActionSwitchAccount = Trocar de conta... ActionUsageDashboard = Painel de uso ActionStatusPage = Página de status ActionCopyError = Copiar erro ActionBuyCredits = Comprar créditos... -PaceOnTrack = Dentro do ritmo -PaceBehind = Atrasado MetricResetsIn = Renova em -SectionUsageBreakdown = Detalhamento do uso -SectionCost = Custo ResetInProgress = Renovando... -TomorrowAt = Amanhã às { "{}" } -UsedPercent = { "{:.0}" }% usado -RemainingPercent = { "{:.0}" }% restante -RemainingAmount = { "{:.2}" } restante -Tokens1K = 1 mil tokens -TodayCost = Hoje: ${ "{:.2}" } -Last30DaysCost = Últimos 30 dias: ${ "{:.2}" } -StatusLabel = Status: { "{}" } -TrayOpenCodexBar = Abrir painel destacado TrayPopOutDashboard = Abrir painel destacado TrayShowFloatBar = Mostrar barra flutuante TrayRefreshAll = Atualizar tudo TrayProviders = Provedores TraySettings = Configurações... TrayCheckForUpdates = Verificar atualizações -TrayQuit = Sair TrayLoading = CodexBar - Carregando... -TrayNoProviders = CodexBar - Nenhum provedor disponível TraySessionPercent = Sessão { "{}" }% TrayWeeklyPercent = Semanal { "{}" }% TrayStatusError = { " (Erro)" } @@ -249,28 +147,19 @@ TrayStatusIncident = { " (Incidente)" } TrayStatusPartial = { " (Interrupção parcial)" } TrayWeeklyExhausted = Cota semanal esgotada TrayCreditsRemaining = Créditos restantes { "{}" }% -TrayStatusRowLoading = Carregando... TrayStatusRowError = Erro -TrayCreditsRow = Créditos { "{}" }% -TrayProviderPopOut = Abrir painel destacado -TrayProviderRefresh = Atualizar -TrayProviderSettings = Configurações... -TrayProviderQuit = Sair State = Estado Source = Fonte -Updated = Atualizado UpdatedJustNow = Atualizado agora UpdatedMinutesAgo = Atualizado há { "{}" } minutos UpdatedHoursAgo = Atualizado há { "{}" } horas UpdatedDaysAgo = Atualizado há { "{}" } dias Status = Status -AllSystemsOperational = Todos os sistemas estão operacionais Plan = Plano Account = Conta ProviderSessionLabel = Sessão ProviderWeeklyLabel = Semanal ClaudeScopedWeeklyLabel = Semanal de { "{}" } -ProviderCodeReviewLabel = Revisão de código ResetsInShort = Renova em ResetsInDaysHours = Renova em { "{}" }d { "{}" }h ResetsInHoursMinutes = Renova em { "{}" }h { "{}" }min @@ -283,14 +172,7 @@ InventoryAvailableCount = { "{}" } disponíveis FloatBarShowCost = Mostrar custo local FloatBarShowCostDescription = Mostra o custo estimado de uso local na barra flutuante. TrayDisplayTitle = Exibição da bandeja -ShowInTray = Mostrar na bandeja CreditsLabel = Créditos -CreditsLeft = { "{:.1}" } restantes -CostTitle = Custo -TodayCostFull = Hoje: ${ "{:.2}" } • { "{}" } tokens -Last30DaysCostFull = Últimos 30 dias: ${ "{:.2}" } • { "{}" } tokens -ProviderSettingsTitle = Configurações -ProviderAccountsTitle = Contas ProviderOptionsTitle = Opções MenuBarMetric = Métrica da bandeja e da barra flutuante MenuBarMetricHelper = Escolha qual período determina os percentuais da bandeja e da barra flutuante. @@ -299,29 +181,16 @@ ProviderZedBrowserSession = Sessão do navegador ProviderZedUsageSourceAutoHelp = Usa a credencial do editor Zed; a cobrança pelo navegador só é usada quando Sessão do navegador está selecionada. ProviderZedUsageSourceApiHelp = Usa apenas a credencial do editor Zed. ProviderZedUsageSourceWebHelp = Lê os gastos de tokens apenas da sessão do navegador zed.dev selecionada ou do cabeçalho Cookie salvo; nunca recorre à credencial do editor. -ProviderNoCodexAccountsDetected = Nenhuma conta Codex detectada ainda. ProviderCodexAutoImportHelp = Importar automaticamente cookies do navegador para recursos adicionais do painel. ProviderCodexHistoryHelp = Armazenar o histórico de uso local do Codex (8 semanas) para personalizar as previsões de ritmo. -ProviderOpenAiCookies = Cookies OpenAI -ProviderHistoricalTracking = Acompanhamento histórico -ProviderOpenAiWebExtras = Extras da web OpenAI -ProviderOpenAiWebExtrasHelp = Mostrar detalhamento de uso, histórico de créditos e revisão de código via chatgpt.com. -ProviderCodexCreditsUnavailable = Créditos indisponíveis; mantenha o Codex em execução para atualizar. -ProviderCodexLastFetchFailedTitle = A última busca do Codex falhou: -ProviderCodexNotRunningHelp = Codex não está em execução. Tente executar um comando Codex primeiro. ProviderCookieSource = Fonte de cookies CookieSourceManual = Manual ProviderRegion = Região -ProviderClaudeCookies = Cookies do Claude ProviderClaudeCookiesHelp = Os cookies/sessionKey do navegador são preferidos porque correspondem à página de uso nas configurações do Claude. ProviderClaudeAvoidKeychainPrompts = Evitar solicitações do chaveiro ProviderClaudeAvoidKeychainPromptsHelp = Usar /usr/bin/security para ler as credenciais do Claude e evitar solicitações do chaveiro do CodexBar. -ProviderClaudeDailyRoutinesUsage = Mostrar uso de rotinas diárias -ProviderClaudeDailyRoutinesUsageHelp = Mostrar a linha de cota de Rotinas Diárias para o uso Web e OAuth do Claude. ProviderClaudeAllowReadingClaudeCodeCredentials = Permitir a leitura das credenciais de Claude Code ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = Permitir que o CodexBar leia (e atualize) as credenciais OAuth do próprio Claude Code para obter dados de uso mais precisos. Desativado por padrão; sem isso, o modo Automático usa os dados menos detalhados da CLI. -ProviderCodexSparkUsage = Mostrar uso do Codex Spark -ProviderCodexSparkUsageHelp = Mostrar as linhas de cota do Codex Spark sem ocultar créditos nem outros usos adicionais. CopilotSeatCreditTitle = Cota de créditos de IA por licença do Copilot CopilotSeatCreditHelper = Denominador opcional para o contador de créditos usados do Copilot. O modo Automático só o utiliza quando nenhuma cota medida está disponível. CopilotSeatCreditInvalid = Insira um subsídio finito maior que zero ou deixe-o em branco. @@ -342,9 +211,6 @@ CodexSwitchSuccess = Conta ativa trocada. CodexSwitchRestartPrompt = Reiniciar o Codex Desktop para carregar a sessão restaurada? CodexAccountsRestartDesktop = Reiniciar o Codex Desktop ProviderCursorCookieSourceHelp = Importa automaticamente cookies do navegador ou sessões armazenadas. -ProviderCursorCreditsHelp = Uso sob demanda além dos limites incluídos no plano. -AutoFallbackHelp = Auto volta para a próxima fonte se a preferida falhar. -ProviderSourceOauthWeb = OAuth + Web Automatic = Automático Average = Média ExtraUsage = Uso extra @@ -383,12 +249,10 @@ UsageSpendHourlyActivity = Atividade horária UsageSpendRequests = solicitações UsageSpendTokens = tokens UsageSpendKnownSubtotal = ≥{ "{}" } conhecido -UsageSpendAllTimeHistory = Todo o período usa o histórico mais recente disponível UsageSpendCustomPricing = preços personalizados UsageSpendDailyLedger = Registro diário UsageSpendDailyLedgerHelper = Totais diários registrados de custo e tokens. Desconhecido significa que a fonte não estabeleceu esse valor. UsageSpendNoDailyData = Ainda não há histórico diário. -OverviewSpendTitle = Uso e gastos · 30d OverviewSpendProviderCoverage = { "{}" } de { "{}" } provedores com dados de gastos OverviewSpendEstimate = estimativas locais/provedor UsageSpendProjects = Projetos @@ -419,73 +283,27 @@ AgentSessionsSshHostsLabel = Hosts SSH AgentSessionsSshHostsHelper = Destinos SSH separados por vírgula. As conexões usam modo não interativo e tempos limites curtos. AgentSessionsLoading = Procurando sessões de agente... AgentSessionsEmpty = Nenhuma sessão de agente ativa. -UpdatesTitle = Atualizações UpdateChannelChoice = Canal de atualização UpdateChannelChoiceHelper = Escolha entre versões estáveis e versões beta AutoDownloadUpdates = Verificar atualizações automaticamente AutoDownloadUpdatesHelper = Baixar atualizações do instalador em segundo plano quando uma nova versão for encontrada -InstallUpdatesOnQuit = Instalar atualizações ao sair -InstallUpdatesOnQuitHelper = Inicie automaticamente um instalador pronto ao sair do CodexBar -KeyboardShortcutsTitle = Atalhos de teclado -GlobalShortcutLabel = Atalho global -GlobalShortcutHelper = Pressione este atalho para abrir o CodexBar de qualquer lugar -ShortcutFormatHint = Formato: Ctrl+Shift+Key, Alt+Ctrl+Key, etc. É necessário reiniciar para aplicar as alterações. Saved = Salvo (reinicie para aplicar) InvalidFormat = Formato de atalho inválido -ShortcutHintPlaceholder = por exemplo, Ctrl+Shift+U -SelectProvider = Selecione um provedor -RefreshInterval30Sec = 30 segundos RefreshInterval1Min = 1 minuto RefreshInterval5Min = 5 minutos -RefreshInterval10Min = 10 minutos -BrowserCookiesTitle = Cookies do navegador -CookieImport = Importação de cookies Provider = Provedor -SelectPlaceholder = Selecione... -AutoRefreshInterval = Intervalo de atualização automática -AboutDescription = Uma versão para Windows do aplicativo original para macOS. -AboutDescriptionLine2 = Acompanhe o uso de provedores de IA na bandeja do sistema. -ViewOnGitHub = → Ver no GitHub SubmitIssue = → Enviar um problema -MaintainedBy = Mantido por colaboradores do CodexBar -CommitLabel = Commit -BuildDateLabel = Data da compilação Save = Salvar Cancel = Cancelar Label = Etiqueta Token = Token -AddAccount = Adicionar conta -AccountAdded = Conta adicionada -AccountRemoved = Conta removida -AccountSwitched = Conta trocada -AccountLabelHint = por exemplo, Trabalho, Pessoal... -EnterApiKeyFor = Insira a chave API para { "{}" } PasteApiKeyHere = Cole sua chave de API aqui... -ApiKeySaved = Chave de API salva para { "{}" } -ApiKeyRemoved = Chave de API removida para { "{}" } -EnvironmentVariable = Variável de ambiente -CookieSavedForProvider = Cookies salvos para { "{}" } -CookieRemovedForProvider = Cookies removidos para { "{}" } -ShowUsedPercent = { "{:.0}" }% usado -ShowRemainingPercent = { "{:.0}" }% restante UpdateAvailableMessage = Atualização disponível: { "{}" } -UpdateReadyMessage = { "{}" } pronto para instalar -UpdateFailedMessage = Falha na atualização: { "{}" } -UpdateDownloadingMessage = Baixando { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = Contas de token SectionRefresh = Automação SectionNotifications = Notificações SectionUsageThresholds = Limites de uso SectionKeyboard = Teclado -SectionUsageRendering = Renderização de uso -SectionTime = Horário SectionLanguage = Idioma -SectionCredentialsSecurity = Credenciais e segurança -SectionDebug = Depuração -SectionApiKeys = Chaves de API -SectionSavedCookies = Cookies salvos -SectionImportFromBrowser = Importar do navegador -SectionAddCookieManually = Adicionar cookie manualmente SectionTokenAccounts = Contas de token SectionSavedAccounts = Contas salvas SectionAddAccount = Adicionar conta @@ -543,8 +361,6 @@ OverviewLayoutDetailed = Detalhado OverviewLayoutCompact = Compacto ShowAllTokenAccountsLabel = Mostrar todas as contas de token ShowAllTokenAccountsHelper = Liste todas as contas de token nos menus do provedor em vez de recolhê-las. -EnableAnimationsLabel = Habilitar animações -EnableAnimationsHelper = Transições suaves e barras de progresso animadas. UpdateChannelStableOption = Estável UpdateChannelBetaOption = Beta CodexLocalLogsTitle = Registros locais do Codex @@ -562,23 +378,14 @@ ThemeAutoOption = Automático (sistema) ThemeLightOption = Claro ThemeDarkOption = Escuro SettingsStatusSaving = Salvando… -ApiKeysTabHint = Configure chaves de API para provedores que usam autenticação baseada em token. As chaves são armazenadas localmente e nunca transmitidas. FetchingProviderData = Buscando dados do provedor… NoProvidersConfigured = Nenhum provedor configurado. EnableProvidersHint = Habilite provedores em Configurações para ver dados de uso. OpenSettingsButton = Abra Configurações -TooltipRefresh = Atualizar -TrayCardErrorBadge = Erro -SummaryProvidersLabel = provedores -SummaryRefreshing = atualizando… -SummaryFailed = falhou -SummaryWithErrors = com erros -DetailBackButton = Voltar DetailWindowPrimary = Primário DetailWindowSecondary = Secundário DetailWindowModelSpecific = Específico do modelo DetailWindowTertiary = Terciário -DetailWindowMinutesSuffix = min de janela DetailWindowExhausted = Exausto DetailPaceTitle = Ritmo DetailPaceOnTrack = No caminho certo @@ -647,7 +454,6 @@ PanelReserveRunsOutInDaysHours = Esgota em { "{}" }d { "{}" }h PanelReserveRunsOutInHours = Esgota em { "{}" }h FloatBarNoProviders = Nenhum provedor FloatBarRemainingSuffix = restante -BannerCheckingForUpdates = Verificando atualizações… BannerUpdateAvailablePrefix = Atualizar BannerDownloadButton = Baixar BannerViewRelease = Ver versão @@ -668,11 +474,6 @@ ProviderStatusStale = Desatualizado ProviderStatusError = Erro ProviderStatusLoading = Carregando ProviderStatusDisabled = Desativado -ProviderDetailPlaceholder = Painel de detalhes disponível na Fase 6b -ProviderIssueNeedsSignIn = precisa de login -ProviderIssueFetchNeedsAttention = A busca do provedor precisa de atenção -ProviderIssueCopy = Copiar -ProviderIssueUnsupportedSourceModePrefix = O modo de origem não é compatível com este provedor ProviderIssueAuthRequired = É necessário fazer login ProviderIssueSessionExpired = Sessão expirada ProviderIssueLocalRuntimeOffline = Tempo de execução local off-line @@ -713,7 +514,6 @@ CredsStatusUnavailable = Indisponível CredsOpenFolderAction = Abrir pasta de credenciais CredsRefreshDetectionAction = Atualizar detecção CredsSavePathAction = Salvar caminho -CredsBrowseAction = Navegar… CredsGeminiCliLabel = CLI do Gemini CredsGeminiCliHelperPrefix = Usa credenciais OAuth de CredsGeminiCliSetupAction = Configurar Gemini CLI @@ -728,8 +528,6 @@ CredsJetBrainsHelperCustomPrefix = Usando caminho base IDE personalizado CredsJetBrainsHelperMissing = Instale um IDE JetBrains com AI Assistant habilitado e atualize o CodexBar. CredsJetBrainsCustomPathLabel = Caminho personalizado CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = Selecione o IDE JetBrains a ser monitorado. -CredsJetBrainsAutoDetectOption = Detecção automática CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = Detectado em CredsKiroHelperMissing = kiro-cli: não encontrado em PATH ou locais de instalação conhecidos. @@ -741,17 +539,9 @@ TokenAccountAddButton = Adicionar conta TokenAccountGithubLoginButton = Faça login com GitHub TokenAccountEmpty = Nenhuma conta salva para este provedor. TokenAccountLabelPlaceholder = Rótulo (por exemplo, Trabalho, Pessoal)… -TokenAccountProviderLabel = Provedor -TokenAccountProviderPlaceholder = Selecione o provedor… TokenAccountAddedPrefix = Adicionado TokenAccountUsedPrefix = Usado -TokenAccountTabHint = Gerencie vários tokens de sessão ou tokens de API por provedor. A conta ativa é usada para todas as buscas. Somente provedores que exigem tokens manuais aparecem aqui. -TokenAccountNoSupported = Atualmente, nenhum provedor oferece suporte a contas de token. TokenAccountInlineSummary = Contas de token -TrayPaceBadgeSlow = Lento -TrayPaceBadgeSteady = Estável -TrayPaceBadgeRacing = Acelerado -TrayPaceBadgeBurning = Muito acelerado TrayResetsInLabel = Renova em { "{}" } TrayResetsDueNow = Renovando… @@ -794,10 +584,6 @@ DiagnosticsSectionHeading = Diagnóstico DiagnosticsCopyButton = Copiar diagnóstico DiagnosticsCopied = Diagnóstico copiado para a área de transferência DiagnosticsCopyFailed = Não foi possível copiar o diagnóstico -SavedCookiesHint = Substituições manuais de cookies para provedores autenticados pelo navegador. Eles são usados ​​quando a extração automática de cookies do navegador não está disponível. -ImportFromBrowserHint = Extraia cookies automaticamente de um navegador conectado. O navegador deve estar instalado nesta máquina e você deve estar conectado ao provedor nesse navegador. -NoBrowsersDetectedHint = Nenhum navegador compatível detectado nesta máquina ou a extração automática de cookies não está disponível (requer Windows com Chrome, Edge, Brave ou Firefox instalado). Use o formulário de colagem manual abaixo. -CookieHeaderValuePlaceholder = Colar o valor do cabeçalho do cookie… ApiKeyTitle = Chave de API ApiKeyNotSet = Não definido ApiKeyUpdate = Atualizar @@ -859,7 +645,6 @@ NetworkProxyUrlHelper = Exemplo: http://127.0.0.1:7890 (apenas http ou https). NetworkProxyUserLabel = Nome de usuário (opcional) NetworkProxyPasswordLabel = Senha (opcional) NetworkProxyPasswordHelper = Armazenado em settings.json local. Prefira um proxy local sem autenticação, quando possível. -NetworkProxyInvalidUrl = URL de proxy inválido. Utilize http://host:porta. DeepSeekPricingTitle = Preços DeepSeek DeepSeekPricingStandard = Padrão/pré-agendamento @@ -870,7 +655,6 @@ DeepSeekPricingNext = Próxima transição: DeepSeekPricingEffective = Hora local efetiva: DeepSeekPricingAdvice = Horário oficial: pico 01h00-04h00 e 06h00-10h00 UTC; fora do horário de pico custa metade do preço. MistralMonthlySpend = Gasto mensal com API -MistralMonthlySpendHelper = Uso da API no mês atual para contas Mistral pré-pagas. MetricMonthlyPlan = Plano mensal CostSummaryDisplayStyle = Exibição do resumo de custos CostSummaryDisplayStyleHelper = Escolha como o custo é mostrado em cada cartão de provedor. @@ -953,7 +737,6 @@ PanelPeriodTokens = Tokens ({ "{}" }) OverviewSpendPeriodTitle = Uso e gastos · { "{}" } UsageSpendModelsPeriodCaption = Histórico local de modelos para: { "{}" }. UsageSpendProjectsPeriodCaption = Gastos locais de projetos do Codex classificados para: { "{}" } -BurndownChartTitle = Uso restante BurndownChartAriaLabel = Evolução registrada da cota restante # Strings added by the 0.70.0 port pull requests diff --git a/rust/src/locale/ru-RU.ftl b/rust/src/locale/ru-RU.ftl index 7a00337d21..69afb305d0 100644 --- a/rust/src/locale/ru-RU.ftl +++ b/rust/src/locale/ru-RU.ftl @@ -3,12 +3,9 @@ TabProviders = Провайдеры TabNotifications = Уведомления TabMenuBar = Панель задач TabMenu = Меню -TabApiKeys = API-ключи -TabCookies = Куки TabUsageSpend = Использование и расходы TabAdvanced = Дополнительно TabAbout = О программе -TabShortcuts = Горячие клавиши InterfaceLanguage = Язык интерфейса PreferredCurrencyLabel = Валюта PreferredCurrencyHelper = Пересчитывать расходы поддерживаемых провайдеров для отображения. «Авто» оставляет исходную валюту каждого провайдера. @@ -19,8 +16,6 @@ StartAtLoginHelper = Автоматически запускать после в StartMinimizedHelper = Запускать свернутым в системный трей ShowNotificationsHelper = Оповещение при достижении порогов использования SoundEnabledHelper = Воспроизведение звука при достижении пороговых значений -HighUsageThresholdHelper = Показывать предупреждение на этом уровне использования -CriticalUsageThresholdHelper = Показывать критическое оповещение на этом уровне ShowNotifications = Показать уведомления SoundEnabled = Звуковые оповещения NotificationSoundTheme = Набор звуков по умолчанию @@ -45,9 +40,7 @@ NotificationSoundEventSessionDepleted = Сессия исчерпана NotificationSoundEventSessionDepletedHelper = Квота сессии достигла 100%. NotificationSoundEventSessionRestored = Сессия восстановлена NotificationSoundEventSessionRestoredHelper = Исчерпанная сессия снова доступна. -HighUsageThreshold = Высокий порог использования HighUsageAlert = Оповещение о высокой загрузке -CriticalUsageThreshold = Критический порог использования CriticalUsageAlert = Критическое оповещение PredictivePaceWarnings = Прогнозируемые предупреждения о темпе PredictivePaceWarningsHelper = Предупреждать, если лимит Codex или Claude может закончиться до сброса @@ -72,41 +65,25 @@ CredentialExpiryNotifications = Уведомления об истечении CredentialExpiryNotificationsHelper = Уведомлять один раз, когда для учетной записи поставщика потребуется войти снова CredentialExpiryTitle = Для «{ "{}" }» требуется повторный вход CredentialExpiryBody = Откройте CodexBar, чтобы проверить ошибку учетной записи и войти снова. -UsageDisplay = Отображение использования -ShowUsageAsUsed = Показать использование как использованное -ShowUsageAsUsedHelper = Отображать процент использования, а не остаток ResetTimeRelative = Относительное время сброса ResetTimeRelativeHelper = Показывать «2 часа 30 минут» вместо «15:00». ShowResetWhenExhausted = Показывать время сброса при исчерпании ShowResetWhenExhaustedHelper = Заменять исчерпанный процент обратным отсчетом до сброса ShowPace = Показывать темп ShowPaceHelper = Показывать в карточках провайдеров темп использования, бюджет по темпу и прогноз -TrayIcon = Значок в трее -MergeTrayIcons = Объединение значков в трее -MergeTrayIconsHelper = Показывать всех провайдеров одним значком в системном трее -PerProviderTrayIcons = Значки для каждого провайдера -PerProviderTrayIconsHelper = Показывать отдельный значок на панели задач для каждого включенного провайдера ProviderEnabled = Включено ProviderDisabled = Отключено -ProviderInfo = Информация ProviderUsage = Использование -AtlasCloudAvailableBalance = Доступный баланс AtlasCloudBalance = Баланс Atlas Cloud PanelUsageDetails = Подробности использования AuthType = Аутентификация DataSource = Источник данных -ProviderNotDetected = не обнаружено -ProviderLastFetchFailed = последняя выборка не удалась ProviderUsageNotFetchedYet = использование еще не получено -ProviderNotFetchedYetTitle = Еще не получено -ProviderDisabledNoRecentData = Отключено — нет последних данных ProviderSourceAutoShort = авто ProviderSourceWebShort = веб ProviderSourceCliShort = CLI ProviderSourceOauthShort = OAuth ProviderSourceApiShort = API -ProviderSourceGithubApiShort = API GitHub -ProviderSourceLocalShort = локально ProviderSourceKiroEnvShort = окружение Kiro WayfinderGatewayTitle = Шлюз Wayfinder WayfinderGatewayLabel = URL-адрес шлюза @@ -124,118 +101,41 @@ WayfinderSaved = Сохранено WayfinderOffline = Шлюз оффлайн WayfinderDryRun = Пробный запуск WayfinderMissingKeys = Отсутствующие ключи -TrackingItem = Отслеживаемый элемент -MainWindowLiveUsageData = Данные об использовании в реальном времени в главном окне -StartTrackingUsage = Включите, чтобы начать отслеживать использование -ClickTrayIconForMetrics = Нажмите значок на панели задач, чтобы просмотреть текущие показатели. -BrowserCookieImport = Импорт файлов cookie браузера -ImportFromBrowser = Импортировать куки { "{}" } из браузера. -NoCookiesFoundInBrowser = В { "{}" } куки не найдены. Пожалуйста, сначала войдите в систему. -SelectBrowser = Выберите браузер... -ImportCookies = Импортировать куки -ImportSuccess = Импортированные куки для { "{}" }. -ImportFailed = Не удалось импортировать: { "{}" }. -SaveFailed = Не удалось сохранить: { "{}" }. -CookiesAutoImport = Куки автоматически импортируются из Chrome, Edge, Brave и Firefox. QuickActions = Быстрые действия OpenProviderDashboard = Открыть панель управления { "{}" } -OllamaNoDashboard = Оллама работает локально, без панели управления. -ApiKeysTitle = API-ключи -ApiKeysDescription = Настройте токены доступа для провайдеров, требующих аутентификации. AddKey = + Добавить ключ KeySet = Установить -KeyRequired = Требуется ключ Remove = Удалить -GetKey = Получить ключ → -SavedCookies = Сохраненные куки -AddManualCookie = Добавить файл cookie вручную CookieHeader = Заголовок файла cookie -PasteHere = Вставьте сюда... -DeleteCookie = Удалить -CookieSaved = Сохраненные куки { "{}" }. -CookieDeleted = Удалены куки для { "{}" }. -RefreshSettings = Обновить Animations = Анимации MenuBar = Панель меню -Fun = Веселье -GlobalShortcut = Глобальный ярлык Privacy = Конфиденциальность Updates = Обновления UpdateChannel = Обновить канал -UpdateChannelStable = Стабильный -UpdateChannelBeta = Бета Never = Никогда LastUpdated = Обновлено NeverUpdated = Никогда не обновлялся -MinutesAgo = { "{}" } минут назад -HoursAgo = { "{}" } часов назад -DaysAgo = { "{}" } дней назад -BuiltWithRust = Построен на Rust + egui. -OriginalMacOSVersion = Исходная версия MacOS -Links = Ссылки -BuildInfo = Информация о сборке -EnabledProviders = Включенные провайдеры Appearance = Внешний вид -ThemeSelection = Тема -LightMode = Свет -DarkMode = Темный -AboutTitle = О CodexBar Version = Версия -ActionRefreshAll = Обновить все -ActionSettings = Настройки -ActionClose = ✕ -ProviderAccount = Аккаунт ProviderSession = Сессия ProviderWeekly = Еженедельно ProviderMonthly = 30-дневный -ProviderModel = Модель -ProviderPlan = План -ProviderNextReset = Следующий сброс -ProviderNoRecentUsage = Нет недавнего использования -ProviderNotSignedIn = Не авторизован -SummaryTab = Резюме StateLoadingProviders = Загрузка провайдеров... -StateNoProviderData = Нет данных о провайдере. StateNoProviderSelected = Провайдер не выбран. -StateSummaryRefreshPending = Обновление после завершения всех обновлений провайдера StateError = Ошибка -StateRetry = Повторить попытку -StateDownload = Скачать -StateRestartAndUpdate = Перезагрузить и обновить -CreditsTitle = Кредиты -UpdateRestartAndUpdate = Перезагрузить и обновить -UpdateRetry = Повторить попытку -UpdateDownload = Скачать UpdateDownloading = Загрузка UpdateReady = Готов к установке -UpdateFailed = Обновление не выполнено -ButtonOpenProviderSettings = Открыть настройки провайдера MenuSettings = Настройки... MenuAbout = О CodexBar MenuQuit = Выйти -StatusJustUpdated = Только что обновлено -StatusUnableToGetUsage = Не удалось получить использование ActionRefresh = Обновить ActionSwitchAccount = Сменить аккаунт... ActionUsageDashboard = Панель управления использованием ActionStatusPage = Страница статуса ActionCopyError = Ошибка копирования ActionBuyCredits = Купить кредиты... -PaceOnTrack = На ходу -PaceBehind = позади MetricResetsIn = Сброс через -SectionUsageBreakdown = Распределение использования -SectionCost = Стоимость ResetInProgress = Сброс... -TomorrowAt = Завтра в { "{}" } -UsedPercent = Использовано { "{:.0}" }% -RemainingPercent = { "{:.0}" }% осталось -RemainingAmount = { "{:.2}" } осталось -Tokens1K = 1 тыс. токенов -TodayCost = Сегодня: ${ "{:.2}" } -Last30DaysCost = Последние 30 дней: ${ "{:.2}" }. -StatusLabel = Статус: { "{}" } -TrayOpenCodexBar = Всплывающая панель мониторинга TrayPopOutDashboard = Всплывающая панель мониторинга TrayShowFloatBar = Показать плавающий бар TrayStayAwakeActive = Без сна: идет локальная сессия агента @@ -243,9 +143,7 @@ TrayRefreshAll = Обновить все TrayProviders = Провайдеры TraySettings = Настройки... TrayCheckForUpdates = Проверьте наличие обновлений -TrayQuit = Выйти TrayLoading = CodexBar - Загрузка... -TrayNoProviders = CodexBar – нет доступных провайдеров. TraySessionPercent = Сеанс { "{}" }% TrayWeeklyPercent = Еженедельно { "{}" }% TrayStatusError = { " (Ошибка)" } @@ -254,28 +152,19 @@ TrayStatusIncident = { " (Инцидент)" } TrayStatusPartial = { " (Частичное отключение)" } TrayWeeklyExhausted = Еженедельная квота исчерпана TrayCreditsRemaining = Оставшиеся кредиты { "{}" }% -TrayStatusRowLoading = Загрузка... TrayStatusRowError = Ошибка -TrayCreditsRow = Кредиты { "{}" }% -TrayProviderPopOut = Всплывающая панель мониторинга -TrayProviderRefresh = Обновить -TrayProviderSettings = Настройки... -TrayProviderQuit = Выйти State = Государство Source = Источник -Updated = Обновлено UpdatedJustNow = Обновлено только что UpdatedMinutesAgo = { "{}" } минут назад UpdatedHoursAgo = { "{}" } часов назад UpdatedDaysAgo = { "{}" } дней назад Status = Статус -AllSystemsOperational = Все системы в рабочем состоянии Plan = План Account = Аккаунт ProviderSessionLabel = Сессия ProviderWeeklyLabel = Еженедельно ClaudeScopedWeeklyLabel = { "{}" } за неделю -ProviderCodeReviewLabel = Обзор кода ResetsInShort = Сброс через ResetsInDaysHours = Сброс через { "{}" } д { "{}" } ч ResetsInHoursMinutes = Сброс через { "{}" } ч { "{}" } мин @@ -288,14 +177,7 @@ InventoryAvailableCount = { "{}" } доступно FloatBarShowCost = Показать местную стоимость FloatBarShowCostDescription = Показывает расчетную стоимость местного использования на плавающей полосе. TrayDisplayTitle = Дисплей лотка -ShowInTray = Показать в трее CreditsLabel = Кредиты -CreditsLeft = { "{:.1}" } слева -CostTitle = Стоимость -TodayCostFull = Сегодня: ${ "{:.2}" } • Токены { "{}" } -Last30DaysCostFull = За последние 30 дней: токены ${ "{:.2}" } • { "{}" }. -ProviderSettingsTitle = Настройки -ProviderAccountsTitle = Счета ProviderOptionsTitle = Опции MenuBarMetric = Метрика строки меню и плавающей панели MenuBarMetricHelper = Выберите временное окно для процентов в строке меню и на плавающей панели. @@ -304,31 +186,18 @@ ProviderZedBrowserSession = Сеанс браузера ProviderZedUsageSourceAutoHelp = Используются учетные данные редактора Zed; данные браузерного биллинга применяются только при выборе сеанса браузера. ProviderZedUsageSourceApiHelp = Используются только учетные данные редактора Zed. ProviderZedUsageSourceWebHelp = Расход токенов считывается только из выбранного сеанса zed.dev или сохраненного заголовка Cookie; перехода на учетные данные редактора нет. -ProviderNoCodexAccountsDetected = Учетные записи Codex пока не обнаружены. ProviderCodexAutoImportHelp = Автоматический импорт файлов cookie браузера для дополнительных функций панели управления. ProviderCodexHistoryHelp = Сохраняет локальную историю использования Codex (8 недель) для персонализации прогнозов темпа. -ProviderOpenAiCookies = Куки OpenAI -ProviderHistoricalTracking = Историческое отслеживание -ProviderOpenAiWebExtras = Веб-дополнения OpenAI -ProviderOpenAiWebExtrasHelp = Покажите разбивку по использованию, историю кредитов и проверку кода черезchatgpt.com. -ProviderCodexCreditsUnavailable = Кредиты недоступны; оставьте Codex работать для обновления. -ProviderCodexLastFetchFailedTitle = Последняя выборка Codex не удалась: -ProviderCodexNotRunningHelp = Codex не запускается. Попробуйте сначала запустить команду Codex. ProviderCookieSource = Источник файлов cookie CookieSourceManual = Вручную ProviderManualCookieMissing = Заголовок cookie не вставлен. ProviderUseAutomaticCookies = Брать куки автоматически ProviderRegion = Регион -ProviderClaudeCookies = Claude печенье ProviderClaudeCookiesHelp = Куки браузера/sessionKey являются предпочтительными, поскольку они соответствуют странице использования настроек Claude. ProviderClaudeAvoidKeychainPrompts = Избегайте подсказок хранилища учетных данных ProviderClaudeAvoidKeychainPromptsHelp = Используйте /usr/bin/security для чтения учетных данных Claude и избегайте запросов цепочки ключей CodexBar. -ProviderClaudeDailyRoutinesUsage = Показать использование ежедневных процедур -ProviderClaudeDailyRoutinesUsageHelp = Отображение строки квоты ежедневных программ для использования Интернета Claude и OAuth. ProviderClaudeAllowReadingClaudeCodeCredentials = Разрешить чтение учетных данных Claude Code ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = CodexBar сможет читать (и обновлять) собственные OAuth-данные Claude Code, чтобы показывать использование точнее. По умолчанию выключено; без этого режим «Авто» откатывается на менее точные данные из CLI. -ProviderCodexSparkUsage = Показать использование Codex Spark -ProviderCodexSparkUsageHelp = Покажите строки квот Codex Spark, не скрывая кредиты или другое дополнительное использование. CopilotSeatCreditTitle = Лимит AI-кредитов на место Copilot CopilotSeatCreditHelper = Необязательный знаменатель для счетчика израсходованных кредитов Copilot. В автоматическом режиме используется, только если измеряемой квоты нет. CopilotSeatCreditInvalid = Введите конечное число больше нуля или оставьте поле пустым. @@ -349,9 +218,6 @@ CodexSwitchSuccess = Активный аккаунт переключен. CodexSwitchRestartPrompt = Перезапустить Codex Desktop, чтобы загрузить восстановленную сессию? CodexAccountsRestartDesktop = Перезапустить Codex Desktop ProviderCursorCookieSourceHelp = Автоматически импортирует куки браузера или сохраненные сеансы. -ProviderCursorCreditsHelp = Использование по требованию сверх включенных в план ограничений. -AutoFallbackHelp = Автоматически возвращается к следующему источнику, если предпочтительный не работает. -ProviderSourceOauthWeb = OAuth + Интернет Automatic = Автоматический Average = Средний ExtraUsage = Дополнительное использование @@ -392,7 +258,6 @@ UsageSpendTokens = токенов UsageSpendKnownSubtotal = ≥{ "{}" } известно IncompleteRequestsLabel = Неполные IncompleteRequestsDetail = Запросов без итогового использования: { "{}" }; они не учтены в токенах и стоимости -UsageSpendAllTimeHistory = Данные за все время основаны на последних UsageSpendCustomPricing = свои цены UsageSpendRefresh = Обновить UsageSpendLoading = Сканирование… @@ -406,7 +271,6 @@ UsageSpendColSource = Источник UsageSpendDailyLedger = Журнал по дням UsageSpendDailyLedgerHelper = Записанные дневные итоги по стоимости и токенам. Неизвестное значение означает, что источник его не установил. UsageSpendNoDailyData = Истории по дням пока нет. -OverviewSpendTitle = Использование и расходы · 30 дн. OverviewSpendProviderCoverage = { "{}" } из { "{}" } провайдеров с расходами OverviewSpendEstimate = оценка: локальная / провайдера UsageSpendProjects = Проекты @@ -430,73 +294,27 @@ AgentSessionsSshHostsLabel = SSH-хосты AgentSessionsSshHostsHelper = Цели SSH, разделенные запятыми. Соединения используют неинтерактивный режим и короткие таймауты. AgentSessionsLoading = Ищу агентские сессии... AgentSessionsEmpty = Нет сеансов активных агентов. -UpdatesTitle = Обновления UpdateChannelChoice = Обновить канал UpdateChannelChoiceHelper = Выбирайте между стабильной и бета-версией предварительного просмотра. AutoDownloadUpdates = Автоматическая проверка обновлений AutoDownloadUpdatesHelper = Загружайте обновления установщика в фоновом режиме при обнаружении нового выпуска. -InstallUpdatesOnQuit = Установить обновления при выходе -InstallUpdatesOnQuitHelper = Автоматически запускать готовый установщик при выходе из CodexBar -KeyboardShortcutsTitle = Сочетания клавиш -GlobalShortcutLabel = Глобальный ярлык -GlobalShortcutHelper = Нажмите этот ярлык, чтобы открыть CodexBar из любого места. -ShortcutFormatHint = Формат: Ctrl+Shift+Key, Alt+Ctrl+Key и т. д. Для применения изменений требуется перезагрузка. Saved = Сохранено (перезапустите, чтобы применить) InvalidFormat = Неверный формат ярлыка -ShortcutHintPlaceholder = например, Ctrl+Shift+U -SelectProvider = Выберите провайдера -RefreshInterval30Sec = 30 секунд RefreshInterval1Min = 1 мин. RefreshInterval5Min = 5 минут -RefreshInterval10Min = 10 минут -BrowserCookiesTitle = Куки браузера -CookieImport = Импорт файлов cookie Provider = Провайдер -SelectPlaceholder = Выберите... -AutoRefreshInterval = Интервал автоматического обновления -AboutDescription = Порт Windows исходной версии macOS. -AboutDescriptionLine2 = Отслеживайте использование провайдера ИИ на панели задач. -ViewOnGitHub = → Посмотреть на GitHub SubmitIssue = → Отправить вопрос -MaintainedBy = Поддерживается участниками CodexBar -CommitLabel = Зафиксировать -BuildDateLabel = Построен Save = Сохранить Cancel = Отмена Label = Этикетка Token = Токен -AddAccount = Добавить аккаунт -AccountAdded = Аккаунт добавлен -AccountRemoved = Аккаунт удален -AccountSwitched = Аккаунт переключен -AccountLabelHint = например, Рабочий аккаунт, Личный... -EnterApiKeyFor = Введите ключ API для { "{}" } PasteApiKeyHere = Вставьте сюда свой ключ API... -ApiKeySaved = Сохраненный ключ API для { "{}" }. -ApiKeyRemoved = Удален ключ API для { "{}" }. -EnvironmentVariable = Переменная среды -CookieSavedForProvider = Сохраненные куки для { "{}" }. -CookieRemovedForProvider = Удалены куки для { "{}" }. -ShowUsedPercent = Использовано { "{:.0}" }% -ShowRemainingPercent = { "{:.0}" }% осталось UpdateAvailableMessage = Доступно обновление: { "{}" }. -UpdateReadyMessage = { "{}" } готов к установке. -UpdateFailedMessage = Не удалось обновить: { "{}" }. -UpdateDownloadingMessage = Загрузка { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = Токены SectionRefresh = Автоматизация SectionNotifications = Уведомления SectionUsageThresholds = Пороги использования SectionKeyboard = Клавиатура -SectionUsageRendering = Рендеринг использования -SectionTime = Время SectionLanguage = Язык -SectionCredentialsSecurity = Учетные данные и безопасность -SectionDebug = Отладка -SectionApiKeys = API-ключи -SectionSavedCookies = Сохраненные куки -SectionImportFromBrowser = Импорт из браузера -SectionAddCookieManually = Добавить файл cookie вручную SectionTokenAccounts = Токен-аккаунты SectionSavedAccounts = Сохраненные аккаунты SectionAddAccount = Добавить аккаунт @@ -572,8 +390,6 @@ OverviewLayoutLabel = Компоновка обзора OverviewLayoutHelper = Выберите объём информации, отображаемой в обзоре. OverviewLayoutDetailed = Подробно OverviewLayoutCompact = Компактно -EnableAnimationsLabel = Включить анимацию -EnableAnimationsHelper = Плавные переходы и анимированные индикаторы выполнения. UpdateChannelStableOption = Стабильный UpdateChannelBetaOption = Бета CodexLocalLogsTitle = Локальные журналы Codex @@ -591,23 +407,14 @@ ThemeAutoOption = Авто (система) ThemeLightOption = Свет ThemeDarkOption = Темный SettingsStatusSaving = Сохранение… -ApiKeysTabHint = Настройте ключи API для провайдеров, использующих аутентификацию на основе токенов. Ключи хранятся локально и никогда не передаются. FetchingProviderData = Получение данных провайдера… NoProvidersConfigured = Провайдеры не настроены. EnableProvidersHint = Включите провайдеров в настройках, чтобы просматривать данные об использовании. OpenSettingsButton = Открыть настройки -TooltipRefresh = Обновить -TrayCardErrorBadge = Ошибка -SummaryProvidersLabel = провайдеры -SummaryRefreshing = освежающий… -SummaryFailed = не удалось -SummaryWithErrors = с ошибками -DetailBackButton = Назад DetailWindowPrimary = Первичный DetailWindowSecondary = вторичный DetailWindowModelSpecific = В зависимости от модели DetailWindowTertiary = Третичный -DetailWindowMinutesSuffix = м окно DetailWindowExhausted = Измученный DetailPaceTitle = Темп DetailPaceOnTrack = На ходу @@ -676,7 +483,6 @@ PanelReserveRunsOutInDaysHours = Заканчивается через { "{}" }d PanelReserveRunsOutInHours = Заканчивается через { "{}" }h FloatBarNoProviders = Нет провайдеров FloatBarRemainingSuffix = оставшееся -BannerCheckingForUpdates = Проверка обновлений… BannerUpdateAvailablePrefix = Обновить BannerDownloadButton = Скачать BannerViewRelease = Посмотреть выпуск @@ -697,11 +503,6 @@ ProviderStatusStale = Несвежий ProviderStatusError = Ошибка ProviderStatusLoading = Загрузка ProviderStatusDisabled = Отключено -ProviderDetailPlaceholder = Панель подробностей появится на этапе 6b -ProviderIssueNeedsSignIn = требуется вход в систему -ProviderIssueFetchNeedsAttention = Получение данных от провайдера требует внимания -ProviderIssueCopy = Копировать -ProviderIssueUnsupportedSourceModePrefix = Режим источника не поддерживается для этого провайдера ProviderIssueAuthRequired = Требуется вход ProviderIssueSessionExpired = Срок действия сеанса истёк ProviderIssueLocalRuntimeOffline = Локальная среда не в сети @@ -747,7 +548,6 @@ CredsStatusUnavailable = Недоступно CredsOpenFolderAction = Открыть папку с учетными данными CredsRefreshDetectionAction = Обнаружение обновления CredsSavePathAction = Сохранить путь -CredsBrowseAction = Обзор… CredsGeminiCliLabel = Близнецы CLI CredsGeminiCliHelperPrefix = Использует учетные данные OAuth от CredsGeminiCliSetupAction = Настройка Gemini CLI @@ -762,8 +562,6 @@ CredsJetBrainsHelperCustomPrefix = Использование собственн CredsJetBrainsHelperMissing = Установите IDE JetBrains с включенным AI Assistant, затем обновите CodexBar. CredsJetBrainsCustomPathLabel = Пользовательский путь CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = Выберите IDE JetBrains для мониторинга. -CredsJetBrainsAutoDetectOption = Автообнаружение CredsKiroLabel = Киро CLI CredsKiroHelperAvailablePrefix = Обнаружено в CredsKiroHelperMissing = kiro-cli: не найден в PATH или известных местах установки. @@ -775,17 +573,9 @@ TokenAccountAddButton = Добавить аккаунт TokenAccountGithubLoginButton = Войдите с помощью GitHub TokenAccountEmpty = Для этого провайдера не сохранено ни одной учетной записи. TokenAccountLabelPlaceholder = Ярлык (например, «Рабочий», «Личный»)… -TokenAccountProviderLabel = Провайдер -TokenAccountProviderPlaceholder = Выберите провайдера… TokenAccountAddedPrefix = Добавлено TokenAccountUsedPrefix = Б/у -TokenAccountTabHint = Управляйте несколькими токенами сеанса или токенами API для каждого провайдера. Активная учетная запись используется для всех извлечений. Здесь отображаются только провайдеры, которым требуются токены вручную. -TokenAccountNoSupported = Ни один провайдер в настоящее время не поддерживает учетные записи токенов. TokenAccountInlineSummary = Токен-аккаунты -TrayPaceBadgeSlow = Медленно -TrayPaceBadgeSteady = Устойчивый -TrayPaceBadgeRacing = Гонки -TrayPaceBadgeBurning = Горящий TrayResetsInLabel = Сброс через { "{}" } TrayResetsDueNow = Сброс… @@ -828,10 +618,6 @@ DiagnosticsSectionHeading = Диагностика DiagnosticsCopyButton = Скопировать диагностику DiagnosticsCopied = Диагностика скопирована в буфер обмена DiagnosticsCopyFailed = Не удалось скопировать диагностику -SavedCookiesHint = Ручное переопределение файлов cookie для провайдеров, аутентифицированных в браузере. Они используются, когда автоматическое извлечение файлов cookie браузера недоступно. -ImportFromBrowserHint = Автоматически извлекайте куки из браузера, вошедшего в систему. На этом компьютере должен быть установлен браузер, и вы должны войти в систему провайдера в этом браузере. -NoBrowsersDetectedHint = На этом компьютере не обнаружены поддерживаемые браузеры, или автоматическое извлечение файлов cookie недоступно (требуется Windows с установленным Chrome, Edge, Brave или Firefox). Вместо этого используйте форму ручной вставки ниже. -CookieHeaderValuePlaceholder = Вставить значение заголовка файла cookie… ApiKeyTitle = API-ключ ApiKeyNotSet = Не установлено ApiKeyUpdate = Обновить @@ -907,7 +693,6 @@ NetworkProxyUrlHelper = Пример: http://127.0.0.1:7890 (только http NetworkProxyUserLabel = Имя пользователя (необязательно) NetworkProxyPasswordLabel = Пароль (необязательно) NetworkProxyPasswordHelper = Хранится в локальном файле settings.json. По возможности предпочитайте локальный прокси без аутентификации. -NetworkProxyInvalidUrl = Неверный URL-адрес прокси. Используйте http://хост:порт. DeepSeekPricingTitle = Цены DeepSeek DeepSeekPricingStandard = Стандартные / до расписания @@ -918,7 +703,6 @@ DeepSeekPricingNext = Следующее переключение: DeepSeekPricingEffective = Действующее местное время: DeepSeekPricingAdvice = Официальное расписание: пик 01:00-04:00 и 06:00-10:00 UTC; вне пика — половина цены. MistralMonthlySpend = Расход на API за месяц -MistralMonthlySpendHelper = Использование API за текущий месяц для аккаунтов Mistral с оплатой по мере использования. MetricMonthlyPlan = Ежемесячный план CostSummaryDisplayStyle = Стиль отображения стоимости CostSummaryDisplayStyleHelper = Выберите, как стоимость отображается на каждой карте провайдера. @@ -1004,7 +788,6 @@ PanelPeriodTokens = Токены ({ "{}" }) OverviewSpendPeriodTitle = Использование и расходы · { "{}" } UsageSpendModelsPeriodCaption = Локальная история моделей за период: { "{}" }. UsageSpendProjectsPeriodCaption = Расходы локальных проектов Codex по убыванию за период: { "{}" } -BurndownChartTitle = Остаток лимита BurndownChartAriaLabel = График расхода оставшейся квоты ProviderRaycastAutoImportHelp = Автоматически импортирует сеанс www.raycast.com, открытый в Chrome. ProviderRaycastManualCookieHelp = Вставьте заголовок Cookie со страницы www.raycast.com/settings. diff --git a/rust/src/locale/tests.rs b/rust/src/locale/tests.rs index 569c6c0b00..a0d1240049 100644 --- a/rust/src/locale/tests.rs +++ b/rust/src/locale/tests.rs @@ -20,7 +20,6 @@ fn test_locale_key_english() { #[test] fn test_locale_key_chinese() { assert_eq!(get_text(Language::Chinese, LocaleKey::TabGeneral), "通用"); - assert_eq!(get_text(Language::Chinese, LocaleKey::TabCookies), "Cookie"); assert_eq!( get_text(Language::Chinese, LocaleKey::InterfaceLanguage), "界面语言" @@ -80,7 +79,6 @@ fn test_japanese_menu_card_locale_values_are_translated() { (LocaleKey::DetailCostLimit, "上限"), (LocaleKey::DetailCostRemaining, "残り"), (LocaleKey::DetailCostBalance, "残高"), - (LocaleKey::AtlasCloudAvailableBalance, "利用可能残高"), (LocaleKey::AtlasCloudBalance, "Atlas Cloud の残高"), (LocaleKey::DetailCostResets, "リセット"), (LocaleKey::DetailChartCost, "コスト(30日間)"), @@ -129,15 +127,11 @@ fn test_japanese_tray_panel_locale_values_are_translated() { (LocaleKey::TrayStatusIncident, " (インシデント)"), (LocaleKey::TrayStatusPartial, " (一部停止)"), (LocaleKey::TrayLoading, "CodexBar - 読み込み中..."), - (LocaleKey::TrayStatusRowLoading, "読み込み中..."), (LocaleKey::TrayStatusRowError, "エラー"), (LocaleKey::TrayCreditsRemaining, "残りクレジット {}%"), - (LocaleKey::TrayCreditsRow, "クレジット {}%"), (LocaleKey::ProviderStatusStale, "古い"), (LocaleKey::ProviderStatusError, "エラー"), (LocaleKey::ProviderStatusLoading, "読み込み中"), - (LocaleKey::TrayCardErrorBadge, "エラー"), - (LocaleKey::SummaryWithErrors, "エラーあり"), ( LocaleKey::StateLoadingProviders, "プロバイダーを読み込み中...", @@ -510,14 +504,6 @@ fn test_fluent_preserves_literal_placeholders_and_status_spacing() { get_text(Language::English, LocaleKey::TrayCreditsRemaining), "Credits remaining {}%" ); - assert_eq!( - get_text(Language::English, LocaleKey::UsedPercent), - "{:.0}% used" - ); - assert_eq!( - get_text(Language::English, LocaleKey::RemainingAmount), - "{:.2} remaining" - ); assert_eq!( get_text(Language::English, LocaleKey::UsageSpendKnownSubtotal), "≥{} known" @@ -534,10 +520,6 @@ fn test_brazilian_portuguese_preserves_placeholders_and_status_spacing() { get_text(Language::PortugueseBrazil, LocaleKey::TrayCreditsRemaining), "Créditos restantes {}%" ); - assert_eq!( - get_text(Language::PortugueseBrazil, LocaleKey::UsedPercent), - "{:.0}% usado" - ); } #[test] diff --git a/rust/src/locale/tr-TR.ftl b/rust/src/locale/tr-TR.ftl index 41ec3e2c98..160cbb6854 100644 --- a/rust/src/locale/tr-TR.ftl +++ b/rust/src/locale/tr-TR.ftl @@ -3,12 +3,9 @@ TabProviders = Sağlayıcılar TabNotifications = Bildirimler TabMenuBar = Menü Çubuğu TabMenu = Menü -TabApiKeys = API Anahtarları -TabCookies = Çerezler TabUsageSpend = Kullanım ve Harcama TabAdvanced = Gelişmiş TabAbout = Hakkında -TabShortcuts = Kısayollar InterfaceLanguage = Arayüz Dili PreferredCurrencyLabel = Tercih edilen para birimi PreferredCurrencyHelper = Desteklenen sağlayıcı maliyetlerini görüntüleme için dönüştürür. Otomatik, her sağlayıcının kaynak para birimini korur. @@ -19,8 +16,6 @@ StartAtLoginHelper = Sistem açıldıktan sonra otomatik olarak başlat StartMinimizedHelper = Sistem tepsisinde simge durumunda başlat ShowNotificationsHelper = Kullanım eşiklerine ulaşıldığında uyar SoundEnabledHelper = Eşiklere ulaşıldığında ses çal -HighUsageThresholdHelper = Bu kullanım düzeyinde uyarı göster -CriticalUsageThresholdHelper = Bu düzeyde kritik uyarı göster ShowNotifications = Bildirimleri Göster SoundEnabled = Sesli Uyarılar NotificationSoundTheme = Varsayılan ses grubu @@ -45,9 +40,7 @@ NotificationSoundEventSessionDepleted = Oturum kotası tükendi NotificationSoundEventSessionDepletedHelper = Bir oturum kotası %100'e ulaştı. NotificationSoundEventSessionRestored = Oturum yeniden kullanılabilir NotificationSoundEventSessionRestoredHelper = Tükenen bir oturum yeniden kullanılabilir oldu. -HighUsageThreshold = Yüksek Kullanım Eşiği HighUsageAlert = Yüksek Kullanım Uyarısı -CriticalUsageThreshold = Kritik Kullanım Eşiği CriticalUsageAlert = Kritik Uyarı PredictivePaceWarnings = Tahmini Kullanım Hızı Uyarıları PredictivePaceWarningsHelper = Codex veya Claude kullanımının sıfırlanmadan önce tükenmesi bekleniyorsa uyar @@ -72,41 +65,25 @@ CredentialExpiryNotifications = Kimlik bilgisi süresi dolma uyarıları CredentialExpiryNotificationsHelper = Bir sağlayıcı hesabında yeniden oturum açmak gerektiğinde bir kez uyar CredentialExpiryTitle = { "{}" } için yeniden oturum açmak gerekiyor CredentialExpiryBody = Hesap hatasını incelemek ve yeniden oturum açmak için CodexBar'ı açın. -UsageDisplay = Kullanım Gösterimi -ShowUsageAsUsed = Kullanımı Harcanan Olarak Göster -ShowUsageAsUsedHelper = Kalan yerine kullanılan yüzdeyi göster ResetTimeRelative = Göreli Sıfırlanma Zamanı ResetTimeRelativeHelper = "15:00" yerine "2 sa 30 dk" göster ShowResetWhenExhausted = Tükendiğinde sıfırlanma zamanını göster ShowResetWhenExhaustedHelper = Tükenen yüzdeyi canlı sıfırlanma geri sayımıyla değiştir ShowPace = Kullanım hızını göster ShowPaceHelper = Sağlayıcı kartlarında kullanım hızını, tempoya uygun bütçeleri ve tahmin metnini göster -TrayIcon = Sistem Tepsisi Simgesi -MergeTrayIcons = Tepsi Simgelerini Birleştir -MergeTrayIconsHelper = Tüm sağlayıcıları tek bir tepsi simgesinde göster -PerProviderTrayIcons = Sağlayıcı Başına Simge -PerProviderTrayIconsHelper = Etkin her sağlayıcı için ayrı tepsi simgesi göster ProviderEnabled = Etkin ProviderDisabled = Devre dışı -ProviderInfo = Bilgi ProviderUsage = Kullanım -AtlasCloudAvailableBalance = Kullanılabilir bakiye AtlasCloudBalance = Atlas Cloud bakiyesi PanelUsageDetails = Kullanım ayrıntıları AuthType = Kimlik Doğrulama DataSource = Veri Kaynağı -ProviderNotDetected = algılanmadı -ProviderLastFetchFailed = son veri alma başarısız ProviderUsageNotFetchedYet = kullanım henüz alınmadı -ProviderNotFetchedYetTitle = Henüz alınmadı -ProviderDisabledNoRecentData = Devre dışı — son veri yok ProviderSourceAutoShort = otomatik ProviderSourceWebShort = web ProviderSourceCliShort = cli ProviderSourceOauthShort = oauth ProviderSourceApiShort = api -ProviderSourceGithubApiShort = github api -ProviderSourceLocalShort = yerel ProviderSourceKiroEnvShort = kiro ortamı WayfinderGatewayTitle = Wayfinder Ağ Geçidi WayfinderGatewayLabel = Ağ Geçidi URL'si @@ -124,118 +101,41 @@ WayfinderSaved = Kaydedildi WayfinderOffline = Ağ geçidi çevrimdışı WayfinderDryRun = Deneme çalıştırması WayfinderMissingKeys = Eksik anahtarlar -TrackingItem = İzlenen Öğe -MainWindowLiveUsageData = Ana pencerede canlı kullanım verileri -StartTrackingUsage = Kullanımı izlemeye başlamak için etkinleştirin -ClickTrayIconForMetrics = Canlı ölçümler için tepsi simgesine tıklayın -BrowserCookieImport = Tarayıcı Çerezlerini İçe Aktar -ImportFromBrowser = Tarayıcıdan { "{}" } çerezlerini içe aktar -NoCookiesFoundInBrowser = { "{}" } içinde çerez bulunamadı. Lütfen önce oturum açın. -SelectBrowser = Tarayıcı seçin... -ImportCookies = Çerezleri İçe Aktar -ImportSuccess = { "{}" } çerezleri içe aktarıldı -ImportFailed = İçe aktarma başarısız: { "{}" } -SaveFailed = Kaydetme başarısız: { "{}" } -CookiesAutoImport = Çerezler Chrome, Edge, Brave ve Firefox'tan otomatik olarak içe aktarılır QuickActions = Hızlı İşlemler OpenProviderDashboard = { "{}" } Panosunu Aç -OllamaNoDashboard = Ollama yerel olarak çalışır, panosu yoktur -ApiKeysTitle = API Anahtarları -ApiKeysDescription = Kimlik doğrulaması gerektiren sağlayıcılar için erişim tokenlarını yapılandırın. AddKey = + Anahtar Ekle KeySet = Ayarlandı -KeyRequired = Anahtar Gerekli Remove = Kaldır -GetKey = Anahtar al → -SavedCookies = Kayıtlı Çerezler -AddManualCookie = Elle Çerez Ekle CookieHeader = Çerez Başlığı -PasteHere = Buraya yapıştırın... -DeleteCookie = Sil -CookieSaved = { "{}" } çerezleri kaydedildi -CookieDeleted = { "{}" } çerezleri silindi -RefreshSettings = Yenile Animations = Animasyonlar MenuBar = Menü Çubuğu -Fun = Eğlence -GlobalShortcut = Genel Kısayol Privacy = Gizlilik Updates = Güncellemeler UpdateChannel = Güncelleme kanalı -UpdateChannelStable = Kararlı -UpdateChannelBeta = Beta Never = Asla LastUpdated = Güncellendi NeverUpdated = Hiç güncellenmedi -MinutesAgo = { "{}" } dakika önce -HoursAgo = { "{}" } saat önce -DaysAgo = { "{}" } gün önce -BuiltWithRust = Rust + egui ile geliştirildi -OriginalMacOSVersion = Orijinal macOS sürümü -Links = Bağlantılar -BuildInfo = Derleme Bilgisi -EnabledProviders = Etkin Sağlayıcılar Appearance = Görünüm -ThemeSelection = Tema -LightMode = Açık -DarkMode = Koyu -AboutTitle = CodexBar hakkında Version = Sürüm -ActionRefreshAll = Tümünü Yenile -ActionSettings = Ayarlar -ActionClose = ✕ -ProviderAccount = Hesap ProviderSession = Oturum ProviderWeekly = Haftalık ProviderMonthly = 30 Günlük -ProviderModel = Model -ProviderPlan = Plan -ProviderNextReset = Sonraki Sıfırlama -ProviderNoRecentUsage = Yakın tarihli kullanım yok -ProviderNotSignedIn = Oturum açılmadı -SummaryTab = Özet StateLoadingProviders = Sağlayıcılar yükleniyor... -StateNoProviderData = Sağlayıcı verisi yok. StateNoProviderSelected = Sağlayıcı seçilmedi. -StateSummaryRefreshPending = Tüm sağlayıcı yenilemeleri bittikten sonra güncellenecek StateError = Hata -StateRetry = Yeniden Dene -StateDownload = İndir -StateRestartAndUpdate = Yeniden Başlat ve Güncelle -CreditsTitle = Krediler -UpdateRestartAndUpdate = Yeniden Başlat ve Güncelle -UpdateRetry = Yeniden Dene -UpdateDownload = İndir UpdateDownloading = İndiriliyor UpdateReady = Kurulmaya hazır -UpdateFailed = Güncelleme başarısız -ButtonOpenProviderSettings = Sağlayıcı ayarlarını aç MenuSettings = Ayarlar... MenuAbout = CodexBar hakkında MenuQuit = Çık -StatusJustUpdated = Az önce güncellendi -StatusUnableToGetUsage = Kullanım bilgisi alınamıyor ActionRefresh = Yenile ActionSwitchAccount = Hesap değiştir... ActionUsageDashboard = Kullanım panosu ActionStatusPage = Durum sayfası ActionCopyError = Kopyalama hatası ActionBuyCredits = Kredi satın al... -PaceOnTrack = Planlandığı gibi -PaceBehind = Geride MetricResetsIn = Sıfırlanmaya kalan -SectionUsageBreakdown = Kullanım Dağılımı -SectionCost = Maliyet ResetInProgress = Sıfırlanıyor... -TomorrowAt = Yarın saat { "{}" } -UsedPercent = %{ "{:.0}" } kullanıldı -RemainingPercent = %{ "{:.0}" } kaldı -RemainingAmount = { "{:.2}" } kaldı -Tokens1K = 1K token -TodayCost = Bugün: ${ "{:.2}" } -Last30DaysCost = Son 30 gün: ${ "{:.2}" } -StatusLabel = Durum: { "{}" } -TrayOpenCodexBar = Panoyu Ayrı Pencerede Aç TrayPopOutDashboard = Panoyu Ayrı Pencerede Aç TrayShowFloatBar = Yüzen Çubuğu Göster TrayStayAwakeActive = Uyanık Tut: yerel aracı oturumu etkin @@ -243,9 +143,7 @@ TrayRefreshAll = Tümünü Yenile TrayProviders = Sağlayıcılar TraySettings = Ayarlar... TrayCheckForUpdates = Güncellemeleri Denetle -TrayQuit = Çık TrayLoading = CodexBar - Yükleniyor... -TrayNoProviders = CodexBar - Kullanılabilir sağlayıcı yok TraySessionPercent = Oturum %{ "{}" } TrayWeeklyPercent = Haftalık %{ "{}" } TrayStatusError = { " (Hata)" } @@ -254,28 +152,19 @@ TrayStatusIncident = { " (Olay)" } TrayStatusPartial = { " (Kısmi kesinti)" } TrayWeeklyExhausted = Haftalık kota tükendi TrayCreditsRemaining = Kalan kredi %{ "{}" } -TrayStatusRowLoading = Yükleniyor... TrayStatusRowError = Hata -TrayCreditsRow = Krediler %{ "{}" } -TrayProviderPopOut = Panoyu Ayrı Pencerede Aç -TrayProviderRefresh = Yenile -TrayProviderSettings = Ayarlar... -TrayProviderQuit = Çık State = Durum Source = Kaynak -Updated = Güncellendi UpdatedJustNow = Az önce güncellendi UpdatedMinutesAgo = { "{}" } dakika önce güncellendi UpdatedHoursAgo = { "{}" } saat önce güncellendi UpdatedDaysAgo = { "{}" } gün önce güncellendi Status = Durum -AllSystemsOperational = Tüm sistemler çalışıyor Plan = Plan Account = Hesap ProviderSessionLabel = Oturum ProviderWeeklyLabel = Haftalık ClaudeScopedWeeklyLabel = { "{}" } haftalık -ProviderCodeReviewLabel = Kod incelemesi ResetsInShort = Sıfırlanmaya kalan ResetsInDaysHours = Sıfırlanmaya { "{}" } g { "{}" } sa ResetsInHoursMinutes = Sıfırlanmaya { "{}" } sa { "{}" } dk @@ -288,14 +177,7 @@ InventoryAvailableCount = { "{}" } kullanılabilir FloatBarShowCost = Yerel Maliyeti Göster FloatBarShowCostDescription = Yüzen çubukta tahmini yerel kullanım maliyetini gösterir. TrayDisplayTitle = Tepsi Görünümü -ShowInTray = Tepside göster CreditsLabel = Krediler -CreditsLeft = { "{:.1}" } kaldı -CostTitle = Maliyet -TodayCostFull = Bugün: ${ "{:.2}" } • { "{}" } token -Last30DaysCostFull = Son 30 gün: ${ "{:.2}" } • { "{}" } token -ProviderSettingsTitle = Ayarlar -ProviderAccountsTitle = Hesaplar ProviderOptionsTitle = Seçenekler MenuBarMetric = Menü çubuğu ölçümü MenuBarMetricHelper = Menü çubuğundaki yüzdeyi hangi pencerenin belirleyeceğini seçin. @@ -304,31 +186,18 @@ ProviderZedBrowserSession = Tarayıcı oturumu ProviderZedUsageSourceAutoHelp = Zed düzenleyici kimlik bilgisi kullanılır; tarayıcı faturalandırması yalnızca Tarayıcı oturumu seçildiğinde kullanılır. ProviderZedUsageSourceApiHelp = Yalnızca Zed düzenleyici kimlik bilgisi kullanılır. ProviderZedUsageSourceWebHelp = Token harcaması yalnızca seçilen zed.dev tarayıcı oturumundan veya kaydedilmiş Cookie başlığından okunur; düzenleyici kimlik bilgisine geri dönülmez. -ProviderNoCodexAccountsDetected = Henüz Codex hesabı algılanmadı. ProviderCodexAutoImportHelp = Otomatik olarak panel ekleri için tarayıcı çerezlerini içe aktarır. ProviderCodexHistoryHelp = Tempo tahminlerini kişiselleştirmek için yerel Codex kullanım geçmişini (8 hafta) depolar. -ProviderOpenAiCookies = OpenAI çerezleri -ProviderHistoricalTracking = Geçmiş takibi -ProviderOpenAiWebExtras = OpenAI web ek özellikleri -ProviderOpenAiWebExtrasHelp = chatgpt.com aracılığıyla kullanım dağılımını, kredi geçmişini ve kod incelemesini göster. -ProviderCodexCreditsUnavailable = Krediler kullanılamıyor; yenilemek için Codex'i çalışır durumda tutun. -ProviderCodexLastFetchFailedTitle = Son Codex veri alma işlemi başarısız: -ProviderCodexNotRunningHelp = Codex çalışmıyor. Önce bir Codex komutu çalıştırmayı deneyin. ProviderCookieSource = Çerez kaynağı CookieSourceManual = El ile ProviderManualCookieMissing = Çerez başlığı yapıştırılmadı. ProviderUseAutomaticCookies = Otomatik çerezleri kullan ProviderRegion = Bölge -ProviderClaudeCookies = Claude çerezleri ProviderClaudeCookiesHelp = Claude'un ayarlar kullanım sayfasıyla eşleştikleri için tarayıcı çerezleri/sessionKey tercih edilir. ProviderClaudeAvoidKeychainPrompts = Anahtar Zinciri istemlerini atla ProviderClaudeAvoidKeychainPromptsHelp = Claude kimlik bilgilerini okumak ve CodexBar Anahtar Zinciri istemlerini önlemek için /usr/bin/security kullanın. -ProviderClaudeDailyRoutinesUsage = Günlük rutinler kullanımını göster -ProviderClaudeDailyRoutinesUsageHelp = Claude web ve OAuth kullanımı için Günlük Rutinler kota satırını göster. ProviderClaudeAllowReadingClaudeCodeCredentials = Claude Code kimlik bilgilerini okumaya izin ver ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = CodexBar'ın daha isabetli kullanım verisi için Claude Code'un kendi OAuth kimlik bilgilerini okumasına (ve yenilemesine) izin verir. Varsayılan olarak kapalıdır; kapalıyken Otomatik mod, daha düşük isabetli CLI kullanımına düşer. -ProviderCodexSparkUsage = Codex Spark kullanımını göster -ProviderCodexSparkUsageHelp = Kredileri veya diğer ek kullanımları gizlemeden Codex Spark kota satırlarını göster. CopilotSeatCreditTitle = Copilot koltuğu yapay zekâ kredi hakkı CopilotSeatCreditHelper = Copilot kullanılan kredi sayacı için isteğe bağlı payda. Otomatik mod, bunu yalnızca ölçülen kota yoksa kullanır. CopilotSeatCreditInvalid = Sıfırdan büyük sonlu bir hak girin veya boş bırakın. @@ -349,9 +218,6 @@ CodexSwitchSuccess = Etkin hesap değiştirildi. CodexSwitchRestartPrompt = Geri yüklenen oturumu açmak için Codex Desktop yeniden başlatılsın mı? CodexAccountsRestartDesktop = Codex Desktop'ı Yeniden Başlat ProviderCursorCookieSourceHelp = Otomatik olarak tarayıcı çerezlerini veya kayıtlı oturumları içe aktarır. -ProviderCursorCreditsHelp = Dahil olan plan sınırlarının ötesindeki isteğe bağlı kullanım. -AutoFallbackHelp = Otomatik mod, tercih edilen kaynak başarısız olursa bir sonrakine geçer. -ProviderSourceOauthWeb = OAuth + Web Automatic = Otomatik Average = Ortalama ExtraUsage = Ek kullanım @@ -392,7 +258,6 @@ UsageSpendTokens = token UsageSpendKnownSubtotal = ≥{ "{}" } bilinen IncompleteRequestsLabel = Tamamlanmamış IncompleteRequestsDetail = { "{}" } isteğin nihai kullanım verisi yoktu; token ve maliyetten çıkarıldı -UsageSpendAllTimeHistory = Tüm zamanlar şuna dayanır: UsageSpendCustomPricing = özel fiyatlandırma UsageSpendRefresh = Yenile UsageSpendLoading = Taranıyor… @@ -406,7 +271,6 @@ UsageSpendColSource = Kaynak UsageSpendDailyLedger = Günlük kayıt UsageSpendDailyLedgerHelper = Kaydedilen günlük maliyet ve token toplamları. Bilinmeyen bir değer, kaynağın bu değeri belirlemediği anlamına gelir. UsageSpendNoDailyData = Henüz günlük geçmiş yok. -OverviewSpendTitle = Kullanım ve Harcama · 30 gün OverviewSpendProviderCoverage = { "{}" } / { "{}" } sağlayıcının harcaması var OverviewSpendEstimate = yerel/sağlayıcı tahminleri UsageSpendProjects = Projeler @@ -430,73 +294,27 @@ AgentSessionsSshHostsLabel = SSH sunucuları AgentSessionsSshHostsHelper = Virgülle ayrılmış SSH hedefleri. Bağlantılar etkileşimsiz modu ve kısa zaman aşımlarını kullanır. AgentSessionsLoading = Aracı oturumları aranıyor... AgentSessionsEmpty = Etkin aracı oturumu yok. -UpdatesTitle = Güncellemeler UpdateChannelChoice = Güncelleme kanalı UpdateChannelChoiceHelper = Kararlı ve beta önizleme sürümleri arasında seçim yapın AutoDownloadUpdates = Güncellemeleri otomatik denetle AutoDownloadUpdatesHelper = Yeni sürüm bulunduğunda yükleyici güncellemelerini arka planda indir -InstallUpdatesOnQuit = Çıkışta güncellemeleri kur -InstallUpdatesOnQuitHelper = CodexBar'dan çıktığınızda hazır yükleyiciyi otomatik olarak başlat -KeyboardShortcutsTitle = Klavye Kısayolları -GlobalShortcutLabel = Genel Kısayol -GlobalShortcutHelper = CodexBar'ı her yerden açmak için bu kısayola basın -ShortcutFormatHint = Biçim: Ctrl+Shift+Tuş, Alt+Ctrl+Tuş vb. Değişikliklerin uygulanması için yeniden başlatma gerekir. Saved = Kaydedildi (uygulamak için yeniden başlatın) InvalidFormat = Geçersiz kısayol biçimi -ShortcutHintPlaceholder = örn. Ctrl+Shift+U -SelectProvider = Bir sağlayıcı seçin -RefreshInterval30Sec = 30 sn RefreshInterval1Min = 1 dk RefreshInterval5Min = 5 dk -RefreshInterval10Min = 10 dk -BrowserCookiesTitle = Tarayıcı Çerezleri -CookieImport = Çerez İçe Aktarma Provider = Sağlayıcı -SelectPlaceholder = Seçin... -AutoRefreshInterval = Otomatik yenileme aralığı -AboutDescription = Orijinal macOS sürümünün Windows uyarlaması. -AboutDescriptionLine2 = Yapay zekâ sağlayıcı kullanımını sistem tepsisinden izleyin. -ViewOnGitHub = → GitHub'da Görüntüle SubmitIssue = → Sorun Bildir -MaintainedBy = CodexBar katkıda bulunanları tarafından sürdürülüyor -CommitLabel = Kayıt -BuildDateLabel = Derleme Save = Kaydet Cancel = İptal Label = Etiket Token = Token -AddAccount = Hesap ekle -AccountAdded = Hesap eklendi -AccountRemoved = Hesap kaldırıldı -AccountSwitched = Hesap değiştirildi -AccountLabelHint = örn. İş Hesabı, Kişisel... -EnterApiKeyFor = { "{}" } için API anahtarı girin PasteApiKeyHere = API anahtarınızı buraya yapıştırın... -ApiKeySaved = { "{}" } için API anahtarı kaydedildi -ApiKeyRemoved = { "{}" } için API anahtarı kaldırıldı -EnvironmentVariable = Ortam değişkeni -CookieSavedForProvider = { "{}" } için çerezler kaydedildi -CookieRemovedForProvider = { "{}" } için çerezler kaldırıldı -ShowUsedPercent = %{ "{:.0}" } kullanıldı -ShowRemainingPercent = %{ "{:.0}" } kaldı UpdateAvailableMessage = Güncelleme var: { "{}" } -UpdateReadyMessage = { "{}" } kurulmaya hazır -UpdateFailedMessage = Güncelleme başarısız: { "{}" } -UpdateDownloadingMessage = { "{}" } indiriliyor (%{ "{:.0}" }) -TabTokenAccounts = Tokenlar SectionRefresh = Otomasyon SectionNotifications = Bildirimler SectionUsageThresholds = Kullanım Eşikleri SectionKeyboard = Klavye -SectionUsageRendering = Kullanım gösterimi -SectionTime = Zaman SectionLanguage = Dil -SectionCredentialsSecurity = Kimlik Bilgileri ve Güvenlik -SectionDebug = Hata ayıklama -SectionApiKeys = API Anahtarları -SectionSavedCookies = Kayıtlı Çerezler -SectionImportFromBrowser = Tarayıcıdan İçe Aktar -SectionAddCookieManually = Elle Çerez Ekle SectionTokenAccounts = Token Hesapları SectionSavedAccounts = Kayıtlı Hesaplar SectionAddAccount = Hesap ekle @@ -572,8 +390,6 @@ OverviewLayoutLabel = Genel bakış düzeni OverviewLayoutHelper = Genel bakışta ne kadar bilgi gösterileceğini seçin. OverviewLayoutDetailed = Ayrıntılı OverviewLayoutCompact = Kompakt -EnableAnimationsLabel = Animasyonları etkinleştir -EnableAnimationsHelper = Yumuşak geçişler ve hareketli ilerleme çubukları. UpdateChannelStableOption = Kararlı UpdateChannelBetaOption = Beta CodexLocalLogsTitle = Codex yerel günlükleri @@ -591,23 +407,14 @@ ThemeAutoOption = Otomatik (sistem) ThemeLightOption = Açık ThemeDarkOption = Koyu SettingsStatusSaving = Kaydediliyor… -ApiKeysTabHint = Token tabanlı kimlik doğrulama kullanan sağlayıcılar için API anahtarlarını yapılandırın. Anahtarlar yerel olarak saklanır ve asla iletilmez. FetchingProviderData = Sağlayıcı verileri alınıyor… NoProvidersConfigured = Yapılandırılmış sağlayıcı yok. EnableProvidersHint = Kullanım verilerini görmek için Ayarlar'dan sağlayıcıları etkinleştirin. OpenSettingsButton = Ayarları Aç -TooltipRefresh = Yenile -TrayCardErrorBadge = Hata -SummaryProvidersLabel = sağlayıcı -SummaryRefreshing = yenileniyor… -SummaryFailed = başarısız -SummaryWithErrors = hatalı -DetailBackButton = Geri DetailWindowPrimary = Birincil DetailWindowSecondary = İkincil DetailWindowModelSpecific = Modele özel DetailWindowTertiary = Üçüncül -DetailWindowMinutesSuffix = dk'lık pencere DetailWindowExhausted = Tükendi DetailPaceTitle = Kullanım Hızı DetailPaceOnTrack = Planlandığı gibi @@ -676,7 +483,6 @@ PanelReserveRunsOutInDaysHours = { "{}" } g { "{}" } sa içinde tükenir PanelReserveRunsOutInHours = { "{}" } sa içinde tükenir FloatBarNoProviders = Sağlayıcı yok FloatBarRemainingSuffix = kaldı -BannerCheckingForUpdates = Güncellemeler denetleniyor… BannerUpdateAvailablePrefix = Güncelleme BannerDownloadButton = İndir BannerViewRelease = Sürümü Görüntüle @@ -697,11 +503,6 @@ ProviderStatusStale = Eski ProviderStatusError = Hata ProviderStatusLoading = Yükleniyor ProviderStatusDisabled = Devre dışı -ProviderDetailPlaceholder = Ayrıntı bölmesi 6b aşamasında eklenecek -ProviderIssueNeedsSignIn = oturum açılması gerekiyor -ProviderIssueFetchNeedsAttention = Sağlayıcı veri alma işlemi ilgilenmenizi gerektiriyor -ProviderIssueCopy = Kopyala -ProviderIssueUnsupportedSourceModePrefix = Bu sağlayıcı için kaynak modu desteklenmiyor ProviderIssueAuthRequired = Oturum açma gerekli ProviderIssueSessionExpired = Oturumun süresi doldu ProviderIssueLocalRuntimeOffline = Yerel çalışma zamanı çevrimdışı @@ -747,7 +548,6 @@ CredsStatusUnavailable = Kullanılamıyor CredsOpenFolderAction = Kimlik bilgileri klasörünü aç CredsRefreshDetectionAction = Algılamayı yenile CredsSavePathAction = Yolu kaydet -CredsBrowseAction = Göz At… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = OAuth kimlik bilgilerini şuradan kullanır: CredsGeminiCliSetupAction = Gemini CLI'ı Kur @@ -762,8 +562,6 @@ CredsJetBrainsHelperCustomPrefix = Özel IDE temel yolu kullanılıyor CredsJetBrainsHelperMissing = AI Assistant etkin bir JetBrains IDE kurun, ardından CodexBar'ı yenileyin. CredsJetBrainsCustomPathLabel = Özel yol CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = İzlenecek JetBrains IDE'yi seçin. -CredsJetBrainsAutoDetectOption = Otomatik algıla CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = Algılandığı konum: CredsKiroHelperMissing = kiro-cli: PATH'te veya bilinen kurulum konumlarında bulunamadı. @@ -775,17 +573,9 @@ TokenAccountAddButton = Hesap ekle TokenAccountGithubLoginButton = GitHub ile Oturum Aç TokenAccountEmpty = Bu sağlayıcı için kaydedilmiş hesap yok. TokenAccountLabelPlaceholder = Etiket (örn. İş, Kişisel)… -TokenAccountProviderLabel = Sağlayıcı -TokenAccountProviderPlaceholder = Sağlayıcı seçin… TokenAccountAddedPrefix = Eklendi TokenAccountUsedPrefix = Kullanıldı -TokenAccountTabHint = Sağlayıcı başına birden fazla oturum veya API tokenını yönetin. Etkin hesap tüm veri alma işlemlerinde kullanılır. Burada yalnızca elle token gerektiren sağlayıcılar görünür. -TokenAccountNoSupported = Şu anda token hesaplarını destekleyen sağlayıcı yok. TokenAccountInlineSummary = Token hesapları -TrayPaceBadgeSlow = Yavaş -TrayPaceBadgeSteady = Dengeli -TrayPaceBadgeRacing = Hızlı -TrayPaceBadgeBurning = Çok hızlı TrayResetsInLabel = { "{}" } içinde sıfırlanır TrayResetsDueNow = Sıfırlanıyor… @@ -828,10 +618,6 @@ DiagnosticsSectionHeading = Tanılama DiagnosticsCopyButton = Tanılamayı kopyala DiagnosticsCopied = Tanılama panoya kopyalandı DiagnosticsCopyFailed = Tanılama kopyalanamadı -SavedCookiesHint = Tarayıcıyla kimlik doğrulayan sağlayıcılar için elle eklenen çerez geçersiz kılmaları. Otomatik tarayıcı çerezi çıkarma kullanılamadığında bunlar kullanılır. -ImportFromBrowserHint = Oturum açılmış bir tarayıcıdan çerezleri otomatik olarak çıkarın. Tarayıcı bu bilgisayarda kurulu olmalı ve sağlayıcıda oturum açmış olmalısınız. -NoBrowsersDetectedHint = Bu bilgisayarda desteklenen tarayıcı algılanmadı veya otomatik çerez çıkarma kullanılamıyor (Chrome, Edge, Brave ya da Firefox kurulu Windows gerekir). Bunun yerine aşağıdaki elle yapıştırma formunu kullanın. -CookieHeaderValuePlaceholder = Çerez başlığı değerini yapıştırın… ApiKeyTitle = API Anahtarı ApiKeyNotSet = Ayarlanmadı ApiKeyUpdate = Güncelle @@ -972,7 +758,6 @@ PanelPeriodTokens = { "{}" } token OverviewSpendPeriodTitle = Kullanım ve Harcama · { "{}" } UsageSpendModelsPeriodCaption = Yerel model geçmişi, dönem: { "{}" }. UsageSpendProjectsPeriodCaption = Sıralı Codex yerel proje harcaması, dönem: { "{}" } -BurndownChartTitle = Kalan kullanım BurndownChartAriaLabel = Kaydedilen kalan kota azalışı UsageSpendShare = Paylaşım kartını dışa aktar (PNG) UsageSpendCopyJson = JSON'u kopyala @@ -994,7 +779,6 @@ NetworkProxyUrlHelper = Örnek: http://127.0.0.1:7890 (yalnızca http veya https NetworkProxyUserLabel = Kullanıcı adı (isteğe bağlı) NetworkProxyPasswordLabel = Parola (isteğe bağlı) NetworkProxyPasswordHelper = Yerel settings.json dosyasında saklanır. Mümkünse kimlik doğrulamasız yerel bir proxy tercih edin. -NetworkProxyInvalidUrl = Geçersiz proxy URL'si. http://sunucu:port biçimini kullanın. DeepSeekPricingTitle = DeepSeek fiyatlandırması DeepSeekPricingStandard = Standart / tarife öncesi @@ -1005,7 +789,6 @@ DeepSeekPricingNext = Sonraki geçiş: DeepSeekPricingEffective = Geçerli olduğu yerel saat: DeepSeekPricingAdvice = Resmî tarife: yoğun saatler UTC 01:00-04:00 ve 06:00-10:00; yoğun olmayan saatlerde yarı fiyat. MistralMonthlySpend = Aylık API harcaması -MistralMonthlySpendHelper = Kullandıkça öde Mistral hesapları için geçerli ayın API kullanımı. ProviderRaycastAutoImportHelp = Chrome'da açık olan www.raycast.com oturumunu otomatik olarak içe aktarır. ProviderRaycastManualCookieHelp = www.raycast.com/settings adresinden bir Cookie başlığı yapıştırın. ProviderRaycastCookiesDisabled = Raycast çerezleri devre dışı. diff --git a/rust/src/locale/uk-UA.ftl b/rust/src/locale/uk-UA.ftl index 525fd917c6..e427150bb5 100644 --- a/rust/src/locale/uk-UA.ftl +++ b/rust/src/locale/uk-UA.ftl @@ -3,12 +3,9 @@ TabProviders = Провайдери TabNotifications = Сповіщення TabMenuBar = Трей TabMenu = Меню -TabApiKeys = API-ключі -TabCookies = Файли cookie TabUsageSpend = Використання та витрати TabAdvanced = Додатково TabAbout = Про програму -TabShortcuts = Комбінації клавіш InterfaceLanguage = Мова інтерфейсу PreferredCurrencyLabel = Валюта PreferredCurrencyHelper = Перераховувати витрати підтримуваних провайдерів для показу. «Авто» зберігає власну валюту кожного провайдера. @@ -19,8 +16,6 @@ StartAtLoginHelper = Автоматично запускати після вхо StartMinimizedHelper = Запускати згорнутою в системний трей ShowNotificationsHelper = Сповіщати, коли досягнуто порогів використання SoundEnabledHelper = Відтворювати звук, коли досягнуто порогів -HighUsageThresholdHelper = Показувати попередження на цьому рівні використання -CriticalUsageThresholdHelper = Показувати критичне сповіщення на цьому рівні ShowNotifications = Показувати сповіщення SoundEnabled = Звукові сповіщення NotificationSoundTheme = Типовий набір звуків @@ -45,9 +40,7 @@ NotificationSoundEventSessionDepleted = Сеанс вичерпано NotificationSoundEventSessionDepletedHelper = Квота сеансу досягла 100%. NotificationSoundEventSessionRestored = Сеанс відновлено NotificationSoundEventSessionRestoredHelper = Вичерпаний сеанс знову доступний. -HighUsageThreshold = Поріг високого використання HighUsageAlert = Сповіщення про високе використання -CriticalUsageThreshold = Критичний поріг використання CriticalUsageAlert = Критичне сповіщення PredictivePaceWarnings = Попередження за прогнозом темпу PredictivePaceWarningsHelper = Попереджати, якщо ліміт Codex або Claude, імовірно, вичерпається до скидання @@ -72,41 +65,25 @@ CredentialExpiryNotifications = Сповіщення про завершення CredentialExpiryNotificationsHelper = Один раз сповістити, коли для облікового запису провайдера потрібно знову увійти CredentialExpiryTitle = { "{}" }: потрібно знову увійти CredentialExpiryBody = Відкрийте CodexBar, щоб переглянути помилку облікового запису й знову увійти. -UsageDisplay = Показ використання -ShowUsageAsUsed = Показувати використане -ShowUsageAsUsedHelper = Показувати відсоток використаного замість залишку ResetTimeRelative = Відносний час скидання ResetTimeRelativeHelper = Показувати «2 год 30 хв» замість «15:00» ShowResetWhenExhausted = Показувати час скидання, коли вичерпано ShowResetWhenExhaustedHelper = Замінювати вичерпаний відсоток зворотним відліком до скидання ShowPace = Показувати темп ShowPaceHelper = Показувати в картках провайдерів темп використання, бюджет за темпом і прогноз -TrayIcon = Значок у треї -MergeTrayIcons = Об’єднати значки в треї -MergeTrayIconsHelper = Показувати всіх провайдерів одним значком у треї -PerProviderTrayIcons = Значок для кожного провайдера -PerProviderTrayIconsHelper = Показувати окремий значок у треї для кожного ввімкненого провайдера ProviderEnabled = Увімкнено ProviderDisabled = Вимкнено -ProviderInfo = Відомості ProviderUsage = Використання -AtlasCloudAvailableBalance = Доступний баланс AtlasCloudBalance = Баланс Atlas Cloud PanelUsageDetails = Докладно про використання AuthType = Автентифікація DataSource = Джерело даних -ProviderNotDetected = не виявлено -ProviderLastFetchFailed = останнє отримання не вдалося ProviderUsageNotFetchedYet = дані використання ще не отримано -ProviderNotFetchedYetTitle = Ще не отримано -ProviderDisabledNoRecentData = Вимкнено – немає свіжих даних ProviderSourceAutoShort = авто ProviderSourceWebShort = веб ProviderSourceCliShort = CLI ProviderSourceOauthShort = OAuth ProviderSourceApiShort = API -ProviderSourceGithubApiShort = API GitHub -ProviderSourceLocalShort = локально ProviderSourceKiroEnvShort = середовище Kiro WayfinderGatewayTitle = Шлюз Wayfinder WayfinderGatewayLabel = URL-адреса шлюзу @@ -124,118 +101,41 @@ WayfinderSaved = Заощаджено WayfinderOffline = Шлюз недоступний WayfinderDryRun = Пробний запуск WayfinderMissingKeys = Бракує ключів -TrackingItem = Відстежуваний елемент -MainWindowLiveUsageData = Поточні дані використання в головному вікні -StartTrackingUsage = Увімкніть, щоб почати відстежувати використання -ClickTrayIconForMetrics = Клацніть значок у треї, щоб переглянути поточні показники -BrowserCookieImport = Імпорт файлів cookie з браузера -ImportFromBrowser = Імпортувати файли cookie { "{}" } з браузера -NoCookiesFoundInBrowser = У { "{}" } не знайдено файлів cookie. Спочатку увійдіть. -SelectBrowser = Виберіть браузер... -ImportCookies = Імпортувати файли cookie -ImportSuccess = Імпортовано файли cookie для { "{}" } -ImportFailed = Не вдалося імпортувати: { "{}" } -SaveFailed = Не вдалося зберегти: { "{}" } -CookiesAutoImport = Файли cookie автоматично імпортуються з Chrome, Edge, Brave і Firefox QuickActions = Швидкі дії OpenProviderDashboard = Відкрити панель керування { "{}" } -OllamaNoDashboard = Ollama працює локально, панелі керування немає -ApiKeysTitle = API-ключі -ApiKeysDescription = Налаштуйте токени доступу для провайдерів, які потребують автентифікації. AddKey = + Додати ключ KeySet = Задано -KeyRequired = Потрібен ключ Remove = Видалити -GetKey = Отримати ключ → -SavedCookies = Збережені файли cookie -AddManualCookie = Додати cookie вручну CookieHeader = Заголовок Cookie -PasteHere = Вставте сюди... -DeleteCookie = Видалити -CookieSaved = Збережено cookie { "{}" } -CookieDeleted = Видалено cookie для { "{}" } -RefreshSettings = Оновлення даних Animations = Анімація MenuBar = Трей -Fun = Розваги -GlobalShortcut = Глобальна комбінація клавіш Privacy = Конфіденційність Updates = Оновлення UpdateChannel = Канал оновлень -UpdateChannelStable = Стабільний -UpdateChannelBeta = Бета Never = Ніколи LastUpdated = Оновлено NeverUpdated = Ще не оновлювалося -MinutesAgo = { "{}" } хв тому -HoursAgo = { "{}" } год тому -DaysAgo = { "{}" } дн. тому -BuiltWithRust = Створено на Rust + egui -OriginalMacOSVersion = Оригінальна версія для macOS -Links = Посилання -BuildInfo = Відомості про збірку -EnabledProviders = Увімкнені провайдери Appearance = Вигляд -ThemeSelection = Тема -LightMode = Світла -DarkMode = Темна -AboutTitle = Про CodexBar Version = Версія -ActionRefreshAll = Оновити все -ActionSettings = Налаштування -ActionClose = ✕ -ProviderAccount = Обліковий запис ProviderSession = Сеанс ProviderWeekly = Тижневий ProviderMonthly = 30 днів -ProviderModel = Модель -ProviderPlan = План -ProviderNextReset = Наступне скидання -ProviderNoRecentUsage = Нещодавнього використання немає -ProviderNotSignedIn = Вхід не виконано -SummaryTab = Підсумок StateLoadingProviders = Завантаження провайдерів... -StateNoProviderData = Немає даних провайдера. StateNoProviderSelected = Провайдера не вибрано. -StateSummaryRefreshPending = Оновиться, коли завершаться оновлення всіх провайдерів StateError = Помилка -StateRetry = Повторити -StateDownload = Завантажити -StateRestartAndUpdate = Перезапустити й оновити -CreditsTitle = Кредити -UpdateRestartAndUpdate = Перезапустити й оновити -UpdateRetry = Повторити -UpdateDownload = Завантажити UpdateDownloading = Завантаження UpdateReady = Готово до встановлення -UpdateFailed = Не вдалося оновити -ButtonOpenProviderSettings = Відкрити налаштування провайдера MenuSettings = Налаштування... MenuAbout = Про CodexBar MenuQuit = Вийти -StatusJustUpdated = Щойно оновлено -StatusUnableToGetUsage = Не вдалося отримати дані про використання ActionRefresh = Оновити ActionSwitchAccount = Перемкнути обліковий запис... ActionUsageDashboard = Панель використання ActionStatusPage = Сторінка стану ActionCopyError = Копіювати помилку ActionBuyCredits = Купити кредити... -PaceOnTrack = За графіком -PaceBehind = Позаду MetricResetsIn = Скинеться через -SectionUsageBreakdown = Розподіл використання -SectionCost = Вартість ResetInProgress = Скидання... -TomorrowAt = Завтра о { "{}" } -UsedPercent = Використано { "{:.0}" }% -RemainingPercent = Залишилося { "{:.0}" }% -RemainingAmount = Залишилося { "{:.2}" } -Tokens1K = 1 тис. токенів -TodayCost = Сьогодні: ${ "{:.2}" } -Last30DaysCost = Останні 30 днів: ${ "{:.2}" } -StatusLabel = Стан: { "{}" } -TrayOpenCodexBar = Відкрити панель окремо TrayPopOutDashboard = Відкрити панель окремо TrayShowFloatBar = Показати плаваючу панель TrayStayAwakeActive = Без сну: триває локальний сеанс агента @@ -243,9 +143,7 @@ TrayRefreshAll = Оновити все TrayProviders = Провайдери TraySettings = Налаштування... TrayCheckForUpdates = Перевірити оновлення -TrayQuit = Вийти TrayLoading = CodexBar - Завантаження... -TrayNoProviders = CodexBar - Немає доступних провайдерів TraySessionPercent = Сеанс { "{}" }% TrayWeeklyPercent = Тиждень { "{}" }% TrayStatusError = { " (Помилка)" } @@ -254,28 +152,19 @@ TrayStatusIncident = { " (Інцидент)" } TrayStatusPartial = { " (Частковий збій)" } TrayWeeklyExhausted = Тижневу квоту вичерпано TrayCreditsRemaining = Залишок кредитів { "{}" }% -TrayStatusRowLoading = Завантаження... TrayStatusRowError = Помилка -TrayCreditsRow = Кредити { "{}" }% -TrayProviderPopOut = Відкрити панель окремо -TrayProviderRefresh = Оновити -TrayProviderSettings = Налаштування... -TrayProviderQuit = Вийти State = Стан Source = Джерело -Updated = Оновлено UpdatedJustNow = Оновлено щойно UpdatedMinutesAgo = { "{}" } хв тому UpdatedHoursAgo = { "{}" } год тому UpdatedDaysAgo = { "{}" } дн. тому Status = Стан -AllSystemsOperational = Усі системи працюють Plan = План Account = Обліковий запис ProviderSessionLabel = Сеанс ProviderWeeklyLabel = За тиждень ClaudeScopedWeeklyLabel = { "{}" } за тиждень -ProviderCodeReviewLabel = Рев’ю коду ResetsInShort = Скинеться через ResetsInDaysHours = Скинеться через { "{}" } дн. { "{}" } год ResetsInHoursMinutes = Скинеться через { "{}" } год { "{}" } хв @@ -288,14 +177,7 @@ InventoryAvailableCount = Доступно: { "{}" } FloatBarShowCost = Показувати локальну вартість FloatBarShowCostDescription = Показує на плаваючій панелі орієнтовну вартість локального використання. TrayDisplayTitle = Відображення в треї -ShowInTray = Показувати в треї CreditsLabel = Кредити -CreditsLeft = Залишилося { "{:.1}" } -CostTitle = Вартість -TodayCostFull = Сьогодні: ${ "{:.2}" } • токенів: { "{}" } -Last30DaysCostFull = Останні 30 днів: ${ "{:.2}" } • токенів: { "{}" } -ProviderSettingsTitle = Налаштування -ProviderAccountsTitle = Облікові записи ProviderOptionsTitle = Параметри MenuBarMetric = Показник меню та плаваючої панелі MenuBarMetricHelper = Виберіть вікно квоти, від якого рахуються відсотки в меню та на плаваючій панелі. @@ -304,31 +186,18 @@ ProviderZedBrowserSession = Сеанс браузера ProviderZedUsageSourceAutoHelp = Використовуються облікові дані редактора Zed; дані про оплату з браузера – лише коли вибрано «Сеанс браузера». ProviderZedUsageSourceApiHelp = Використовуються лише облікові дані редактора Zed. ProviderZedUsageSourceWebHelp = Витрати токенів зчитуються лише з вибраного сеансу zed.dev у браузері або збереженого заголовка Cookie; облікові дані редактора як запасний варіант не використовуються. -ProviderNoCodexAccountsDetected = Облікових записів Codex поки не виявлено. ProviderCodexAutoImportHelp = «Автоматично» – імпорт файлів cookie з браузера для додаткових даних панелі. ProviderCodexHistoryHelp = Зберігає локальну історію використання Codex (8 тижнів), щоб точніше прогнозувати темп. -ProviderOpenAiCookies = Файли cookie OpenAI -ProviderHistoricalTracking = Відстеження історії -ProviderOpenAiWebExtras = Веб-доповнення OpenAI -ProviderOpenAiWebExtrasHelp = Показувати розподіл використання, історію кредитів і рев’ю коду через chatgpt.com. -ProviderCodexCreditsUnavailable = Кредити недоступні; не закривайте Codex, щоб дані оновилися. -ProviderCodexLastFetchFailedTitle = Не вдалося отримати дані Codex востаннє: -ProviderCodexNotRunningHelp = Codex не запущено. Спершу виконайте будь-яку команду Codex. ProviderCookieSource = Джерело файлів cookie CookieSourceManual = Вручну ProviderManualCookieMissing = Заголовок Cookie не вставлено. ProviderUseAutomaticCookies = Брати cookie автоматично ProviderRegion = Регіон -ProviderClaudeCookies = Файли cookie Claude ProviderClaudeCookiesHelp = Перевага за cookie/sessionKey з браузера, бо вони збігаються зі сторінкою використання в налаштуваннях Claude. ProviderClaudeAvoidKeychainPrompts = Без запитів сховища облікових даних ProviderClaudeAvoidKeychainPromptsHelp = Читати облікові дані Claude через /usr/bin/security, щоб CodexBar не викликав запитів сховища облікових даних. -ProviderClaudeDailyRoutinesUsage = Показувати використання Daily Routines -ProviderClaudeDailyRoutinesUsageHelp = Показувати рядок квоти Daily Routines для використання Claude через веб і OAuth. ProviderClaudeAllowReadingClaudeCodeCredentials = Дозволити читати облікові дані Claude Code ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = CodexBar зможе читати (й оновлювати) власні облікові дані OAuth від Claude Code, щоб точніше показувати використання. За замовчуванням вимкнено; без цього режим «Авто» переходить на менш точні дані з CLI. -ProviderCodexSparkUsage = Показувати використання Codex Spark -ProviderCodexSparkUsageHelp = Показувати рядки квот Codex Spark, не приховуючи кредити й інше додаткове використання. CopilotSeatCreditTitle = Ліміт AI-кредитів на місце Copilot CopilotSeatCreditHelper = Необов’язковий знаменник для лічильника використаних кредитів Copilot. В автоматичному режимі застосовується, лише якщо квоти з обліком немає. CopilotSeatCreditInvalid = Введіть скінченне число, більше за нуль, або залиште поле порожнім. @@ -349,9 +218,6 @@ CodexSwitchSuccess = Активний обліковий запис перемк CodexSwitchRestartPrompt = Перезапустити Codex Desktop, щоб завантажити відновлений сеанс? CodexAccountsRestartDesktop = Перезапустити Codex Desktop ProviderCursorCookieSourceHelp = «Автоматично» – імпорт файлів cookie з браузера або збережених сеансів. -ProviderCursorCreditsHelp = Використання на вимогу понад ліміти, включені в план. -AutoFallbackHelp = «Авто» переходить на наступне джерело, якщо пріоритетне не спрацювало. -ProviderSourceOauthWeb = OAuth + веб Automatic = Автоматично Average = Середнє ExtraUsage = Додаткове використання @@ -392,12 +258,10 @@ UsageSpendTokens = токенів UsageSpendKnownSubtotal = ≥{ "{}" } відомо IncompleteRequestsLabel = Неповні IncompleteRequestsDetail = Запитів без підсумкового використання: { "{}" }; їх не враховано в токенах і вартості -UsageSpendAllTimeHistory = Дані за весь час базуються на останніх UsageSpendCustomPricing = власні ціни UsageSpendDailyLedger = Журнал за днями UsageSpendDailyLedgerHelper = Записані денні підсумки вартості й токенів. «Невідомо» означає, що джерело не визначило це значення. UsageSpendNoDailyData = Історії за днями поки немає. -OverviewSpendTitle = Використання та витрати · 30 дн. OverviewSpendProviderCoverage = { "{}" } з { "{}" } провайдерів мають витрати OverviewSpendEstimate = оцінка: локальна / провайдера UsageSpendProjects = Проєкти @@ -430,73 +294,27 @@ AgentSessionsSshHostsLabel = SSH-хости AgentSessionsSshHostsHelper = SSH-адреси через кому. З’єднання працюють у неінтерактивному режимі з короткими тайм-аутами. AgentSessionsLoading = Пошук сеансів агентів... AgentSessionsEmpty = Немає активних сеансів агентів. -UpdatesTitle = Оновлення UpdateChannelChoice = Канал оновлень UpdateChannelChoiceHelper = Виберіть стабільні версії або попередні бета-версії AutoDownloadUpdates = Автоматично перевіряти оновлення AutoDownloadUpdatesHelper = Завантажувати інсталятор оновлення у фоні, коли знайдено новий випуск -InstallUpdatesOnQuit = Встановлювати оновлення під час виходу -InstallUpdatesOnQuitHelper = Автоматично запускати готовий інсталятор, коли ви виходите з CodexBar -KeyboardShortcutsTitle = Комбінації клавіш -GlobalShortcutLabel = Глобальна комбінація клавіш -GlobalShortcutHelper = Натисніть цю комбінацію, щоб відкрити CodexBar звідусіль -ShortcutFormatHint = Формат: Ctrl+Shift+Key, Alt+Ctrl+Key тощо. Щоб застосувати зміни, потрібен перезапуск. Saved = Збережено (перезапустіть, щоб застосувати) InvalidFormat = Неправильний формат комбінації клавіш -ShortcutHintPlaceholder = напр., Ctrl+Shift+U -SelectProvider = Виберіть провайдера -RefreshInterval30Sec = 30 с RefreshInterval1Min = 1 хв RefreshInterval5Min = 5 хв -RefreshInterval10Min = 10 хв -BrowserCookiesTitle = Файли cookie браузера -CookieImport = Імпорт файлів cookie Provider = Провайдер -SelectPlaceholder = Виберіть... -AutoRefreshInterval = Інтервал автооновлення -AboutDescription = Порт для Windows оригінальної версії для macOS. -AboutDescriptionLine2 = Стежте за використанням AI-провайдерів у системному треї. -ViewOnGitHub = → Переглянути на GitHub SubmitIssue = → Повідомити про проблему -MaintainedBy = Підтримують учасники проєкту CodexBar -CommitLabel = Коміт -BuildDateLabel = Зібрано Save = Зберегти Cancel = Скасувати Label = Назва Token = Токен -AddAccount = Додати обліковий запис -AccountAdded = Обліковий запис додано -AccountRemoved = Обліковий запис видалено -AccountSwitched = Обліковий запис перемкнено -AccountLabelHint = напр., Робочий, Особистий... -EnterApiKeyFor = Введіть API-ключ для { "{}" } PasteApiKeyHere = Вставте сюди свій API-ключ... -ApiKeySaved = API-ключ для { "{}" } збережено -ApiKeyRemoved = API-ключ для { "{}" } видалено -EnvironmentVariable = Змінна середовища -CookieSavedForProvider = Файли cookie для { "{}" } збережено -CookieRemovedForProvider = Файли cookie для { "{}" } видалено -ShowUsedPercent = Використано { "{:.0}" }% -ShowRemainingPercent = Залишилося { "{:.0}" }% UpdateAvailableMessage = Доступне оновлення: { "{}" } -UpdateReadyMessage = { "{}" } – готово до встановлення -UpdateFailedMessage = Не вдалося оновити: { "{}" } -UpdateDownloadingMessage = Завантаження { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = Токени SectionRefresh = Автоматизація SectionNotifications = Сповіщення SectionUsageThresholds = Пороги використання SectionKeyboard = Клавіатура -SectionUsageRendering = Відображення використання -SectionTime = Час SectionLanguage = Мова -SectionCredentialsSecurity = Облікові дані та безпека -SectionDebug = Налагодження -SectionApiKeys = API-ключі -SectionSavedCookies = Збережені файли cookie -SectionImportFromBrowser = Імпорт із браузера -SectionAddCookieManually = Додати файли cookie вручну SectionTokenAccounts = Облікові записи з токенами SectionSavedAccounts = Збережені облікові записи SectionAddAccount = Додати обліковий запис @@ -572,8 +390,6 @@ OverviewLayoutDetailed = Докладно OverviewLayoutCompact = Компактно ShowAllTokenAccountsLabel = Показувати всі облікові записи з токенами ShowAllTokenAccountsHelper = Показувати в меню провайдерів усі облікові записи з токенами, не згортаючи їх. -EnableAnimationsLabel = Увімкнути анімацію -EnableAnimationsHelper = Плавні переходи й анімовані індикатори прогресу. UpdateChannelStableOption = Стабільний UpdateChannelBetaOption = Бета CodexLocalLogsTitle = Локальні журнали Codex @@ -591,23 +407,14 @@ ThemeAutoOption = Авто (система) ThemeLightOption = Світла ThemeDarkOption = Темна SettingsStatusSaving = Збереження… -ApiKeysTabHint = Налаштуйте API-ключі для провайдерів, що використовують автентифікацію за токеном. Ключі зберігаються локально й нікуди не передаються. FetchingProviderData = Отримання даних провайдерів… NoProvidersConfigured = Провайдерів не налаштовано. EnableProvidersHint = Увімкніть провайдерів у налаштуваннях, щоб бачити дані про використання. OpenSettingsButton = Відкрити налаштування -TooltipRefresh = Оновити -TrayCardErrorBadge = Помилка -SummaryProvidersLabel = пров. -SummaryRefreshing = оновлення… -SummaryFailed = не оновлено -SummaryWithErrors = з помилками -DetailBackButton = Назад DetailWindowPrimary = Основне DetailWindowSecondary = Додаткове DetailWindowModelSpecific = Для окремих моделей DetailWindowTertiary = Третє -DetailWindowMinutesSuffix = -хвилинне вікно DetailWindowExhausted = Вичерпано DetailPaceTitle = Темп DetailPaceOnTrack = За графіком @@ -676,7 +483,6 @@ PanelReserveRunsOutInDaysHours = Закінчиться через { "{}" } дн PanelReserveRunsOutInHours = Закінчиться через { "{}" } год FloatBarNoProviders = Немає провайдерів FloatBarRemainingSuffix = залишилося -BannerCheckingForUpdates = Перевірка оновлень… BannerUpdateAvailablePrefix = Оновлення BannerDownloadButton = Завантажити BannerViewRelease = Переглянути випуск @@ -697,11 +503,6 @@ ProviderStatusStale = Застаріло ProviderStatusError = Помилка ProviderStatusLoading = Завантаження ProviderStatusDisabled = Вимкнено -ProviderDetailPlaceholder = Панель подробиць з’явиться на етапі 6b -ProviderIssueNeedsSignIn = потрібно увійти -ProviderIssueFetchNeedsAttention = Отримання даних від провайдера потребує уваги -ProviderIssueCopy = Копіювати -ProviderIssueUnsupportedSourceModePrefix = Режим джерела не підтримується для цього провайдера ProviderIssueAuthRequired = Потрібно увійти ProviderIssueSessionExpired = Сеанс завершився ProviderIssueLocalRuntimeOffline = Локальне середовище не працює @@ -747,7 +548,6 @@ CredsStatusUnavailable = Недоступно CredsOpenFolderAction = Відкрити папку облікових даних CredsRefreshDetectionAction = Виявити повторно CredsSavePathAction = Зберегти шлях -CredsBrowseAction = Огляд… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = Використовує облікові дані OAuth із CredsGeminiCliSetupAction = Налаштувати Gemini CLI @@ -762,8 +562,6 @@ CredsJetBrainsHelperCustomPrefix = Використовується власни CredsJetBrainsHelperMissing = Установіть IDE JetBrains з увімкненим AI Assistant, потім оновіть CodexBar. CredsJetBrainsCustomPathLabel = Власний шлях CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = Виберіть IDE JetBrains для відстеження. -CredsJetBrainsAutoDetectOption = Автовизначення CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = Виявлено в CredsKiroHelperMissing = kiro-cli: не знайдено в PATH і у відомих місцях встановлення. @@ -775,17 +573,9 @@ TokenAccountAddButton = Додати обліковий запис TokenAccountGithubLoginButton = Увійти через GitHub TokenAccountEmpty = Для цього провайдера немає збережених облікових записів. TokenAccountLabelPlaceholder = Мітка (напр., «Робочий», «Особистий»)… -TokenAccountProviderLabel = Провайдер -TokenAccountProviderPlaceholder = Виберіть провайдера… TokenAccountAddedPrefix = Додано TokenAccountUsedPrefix = Використано -TokenAccountTabHint = Керуйте кількома токенами сеансу або API-токенами для кожного провайдера. Для всіх запитів використовується активний обліковий запис. Тут показано лише провайдерів, яким потрібні токени, введені вручну. -TokenAccountNoSupported = Зараз жоден провайдер не підтримує облікові записи з токенами. TokenAccountInlineSummary = Облікові записи з токенами -TrayPaceBadgeSlow = Повільно -TrayPaceBadgeSteady = Рівно -TrayPaceBadgeRacing = Швидко -TrayPaceBadgeBurning = Дуже швидко TrayResetsInLabel = Скинеться через { "{}" } TrayResetsDueNow = Скидання… @@ -828,10 +618,6 @@ DiagnosticsSectionHeading = Діагностика DiagnosticsCopyButton = Копіювати діагностику DiagnosticsCopied = Діагностику скопійовано в буфер обміну DiagnosticsCopyFailed = Не вдалося скопіювати діагностику -SavedCookiesHint = Файли cookie, задані вручну, для провайдерів з автентифікацією через браузер. Використовуються, коли автоматичне отримання файлів cookie з браузера недоступне. -ImportFromBrowserHint = Автоматично отримати файли cookie з браузера, у якому виконано вхід. Браузер має бути встановлений на цьому комп’ютері, а в ньому має бути виконано вхід до провайдера. -NoBrowsersDetectedHint = На цьому комп’ютері не знайдено підтримуваних браузерів або автоматичне отримання файлів cookie недоступне (потрібна Windows із встановленим Chrome, Edge, Brave чи Firefox). Скористайтеся формою ручного вставлення нижче. -CookieHeaderValuePlaceholder = Вставте значення заголовка Cookie… ApiKeyTitle = API-ключ ApiKeyNotSet = Не задано ApiKeyUpdate = Змінити @@ -907,7 +693,6 @@ NetworkProxyUrlHelper = Приклад: http://127.0.0.1:7890 (лише http а NetworkProxyUserLabel = Ім’я користувача (необов’язково) NetworkProxyPasswordLabel = Пароль (необов’язково) NetworkProxyPasswordHelper = Зберігається в локальному файлі settings.json. Якщо можливо, використовуйте локальний проксі без автентифікації. -NetworkProxyInvalidUrl = Недійсна URL-адреса проксі. Використовуйте http://host:port. DeepSeekPricingTitle = Тарифи DeepSeek DeepSeekPricingStandard = Стандартний / до розкладу @@ -918,7 +703,6 @@ DeepSeekPricingNext = Наступна зміна: DeepSeekPricingEffective = Чинний місцевий час: DeepSeekPricingAdvice = Офіційний розклад: пік 01:00-04:00 і 06:00-10:00 UTC; поза піком – за пів ціни. MistralMonthlySpend = Витрати на API за місяць -MistralMonthlySpendHelper = Використання API за поточний місяць для облікових записів Mistral з оплатою за фактом. MetricMonthlyPlan = Місячний план CostSummaryDisplayStyle = Показ вартості CostSummaryDisplayStyleHelper = Виберіть, як показувати вартість на картці кожного провайдера. @@ -1006,7 +790,6 @@ PanelPeriodTokens = Токени ({ "{}" }) OverviewSpendPeriodTitle = Використання та витрати · { "{}" } UsageSpendModelsPeriodCaption = Локальна історія моделей за період: { "{}" }. UsageSpendProjectsPeriodCaption = Витрати локальних проєктів Codex за спаданням за період: { "{}" } -BurndownChartTitle = Залишок ліміту BurndownChartAriaLabel = Графік витрачання залишку квоти ProviderRaycastAutoImportHelp = Автоматично імпортує сеанс www.raycast.com, у якому виконано вхід у Chrome. ProviderRaycastManualCookieHelp = Вставте заголовок Cookie зі сторінки www.raycast.com/settings. diff --git a/rust/src/locale/zh-CN.ftl b/rust/src/locale/zh-CN.ftl index f5e05665fc..ea5a402f96 100644 --- a/rust/src/locale/zh-CN.ftl +++ b/rust/src/locale/zh-CN.ftl @@ -3,12 +3,9 @@ TabProviders = 服务商 TabNotifications = 通知 TabMenuBar = 菜单栏 TabMenu = 菜单 -TabApiKeys = API 密钥 -TabCookies = Cookie TabUsageSpend = 用量与费用 TabAdvanced = 高级 TabAbout = 关于 -TabShortcuts = 快捷键 InterfaceLanguage = 界面语言 PreferredCurrencyLabel = 首选货币 PreferredCurrencyHelper = 转换受支持服务商的费用后显示。“自动”保留各服务商的原始货币。 @@ -19,8 +16,6 @@ StartAtLoginHelper = 登录后自动启动 CodexBar StartMinimizedHelper = 启动后停留在系统托盘 ShowNotificationsHelper = 达到用量阈值时提醒 SoundEnabledHelper = 达到阈值时播放提示音 -HighUsageThresholdHelper = 在该用量水平显示预警 -CriticalUsageThresholdHelper = 在该水平显示严重告警 ShowNotifications = 显示通知 SoundEnabled = 声音提示 NotificationSoundTheme = 默认通知声音组 @@ -45,41 +40,23 @@ NotificationSoundEventSessionDepleted = 会话配额耗尽 NotificationSoundEventSessionDepletedHelper = 会话配额达到 100% 时通知。 NotificationSoundEventSessionRestored = 会话恢复 NotificationSoundEventSessionRestoredHelper = 已耗尽的会话恢复可用时通知。 -HighUsageThreshold = 高用量阈值 HighUsageAlert = 高位预警 -CriticalUsageThreshold = 紧急用量阈值 CriticalUsageAlert = 严重告警 -UsageDisplay = 用量显示 -ShowUsageAsUsed = 显示已用用量 -ShowUsageAsUsedHelper = 显示为已使用百分比(而非剩余) ResetTimeRelative = 相对重置时间 ResetTimeRelativeHelper = 显示"2h 30m"而不是"3:00 PM" -TrayIcon = 托盘图标 -MergeTrayIcons = 合并托盘图标 -MergeTrayIconsHelper = 将所有服务商显示在一个托盘图标中 -PerProviderTrayIcons = 按服务商分图标 -PerProviderTrayIconsHelper = 每个启用的服务商显示独立托盘图标 ProviderEnabled = 已启用 ProviderDisabled = 已禁用 -ProviderInfo = 信息 ProviderUsage = 用量 -AtlasCloudAvailableBalance = 可用余额 AtlasCloudBalance = Atlas Cloud 余额 PanelUsageDetails = 用量详情 AuthType = 认证方式 DataSource = 数据来源 -ProviderNotDetected = 未检测到 -ProviderLastFetchFailed = 上次获取失败 ProviderUsageNotFetchedYet = 尚未获取用量 -ProviderNotFetchedYetTitle = 尚未获取 -ProviderDisabledNoRecentData = 已禁用 — 没有最近数据 ProviderSourceAutoShort = 自动 ProviderSourceWebShort = 网页 ProviderSourceCliShort = cli ProviderSourceOauthShort = oauth ProviderSourceApiShort = api -ProviderSourceGithubApiShort = github api -ProviderSourceLocalShort = 本地 ProviderSourceKiroEnvShort = Kiro 环境 WayfinderGatewayTitle = Wayfinder 网关 WayfinderGatewayLabel = 网关 URL @@ -97,118 +74,41 @@ WayfinderSaved = 节省 WayfinderOffline = 网关离线 WayfinderDryRun = 试运行 WayfinderMissingKeys = 缺少密钥 -TrackingItem = 追踪项 -MainWindowLiveUsageData = 主窗口实时用量数据 -StartTrackingUsage = 启用后开始追踪用量 -ClickTrayIconForMetrics = 点击托盘图标查看实时指标 -BrowserCookieImport = 浏览器 Cookie 导入 -ImportFromBrowser = 从浏览器导入 { "{}" } 的 Cookies -NoCookiesFoundInBrowser = 在 { "{}" } 中未找到 Cookies。请先登录。 -SelectBrowser = 请选择浏览器... -ImportCookies = 导入 Cookies -ImportSuccess = 已为 { "{}" } 导入 Cookies -ImportFailed = 导入失败:{ "{}" } -SaveFailed = 保存失败:{ "{}" } -CookiesAutoImport = Cookies 会自动从 Chrome、Edge、Brave 和 Firefox 中提取 QuickActions = 快捷操作 OpenProviderDashboard = → 打开 { "{}" } 仪表盘 -OllamaNoDashboard = Ollama 在本地运行,无仪表盘 -ApiKeysTitle = API 密钥 -ApiKeysDescription = 为需要认证的服务商配置访问令牌。 AddKey = + 添加密钥 KeySet = ✓ 已设置 -KeyRequired = 需要密钥 Remove = 移除 -GetKey = 获取密钥 → -SavedCookies = 已保存的 Cookies -AddManualCookie = 添加手动 Cookie CookieHeader = Cookie 头 -PasteHere = 在这里粘贴... -DeleteCookie = 删除 -CookieSaved = 已保存 { "{}" } 个 Cookies -CookieDeleted = 已删除 { "{}" } 的 Cookies -RefreshSettings = 刷新 Animations = 动画 MenuBar = 菜单栏 -Fun = 趣味 -GlobalShortcut = 全局快捷键 Privacy = 隐私 Updates = 更新 UpdateChannel = 更新通道 -UpdateChannelStable = 稳定版 -UpdateChannelBeta = 测试预览版 Never = 从不 LastUpdated = 上次更新 NeverUpdated = 从未更新 -MinutesAgo = { "{}" } 分钟前更新 -HoursAgo = { "{}" } 小时前更新 -DaysAgo = { "{}" } 天前更新 -BuiltWithRust = 基于 Rust + egui 构建 -OriginalMacOSVersion = 原始 macOS 版本 -Links = 链接 -BuildInfo = 构建信息 -EnabledProviders = 已启用服务商 Appearance = 外观 -ThemeSelection = 主题 -LightMode = 浅色 -DarkMode = 深色 -AboutTitle = 关于 CodexBar Version = 版本 -ActionRefreshAll = 刷新全部 -ActionSettings = 设置 -ActionClose = ✕ -ProviderAccount = 账号 ProviderSession = 本次会话 ProviderWeekly = 本周 ProviderMonthly = 30天 -ProviderModel = 模型 -ProviderPlan = 套餐 -ProviderNextReset = 下次重置 -ProviderNoRecentUsage = 暂无用量 -ProviderNotSignedIn = 未登录 -SummaryTab = 汇总 StateLoadingProviders = 正在加载服务商... -StateNoProviderData = 暂无服务商数据。 StateNoProviderSelected = 尚未选择服务商。 -StateSummaryRefreshPending = 将在全部服务商刷新完成后更新 StateError = 错误 -StateRetry = 重试 -StateDownload = 下载 -StateRestartAndUpdate = 重启并更新 -CreditsTitle = 额度 -UpdateRestartAndUpdate = 重启并更新 -UpdateRetry = 重试 -UpdateDownload = 下载 UpdateDownloading = 下载中 UpdateReady = 准备安装 -UpdateFailed = 更新失败 -ButtonOpenProviderSettings = 打开服务商设置 MenuSettings = 设置... MenuAbout = 关于 CodexBar MenuQuit = 退出 -StatusJustUpdated = 刚刚更新 -StatusUnableToGetUsage = 无法获取用量 ActionRefresh = 刷新 ActionSwitchAccount = 切换账号... ActionUsageDashboard = 用量仪表盘 ActionStatusPage = 状态页面 ActionCopyError = 复制错误 ActionBuyCredits = 购买额度... -PaceOnTrack = 进度正常 -PaceBehind = 进度滞后 MetricResetsIn = 重置于 -SectionUsageBreakdown = 用量明细 -SectionCost = 费用 ResetInProgress = 正在重置... -TomorrowAt = 明天 { "{}" } -UsedPercent = 已使用 { "{:.0}" }% -RemainingPercent = 剩余 { "{:.0}" }% -RemainingAmount = 剩余 { "{:.2}" } -Tokens1K = 1K tokens -TodayCost = 今日:${ "{:.2}" } -Last30DaysCost = 近 30 天:${ "{:.2}" } -StatusLabel = 状态:{ "{}" } -TrayOpenCodexBar = 弹出仪表盘 TrayPopOutDashboard = 弹出仪表盘 TrayShowFloatBar = 显示浮动栏 TrayStayAwakeActive = 保持唤醒:本地智能体会话运行中 @@ -216,9 +116,7 @@ TrayRefreshAll = 刷新全部 TrayProviders = 服务商 TraySettings = 设置... TrayCheckForUpdates = 检查更新 -TrayQuit = 退出 TrayLoading = CodexBar - 加载中... -TrayNoProviders = CodexBar - 无可用服务商 TraySessionPercent = 本次会话 { "{}" }% TrayWeeklyPercent = 本周 { "{}" }% TrayStatusError = (错误) @@ -227,28 +125,19 @@ TrayStatusIncident = (故障) TrayStatusPartial = (部分中断) TrayWeeklyExhausted = 周额度已用尽 TrayCreditsRemaining = 剩余额度 { "{}" }% -TrayStatusRowLoading = 加载中... TrayStatusRowError = 错误 -TrayCreditsRow = 额度 { "{}" }% -TrayProviderPopOut = 弹出仪表盘 -TrayProviderRefresh = 刷新 -TrayProviderSettings = 设置... -TrayProviderQuit = 退出 State = 状态 Source = 来源 -Updated = 更新时间 UpdatedJustNow = 刚刚更新 UpdatedMinutesAgo = { "{}" } 分钟前更新 UpdatedHoursAgo = { "{}" } 小时前更新 UpdatedDaysAgo = { "{}" } 天前更新 Status = 状态 -AllSystemsOperational = 系统运行正常 Plan = 套餐 Account = 账号 ProviderSessionLabel = 本次会话 ProviderWeeklyLabel = 本周 ClaudeScopedWeeklyLabel = { "{}" } 每周 -ProviderCodeReviewLabel = 代码审查 ResetsInShort = 重置于 ResetsInDaysHours = { "{}" } 天 { "{}" } 小时后重置 ResetsInHoursMinutes = { "{}" } 小时 { "{}" } 分钟后重置 @@ -261,14 +150,7 @@ InventoryAvailableCount = { "{}" } 个可用 FloatBarShowCost = 显示本地费用 FloatBarShowCostDescription = 在浮动栏中显示本地使用量的估算费用。 TrayDisplayTitle = 托盘显示 -ShowInTray = 在托盘中显示 CreditsLabel = 额度 -CreditsLeft = 剩余 { "{:.1}" } -CostTitle = 费用 -TodayCostFull = 今日:${ "{:.2}" } • { "{}" } tokens -Last30DaysCostFull = 近 30 天:${ "{:.2}" } • { "{}" } tokens -ProviderSettingsTitle = 设置 -ProviderAccountsTitle = 账号 ProviderOptionsTitle = 选项 MenuBarMetric = 菜单栏和浮动栏指标 MenuBarMetricHelper = 选择用于菜单栏和浮动栏百分比的时间窗口。 @@ -277,31 +159,18 @@ ProviderZedBrowserSession = 浏览器会话 ProviderZedUsageSourceAutoHelp = 使用 Zed 编辑器凭据;仅在选择“浏览器会话”时使用浏览器账单。 ProviderZedUsageSourceApiHelp = 仅使用 Zed 编辑器凭据。 ProviderZedUsageSourceWebHelp = 仅从所选的 zed.dev 浏览器会话或已保存的 Cookie 标头读取令牌支出;不会回退到编辑器凭据。 -ProviderNoCodexAccountsDetected = 尚未检测到 Codex 账号。 ProviderCodexAutoImportHelp = 自动导入浏览器 Cookie 以补充仪表盘信息。 ProviderCodexHistoryHelp = 在本地保存 Codex 用量历史(8 周),用于个性化 Pace 预测。 -ProviderOpenAiCookies = OpenAI Cookie -ProviderHistoricalTracking = 历史追踪 -ProviderOpenAiWebExtras = OpenAI 网页扩展 -ProviderOpenAiWebExtrasHelp = 通过 chatgpt.com 显示用量明细、额度历史和代码审查信息。 -ProviderCodexCreditsUnavailable = 额度暂不可用;保持 Codex 运行后会自动刷新。 -ProviderCodexLastFetchFailedTitle = 上次 Codex 获取失败: -ProviderCodexNotRunningHelp = Codex 未运行。先运行一次 Codex 命令再试。 ProviderCookieSource = Cookie 来源 CookieSourceManual = 手动 ProviderManualCookieMissing = 未粘贴 Cookie 头。 ProviderUseAutomaticCookies = 使用自动 Cookie ProviderRegion = 地区 -ProviderClaudeCookies = Claude Cookie ProviderClaudeCookiesHelp = 优先使用浏览器 Cookie/sessionKey,因为它与 Claude 设置页的用量一致。 ProviderClaudeAvoidKeychainPrompts = 避免钥匙串提示 ProviderClaudeAvoidKeychainPromptsHelp = 使用 /usr/bin/security 读取 Claude 凭据,避免 CodexBar 的钥匙串提示。 -ProviderClaudeDailyRoutinesUsage = 显示 Daily Routines 用量 -ProviderClaudeDailyRoutinesUsageHelp = 显示 Claude 网页/OAuth 用量中的 Daily Routines 配额行。 ProviderClaudeAllowReadingClaudeCodeCredentials = 允许读取 Claude Code 的凭据 ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = 允许 CodexBar 读取(并刷新)Claude Code 自身的 OAuth 凭据,以获得更精确的用量。默认关闭;关闭时,“自动”会回退到精度较低的 CLI 用量。 -ProviderCodexSparkUsage = 显示 Codex Spark 用量 -ProviderCodexSparkUsageHelp = 显示 Codex Spark 配额行,不隐藏额度或其他额外用量。 CopilotSeatCreditTitle = Copilot 席位 AI 额度 CopilotSeatCreditHelper = Copilot 已用额度计数器的可选分母。自动模式仅在没有计量配额时使用。 CopilotSeatCreditInvalid = 请输入大于零的有限额度,或留空。 @@ -322,9 +191,6 @@ CodexSwitchSuccess = 已切换当前账号。 CodexSwitchRestartPrompt = 重启 Codex Desktop 以加载已恢复的会话? CodexAccountsRestartDesktop = 重启 Codex Desktop ProviderCursorCookieSourceHelp = 自动导入浏览器 Cookie 或已保存会话。 -ProviderCursorCreditsHelp = 包含计划额度之外的按量计费用量。 -AutoFallbackHelp = 当首选来源失败时自动回退到下一个来源。 -ProviderSourceOauthWeb = OAuth + 网页 Automatic = 自动 Average = 平均 ExtraUsage = 额外用量 @@ -365,7 +231,6 @@ UsageSpendTokens = tokens UsageSpendKnownSubtotal = 已知 ≥{ "{}" } IncompleteRequestsLabel = 不完整 IncompleteRequestsDetail = { "{}" } 个请求缺少最终用量,已从 tokens 和费用中排除 -UsageSpendAllTimeHistory = 全部时间基于最新的 UsageSpendCustomPricing = 自定义定价 UsageSpendRefresh = 刷新 UsageSpendLoading = Scanning... @@ -379,7 +244,6 @@ UsageSpendColSource = 来源 UsageSpendDailyLedger = 每日明细 UsageSpendDailyLedgerHelper = 已记录的每日费用和 token 总量。未知值表示来源未能确定该数值。 UsageSpendNoDailyData = 暂无每日历史记录。 -OverviewSpendTitle = 用量与费用 · 30 天 OverviewSpendProviderCoverage = { "{}" }/{ "{}" } 个服务商有费用 OverviewSpendEstimate = 本地/服务商估算 UsageSpendProjects = 项目 @@ -403,73 +267,27 @@ AgentSessionsSshHostsLabel = SSH 主机 AgentSessionsSshHostsHelper = 以逗号分隔的 SSH 目标。连接使用非交互模式和短超时。 AgentSessionsLoading = 正在查找 Agent 会话… AgentSessionsEmpty = 没有活跃的 Agent 会话。 -UpdatesTitle = 更新 UpdateChannelChoice = 更新通道 UpdateChannelChoiceHelper = 在稳定版与测试预览版之间选择 AutoDownloadUpdates = 自动检查更新 AutoDownloadUpdatesHelper = 发现新版本后在后台下载安装器更新 -InstallUpdatesOnQuit = 退出时安装更新 -InstallUpdatesOnQuitHelper = 退出 CodexBar 时自动启动已准备好的安装器 -KeyboardShortcutsTitle = 快捷键 -GlobalShortcutLabel = 全局快捷键 -GlobalShortcutHelper = 按此快捷键可从任何位置打开 CodexBar -ShortcutFormatHint = 格式:Ctrl+Shift+Key、Alt+Ctrl+Key 等。需重启以应用更改。 Saved = 已保存(需重启以应用) InvalidFormat = 无效的快捷键格式 -ShortcutHintPlaceholder = 例如:Ctrl+Shift+U -SelectProvider = 请选择服务商 -RefreshInterval30Sec = 30 秒 RefreshInterval1Min = 1 分钟 RefreshInterval5Min = 5 分钟 -RefreshInterval10Min = 10 分钟 -BrowserCookiesTitle = 浏览器 Cookie -CookieImport = Cookie 导入 Provider = 服务商 -SelectPlaceholder = 请选择... -AutoRefreshInterval = 自动刷新间隔 -AboutDescription = CodexBar 的 Windows 移植版本。 -AboutDescriptionLine2 = 在系统托盘中追踪 AI 服务商用量。 -ViewOnGitHub = → 查看 GitHub SubmitIssue = → 提交问题 -MaintainedBy = 由 CodexBar 贡献者维护 -CommitLabel = 提交 -BuildDateLabel = 构建 Save = 保存 Cancel = 取消 Label = 标签 Token = 令牌 -AddAccount = 添加账号 -AccountAdded = 账号已添加 -AccountRemoved = 账号已移除 -AccountSwitched = 账号已切换 -AccountLabelHint = 例如:工作账号、个人账号... -EnterApiKeyFor = 为 { "{}" } 输入 API Key PasteApiKeyHere = 在这里粘贴 API key... -ApiKeySaved = 已保存 { "{}" } 的 API key -ApiKeyRemoved = 已移除 { "{}" } 的 API key -EnvironmentVariable = 环境变量 -CookieSavedForProvider = 已保存 { "{}" } 的 Cookie -CookieRemovedForProvider = 已移除 { "{}" } 的 Cookie -ShowUsedPercent = 已使用 { "{:.0}" }% -ShowRemainingPercent = 剩余 { "{:.0}" }% UpdateAvailableMessage = 有可用更新:{ "{}" } -UpdateReadyMessage = { "{}" } 准备安装 -UpdateFailedMessage = 更新失败:{ "{}" } -UpdateDownloadingMessage = 正在下载 { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = 令牌 SectionRefresh = 自动化 SectionNotifications = 通知 SectionUsageThresholds = 用量阈值 SectionKeyboard = 键盘 -SectionUsageRendering = 用量展示 -SectionTime = 时间 SectionLanguage = 语言 -SectionCredentialsSecurity = 凭据与安全 -SectionDebug = 调试 -SectionApiKeys = API 密钥 -SectionSavedCookies = 已保存的 Cookies -SectionImportFromBrowser = 从浏览器导入 -SectionAddCookieManually = 手动添加 Cookie SectionTokenAccounts = 令牌账户 SectionSavedAccounts = 已保存账户 SectionAddAccount = 添加账户 @@ -545,8 +363,6 @@ OverviewLayoutLabel = 概览布局 OverviewLayoutHelper = 选择概览显示的信息量。 OverviewLayoutDetailed = 详细 OverviewLayoutCompact = 紧凑 -EnableAnimationsLabel = 启用动画 -EnableAnimationsHelper = 平滑过渡与动画进度条。 UpdateChannelStableOption = 稳定版 UpdateChannelBetaOption = 测试预览版 CodexLocalLogsTitle = Codex 本地日志 @@ -564,23 +380,14 @@ ThemeAutoOption = 自动(跟随系统) ThemeLightOption = 浅色 ThemeDarkOption = 深色 SettingsStatusSaving = 保存中… -ApiKeysTabHint = 为使用令牌认证的服务商配置 API 密钥。密钥仅存储在本地,不会上传。 FetchingProviderData = 正在获取服务商数据… NoProvidersConfigured = 尚未配置任何服务商。 EnableProvidersHint = 请在设置中启用服务商以查看用量数据。 OpenSettingsButton = 打开设置 -TooltipRefresh = 刷新 -TrayCardErrorBadge = 错误 -SummaryProvidersLabel = 服务商 -SummaryRefreshing = 正在刷新… -SummaryFailed = 失败 -SummaryWithErrors = 存在错误 -DetailBackButton = 返回 DetailWindowPrimary = 主要 DetailWindowSecondary = 次要 DetailWindowModelSpecific = 模型专属 DetailWindowTertiary = 第三 -DetailWindowMinutesSuffix = 分钟窗口 DetailWindowExhausted = 已用尽 DetailPaceTitle = 进度 DetailPaceOnTrack = 正常 @@ -649,7 +456,6 @@ PanelReserveRunsOutInDaysHours = { "{}" }天{ "{}" }小时后耗尽 PanelReserveRunsOutInHours = { "{}" }小时后耗尽 FloatBarNoProviders = 无提供商 FloatBarRemainingSuffix = 剩余 -BannerCheckingForUpdates = 正在检查更新… BannerUpdateAvailablePrefix = 更新 BannerDownloadButton = 下载 BannerViewRelease = 查看发布 @@ -670,11 +476,6 @@ ProviderStatusStale = 已过期 ProviderStatusError = 错误 ProviderStatusLoading = 加载中 ProviderStatusDisabled = 已禁用 -ProviderDetailPlaceholder = 详细面板将在 6b 阶段推出 -ProviderIssueNeedsSignIn = 需要登录 -ProviderIssueFetchNeedsAttention = 服务商数据拉取需要处理 -ProviderIssueCopy = 复制 -ProviderIssueUnsupportedSourceModePrefix = 该服务商不支持此数据源模式 ProviderIssueAuthRequired = 需要登录 ProviderIssueSessionExpired = 会话已过期 ProviderIssueLocalRuntimeOffline = 本地运行时离线 @@ -720,7 +521,6 @@ CredsStatusUnavailable = 不可用 CredsOpenFolderAction = 打开凭据文件夹 CredsRefreshDetectionAction = 刷新检测 CredsSavePathAction = 保存路径 -CredsBrowseAction = 浏览… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = 使用的 OAuth 凭据来自 CredsGeminiCliSetupAction = 安装 Gemini CLI @@ -735,8 +535,6 @@ CredsJetBrainsHelperCustomPrefix = 使用自定义 IDE 基础路径: CredsJetBrainsHelperMissing = 请安装启用了 AI Assistant 的 JetBrains IDE,然后刷新 CodexBar。 CredsJetBrainsCustomPathLabel = 自定义路径 CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = 选择要监控的 JetBrains IDE。 -CredsJetBrainsAutoDetectOption = 自动检测 CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = 检测到于 CredsKiroHelperMissing = kiro-cli:未在 PATH 或常见安装位置找到。 @@ -748,17 +546,9 @@ TokenAccountAddButton = 添加账户 TokenAccountGithubLoginButton = 使用 GitHub 登录 TokenAccountEmpty = 该服务商尚未保存任何账户。 TokenAccountLabelPlaceholder = 标签(如工作、个人)… -TokenAccountProviderLabel = 服务商 -TokenAccountProviderPlaceholder = 选择服务商… TokenAccountAddedPrefix = 添加于 TokenAccountUsedPrefix = 上次使用 -TokenAccountTabHint = 按服务商管理多个会话令牌或 API 令牌。所有数据拉取都会使用活动账户。仅需要手动令牌的服务商会显示在此处。 -TokenAccountNoSupported = 当前没有支持令牌账户的服务商。 TokenAccountInlineSummary = 令牌账户 -TrayPaceBadgeSlow = 缓慢 -TrayPaceBadgeSteady = 稳定 -TrayPaceBadgeRacing = 加速 -TrayPaceBadgeBurning = 超速 TrayResetsInLabel = { "{}" } 后重置 TrayResetsDueNow = 正在重置… PredictivePaceWarnings = 预测配额告警 @@ -828,10 +618,6 @@ DiagnosticsSectionHeading = 诊断 DiagnosticsCopyButton = 复制诊断信息 DiagnosticsCopied = 诊断信息已复制到剪贴板 DiagnosticsCopyFailed = 无法复制诊断信息 -SavedCookiesHint = 为通过浏览器认证的服务商手动覆盖 Cookie。当自动浏览器 Cookie 提取不可用时使用这些 Cookie。 -ImportFromBrowserHint = 从已登录的浏览器自动提取 Cookie。该浏览器必须安装在本机,并且你已在其中登录对应服务商。 -NoBrowsersDetectedHint = 本机未检测到受支持的浏览器,或自动 Cookie 提取不可用(需要 Windows 且安装了 Chrome、Edge、Brave 或 Firefox)。请改用下方的手动粘贴表单。 -CookieHeaderValuePlaceholder = 粘贴 Cookie 标头值… ApiKeyTitle = API 密钥 ApiKeyNotSet = 未设置 ApiKeyUpdate = 更新 @@ -907,7 +693,6 @@ NetworkProxyUrlHelper = 示例:http://127.0.0.1:7890(仅支持 http 或 http NetworkProxyUserLabel = 用户名(可选) NetworkProxyPasswordLabel = 密码(可选) NetworkProxyPasswordHelper = 保存在本地 settings.json 中。尽可能使用无需认证的本地代理。 -NetworkProxyInvalidUrl = 代理 URL 无效。请使用 http://host:port。 DeepSeekPricingTitle = DeepSeek 定价 DeepSeekPricingStandard = 标准 / 调度前 @@ -918,7 +703,6 @@ DeepSeekPricingNext = 下次切换: DeepSeekPricingEffective = 生效本地时间: DeepSeekPricingAdvice = 官方时段:UTC 01:00-04:00 和 06:00-10:00 为高峰;非高峰价格减半。 MistralMonthlySpend = 本月 API 花费 -MistralMonthlySpendHelper = 按量付费 Mistral 账户的当月 API 用量。 MetricMonthlyPlan = 月度套餐 CostSummaryDisplayStyle = 费用摘要显示方式 CostSummaryDisplayStyleHelper = 选择在每个提供商卡片上如何显示费用。 @@ -1004,7 +788,6 @@ PanelPeriodTokens = { "{}" } tokens OverviewSpendPeriodTitle = 用量与费用 · { "{}" } UsageSpendModelsPeriodCaption = 本地模型历史:{ "{}" }。 UsageSpendProjectsPeriodCaption = Codex 本地项目费用排名:{ "{}" } -BurndownChartTitle = 剩余用量 BurndownChartAriaLabel = 已记录的剩余配额消耗曲线 ProviderRaycastAutoImportHelp = 自动从 Chrome 导入已登录的 www.raycast.com 会话。 ProviderRaycastManualCookieHelp = 粘贴来自 www.raycast.com/settings 的 Cookie 标头。 diff --git a/rust/src/locale/zh-TW.ftl b/rust/src/locale/zh-TW.ftl index e9faab8be6..e45dcb35be 100644 --- a/rust/src/locale/zh-TW.ftl +++ b/rust/src/locale/zh-TW.ftl @@ -3,12 +3,9 @@ TabProviders = 提供者 TabNotifications = 通知 TabMenuBar = 選單欄 TabMenu = 選單 -TabApiKeys = API 金鑰 -TabCookies = Cookie TabUsageSpend = 用量與費用 TabAdvanced = 高階 TabAbout = 關於 -TabShortcuts = 快捷鍵 InterfaceLanguage = 介面語言 PreferredCurrencyLabel = 偏好貨幣 PreferredCurrencyHelper = 轉換支援的提供者費用以供顯示。自動會保留各提供者的原始貨幣。 @@ -19,8 +16,6 @@ StartAtLoginHelper = 登入後自動啟動 CodexBar StartMinimizedHelper = 啟動後停留在系統系統匣 ShowNotificationsHelper = 達到用量臨界值時提醒 SoundEnabledHelper = 達到臨界值時播放提示音 -HighUsageThresholdHelper = 在該用量水平顯示預警 -CriticalUsageThresholdHelper = 在該水平顯示嚴重告警 ShowNotifications = 顯示通知 SoundEnabled = 聲音提示 NotificationSoundTheme = 預設通知聲音組 @@ -45,41 +40,23 @@ NotificationSoundEventSessionDepleted = 工作階段配額用盡 NotificationSoundEventSessionDepletedHelper = 工作階段配額達到 100% 時通知。 NotificationSoundEventSessionRestored = 工作階段恢復 NotificationSoundEventSessionRestoredHelper = 已用盡的工作階段恢復可用時通知。 -HighUsageThreshold = 高用量臨界值 HighUsageAlert = 高位預警 -CriticalUsageThreshold = 緊急用量臨界值 CriticalUsageAlert = 嚴重告警 -UsageDisplay = 用量顯示 -ShowUsageAsUsed = 顯示已用用量 -ShowUsageAsUsedHelper = 顯示為已使用百分比(而非剩餘) ResetTimeRelative = 相對重置時間 ResetTimeRelativeHelper = 顯示"2h 30m"而不是"3:00 PM" -TrayIcon = 系統匣圖示 -MergeTrayIcons = 合併系統匣圖示 -MergeTrayIconsHelper = 將所有提供者顯示在一個系統匣圖示中 -PerProviderTrayIcons = 按提供者分圖示 -PerProviderTrayIconsHelper = 每個啟用的提供者顯示獨立系統匣圖示 ProviderEnabled = 已啟用 ProviderDisabled = 已停用 -ProviderInfo = 資訊 ProviderUsage = 用量 -AtlasCloudAvailableBalance = 可用餘額 AtlasCloudBalance = Atlas Cloud 餘額 PanelUsageDetails = 用量詳細資料 AuthType = 認證方式 DataSource = 資料來源 -ProviderNotDetected = 未檢測到 -ProviderLastFetchFailed = 上次獲取失敗 ProviderUsageNotFetchedYet = 尚未獲取用量 -ProviderNotFetchedYetTitle = 尚未獲取 -ProviderDisabledNoRecentData = 已停用 — 沒有最近資料 ProviderSourceAutoShort = 自動 ProviderSourceWebShort = 網頁 ProviderSourceCliShort = cli ProviderSourceOauthShort = oauth ProviderSourceApiShort = api -ProviderSourceGithubApiShort = github api -ProviderSourceLocalShort = 本機 ProviderSourceKiroEnvShort = Kiro 環境 WayfinderGatewayTitle = Wayfinder 閘道 WayfinderGatewayLabel = 閘道 URL @@ -97,118 +74,41 @@ WayfinderSaved = 節省 WayfinderOffline = 閘道離線 WayfinderDryRun = 試執行 WayfinderMissingKeys = 缺少金鑰 -TrackingItem = 追蹤項 -MainWindowLiveUsageData = 主視窗實時用量資料 -StartTrackingUsage = 啟用後開始追蹤用量 -ClickTrayIconForMetrics = 點選系統匣圖示檢視實時指標 -BrowserCookieImport = 瀏覽器 Cookie 匯入 -ImportFromBrowser = 從瀏覽器匯入 { "{}" } 的 Cookies -NoCookiesFoundInBrowser = 在 { "{}" } 中未找到 Cookies。請先登入。 -SelectBrowser = 請選擇瀏覽器... -ImportCookies = 匯入 Cookies -ImportSuccess = 已為 { "{}" } 匯入 Cookies -ImportFailed = 匯入失敗:{ "{}" } -SaveFailed = 儲存失敗:{ "{}" } -CookiesAutoImport = Cookies 會自動從 Chrome、Edge、Brave 和 Firefox 中提取 QuickActions = 快捷操作 OpenProviderDashboard = → 開啟 { "{}" } 儀表板 -OllamaNoDashboard = Ollama 在本機執行,無儀表板 -ApiKeysTitle = API 金鑰 -ApiKeysDescription = 為需要認證的提供者配置訪問權杖。 AddKey = + 新增金鑰 KeySet = ✓ 已設定 -KeyRequired = 需要金鑰 Remove = 移除 -GetKey = 獲取金鑰 → -SavedCookies = 已儲存的 Cookies -AddManualCookie = 新增手動 Cookie CookieHeader = Cookie 頭 -PasteHere = 在這裡貼上... -DeleteCookie = 刪除 -CookieSaved = 已儲存 { "{}" } 個 Cookies -CookieDeleted = 已刪除 { "{}" } 的 Cookies -RefreshSettings = 重新整理 Animations = 動畫 MenuBar = 選單欄 -Fun = 趣味 -GlobalShortcut = 全域性快捷鍵 Privacy = 隱私 Updates = 更新 UpdateChannel = 更新通道 -UpdateChannelStable = 穩定版 -UpdateChannelBeta = 測試預覽版 Never = 從不 LastUpdated = 上次更新 NeverUpdated = 從未更新 -MinutesAgo = { "{}" } 分鐘前更新 -HoursAgo = { "{}" } 小時前更新 -DaysAgo = { "{}" } 天前更新 -BuiltWithRust = 基於 Rust + egui 構建 -OriginalMacOSVersion = 原始 macOS 版本 -Links = 連結 -BuildInfo = 構建資訊 -EnabledProviders = 已啟用提供者 Appearance = 外觀 -ThemeSelection = 主題 -LightMode = 淺色 -DarkMode = 深色 -AboutTitle = 關於 CodexBar Version = 版本 -ActionRefreshAll = 重新整理全部 -ActionSettings = 設定 -ActionClose = ✕ -ProviderAccount = 賬號 ProviderSession = 本次會話 ProviderWeekly = 本週 ProviderMonthly = 30天 -ProviderModel = 模型 -ProviderPlan = 套餐 -ProviderNextReset = 下次重置 -ProviderNoRecentUsage = 暫無用量 -ProviderNotSignedIn = 未登入 -SummaryTab = 彙總 StateLoadingProviders = 正在載入提供者... -StateNoProviderData = 暫無提供者資料。 StateNoProviderSelected = 尚未選擇提供者。 -StateSummaryRefreshPending = 將在全部提供者重新整理完成後更新 StateError = 錯誤 -StateRetry = 重試 -StateDownload = 下載 -StateRestartAndUpdate = 重啟並更新 -CreditsTitle = 額度 -UpdateRestartAndUpdate = 重啟並更新 -UpdateRetry = 重試 -UpdateDownload = 下載 UpdateDownloading = 下載中 UpdateReady = 準備安裝 -UpdateFailed = 更新失敗 -ButtonOpenProviderSettings = 開啟提供者設定 MenuSettings = 設定... MenuAbout = 關於 CodexBar MenuQuit = 退出 -StatusJustUpdated = 剛剛更新 -StatusUnableToGetUsage = 無法獲取用量 ActionRefresh = 重新整理 ActionSwitchAccount = 切換賬號... ActionUsageDashboard = 用量儀表板 ActionStatusPage = 狀態頁面 ActionCopyError = 複製錯誤 ActionBuyCredits = 購買額度... -PaceOnTrack = 進度正常 -PaceBehind = 進度滯後 MetricResetsIn = 重置於 -SectionUsageBreakdown = 用量明細 -SectionCost = 費用 ResetInProgress = 正在重置... -TomorrowAt = 明天 { "{}" } -UsedPercent = 已使用 { "{:.0}" }% -RemainingPercent = 剩餘 { "{:.0}" }% -RemainingAmount = 剩餘 { "{:.2}" } -Tokens1K = 1K tokens -TodayCost = 今日:${ "{:.2}" } -Last30DaysCost = 近 30 天:${ "{:.2}" } -StatusLabel = 狀態:{ "{}" } -TrayOpenCodexBar = 彈出儀表板 TrayPopOutDashboard = 彈出儀表板 TrayShowFloatBar = 顯示浮動欄 TrayStayAwakeActive = 保持喚醒:本機代理程式工作階段執行中 @@ -216,9 +116,7 @@ TrayRefreshAll = 重新整理全部 TrayProviders = 提供者 TraySettings = 設定... TrayCheckForUpdates = 檢查更新 -TrayQuit = 退出 TrayLoading = CodexBar - 載入中... -TrayNoProviders = CodexBar - 無可用提供者 TraySessionPercent = 本次會話 { "{}" }% TrayWeeklyPercent = 本週 { "{}" }% TrayStatusError = (錯誤) @@ -227,28 +125,19 @@ TrayStatusIncident = (故障) TrayStatusPartial = (部分中斷) TrayWeeklyExhausted = 周額度已用盡 TrayCreditsRemaining = 剩餘額度 { "{}" }% -TrayStatusRowLoading = 載入中... TrayStatusRowError = 錯誤 -TrayCreditsRow = 額度 { "{}" }% -TrayProviderPopOut = 彈出儀表板 -TrayProviderRefresh = 重新整理 -TrayProviderSettings = 設定... -TrayProviderQuit = 退出 State = 狀態 Source = 來源 -Updated = 更新時間 UpdatedJustNow = 剛剛更新 UpdatedMinutesAgo = { "{}" } 分鐘前更新 UpdatedHoursAgo = { "{}" } 小時前更新 UpdatedDaysAgo = { "{}" } 天前更新 Status = 狀態 -AllSystemsOperational = 系統執行正常 Plan = 套餐 Account = 賬號 ProviderSessionLabel = 本次會話 ProviderWeeklyLabel = 本週 ClaudeScopedWeeklyLabel = { "{}" } 每週 -ProviderCodeReviewLabel = 程式碼審查 ResetsInShort = 重置於 ResetsInDaysHours = { "{}" } 天 { "{}" } 小時後重置 ResetsInHoursMinutes = { "{}" } 小時 { "{}" } 分鐘後重置 @@ -261,14 +150,7 @@ InventoryAvailableCount = 可用 { "{}" } 個 FloatBarShowCost = 顯示本機費用 FloatBarShowCostDescription = 在浮動列中顯示本機使用量的估算費用。 TrayDisplayTitle = 系統匣顯示 -ShowInTray = 在系統匣中顯示 CreditsLabel = 額度 -CreditsLeft = 剩餘 { "{:.1}" } -CostTitle = 費用 -TodayCostFull = 今日:${ "{:.2}" } • { "{}" } tokens -Last30DaysCostFull = 近 30 天:${ "{:.2}" } • { "{}" } tokens -ProviderSettingsTitle = 設定 -ProviderAccountsTitle = 賬號 ProviderOptionsTitle = 選項 MenuBarMetric = 選單欄和浮動列指標 MenuBarMetricHelper = 選擇用於選單欄和浮動列百分比的時間範圍。 @@ -277,31 +159,18 @@ ProviderZedBrowserSession = 瀏覽器工作階段 ProviderZedUsageSourceAutoHelp = 使用 Zed 編輯器憑證;只有選擇「瀏覽器工作階段」時才使用瀏覽器帳單。 ProviderZedUsageSourceApiHelp = 僅使用 Zed 編輯器憑證。 ProviderZedUsageSourceWebHelp = 僅從所選的 zed.dev 瀏覽器工作階段或已儲存的 Cookie 標頭讀取 Token 支出;不會回退到編輯器憑證。 -ProviderNoCodexAccountsDetected = 尚未檢測到 Codex 賬號。 ProviderCodexAutoImportHelp = 自動匯入瀏覽器 Cookie 以補充儀表板資訊。 ProviderCodexHistoryHelp = 在本機儲存 Codex 用量歷史(8 周),用於個性化 Pace 預測。 -ProviderOpenAiCookies = OpenAI Cookie -ProviderHistoricalTracking = 歷史追蹤 -ProviderOpenAiWebExtras = OpenAI 網頁擴充套件 -ProviderOpenAiWebExtrasHelp = 透過 chatgpt.com 顯示用量明細、額度歷史和程式碼審查資訊。 -ProviderCodexCreditsUnavailable = 額度暫不可用;保持 Codex 執行後會自動重新整理。 -ProviderCodexLastFetchFailedTitle = 上次 Codex 獲取失敗: -ProviderCodexNotRunningHelp = Codex 未執行。先執行一次 Codex 命令再試。 ProviderCookieSource = Cookie 來源 CookieSourceManual = 手動 ProviderManualCookieMissing = 尚未貼上 Cookie 標頭。 ProviderUseAutomaticCookies = 使用自動 Cookie ProviderRegion = 地區 -ProviderClaudeCookies = Claude Cookie ProviderClaudeCookiesHelp = 優先使用瀏覽器 Cookie/sessionKey,因為它與 Claude 設定頁的用量一致。 ProviderClaudeAvoidKeychainPrompts = 避免鑰匙串提示 ProviderClaudeAvoidKeychainPromptsHelp = 使用 /usr/bin/security 讀取 Claude 憑據,避免 CodexBar 的鑰匙串提示。 -ProviderClaudeDailyRoutinesUsage = 顯示 Daily Routines 用量 -ProviderClaudeDailyRoutinesUsageHelp = 顯示 Claude 網頁/OAuth 用量中的 Daily Routines 配額行。 ProviderClaudeAllowReadingClaudeCodeCredentials = 允許讀取 Claude Code 的憑證 ProviderClaudeAllowReadingClaudeCodeCredentialsHelp = 允許 CodexBar 讀取(並更新)Claude Code 自己的 OAuth 憑證,以取得更精確的用量。預設關閉;關閉時,自動模式會改用精確度較低的 CLI 用量。 -ProviderCodexSparkUsage = 顯示 Codex Spark 用量 -ProviderCodexSparkUsageHelp = 顯示 Codex Spark 配額行,不隱藏額度或其他額外用量。 CopilotSeatCreditTitle = Copilot 席位 AI 點數額度 CopilotSeatCreditHelper = Copilot 已用點數計數器的選用分母。自動模式僅在沒有計量配額時使用。 CopilotSeatCreditInvalid = 請輸入大於零的有限額度,或留空。 @@ -322,9 +191,6 @@ CodexSwitchSuccess = 已切換使用中的帳號。 CodexSwitchRestartPrompt = 要重新啟動 Codex Desktop 以載入還原的工作階段嗎? CodexAccountsRestartDesktop = 重新啟動 Codex Desktop ProviderCursorCookieSourceHelp = 自動匯入瀏覽器 Cookie 或已儲存會話。 -ProviderCursorCreditsHelp = 包含計劃額度之外的按量計費用量。 -AutoFallbackHelp = 當首選來源失敗時自動回退到下一個來源。 -ProviderSourceOauthWeb = OAuth + 網頁 Automatic = 自動 Average = 平均 ExtraUsage = 額外用量 @@ -365,7 +231,6 @@ UsageSpendTokens = 個 token UsageSpendKnownSubtotal = 已知 ≥{ "{}" } IncompleteRequestsLabel = 未完成 IncompleteRequestsDetail = { "{}" } 個請求缺少最終用量,已排除於 token 與費用之外 -UsageSpendAllTimeHistory = 全部期間以最新的 UsageSpendCustomPricing = 自訂定價 UsageSpendRefresh = 重新整理 UsageSpendLoading = Scanning... @@ -379,7 +244,6 @@ UsageSpendColSource = 來源 UsageSpendDailyLedger = 每日明細 UsageSpendDailyLedgerHelper = 已記錄的每日費用與 token 總量。未知值表示來源未能確定該數值。 UsageSpendNoDailyData = 尚無每日歷史記錄。 -OverviewSpendTitle = 用量與費用 · 30 天 OverviewSpendProviderCoverage = { "{}" }/{ "{}" } 個提供者有費用 OverviewSpendEstimate = 本機/提供者估算 UsageSpendProjects = 專案 @@ -403,73 +267,27 @@ AgentSessionsSshHostsLabel = SSH 主機 AgentSessionsSshHostsHelper = 以逗號分隔的 SSH 目標。連線使用非互動模式和短逾時。 AgentSessionsLoading = 正在查找 Agent 工作階段… AgentSessionsEmpty = 沒有活躍的 Agent 工作階段。 -UpdatesTitle = 更新 UpdateChannelChoice = 更新通道 UpdateChannelChoiceHelper = 在穩定版與測試預覽版之間選擇 AutoDownloadUpdates = 自動檢查更新 AutoDownloadUpdatesHelper = 發現新版本後在後臺下載安裝器更新 -InstallUpdatesOnQuit = 退出時安裝更新 -InstallUpdatesOnQuitHelper = 退出 CodexBar 時自動啟動已準備好的安裝器 -KeyboardShortcutsTitle = 快捷鍵 -GlobalShortcutLabel = 全域性快捷鍵 -GlobalShortcutHelper = 按此快捷鍵可從任何位置開啟 CodexBar -ShortcutFormatHint = 格式:Ctrl+Shift+Key、Alt+Ctrl+Key 等。需重啟以應用更改。 Saved = 已儲存(需重啟以應用) InvalidFormat = 無效的快捷鍵格式 -ShortcutHintPlaceholder = 例如:Ctrl+Shift+U -SelectProvider = 請選擇提供者 -RefreshInterval30Sec = 30 秒 RefreshInterval1Min = 1 分鐘 RefreshInterval5Min = 5 分鐘 -RefreshInterval10Min = 10 分鐘 -BrowserCookiesTitle = 瀏覽器 Cookie -CookieImport = Cookie 匯入 Provider = 提供者 -SelectPlaceholder = 請選擇... -AutoRefreshInterval = 自動重新整理間隔 -AboutDescription = CodexBar 的 Windows 移植版本。 -AboutDescriptionLine2 = 在系統系統匣中追蹤 AI 提供者用量。 -ViewOnGitHub = → 檢視 GitHub SubmitIssue = → 提交問題 -MaintainedBy = 由 CodexBar 貢獻者維護 -CommitLabel = 提交 -BuildDateLabel = 構建 Save = 儲存 Cancel = 取消 Label = 標籤 Token = 權杖 -AddAccount = 新增賬號 -AccountAdded = 賬號已新增 -AccountRemoved = 賬號已移除 -AccountSwitched = 賬號已切換 -AccountLabelHint = 例如:工作賬號、個人賬號... -EnterApiKeyFor = 為 { "{}" } 輸入 API Key PasteApiKeyHere = 在這裡貼上 API key... -ApiKeySaved = 已儲存 { "{}" } 的 API key -ApiKeyRemoved = 已移除 { "{}" } 的 API key -EnvironmentVariable = 環境變數 -CookieSavedForProvider = 已儲存 { "{}" } 的 Cookie -CookieRemovedForProvider = 已移除 { "{}" } 的 Cookie -ShowUsedPercent = 已使用 { "{:.0}" }% -ShowRemainingPercent = 剩餘 { "{:.0}" }% UpdateAvailableMessage = 有可用更新:{ "{}" } -UpdateReadyMessage = { "{}" } 準備安裝 -UpdateFailedMessage = 更新失敗:{ "{}" } -UpdateDownloadingMessage = 正在下載 { "{}" } ({ "{:.0}" }%) -TabTokenAccounts = 權杖 SectionRefresh = 自動化 SectionNotifications = 通知 SectionUsageThresholds = 用量臨界值 SectionKeyboard = 鍵盤 -SectionUsageRendering = 用量展示 -SectionTime = 時間 SectionLanguage = 語言 -SectionCredentialsSecurity = 憑據與安全 -SectionDebug = 除錯 -SectionApiKeys = API 金鑰 -SectionSavedCookies = 已儲存的 Cookies -SectionImportFromBrowser = 從瀏覽器匯入 -SectionAddCookieManually = 手動新增 Cookie SectionTokenAccounts = 權杖賬戶 SectionSavedAccounts = 已儲存賬戶 SectionAddAccount = 新增賬戶 @@ -545,8 +363,6 @@ OverviewLayoutLabel = 概覽版面配置 OverviewLayoutHelper = 選擇概覽顯示的資訊量。 OverviewLayoutDetailed = 詳細 OverviewLayoutCompact = 精簡 -EnableAnimationsLabel = 啟用動畫 -EnableAnimationsHelper = 平滑過渡與動畫進度條。 UpdateChannelStableOption = 穩定版 UpdateChannelBetaOption = 測試預覽版 CodexLocalLogsTitle = Codex 本機日誌 @@ -564,23 +380,14 @@ ThemeAutoOption = 自動(跟隨系統) ThemeLightOption = 淺色 ThemeDarkOption = 深色 SettingsStatusSaving = 儲存中… -ApiKeysTabHint = 為使用權杖認證的提供者配置 API 金鑰。金鑰僅儲存在本機,不會上傳。 FetchingProviderData = 正在獲取提供者資料… NoProvidersConfigured = 尚未配置任何提供者。 EnableProvidersHint = 請在設定中啟用提供者以檢視用量資料。 OpenSettingsButton = 開啟設定 -TooltipRefresh = 重新整理 -TrayCardErrorBadge = 錯誤 -SummaryProvidersLabel = 提供者 -SummaryRefreshing = 正在重新整理… -SummaryFailed = 失敗 -SummaryWithErrors = 存在錯誤 -DetailBackButton = 返回 DetailWindowPrimary = 主要 DetailWindowSecondary = 次要 DetailWindowModelSpecific = 模型專屬 DetailWindowTertiary = 第三 -DetailWindowMinutesSuffix = 分鐘視窗 DetailWindowExhausted = 已用盡 DetailPaceTitle = 進度 DetailPaceOnTrack = 正常 @@ -649,7 +456,6 @@ PanelReserveRunsOutInDaysHours = { "{}" }天{ "{}" }小時後耗盡 PanelReserveRunsOutInHours = { "{}" }小時後耗盡 FloatBarNoProviders = 無提供商 FloatBarRemainingSuffix = 剩餘 -BannerCheckingForUpdates = 正在檢查更新… BannerUpdateAvailablePrefix = 更新 BannerDownloadButton = 下載 BannerViewRelease = 檢視釋出 @@ -670,11 +476,6 @@ ProviderStatusStale = 已過期 ProviderStatusError = 錯誤 ProviderStatusLoading = 載入中 ProviderStatusDisabled = 已停用 -ProviderDetailPlaceholder = 詳細面板將在 6b 階段推出 -ProviderIssueNeedsSignIn = 需要登入 -ProviderIssueFetchNeedsAttention = 提供者資料拉取需要處理 -ProviderIssueCopy = 複製 -ProviderIssueUnsupportedSourceModePrefix = 該提供者不支援此資料來源模式 ProviderIssueAuthRequired = 需要登入 ProviderIssueSessionExpired = 工作階段已過期 ProviderIssueLocalRuntimeOffline = 本機執行階段離線 @@ -720,7 +521,6 @@ CredsStatusUnavailable = 不可用 CredsOpenFolderAction = 開啟憑據資料夾 CredsRefreshDetectionAction = 重新整理檢測 CredsSavePathAction = 儲存路徑 -CredsBrowseAction = 瀏覽… CredsGeminiCliLabel = Gemini CLI CredsGeminiCliHelperPrefix = 使用的 OAuth 憑據來自 CredsGeminiCliSetupAction = 安裝 Gemini CLI @@ -735,8 +535,6 @@ CredsJetBrainsHelperCustomPrefix = 使用自定義 IDE 基礎路徑: CredsJetBrainsHelperMissing = 請安裝啟用了 AI Assistant 的 JetBrains IDE,然後重新整理 CodexBar。 CredsJetBrainsCustomPathLabel = 自定義路徑 CredsJetBrainsCustomPathPlaceholder = %APPDATA%/JetBrains/IntelliJIdea... -CredsJetBrainsSelectLabel = 選擇要監控的 JetBrains IDE。 -CredsJetBrainsAutoDetectOption = 自動檢測 CredsKiroLabel = Kiro CLI CredsKiroHelperAvailablePrefix = 檢測到於 CredsKiroHelperMissing = kiro-cli:未在 PATH 或常見安裝位置找到。 @@ -748,17 +546,9 @@ TokenAccountAddButton = 新增賬戶 TokenAccountGithubLoginButton = 使用 GitHub 登入 TokenAccountEmpty = 該提供者尚未儲存任何賬戶。 TokenAccountLabelPlaceholder = 標籤(如工作、個人)… -TokenAccountProviderLabel = 提供者 -TokenAccountProviderPlaceholder = 選擇提供者… TokenAccountAddedPrefix = 新增於 TokenAccountUsedPrefix = 上次使用 -TokenAccountTabHint = 按提供者管理多個會話權杖或 API 權杖。所有資料拉取都會使用活動賬戶。僅需要手動權杖的提供者會顯示在此處。 -TokenAccountNoSupported = 當前沒有支援權杖賬戶的提供者。 TokenAccountInlineSummary = 權杖賬戶 -TrayPaceBadgeSlow = 緩慢 -TrayPaceBadgeSteady = 穩定 -TrayPaceBadgeRacing = 加速 -TrayPaceBadgeBurning = 超速 TrayResetsInLabel = { "{}" } 後重置 TrayResetsDueNow = 正在重置… PredictivePaceWarnings = 預測配額告警 @@ -828,10 +618,6 @@ DiagnosticsSectionHeading = 診斷 DiagnosticsCopyButton = 複製診斷資訊 DiagnosticsCopied = 診斷資訊已複製到剪貼簿 DiagnosticsCopyFailed = 無法複製診斷資訊 -SavedCookiesHint = 為透過瀏覽器認證的提供者手動覆寫 Cookie。當自動瀏覽器 Cookie 提取不可用時使用這些 Cookie。 -ImportFromBrowserHint = 從已登入的瀏覽器自動提取 Cookie。該瀏覽器必須安裝在本機,並且你已在其中登入對應提供者。 -NoBrowsersDetectedHint = 本機未偵測到支援的瀏覽器,或自動 Cookie 提取不可用(需要 Windows 且安裝了 Chrome、Edge、Brave 或 Firefox)。請改用下方的手動貼上表單。 -CookieHeaderValuePlaceholder = 貼上 Cookie 標頭值… ApiKeyTitle = API 金鑰 ApiKeyNotSet = 未設定 ApiKeyUpdate = 更新 @@ -907,7 +693,6 @@ NetworkProxyUrlHelper = 範例:http://127.0.0.1:7890(僅限 http 或 https NetworkProxyUserLabel = 使用者名稱(選填) NetworkProxyPasswordLabel = 密碼(選填) NetworkProxyPasswordHelper = 儲存於本機 settings.json。建議盡可能使用不需驗證的本機代理伺服器。 -NetworkProxyInvalidUrl = 代理伺服器 URL 無效。請使用 http://host:port。 DeepSeekPricingTitle = DeepSeek 定價 DeepSeekPricingStandard = 標準/排程前 @@ -918,7 +703,6 @@ DeepSeekPricingNext = 下次切換: DeepSeekPricingEffective = 生效本地時間: DeepSeekPricingAdvice = 官方時程:尖峰為 UTC 01:00-04:00 與 06:00-10:00;離峰半價。 MistralMonthlySpend = 本月 API 花費 -MistralMonthlySpendHelper = 按量付費 Mistral 帳戶的當月 API 用量。 MetricMonthlyPlan = 月租方案 CostSummaryDisplayStyle = 費用摘要顯示方式 CostSummaryDisplayStyleHelper = 選擇在每個提供商卡片上如何顯示費用。 @@ -1004,7 +788,6 @@ PanelPeriodTokens = { "{}" } token OverviewSpendPeriodTitle = 用量與費用 · { "{}" } UsageSpendModelsPeriodCaption = 本機模型歷史:{ "{}" }。 UsageSpendProjectsPeriodCaption = Codex 本機專案費用排名:{ "{}" } -BurndownChartTitle = 剩餘用量 BurndownChartAriaLabel = 已記錄的剩餘配額消耗趨勢 ProviderRaycastAutoImportHelp = 自動從 Chrome 匯入已登入的 www.raycast.com 工作階段。 ProviderRaycastManualCookieHelp = 貼上來自 www.raycast.com/settings 的 Cookie 標頭。 From 256d5bbb5bdcd7d2250529fff56d7dfe64651fdf Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sat, 10 Oct 2026 13:06:20 +0700 Subject: [PATCH 14/25] Add SettingToggle and SettingSelect rows for settings tabs --- .../src/components/FormControls.tsx | 78 +++++ .../src/floatbar/SettingsSection.tsx | 128 +++----- .../src/surfaces/settings/tabs/AboutTab.tsx | 38 +-- .../surfaces/settings/tabs/AdvancedTab.tsx | 108 +++---- .../src/surfaces/settings/tabs/DisplayTab.tsx | 294 +++++++----------- .../src/surfaces/settings/tabs/GeneralTab.tsx | 191 +++++------- 6 files changed, 361 insertions(+), 476 deletions(-) diff --git a/apps/desktop-tauri/src/components/FormControls.tsx b/apps/desktop-tauri/src/components/FormControls.tsx index 61be029a71..f694ae25b4 100644 --- a/apps/desktop-tauri/src/components/FormControls.tsx +++ b/apps/desktop-tauri/src/components/FormControls.tsx @@ -1,5 +1,6 @@ import type React from "react"; import { createContext, useContext, useId } from "react"; +import type { SettingsSnapshot, SettingsUpdate } from "../types/bridge"; // A Field's label and description ids, so the control inside it gets an // accessible name without every call site passing `ariaLabel`. @@ -154,3 +155,80 @@ export function Field({ ); } + +// ── settings-bound rows ────────────────────────────────────────────── + +export interface SettingsControl { + settings: SettingsSnapshot; + set: (patch: SettingsUpdate) => void; + saving: boolean; +} + +type SettingKey = { + [K in keyof SettingsUpdate & keyof SettingsSnapshot]-?: NonNullable extends T + ? K + : never; +}[keyof SettingsUpdate & keyof SettingsSnapshot]; + +/** A leading Field + Toggle that writes one boolean setting; an unset value reads as off. */ +export function SettingToggle({ + ctl, + field, + label, + description, + checked, + disabled, + ariaLabel, +}: { + ctl: SettingsControl; + field: SettingKey; + label: string; + description?: string; + checked?: boolean; + disabled?: boolean; + ariaLabel?: string; +}) { + return ( + + ctl.set({ [field]: v })} + /> + + ); +} + +/** A Field + Select that writes one string setting; an unset value selects "". */ +export function SettingSelect({ + ctl, + field, + label, + description, + options, + value, + disabled, + ariaLabel, +}: { + ctl: SettingsControl; + field: SettingKey; + label: string; + description?: string; + options: { value: string; label: string }[]; + value?: string; + disabled?: boolean; + ariaLabel?: string; +}) { + return ( + + set({ floatBarOrientation: v as FloatBarOrientation })} - /> - - + - set({ updateChannel: v as UpdateChannel })} - /> - +

{t("UpdateChannelChoiceHelper")}

diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.tsx index 88b540e8de..e7c052ce7c 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/AdvancedTab.tsx @@ -6,7 +6,7 @@ import { unregisterGlobalShortcut, } from "../../../lib/tauri"; import { ShortcutCapture } from "../../../components/ShortcutCapture"; -import { Field, Toggle } from "../../../components/FormControls"; +import { Field, SettingToggle } from "../../../components/FormControls"; import type { TabProps } from "../settingsTabs"; import PreferencesTransferSection from "./PreferencesTransferSection"; @@ -27,6 +27,7 @@ function parseSshHosts(value: string): string[] { export default function AdvancedTab({ settings, set, saving }: TabProps) { const { t } = useLocale(); + const ctl = { settings, set, saving }; const [shortcutError, setShortcutError] = useState(null); const [diagnosticsStatus, setDiagnosticsStatus] = useState( null, @@ -183,28 +184,18 @@ export default function AdvancedTab({ settings, set, saving }: TabProps) {

{t("AgentSessionsTitle")}

- - set({ agentSessionsEnabled: v })} - /> - - + - set({ stayAwakeEnabled: v })} - /> - + />

{t("PrivacyTitle")}

- - set({ hidePersonalInfo: v })} - /> - + />
@@ -249,17 +235,12 @@ export default function AdvancedTab({ settings, set, saving }: TabProps) { {t("SectionLocalIntegrations")}
- - set({ powertoysStatusPipeEnabled: v })} - /> - + />
@@ -268,17 +249,12 @@ export default function AdvancedTab({ settings, set, saving }: TabProps) {

{t("NetworkProxyTitle")}

{t("NetworkProxyCaption")}

- - set({ httpProxyEnabled: v })} - /> - + /> {t("HooksTitle")}

{t("HooksCaption")}

- - set({ hooksEnabled: v })} - /> - + />

{t("HooksConfigPathHint")}

@@ -363,28 +334,19 @@ export default function AdvancedTab({ settings, set, saving }: TabProps) { unavailable; paste Cookie headers manually in Providers.

- - set({ disableKeychainAccess: v })} - /> - - + - set({ claudeAvoidKeychainPrompts: v })} - /> - + disabled={saving || settings.disableKeychainAccess} + />
diff --git a/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.tsx b/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.tsx index 51f2607e42..1e6078f4fe 100644 --- a/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.tsx +++ b/apps/desktop-tauri/src/surfaces/settings/tabs/DisplayTab.tsx @@ -1,13 +1,7 @@ import { useEffect, useState } from "react"; import { useLocale } from "../../../hooks/useLocale"; -import { Field, Select, Toggle } from "../../../components/FormControls"; -import type { - MenuBarDisplayMode, - OverviewLayout, - ProviderCatalogEntry, - TrayIconMode, - TrayVisibilityStatusDto, -} from "../../../types/bridge"; +import { SettingSelect, SettingToggle } from "../../../components/FormControls"; +import type { ProviderCatalogEntry, TrayVisibilityStatusDto } from "../../../types/bridge"; import type { TabProps } from "../settingsTabs"; import FloatBarSettingsSection from "../../../floatbar/SettingsSection"; import SwitcherShortcutsSection from "../SwitcherShortcutsSection"; @@ -24,6 +18,7 @@ export default function DisplayTab({ providers?: ProviderCatalogEntry[]; }) { const { t } = useLocale(); + const ctl = { settings, set, saving }; const [trayVisibility, setTrayVisibility] = useState(null); useEffect(() => { @@ -45,134 +40,92 @@ export default function DisplayTab({ {mode === "menuBar" &&

{t("MenuBar")}

- - - provider.value !== settings.stackedTrayBottomProvider, - ), - ]} - onChange={(provider) => - set({ stackedTrayTopProvider: provider }) - } - /> - - - - set({ menuBarDisplayMode: v as MenuBarDisplayMode }) - } - /> - - + - set({ promoteTrayIcon: v })} - /> - + : t("PromoteTrayIconUnsupportedHint")} + disabled={saving || trayVisibility?.support !== "supported"} + />
} @@ -180,85 +133,56 @@ export default function DisplayTab({ {mode === "menu" &&

{t("TabMenu")}

- - set({ trayPanelAlwaysOnTop: v })} - /> - - + - set({ showAsUsed: v })} - /> - - + - ({ - value: opt.value, - label: opt.display, - }))} - onChange={(v) => set({ uiLanguage: v as Language })} - /> - - - ({ - value: option.value, - label: t(option.labelKey), - }))} - onChange={(value) => set({ theme: value as ThemePreference })} - /> - + ({ + value: option.value, + label: t(option.labelKey), + }))} + />
} {mode === "general" &&

{t("StartupSettings")}

- - set({ startAtLogin: v })} - /> - - + - set({ startMinimized: v })} - /> - + />
} @@ -339,48 +330,32 @@ export default function GeneralTab({ {t("SectionNotifications")}
- - set({ showNotifications: v })} - /> - - + - set({ predictivePaceWarningEnabled: v })} - /> - - + - set({ credentialExpiryNotificationsEnabled: v })} - /> - - - set({ soundEnabled: v })} - /> - + ariaLabel={t("CredentialExpiryNotifications")} + /> + {settings.soundEnabled && ( <> - - set({ refreshAllProvidersOnMenuOpen: v })} - /> - - + -