Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions locales/en-US/native.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"tray": "Tray",
"trayIconAndSession": "Icon + Session",
"trayHourlyAndWeekly": "Hourly + Weekly",
"hidden": "Hidden",
"dockIcon": "Dock Icon",
"showInDock": "Show in Dock",
"menuBarOnly": "Menu Bar Only",
"settings": "Settings",
"language": "Language",
"systemLanguage": "System Default",
"english": "English",
"simplifiedChinese": "Simplified Chinese",
"window": "Window",
"help": "Help",
"file": "File",
"edit": "Edit",
"view": "View",
"noAccounts": "No accounts configured",
"openApp": "Open Codex Switcher",
"quit": "Quit",
"about": "About Codex Switcher",
"services": "Services",
"hide": "Hide Codex Switcher",
"hideOthers": "Hide Others",
"minimize": "Minimize",
"maximize": "Maximize",
"closeWindow": "Close Window",
"undo": "Undo",
"redo": "Redo",
"cut": "Cut",
"copy": "Copy",
"paste": "Paste",
"selectAll": "Select All",
"fullscreen": "Enter Full Screen"
}
297 changes: 297 additions & 0 deletions locales/en-US/ui.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,297 @@
{
"common": {
"add": "Add",
"cancel": "Cancel",
"close": "Close",
"copy": "Copy",
"copied": "Copied",
"dismiss": "Dismiss",
"import": "Import",
"later": "Later",
"open": "Open",
"refresh": "Refresh",
"restart": "Restart",
"unknown": "Unknown",
"unknownError": "Unknown error"
},
"language": {
"label": "Language",
"system": "System Default",
"changeFailed": "Could not change language: {{error}}"
},
"window": {
"minimize": "Minimize",
"maximize": "Maximize",
"restore": "Restore",
"close": "Close"
},
"header": {
"codexRunning": "{{count}} Codex running",
"forceClose": "Force close",
"forceCloseTitle": "Force close running Codex processes",
"openCodex": "Open Codex",
"opening": "Opening...",
"showAll": "Show all account names and emails",
"hideAll": "Hide all account names and emails",
"refreshingAll": "Refreshing all usage",
"refreshAll": "Refresh all usage",
"warmupAll": "Send minimal traffic using all accounts",
"disableAutoAll": "Disable auto warm-up for all accounts",
"enableAutoAll": "Enable auto warm-up for all accounts",
"timedTitle": "Schedule warm-up at specific times of day for all accounts",
"timedWarmup": "Timed warm-up",
"noTimes": "No times added yet.",
"removeTime": "Remove {{time}}",
"lightMode": "Switch to light mode",
"darkMode": "Switch to dark mode",
"accountMenu": "Account",
"addAccount": "+ Add Account"
},
"warmup": {
"warming": "Warming...",
"autoOn": "Auto: on",
"autoOff": "Auto: off",
"autoSession": "Auto: 5h",
"autoWeekly": "Auto: weekly",
"autoWarming": "Auto warming...",
"waitingWeekly": "Waiting weekly reset",
"timedWarming": "Timed warming...",
"timedOff": "Timed: off",
"timedNext": "Timed: {{time}}",
"switchedFromTray": "Switched account from tray.",
"switchFailed": "Switch failed: {{error}}",
"switchBlocked": "Account switch was blocked.",
"closeFailed": "Close failed: {{error}}",
"switchedAfterClose": "Switched account after force closing Codex.",
"switchAfterCloseFailed": "Switch failed after force close: {{error}}",
"sentFor": "Warm-up sent for {{name}}",
"failedFor": "Warm-up failed for {{name}}: {{error}}",
"noneAvailable": "No accounts available for warm-up",
"sentForAll": "Warm-up sent for all {{count}} account",
"sentForAll_other": "Warm-up sent for all {{count}} accounts",
"summary": "Warmed {{warmed}}/{{total}}. Failed: {{failed}}",
"allFailed": "Warm-up all failed: {{error}}",
"autoSessionSentFor": "Auto 5h warm-up sent for {{name}}",
"autoWeeklySentFor": "Auto weekly warm-up sent for {{name}}",
"autoFailedFor": "Auto warm-up failed for {{name}}: {{error}}",
"timedSent": "Timed warm-up sent for {{count}} account",
"timedSent_other": "Timed warm-up sent for {{count}} accounts",
"timedSummary": "Timed warm-up: {{warmed}} succeeded, {{failed}} failed"
},
"backup": {
"exportSlim": "Export Slim Text",
"importSlim": "Import Slim Text",
"exportFull": "Export Full Encrypted File",
"importFull": "Import Full Encrypted File",
"exporting": "Exporting...",
"importing": "Importing...",
"slimExported": "Slim text exported ({{count}} accounts).",
"slimExportFailed": "Slim export failed",
"pasteFirst": "Please paste the slim text string first.",
"importSummary": "Imported {{imported}}, skipped {{skipped}} (total {{total}})",
"slimImportFailed": "Slim import failed",
"fullExported": "Full encrypted file exported.",
"fullExportFailed": "Full export failed",
"fullImportFailed": "Full import failed",
"keepExisting": "Existing accounts are kept. Only missing accounts are imported.",
"secretWarning": "This slim string contains account secrets. Keep it private.",
"generating": "Generating...",
"exportPlaceholder": "Export string will appear here",
"importPlaceholder": "Paste config string here",
"clipboardUnavailable": "Clipboard unavailable. Please copy manually.",
"copyString": "Copy String",
"importMissing": "Import Missing Accounts"
},
"codex": {
"opened": "Codex app opened.",
"openFailed": "Open Codex failed: {{error}}"
},
"accounts": {
"loading": "Loading accounts...",
"loadFailed": "Failed to load accounts",
"emptyTitle": "No accounts yet",
"emptyBody": "Add your first Codex account to get started",
"add": "Add Account",
"activeHeading": "Active Account",
"otherHeading": "Other Accounts ({{count}})",
"searchPlaceholder": "Search accounts by name or email",
"searchLabel": "Search accounts",
"clearSearch": "Clear account search",
"noMatchingTitle": "No matching accounts",
"noMatchingBody": "Try a different account name or email address.",
"sort": "Sort",
"sortResetAsc": "Reset: earliest to latest",
"sortResetDesc": "Reset: latest to earliest",
"sortRemainingDesc": "% remaining: highest to lowest",
"sortRemainingAsc": "% remaining: lowest to highest",
"sortExpiryAsc": "Expiry: earliest to latest",
"sortExpiryDesc": "Expiry: latest to earliest",
"refreshSuccess": "Usage refreshed successfully",
"deleteConfirm": "Click delete again to confirm removal"
},
"forceClose": {
"switch": "Force close and switch account",
"processes": "Force close running Codex processes",
"title": "Force close running Codex processes?",
"body": "This will force close {{count}} Codex process that currently blocks account switching.",
"body_other": "This will force close {{count}} Codex processes that currently block account switching.",
"thenSwitch": "After closing Codex, Codex Switcher will switch to {{name}}.",
"warning": "Unsaved Codex work may be lost.",
"closing": "Force closing...",
"noneFound": "No running Codex processes found.",
"closed": "Force closed {{count}} Codex session.",
"closed_other": "Force closed {{count}} Codex sessions.",
"partial": "Force closed {{closed}}/{{total}} Codex sessions. {{remaining}} still running.",
"couldNotClose": "Could not force close {{count}} Codex session.",
"couldNotClose_other": "Could not force close {{count}} Codex sessions.",
"failed": "Force close failed: {{error}}"
},
"closeBehavior": {
"title": "Keep Codex Switcher in the Dock?",
"body": "When the window is closed, Codex Switcher can stay in the Dock or live only in the menu bar.",
"changeLater": "You can always change this later from the tray popup.",
"dontAsk": "Don't ask again",
"keepDock": "Keep in Dock",
"menuBarOnly": "Menu Bar Only"
},
"addAccount": {
"title": "Add Account",
"chatgptLogin": "ChatGPT Login",
"importFile": "Import File",
"name": "Account Name (optional)",
"namePlaceholder": "Leave blank to use email",
"nameRequired": "Please enter an account name",
"fileRequired": "Please select an auth.json file",
"waiting": "Waiting for browser login...",
"openLink": "Please open the following link in your browser to proceed:",
"copyLinkManually": "Clipboard unavailable. Copy the link manually.",
"copied": "Copied!",
"remoteOauthWarning": "OAuth login must finish on the same host machine because the callback redirects to localhost.",
"loginHelp": "Click the button below to generate a login link. You will need to open it in your browser to authenticate.",
"selectFile": "Select auth.json file",
"browse": "Browse...",
"importHelp": "Import credentials from an existing Codex auth.json file",
"adding": "Adding...",
"generateLink": "Generate Login Link"
},
"accountCard": {
"never": "Never",
"justNow": "Just now",
"secondsAgo": "{{count}}s ago",
"minutesAgo": "{{count}}m ago",
"hoursAgo": "{{count}}h ago",
"expiryUnavailable": "Expiry unavailable",
"expired": "Expired {{date}}",
"until": "Until {{date}}",
"resetCount": "{{count}} reset",
"resetCount_other": "{{count}} resets",
"closest": "closest {{date}}",
"closestExpires": "closest expires {{date}}",
"apiKey": "API Key",
"rename": "Click to rename",
"showInfo": "Show info",
"hideInfo": "Hide info",
"lastUpdated": "Last updated: {{time}}",
"active": "Active",
"closeProcesses": "Close all Codex processes first",
"switching": "Switching...",
"codexRunning": "Codex Running",
"switch": "Switch",
"warmupSending": "Sending warm-up request...",
"warmupSend": "Send minimal warm-up request",
"autoAll": "Auto warm-up is enabled for all accounts",
"autoDisable": "Disable auto warm-up for this account",
"autoEnable": "Enable auto warm-up for this account",
"refreshUsage": "Refresh usage",
"remove": "Remove account"
},
"usage": {
"now": "now",
"seconds": "{{count}}s",
"minutes": "{{count}}m",
"hours": "{{count}}h",
"hoursMinutes": "{{hours}}h {{minutes}}m",
"days": "{{count}}d",
"left": "{{percent}}% left",
"resets": "resets {{time}}",
"fetching": "Fetching usage...",
"noData": "No rate limit data",
"fiveHour": "5h Limit",
"weekly": "Weekly Limit",
"credits": "Credits: {{balance}}"
},
"updates": {
"available": "Update available: v{{version}}",
"update": "Update",
"downloading": "Downloading update...",
"ready": "Update ready. Restart to apply.",
"failed": "Update failed: {{error}}"
},
"tray": {
"loading": "Loading...",
"noAccounts": "No accounts configured",
"session": "Session",
"weekly": "Weekly",
"resetsNow": "Resets now",
"resetsIn": "Resets in {{time}}",
"usageUnavailable": "Usage unavailable",
"today": "today",
"lastSevenDays": "last 7 days",
"dock": "Dock",
"show": "Show",
"menuBar": "Menu Bar",
"openApp": "Open Codex Switcher",
"quit": "Quit"
},
"stats": {
"source": "Codex usage stats via ChatGPT backend",
"chatgptOnly": "Usage stats are available for ChatGPT accounts only.",
"unavailable": "Usage stats unavailable.",
"title": "Usage Stats",
"updated": "updated {{time}}",
"asOf": "Stats as of {{date}}",
"backend": "ChatGPT backend",
"refresh": "Refresh usage stats",
"lifetime": "Lifetime",
"today": "Today",
"lastSevenDays": "Last 7 days",
"lastThirtyDays": "Last 30 days",
"currentStreak": "Current streak",
"peakDay": "Peak day",
"tokens": "tokens",
"reported": "reported",
"days": "{{count, number}} day",
"days_other": "{{count, number}} days",
"justNow": "just now",
"minutesAgo": "{{count}}m ago",
"hoursAgo": "{{count}}h ago",
"rangeThirty": "Last 30 days",
"rangeThreeMonths": "Last 3 months",
"rangeSixMonths": "Last 6 months",
"rangeAll": "All reported",
"optionThirty": "30d",
"optionThreeMonths": "3 mo",
"optionSixMonths": "6 mo",
"optionAll": "All",
"dailyUnavailable": "Daily activity unavailable",
"tokenActivity": "Token activity",
"tokenActivityRange": "Token activity range",
"moreDetails": "More usage details",
"longestTask": "Longest task",
"longestStreak": "Longest streak",
"activityInsights": "Activity insights",
"fastMode": "Fast mode",
"reasoning": "Reasoning",
"skillsExplored": "Skills explored",
"totalThreads": "Total threads",
"mostUsedPlugins": "Most used plugins",
"runs": "{{count, number}} run",
"runs_other": "{{count, number}} runs"
},
"fileDialog": {
"selectAuth": "Select auth.json file",
"exportFull": "Export Full Encrypted Account Config",
"importFull": "Import Full Encrypted Account Config",
"noFile": "No file selected"
}
}
4 changes: 4 additions & 0 deletions locales/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[
{ "code": "en-US", "label": "English" },
{ "code": "zh-CN", "label": "简体中文" }
]
36 changes: 36 additions & 0 deletions locales/zh-CN/native.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"tray": "托盘",
"trayIconAndSession": "图标 + 会话",
"trayHourlyAndWeekly": "小时 + 每周",
"hidden": "隐藏",
"dockIcon": "程序坞图标",
"showInDock": "在程序坞中显示",
"menuBarOnly": "仅菜单栏",
"settings": "设置",
"language": "语言",
"systemLanguage": "跟随系统",
"english": "English",
"simplifiedChinese": "简体中文",
"window": "窗口",
"help": "帮助",
"file": "文件",
"edit": "编辑",
"view": "视图",
"noAccounts": "尚未配置账户",
"openApp": "打开 Codex Switcher",
"quit": "退出",
"about": "关于 Codex Switcher",
"services": "服务",
"hide": "隐藏 Codex Switcher",
"hideOthers": "隐藏其他应用",
"minimize": "最小化",
"maximize": "最大化",
"closeWindow": "关闭窗口",
"undo": "撤销",
"redo": "重做",
"cut": "剪切",
"copy": "复制",
"paste": "粘贴",
"selectAll": "全选",
"fullscreen": "进入全屏"
}
Loading