mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-17 10:17:05 +00:00
- add runtime-aware resume lane diagnostics and auth backup flows - warn when account resume uses a different plain ccs continuity lane - surface lane mismatch guidance in the accounts dashboard, docs, and tests
5351 lines
268 KiB
TypeScript
5351 lines
268 KiB
TypeScript
import i18n from 'i18next';
|
||
import { initReactI18next } from 'react-i18next';
|
||
import { getInitialLocale } from '@/lib/locales';
|
||
|
||
const resources = {
|
||
en: {
|
||
translation: {
|
||
locale: {
|
||
en: 'English',
|
||
'zh-CN': 'Simplified Chinese',
|
||
vi: 'Vietnamese',
|
||
ja: 'Japanese',
|
||
},
|
||
layout: {
|
||
languageSwitcher: 'Language',
|
||
},
|
||
nav: {
|
||
general: 'General',
|
||
home: 'Home',
|
||
analytics: 'Analytics',
|
||
identityAccess: 'Identity & Access',
|
||
apiProfiles: 'API Profiles',
|
||
cliproxyPlus: 'CLIProxy Plus',
|
||
cliproxyOverview: 'Overview',
|
||
controlPanel: 'Control Panel',
|
||
githubCopilot: 'GitHub Copilot',
|
||
cursorIde: 'Cursor IDE',
|
||
claudeExtension: 'Claude Extension',
|
||
accounts: 'Accounts',
|
||
allAccounts: 'All Accounts',
|
||
sharedData: 'Shared Data',
|
||
compatibleClis: 'Compatible',
|
||
factoryDroid: 'Factory Droid',
|
||
system: 'System',
|
||
health: 'Health',
|
||
settings: 'Settings',
|
||
openrouterTooltip: 'Featured: OpenRouter + Alibaba Coding Plan + Ollama',
|
||
},
|
||
home: {
|
||
profiles: 'Profiles',
|
||
cliproxy: 'CLIProxy',
|
||
accounts: 'Accounts',
|
||
health: 'Health',
|
||
configurationRequired: 'Configuration Required',
|
||
},
|
||
auth: {
|
||
dashboardTitle: 'CCS Dashboard',
|
||
loginDescription: 'Enter your credentials to access the dashboard',
|
||
username: 'Username',
|
||
password: 'Password',
|
||
usernamePlaceholder: 'Enter username',
|
||
passwordPlaceholder: 'Enter password',
|
||
signIn: 'Sign In',
|
||
signingIn: 'Signing in...',
|
||
loginFailed: 'Login failed',
|
||
},
|
||
commonToast: {
|
||
apiKeyRequired: 'API key is required',
|
||
accountAddedPresetFailed: 'Account added, but failed to apply default preset',
|
||
settingsCopied: 'Settings copied to clipboard',
|
||
enterPresetName: 'Please enter a preset name to save',
|
||
codeCopied: 'Code copied to clipboard',
|
||
copyCodeFailed: 'Failed to copy code',
|
||
appliedModelAllTiers: 'Applied model to all tiers',
|
||
settingsSaved: 'Settings saved',
|
||
defaultTargetUpdated: 'Default target updated',
|
||
failedUpdateDefaultTarget: 'Failed to update default target to {{target}}{{suffix}}',
|
||
},
|
||
profileDialog: {
|
||
editTitle: 'Edit Profile',
|
||
createTitle: 'Create API Profile',
|
||
name: 'Name',
|
||
namePlaceholder: 'my-api',
|
||
baseUrl: 'Base URL',
|
||
baseUrlPlaceholder: 'https://api.example.com',
|
||
apiKey: 'API Key',
|
||
defaultModel: 'Default Model (ANTHROPIC_MODEL)',
|
||
defaultModelHint: 'Leave blank to use: {{model}}',
|
||
modelMappingTitle: 'Model Mapping (Opus/Sonnet/Haiku)',
|
||
modelMappingDesc:
|
||
'Configure different model IDs for each tier. Useful for API proxies that route different model types to different backends.',
|
||
opusModel: 'Opus Model (ANTHROPIC_DEFAULT_OPUS_MODEL)',
|
||
sonnetModel: 'Sonnet Model (ANTHROPIC_DEFAULT_SONNET_MODEL)',
|
||
haikuModel: 'Haiku Model (ANTHROPIC_DEFAULT_HAIKU_MODEL)',
|
||
cancel: 'Cancel',
|
||
saving: 'Saving...',
|
||
update: 'Update',
|
||
create: 'Create',
|
||
},
|
||
modelTierMapping: {
|
||
title: 'Model Tier Mapping',
|
||
advanced: 'Advanced',
|
||
description: "Configure different models for Claude Code's opus/sonnet/haiku tiers.",
|
||
autoSuggest: 'Auto-suggest based on {{provider}}',
|
||
opusPlaceholder: 'e.g., anthropic/claude-opus-4',
|
||
sonnetPlaceholder: 'e.g., anthropic/claude-sonnet-4',
|
||
haikuPlaceholder: 'e.g., anthropic/claude-3.5-haiku',
|
||
footer:
|
||
'These set ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL, ANTHROPIC_DEFAULT_HAIKU_MODEL.',
|
||
},
|
||
envEditor: {
|
||
sensitive: 'sensitive',
|
||
none: 'No environment variables configured.',
|
||
noneHint: 'Add variables using the input below or edit the JSON directly.',
|
||
addVariable: 'Add Environment Variable',
|
||
keyPlaceholder: 'VARIABLE_NAME',
|
||
valuePlaceholder: 'value',
|
||
},
|
||
setupVariant: {
|
||
using: 'Using:',
|
||
variantNameRequired: 'Variant Name *',
|
||
variantNamePlaceholder: 'e.g., my-gemini, g3, flash',
|
||
invokeHintPrefix: 'Use this name to invoke:',
|
||
model: 'Model',
|
||
modelPlaceholder: 'e.g., gemini-2.5-pro, claude-opus-4-6-thinking',
|
||
choosePresetInstead: 'Choose from presets instead',
|
||
selectModel: 'Select a model',
|
||
customModelName: 'Custom model name...',
|
||
enterAnyModel: 'Enter any model name supported by CLIProxy',
|
||
defaultModel: 'Default: {{model}}',
|
||
providerDefault: 'provider default',
|
||
back: 'Back',
|
||
skip: 'Skip',
|
||
creating: 'Creating...',
|
||
createVariant: 'Create Variant',
|
||
skipHint: 'Skip if you just wanted to add an account without creating a variant',
|
||
},
|
||
customPresetDialog: {
|
||
title: 'Custom Preset',
|
||
presetNameOptional: 'Preset Name (optional)',
|
||
presetNamePlaceholder: 'e.g., My Custom Config',
|
||
codexTipPrefix: 'Codex tip: suffixes',
|
||
codexTipSuffix: 'pin effort. Unsuffixed models use Thinking settings.',
|
||
defaultModel: 'Default Model',
|
||
defaultModelDesc: 'Used when no specific tier is requested',
|
||
opusModel: 'Opus (Most capable)',
|
||
opusModelDesc: 'For complex reasoning tasks',
|
||
sonnetModel: 'Sonnet (Balanced)',
|
||
sonnetModelDesc: 'Balance of speed and capability',
|
||
haikuModel: 'Haiku (Fast)',
|
||
haikuModelDesc: 'Quick responses for simple tasks',
|
||
cancel: 'Cancel',
|
||
savePreset: 'Save Preset',
|
||
applyPreset: 'Apply Preset',
|
||
},
|
||
componentModelSelector: {
|
||
selectModel: 'Select model',
|
||
availableModelsCount: 'Available Models ({{count}})',
|
||
preview: 'Preview',
|
||
},
|
||
searchableSelect: {
|
||
searchModels: 'Search models...',
|
||
noResults: 'No results found.',
|
||
},
|
||
copilotSettings: {
|
||
enableCopilot: 'Enable Copilot',
|
||
enableCopilotDesc: 'Allow using GitHub Copilot subscription',
|
||
basicSettings: 'Basic Settings',
|
||
accountType: 'Account Type',
|
||
accountTypeIndividual: 'Individual',
|
||
accountTypeBusiness: 'Business',
|
||
accountTypeEnterprise: 'Enterprise',
|
||
rateLimiting: 'Rate Limiting',
|
||
rateLimitSeconds: 'Rate Limit (seconds)',
|
||
noLimit: 'No limit',
|
||
waitOnRateLimit: 'Wait on Rate Limit',
|
||
waitOnRateLimitDesc: 'Wait instead of error when limit hit',
|
||
daemonSettings: 'Daemon Settings',
|
||
autoStartDaemon: 'Auto-start Daemon',
|
||
autoStartDaemonDesc: 'Start copilot-api when using profile',
|
||
},
|
||
providerModelSelector: {
|
||
selectModel: 'Select model',
|
||
noModelsForProvider: 'No models available for this provider',
|
||
broken: 'BROKEN',
|
||
deprecated: 'DEPRECATED',
|
||
paid: 'PAID',
|
||
freeTier: 'Free Tier',
|
||
paidTier: 'Paid Tier',
|
||
modelKnownIssues: 'This model has known issues',
|
||
viewIssueDetails: 'View issue details',
|
||
modelDeprecated: 'This model is deprecated',
|
||
recommended: 'Recommended',
|
||
allModelsCount: 'All Models ({{count}})',
|
||
noModelsAvailable: 'No models available',
|
||
},
|
||
createAuthProfileDialog: {
|
||
title: 'Create New Account',
|
||
description:
|
||
'Auth profiles require Claude CLI login. Run the command below in your terminal. You can edit sync mode, group, and continuity depth later from the Accounts table.',
|
||
profileName: 'Profile Name',
|
||
profileNamePlaceholder: 'e.g., work, personal, client',
|
||
invalidProfileName:
|
||
'Name must start with a letter and contain only letters, numbers, dashes, or underscores.',
|
||
enableSharedHistory: 'Enable shared history sync with other ccs auth accounts',
|
||
historySyncGroupOptional: 'History Sync Group (optional)',
|
||
historySyncGroupPlaceholder: 'default, sprint-a, client-x',
|
||
historySyncGroupHint:
|
||
'Leave empty to use the default shared group. Spaces are normalized to dashes.',
|
||
deeperContinuity: 'Advanced: deeper continuity mode',
|
||
deeperContinuityHint:
|
||
'Adds sync for session-env, file-history, shell-snapshots, and todos. Credentials stay isolated.',
|
||
invalidContextGroup:
|
||
'Group must start with a letter and use only letters, numbers, dashes, or underscores (max {{max}} chars).',
|
||
command: 'Command',
|
||
commandFallback: 'ccs auth create <name>',
|
||
afterRunPrefix: 'After running the command:',
|
||
afterRunStep1: 'Complete the Claude login in your browser',
|
||
afterRunStep2: 'Return here and refresh to see the new account',
|
||
poolingHint:
|
||
'Prefer pooled Claude OAuth routing instead? Use CLIProxy Claude pool from the Accounts page action button.',
|
||
close: 'Close',
|
||
copied: 'Copied!',
|
||
copyCommand: 'Copy Command',
|
||
},
|
||
cliproxyModelCategory: {
|
||
google: 'Google (Gemini)',
|
||
openai: 'OpenAI (GPT)',
|
||
anthropic: 'Anthropic (Claude)',
|
||
antigravity: 'Antigravity',
|
||
other: 'Other',
|
||
},
|
||
cliproxyOverviewComponents: {
|
||
availableModels: 'Available Models',
|
||
noModelsAvailable: 'No models available',
|
||
startSessionHint: 'Start a CLIProxy session to fetch available models',
|
||
totalCount: '{{count}} total',
|
||
availableThroughGroupedByProvider:
|
||
'Models available through {{backendLabel}}, grouped by provider',
|
||
moreCount: '+{{count}} more',
|
||
},
|
||
categorizedModelSelector: {
|
||
selectModel: 'Select a model',
|
||
noModelsAvailable: 'No models available',
|
||
modelPlaceholder: 'Model...',
|
||
},
|
||
openrouterQuickStart: {
|
||
recommended: 'Recommended',
|
||
title: 'Start with OpenRouter',
|
||
description:
|
||
'Access {{modelCountLabel}} models from OpenAI, Anthropic, Google, Meta and more - all through one API.',
|
||
featureOneApi: 'One API, all providers',
|
||
featureTierMapping: 'Model tier mapping',
|
||
profileCount: '{{count}} profile',
|
||
profileCount_other: '{{count}} profiles',
|
||
selectProfileTitle: 'Select an API profile',
|
||
summaryDescriptionWithProfiles:
|
||
'You already have {{count}} profile in this workspace. Select one from the left rail to edit it, or create another profile from here.',
|
||
summaryDescriptionWithProfiles_other:
|
||
'You already have {{count}} profiles in this workspace. Select one from the left rail to edit it, or create another profile from here.',
|
||
summaryDescriptionNoProfiles:
|
||
'Use API Profiles for Anthropic-compatible endpoints. Use AI Providers for Gemini, Codex, Claude, Vertex, and OpenAI-compatible connectors.',
|
||
openrouterModelsBadge: '{{modelCountLabel}} OpenRouter models',
|
||
runtimeProviderBadge: 'Runtime provider setup',
|
||
runtimeProviderTitle: 'Open AI Providers',
|
||
runtimeProviderDescription:
|
||
'Manage shared provider keys and runtime connectors before creating standalone API Profiles.',
|
||
runtimeProviderFeatureConnectors:
|
||
'Gemini, Codex, Claude, Vertex, and OpenAI-compatible connectors',
|
||
runtimeProviderFeatureSecrets: 'Shared secrets stay outside individual API profiles',
|
||
runtimeProviderFooter:
|
||
'Best when multiple profiles should share one provider configuration.',
|
||
createOpenRouterProfile: 'Create OpenRouter Profile',
|
||
getApiKeyAt: 'Get your API key at',
|
||
or: 'or',
|
||
createCustomProfile: 'Create Custom API Profile',
|
||
},
|
||
alibabaCodingPlanQuickStart: {
|
||
recommended: 'Recommended',
|
||
title: 'Try Alibaba Coding Plan',
|
||
description:
|
||
'Use Alibaba Cloud Coding Plan through an Anthropic-compatible endpoint for coding workloads.',
|
||
featureEndpoint: 'Anthropic-compatible endpoint',
|
||
featureKeyFormat: 'Dedicated sk-sp API keys',
|
||
createAlibabaProfile: 'Create Alibaba Coding Plan Profile',
|
||
readGuideAt: 'Read setup guide at',
|
||
},
|
||
alibabaCodingPlanPromo: {
|
||
title: 'Alibaba Coding Plan',
|
||
subtitle: 'Model Studio Coding Plan via Anthropic endpoint',
|
||
add: 'Add',
|
||
},
|
||
credentialHealth: {
|
||
title: 'Credential Health',
|
||
ready: 'Ready',
|
||
noCredentialsConfigured:
|
||
'No credentials configured. Use the login buttons above to authenticate.',
|
||
neverUsed: 'Never used',
|
||
justNow: 'Just now',
|
||
unknown: 'Unknown',
|
||
daysAgo: '{{count}}d ago',
|
||
hoursAgo: '{{count}}h ago',
|
||
minutesAgo: '{{count}}m ago',
|
||
},
|
||
proxyStatusWidget: {
|
||
justNow: 'just now',
|
||
minutesAgo: '{{count}}m ago',
|
||
hoursAgo: '{{count}}h ago',
|
||
syncReady: 'Sync Ready',
|
||
noConfig: 'No Config',
|
||
remoteProxy: 'Remote Proxy',
|
||
active: 'Active',
|
||
trafficAutoRouted: 'Traffic auto-routed to remote server',
|
||
tooltipSync: 'Sync profiles to CLIProxy',
|
||
tooltipRestart: 'Restart',
|
||
tooltipStop: 'Stop',
|
||
tooltipClose: 'Close',
|
||
tooltipVersionSettings: 'Version settings',
|
||
versionManagement: 'Version Management',
|
||
selectVersionPlaceholder: 'Select version to install...',
|
||
stable: '(stable)',
|
||
install: 'Install',
|
||
versionsAboveUnstable: 'Versions above {{version}} have known issues',
|
||
versionsKnownIssues: 'Version {{version}} has known issues',
|
||
lastChecked: 'Last checked {{time}}',
|
||
notRunning: 'Not running',
|
||
start: 'Start',
|
||
port: 'Port {{port}}',
|
||
sessionCount: '{{count}} session',
|
||
sessionCount_other: '{{count}} sessions',
|
||
installFaultyTitle: 'Install Version With Known Issues?',
|
||
installFaultyDesc:
|
||
'You are about to install <strong>v{{version}}</strong>, which falls inside the known faulty range <strong>{{range}}</strong>.',
|
||
installFaultyWarning:
|
||
'This version has known bugs and may fail or leave the proxy in a bad state.',
|
||
installUnstableTitle: 'Install Unstable Version?',
|
||
installUnstableDesc:
|
||
'You are about to install <strong>v{{version}}</strong>, which is above the maximum stable version <strong>v{{maxStable}}</strong>.',
|
||
installUnstableWarning:
|
||
'This version has known stability issues and may cause unexpected behavior.',
|
||
installUnstableConfirm: 'Are you sure you want to proceed?',
|
||
cancel: 'Cancel',
|
||
installAnyway: 'Install Anyway',
|
||
clickToDowngrade: 'Click to downgrade',
|
||
clickToUpdate: 'Click to update',
|
||
},
|
||
syncStatusCard: {
|
||
profileSync: 'Profile Sync',
|
||
ready: 'Ready',
|
||
noConfig: 'No Config',
|
||
syncsProfilesDesc: 'Syncs API profiles to local CLIProxy config',
|
||
runDoctorHint: 'Run <code>ccs doctor --fix</code> to generate config.',
|
||
details: 'Details',
|
||
syncNow: 'Sync Now',
|
||
},
|
||
syncDialog: {
|
||
title: 'Sync Profiles to Local CLIProxy',
|
||
description: 'Sync your CCS API profiles to the local CLIProxy config.yaml.',
|
||
noProfiles: 'No profiles configured to sync.',
|
||
createProfilesFirst: 'Create API profiles first using the Profiles tab.',
|
||
modelLabel: 'Model:',
|
||
ready: 'Ready',
|
||
profilesToSync_one: '{{count}} profile to sync',
|
||
profilesToSync_other: '{{count}} profiles to sync',
|
||
cancel: 'Cancel',
|
||
syncing: 'Syncing...',
|
||
synced: 'Synced!',
|
||
syncNow: 'Sync Now',
|
||
},
|
||
errorLogs: {
|
||
title: 'Error Logs',
|
||
failedRequests_one: '{{count}} failed request',
|
||
failedRequests_other: '{{count}} failed requests',
|
||
cliproxyDiagnostics: 'CLIProxy Diagnostics',
|
||
showingCount: 'Showing 50 of {{total}} logs',
|
||
selectLog: 'Select a log to view details',
|
||
failedLoadContent: 'Failed to load log content',
|
||
copyAbsolutePath: 'Copy absolute path',
|
||
copyRawContent: 'Copy raw log content',
|
||
tabOverview: 'Overview',
|
||
tabHeaders: 'Headers',
|
||
tabRequest: 'Request',
|
||
tabResponse: 'Response',
|
||
tabRaw: 'Raw',
|
||
modelLabel: 'Model:',
|
||
quotaResetsIn: 'Quota resets in ',
|
||
method: 'Method',
|
||
provider: 'Provider',
|
||
version: 'Version',
|
||
endpoint: 'Endpoint',
|
||
url: 'URL',
|
||
timestamp: 'Timestamp',
|
||
na: 'N/A',
|
||
noHeaders: 'No headers available',
|
||
noRequestBody: 'No request body',
|
||
noResponseBody: 'No response body',
|
||
rateLimitedMsg:
|
||
'Rate Limited. Switch to a different account or wait for quota reset. Model {{model}} has exhausted quota.',
|
||
rateLimitedMsgNoModel:
|
||
'Rate Limited. Switch to a different account or wait for quota reset.',
|
||
authFailedMsg:
|
||
'Authentication failed. Re-authenticate via CLIProxy Settings or check API key.',
|
||
notFoundMsg: 'Endpoint not found. This endpoint may not exist on this provider.',
|
||
serverErrorMsg: 'Server error from upstream. Retry later or check provider status page.',
|
||
timeoutMsg: 'Request timed out. Check network connection or increase timeout settings.',
|
||
unknown: 'unknown',
|
||
},
|
||
editAccountContext: {
|
||
title: 'Edit History Sync',
|
||
description:
|
||
'Configure how "{{name}}" shares history and continuity with other ccs auth accounts.',
|
||
syncMode: 'Sync Mode',
|
||
selectContextMode: 'Select context mode',
|
||
isolatedOption: 'Isolated',
|
||
sharedOption: 'Shared',
|
||
sharedModeHint: 'Reuses workspace context across accounts in the same history group.',
|
||
isolatedModeHint: 'Keeps this account fully separate from other ccs auth accounts.',
|
||
historySyncGroup: 'History Sync Group',
|
||
groupPlaceholder: 'default',
|
||
groupHint:
|
||
'Normalized to lowercase (spaces become dashes). Allowed: letters, numbers, _ , - (max {{max}} chars).',
|
||
invalidGroup: 'Enter a valid group name that starts with a letter.',
|
||
continuityDepth: 'Continuity Depth',
|
||
selectContinuityDepth: 'Select continuity depth',
|
||
standardOption: 'Standard',
|
||
deeperOption: 'Deeper',
|
||
deeperHint: 'Syncs comprehensive session-env, file-history, shell-snapshots, and todos.',
|
||
standardHint: 'Standard mode syncs project workspace context only.',
|
||
credentialsIsolated: 'Credentials and .anthropic remain isolated per account in all modes.',
|
||
implicationTitle: 'What this means after save',
|
||
isolatedImplication:
|
||
'This account stays separate. Other accounts will not be able to resume its continuity state.',
|
||
sameGroupRule:
|
||
'Accounts must use the same group "{{group}}" before they can share continuity with each other.',
|
||
noSameGroupPeer: 'No other account currently shares this group.',
|
||
sameGroupPeerCount_one: '{{count}} other account already shares this group.',
|
||
sameGroupPeerCount_other: '{{count}} other accounts already share this group.',
|
||
deeperReady_one:
|
||
'{{count}} same-group account already uses deeper continuity. This is the strongest available handoff setup.',
|
||
deeperReady_other:
|
||
'{{count}} same-group accounts already use deeper continuity. This is the strongest available handoff setup.',
|
||
deeperNeedsPeers:
|
||
'Deeper continuity is enabled here, but another account in this group still needs deeper continuity for stronger cross-account resume expectations.',
|
||
standardWarning:
|
||
'Standard shared mode is good for project context only. Cross-account resume expectations are stronger when both accounts use deeper continuity.',
|
||
resumeOriginalWarning:
|
||
'If the old conversation matters, resume it from the original account before you change the setup.',
|
||
cancel: 'Cancel',
|
||
save: 'Save',
|
||
saving: 'Saving...',
|
||
},
|
||
historySyncLearningMap: {
|
||
title: 'How History Sync Works',
|
||
description:
|
||
'Isolated -> Shared -> Deeper. Cross-account resume needs the same group on both accounts.',
|
||
learningMap: 'Learning Map',
|
||
isolated: 'Isolated',
|
||
shared: 'Shared',
|
||
deeper: 'Deeper',
|
||
cliproxyManaged_one:
|
||
'{{count}} CLIProxy Claude pool account is managed in Action Center / CLIProxy page.',
|
||
cliproxyManaged_other:
|
||
'{{count}} CLIProxy Claude pool accounts are managed in Action Center / CLIProxy page.',
|
||
showDetails: 'Show details: groups, switching, and legacy policy',
|
||
modeSwitch: 'Mode Switch',
|
||
modeSwitchDesc:
|
||
'Use Sync on each account to move between isolated/shared and choose deeper continuity.',
|
||
historySyncGroup: 'History Sync Group',
|
||
historySyncGroupDesc:
|
||
'Same group is required before accounts can share continuity. Default fallback is default.',
|
||
sameGroupRule:
|
||
'Right now, accounts only share continuity when both are shared in the same group.',
|
||
deeperRecommendation:
|
||
'Group "{{group}}" is shared, but deeper continuity is still the safer choice if users expect cross-account resume.',
|
||
partialGroup:
|
||
'Group "{{group}}" is in good shape, but other accounts or groups still need the same-group or deeper setup.',
|
||
readyGroup:
|
||
'Group "{{group}}" already has deeper continuity on multiple accounts. This is the strongest available handoff setup.',
|
||
legacyConfirmation_one: '{{count}} legacy account still needs explicit confirmation.',
|
||
legacyConfirmation_other: '{{count}} legacy accounts still need explicit confirmation.',
|
||
},
|
||
continuityReadiness: {
|
||
title: 'Cross-Account Resume Check',
|
||
description: 'Use this card to see what is missing before users switch accounts.',
|
||
state: {
|
||
single: 'single account',
|
||
isolated: 'resume off',
|
||
'shared-alone': 'shared but incomplete',
|
||
'shared-standard': 'projects only',
|
||
partial: 'partially ready',
|
||
ready: 'stronger handoff ready',
|
||
},
|
||
metrics: {
|
||
isolated: 'Isolated',
|
||
sharedPeers: 'Shared With Peer',
|
||
deeperReady: 'Deeper Ready',
|
||
},
|
||
messages: {
|
||
single: {
|
||
title: 'Only one auth account is configured.',
|
||
description:
|
||
'Cross-account handoff does not apply yet. Add another auth account before configuring shared continuity.',
|
||
},
|
||
isolated: {
|
||
title: 'Cross-account resume is off right now.',
|
||
description:
|
||
'All visible accounts are isolated, so a session created in one account will stay with that account.',
|
||
},
|
||
'shared-alone': {
|
||
title: 'Shared mode exists, but no group has a peer yet.',
|
||
description_one:
|
||
'{{count}} shared account is still waiting for another account in the same group.',
|
||
description_other:
|
||
'{{count}} shared accounts are still waiting for another account in the same group.',
|
||
},
|
||
'shared-standard': {
|
||
title:
|
||
'Group "{{group}}" shares project context, but deeper continuity is not paired yet.',
|
||
description:
|
||
'Users may still expect more than project sharing. Enable deeper continuity on both accounts in this group for stronger handoff expectations.',
|
||
},
|
||
partial: {
|
||
title: 'One group is ready, but the overall setup is still mixed.',
|
||
description:
|
||
'At least one group already uses deeper continuity, but other accounts are still isolated, alone in a shared group, or missing deeper continuity.',
|
||
},
|
||
ready: {
|
||
title: 'Group "{{group}}" has the strongest available continuity setup.',
|
||
description:
|
||
'Multiple accounts in this group already use deeper continuity. Resume behavior still depends on what Claude stores upstream.',
|
||
},
|
||
},
|
||
stepsTitle: 'What users should do next',
|
||
steps: {
|
||
syncBoth: 'Open Sync on both accounts, not just the one you are switching into.',
|
||
sameGroup:
|
||
'Use the same History Sync Group on both accounts. "{{group}}" is the current recommended group.',
|
||
enableDeeper:
|
||
'If users expect cross-account resume instead of project-only sharing, turn on deeper continuity on both accounts.',
|
||
resumeOriginal:
|
||
'If the original conversation is important, resume it from the original account before changing continuity settings.',
|
||
},
|
||
singleSteps: {
|
||
addAccount: 'Create a second ccs auth account before planning any cross-account handoff.',
|
||
sameGroupLater:
|
||
'When that second account exists, put both accounts in the same History Sync Group.',
|
||
enableDeeperLater:
|
||
'If users will expect cross-account resume instead of project-only sharing, enable deeper continuity on both accounts.',
|
||
resumeOriginal:
|
||
'If the original conversation is important, keep resuming it from the original account until the second account is ready.',
|
||
},
|
||
},
|
||
continuityOverview: {
|
||
plainLaneTitle: 'Plain ccs is using a different resume lane',
|
||
plainLaneDescription:
|
||
'Plain ccs currently resumes from {{lane}}, not this account lane. Recover the original lane first before changing sync settings.',
|
||
setDefaultHint:
|
||
'Use the Set Default action on the account you want plain ccs to follow in future sessions.',
|
||
recommendBadge: 'Recommend {{group}}',
|
||
partialBadge: 'Partial sync {{group}}',
|
||
lane: {
|
||
native: 'native Claude (~/.claude)',
|
||
accountDefault: 'account {{name}}',
|
||
accountInherited: 'account {{name}} via continuity inheritance',
|
||
profileDefault: 'default profile {{name}} via native Claude lane',
|
||
},
|
||
},
|
||
accountsTable: {
|
||
name: 'Name',
|
||
type: 'Type',
|
||
defaultBadge: 'default',
|
||
created: 'Created',
|
||
lastUsed: 'Last Used',
|
||
historySync: 'History Sync',
|
||
actions: 'Actions',
|
||
syncTitle: 'Edit sync mode, group, and continuity depth',
|
||
confirmLegacyTitle: "Confirm this legacy account's current mode as explicit",
|
||
sync: 'Sync',
|
||
confirm: 'Confirm',
|
||
active: 'Active',
|
||
setDefault: 'Set Default',
|
||
deleteAccount: 'Delete account',
|
||
cannotDeleteDefault: 'Cannot delete default account',
|
||
noAccounts: 'No CCS auth accounts found. Use ccs auth create to add accounts.',
|
||
resetToDefault: 'Reset to CCS Default',
|
||
deleteDialogTitle: 'Delete Account',
|
||
deleteDialogDesc:
|
||
'Are you sure you want to delete the account "{{name}}"? This will remove the profile and all its session data. This action cannot be undone.',
|
||
cancel: 'Cancel',
|
||
delete: 'Delete',
|
||
sharedGroupStandard: 'shared ({{group}}, projects only)',
|
||
sharedGroupDeeper: 'shared ({{group}}, deeper continuity)',
|
||
sharedGroupLegacy: 'shared ({{group}}, projects only, legacy)',
|
||
isolatedLegacy: 'isolated (legacy default)',
|
||
isolated: 'isolated',
|
||
noSameGroupPeer: 'No same-group peer yet',
|
||
sameGroupPeerCount_one: '{{count}} same-group peer',
|
||
sameGroupPeerCount_other: '{{count}} same-group peers',
|
||
legacyReview: 'Review and confirm this inferred default.',
|
||
noHandoff: 'Cross-account resume stays in the original account.',
|
||
badges: {
|
||
shared: 'Shared',
|
||
deeper: 'Deeper',
|
||
legacy: 'Legacy',
|
||
isolated: 'Isolated',
|
||
},
|
||
},
|
||
addAccountDialog: {
|
||
title: 'Add {{displayName}} Account',
|
||
descKiro:
|
||
'Choose a Kiro auth method, then authenticate via browser or import from Kiro IDE.',
|
||
descDeviceCode:
|
||
'Click Authenticate. A verification code will appear for you to enter on the provider website.',
|
||
descOauth: 'Click Authenticate to get an OAuth URL. Open it in any browser to sign in.',
|
||
powerUserEnabled: 'Power user mode enabled',
|
||
powerUserSkipped:
|
||
'Settings > Proxy power user mode is skipping the AGY responsibility checklist and Gemini dashboard risk phrase. You accept full responsibility for OAuth/account risk.',
|
||
powerUserLoadFailed:
|
||
'Failed to load power user mode settings. Check Settings > Proxy and try again.',
|
||
powerUserLoading: 'Loading power user safety settings. Please wait a moment and retry.',
|
||
powerUserUnavailableRetry:
|
||
'Power user mode is unavailable. Complete the required provider safety step and retry.',
|
||
authMethod: 'Auth Method',
|
||
selectKiroAuthMethod: 'Select Kiro auth method',
|
||
nicknameRequired: 'Nickname (required)',
|
||
nicknameOptional: 'Nickname (optional)',
|
||
nicknamePlaceholder: 'e.g., work, personal',
|
||
nicknameRequiredHint:
|
||
'Required for this provider. Use a unique friendly name (e.g., work, personal).',
|
||
nicknameOptionalHint:
|
||
'A friendly name to identify this account. Leave blank to use a safe generated identifier.',
|
||
waitingForAuth: 'Waiting for authentication...',
|
||
deviceCodeHint:
|
||
'A verification code dialog will appear shortly. Enter the code on the provider website.',
|
||
browserHint:
|
||
'Complete the authentication in your browser. This dialog closes automatically.',
|
||
openUrlLabel: 'Open this URL in any browser to sign in:',
|
||
copied: 'Copied',
|
||
copy: 'Copy',
|
||
open: 'Open',
|
||
popupBlocked: 'Popup blocked. Copy the URL above and open it manually in your browser.',
|
||
redirectPasteLabel: "Redirect didn't work? Paste the callback URL:",
|
||
callbackPlaceholder: 'Paste the redirect URL here...',
|
||
submitCallback: 'Submit Callback',
|
||
submitting: 'Submitting...',
|
||
preparingUrl: 'Preparing sign-in URL...',
|
||
cancel: 'Cancel',
|
||
importingToken: 'Importing token from Kiro IDE...',
|
||
authenticate: 'Authenticate',
|
||
importFromIde: 'Import from IDE',
|
||
importing: 'Importing...',
|
||
},
|
||
flowViz: {
|
||
backToProviders: 'Back to providers',
|
||
showDetails: 'Show Details',
|
||
hideDetails: 'Hide Details',
|
||
resetLayout: 'Reset layout',
|
||
provider: 'Provider',
|
||
totalRequests: 'Total Requests',
|
||
accounts: 'Accounts',
|
||
connectionTimeline: 'Connection Timeline',
|
||
noRecentConnections: 'No recent connections',
|
||
},
|
||
quickStats: {
|
||
totalRequests: 'Total Requests',
|
||
successRate: 'Success Rate',
|
||
totalTokens: 'Total Tokens',
|
||
activeModels: 'Active Models',
|
||
},
|
||
authMonitor: {
|
||
accounts: 'Accounts',
|
||
accountsCount: '{{count}} accounts',
|
||
success: 'Success',
|
||
failed: 'Failed',
|
||
successRate: 'Success Rate',
|
||
},
|
||
accountCard: {
|
||
resumeAccount: 'Resume account',
|
||
pauseAccount: 'Pause account',
|
||
quotaLoading: 'Quota...',
|
||
quota: 'Quota',
|
||
quotaUnavailable: 'Quota limits unavailable',
|
||
reauthNeeded: 'Reauth needed',
|
||
failureLabelReauth: 'Reauth',
|
||
failureLabelWorkspace: 'Workspace',
|
||
failureLabelNoAccess: 'No Access',
|
||
failureLabelRetry: 'Retry',
|
||
failureLabelReconnect: 'Reconnect',
|
||
failureLabelTemporary: 'Temporary',
|
||
failureLabelUnavailable: 'Unavailable',
|
||
failureHintReauth: 'Refresh this account by running its auth flow again.',
|
||
failureHintWorkspace:
|
||
'Move this account back to an active workspace, then remove and re-add it.',
|
||
failureHintNoAccess: 'This account cannot access the provider quota endpoint.',
|
||
failureHintRetry: 'Wait a bit, then retry the quota request.',
|
||
failureHintReconnect: 'Remove the stale account and authenticate it again.',
|
||
failureHintTemporary: 'Retry later. This looks temporary.',
|
||
removeAndReadd: 'Remove and re-add account',
|
||
autoRefreshFailed: 'Auto-refresh failed',
|
||
},
|
||
antigravityChecklist: {
|
||
title: 'Antigravity OAuth Responsibility',
|
||
subtitle: 'Complete all 4 steps before you can authenticate.',
|
||
mandatory: 'Mandatory',
|
||
completion: 'Completion',
|
||
stepsCount: '{{current}}/4 steps',
|
||
},
|
||
accountSafetyWarning: {
|
||
title: 'OAuth Account Safety Warning',
|
||
subtitle: 'Issue #509 · Gemini + AGY OAuth risk',
|
||
firstLine:
|
||
'Issue #509 documents suspension/ban reports tied to ccs agy and shared-account usage between ccs gemini and ccs agy.',
|
||
secondLine:
|
||
'Continue only if you accept full responsibility for OAuth and account-access risk.',
|
||
issueLabel: 'Read issue #509',
|
||
proxySettingsLabel: 'Gemini + AGY controls: Settings > Proxy',
|
||
},
|
||
cliproxyDialog: {
|
||
name: 'Name',
|
||
provider: 'Provider',
|
||
account: 'Account',
|
||
accountOptional: 'Account (optional)',
|
||
model: 'Model',
|
||
modelOptional: 'Model (optional)',
|
||
defaultTarget: 'Default Target',
|
||
defaultTier: 'Default Tier',
|
||
tierConfig: 'Tier Configuration',
|
||
selectProvider: 'Select provider...',
|
||
useDefaultAccount: 'Use default account',
|
||
defaultSuffix: '(default)',
|
||
opus: 'Opus',
|
||
sonnet: 'Sonnet',
|
||
haiku: 'Haiku',
|
||
claudeCode: 'Claude Code',
|
||
factoryDroid: 'Factory Droid',
|
||
cancel: 'Cancel',
|
||
create: 'Create',
|
||
creating: 'Creating...',
|
||
saveChanges: 'Save Changes',
|
||
saving: 'Saving...',
|
||
placeholderName: 'my-gemini',
|
||
placeholderModel: 'gemini-2.5-pro',
|
||
placeholderComposite: 'my-composite',
|
||
placeholderModelId: 'model-id',
|
||
placeholderAccountId: 'account-id',
|
||
editCompositeTitle: 'Edit Composite Variant: {{name}}',
|
||
editSingleTitle: 'Edit Single Variant: {{name}}',
|
||
},
|
||
profileEditor: {
|
||
profileInfo: 'Profile Information',
|
||
profileName: 'Profile Name',
|
||
filePath: 'File Path',
|
||
lastModified: 'Last Modified',
|
||
defaultTarget: 'Default Target',
|
||
quickUsage: 'Quick Usage',
|
||
runWithProfile: 'Run with profile',
|
||
runOnDroid: 'Run on Droid',
|
||
runOnDroidWithFlag: 'Run on Droid (--target)',
|
||
droidAliasExplicit: 'Droid alias (explicit)',
|
||
overrideToClaude: 'Override to Claude',
|
||
overrideToClaudeExplicit: 'Override to Claude (explicit)',
|
||
targetHintPreferredAlias: 'Preferred explicit alias:',
|
||
targetHintClaudeDefault: 'Default command:',
|
||
targetHintLegacyAlias: 'Legacy shortcut still works:',
|
||
targetHintOverride: 'You can still override each run with',
|
||
setAsDefault: 'Set as default',
|
||
provider: 'Provider',
|
||
custom: 'Custom',
|
||
providerChooserHint:
|
||
'Start with a preset, then adjust the URL, API key, or model mapping as needed.',
|
||
featuredProviders: 'Featured Providers',
|
||
scrollHint: 'Scroll if your screen is narrow',
|
||
customEndpoint: 'Custom Endpoint',
|
||
morePresets: 'More Presets',
|
||
customEndpointDescription:
|
||
'Start from a blank Anthropic-compatible URL and configure everything manually.',
|
||
},
|
||
settings: {
|
||
sectionLoadFailed: 'Failed to load section',
|
||
unknownError: 'Unknown error occurred',
|
||
reloadPage: 'Reload page',
|
||
refresh: 'Refresh',
|
||
copy: 'Copy',
|
||
copied: 'Copied',
|
||
saved: 'Saved',
|
||
loading: 'Loading...',
|
||
configFileNotFound: 'Config file not found',
|
||
},
|
||
settingsTabs: {
|
||
web: 'Web',
|
||
env: 'Env',
|
||
think: 'Think',
|
||
proxy: 'Proxy',
|
||
auth: 'Auth',
|
||
backup: 'Backup',
|
||
},
|
||
settingsAuth: {
|
||
failedFetchTokens: 'Failed to fetch auth tokens',
|
||
failedSaveTokens: 'Failed to save tokens',
|
||
tokensUpdated: 'Tokens updated. Restart CLIProxy to apply.',
|
||
failedRegenerate: 'Failed to regenerate secret',
|
||
secretRegenerated: 'New management secret generated. Restart CLIProxy to apply.',
|
||
failedReset: 'Failed to reset tokens',
|
||
tokensReset: 'Tokens reset to defaults. Restart CLIProxy to apply.',
|
||
description: 'Configure CLIProxy authentication tokens. Changes require CLIProxy restart.',
|
||
apiKey: 'API Key',
|
||
custom: 'Custom',
|
||
apiKeyDesc: 'Used by Claude Code to authenticate with CLIProxy',
|
||
apiKeyPlaceholder: 'API key',
|
||
managementSecret: 'Management Secret',
|
||
managementSecretDesc: 'Used by CCS dashboard to access CLIProxy management APIs',
|
||
managementSecretPlaceholder: 'Management secret',
|
||
generateSecret: 'Generate new secure secret',
|
||
resetDefaults: 'Reset to Defaults',
|
||
resetDesc: 'Resets both API key and management secret to their default values.',
|
||
saving: 'Saving...',
|
||
save: 'Save',
|
||
},
|
||
settingsGlobalEnv: {
|
||
description:
|
||
'Environment variables injected into all non-Claude subscription profiles (gemini, codex, agy, ghcp, etc.)',
|
||
enabled: 'Global Env enabled',
|
||
disabled: 'Global Env disabled',
|
||
enabledDesc: 'Env vars will be injected into third-party profiles',
|
||
disabledDesc: 'Env vars will not be injected',
|
||
envVars: 'Environment Variables',
|
||
noneConfigured: 'No environment variables configured',
|
||
addNew: 'Add New Variable',
|
||
keyName: 'KEY_NAME',
|
||
value: 'value',
|
||
add: 'Add',
|
||
quickAdd: 'Quick Add Common Variables',
|
||
allConfigured: 'All common variables are configured',
|
||
},
|
||
settingsBackups: {
|
||
failedFetch: 'Failed to fetch backups',
|
||
failedRestore: 'Failed to restore backup',
|
||
restoreSuccess: 'Backup restored successfully',
|
||
title: 'Settings Backups',
|
||
description:
|
||
'Restore previous versions of your settings.json file. Backups are created automatically when settings are modified.',
|
||
none: 'No backups available',
|
||
noneHint: 'Backups will appear here when you modify settings',
|
||
latest: 'Latest',
|
||
restoring: 'Restoring...',
|
||
restore: 'Restore',
|
||
restoreConfirmTitle: 'Restore Backup?',
|
||
restoreConfirmPrefix: 'This will replace your current settings with backup from',
|
||
restoreConfirmSuffix: 'This action cannot be undone.',
|
||
cancel: 'Cancel',
|
||
},
|
||
settingsWebsearch: {
|
||
description: 'CLI-based web search for third-party profiles (gemini, codex, agy, etc.)',
|
||
enabled: 'WebSearch enabled',
|
||
disabled: 'WebSearch disabled',
|
||
checking: 'Checking status...',
|
||
providers: 'Providers',
|
||
noneConfigured: 'No providers configured',
|
||
noneConfiguredHint: 'Install CLI tools to enable web search providers',
|
||
checkProviders: 'Check for providers',
|
||
installed: 'installed',
|
||
notInstalled: 'not installed',
|
||
model: 'Model:',
|
||
howInstall: 'How to install {{name}} CLI',
|
||
installGlobally: 'Install globally',
|
||
requiresKey: '(requires xAI API key)',
|
||
freeTier: '(FREE tier available)',
|
||
viewDocs: 'View documentation',
|
||
},
|
||
settingsProxy: {
|
||
failedLoadAgyMode: 'Failed to load power user mode',
|
||
failedUpdateAgyMode: 'Failed to update power user mode',
|
||
failedVerifyAgyMode: 'Failed to verify power user mode persistence',
|
||
notPersistedAgyMode:
|
||
'Power user mode was not persisted. Config may have been modified by another process.',
|
||
agyModeEnabled: 'Power user mode enabled.',
|
||
agyModeDisabled: 'Power user mode disabled.',
|
||
typePhraseToContinue: 'Type "{{value}}" to continue.',
|
||
description: 'Configure local or remote {{backend}} connection for proxy-based profiles',
|
||
backendPlus: 'CLIProxy Plus',
|
||
backend: 'CLIProxy',
|
||
instanceStatus: 'Instance Status',
|
||
connectionMode: 'Connection Mode',
|
||
local: 'Local',
|
||
remote: 'Remote',
|
||
localDesc: 'Run {{backend}} binary on this machine',
|
||
remoteDesc: 'Connect to a remote {{backend}} server',
|
||
backendBinary: 'Backend Binary',
|
||
stopProxyToSwitch: 'Stop the running proxy in Instance Status to switch backend.',
|
||
default: 'Default',
|
||
plusDesc: 'Full provider support including Kiro and GitHub Copilot',
|
||
originalDesc: 'Original binary (Gemini, Codex, Antigravity only)',
|
||
variantsIncompatible:
|
||
'Existing Kiro/Copilot variants will not work with CLIProxyAPI. Switch to CLIProxyAPIPlus or remove those variants.',
|
||
safety: 'Safety',
|
||
agyModeTitle: 'Antigravity + Gemini Power User Mode',
|
||
agyModeDesc:
|
||
'Skip the AGY responsibility checklist and the Gemini dashboard typed acknowledgement.',
|
||
agyWarning:
|
||
'Use only if you fully understand the OAuth suspension/ban risk pattern (#509). CCS cannot assume responsibility for account loss.',
|
||
finalConfirm: 'Final confirmation required',
|
||
finalConfirmDesc:
|
||
'Enabling this will skip AGY safety checkpoints and the Gemini dashboard risk phrase gate. Review issue #509 and type the exact phrase to proceed.',
|
||
step1: 'Step 1',
|
||
readIssue: 'Read issue #509',
|
||
step2: 'Step 2',
|
||
typePrefix: 'Type',
|
||
typeSuffix: 'to enable.',
|
||
typePhraseAria: 'Type I ACCEPT RISK to enable Antigravity + Gemini power user mode',
|
||
exactPhrase: 'Exact phrase required.',
|
||
enableAgyMode: 'Enable Antigravity + Gemini Power User Mode',
|
||
toggleAgyMode: 'Toggle Antigravity + Gemini power user mode',
|
||
fallbackSettings: 'Fallback Settings',
|
||
enableFallback: 'Enable fallback to local',
|
||
enableFallbackDesc: 'Use local proxy if remote is unreachable',
|
||
autoStartLocal: 'Auto-start local proxy',
|
||
autoStartLocalDesc: 'Automatically start local proxy on fallback',
|
||
advanced: 'Advanced',
|
||
debugMode: 'Debug Mode',
|
||
debugModeDesc: 'Enable developer diagnostics in browser console',
|
||
debugModeEnabled: 'Debug mode enabled. Check browser console for detailed logs.',
|
||
localProxy: 'Local Proxy',
|
||
port: 'Port',
|
||
autoStart: 'Auto-start',
|
||
localAutoStartDesc: 'Start local proxy automatically when needed',
|
||
remoteConfigTitle: 'Remote Server Configuration',
|
||
host: 'Host',
|
||
hostPlaceholder: '192.168.1.100 or proxy.example.com',
|
||
defaultPort: 'default: {{value}}',
|
||
portPlaceholder: 'Leave empty for {{value}}',
|
||
protocol: 'Protocol',
|
||
http: 'HTTP',
|
||
https: 'HTTPS',
|
||
apiKeyOptional: 'API Key (optional)',
|
||
apiKeyPlaceholder: 'For /v1/* API endpoints',
|
||
apiKeyDesc: 'Used for API requests to /v1/chat/completions',
|
||
managementKeyOptional: 'Management Key (optional)',
|
||
managementKeyPlaceholder: 'For /v0/management/* endpoints',
|
||
managementKeyDesc: 'Used for dashboard management APIs. Falls back to API Key if not set.',
|
||
testing: 'Testing...',
|
||
testConnection: 'Test Connection',
|
||
connectedLatency: 'Connected ({{value}}ms)',
|
||
connectionFailed: 'Connection failed',
|
||
invalidPortOrEmpty: 'Port must be an integer between 1 and 65535, or empty for default',
|
||
invalidLocalPort: 'Local port must be an integer between 1 and 65535',
|
||
backendPlusApi: 'CLIProxyAPIPlus',
|
||
backendApi: 'CLIProxyAPI',
|
||
},
|
||
settingsThinking: {
|
||
description: 'Configure extended thinking/reasoning for supported models.',
|
||
supportedProviders: 'Supported Providers',
|
||
modeTitle: 'Thinking Mode',
|
||
modeAutoDesc: 'Automatically set thinking based on model tier',
|
||
modeOffDesc: 'Disable extended thinking',
|
||
modeManualDesc: 'Set a persistent override level or use CLI flags per run',
|
||
tierDefaults: 'Tier Defaults',
|
||
tierDefaultsDesc: 'Default thinking level for each model tier when in auto mode.',
|
||
persistentOverride: 'Persistent Override',
|
||
persistentOverrideDesc: 'Applied to all sessions. CLI flags still take priority.',
|
||
enterCustomBudget: 'Enter custom budget',
|
||
apply: 'Apply',
|
||
providerOverrides: 'Provider Overrides ({{count}})',
|
||
providerOverridesDesc:
|
||
'Override tier defaults for specific providers. Add custom provider keys as needed.',
|
||
addProviderPlaceholder: 'Add provider key (e.g. qwen)',
|
||
showWarnings: 'Show Warnings',
|
||
showWarningsDesc: 'Display warnings when thinking values are clamped or adjusted',
|
||
cliEnvOverride: 'CLI & Env Override',
|
||
supportLine1Prefix: 'Thinking budget:',
|
||
supportLine1Suffix: '(token-based)',
|
||
supportLine2Prefix: 'Reasoning effort:',
|
||
supportLine2SuffixPrefix: '(suffix or ',
|
||
supportLine2SuffixPostfix: ': minimal/low/medium/high/xhigh)',
|
||
supportLine3Prefix: 'Codex suffixes pin effort (for example ',
|
||
supportLine3Suffix: '); unsuffixed models use Thinking mode.',
|
||
},
|
||
analytics: {
|
||
title: 'Analytics',
|
||
subtitle: 'Track usage and insights',
|
||
month: 'Month',
|
||
allTime: 'All Time',
|
||
updated: 'Updated {{value}}',
|
||
},
|
||
analyticsSummary: {
|
||
totalTokens: 'Total Tokens',
|
||
totalTokensSubtitle: '{{input}} in / {{output}} out',
|
||
totalCost: 'Total Cost',
|
||
totalCostSubtitle: '${{value}}/day avg',
|
||
cacheTokens: 'Cache Tokens',
|
||
cacheTokensSubtitle: '${{cost}} ({{percent}}% of cost)',
|
||
inputCost: 'Input Cost',
|
||
outputCost: 'Output Cost',
|
||
tokensSubtitle: '{{value}} tokens',
|
||
},
|
||
apiProfiles: {
|
||
title: 'API Profiles',
|
||
new: 'New',
|
||
searchPlaceholder: 'Search profiles...',
|
||
loadingProfiles: 'Loading profiles...',
|
||
failedLoadTitle: 'Failed to load profiles',
|
||
failedLoadDesc: 'Unable to fetch API profiles. Please try again.',
|
||
retry: 'Retry',
|
||
noProfilesYet: 'No API profiles yet',
|
||
noProfilesDesc: 'Create your first profile to connect to custom API endpoints',
|
||
createProfile: 'Create Profile',
|
||
noProfileMatch: 'No profiles match "{{query}}"',
|
||
profileCount: '{{count}} profile',
|
||
profileCount_other: '{{count}} profiles',
|
||
configuredCount: '{{count}} configured',
|
||
deleteProfileTitle: 'Delete Profile',
|
||
deleteProfileDesc:
|
||
'Are you sure you want to delete "{{name}}"? This will remove the settings file and cannot be undone.',
|
||
delete: 'Delete',
|
||
unsavedChangesTitle: 'Unsaved Changes',
|
||
unsavedChangesDesc:
|
||
'You have unsaved changes in "{{current}}". Discard and switch to "{{next}}"?',
|
||
discardSwitch: 'Discard and Switch',
|
||
},
|
||
accountsPage: {
|
||
title: 'Accounts',
|
||
managePrefix: 'Manage',
|
||
manageSuffix: 'accounts and pool onboarding from one panel.',
|
||
mobileManageSuffix: 'continuity per account.',
|
||
primaryActions: 'Primary Actions',
|
||
createAccount: 'Create Account',
|
||
authClaudeInPool: 'Authenticate Claude in Pool',
|
||
openClaudePoolSettings: 'Open Claude Pool Settings',
|
||
openCliProxyClaudePool: 'Open CLIProxy Claude Pool',
|
||
migrationFollowup: 'Migration Follow-up',
|
||
legacyContextPending: '{{count}} account still needs first-time mode confirmation.',
|
||
legacyContextPending_other: '{{count}} accounts still need first-time mode confirmation.',
|
||
legacyContinuityPending:
|
||
'{{count}} shared account remains on standard legacy continuity depth.',
|
||
legacyContinuityPending_other:
|
||
'{{count}} shared accounts remain on standard legacy continuity depth.',
|
||
confirmingLegacy: 'Confirming Legacy Policies...',
|
||
confirmLegacy: 'Confirm Legacy Policies ({{count}})',
|
||
noLegacyFollowup: 'No legacy follow-up pending.',
|
||
continuityGuide: 'Continuity Guide',
|
||
expandWhenNeeded: 'Expand only when needed.',
|
||
sharedStandard: 'Shared Standard',
|
||
sharedStandardDesc:
|
||
'Shared workspace only. Put both accounts in the same group before expecting any handoff.',
|
||
sharedDeeper: 'Shared Deeper',
|
||
sharedDeeperPrefix: 'Adds',
|
||
sharedDeeperDesc:
|
||
'Adds session-env, file-history, shell-snapshots, and todos. Recommended when users expect cross-account resume.',
|
||
isolated: 'Isolated',
|
||
isolatedDesc: 'No link. Conversations stay with the original account.',
|
||
quickCommands: 'Quick Commands',
|
||
quickCommandsDesc: 'Copy and run in terminal.',
|
||
workspaceBadge: 'ccs auth Workspace',
|
||
historySyncBadge: 'History & Resume Controls',
|
||
authAccounts: 'Auth Accounts',
|
||
tableScopePrefix: 'This table is intentionally scoped to',
|
||
tableScopeMiddle: 'accounts. Use',
|
||
tableScopeSuffix: 'for mode/group/depth changes.',
|
||
accountMatrix: 'Account Matrix',
|
||
sharedTotalDesc:
|
||
'Shared total: {{count}}. Actions include Sync settings and legacy confirmation.',
|
||
loadingAccounts: 'Loading accounts...',
|
||
},
|
||
health: {
|
||
justNow: 'just now',
|
||
secondsAgo: '{{count}}s ago',
|
||
minutesAgo: '{{count}}m ago',
|
||
hoursAgo: '{{count}}h ago',
|
||
systemHealth: 'System Health',
|
||
build: 'build {{version}}',
|
||
lastScan: 'Last scan:',
|
||
autoRefresh: 'Auto-refresh:',
|
||
refresh: 'Refresh',
|
||
checks: 'Checks',
|
||
version: 'Version',
|
||
platform: 'Platform',
|
||
liveMonitoring: 'Live monitoring active',
|
||
copied: 'Copied to clipboard',
|
||
refreshing: 'Refreshing health checks...',
|
||
fix: 'Fix',
|
||
applyFix: 'Apply Fix',
|
||
healthLabel: 'health',
|
||
},
|
||
updates: {
|
||
actionRequired: 'Action Required',
|
||
done: 'Done',
|
||
all: 'All',
|
||
inboxTitle: 'Updates Center',
|
||
inboxSubtitle: 'Focus on actions, then mark updates done or dismissed.',
|
||
needsAction: 'Needs Action',
|
||
doneCount: 'Done',
|
||
searchPlaceholder: 'Search actions or commands',
|
||
noNotices: 'No notices match this view.',
|
||
noUpdates: 'No updates available.',
|
||
published: 'Published {{date}}',
|
||
markDone: 'Mark done',
|
||
dismiss: 'Dismiss',
|
||
reopen: 'Reopen',
|
||
doNext: 'Do Next',
|
||
impactedIntegrations: 'Impacted Integrations',
|
||
impactedDesc: 'Related areas based on update scope and routing.',
|
||
whyMatters: 'Why It Matters',
|
||
whyMattersDesc: 'Short context only, no wall-of-text release notes.',
|
||
open: 'Open',
|
||
progressNeedsAction: 'Needs Action',
|
||
progressInReview: 'In Review',
|
||
progressDone: 'Done',
|
||
progressDismissed: 'Dismissed',
|
||
statusNew: 'New',
|
||
statusStable: 'Stable',
|
||
statusPlanned: 'Planned',
|
||
dashboard: 'Dashboard',
|
||
cliUsage: 'CLI Usage',
|
||
},
|
||
cliproxyPage: {
|
||
connected: 'Connected',
|
||
notConnected: 'Not connected',
|
||
variant: 'variant',
|
||
parentNotConnected: 'Parent not connected',
|
||
viaProvider: 'via {{provider}}',
|
||
emptyTitle: 'CCS Profile Manager',
|
||
emptyDesc:
|
||
'Manage OAuth authentication, account preferences, and model selection for CLIProxy providers. Configure how CCS routes requests to different AI backends.',
|
||
emptyControlPanelPrefix: 'For live usage stats and real-time monitoring, visit the',
|
||
controlPanel: 'Control Panel',
|
||
quickSetup: 'Quick Setup',
|
||
accountManagement: 'CCS-level account management',
|
||
providers: 'Providers',
|
||
variants: 'Variants',
|
||
providerCount: '{{count}} provider',
|
||
providerCount_other: '{{count}} providers',
|
||
connectedCount: '{{count}} connected',
|
||
variantDisplay: '{{name}} ({{provider}} variant)',
|
||
},
|
||
copilotPage: {
|
||
title: 'Copilot',
|
||
subtitle: 'GitHub Copilot proxy',
|
||
setup: 'Setup',
|
||
auth: 'Auth',
|
||
daemon: 'Daemon',
|
||
unofficialTitle: 'Unofficial API - Use at Your Own Risk',
|
||
unofficialItem1: 'Reverse-engineered API - may break anytime',
|
||
unofficialItem2: 'Excessive use may trigger account restrictions',
|
||
unofficialItem3: 'No warranty, no responsibility from CCS',
|
||
yes: 'Yes',
|
||
no: 'No',
|
||
installed: 'Installed',
|
||
missing: 'Missing',
|
||
integration: 'Integration',
|
||
enabled: 'Enabled',
|
||
disabled: 'Disabled',
|
||
github: 'GitHub',
|
||
connected: 'Connected',
|
||
notConnected: 'Not Connected',
|
||
authenticate: 'Authenticate',
|
||
authenticating: 'Authenticating...',
|
||
status: 'Status',
|
||
running: 'Running',
|
||
stopped: 'Stopped',
|
||
port: 'Port',
|
||
stopping: 'Stopping...',
|
||
stop: 'Stop',
|
||
starting: 'Starting...',
|
||
start: 'Start',
|
||
installing: 'Installing...',
|
||
installCopilotApi: 'Install copilot-api',
|
||
proxy: 'Proxy',
|
||
active: 'Active',
|
||
inactive: 'Inactive',
|
||
},
|
||
cursorPage: {
|
||
title: 'Cursor',
|
||
beta: 'Beta',
|
||
subtitle: 'Dedicated Cursor integration controls',
|
||
unofficialTitle: 'Unofficial API - Use at Your Own Risk',
|
||
unofficialItem1: 'Reverse-engineered integration may break anytime',
|
||
unofficialItem2: 'Abuse or excessive usage may risk account restrictions',
|
||
unofficialItem3: 'No warranty, no responsibility from CCS',
|
||
integration: 'Integration',
|
||
authentication: 'Authentication',
|
||
daemon: 'Daemon',
|
||
enabled: 'Enabled',
|
||
disabled: 'Disabled',
|
||
expired: 'Expired',
|
||
connected: 'Connected',
|
||
notConnected: 'Not connected',
|
||
running: 'Running',
|
||
stopped: 'Stopped',
|
||
actions: 'Actions',
|
||
disableIntegration: 'Disable Integration',
|
||
enableIntegration: 'Enable Integration',
|
||
autoDetectAuth: 'Auto-detect Auth',
|
||
manualAuthImport: 'Manual Auth Import',
|
||
stopDaemon: 'Stop Daemon',
|
||
startDaemon: 'Start Daemon',
|
||
port: 'Port',
|
||
configuration: 'Cursor Configuration',
|
||
lastModified: 'Last modified:',
|
||
neverSaved: 'Never saved',
|
||
saving: 'Saving...',
|
||
save: 'Save',
|
||
modelConfig: 'Model Config',
|
||
settings: 'Settings',
|
||
info: 'Info',
|
||
presets: 'Presets',
|
||
presetsDesc: 'Apply pre-configured model mappings',
|
||
modelMapping: 'Model Mapping',
|
||
modelMappingDesc: 'Configure which models to use for each tier',
|
||
defaultModel: 'Default Model',
|
||
defaultModelDesc: 'Used when no specific tier is requested.',
|
||
opusModel: 'Opus (Most capable)',
|
||
opusModelDesc: 'Complex reasoning and highest quality responses.',
|
||
sonnetModel: 'Sonnet (Balanced)',
|
||
sonnetModelDesc: 'General coding and day-to-day chat workloads.',
|
||
haikuModel: 'Haiku (Fast)',
|
||
haikuModelDesc: 'Low-latency and lightweight request paths.',
|
||
runtimeSettings: 'Runtime Settings',
|
||
autoStartDaemon: 'Auto-start Daemon',
|
||
autoStartDesc: 'Start Cursor daemon automatically when integration is used.',
|
||
ghostMode: 'Ghost Mode',
|
||
ghostModeDesc: 'Request x-ghost-mode to reduce telemetry.',
|
||
provider: 'Provider',
|
||
filePath: 'File Path',
|
||
availableModels: 'Available Models',
|
||
loadingModels: 'Loading models...',
|
||
noModels: 'No model metadata available yet. Start daemon and refresh.',
|
||
default: 'Default',
|
||
rawConfiguration: 'Raw Configuration (JSON)',
|
||
manualImportTitle: 'Manual Cursor Auth Import',
|
||
manualImportDesc:
|
||
'Provide Cursor access token and machine ID if auto-detect is unavailable.',
|
||
accessToken: 'Access Token',
|
||
accessTokenPlaceholder: 'Paste Cursor access token',
|
||
machineId: 'Machine ID',
|
||
machineIdPlaceholder: '32-char hex (UUID without hyphens)',
|
||
cancel: 'Cancel',
|
||
import: 'Import',
|
||
selectModel: 'Select model',
|
||
useDefaultModel: 'Use Default Model',
|
||
availableModelCount: 'Available Models ({{count}})',
|
||
invalidPort: 'Port must be an integer between 1 and 65535',
|
||
defaultModelRequired: 'Default model is required',
|
||
savedConfig: 'Cursor config and model mapping saved',
|
||
failedSaveConfig: 'Failed to save config',
|
||
modelsLoadingWait: 'Models are still loading. Please wait before applying a preset.',
|
||
noModelsAvailable: 'No models available yet. Start the daemon and refresh first.',
|
||
appliedCodexPreset: 'Applied GPT-5.3 Codex preset',
|
||
appliedClaudePreset: 'Applied Claude 4.6 preset',
|
||
appliedGeminiPreset: 'Applied Gemini 3 preset',
|
||
integrationEnabled: 'Cursor integration enabled',
|
||
integrationDisabled: 'Cursor integration disabled',
|
||
failedUpdateIntegration: 'Failed to update integration state',
|
||
credentialsImported: 'Cursor credentials imported',
|
||
autoDetectFailed: 'Auto-detect failed',
|
||
manualRequired: 'Token and machine ID are required',
|
||
manualImportFailed: 'Manual import failed',
|
||
failedStartDaemon: 'Failed to start daemon',
|
||
daemonStarted: 'Daemon started',
|
||
daemonStartedWithPid: 'Daemon started (PID: {{pid}})',
|
||
failedStopDaemon: 'Failed to stop daemon',
|
||
daemonStopped: 'Daemon stopped',
|
||
rawLoading: 'Raw settings are still loading. Please wait and try again.',
|
||
invalidJson: 'Invalid JSON',
|
||
rawSaved: 'Raw settings saved',
|
||
rawChanged: 'Raw settings changed externally. Refresh and retry.',
|
||
failedSaveRaw: 'Failed to save raw settings',
|
||
savedAll: 'Cursor configuration saved',
|
||
},
|
||
droidPage: {
|
||
loadingDiagnostics: 'Loading Droid diagnostics...',
|
||
failedDiagnostics: 'Failed to load Droid diagnostics.',
|
||
overview: 'Overview',
|
||
byok: 'BYOK',
|
||
docs: 'Docs',
|
||
runtimeInstall: 'Runtime and Installation',
|
||
status: 'Status',
|
||
detected: 'Detected',
|
||
notFound: 'Not Found',
|
||
detectionSource: 'Detection source',
|
||
binaryPath: 'Binary path',
|
||
installDirectory: 'Install directory',
|
||
version: 'Version',
|
||
overridePath: 'Override (CCS_DROID_PATH)',
|
||
configFiles: 'Config Files',
|
||
path: 'Path',
|
||
resolved: 'Resolved',
|
||
size: 'Size',
|
||
lastModified: 'Last modified',
|
||
parseWarning: 'Parse warning: {{value}}',
|
||
readWarning: 'Read warning: {{value}}',
|
||
warnings: 'Warnings',
|
||
byokSummary: 'BYOK Summary',
|
||
activeModelSelector: 'Active model selector',
|
||
customModels: 'Custom models',
|
||
ccsManaged: 'CCS-managed',
|
||
userManaged: 'User-managed',
|
||
malformedEntries: 'Malformed entries',
|
||
providers: 'Providers',
|
||
none: 'none',
|
||
customModelsTitle: 'Custom Models',
|
||
modelName: 'Name / Model',
|
||
provider: 'Provider',
|
||
baseUrl: 'Base URL',
|
||
noCustomModels: 'No custom models',
|
||
docsAlignedNotes: 'Docs-Aligned Notes',
|
||
factoryDocs: 'Factory Docs',
|
||
providerFactCheckDocs: 'Provider Fact-Check Docs',
|
||
providerValues: 'Provider values: {{value}}',
|
||
settingsHierarchy: 'Settings hierarchy: {{value}}',
|
||
settingsTitle: 'Droid BYOK Settings',
|
||
fixJsonBeforeQuickSettings: 'Fix JSON syntax before using quick settings controls.',
|
||
fixJsonBeforeReasoning: 'Fix JSON syntax before updating BYOK reasoning settings.',
|
||
unableUpdateReasoning: 'Unable to update selected BYOK model reasoning setting.',
|
||
fixJsonBeforeBudget: 'Fix JSON syntax before updating thinking budget.',
|
||
anthropicOnlyBudget: 'Thinking budget is only available for Anthropic BYOK models.',
|
||
invalidJson: 'Invalid JSON: {{value}}',
|
||
saved: 'Droid settings saved',
|
||
changedExternally: 'Droid settings changed externally. Refresh and retry.',
|
||
failedSave: 'Failed to save Droid settings',
|
||
},
|
||
sharedPage: {
|
||
commands: 'Commands',
|
||
skills: 'Skills',
|
||
agents: 'Agents',
|
||
title: 'Shared Data',
|
||
subtitle: 'Commands, skills, and agents shared across Claude instances',
|
||
totalShared: 'Total Shared',
|
||
visible: 'Visible',
|
||
markdownDetail: 'Markdown detail view',
|
||
filterPrefix: 'Filter:',
|
||
configurationRequired: 'Configuration Required',
|
||
countsUnavailable: 'Counts unavailable',
|
||
retryCounts: 'Retry counts',
|
||
filterPlaceholder: 'Filter {{tab}} by name, description, or path',
|
||
showing: 'Showing {{visible}} of {{total}} {{tab}}',
|
||
showingQuery: ' for "{{query}}"',
|
||
refreshing: ' (refreshing...)',
|
||
loadingShared: 'Loading shared {{tab}}...',
|
||
failedLoadShared: 'Failed to load shared {{tab}}',
|
||
retry: 'Retry',
|
||
noSharedFound:
|
||
'No shared {{tab}} found. Run `ccs sync` or add items in your shared directory.',
|
||
noMatch: 'No {{tab}} match "{{query}}".',
|
||
selectOne: 'Select a {{tab}} to view full content.',
|
||
pathLabel: 'Path',
|
||
resolvedSource: 'Resolved Source',
|
||
loadingMarkdown: 'Loading markdown content...',
|
||
failedLoadContent: 'Failed to load content',
|
||
retryContent: 'Retry content',
|
||
noMarkdown: 'No markdown content available.',
|
||
},
|
||
},
|
||
},
|
||
'zh-CN': {
|
||
translation: {
|
||
locale: {
|
||
en: 'English',
|
||
'zh-CN': '简体中文',
|
||
vi: '越南语',
|
||
ja: '日语',
|
||
},
|
||
layout: {
|
||
languageSwitcher: '语言',
|
||
},
|
||
nav: {
|
||
general: '通用',
|
||
home: '首页',
|
||
analytics: '分析',
|
||
identityAccess: '身份与访问',
|
||
apiProfiles: 'API 配置',
|
||
cliproxyPlus: 'CLIProxy Plus',
|
||
cliproxyOverview: '概览',
|
||
controlPanel: '控制面板',
|
||
githubCopilot: 'GitHub Copilot',
|
||
cursorIde: 'Cursor IDE',
|
||
claudeExtension: 'Claude Extension',
|
||
accounts: '账号',
|
||
allAccounts: '全部账号',
|
||
sharedData: '共享数据',
|
||
compatibleClis: '兼容',
|
||
factoryDroid: 'Factory Droid',
|
||
system: '系统',
|
||
health: '健康',
|
||
settings: '设置',
|
||
openrouterTooltip: '精选:OpenRouter + Alibaba Coding Plan + Ollama',
|
||
},
|
||
home: {
|
||
profiles: '配置',
|
||
cliproxy: 'CLIProxy',
|
||
accounts: '账号',
|
||
health: '健康',
|
||
configurationRequired: '需要配置',
|
||
},
|
||
auth: {
|
||
dashboardTitle: 'CCS 控制台',
|
||
loginDescription: '请输入凭据以访问控制台',
|
||
username: '用户名',
|
||
password: '密码',
|
||
usernamePlaceholder: '请输入用户名',
|
||
passwordPlaceholder: '请输入密码',
|
||
signIn: '登录',
|
||
signingIn: '登录中...',
|
||
loginFailed: '登录失败',
|
||
},
|
||
commonToast: {
|
||
apiKeyRequired: 'API key 为必填项',
|
||
accountAddedPresetFailed: '账号已添加,但应用默认预设失败',
|
||
settingsCopied: '设置已复制到剪贴板',
|
||
enterPresetName: '请先输入预设名称再保存',
|
||
codeCopied: '验证码已复制到剪贴板',
|
||
copyCodeFailed: '复制验证码失败',
|
||
appliedModelAllTiers: '已将模型应用到全部层级',
|
||
settingsSaved: '设置已保存',
|
||
defaultTargetUpdated: '默认目标已更新',
|
||
failedUpdateDefaultTarget: '更新默认目标到 {{target}} 失败{{suffix}}',
|
||
},
|
||
profileDialog: {
|
||
editTitle: '编辑配置',
|
||
createTitle: '创建 API 配置',
|
||
name: '名称',
|
||
namePlaceholder: 'my-api',
|
||
baseUrl: 'Base URL',
|
||
baseUrlPlaceholder: 'https://api.example.com',
|
||
apiKey: 'API Key',
|
||
defaultModel: '默认模型(ANTHROPIC_MODEL)',
|
||
defaultModelHint: '留空则使用:{{model}}',
|
||
modelMappingTitle: '模型映射(Opus/Sonnet/Haiku)',
|
||
modelMappingDesc: '为不同档位配置不同模型 ID,适合按模型类型路由到不同后端的 API 代理。',
|
||
opusModel: 'Opus 模型(ANTHROPIC_DEFAULT_OPUS_MODEL)',
|
||
sonnetModel: 'Sonnet 模型(ANTHROPIC_DEFAULT_SONNET_MODEL)',
|
||
haikuModel: 'Haiku 模型(ANTHROPIC_DEFAULT_HAIKU_MODEL)',
|
||
cancel: '取消',
|
||
saving: '保存中...',
|
||
update: '更新',
|
||
create: '创建',
|
||
},
|
||
modelTierMapping: {
|
||
title: '模型档位映射',
|
||
advanced: '高级',
|
||
description: '为 Claude Code 的 opus/sonnet/haiku 档位配置不同模型。',
|
||
autoSuggest: '基于 {{provider}} 自动建议',
|
||
opusPlaceholder: '例如:anthropic/claude-opus-4',
|
||
sonnetPlaceholder: '例如:anthropic/claude-sonnet-4',
|
||
haikuPlaceholder: '例如:anthropic/claude-3.5-haiku',
|
||
footer:
|
||
'这些字段对应 ANTHROPIC_DEFAULT_OPUS_MODEL、ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL。',
|
||
},
|
||
envEditor: {
|
||
sensitive: '敏感',
|
||
none: '尚未配置环境变量。',
|
||
noneHint: '可在下方输入添加,或直接编辑 JSON。',
|
||
addVariable: '添加环境变量',
|
||
keyPlaceholder: 'VARIABLE_NAME',
|
||
valuePlaceholder: 'value',
|
||
},
|
||
setupVariant: {
|
||
using: '当前使用:',
|
||
variantNameRequired: '变体名称 *',
|
||
variantNamePlaceholder: '例如:my-gemini、g3、flash',
|
||
invokeHintPrefix: '可通过该名称调用:',
|
||
model: '模型',
|
||
modelPlaceholder: '例如:gemini-2.5-pro、claude-opus-4-6-thinking',
|
||
choosePresetInstead: '改为从预设中选择',
|
||
selectModel: '选择模型',
|
||
customModelName: '自定义模型名称...',
|
||
enterAnyModel: '可输入 CLIProxy 支持的任意模型名',
|
||
defaultModel: '默认:{{model}}',
|
||
providerDefault: '提供商默认值',
|
||
back: '返回',
|
||
skip: '跳过',
|
||
creating: '创建中...',
|
||
createVariant: '创建变体',
|
||
skipHint: '如果你只想添加账号而不创建变体,可以直接跳过',
|
||
},
|
||
customPresetDialog: {
|
||
title: '自定义预设',
|
||
presetNameOptional: '预设名称(可选)',
|
||
presetNamePlaceholder: '例如:我的自定义配置',
|
||
codexTipPrefix: 'Codex 提示:后缀',
|
||
codexTipSuffix: '会固定 effort。无后缀模型使用 Thinking 设置。',
|
||
defaultModel: '默认模型',
|
||
defaultModelDesc: '未指定档位时使用',
|
||
opusModel: 'Opus(最强)',
|
||
opusModelDesc: '用于复杂推理任务',
|
||
sonnetModel: 'Sonnet(均衡)',
|
||
sonnetModelDesc: '兼顾速度与能力',
|
||
haikuModel: 'Haiku(快速)',
|
||
haikuModelDesc: '适合简单任务的快速响应',
|
||
cancel: '取消',
|
||
savePreset: '保存预设',
|
||
applyPreset: '应用预设',
|
||
},
|
||
componentModelSelector: {
|
||
selectModel: '选择模型',
|
||
availableModelsCount: '可用模型({{count}})',
|
||
preview: '预览',
|
||
},
|
||
searchableSelect: {
|
||
searchModels: '搜索模型...',
|
||
noResults: '未找到匹配结果。',
|
||
},
|
||
copilotSettings: {
|
||
enableCopilot: '启用 Copilot',
|
||
enableCopilotDesc: '允许使用 GitHub Copilot 订阅',
|
||
basicSettings: '基础设置',
|
||
accountType: '账户类型',
|
||
accountTypeIndividual: '个人',
|
||
accountTypeBusiness: '企业',
|
||
accountTypeEnterprise: '组织',
|
||
rateLimiting: '速率限制',
|
||
rateLimitSeconds: '速率限制(秒)',
|
||
noLimit: '不限制',
|
||
waitOnRateLimit: '触发限速时等待',
|
||
waitOnRateLimitDesc: '达到限制时等待而不是报错',
|
||
daemonSettings: '守护进程设置',
|
||
autoStartDaemon: '自动启动守护进程',
|
||
autoStartDaemonDesc: '使用配置时自动启动 copilot-api',
|
||
},
|
||
providerModelSelector: {
|
||
selectModel: '选择模型',
|
||
noModelsForProvider: '该提供商暂无可用模型',
|
||
broken: '故障',
|
||
deprecated: '已弃用',
|
||
paid: '付费',
|
||
freeTier: '免费档',
|
||
paidTier: '付费档',
|
||
modelKnownIssues: '该模型存在已知问题',
|
||
viewIssueDetails: '查看问题详情',
|
||
modelDeprecated: '该模型已弃用',
|
||
recommended: '推荐',
|
||
allModelsCount: '全部模型({{count}})',
|
||
noModelsAvailable: '暂无可用模型',
|
||
},
|
||
createAuthProfileDialog: {
|
||
title: '创建新账号',
|
||
description:
|
||
'Auth 配置需要先完成 Claude CLI 登录。请在终端执行下方命令。稍后你仍可在 Accounts 表中编辑同步模式、分组与连续性深度。',
|
||
profileName: '配置名称',
|
||
profileNamePlaceholder: '例如:work、personal、client',
|
||
invalidProfileName: '名称必须以字母开头,且只能包含字母、数字、短横线或下划线。',
|
||
enableSharedHistory: '与其他 ccs auth 账号启用共享历史同步',
|
||
historySyncGroupOptional: '历史同步分组(可选)',
|
||
historySyncGroupPlaceholder: 'default、sprint-a、client-x',
|
||
historySyncGroupHint: '留空将使用默认共享分组。空格会自动规范为短横线。',
|
||
deeperContinuity: '高级:更深连续性模式',
|
||
deeperContinuityHint:
|
||
'会同步 session-env、file-history、shell-snapshots 与 todos。凭据仍保持隔离。',
|
||
invalidContextGroup:
|
||
'分组必须以字母开头,且只能包含字母、数字、短横线或下划线(最多 {{max}} 个字符)。',
|
||
command: '命令',
|
||
commandFallback: 'ccs auth create <name>',
|
||
afterRunPrefix: '执行命令后:',
|
||
afterRunStep1: '在浏览器中完成 Claude 登录',
|
||
afterRunStep2: '返回此处并刷新,即可看到新账号',
|
||
poolingHint:
|
||
'如果更倾向于共享池化 Claude OAuth 路由,可在 Accounts 页面操作按钮中使用 CLIProxy Claude pool。',
|
||
close: '关闭',
|
||
copied: '已复制!',
|
||
copyCommand: '复制命令',
|
||
},
|
||
cliproxyModelCategory: {
|
||
google: 'Google(Gemini)',
|
||
openai: 'OpenAI(GPT)',
|
||
anthropic: 'Anthropic(Claude)',
|
||
antigravity: 'Antigravity',
|
||
other: '其他',
|
||
},
|
||
cliproxyOverviewComponents: {
|
||
availableModels: '可用模型',
|
||
noModelsAvailable: '暂无可用模型',
|
||
startSessionHint: '启动 CLIProxy 会话后即可拉取可用模型',
|
||
totalCount: '共 {{count}} 个',
|
||
availableThroughGroupedByProvider: '通过 {{backendLabel}} 提供的模型,按提供商分组',
|
||
moreCount: '另外 {{count}} 个',
|
||
},
|
||
categorizedModelSelector: {
|
||
selectModel: '选择模型',
|
||
noModelsAvailable: '暂无可用模型',
|
||
modelPlaceholder: '模型...',
|
||
},
|
||
openrouterQuickStart: {
|
||
recommended: '推荐',
|
||
title: '从 OpenRouter 开始',
|
||
description:
|
||
'通过一个 API 即可访问来自 OpenAI、Anthropic、Google、Meta 等的 {{modelCountLabel}} 个模型。',
|
||
featureOneApi: '一个 API,接入全部提供商',
|
||
featureTierMapping: '模型档位映射',
|
||
profileCount: '{{count}} 个 API 配置',
|
||
profileCount_other: '{{count}} 个 API 配置',
|
||
selectProfileTitle: '选择一个 API 配置',
|
||
summaryDescriptionWithProfiles:
|
||
'此工作区中已存在 {{count}} 个 API 配置。请从左侧栏选择一个进行编辑,或在此继续创建新的配置。',
|
||
summaryDescriptionWithProfiles_other:
|
||
'此工作区中已存在 {{count}} 个 API 配置。请从左侧栏选择一个进行编辑,或在此继续创建新的配置。',
|
||
summaryDescriptionNoProfiles:
|
||
'API 配置适用于 Anthropic 兼容端点。AI Providers 适用于 Gemini、Codex、Claude、Vertex 以及 OpenAI 兼容连接器。',
|
||
openrouterModelsBadge: '{{modelCountLabel}} 个 OpenRouter 模型',
|
||
runtimeProviderBadge: '运行时提供商设置',
|
||
runtimeProviderTitle: '打开 AI Providers',
|
||
runtimeProviderDescription: '先管理共享的提供商密钥和运行时连接器,再创建独立的 API 配置。',
|
||
runtimeProviderFeatureConnectors: 'Gemini、Codex、Claude、Vertex 以及 OpenAI 兼容连接器',
|
||
runtimeProviderFeatureSecrets: '共享密钥与单个 API 配置分离存放',
|
||
runtimeProviderFooter: '当多个配置需要共享同一提供商设置时最适合使用。',
|
||
createOpenRouterProfile: '创建 OpenRouter 配置',
|
||
getApiKeyAt: '在此获取 API Key:',
|
||
or: '或',
|
||
createCustomProfile: '创建自定义 API 配置',
|
||
},
|
||
alibabaCodingPlanQuickStart: {
|
||
recommended: '推荐',
|
||
title: '试用阿里云 Coding Plan',
|
||
description: '通过 Anthropic 兼容端点接入阿里云 Model Studio Coding Plan。',
|
||
featureEndpoint: 'Anthropic 兼容端点',
|
||
featureKeyFormat: '专用 sk-sp API Key',
|
||
createAlibabaProfile: '创建 Alibaba Coding Plan 配置',
|
||
readGuideAt: '查看配置文档:',
|
||
},
|
||
alibabaCodingPlanPromo: {
|
||
title: 'Alibaba Coding Plan',
|
||
subtitle: '通过 Anthropic 端点接入 Model Studio Coding Plan',
|
||
add: '添加',
|
||
},
|
||
credentialHealth: {
|
||
title: '凭据健康状态',
|
||
ready: '就绪',
|
||
noCredentialsConfigured: '尚未配置凭据。请使用上方登录按钮完成认证。',
|
||
neverUsed: '从未使用',
|
||
justNow: '刚刚',
|
||
unknown: '未知',
|
||
daysAgo: '{{count}} 天前',
|
||
hoursAgo: '{{count}} 小时前',
|
||
minutesAgo: '{{count}} 分钟前',
|
||
},
|
||
proxyStatusWidget: {
|
||
justNow: '刚刚',
|
||
minutesAgo: '{{count}} 分钟前',
|
||
hoursAgo: '{{count}} 小时前',
|
||
syncReady: '同步就绪',
|
||
noConfig: '未配置',
|
||
remoteProxy: '远程代理',
|
||
active: '已连接',
|
||
trafficAutoRouted: '流量已自动转发到远程服务器',
|
||
tooltipSync: '同步配置到 CLIProxy',
|
||
tooltipRestart: '重启',
|
||
tooltipStop: '停止',
|
||
tooltipClose: '关闭',
|
||
tooltipVersionSettings: '版本设置',
|
||
versionManagement: '版本管理',
|
||
selectVersionPlaceholder: '选择要安装的版本...',
|
||
stable: '(稳定版)',
|
||
install: '安装',
|
||
versionsAboveUnstable: '高于 {{version}} 的版本存在已知问题',
|
||
versionsKnownIssues: '版本 {{version}} 存在已知问题',
|
||
lastChecked: '上次检查 {{time}}',
|
||
notRunning: '未运行',
|
||
start: '启动',
|
||
port: '端口 {{port}}',
|
||
sessionCount: '{{count}} 个会话',
|
||
sessionCount_other: '{{count}} 个会话',
|
||
installFaultyTitle: '安装存在已知问题的版本?',
|
||
installFaultyDesc:
|
||
'即将安装 <strong>v{{version}}</strong>,该版本位于已知故障范围 <strong>{{range}}</strong> 内。',
|
||
installFaultyWarning: '该版本存在已知缺陷,可能安装失败或让代理处于异常状态。',
|
||
installUnstableTitle: '安装非稳定版本?',
|
||
installUnstableDesc:
|
||
'即将安装 <strong>v{{version}}</strong>,该版本高于当前最大稳定版 <strong>v{{maxStable}}</strong>。',
|
||
installUnstableWarning: '该版本存在已知稳定性问题,可能导致异常行为。',
|
||
installUnstableConfirm: '确定要继续吗?',
|
||
cancel: '取消',
|
||
installAnyway: '仍要安装',
|
||
clickToDowngrade: '点击降级',
|
||
clickToUpdate: '点击更新',
|
||
},
|
||
syncStatusCard: {
|
||
profileSync: '配置同步',
|
||
ready: '就绪',
|
||
noConfig: '未配置',
|
||
syncsProfilesDesc: '将 API 配置同步到本地 CLIProxy 配置',
|
||
runDoctorHint: '运行 <code>ccs doctor --fix</code> 生成配置。',
|
||
details: '详情',
|
||
syncNow: '立即同步',
|
||
},
|
||
syncDialog: {
|
||
title: '同步配置到本地 CLIProxy',
|
||
description: '将 CCS API 配置同步到本地 CLIProxy 的 config.yaml。',
|
||
noProfiles: '没有可同步的配置。',
|
||
createProfilesFirst: '请先在「配置」页创建 API 配置。',
|
||
modelLabel: '模型:',
|
||
ready: '就绪',
|
||
profilesToSync_one: '{{count}} 个配置待同步',
|
||
profilesToSync_other: '{{count}} 个配置待同步',
|
||
cancel: '取消',
|
||
syncing: '同步中...',
|
||
synced: '已同步!',
|
||
syncNow: '立即同步',
|
||
},
|
||
errorLogs: {
|
||
title: '错误日志',
|
||
failedRequests_one: '{{count}} 个失败请求',
|
||
failedRequests_other: '{{count}} 个失败请求',
|
||
cliproxyDiagnostics: 'CLIProxy 诊断',
|
||
showingCount: '显示 50 / {{total}} 条',
|
||
selectLog: '选择一条日志查看详情',
|
||
failedLoadContent: '加载日志内容失败',
|
||
copyAbsolutePath: '复制绝对路径',
|
||
copyRawContent: '复制原始日志',
|
||
tabOverview: '概览',
|
||
tabHeaders: '请求头',
|
||
tabRequest: '请求体',
|
||
tabResponse: '响应体',
|
||
tabRaw: '原始',
|
||
modelLabel: '模型:',
|
||
quotaResetsIn: '配额重置于 ',
|
||
method: '方法',
|
||
provider: '提供商',
|
||
version: '版本',
|
||
endpoint: '端点',
|
||
url: 'URL',
|
||
timestamp: '时间戳',
|
||
na: '无',
|
||
noHeaders: '无请求头',
|
||
noRequestBody: '无请求体内容',
|
||
noResponseBody: '无响应体内容',
|
||
rateLimitedMsg: '触发限速。请切换账号或等待配额重置。模型 {{model}} 配额已用尽。',
|
||
rateLimitedMsgNoModel: '触发限速。请切换账号或等待配额重置。',
|
||
authFailedMsg: '认证失败。请通过 CLIProxy 设置重新认证或检查 API Key。',
|
||
notFoundMsg: '端点未找到,该提供商可能不存在此端点。',
|
||
serverErrorMsg: '上游服务器错误。请稍后重试或查看提供商状态页。',
|
||
timeoutMsg: '请求超时。请检查网络或增大超时设置。',
|
||
unknown: '未知',
|
||
},
|
||
editAccountContext: {
|
||
title: '编辑历史同步',
|
||
description: '配置「{{name}}」与其他 ccs auth 账号共享历史与连续性的方式。',
|
||
syncMode: '同步模式',
|
||
selectContextMode: '选择同步模式',
|
||
isolatedOption: '隔离(不同步)',
|
||
sharedOption: '共享(启用同步)',
|
||
sharedModeHint: '共享模式会为同一历史同步分组内的账号复用工作区上下文。',
|
||
isolatedModeHint: '隔离模式使该账号与其他 ccs auth 账号完全独立。',
|
||
historySyncGroup: '历史同步分组',
|
||
groupPlaceholder: 'default',
|
||
groupHint: '会规范为小写(空格变为短横线)。允许:字母、数字、_、-(最多 {{max}} 字符)。',
|
||
invalidGroup: '请输入以字母开头的有效分组名。',
|
||
continuityDepth: '连续性深度',
|
||
selectContinuityDepth: '选择连续性深度',
|
||
standardOption: '标准(仅项目)',
|
||
deeperOption: '更深连续性(高级)',
|
||
deeperHint: '高级模式还会同步 session-env、file-history、shell-snapshots 和 todos。',
|
||
standardHint: '标准模式仅同步项目工作区上下文。',
|
||
credentialsIsolated: '凭据与 .anthropic 在所有模式下均按账号隔离。',
|
||
implicationTitle: '保存后会发生什么',
|
||
isolatedImplication: '该账号会继续保持隔离,其他账号无法续接它的连续性状态。',
|
||
sameGroupRule: '只有账号都使用同一个分组“{{group}}”时,才会彼此共享连续性。',
|
||
noSameGroupPeer: '当前没有其他账号使用这个分组。',
|
||
sameGroupPeerCount_one: '已有 {{count}} 个其他账号使用这个分组。',
|
||
sameGroupPeerCount_other: '已有 {{count}} 个其他账号使用这个分组。',
|
||
deeperReady_one: '已有 {{count}} 个同组账号启用更深连续性。这是当前最强的交接设置。',
|
||
deeperReady_other: '已有 {{count}} 个同组账号启用更深连续性。这是当前最强的交接设置。',
|
||
deeperNeedsPeers:
|
||
'此账号已启用更深连续性,但同组中的其他账号也需要启用更深连续性,才能更好满足跨账号续接的预期。',
|
||
standardWarning:
|
||
'标准共享更适合项目上下文。如果用户期望跨账号续接,两个账号都应启用更深连续性。',
|
||
resumeOriginalWarning: '如果旧会话很重要,请先在原账号中恢复它,再调整设置。',
|
||
cancel: '取消',
|
||
save: '保存',
|
||
saving: '保存中...',
|
||
},
|
||
historySyncLearningMap: {
|
||
title: '历史同步说明',
|
||
description: '隔离 -> 共享 -> 更深。在每行使用「同步」进行所有更改。',
|
||
learningMap: '说明',
|
||
isolated: '隔离',
|
||
shared: '共享',
|
||
deeper: '更深',
|
||
cliproxyManaged_one: '{{count}} 个 CLIProxy Claude 池账号在操作中心 / CLIProxy 页面管理。',
|
||
cliproxyManaged_other:
|
||
'{{count}} 个 CLIProxy Claude 池账号在操作中心 / CLIProxy 页面管理。',
|
||
showDetails: '显示详情:分组、切换与旧策略',
|
||
modeSwitch: '模式切换',
|
||
modeSwitchDesc: '同步对话框可让用户在隔离/共享间切换并选择更深连续性。',
|
||
historySyncGroup: '历史同步分组',
|
||
historySyncGroupDesc: '同一分组即共享项目上下文。默认回退为 default。',
|
||
sameGroupRule: '只有两个账号都设为共享且使用同一分组时,才会共享连续性。',
|
||
deeperRecommendation:
|
||
'分组“{{group}}”已开启共享,但如果用户期望跨账号续接,更推荐同时启用更深连续性。',
|
||
partialGroup:
|
||
'分组“{{group}}”已经配置得不错,但其他账号或分组仍需要补齐同组或更深连续性设置。',
|
||
readyGroup: '分组“{{group}}”已有多个账号启用更深连续性。这是当前最强的交接设置。',
|
||
legacyConfirmation_one: '{{count}} 个旧账号仍需要显式确认。',
|
||
legacyConfirmation_other: '{{count}} 个旧账号仍需要显式确认。',
|
||
},
|
||
continuityReadiness: {
|
||
title: '跨账号续接检查',
|
||
description: '在切换账号前,用这张卡快速确认还缺什么。',
|
||
state: {
|
||
single: '单账号',
|
||
isolated: '续接关闭',
|
||
'shared-alone': '已共享但未完成',
|
||
'shared-standard': '仅项目共享',
|
||
partial: '部分就绪',
|
||
ready: '强交接已就绪',
|
||
},
|
||
metrics: {
|
||
isolated: '隔离账号',
|
||
sharedPeers: '有同组伙伴',
|
||
deeperReady: '更深已就绪',
|
||
},
|
||
messages: {
|
||
single: {
|
||
title: '目前只配置了一个 auth 账号。',
|
||
description: '现在还不涉及跨账号交接。请先再添加一个 auth 账号,再配置共享连续性。',
|
||
},
|
||
isolated: {
|
||
title: '当前还没有开启跨账号续接。',
|
||
description: '当前可见账号都处于隔离模式,因此在一个账号中创建的会话仍会留在原账号。',
|
||
},
|
||
'shared-alone': {
|
||
title: '已经开启共享,但还没有任何分组拥有同组伙伴。',
|
||
description_one: '{{count}} 个共享账号仍在等待另一个账号加入同一分组。',
|
||
description_other: '{{count}} 个共享账号仍在等待另一个账号加入同一分组。',
|
||
},
|
||
'shared-standard': {
|
||
title: '分组“{{group}}”已共享项目上下文,但尚未形成更深连续性的配对。',
|
||
description:
|
||
'用户可能期望的不只是项目共享。如果希望更稳妥地支持跨账号续接,请让这个分组中的两个账号都启用更深连续性。',
|
||
},
|
||
partial: {
|
||
title: '已有一个分组准备就绪,但整体配置仍是混合状态。',
|
||
description:
|
||
'至少有一个分组已经启用更深连续性,但其他账号仍可能处于隔离、单独共享分组,或尚未启用更深连续性。',
|
||
},
|
||
ready: {
|
||
title: '分组“{{group}}”已经具备当前最强的连续性设置。',
|
||
description:
|
||
'这个分组中已有多个账号启用更深连续性。是否能够恢复仍取决于 Claude 上游实际保存了什么。',
|
||
},
|
||
},
|
||
stepsTitle: '下一步建议',
|
||
steps: {
|
||
syncBoth: '请在两个账号上都打开“同步”,而不是只调整要切换进去的那个账号。',
|
||
sameGroup: '两个账号都使用同一个历史同步分组。“{{group}}”是当前推荐的分组。',
|
||
enableDeeper:
|
||
'如果用户期望的是跨账号续接,而不是仅共享项目上下文,请在两个账号上都启用更深连续性。',
|
||
resumeOriginal: '如果原来的会话很重要,请先在原账号中恢复它,再修改连续性设置。',
|
||
},
|
||
singleSteps: {
|
||
addAccount: '先再创建一个 ccs auth 账号,然后再考虑跨账号交接。',
|
||
sameGroupLater: '当第二个账号准备好后,再把两个账号放到同一个历史同步分组。',
|
||
enableDeeperLater:
|
||
'如果未来会期望跨账号续接而不是仅共享项目上下文,请在两个账号上都启用更深连续性。',
|
||
resumeOriginal: '在第二个账号配置完成之前,重要会话仍应从原账号继续恢复。',
|
||
},
|
||
},
|
||
continuityOverview: {
|
||
plainLaneTitle: '普通 ccs 正在使用不同的续接通道',
|
||
plainLaneDescription:
|
||
'普通 ccs 当前会从 {{lane}} 续接,而不是这个账号通道。请先恢复原通道中的会话,再修改同步设置。',
|
||
setDefaultHint: '如果希望以后普通 ccs 跟随某个账号,请使用该账号行上的“设为默认”。',
|
||
recommendBadge: '建议 {{group}}',
|
||
partialBadge: '部分同步 {{group}}',
|
||
lane: {
|
||
native: '原生 Claude(~/.claude)',
|
||
accountDefault: '账号 {{name}}',
|
||
accountInherited: '通过连续性继承使用账号 {{name}}',
|
||
profileDefault: '默认配置 {{name}}(仍走原生 Claude 通道)',
|
||
},
|
||
},
|
||
accountsTable: {
|
||
name: '名称',
|
||
type: '类型',
|
||
defaultBadge: '默认',
|
||
created: '创建时间',
|
||
lastUsed: '最后使用',
|
||
historySync: '历史同步',
|
||
actions: '操作',
|
||
syncTitle: '编辑同步模式、分组与连续性深度',
|
||
confirmLegacyTitle: '确认此旧账号的当前模式为显式',
|
||
sync: '同步',
|
||
confirm: '确认',
|
||
active: '当前',
|
||
setDefault: '设为默认',
|
||
deleteAccount: '删除账号',
|
||
cannotDeleteDefault: '不能删除默认账号',
|
||
noAccounts: '未找到 CCS auth 账号。请使用 ccs auth create 添加。',
|
||
resetToDefault: '恢复为 CCS 默认',
|
||
deleteDialogTitle: '删除账号',
|
||
deleteDialogDesc:
|
||
'确定要删除账号「{{name}}」吗?将移除该配置及其所有会话数据,且无法撤销。',
|
||
cancel: '取消',
|
||
delete: '删除',
|
||
sharedGroupStandard: '共享({{group}},标准)',
|
||
sharedGroupDeeper: '共享({{group}},更深)',
|
||
sharedGroupLegacy: '共享({{group}},标准旧策略)',
|
||
isolatedLegacy: '隔离(旧默认)',
|
||
isolated: '隔离',
|
||
noSameGroupPeer: '同组中还没有其他账号',
|
||
sameGroupPeerCount_one: '{{count}} 个同组账号',
|
||
sameGroupPeerCount_other: '{{count}} 个同组账号',
|
||
legacyReview: '请检查并确认这个推断出的默认状态。',
|
||
noHandoff: '跨账号续接仍会回到原账号。',
|
||
badges: {
|
||
shared: '共享',
|
||
deeper: '更深',
|
||
legacy: '旧策略',
|
||
isolated: '隔离',
|
||
},
|
||
},
|
||
addAccountDialog: {
|
||
title: '添加 {{displayName}} 账号',
|
||
descKiro: '选择 Kiro 认证方式,然后通过浏览器或从 Kiro IDE 导入完成认证。',
|
||
descDeviceCode: '点击认证后,验证码将显示,请在提供商网站输入。',
|
||
descOauth: '点击认证获取 OAuth URL,在任意浏览器中打开即可登录。',
|
||
powerUserEnabled: '已启用高级用户模式',
|
||
powerUserSkipped:
|
||
'设置 > 代理 中的高级用户模式会跳过 AGY 责任确认清单和 Gemini Dashboard 的风险短语。OAuth / 账号风险需自行承担。',
|
||
powerUserLoadFailed: '加载高级用户模式设置失败。请检查“设置 > 代理”后重试。',
|
||
powerUserLoading: '正在加载高级用户安全设置。请稍候后重试。',
|
||
powerUserUnavailableRetry: '高级用户模式不可用。请完成当前提供商要求的安全步骤后重试。',
|
||
authMethod: '认证方式',
|
||
selectKiroAuthMethod: '选择 Kiro 认证方式',
|
||
nicknameRequired: '昵称(必填)',
|
||
nicknameOptional: '昵称(选填)',
|
||
nicknamePlaceholder: '例如:工作、个人',
|
||
nicknameRequiredHint: '该提供商必填。请使用唯一易记名称(如工作、个人)。',
|
||
nicknameOptionalHint: '用于区分账号的友好名称。留空将自动生成安全标识。',
|
||
waitingForAuth: '等待认证中...',
|
||
deviceCodeHint: '验证码对话框即将出现,请在提供商网站输入验证码。',
|
||
browserHint: '在浏览器中完成认证后,本对话框将自动关闭。',
|
||
openUrlLabel: '在任意浏览器中打开此 URL 登录:',
|
||
copied: '已复制',
|
||
copy: '复制',
|
||
open: '打开',
|
||
popupBlocked: '弹窗被拦截。请复制上方 URL 在浏览器中手动打开。',
|
||
redirectPasteLabel: '重定向未生效?请粘贴回调 URL:',
|
||
callbackPlaceholder: '在此粘贴重定向 URL...',
|
||
submitCallback: '提交回调',
|
||
submitting: '提交中...',
|
||
preparingUrl: '正在准备登录 URL...',
|
||
cancel: '取消',
|
||
importingToken: '正在从 Kiro IDE 导入令牌...',
|
||
authenticate: '认证',
|
||
importFromIde: '从 IDE 导入',
|
||
importing: '导入中...',
|
||
},
|
||
flowViz: {
|
||
backToProviders: '返回提供商',
|
||
showDetails: '显示详情',
|
||
hideDetails: '隐藏详情',
|
||
resetLayout: '重置布局',
|
||
provider: '提供商',
|
||
totalRequests: '总请求数',
|
||
accounts: '账号',
|
||
connectionTimeline: '连接时间线',
|
||
noRecentConnections: '暂无最近连接',
|
||
},
|
||
quickStats: {
|
||
totalRequests: '总请求数',
|
||
successRate: '成功率',
|
||
totalTokens: '总 Token 数',
|
||
activeModels: '活跃模型数',
|
||
},
|
||
authMonitor: {
|
||
accounts: '账号',
|
||
accountsCount: '{{count}} 个账号',
|
||
success: '成功',
|
||
failed: '失败',
|
||
successRate: '成功率',
|
||
},
|
||
accountCard: {
|
||
resumeAccount: '恢复账号',
|
||
pauseAccount: '暂停账号',
|
||
quotaLoading: '配额...',
|
||
quota: '配额',
|
||
quotaUnavailable: '配额限制不可用',
|
||
reauthNeeded: '需要重新认证',
|
||
failureLabelReauth: '重新认证',
|
||
failureLabelWorkspace: '工作区',
|
||
failureLabelNoAccess: '无权限',
|
||
failureLabelRetry: '重试',
|
||
failureLabelReconnect: '重新连接',
|
||
failureLabelTemporary: '临时问题',
|
||
failureLabelUnavailable: '不可用',
|
||
failureHintReauth: '请重新运行该账号的认证流程以刷新访问权限。',
|
||
failureHintWorkspace: '请将该账号移回可用的工作区,然后移除并重新添加。',
|
||
failureHintNoAccess: '该账号无法访问提供商的配额接口。',
|
||
failureHintRetry: '稍后再试一次。',
|
||
failureHintReconnect: '请移除这个失效账号并重新认证。',
|
||
failureHintTemporary: '这看起来是临时问题,请稍后重试。',
|
||
removeAndReadd: '移除并重新添加账号',
|
||
autoRefreshFailed: '自动刷新失败',
|
||
},
|
||
antigravityChecklist: {
|
||
title: 'Antigravity OAuth 责任须知',
|
||
subtitle: '认证前请完成全部 4 步。',
|
||
mandatory: '必读',
|
||
completion: '完成度',
|
||
stepsCount: '{{current}}/4 步',
|
||
},
|
||
accountSafetyWarning: {
|
||
title: 'OAuth 账号安全提示',
|
||
subtitle: 'Issue #509 · Gemini + AGY OAuth 风险',
|
||
firstLine:
|
||
'Issue #509 记录了与 ccs agy 及 ccs gemini 与 ccs agy 共享账号使用相关的封禁/停用报告。',
|
||
secondLine: '仅在您愿意承担 OAuth 与账号访问风险的前提下继续。',
|
||
issueLabel: '查看 issue #509',
|
||
proxySettingsLabel: 'Gemini + AGY 控制:设置 > 代理',
|
||
},
|
||
cliproxyDialog: {
|
||
name: '名称',
|
||
provider: '提供商',
|
||
account: '账号',
|
||
accountOptional: '账号(选填)',
|
||
model: '模型',
|
||
modelOptional: '模型(选填)',
|
||
defaultTarget: '默认目标',
|
||
defaultTier: '默认档位',
|
||
tierConfig: '档位配置',
|
||
selectProvider: '选择提供商...',
|
||
useDefaultAccount: '使用默认账号',
|
||
defaultSuffix: '(默认)',
|
||
opus: 'Opus',
|
||
sonnet: 'Sonnet',
|
||
haiku: 'Haiku',
|
||
claudeCode: 'Claude Code',
|
||
factoryDroid: 'Factory Droid',
|
||
cancel: '取消',
|
||
create: '创建',
|
||
creating: '创建中...',
|
||
saveChanges: '保存更改',
|
||
saving: '保存中...',
|
||
placeholderName: 'my-gemini',
|
||
placeholderModel: 'gemini-2.5-pro',
|
||
placeholderComposite: 'my-composite',
|
||
placeholderModelId: 'model-id',
|
||
placeholderAccountId: 'account-id',
|
||
editCompositeTitle: '编辑复合变体:{{name}}',
|
||
editSingleTitle: '编辑单一样式:{{name}}',
|
||
},
|
||
profileEditor: {
|
||
profileInfo: '配置信息',
|
||
profileName: '配置名称',
|
||
filePath: '文件路径',
|
||
lastModified: '最后修改',
|
||
defaultTarget: '默认目标',
|
||
quickUsage: '快速使用',
|
||
runWithProfile: '使用配置运行',
|
||
runOnDroid: '在 Droid 上运行',
|
||
runOnDroidWithFlag: '通过 --target 在 Droid 上运行',
|
||
droidAliasExplicit: 'Droid 别名(显式)',
|
||
overrideToClaude: '切换为 Claude',
|
||
overrideToClaudeExplicit: '切换为 Claude(显式)',
|
||
targetHintPreferredAlias: '推荐显式别名:',
|
||
targetHintClaudeDefault: '默认命令:',
|
||
targetHintLegacyAlias: '旧快捷方式仍可用:',
|
||
targetHintOverride: '你仍可在每次运行时用',
|
||
setAsDefault: '设为默认',
|
||
provider: '提供商',
|
||
custom: '自定义',
|
||
providerChooserHint: '先选择一个预设,之后仍可调整 URL、API key 和模型映射。',
|
||
featuredProviders: '精选提供商',
|
||
scrollHint: '屏幕较窄时可横向滚动',
|
||
customEndpoint: '自定义端点',
|
||
morePresets: '更多预设',
|
||
customEndpointDescription: '从空白的 Anthropic 兼容 URL 开始,手动配置全部内容。',
|
||
},
|
||
settings: {
|
||
sectionLoadFailed: '加载分区失败',
|
||
unknownError: '发生未知错误',
|
||
reloadPage: '重新加载页面',
|
||
refresh: '刷新',
|
||
copy: '复制',
|
||
copied: '已复制',
|
||
saved: '已保存',
|
||
loading: '加载中...',
|
||
configFileNotFound: '未找到配置文件',
|
||
},
|
||
settingsTabs: {
|
||
web: '网页',
|
||
env: '环境',
|
||
think: '思考',
|
||
proxy: '代理',
|
||
auth: '认证',
|
||
backup: '备份',
|
||
},
|
||
settingsAuth: {
|
||
failedFetchTokens: '获取认证令牌失败',
|
||
failedSaveTokens: '保存令牌失败',
|
||
tokensUpdated: '令牌已更新,请重启 CLIProxy 生效。',
|
||
failedRegenerate: '重新生成密钥失败',
|
||
secretRegenerated: '新的管理密钥已生成,请重启 CLIProxy 生效。',
|
||
failedReset: '重置令牌失败',
|
||
tokensReset: '令牌已重置为默认值,请重启 CLIProxy 生效。',
|
||
description: '配置 CLIProxy 认证令牌。修改后需要重启 CLIProxy。',
|
||
apiKey: 'API Key',
|
||
custom: '自定义',
|
||
apiKeyDesc: 'Claude Code 通过该值向 CLIProxy 鉴权',
|
||
apiKeyPlaceholder: 'API key',
|
||
managementSecret: '管理密钥',
|
||
managementSecretDesc: 'CCS Dashboard 使用该值访问 CLIProxy 管理接口',
|
||
managementSecretPlaceholder: '管理密钥',
|
||
generateSecret: '生成新的安全密钥',
|
||
resetDefaults: '重置为默认值',
|
||
resetDesc: '将 API key 和管理密钥都恢复为默认值。',
|
||
saving: '保存中...',
|
||
save: '保存',
|
||
},
|
||
settingsGlobalEnv: {
|
||
description: '向所有非 Claude 订阅型配置注入环境变量(gemini、codex、agy、ghcp 等)',
|
||
enabled: '全局环境变量已启用',
|
||
disabled: '全局环境变量已禁用',
|
||
enabledDesc: '环境变量将注入第三方配置',
|
||
disabledDesc: '环境变量不会被注入',
|
||
envVars: '环境变量',
|
||
noneConfigured: '尚未配置环境变量',
|
||
addNew: '新增变量',
|
||
keyName: 'KEY_NAME',
|
||
value: 'value',
|
||
add: '添加',
|
||
quickAdd: '快速添加常用变量',
|
||
allConfigured: '常用变量已全部配置',
|
||
},
|
||
settingsBackups: {
|
||
failedFetch: '获取备份失败',
|
||
failedRestore: '恢复备份失败',
|
||
restoreSuccess: '备份恢复成功',
|
||
title: '设置备份',
|
||
description: '恢复 settings.json 的历史版本。每次修改设置时会自动创建备份。',
|
||
none: '暂无备份',
|
||
noneHint: '修改设置后,备份会显示在这里',
|
||
latest: '最新',
|
||
restoring: '恢复中...',
|
||
restore: '恢复',
|
||
restoreConfirmTitle: '确认恢复备份?',
|
||
restoreConfirmPrefix: '这将用以下备份替换当前设置:',
|
||
restoreConfirmSuffix: '此操作不可撤销。',
|
||
cancel: '取消',
|
||
},
|
||
settingsWebsearch: {
|
||
description: '面向第三方配置(gemini、codex、agy 等)的 CLI 网页搜索',
|
||
enabled: 'WebSearch 已启用',
|
||
disabled: 'WebSearch 已禁用',
|
||
checking: '正在检查状态...',
|
||
providers: '提供商',
|
||
noneConfigured: '未配置任何提供商',
|
||
noneConfiguredHint: '请先安装 CLI 工具以启用网页搜索提供商',
|
||
checkProviders: '检查可用提供商',
|
||
installed: '已安装',
|
||
notInstalled: '未安装',
|
||
model: '模型:',
|
||
howInstall: '如何安装 {{name}} CLI',
|
||
installGlobally: '全局安装',
|
||
requiresKey: '(需要 xAI API key)',
|
||
freeTier: '(提供免费额度)',
|
||
viewDocs: '查看文档',
|
||
},
|
||
settingsProxy: {
|
||
failedLoadAgyMode: '加载高级模式失败',
|
||
failedUpdateAgyMode: '更新高级模式失败',
|
||
failedVerifyAgyMode: '校验高级模式持久化失败',
|
||
notPersistedAgyMode: '高级模式未成功持久化,配置可能被其他进程修改。',
|
||
agyModeEnabled: '高级模式已启用。',
|
||
agyModeDisabled: '高级模式已关闭。',
|
||
typePhraseToContinue: '请输入“{{value}}”后继续。',
|
||
description: '为基于代理的配置设置本地或远程 {{backend}} 连接',
|
||
backendPlus: 'CLIProxy Plus',
|
||
backend: 'CLIProxy',
|
||
instanceStatus: '实例状态',
|
||
connectionMode: '连接模式',
|
||
local: '本地',
|
||
remote: '远程',
|
||
localDesc: '在本机运行 {{backend}} 二进制',
|
||
remoteDesc: '连接到远程 {{backend}} 服务器',
|
||
backendBinary: '后端二进制',
|
||
stopProxyToSwitch: '请先在实例状态中停止正在运行的代理,再切换后端。',
|
||
default: '默认',
|
||
plusDesc: '完整支持包括 Kiro 和 GitHub Copilot 在内的提供商',
|
||
originalDesc: '原版二进制(仅 Gemini、Codex、Antigravity)',
|
||
variantsIncompatible:
|
||
'现有 Kiro/Copilot 变体与 CLIProxyAPI 不兼容。请切换到 CLIProxyAPIPlus 或移除这些变体。',
|
||
safety: '安全',
|
||
agyModeTitle: 'Antigravity + Gemini 高级模式',
|
||
agyModeDesc: '跳过 AGY 责任确认清单,以及 Gemini Dashboard 中输入风险短语的步骤。',
|
||
agyWarning: '仅在你充分理解 OAuth 封禁风险模式(#509)后使用。CCS 不对账号损失承担责任。',
|
||
finalConfirm: '需要最终确认',
|
||
finalConfirmDesc:
|
||
'启用后会跳过 Dashboard / CLI 中的 AGY 安全检查,以及 Gemini Dashboard 的风险短语确认。请先阅读 issue #509,并输入精确短语后继续。',
|
||
step1: '步骤 1',
|
||
readIssue: '阅读 issue #509',
|
||
step2: '步骤 2',
|
||
typePrefix: '输入',
|
||
typeSuffix: '以启用。',
|
||
typePhraseAria: '输入 I ACCEPT RISK 以启用 Antigravity + Gemini 高级模式',
|
||
exactPhrase: '必须输入完全一致的短语。',
|
||
enableAgyMode: '启用 Antigravity + Gemini 高级模式',
|
||
toggleAgyMode: '切换 Antigravity + Gemini 高级模式',
|
||
fallbackSettings: '回退设置',
|
||
enableFallback: '启用本地回退',
|
||
enableFallbackDesc: '远程不可达时使用本地代理',
|
||
autoStartLocal: '自动启动本地代理',
|
||
autoStartLocalDesc: '发生回退时自动启动本地代理',
|
||
advanced: '高级',
|
||
debugMode: '调试模式',
|
||
debugModeDesc: '在浏览器控制台输出开发诊断信息',
|
||
debugModeEnabled: '调试模式已开启,请在浏览器控制台查看详细日志。',
|
||
localProxy: '本地代理',
|
||
port: '端口',
|
||
autoStart: '自动启动',
|
||
localAutoStartDesc: '需要时自动启动本地代理',
|
||
remoteConfigTitle: '远程服务器配置',
|
||
host: '主机',
|
||
hostPlaceholder: '192.168.1.100 或 proxy.example.com',
|
||
defaultPort: '默认:{{value}}',
|
||
portPlaceholder: '留空使用 {{value}}',
|
||
protocol: '协议',
|
||
http: 'HTTP',
|
||
https: 'HTTPS',
|
||
apiKeyOptional: 'API Key(可选)',
|
||
apiKeyPlaceholder: '用于 /v1/* API 接口',
|
||
apiKeyDesc: '用于 /v1/chat/completions 接口请求',
|
||
managementKeyOptional: '管理密钥(可选)',
|
||
managementKeyPlaceholder: '用于 /v0/management/* 接口',
|
||
managementKeyDesc: '用于 Dashboard 管理接口。未设置时回退使用 API Key。',
|
||
testing: '测试中...',
|
||
testConnection: '测试连接',
|
||
connectedLatency: '已连接({{value}}ms)',
|
||
connectionFailed: '连接失败',
|
||
invalidPortOrEmpty: '端口必须是 1 到 65535 的整数,或留空使用默认值',
|
||
invalidLocalPort: '本地端口必须是 1 到 65535 的整数',
|
||
backendPlusApi: 'CLIProxyAPIPlus',
|
||
backendApi: 'CLIProxyAPI',
|
||
},
|
||
settingsThinking: {
|
||
description: '为支持的模型配置扩展思考/推理。',
|
||
supportedProviders: '支持的提供商',
|
||
modeTitle: '思考模式',
|
||
modeAutoDesc: '根据模型档位自动设置思考级别',
|
||
modeOffDesc: '关闭扩展思考',
|
||
modeManualDesc: '设置持久覆盖级别,或按次使用 CLI 参数',
|
||
tierDefaults: '档位默认值',
|
||
tierDefaultsDesc: '自动模式下各模型档位的默认思考级别。',
|
||
persistentOverride: '持久覆盖',
|
||
persistentOverrideDesc: '应用到所有会话。CLI 参数仍具有更高优先级。',
|
||
enterCustomBudget: '输入自定义预算',
|
||
apply: '应用',
|
||
providerOverrides: '提供商覆盖({{count}})',
|
||
providerOverridesDesc: '为特定提供商覆盖档位默认值。可按需添加自定义提供商键。',
|
||
addProviderPlaceholder: '添加提供商键(例如 qwen)',
|
||
showWarnings: '显示告警',
|
||
showWarningsDesc: '当思考值被限制或调整时显示告警',
|
||
cliEnvOverride: 'CLI 与环境变量覆盖',
|
||
supportLine1Prefix: '思考预算:',
|
||
supportLine1Suffix: '(基于 token)',
|
||
supportLine2Prefix: '推理强度:',
|
||
supportLine2SuffixPrefix: '(后缀或 ',
|
||
supportLine2SuffixPostfix: ':minimal/low/medium/high/xhigh)',
|
||
supportLine3Prefix: 'Codex 后缀会固定强度(例如 ',
|
||
supportLine3Suffix: ');无后缀模型使用 Thinking mode。',
|
||
},
|
||
analytics: {
|
||
title: '分析',
|
||
subtitle: '追踪使用情况与洞察',
|
||
month: '本月',
|
||
allTime: '全部时间',
|
||
updated: '更新于 {{value}}',
|
||
},
|
||
analyticsSummary: {
|
||
totalTokens: '总 Token',
|
||
totalTokensSubtitle: '输入 {{input}} / 输出 {{output}}',
|
||
totalCost: '总成本',
|
||
totalCostSubtitle: '日均 ${{value}}',
|
||
cacheTokens: '缓存 Token',
|
||
cacheTokensSubtitle: '${{cost}}(占成本 {{percent}}%)',
|
||
inputCost: '输入成本',
|
||
outputCost: '输出成本',
|
||
tokensSubtitle: '{{value}} 个 token',
|
||
},
|
||
apiProfiles: {
|
||
title: 'API 配置',
|
||
new: '新建',
|
||
searchPlaceholder: '搜索配置...',
|
||
loadingProfiles: '正在加载配置...',
|
||
failedLoadTitle: '加载配置失败',
|
||
failedLoadDesc: '无法获取 API 配置,请稍后重试。',
|
||
retry: '重试',
|
||
noProfilesYet: '还没有 API 配置',
|
||
noProfilesDesc: '创建你的第一个配置以连接自定义 API 端点',
|
||
createProfile: '创建配置',
|
||
noProfileMatch: '没有匹配“{{query}}”的配置',
|
||
profileCount: '{{count}} 个配置',
|
||
profileCount_other: '{{count}} 个配置',
|
||
configuredCount: '{{count}} 个已配置',
|
||
deleteProfileTitle: '删除配置',
|
||
deleteProfileDesc: '确定要删除“{{name}}”吗?这会移除设置文件且无法恢复。',
|
||
delete: '删除',
|
||
unsavedChangesTitle: '未保存的更改',
|
||
unsavedChangesDesc: '你在“{{current}}”中有未保存内容,是否丢弃并切换到“{{next}}”?',
|
||
discardSwitch: '丢弃并切换',
|
||
},
|
||
accountsPage: {
|
||
title: '账号',
|
||
managePrefix: '统一管理',
|
||
manageSuffix: '账号与池化接入流程。',
|
||
mobileManageSuffix: '的连续性配置。',
|
||
primaryActions: '主要操作',
|
||
createAccount: '创建账号',
|
||
authClaudeInPool: '在 Pool 中认证 Claude',
|
||
openClaudePoolSettings: '打开 Claude Pool 设置',
|
||
openCliProxyClaudePool: '打开 CLIProxy Claude Pool',
|
||
migrationFollowup: '迁移后续处理',
|
||
legacyContextPending: '{{count}} 个账号仍需首次模式确认。',
|
||
legacyContextPending_other: '{{count}} 个账号仍需首次模式确认。',
|
||
legacyContinuityPending: '{{count}} 个共享账号仍处于标准旧版连续性深度。',
|
||
legacyContinuityPending_other: '{{count}} 个共享账号仍处于标准旧版连续性深度。',
|
||
confirmingLegacy: '正在确认旧版策略...',
|
||
confirmLegacy: '确认旧版策略({{count}})',
|
||
noLegacyFollowup: '暂无待处理的迁移后续项。',
|
||
continuityGuide: '连续性指南',
|
||
expandWhenNeeded: '按需展开查看。',
|
||
sharedStandard: '共享标准',
|
||
sharedStandardDesc: '仅同步项目工作区。适合大多数团队。',
|
||
sharedDeeper: '共享更深',
|
||
sharedDeeperDesc:
|
||
'会额外同步 session-env、file-history、shell-snapshots 和 todos。适合需要跨账号续接的场景。',
|
||
sharedDeeperPrefix: '额外包含',
|
||
isolated: '隔离',
|
||
isolatedDesc: '不建立链接。适合严格隔离场景。',
|
||
quickCommands: '快捷命令',
|
||
quickCommandsDesc: '复制后在终端运行。',
|
||
workspaceBadge: 'ccs auth 工作区',
|
||
historySyncBadge: '历史同步控制',
|
||
authAccounts: '认证账号',
|
||
tableScopePrefix: '该表仅展示',
|
||
tableScopeMiddle: '账号。模式/分组/深度调整请使用',
|
||
tableScopeSuffix: '。',
|
||
accountMatrix: '账号矩阵',
|
||
sharedTotalDesc: '共享总数:{{count}}。可执行 Sync 设置和旧版确认操作。',
|
||
loadingAccounts: '正在加载账号...',
|
||
},
|
||
health: {
|
||
justNow: '刚刚',
|
||
secondsAgo: '{{count}} 秒前',
|
||
minutesAgo: '{{count}} 分钟前',
|
||
hoursAgo: '{{count}} 小时前',
|
||
systemHealth: '系统健康',
|
||
build: '构建 {{version}}',
|
||
lastScan: '上次扫描:',
|
||
autoRefresh: '自动刷新:',
|
||
refresh: '刷新',
|
||
checks: '检查项',
|
||
version: '版本',
|
||
platform: '平台',
|
||
liveMonitoring: '实时监控已启用',
|
||
copied: '已复制到剪贴板',
|
||
refreshing: '正在刷新健康检查...',
|
||
fix: '修复',
|
||
applyFix: '应用修复',
|
||
healthLabel: '健康',
|
||
},
|
||
updates: {
|
||
actionRequired: '待处理',
|
||
done: '已完成',
|
||
all: '全部',
|
||
inboxTitle: '更新中心',
|
||
inboxSubtitle: '先处理操作,再将更新标记为完成或忽略。',
|
||
needsAction: '需处理',
|
||
doneCount: '已完成',
|
||
searchPlaceholder: '搜索操作或命令',
|
||
noNotices: '当前视图下没有通知。',
|
||
noUpdates: '暂无更新。',
|
||
published: '发布于 {{date}}',
|
||
markDone: '标记完成',
|
||
dismiss: '忽略',
|
||
reopen: '重新打开',
|
||
doNext: '下一步',
|
||
impactedIntegrations: '受影响的集成',
|
||
impactedDesc: '根据更新范围与路由匹配的相关区域。',
|
||
whyMatters: '为什么重要',
|
||
whyMattersDesc: '仅保留简要背景,不展示冗长发布说明。',
|
||
open: '打开',
|
||
progressNeedsAction: '需处理',
|
||
progressInReview: '审阅中',
|
||
progressDone: '已完成',
|
||
progressDismissed: '已忽略',
|
||
statusNew: '新',
|
||
statusStable: '稳定',
|
||
statusPlanned: '计划中',
|
||
dashboard: 'Dashboard',
|
||
cliUsage: 'CLI 用法',
|
||
},
|
||
cliproxyPage: {
|
||
connected: '已连接',
|
||
notConnected: '未连接',
|
||
variant: '变体',
|
||
parentNotConnected: '上游未连接',
|
||
viaProvider: '通过 {{provider}}',
|
||
emptyTitle: 'CCS 配置管理',
|
||
emptyDesc: '管理 CLIProxy 提供商的 OAuth 认证、账号偏好与模型选择,配置 CCS 的请求路由。',
|
||
emptyControlPanelPrefix: '如需查看实时用量和监控,请前往',
|
||
controlPanel: '控制面板',
|
||
quickSetup: '快速设置',
|
||
accountManagement: 'CCS 级账号管理',
|
||
providers: '提供商',
|
||
variants: '变体',
|
||
providerCount: '{{count}} 个提供商',
|
||
providerCount_other: '{{count}} 个提供商',
|
||
connectedCount: '{{count}} 个已连接',
|
||
variantDisplay: '{{name}}({{provider}} 变体)',
|
||
},
|
||
copilotPage: {
|
||
title: 'Copilot',
|
||
subtitle: 'GitHub Copilot 代理',
|
||
setup: '安装',
|
||
auth: '认证',
|
||
daemon: '守护进程',
|
||
unofficialTitle: '非官方 API - 风险自负',
|
||
unofficialItem1: '逆向接口,可能随时失效',
|
||
unofficialItem2: '过度使用可能触发账号限制',
|
||
unofficialItem3: 'CCS 不提供担保,也不承担责任',
|
||
yes: '是',
|
||
no: '否',
|
||
installed: '已安装',
|
||
missing: '缺失',
|
||
integration: '集成',
|
||
enabled: '已启用',
|
||
disabled: '已禁用',
|
||
github: 'GitHub',
|
||
connected: '已连接',
|
||
notConnected: '未连接',
|
||
authenticate: '去认证',
|
||
authenticating: '认证中...',
|
||
status: '状态',
|
||
running: '运行中',
|
||
stopped: '已停止',
|
||
port: '端口',
|
||
stopping: '停止中...',
|
||
stop: '停止',
|
||
starting: '启动中...',
|
||
start: '启动',
|
||
installing: '安装中...',
|
||
installCopilotApi: '安装 copilot-api',
|
||
proxy: '代理',
|
||
active: '活跃',
|
||
inactive: '未激活',
|
||
},
|
||
cursorPage: {
|
||
title: 'Cursor',
|
||
beta: 'Beta',
|
||
subtitle: 'Cursor 集成专用控制面板',
|
||
unofficialTitle: '非官方 API - 风险自负',
|
||
unofficialItem1: '逆向集成可能随时失效',
|
||
unofficialItem2: '滥用或过量使用可能导致账号受限',
|
||
unofficialItem3: 'CCS 不提供担保,也不承担责任',
|
||
integration: '集成',
|
||
authentication: '认证',
|
||
daemon: '守护进程',
|
||
enabled: '已启用',
|
||
disabled: '已禁用',
|
||
expired: '已过期',
|
||
connected: '已连接',
|
||
notConnected: '未连接',
|
||
running: '运行中',
|
||
stopped: '已停止',
|
||
actions: '操作',
|
||
disableIntegration: '禁用集成',
|
||
enableIntegration: '启用集成',
|
||
autoDetectAuth: '自动检测认证',
|
||
manualAuthImport: '手动导入认证',
|
||
stopDaemon: '停止守护进程',
|
||
startDaemon: '启动守护进程',
|
||
port: '端口',
|
||
configuration: 'Cursor 配置',
|
||
lastModified: '最后修改:',
|
||
neverSaved: '从未保存',
|
||
saving: '保存中...',
|
||
save: '保存',
|
||
modelConfig: '模型配置',
|
||
settings: '设置',
|
||
info: '信息',
|
||
presets: '预设',
|
||
presetsDesc: '应用预设模型映射',
|
||
modelMapping: '模型映射',
|
||
modelMappingDesc: '为不同档位配置使用模型',
|
||
defaultModel: '默认模型',
|
||
defaultModelDesc: '未指定档位时使用。',
|
||
opusModel: 'Opus(最强)',
|
||
opusModelDesc: '复杂推理与最高质量输出。',
|
||
sonnetModel: 'Sonnet(均衡)',
|
||
sonnetModelDesc: '日常编码和通用对话。',
|
||
haikuModel: 'Haiku(快速)',
|
||
haikuModelDesc: '低延迟与轻量请求。',
|
||
runtimeSettings: '运行时设置',
|
||
autoStartDaemon: '自动启动守护进程',
|
||
autoStartDesc: '在使用集成时自动启动 Cursor 守护进程。',
|
||
ghostMode: 'Ghost 模式',
|
||
ghostModeDesc: '请求时附带 x-ghost-mode 以减少遥测。',
|
||
provider: '提供商',
|
||
filePath: '文件路径',
|
||
availableModels: '可用模型',
|
||
loadingModels: '加载模型中...',
|
||
noModels: '暂无模型元数据,请先启动守护进程后刷新。',
|
||
default: '默认',
|
||
rawConfiguration: '原始配置(JSON)',
|
||
manualImportTitle: '手动导入 Cursor 认证',
|
||
manualImportDesc: '若无法自动检测,请提供 Cursor access token 与 machine ID。',
|
||
accessToken: '访问令牌',
|
||
accessTokenPlaceholder: '粘贴 Cursor access token',
|
||
machineId: '机器 ID',
|
||
machineIdPlaceholder: '32 位十六进制(无连字符 UUID)',
|
||
cancel: '取消',
|
||
import: '导入',
|
||
selectModel: '选择模型',
|
||
useDefaultModel: '使用默认模型',
|
||
availableModelCount: '可用模型({{count}})',
|
||
invalidPort: '端口必须是 1 到 65535 之间的整数',
|
||
defaultModelRequired: '默认模型必填',
|
||
savedConfig: 'Cursor 配置与模型映射已保存',
|
||
failedSaveConfig: '保存配置失败',
|
||
modelsLoadingWait: '模型仍在加载中,请稍后再应用预设。',
|
||
noModelsAvailable: '暂无可用模型,请先启动守护进程并刷新。',
|
||
appliedCodexPreset: '已应用 GPT-5.3 Codex 预设',
|
||
appliedClaudePreset: '已应用 Claude 4.6 预设',
|
||
appliedGeminiPreset: '已应用 Gemini 3 预设',
|
||
integrationEnabled: 'Cursor 集成已启用',
|
||
integrationDisabled: 'Cursor 集成已禁用',
|
||
failedUpdateIntegration: '更新集成状态失败',
|
||
credentialsImported: 'Cursor 凭据已导入',
|
||
autoDetectFailed: '自动检测失败',
|
||
manualRequired: 'Token 和 machine ID 为必填项',
|
||
manualImportFailed: '手动导入失败',
|
||
failedStartDaemon: '启动守护进程失败',
|
||
daemonStarted: '守护进程已启动',
|
||
daemonStartedWithPid: '守护进程已启动(PID: {{pid}})',
|
||
failedStopDaemon: '停止守护进程失败',
|
||
daemonStopped: '守护进程已停止',
|
||
rawLoading: '原始设置仍在加载,请稍后重试。',
|
||
invalidJson: 'JSON 无效',
|
||
rawSaved: '原始设置已保存',
|
||
rawChanged: '原始设置已被外部修改,请刷新后重试。',
|
||
failedSaveRaw: '保存原始设置失败',
|
||
savedAll: 'Cursor 配置已保存',
|
||
},
|
||
droidPage: {
|
||
loadingDiagnostics: '加载 Droid 诊断中...',
|
||
failedDiagnostics: '加载 Droid 诊断失败。',
|
||
overview: '概览',
|
||
byok: 'BYOK',
|
||
docs: '文档',
|
||
runtimeInstall: '运行时与安装',
|
||
status: '状态',
|
||
detected: '已检测',
|
||
notFound: '未找到',
|
||
detectionSource: '检测来源',
|
||
binaryPath: '二进制路径',
|
||
installDirectory: '安装目录',
|
||
version: '版本',
|
||
overridePath: '覆盖路径(CCS_DROID_PATH)',
|
||
configFiles: '配置文件',
|
||
path: '路径',
|
||
resolved: '解析结果',
|
||
size: '大小',
|
||
lastModified: '最后修改',
|
||
parseWarning: '解析告警:{{value}}',
|
||
readWarning: '读取告警:{{value}}',
|
||
warnings: '告警',
|
||
byokSummary: 'BYOK 概览',
|
||
activeModelSelector: '当前模型选择器',
|
||
customModels: '自定义模型',
|
||
ccsManaged: 'CCS 管理',
|
||
userManaged: '用户管理',
|
||
malformedEntries: '异常条目',
|
||
providers: '提供商',
|
||
none: '无',
|
||
customModelsTitle: '自定义模型',
|
||
modelName: '名称 / 模型',
|
||
provider: '提供商',
|
||
baseUrl: 'Base URL',
|
||
noCustomModels: '没有自定义模型',
|
||
docsAlignedNotes: '文档对齐说明',
|
||
factoryDocs: 'Factory 文档',
|
||
providerFactCheckDocs: 'Provider 校验文档',
|
||
providerValues: 'Provider 值:{{value}}',
|
||
settingsHierarchy: 'Settings 层级:{{value}}',
|
||
settingsTitle: 'Droid BYOK 设置',
|
||
fixJsonBeforeQuickSettings: '请先修复 JSON 语法,再使用快速设置。',
|
||
fixJsonBeforeReasoning: '请先修复 JSON 语法,再更新 BYOK 推理设置。',
|
||
unableUpdateReasoning: '无法更新所选 BYOK 模型的推理设置。',
|
||
fixJsonBeforeBudget: '请先修复 JSON 语法,再更新思考预算。',
|
||
anthropicOnlyBudget: '思考预算仅适用于 Anthropic BYOK 模型。',
|
||
invalidJson: 'JSON 无效:{{value}}',
|
||
saved: 'Droid 设置已保存',
|
||
changedExternally: 'Droid 设置已被外部修改,请刷新后重试。',
|
||
failedSave: '保存 Droid 设置失败',
|
||
},
|
||
sharedPage: {
|
||
commands: '命令',
|
||
skills: '技能',
|
||
agents: '代理',
|
||
title: '共享数据',
|
||
subtitle: '在 Claude 实例间共享的命令、技能和代理',
|
||
totalShared: '共享总数',
|
||
visible: '可见',
|
||
markdownDetail: 'Markdown 详情视图',
|
||
filterPrefix: '筛选:',
|
||
configurationRequired: '需要配置',
|
||
countsUnavailable: '统计不可用',
|
||
retryCounts: '重试统计',
|
||
filterPlaceholder: '按名称、描述或路径筛选 {{tab}}',
|
||
showing: '显示 {{visible}} / {{total}} 个{{tab}}',
|
||
showingQuery: '(关键字“{{query}}”)',
|
||
refreshing: '(刷新中...)',
|
||
loadingShared: '正在加载共享{{tab}}...',
|
||
failedLoadShared: '加载共享{{tab}}失败',
|
||
retry: '重试',
|
||
noSharedFound: '未找到共享{{tab}}。请运行 `ccs sync` 或在共享目录添加内容。',
|
||
noMatch: '没有匹配“{{query}}”的{{tab}}。',
|
||
selectOne: '选择一个{{tab}}查看完整内容。',
|
||
pathLabel: '路径',
|
||
resolvedSource: '解析后来源',
|
||
loadingMarkdown: '正在加载 Markdown 内容...',
|
||
failedLoadContent: '加载内容失败',
|
||
retryContent: '重试内容加载',
|
||
noMarkdown: '暂无 Markdown 内容。',
|
||
},
|
||
},
|
||
},
|
||
vi: {
|
||
translation: {
|
||
locale: {
|
||
en: 'Tiếng Anh',
|
||
'zh-CN': 'Tiếng Trung giản thể',
|
||
vi: 'Tiếng Việt',
|
||
ja: 'Tiếng Nhật',
|
||
},
|
||
layout: {
|
||
languageSwitcher: 'Ngôn ngữ',
|
||
},
|
||
nav: {
|
||
general: 'Chung',
|
||
home: 'Trang chủ',
|
||
analytics: 'Phân tích',
|
||
identityAccess: 'Nhận dạng & Quyền truy cập',
|
||
apiProfiles: 'Hồ sơ API',
|
||
cliproxyPlus: 'CLIProxy Plus',
|
||
cliproxyOverview: 'Tổng quan',
|
||
controlPanel: 'Bảng điều khiển',
|
||
githubCopilot: 'GitHub Copilot',
|
||
cursorIde: 'Cursor IDE',
|
||
claudeExtension: 'Claude Extension',
|
||
accounts: 'Tài khoản',
|
||
allAccounts: 'Tất cả tài khoản',
|
||
sharedData: 'Dữ liệu dùng chung',
|
||
compatibleClis: 'Tương thích',
|
||
factoryDroid: 'Factory Droid',
|
||
system: 'Hệ thống',
|
||
health: 'Sức khỏe',
|
||
settings: 'Cài đặt',
|
||
openrouterTooltip: 'Nổi bật: OpenRouter + Alibaba Coding Plan + Ollama',
|
||
},
|
||
home: {
|
||
profiles: 'Hồ sơ',
|
||
cliproxy: 'CLIProxy',
|
||
accounts: 'Tài khoản',
|
||
health: 'Sức khỏe',
|
||
configurationRequired: 'Cần cấu hình',
|
||
},
|
||
auth: {
|
||
dashboardTitle: 'Bảng điều khiển CCS',
|
||
loginDescription: 'Nhập thông tin đăng nhập của bạn để truy cập bảng điều khiển',
|
||
username: 'Tên người dùng',
|
||
password: 'Mật khẩu',
|
||
usernamePlaceholder: 'Nhập tên người dùng',
|
||
passwordPlaceholder: 'Nhập mật khẩu',
|
||
signIn: 'Đăng nhập',
|
||
signingIn: 'Đang đăng nhập...',
|
||
loginFailed: 'Đăng nhập không thành công',
|
||
},
|
||
commonToast: {
|
||
apiKeyRequired: 'Cần có khóa API',
|
||
accountAddedPresetFailed: 'Đã thêm tài khoản nhưng không áp dụng được preset mặc định',
|
||
settingsCopied: 'Đã sao chép cài đặt vào bảng nhớ tạm',
|
||
enterPresetName: 'Vui lòng nhập tên preset để lưu',
|
||
codeCopied: 'Đã sao chép mã vào bảng nhớ tạm',
|
||
copyCodeFailed: 'Không sao chép được mã',
|
||
appliedModelAllTiers: 'Đã áp dụng mô hình cho tất cả các tier',
|
||
settingsSaved: 'Đã lưu cài đặt',
|
||
defaultTargetUpdated: 'Đã cập nhật mục tiêu mặc định',
|
||
failedUpdateDefaultTarget:
|
||
'Không cập nhật được mục tiêu mặc định thành {{target}}{{suffix}}',
|
||
},
|
||
profileDialog: {
|
||
editTitle: 'Chỉnh sửa hồ sơ',
|
||
createTitle: 'Tạo hồ sơ API',
|
||
name: 'Tên',
|
||
namePlaceholder: 'my-api',
|
||
baseUrl: 'URL cơ sở',
|
||
baseUrlPlaceholder: 'https://api.example.com',
|
||
apiKey: 'Khóa API',
|
||
defaultModel: 'Mô hình mặc định (ANTHROPIC_MODEL)',
|
||
defaultModelHint: 'Để trống để sử dụng: {{model}}',
|
||
modelMappingTitle: 'Ánh xạ mô hình (Opus/Sonnet/Haiku)',
|
||
modelMappingDesc:
|
||
'Cấu hình ID mô hình riêng cho từng tier. Hữu ích với API proxy định tuyến từng loại mô hình đến backend khác nhau.',
|
||
opusModel: 'Mô hình Opus (ANTHROPIC_DEFAULT_OPUS_MODEL)',
|
||
sonnetModel: 'Mô hình Sonnet (ANTHROPIC_DEFAULT_SONNET_MODEL)',
|
||
haikuModel: 'Mô hình Haiku (ANTHROPIC_DEFAULT_HAIKU_MODEL)',
|
||
cancel: 'Hủy bỏ',
|
||
saving: 'Đang lưu...',
|
||
update: 'Cập nhật',
|
||
create: 'Tạo',
|
||
},
|
||
modelTierMapping: {
|
||
title: 'Ánh xạ tầng mô hình',
|
||
advanced: 'Nâng cao',
|
||
description:
|
||
'Định cấu hình các mô hình khác nhau cho các cấp độ opus/sonnet/haiku của Claude Code.',
|
||
autoSuggest: 'Tự động đề xuất dựa trên {{provider}}',
|
||
opusPlaceholder: 'vd: anthropic/claude-opus-4',
|
||
sonnetPlaceholder: 'ví dụ: anthropic/claude-sonnet-4',
|
||
haikuPlaceholder: 'vd: anthropic/claude-3.5-haiku',
|
||
footer:
|
||
'Các biến này thiết lập ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL, ANTHROPIC_DEFAULT_HAIKU_MODEL.',
|
||
},
|
||
envEditor: {
|
||
sensitive: 'nhạy cảm',
|
||
none: 'Không có biến môi trường nào được cấu hình.',
|
||
noneHint: 'Thêm biến bằng ô nhập bên dưới hoặc chỉnh sửa trực tiếp JSON.',
|
||
addVariable: 'Thêm biến môi trường',
|
||
keyPlaceholder: 'VARIABLE_NAME',
|
||
valuePlaceholder: 'giá trị',
|
||
},
|
||
setupVariant: {
|
||
using: 'Sử dụng:',
|
||
variantNameRequired: 'Tên biến thể *',
|
||
variantNamePlaceholder: 'ví dụ: my-gemini, g3, flash',
|
||
invokeHintPrefix: 'Sử dụng tên này để gọi:',
|
||
model: 'Mô hình',
|
||
modelPlaceholder: 'ví dụ: gemini-2.5-pro, claude-opus-4-5',
|
||
choosePresetInstead: 'Hoặc chọn từ preset có sẵn',
|
||
selectModel: 'Chọn mô hình',
|
||
customModelName: 'Tên mô hình tùy chỉnh...',
|
||
enterAnyModel: 'Nhập bất kỳ tên mô hình nào được CLIProxy hỗ trợ',
|
||
defaultModel: 'Mặc định: {{model}}',
|
||
providerDefault: 'mặc định theo nhà cung cấp',
|
||
back: 'Quay lại',
|
||
skip: 'Bỏ qua',
|
||
creating: 'Đang tạo...',
|
||
createVariant: 'Tạo biến thể',
|
||
skipHint: 'Bỏ qua nếu bạn chỉ muốn thêm tài khoản mà không tạo biến thể',
|
||
},
|
||
customPresetDialog: {
|
||
title: 'Preset tùy chỉnh',
|
||
presetNameOptional: 'Tên preset (tùy chọn)',
|
||
presetNamePlaceholder: 'ví dụ: Preset tùy chỉnh của tôi',
|
||
codexTipPrefix: 'Mẹo Codex: hậu tố',
|
||
codexTipSuffix: 'nỗ lực ghim. Các mô hình không có hậu tố sử dụng cài đặt Tư duy.',
|
||
defaultModel: 'Mô hình mặc định',
|
||
defaultModelDesc: 'Dùng khi không yêu cầu cấp mô hình cụ thể',
|
||
opusModel: 'Opus (Có khả năng nhất)',
|
||
opusModelDesc: 'Đối với các nhiệm vụ lý luận phức tạp',
|
||
sonnetModel: 'Sonnet (Cân bằng)',
|
||
sonnetModelDesc: 'Cân bằng giữa tốc độ và khả năng',
|
||
haikuModel: 'Haiku (Nhanh)',
|
||
haikuModelDesc: 'Phản hồi nhanh cho các tác vụ đơn giản',
|
||
cancel: 'Hủy bỏ',
|
||
savePreset: 'Lưu preset',
|
||
applyPreset: 'Áp dụng cài sẵn',
|
||
},
|
||
componentModelSelector: {
|
||
selectModel: 'Chọn mô hình',
|
||
availableModelsCount: 'Mô hình khả dụng ({{count}})',
|
||
preview: 'Xem trước',
|
||
},
|
||
searchableSelect: {
|
||
searchModels: 'Tìm mô hình...',
|
||
noResults: 'Không tìm thấy kết quả phù hợp.',
|
||
},
|
||
copilotSettings: {
|
||
enableCopilot: 'Bật Copilot',
|
||
enableCopilotDesc: 'Cho phép sử dụng đăng ký GitHub Copilot',
|
||
basicSettings: 'Cài đặt cơ bản',
|
||
accountType: 'Loại tài khoản',
|
||
accountTypeIndividual: 'Cá nhân',
|
||
accountTypeBusiness: 'Business',
|
||
accountTypeEnterprise: 'Enterprise',
|
||
rateLimiting: 'Giới hạn tỷ lệ',
|
||
rateLimitSeconds: 'Giới hạn tốc độ (giây)',
|
||
noLimit: 'Không giới hạn',
|
||
waitOnRateLimit: 'Chờ giới hạn tỷ lệ',
|
||
waitOnRateLimitDesc: 'Chờ thay vì lỗi khi đạt đến giới hạn',
|
||
daemonSettings: 'Cài đặt Daemon',
|
||
autoStartDaemon: 'Daemon tự động khởi động',
|
||
autoStartDaemonDesc: 'Bắt đầu copilot-api khi sử dụng hồ sơ',
|
||
},
|
||
providerModelSelector: {
|
||
selectModel: 'Chọn mô hình',
|
||
noModelsForProvider: 'Không có mô hình nào cho nhà cung cấp này',
|
||
broken: 'BROKEN',
|
||
deprecated: 'DEPRECATED',
|
||
paid: 'PAID',
|
||
freeTier: 'Gói miễn phí',
|
||
paidTier: 'Gói trả phí',
|
||
modelKnownIssues: 'Mô hình này có vấn đề đã biết',
|
||
viewIssueDetails: 'Xem chi tiết vấn đề',
|
||
modelDeprecated: 'Mô hình này không được dùng nữa',
|
||
recommended: 'Đề xuất',
|
||
allModelsCount: 'Tất cả mô hình ({{count}})',
|
||
noModelsAvailable: 'Không có mô hình khả dụng',
|
||
},
|
||
createAuthProfileDialog: {
|
||
title: 'Tạo tài khoản mới',
|
||
description:
|
||
'Hồ sơ xác thực yêu cầu đăng nhập Claude CLI. Chạy lệnh dưới đây trong terminal của bạn. Bạn có thể chỉnh sửa chế độ đồng bộ hóa, nhóm và độ liên tục sau này từ bảng Tài khoản.',
|
||
profileName: 'Tên hồ sơ',
|
||
profileNamePlaceholder: 'ví dụ: công việc, cá nhân, khách hàng',
|
||
invalidProfileName:
|
||
'Tên phải bắt đầu bằng một chữ cái và chỉ chứa các chữ cái, số, dấu gạch ngang hoặc dấu gạch dưới.',
|
||
enableSharedHistory: 'Bật đồng bộ hóa lịch sử chia sẻ với các tài khoản xác thực ccs khác',
|
||
historySyncGroupOptional: 'Nhóm đồng bộ hóa lịch sử (tùy chọn)',
|
||
historySyncGroupPlaceholder: 'default, sprint-a, client-x',
|
||
historySyncGroupHint:
|
||
'Để trống để sử dụng nhóm chia sẻ mặc định. Dấu cách được chuẩn hóa thành dấu gạch ngang.',
|
||
deeperContinuity: 'Nâng cao: chế độ liên tục sâu hơn',
|
||
deeperContinuityHint:
|
||
'Thêm đồng bộ cho session-env, file-history, shell-snapshots và todos. Thông tin xác thực vẫn tách biệt.',
|
||
invalidContextGroup:
|
||
'Nhóm phải bắt đầu bằng một chữ cái và chỉ sử dụng các chữ cái, số, dấu gạch ngang hoặc dấu gạch dưới (tối đa {{max}} ký tự).',
|
||
command: 'Lệnh',
|
||
commandFallback: 'ccs auth create <name>',
|
||
afterRunPrefix: 'Sau khi chạy lệnh:',
|
||
afterRunStep1: 'Hoàn tất đăng nhập Claude trong trình duyệt của bạn',
|
||
afterRunStep2: 'Quay lại đây và làm mới để xem tài khoản mới',
|
||
poolingHint:
|
||
'Muốn dùng định tuyến Claude OAuth dạng pool? Dùng CLIProxy Claude pool từ nút hành động ở trang Tài khoản.',
|
||
close: 'Đóng',
|
||
copied: 'Đã sao chép!',
|
||
copyCommand: 'Sao chép lệnh',
|
||
},
|
||
cliproxyModelCategory: {
|
||
google: 'Google (Gemini)',
|
||
openai: 'OpenAI (GPT)',
|
||
anthropic: 'Anthropic (Claude)',
|
||
antigravity: 'Antigravity',
|
||
other: 'Khác',
|
||
},
|
||
cliproxyOverviewComponents: {
|
||
availableModels: 'Mô hình khả dụng',
|
||
noModelsAvailable: 'Không có mô hình khả dụng',
|
||
startSessionHint: 'Bắt đầu phiên CLIProxy để tải danh sách mô hình khả dụng',
|
||
totalCount: 'tổng cộng {{count}}',
|
||
availableThroughGroupedByProvider:
|
||
'Các mô hình khả dụng qua {{backendLabel}}, được nhóm theo nhà cung cấp',
|
||
moreCount: '+{{count}} thêm',
|
||
},
|
||
categorizedModelSelector: {
|
||
selectModel: 'Chọn mô hình',
|
||
noModelsAvailable: 'Không có mô hình khả dụng',
|
||
modelPlaceholder: 'Mô hình...',
|
||
},
|
||
openrouterQuickStart: {
|
||
recommended: 'Đề xuất',
|
||
title: 'Bắt đầu với OpenRouter',
|
||
description:
|
||
'Truy cập các mô hình {{modelCountLabel}} từ OpenAI, Anthropic, Google, Meta, v.v. - tất cả đều thông qua một API.',
|
||
featureOneApi: 'Một API cho mọi nhà cung cấp',
|
||
featureTierMapping: 'Ánh xạ tầng mô hình',
|
||
profileCount: '{{count}} hồ sơ',
|
||
profileCount_other: '{{count}} hồ sơ',
|
||
selectProfileTitle: 'Chọn một hồ sơ API',
|
||
summaryDescriptionWithProfiles:
|
||
'Bạn đã có {{count}} hồ sơ trong workspace này. Chọn một hồ sơ ở thanh bên trái để chỉnh sửa, hoặc tạo thêm hồ sơ mới tại đây.',
|
||
summaryDescriptionWithProfiles_other:
|
||
'Bạn đã có {{count}} hồ sơ trong workspace này. Chọn một hồ sơ ở thanh bên trái để chỉnh sửa, hoặc tạo thêm hồ sơ mới tại đây.',
|
||
summaryDescriptionNoProfiles:
|
||
'Dùng API Profiles cho các endpoint tương thích Anthropic. Dùng AI Providers cho Gemini, Codex, Claude, Vertex và các connector tương thích OpenAI.',
|
||
openrouterModelsBadge: '{{modelCountLabel}} mô hình OpenRouter',
|
||
runtimeProviderBadge: 'Thiết lập nhà cung cấp runtime',
|
||
runtimeProviderTitle: 'Mở AI Providers',
|
||
runtimeProviderDescription:
|
||
'Quản lý khóa nhà cung cấp dùng chung và các connector runtime trước khi tạo API Profiles độc lập.',
|
||
runtimeProviderFeatureConnectors:
|
||
'Gemini, Codex, Claude, Vertex và các connector tương thích OpenAI',
|
||
runtimeProviderFeatureSecrets: 'Khóa dùng chung tách biệt khỏi từng API Profile',
|
||
runtimeProviderFooter:
|
||
'Phù hợp nhất khi nhiều hồ sơ cần dùng chung một cấu hình nhà cung cấp.',
|
||
createOpenRouterProfile: 'Tạo hồ sơ OpenRouter',
|
||
getApiKeyAt: 'Nhận khóa API của bạn tại',
|
||
or: 'hoặc',
|
||
createCustomProfile: 'Tạo hồ sơ API tùy chỉnh',
|
||
},
|
||
alibabaCodingPlanQuickStart: {
|
||
recommended: 'Đề xuất',
|
||
title: 'Dùng thử Alibaba Coding Plan',
|
||
description:
|
||
'Sử dụng Alibaba Cloud Coding Plan qua endpoint tương thích Anthropic cho tác vụ lập trình.',
|
||
featureEndpoint: 'Endpoint tương thích Anthropic',
|
||
featureKeyFormat: 'Khóa API sk-sp chuyên dụng',
|
||
createAlibabaProfile: 'Tạo hồ sơ Alibaba Coding Plan',
|
||
readGuideAt: 'Xem hướng dẫn tại',
|
||
},
|
||
alibabaCodingPlanPromo: {
|
||
title: 'Alibaba Coding Plan',
|
||
subtitle: 'Model Studio Coding Plan qua endpoint Anthropic',
|
||
add: 'Thêm',
|
||
},
|
||
credentialHealth: {
|
||
title: 'Tình trạng thông tin xác thực',
|
||
ready: 'Sẵn sàng',
|
||
noCredentialsConfigured:
|
||
'Không có thông tin xác thực nào được định cấu hình. Sử dụng các nút đăng nhập ở trên để xác thực.',
|
||
neverUsed: 'Chưa bao giờ sử dụng',
|
||
justNow: 'Vừa rồi',
|
||
unknown: 'Không xác định',
|
||
daysAgo: '{{count}} ngày trước',
|
||
hoursAgo: '{{count}} giờ trước',
|
||
minutesAgo: '{{count}} phút trước',
|
||
},
|
||
proxyStatusWidget: {
|
||
justNow: 'vừa xong',
|
||
minutesAgo: '{{count}} phút trước',
|
||
hoursAgo: '{{count}} giờ trước',
|
||
syncReady: 'Sẵn sàng đồng bộ hóa',
|
||
noConfig: 'Không có cấu hình',
|
||
remoteProxy: 'Proxy từ xa',
|
||
active: 'Đang hoạt động',
|
||
trafficAutoRouted: 'Lưu lượng truy cập tự động được định tuyến đến máy chủ từ xa',
|
||
tooltipSync: 'Đồng bộ hóa hồ sơ với CLIProxy',
|
||
tooltipRestart: 'Khởi động lại',
|
||
tooltipStop: 'Dừng lại',
|
||
tooltipClose: 'Đóng',
|
||
tooltipVersionSettings: 'Cài đặt phiên bản',
|
||
versionManagement: 'Quản lý phiên bản',
|
||
selectVersionPlaceholder: 'Chọn phiên bản để cài đặt...',
|
||
stable: '(ổn định)',
|
||
install: 'Cài đặt',
|
||
versionsAboveUnstable: 'Các phiên bản trên {{version}} có vấn đề đã biết',
|
||
versionsKnownIssues: 'Phiên bản {{version}} có vấn đề đã biết',
|
||
lastChecked: 'Đã kiểm tra lần cuối {{time}}',
|
||
notRunning: 'Không chạy',
|
||
start: 'Bắt đầu',
|
||
port: 'Cổng {{port}}',
|
||
sessionCount: '{{count}} phiên',
|
||
sessionCount_other: '{{count}} phiên',
|
||
installFaultyTitle: 'Cài đặt phiên bản có lỗi đã biết?',
|
||
installFaultyDesc:
|
||
'Bạn sắp cài đặt <strong>v{{version}}</strong>, phiên bản này nằm trong dải lỗi đã biết <strong>{{range}}</strong>.',
|
||
installFaultyWarning:
|
||
'Phiên bản này có lỗi đã biết và có thể cài đặt thất bại hoặc làm proxy ở trạng thái xấu.',
|
||
installUnstableTitle: 'Cài đặt phiên bản không ổn định?',
|
||
installUnstableDesc:
|
||
'Bạn sắp cài đặt <strong>v{{version}}</strong>, phiên bản này cao hơn phiên bản ổn định tối đa <strong>v{{maxStable}}</strong>.',
|
||
installUnstableWarning:
|
||
'Phiên bản này đã biết có vấn đề về độ ổn định và có thể gây ra hành vi không mong muốn.',
|
||
installUnstableConfirm: 'Bạn có chắc chắn muốn tiếp tục không?',
|
||
cancel: 'Hủy bỏ',
|
||
installAnyway: 'Vẫn cài đặt',
|
||
clickToDowngrade: 'Bấm để hạ cấp',
|
||
clickToUpdate: 'Bấm để cập nhật',
|
||
},
|
||
syncStatusCard: {
|
||
profileSync: 'Đồng bộ hồ sơ',
|
||
ready: 'Sẵn sàng',
|
||
noConfig: 'Không có cấu hình',
|
||
syncsProfilesDesc: 'Đồng bộ hóa cấu hình API với cấu hình CLIProxy cục bộ',
|
||
runDoctorHint: 'Chạy <code>ccs doctor --fix</code> để tạo cấu hình.',
|
||
details: 'Chi tiết',
|
||
syncNow: 'Đồng bộ ngay',
|
||
},
|
||
syncDialog: {
|
||
title: 'Đồng bộ hóa hồ sơ với CLIProxy cục bộ',
|
||
description: 'Đồng bộ hóa cấu hình API CCS của bạn với CLIProxy config.yaml cục bộ.',
|
||
noProfiles: 'Không có profile nào để đồng bộ.',
|
||
createProfilesFirst: 'Trước tiên hãy tạo hồ sơ API bằng tab Hồ sơ.',
|
||
modelLabel: 'Mô hình:',
|
||
ready: 'Sẵn sàng',
|
||
profilesToSync_one: '{{count}} hồ sơ để đồng bộ hóa',
|
||
profilesToSync_other: '{{count}} hồ sơ cần đồng bộ hóa',
|
||
cancel: 'Hủy bỏ',
|
||
syncing: 'Đang đồng bộ hóa...',
|
||
synced: 'Đã đồng bộ hóa!',
|
||
syncNow: 'Đồng bộ ngay',
|
||
},
|
||
errorLogs: {
|
||
title: 'Nhật ký lỗi',
|
||
failedRequests_one: '{{count}} yêu cầu thất bại',
|
||
failedRequests_other: '{{count}} yêu cầu thất bại',
|
||
cliproxyDiagnostics: 'Chẩn đoán CLIProxy',
|
||
showingCount: 'Hiển thị 50 trong số {{total}} nhật ký',
|
||
selectLog: 'Chọn nhật ký để xem chi tiết',
|
||
failedLoadContent: 'Không tải được nội dung nhật ký',
|
||
copyAbsolutePath: 'Sao chép đường dẫn tuyệt đối',
|
||
copyRawContent: 'Sao chép nội dung nhật ký thô',
|
||
tabOverview: 'Tổng quan',
|
||
tabHeaders: 'Tiêu đề',
|
||
tabRequest: 'Yêu cầu',
|
||
tabResponse: 'Phản hồi',
|
||
tabRaw: 'Raw',
|
||
modelLabel: 'Mô hình:',
|
||
quotaResetsIn: 'Quota sẽ được đặt lại sau',
|
||
method: 'Phương thức',
|
||
provider: 'Nhà cung cấp',
|
||
version: 'Phiên bản',
|
||
endpoint: 'Điểm cuối',
|
||
url: 'URL',
|
||
timestamp: 'Dấu thời gian',
|
||
na: 'không áp dụng',
|
||
noHeaders: 'Không có tiêu đề nào',
|
||
noRequestBody: 'Không có nội dung yêu cầu',
|
||
noResponseBody: 'Không có nội dung phản hồi',
|
||
rateLimitedMsg:
|
||
'Bị giới hạn tốc độ. Hãy chuyển sang tài khoản khác hoặc chờ reset hạn ngạch. Mô hình {{model}} đã hết quota.',
|
||
rateLimitedMsgNoModel:
|
||
'Bị giới hạn tốc độ. Hãy chuyển sang tài khoản khác hoặc chờ reset hạn ngạch.',
|
||
authFailedMsg:
|
||
'Xác thực không thành công. Xác thực lại thông qua Cài đặt CLIProxy hoặc kiểm tra khóa API.',
|
||
notFoundMsg:
|
||
'Không tìm thấy điểm cuối. Điểm cuối này có thể không tồn tại trên nhà cung cấp này.',
|
||
serverErrorMsg:
|
||
'Lỗi máy chủ từ upstream. Hãy thử lại sau hoặc kiểm tra trang trạng thái của nhà cung cấp.',
|
||
timeoutMsg: 'Yêu cầu hết thời gian chờ. Kiểm tra kết nối mạng hoặc tăng timeout.',
|
||
unknown: 'không rõ',
|
||
},
|
||
editAccountContext: {
|
||
title: 'Chỉnh sửa đồng bộ hóa lịch sử',
|
||
description:
|
||
'Định cấu hình cách "{{name}}" chia sẻ lịch sử và tính liên tục với các tài khoản xác thực ccs khác.',
|
||
syncMode: 'Chế độ đồng bộ',
|
||
selectContextMode: 'Chọn chế độ ngữ cảnh',
|
||
isolatedOption: 'tách biệt (không đồng bộ)',
|
||
sharedOption: 'chia sẻ (đã bật đồng bộ)',
|
||
sharedModeHint:
|
||
'Chế độ chia sẻ sử dụng lại ngữ cảnh không gian làm việc cho các tài khoản trong cùng một nhóm đồng bộ lịch sử.',
|
||
isolatedModeHint:
|
||
'Chế độ biệt lập giúp tài khoản này tách biệt hoàn toàn với các tài khoản xác thực ccs khác.',
|
||
historySyncGroup: 'Nhóm đồng bộ hóa lịch sử',
|
||
groupPlaceholder: 'mặc định',
|
||
groupHint:
|
||
'Chuẩn hóa thành chữ thường (dấu cách trở thành dấu gạch ngang). Được phép: chữ cái, số, _ , - (tối đa {{max}} ký tự).',
|
||
invalidGroup: 'Nhập tên nhóm hợp lệ bắt đầu bằng một chữ cái.',
|
||
continuityDepth: 'Độ sâu liên tục',
|
||
selectContinuityDepth: 'Chọn độ sâu liên tục',
|
||
standardOption: 'tiêu chuẩn (chỉ đồng bộ project)',
|
||
deeperOption: 'tính liên tục sâu hơn (nâng cao)',
|
||
deeperHint:
|
||
'Chế độ nâng cao cũng đồng bộ hóa phiên-env, lịch sử tệp, ảnh chụp nhanh shell và todos.',
|
||
standardHint: 'Chế độ tiêu chuẩn chỉ đồng bộ hóa bối cảnh không gian làm việc của dự án.',
|
||
credentialsIsolated:
|
||
'Thông tin xác thực và .anthropic vẫn được tách riêng cho mỗi tài khoản ở tất cả các chế độ.',
|
||
implicationTitle: 'Sau khi lưu sẽ như thế nào',
|
||
isolatedImplication:
|
||
'Tài khoản này sẽ tiếp tục tách biệt. Tài khoản khác sẽ không thể resume trạng thái continuity của nó.',
|
||
sameGroupRule:
|
||
'Các tài khoản phải dùng cùng nhóm "{{group}}" thì mới chia sẻ continuity cho nhau.',
|
||
noSameGroupPeer: 'Hiện chưa có tài khoản nào khác dùng nhóm này.',
|
||
sameGroupPeerCount_one: '{{count}} tài khoản khác đã dùng nhóm này.',
|
||
sameGroupPeerCount_other: '{{count}} tài khoản khác đã dùng nhóm này.',
|
||
deeperReady_one:
|
||
'{{count}} tài khoản cùng nhóm đã bật deeper continuity. Đây là thiết lập handoff mạnh nhất hiện có.',
|
||
deeperReady_other:
|
||
'{{count}} tài khoản cùng nhóm đã bật deeper continuity. Đây là thiết lập handoff mạnh nhất hiện có.',
|
||
deeperNeedsPeers:
|
||
'Tài khoản này đã bật deeper continuity, nhưng tài khoản khác trong cùng nhóm vẫn cần bật deeper continuity để hỗ trợ resume xuyên tài khoản tốt hơn.',
|
||
standardWarning:
|
||
'Chế độ shared tiêu chuẩn chỉ phù hợp cho ngữ cảnh project. Nếu người dùng mong resume xuyên tài khoản, cả hai tài khoản nên bật deeper continuity.',
|
||
resumeOriginalWarning:
|
||
'Nếu cuộc trò chuyện cũ quan trọng, hãy resume nó từ tài khoản gốc trước khi đổi cấu hình.',
|
||
cancel: 'Hủy bỏ',
|
||
save: 'Lưu',
|
||
saving: 'Đang lưu...',
|
||
},
|
||
historySyncLearningMap: {
|
||
title: 'Cách đồng bộ hóa lịch sử hoạt động',
|
||
description:
|
||
'Tách biệt -> Chia sẻ -> Sâu hơn. Dùng Sync trên từng dòng để áp dụng thay đổi.',
|
||
learningMap: 'Bản đồ học tập',
|
||
isolated: 'Tách biệt',
|
||
shared: 'Chia sẻ',
|
||
deeper: 'Sâu hơn',
|
||
cliproxyManaged_one:
|
||
'{{count}} Tài khoản nhóm CLIProxy Claude được quản lý trong trang Action Center / CLIProxy.',
|
||
cliproxyManaged_other:
|
||
'{{count}} Tài khoản CLIProxy Claude pool được quản lý trong trang Action Center / CLIProxy.',
|
||
showDetails: 'Hiển thị chi tiết: nhóm, chuyển đổi và chính sách kế thừa',
|
||
modeSwitch: 'Chuyển đổi chế độ',
|
||
modeSwitchDesc:
|
||
'Hộp thoại đồng bộ hóa cho phép người dùng di chuyển giữa cách ly/chia sẻ và chọn tính liên tục sâu hơn.',
|
||
historySyncGroup: 'Nhóm đồng bộ hóa lịch sử',
|
||
historySyncGroupDesc:
|
||
'Cùng một nhóm nghĩa là chia sẻ cùng bối cảnh project. Nếu để trống sẽ dùng nhóm mặc định.',
|
||
sameGroupRule:
|
||
'Hiện tại, các tài khoản chỉ chia sẻ continuity khi cả hai đều ở chế độ shared và dùng cùng một nhóm.',
|
||
deeperRecommendation:
|
||
'Nhóm "{{group}}" đã được chia sẻ, nhưng deeper continuity vẫn là lựa chọn an toàn hơn nếu người dùng mong resume xuyên tài khoản.',
|
||
partialGroup:
|
||
'Nhóm "{{group}}" đã ổn, nhưng các tài khoản hoặc nhóm khác vẫn cần hoàn thiện cấu hình cùng nhóm hoặc deeper continuity.',
|
||
readyGroup:
|
||
'Nhóm "{{group}}" đã có nhiều tài khoản bật deeper continuity. Đây là thiết lập handoff mạnh nhất hiện có.',
|
||
legacyConfirmation_one: '{{count}} tài khoản cũ vẫn cần xác nhận rõ ràng.',
|
||
legacyConfirmation_other: '{{count}} tài khoản cũ vẫn cần xác nhận rõ ràng.',
|
||
},
|
||
continuityReadiness: {
|
||
title: 'Kiểm tra resume xuyên tài khoản',
|
||
description: 'Dùng thẻ này để biết còn thiếu gì trước khi người dùng chuyển tài khoản.',
|
||
state: {
|
||
single: 'một tài khoản',
|
||
isolated: 'resume tắt',
|
||
'shared-alone': 'đã shared nhưng chưa đủ',
|
||
'shared-standard': 'chỉ project',
|
||
partial: 'mới sẵn sàng một phần',
|
||
ready: 'handoff mạnh đã sẵn sàng',
|
||
},
|
||
metrics: {
|
||
isolated: 'Tách biệt',
|
||
sharedPeers: 'Có bạn cùng nhóm',
|
||
deeperReady: 'Deeper sẵn sàng',
|
||
},
|
||
messages: {
|
||
single: {
|
||
title: 'Hiện chỉ có một auth account.',
|
||
description:
|
||
'Cross-account handoff chưa áp dụng. Hãy thêm một auth account khác trước khi cấu hình shared continuity.',
|
||
},
|
||
isolated: {
|
||
title: 'Hiện tại cross-account resume đang tắt.',
|
||
description:
|
||
'Tất cả tài khoản đang hiển thị đều ở chế độ isolated, nên phiên được tạo trong một tài khoản sẽ ở lại tài khoản đó.',
|
||
},
|
||
'shared-alone': {
|
||
title: 'Đã có shared mode, nhưng chưa có nhóm nào có bạn cùng nhóm.',
|
||
description_one:
|
||
'{{count}} shared account vẫn đang chờ một tài khoản khác vào cùng nhóm.',
|
||
description_other:
|
||
'{{count}} shared accounts vẫn đang chờ một tài khoản khác vào cùng nhóm.',
|
||
},
|
||
'shared-standard': {
|
||
title:
|
||
'Nhóm "{{group}}" đang chia sẻ ngữ cảnh project nhưng chưa ghép deeper continuity.',
|
||
description:
|
||
'Người dùng có thể mong nhiều hơn việc chia sẻ project. Hãy bật deeper continuity trên cả hai tài khoản trong nhóm này để có handoff mạnh hơn.',
|
||
},
|
||
partial: {
|
||
title: 'Một nhóm đã sẵn sàng, nhưng cấu hình tổng thể vẫn còn lẫn lộn.',
|
||
description:
|
||
'Ít nhất một nhóm đã dùng deeper continuity, nhưng các tài khoản khác vẫn còn isolated, ở một mình trong nhóm shared, hoặc chưa bật deeper continuity.',
|
||
},
|
||
ready: {
|
||
title: 'Nhóm "{{group}}" đã có thiết lập continuity mạnh nhất hiện có.',
|
||
description:
|
||
'Nhiều tài khoản trong nhóm này đã bật deeper continuity. Việc resume thực tế vẫn phụ thuộc vào dữ liệu mà Claude lưu ở upstream.',
|
||
},
|
||
},
|
||
stepsTitle: 'Người dùng nên làm gì tiếp theo',
|
||
steps: {
|
||
syncBoth: 'Mở Sync trên cả hai tài khoản, không chỉ tài khoản bạn sắp chuyển sang.',
|
||
sameGroup:
|
||
'Dùng cùng một History Sync Group trên cả hai tài khoản. "{{group}}" là nhóm được đề xuất hiện tại.',
|
||
enableDeeper:
|
||
'Nếu người dùng mong resume xuyên tài khoản thay vì chỉ chia sẻ project, hãy bật deeper continuity trên cả hai tài khoản.',
|
||
resumeOriginal:
|
||
'Nếu cuộc trò chuyện gốc quan trọng, hãy resume nó từ tài khoản gốc trước khi đổi cài đặt continuity.',
|
||
},
|
||
singleSteps: {
|
||
addAccount:
|
||
'Hãy tạo thêm một ccs auth account thứ hai trước khi lên kế hoạch handoff xuyên tài khoản.',
|
||
sameGroupLater:
|
||
'Khi tài khoản thứ hai đã sẵn sàng, đặt cả hai vào cùng một History Sync Group.',
|
||
enableDeeperLater:
|
||
'Nếu sau này người dùng sẽ mong resume xuyên tài khoản, hãy bật deeper continuity trên cả hai tài khoản.',
|
||
resumeOriginal:
|
||
'Cho đến khi tài khoản thứ hai sẵn sàng, các cuộc trò chuyện quan trọng vẫn nên được resume từ tài khoản gốc.',
|
||
},
|
||
},
|
||
continuityOverview: {
|
||
plainLaneTitle: 'Plain ccs đang dùng một lane resume khác',
|
||
plainLaneDescription:
|
||
'Plain ccs hiện resume từ {{lane}}, không phải lane của tài khoản này. Hãy khôi phục lane gốc trước khi đổi cài đặt sync.',
|
||
setDefaultHint:
|
||
'Nếu muốn plain ccs theo một tài khoản trong các phiên sau, hãy dùng hành động Set Default trên dòng tài khoản đó.',
|
||
recommendBadge: 'Đề xuất {{group}}',
|
||
partialBadge: 'Đồng bộ một phần {{group}}',
|
||
lane: {
|
||
native: 'Claude gốc (~/.claude)',
|
||
accountDefault: 'tài khoản {{name}}',
|
||
accountInherited: 'tài khoản {{name}} qua continuity inheritance',
|
||
profileDefault: 'profile mặc định {{name}} qua lane Claude gốc',
|
||
},
|
||
},
|
||
accountsTable: {
|
||
name: 'Tên',
|
||
type: 'Kiểu',
|
||
defaultBadge: 'mặc định',
|
||
created: 'Ngày tạo',
|
||
lastUsed: 'Được sử dụng lần cuối',
|
||
historySync: 'Đồng bộ hóa lịch sử',
|
||
actions: 'Hành động',
|
||
syncTitle: 'Chỉnh sửa chế độ đồng bộ, nhóm và độ sâu liên tục',
|
||
confirmLegacyTitle: 'Xác nhận chế độ hiện tại của tài khoản cũ này là rõ ràng',
|
||
sync: 'Đồng bộ hóa',
|
||
confirm: 'Xác nhận',
|
||
active: 'Đang hoạt động',
|
||
setDefault: 'Đặt mặc định',
|
||
deleteAccount: 'Xóa tài khoản',
|
||
cannotDeleteDefault: 'Không thể xóa tài khoản mặc định',
|
||
noAccounts:
|
||
'Không tìm thấy tài khoản xác thực CCS nào. Sử dụng ccs auth create để thêm tài khoản.',
|
||
resetToDefault: 'Đặt lại về mặc định CCS',
|
||
deleteDialogTitle: 'Xóa tài khoản',
|
||
deleteDialogDesc:
|
||
'Bạn có chắc chắn muốn xóa tài khoản "{{name}}" không? Thao tác này sẽ xóa hồ sơ và tất cả dữ liệu phiên của nó. Không thể hoàn tác hành động này.',
|
||
cancel: 'Hủy bỏ',
|
||
delete: 'Xóa',
|
||
sharedGroupStandard: 'chia sẻ ({{group}}, tiêu chuẩn)',
|
||
sharedGroupDeeper: 'chia sẻ ({{group}}, sâu hơn)',
|
||
sharedGroupLegacy: 'chia sẻ ({{group}}, kế thừa tiêu chuẩn)',
|
||
isolatedLegacy: 'tách biệt (mặc định cũ)',
|
||
isolated: 'tách biệt',
|
||
noSameGroupPeer: 'Chưa có tài khoản cùng nhóm',
|
||
sameGroupPeerCount_one: '{{count}} tài khoản cùng nhóm',
|
||
sameGroupPeerCount_other: '{{count}} tài khoản cùng nhóm',
|
||
legacyReview: 'Hãy xem lại và xác nhận trạng thái suy ra này.',
|
||
noHandoff: 'Resume xuyên tài khoản vẫn sẽ quay về tài khoản gốc.',
|
||
badges: {
|
||
shared: 'Chia sẻ',
|
||
deeper: 'Sâu hơn',
|
||
legacy: 'Kế thừa',
|
||
isolated: 'Tách biệt',
|
||
},
|
||
},
|
||
addAccountDialog: {
|
||
title: 'Thêm tài khoản {{displayName}}',
|
||
descKiro:
|
||
'Chọn phương thức xác thực Kiro, sau đó xác thực qua trình duyệt hoặc nhập từ Kiro IDE.',
|
||
descDeviceCode:
|
||
'Nhấp vào Xác thực. Mã xác minh sẽ xuất hiện để bạn nhập vào trang web của nhà cung cấp.',
|
||
descOauth:
|
||
'Nhấp vào Xác thực để nhận URL OAuth. Mở nó trong bất kỳ trình duyệt nào để đăng nhập.',
|
||
powerUserEnabled: 'Đã bật chế độ power user',
|
||
powerUserSkipped:
|
||
'Chế độ power user trong Cài đặt > Proxy đang bỏ qua danh sách kiểm tra trách nhiệm AGY và bước nhập cụm từ rủi ro của Gemini trên dashboard. Bạn tự chịu hoàn toàn rủi ro OAuth/tài khoản.',
|
||
powerUserLoadFailed:
|
||
'Không thể tải cài đặt chế độ power user. Hãy kiểm tra Cài đặt > Proxy rồi thử lại.',
|
||
powerUserLoading:
|
||
'Đang tải cài đặt an toàn cho chế độ power user. Vui lòng đợi một chút rồi thử lại.',
|
||
powerUserUnavailableRetry:
|
||
'Chế độ power user hiện không khả dụng. Hãy hoàn tất bước an toàn bắt buộc của nhà cung cấp rồi thử lại.',
|
||
authMethod: 'Phương thức xác thực',
|
||
selectKiroAuthMethod: 'Chọn phương thức xác thực Kiro',
|
||
nicknameRequired: 'Biệt danh (bắt buộc)',
|
||
nicknameOptional: 'Biệt danh (tùy chọn)',
|
||
nicknamePlaceholder: 'ví dụ: công việc, cá nhân',
|
||
nicknameRequiredHint:
|
||
'Bắt buộc với nhà cung cấp này. Dùng tên thân thiện duy nhất (ví dụ: work, personal).',
|
||
nicknameOptionalHint:
|
||
'Tên thân thiện để nhận biết tài khoản này. Để trống để dùng mã nhận dạng an toàn do hệ thống tạo.',
|
||
waitingForAuth: 'Đang chờ xác thực...',
|
||
deviceCodeHint:
|
||
'Hộp thoại mã xác minh sẽ sớm xuất hiện. Nhập mã trên trang web của nhà cung cấp.',
|
||
browserHint:
|
||
'Hoàn tất xác thực trong trình duyệt của bạn. Hộp thoại này sẽ tự động đóng lại.',
|
||
openUrlLabel: 'Mở URL này trong bất kỳ trình duyệt nào để đăng nhập:',
|
||
copied: 'Đã sao chép',
|
||
copy: 'Sao chép',
|
||
open: 'Mở',
|
||
popupBlocked:
|
||
'Cửa sổ bật lên bị chặn. Sao chép URL ở trên và mở thủ công trong trình duyệt của bạn.',
|
||
redirectPasteLabel: 'Chuyển hướng không hoạt động? Dán URL gọi lại:',
|
||
callbackPlaceholder: 'Dán URL chuyển hướng vào đây...',
|
||
submitCallback: 'Gửi cuộc gọi lại',
|
||
submitting: 'Đang gửi...',
|
||
preparingUrl: 'Đang chuẩn bị URL đăng nhập...',
|
||
cancel: 'Hủy bỏ',
|
||
importingToken: 'Đang nhập token từ Kiro IDE...',
|
||
authenticate: 'Xác thực',
|
||
importFromIde: 'Nhập từ IDE',
|
||
importing: 'Đang nhập...',
|
||
},
|
||
flowViz: {
|
||
backToProviders: 'Quay lại nhà cung cấp',
|
||
showDetails: 'Hiển thị chi tiết',
|
||
hideDetails: 'Ẩn chi tiết',
|
||
resetLayout: 'Đặt lại bố cục',
|
||
provider: 'Nhà cung cấp',
|
||
totalRequests: 'Tổng số yêu cầu',
|
||
accounts: 'Tài khoản',
|
||
connectionTimeline: 'Dòng thời gian kết nối',
|
||
noRecentConnections: 'Không có kết nối gần đây',
|
||
},
|
||
quickStats: {
|
||
totalRequests: 'Tổng số yêu cầu',
|
||
successRate: 'Tỷ lệ thành công',
|
||
totalTokens: 'Tổng số token',
|
||
activeModels: 'Mô hình hoạt động',
|
||
},
|
||
authMonitor: {
|
||
accounts: 'Tài khoản',
|
||
accountsCount: '{{count}} tài khoản',
|
||
success: 'Thành công',
|
||
failed: 'Thất bại',
|
||
successRate: 'Tỷ lệ thành công',
|
||
},
|
||
accountCard: {
|
||
resumeAccount: 'Tiếp tục tài khoản',
|
||
pauseAccount: 'Tạm dừng tài khoản',
|
||
quotaLoading: 'Hạn ngạch...',
|
||
quota: 'hạn ngạch',
|
||
quotaUnavailable: 'Thông tin quota chưa khả dụng',
|
||
reauthNeeded: 'Cần xác thực lại',
|
||
failureLabelReauth: 'Xác thực lại',
|
||
failureLabelWorkspace: 'Workspace',
|
||
failureLabelNoAccess: 'Không có quyền',
|
||
failureLabelRetry: 'Thử lại',
|
||
failureLabelReconnect: 'Kết nối lại',
|
||
failureLabelTemporary: 'Tạm thời',
|
||
failureLabelUnavailable: 'Chưa khả dụng',
|
||
failureHintReauth: 'Chạy lại luồng xác thực của tài khoản này để làm mới quyền truy cập.',
|
||
failureHintWorkspace:
|
||
'Chuyển tài khoản này về workspace còn hoạt động rồi xóa và thêm lại.',
|
||
failureHintNoAccess: 'Tài khoản này không thể truy cập endpoint quota của nhà cung cấp.',
|
||
failureHintRetry: 'Đợi một chút rồi thử lại yêu cầu quota.',
|
||
failureHintReconnect: 'Xóa tài khoản cũ rồi xác thực lại.',
|
||
failureHintTemporary: 'Có vẻ đây là lỗi tạm thời. Hãy thử lại sau.',
|
||
removeAndReadd: 'Xóa và thêm lại tài khoản',
|
||
autoRefreshFailed: 'Tự động làm mới không thành công',
|
||
},
|
||
antigravityChecklist: {
|
||
title: 'Trách nhiệm OAuth Antigravity',
|
||
subtitle: 'Hoàn thành tất cả 4 bước trước khi bạn có thể xác thực.',
|
||
mandatory: 'Bắt buộc',
|
||
completion: 'Hoàn thành',
|
||
stepsCount: '{{current}}/4 bước',
|
||
},
|
||
accountSafetyWarning: {
|
||
title: 'Cảnh báo an toàn tài khoản OAuth',
|
||
subtitle: 'Vấn đề #509 · Rủi ro Gemini + AGY OAuth',
|
||
firstLine:
|
||
'Issue #509 ghi nhận các trường hợp bị đình chỉ/cấm liên quan đến ccs agy và việc dùng chung tài khoản giữa ccs gemini và ccs agy.',
|
||
secondLine:
|
||
'Chỉ tiếp tục nếu bạn chấp nhận hoàn toàn trách nhiệm về OAuth và rủi ro truy cập tài khoản.',
|
||
issueLabel: 'Đọc vấn đề #509',
|
||
proxySettingsLabel: 'Điều khiển Gemini + AGY: Cài đặt > Proxy',
|
||
},
|
||
cliproxyDialog: {
|
||
name: 'Tên',
|
||
provider: 'Nhà cung cấp',
|
||
account: 'Tài khoản',
|
||
accountOptional: 'Tài khoản (tùy chọn)',
|
||
model: 'Mô hình',
|
||
modelOptional: 'Mô hình (tùy chọn)',
|
||
defaultTarget: 'Mục tiêu mặc định',
|
||
defaultTier: 'Cấp mặc định',
|
||
tierConfig: 'Cấu hình cấp độ',
|
||
selectProvider: 'Chọn nhà cung cấp...',
|
||
useDefaultAccount: 'Sử dụng tài khoản mặc định',
|
||
defaultSuffix: '(mặc định)',
|
||
opus: 'Opus',
|
||
sonnet: 'Sonnet',
|
||
haiku: 'Haiku',
|
||
claudeCode: 'Claude Code',
|
||
factoryDroid: 'Factory Droid',
|
||
cancel: 'Hủy bỏ',
|
||
create: 'Tạo',
|
||
creating: 'Đang tạo...',
|
||
saveChanges: 'Lưu thay đổi',
|
||
saving: 'Đang lưu...',
|
||
placeholderName: 'Gemini của tôi',
|
||
placeholderModel: 'gemini-2.5-pro',
|
||
placeholderComposite: 'my-composite',
|
||
placeholderModelId: 'model-id',
|
||
placeholderAccountId: 'account-id',
|
||
editCompositeTitle: 'Chỉnh sửa biến thể tổng hợp: {{name}}',
|
||
editSingleTitle: 'Chỉnh sửa biến thể: {{name}}',
|
||
},
|
||
profileEditor: {
|
||
profileInfo: 'Thông tin hồ sơ',
|
||
profileName: 'Tên hồ sơ',
|
||
filePath: 'Đường dẫn tệp',
|
||
lastModified: 'Sửa đổi lần cuối',
|
||
defaultTarget: 'Mục tiêu mặc định',
|
||
quickUsage: 'Sử dụng nhanh',
|
||
runWithProfile: 'Chạy với hồ sơ',
|
||
runOnDroid: 'Chạy trên Droid',
|
||
runOnDroidWithFlag: 'Chạy trên Droid (--target)',
|
||
droidAliasExplicit: 'Bí danh Droid (rõ ràng)',
|
||
overrideToClaude: 'Ghi đè lên Claude',
|
||
overrideToClaudeExplicit: 'Ghi đè lên Claude (rõ ràng)',
|
||
targetHintPreferredAlias: 'Bí danh rõ ràng nên dùng:',
|
||
targetHintClaudeDefault: 'Lệnh mặc định:',
|
||
targetHintLegacyAlias: 'Lối tắt cũ vẫn dùng được:',
|
||
targetHintOverride: 'Bạn vẫn có thể ghi đè mỗi lần chạy bằng',
|
||
setAsDefault: 'Đặt làm mặc định',
|
||
provider: 'Nhà cung cấp',
|
||
custom: 'Tùy chỉnh',
|
||
providerChooserHint:
|
||
'Bắt đầu với preset, sau đó bạn vẫn có thể chỉnh URL, API key và ánh xạ mô hình.',
|
||
featuredProviders: 'Nhà cung cấp nổi bật',
|
||
scrollHint: 'Có thể cuộn ngang trên màn hình hẹp',
|
||
customEndpoint: 'Endpoint tùy chỉnh',
|
||
morePresets: 'Thêm preset',
|
||
customEndpointDescription:
|
||
'Bắt đầu với URL tương thích Anthropic trống và tự cấu hình mọi thứ.',
|
||
},
|
||
settings: {
|
||
sectionLoadFailed: 'Không tải được phần',
|
||
unknownError: 'Đã xảy ra lỗi không xác định',
|
||
reloadPage: 'Tải lại trang',
|
||
refresh: 'Làm mới',
|
||
copy: 'Sao chép',
|
||
copied: 'Đã sao chép',
|
||
saved: 'Đã lưu',
|
||
loading: 'Đang tải...',
|
||
configFileNotFound: 'Không tìm thấy tập tin cấu hình',
|
||
},
|
||
settingsTabs: {
|
||
web: 'Web',
|
||
env: 'Env',
|
||
think: 'Tư duy',
|
||
proxy: 'Proxy',
|
||
auth: 'Xác thực',
|
||
backup: 'Sao lưu',
|
||
},
|
||
settingsAuth: {
|
||
failedFetchTokens: 'Không thể tải token xác thực',
|
||
failedSaveTokens: 'Không thể lưu token',
|
||
tokensUpdated: 'Đã cập nhật token. Khởi động lại CLIProxy để áp dụng.',
|
||
failedRegenerate: 'Không thể tạo lại bí mật',
|
||
secretRegenerated: 'Bí mật quản lý mới được tạo. Khởi động lại CLIProxy để áp dụng.',
|
||
failedReset: 'Không thể đặt lại token',
|
||
tokensReset: 'Token đã được đặt lại về mặc định. Khởi động lại CLIProxy để áp dụng.',
|
||
description:
|
||
'Cấu hình token xác thực CLIProxy. Các thay đổi yêu cầu khởi động lại CLIProxy.',
|
||
apiKey: 'Khóa API',
|
||
custom: 'Tùy chỉnh',
|
||
apiKeyDesc: 'Được Claude Code dùng để xác thực qua CLIProxy',
|
||
apiKeyPlaceholder: 'Khóa API',
|
||
managementSecret: 'Bí mật quản lý',
|
||
managementSecretDesc: 'Được bảng điều khiển CCS sử dụng để truy cập API quản lý CLIProxy',
|
||
managementSecretPlaceholder: 'Bí mật quản lý',
|
||
generateSecret: 'Tạo bí mật an toàn mới',
|
||
resetDefaults: 'Đặt lại về mặc định',
|
||
resetDesc: 'Đặt lại cả khóa API và bí mật quản lý về giá trị mặc định.',
|
||
saving: 'Đang lưu...',
|
||
save: 'Lưu',
|
||
},
|
||
settingsGlobalEnv: {
|
||
description:
|
||
'Biến môi trường được áp dụng cho tất cả hồ sơ không dùng Claude subscription (gemini, codex, agy, ghcp, v.v.)',
|
||
enabled: 'Đã bật Env toàn cầu',
|
||
disabled: 'Env toàn cầu bị vô hiệu hóa',
|
||
enabledDesc: 'Biến Env sẽ được áp dụng cho các hồ sơ bên thứ ba',
|
||
disabledDesc: 'Biến Env sẽ không được áp dụng',
|
||
envVars: 'Biến môi trường',
|
||
noneConfigured: 'Không có biến môi trường nào được cấu hình',
|
||
addNew: 'Thêm biến mới',
|
||
keyName: 'KEY_NAME',
|
||
value: 'giá trị',
|
||
add: 'Thêm',
|
||
quickAdd: 'Thêm nhanh các biến phổ biến',
|
||
allConfigured: 'Tất cả biến phổ biến đã được cấu hình',
|
||
},
|
||
settingsBackups: {
|
||
failedFetch: 'Không tìm nạp được bản sao lưu',
|
||
failedRestore: 'Không thể khôi phục bản sao lưu',
|
||
restoreSuccess: 'Đã khôi phục bản sao lưu thành công',
|
||
title: 'Sao lưu cài đặt',
|
||
description:
|
||
'Khôi phục các phiên bản trước của tệp settings.json của bạn. Bản sao lưu được tạo tự động khi cài đặt được sửa đổi.',
|
||
none: 'Không có bản sao lưu nào',
|
||
noneHint: 'Bản sao lưu sẽ xuất hiện ở đây khi bạn sửa đổi cài đặt',
|
||
latest: 'Mới nhất',
|
||
restoring: 'Đang khôi phục...',
|
||
restore: 'Khôi phục',
|
||
restoreConfirmTitle: 'Khôi phục bản sao lưu?',
|
||
restoreConfirmPrefix: 'Điều này sẽ thay thế cài đặt hiện tại của bạn bằng bản sao lưu từ',
|
||
restoreConfirmSuffix: 'Không thể hoàn tác hành động này.',
|
||
cancel: 'Hủy bỏ',
|
||
},
|
||
settingsWebsearch: {
|
||
description:
|
||
'Tìm kiếm trên web dựa trên CLI cho hồ sơ của bên thứ ba (gemini, codex, agy, v.v.)',
|
||
enabled: 'Đã bật Tìm kiếm trên web',
|
||
disabled: 'Tìm kiếm trên web bị vô hiệu hóa',
|
||
checking: 'Đang kiểm tra trạng thái...',
|
||
providers: 'Nhà cung cấp',
|
||
noneConfigured: 'Không có nhà cung cấp nào được cấu hình',
|
||
noneConfiguredHint: 'Cài công cụ CLI để bật các nhà cung cấp WebSearch',
|
||
checkProviders: 'Kiểm tra các nhà cung cấp',
|
||
installed: 'đã cài đặt',
|
||
notInstalled: 'chưa được cài đặt',
|
||
model: 'Mô hình:',
|
||
howInstall: 'Cách cài đặt {{name}} CLI',
|
||
installGlobally: 'Cài đặt trên toàn cầu',
|
||
requiresKey: '(cần khóa API xAI)',
|
||
freeTier: '(Có sẵn cấp MIỄN PHÍ)',
|
||
viewDocs: 'Xem tài liệu',
|
||
},
|
||
settingsProxy: {
|
||
failedLoadAgyMode: 'Không thể tải chế độ power user',
|
||
failedUpdateAgyMode: 'Không thể cập nhật chế độ power user',
|
||
failedVerifyAgyMode: 'Không thể xác minh trạng thái lưu của chế độ power user',
|
||
notPersistedAgyMode:
|
||
'Chế độ power user chưa được lưu bền vững. Cấu hình có thể đã bị tiến trình khác sửa.',
|
||
agyModeEnabled: 'Đã bật chế độ power user.',
|
||
agyModeDisabled: 'Đã tắt chế độ power user.',
|
||
typePhraseToContinue: 'Nhập "{{value}}" để tiếp tục.',
|
||
description:
|
||
'Định cấu hình kết nối {{backend}} cục bộ hoặc từ xa cho cấu hình dựa trên proxy',
|
||
backendPlus: 'CLIProxy Plus',
|
||
backend: 'CLIProxy',
|
||
instanceStatus: 'Trạng thái phiên bản',
|
||
connectionMode: 'Chế độ kết nối',
|
||
local: 'Cục bộ',
|
||
remote: 'Từ xa',
|
||
localDesc: 'Chạy nhị phân {{backend}} trên máy này',
|
||
remoteDesc: 'Kết nối với máy chủ {{backend}} từ xa',
|
||
backendBinary: 'Tệp thực thi backend',
|
||
stopProxyToSwitch:
|
||
'Dừng proxy đang chạy trong Trạng thái phiên bản trước khi chuyển backend.',
|
||
default: 'Mặc định',
|
||
plusDesc: 'Hỗ trợ đầy đủ nhà cung cấp, bao gồm Kiro và GitHub Copilot',
|
||
originalDesc: 'Binary gốc (chỉ Gemini, Codex, Antigravity)',
|
||
variantsIncompatible:
|
||
'Các biến thể Kiro/Copilot hiện tại sẽ không hoạt động với CLIProxyAPI. Chuyển sang CLIProxyAPIPlus hoặc xóa các biến thể đó.',
|
||
safety: 'An toàn',
|
||
agyModeTitle: 'Chế độ power user Antigravity + Gemini',
|
||
agyModeDesc:
|
||
'Bỏ qua danh sách kiểm tra trách nhiệm AGY và bước nhập cụm từ xác nhận của Gemini trên dashboard.',
|
||
agyWarning:
|
||
'Chỉ bật nếu bạn hiểu rõ rủi ro bị đình chỉ/cấm OAuth (#509). CCS không chịu trách nhiệm khi mất tài khoản.',
|
||
finalConfirm: 'Xác nhận cuối cùng',
|
||
finalConfirmDesc:
|
||
'Việc bật tính năng này sẽ bỏ qua các điểm kiểm tra an toàn AGY và bước nhập cụm từ rủi ro của Gemini trên dashboard. Xem lại vấn đề #509 và nhập cụm từ chính xác để tiếp tục.',
|
||
step1: 'Bước 1',
|
||
readIssue: 'Đọc vấn đề #509',
|
||
step2: 'Bước 2',
|
||
typePrefix: 'Nhập',
|
||
typeSuffix: 'để kích hoạt.',
|
||
typePhraseAria: 'Nhập I ACCEPT RISK để bật chế độ power user Antigravity + Gemini',
|
||
exactPhrase: 'Phải nhập chính xác cụm từ.',
|
||
enableAgyMode: 'Bật chế độ power user Antigravity + Gemini',
|
||
toggleAgyMode: 'Chuyển đổi chế độ power user Antigravity + Gemini',
|
||
fallbackSettings: 'Cài đặt dự phòng',
|
||
enableFallback: 'Cho phép dự phòng về cục bộ',
|
||
enableFallbackDesc: 'Sử dụng proxy cục bộ nếu không thể truy cập được từ xa',
|
||
autoStartLocal: 'Tự động khởi động proxy cục bộ',
|
||
autoStartLocalDesc: 'Tự động khởi động proxy cục bộ khi dự phòng',
|
||
advanced: 'Nâng cao',
|
||
debugMode: 'Chế độ gỡ lỗi',
|
||
debugModeDesc: 'Bật chẩn đoán dành cho nhà phát triển trong bảng điều khiển trình duyệt',
|
||
debugModeEnabled:
|
||
'Đã bật chế độ gỡ lỗi. Kiểm tra bảng điều khiển trình duyệt để biết nhật ký chi tiết.',
|
||
localProxy: 'Proxy cục bộ',
|
||
port: 'Cổng',
|
||
autoStart: 'Tự động khởi động',
|
||
localAutoStartDesc: 'Tự động khởi động proxy cục bộ khi cần',
|
||
remoteConfigTitle: 'Cấu hình máy chủ từ xa',
|
||
host: 'Host',
|
||
hostPlaceholder: '192.168.1.100 hoặc proxy.example.com',
|
||
defaultPort: 'mặc định {{value}}',
|
||
portPlaceholder: 'Để trống để dùng {{value}}',
|
||
protocol: 'Giao thức',
|
||
http: 'HTTP',
|
||
https: 'HTTPS',
|
||
apiKeyOptional: 'Khóa API (tùy chọn)',
|
||
apiKeyPlaceholder: 'Đối với điểm cuối API /v1/*',
|
||
apiKeyDesc: 'Dùng cho các yêu cầu API đến /v1/chat/completions',
|
||
managementKeyOptional: 'Khóa quản lý (tùy chọn)',
|
||
managementKeyPlaceholder: 'Đối với điểm cuối /v0/management/*',
|
||
managementKeyDesc: 'Dùng cho API quản lý dashboard. Nếu bỏ trống sẽ dùng Khóa API.',
|
||
testing: 'Đang thử nghiệm...',
|
||
testConnection: 'Kiểm tra kết nối',
|
||
connectedLatency: 'Đã kết nối ({{value}}ms)',
|
||
connectionFailed: 'Kết nối không thành công',
|
||
invalidPortOrEmpty: 'Cổng phải là số nguyên từ 1 đến 65535 hoặc để trống theo mặc định',
|
||
invalidLocalPort: 'Cổng cục bộ phải là số nguyên từ 1 đến 65535',
|
||
backendPlusApi: 'CLIProxyAPIPlus',
|
||
backendApi: 'CLIProxyAPI',
|
||
},
|
||
settingsThinking: {
|
||
description: 'Định cấu hình tư duy/lý luận mở rộng cho các mô hình được hỗ trợ.',
|
||
supportedProviders: 'Nhà cung cấp được hỗ trợ',
|
||
modeTitle: 'Chế độ Thinking',
|
||
modeAutoDesc: 'Tự động thiết lập tư duy dựa trên tầng mô hình',
|
||
modeOffDesc: 'Vô hiệu hóa suy nghĩ mở rộng',
|
||
modeManualDesc: 'Đặt mức ghi đè liên tục hoặc sử dụng cờ CLI mỗi lần chạy',
|
||
tierDefaults: 'Mặc định cấp độ',
|
||
tierDefaultsDesc: 'Mức độ tư duy mặc định cho từng tầng mô hình khi ở chế độ tự động.',
|
||
persistentOverride: 'Ghi đè liên tục',
|
||
persistentOverrideDesc: 'Áp dụng cho tất cả các buổi. Cờ CLI vẫn được ưu tiên.',
|
||
enterCustomBudget: 'Nhập ngân sách tùy chỉnh',
|
||
apply: 'Áp dụng',
|
||
providerOverrides: 'Ghi đè nhà cung cấp ({{count}})',
|
||
providerOverridesDesc:
|
||
'Ghi đè mặc định cấp độ cho các nhà cung cấp cụ thể. Thêm khóa nhà cung cấp tùy chỉnh nếu cần.',
|
||
addProviderPlaceholder: 'Thêm khóa nhà cung cấp (ví dụ: qwen)',
|
||
showWarnings: 'Hiển thị cảnh báo',
|
||
showWarningsDesc: 'Hiển thị cảnh báo khi các giá trị suy nghĩ bị hạn chế hoặc điều chỉnh',
|
||
cliEnvOverride: 'Ghi đè CLI & Env',
|
||
supportLine1Prefix: 'Ngân sách suy nghĩ:',
|
||
supportLine1Suffix: '(dựa trên token)',
|
||
supportLine2Prefix: 'Nỗ lực lý luận:',
|
||
supportLine2SuffixPrefix: '(hậu tố hoặc ',
|
||
supportLine2SuffixPostfix: ': minimal/low/medium/high/xhigh)',
|
||
supportLine3Prefix: 'Hậu tố Codex cố định mức effort (ví dụ ',
|
||
supportLine3Suffix: '); model không hậu tố sẽ dùng chế độ Thinking.',
|
||
},
|
||
analytics: {
|
||
title: 'Phân tích',
|
||
subtitle: 'Theo dõi việc sử dụng và thông tin chi tiết',
|
||
month: 'Tháng',
|
||
allTime: 'Tất cả thời gian',
|
||
updated: 'Đã cập nhật {{value}}',
|
||
},
|
||
analyticsSummary: {
|
||
totalTokens: 'Tổng số token',
|
||
totalTokensSubtitle: '{{input}} vào / {{output}} ra',
|
||
totalCost: 'Tổng chi phí',
|
||
totalCostSubtitle: 'trung bình ${{value}}/ngày',
|
||
cacheTokens: 'Token bộ đệm',
|
||
cacheTokensSubtitle: '${{cost}} ({{percent}}% chi phí)',
|
||
inputCost: 'Chi phí đầu vào',
|
||
outputCost: 'Chi phí đầu ra',
|
||
tokensSubtitle: '{{value}} token',
|
||
},
|
||
apiProfiles: {
|
||
title: 'Hồ sơ API',
|
||
new: 'Mới',
|
||
searchPlaceholder: 'Tìm kiếm hồ sơ...',
|
||
loadingProfiles: 'Đang tải hồ sơ...',
|
||
failedLoadTitle: 'Không tải được hồ sơ',
|
||
failedLoadDesc: 'Không thể tìm nạp hồ sơ API. Vui lòng thử lại.',
|
||
retry: 'Thử lại',
|
||
noProfilesYet: 'Chưa có hồ sơ API nào',
|
||
noProfilesDesc: 'Tạo hồ sơ đầu tiên của bạn để kết nối với các điểm cuối API tùy chỉnh',
|
||
createProfile: 'Tạo hồ sơ',
|
||
noProfileMatch: 'Không có hồ sơ nào khớp với "{{query}}"',
|
||
profileCount: '{{count}} hồ sơ',
|
||
profileCount_other: '{{count}} hồ sơ',
|
||
configuredCount: '{{count}} đã cấu hình',
|
||
deleteProfileTitle: 'Xóa hồ sơ',
|
||
deleteProfileDesc:
|
||
'Bạn có chắc chắn muốn xóa "{{name}}" không? Thao tác này sẽ xóa tệp cài đặt và không thể hoàn tác.',
|
||
delete: 'Xóa',
|
||
unsavedChangesTitle: 'Những thay đổi chưa được lưu',
|
||
unsavedChangesDesc:
|
||
'Bạn có những thay đổi chưa được lưu trong "{{current}}". Hủy và chuyển sang "{{next}}"?',
|
||
discardSwitch: 'Loại bỏ và chuyển đổi',
|
||
},
|
||
accountsPage: {
|
||
title: 'Tài khoản',
|
||
managePrefix: 'Quản lý',
|
||
manageSuffix: 'tài khoản và nhóm đồng bộ từ một nơi.',
|
||
mobileManageSuffix: 'tính liên tục cho mỗi tài khoản.',
|
||
primaryActions: 'Hành động chính',
|
||
createAccount: 'Tạo tài khoản',
|
||
authClaudeInPool: 'Xác thực Claude trong Pool',
|
||
openClaudePoolSettings: 'Mở cài đặt Claude pool',
|
||
openCliProxyClaudePool: 'Mở CLIProxy Claude Pool',
|
||
migrationFollowup: 'Theo dõi sau di chuyển',
|
||
legacyContextPending: '{{count}} tài khoản vẫn cần xác nhận chế độ lần đầu.',
|
||
legacyContextPending_other: '{{count}} tài khoản vẫn cần xác nhận chế độ lần đầu.',
|
||
legacyContinuityPending:
|
||
'{{count}} tài khoản được chia sẻ vẫn ở mức độ liên tục kế thừa tiêu chuẩn.',
|
||
legacyContinuityPending_other:
|
||
'{{count}} tài khoản được chia sẻ vẫn ở mức độ liên tục kế thừa tiêu chuẩn.',
|
||
confirmingLegacy: 'Đang xác nhận chính sách kế thừa...',
|
||
confirmLegacy: 'Xác nhận chính sách kế thừa ({{count}})',
|
||
noLegacyFollowup: 'Không có hoạt động theo dõi kế thừa nào đang chờ xử lý.',
|
||
continuityGuide: 'Hướng dẫn liên tục',
|
||
expandWhenNeeded: 'Chỉ mở rộng khi cần thiết.',
|
||
sharedStandard: 'Tiêu chuẩn chung',
|
||
sharedStandardDesc:
|
||
'Chỉ đồng bộ hóa không gian làm việc của dự án. Mặc định tốt nhất cho hầu hết các đội.',
|
||
sharedDeeper: 'Chia sẻ sâu hơn',
|
||
sharedDeeperDesc:
|
||
'Đồng bộ thêm session-env, file-history, shell-snapshots và todos. Nên dùng khi người dùng mong resume xuyên tài khoản.',
|
||
sharedDeeperPrefix: 'Thêm',
|
||
isolated: 'Tách biệt',
|
||
isolatedDesc: 'Không có liên kết. Tốt nhất cho sự tách biệt nghiêm ngặt.',
|
||
quickCommands: 'Lệnh nhanh',
|
||
quickCommandsDesc: 'Sao chép và chạy trong terminal.',
|
||
workspaceBadge: 'Không gian làm việc `ccs auth`',
|
||
historySyncBadge: 'Kiểm soát đồng bộ hóa lịch sử',
|
||
authAccounts: 'Tài khoản xác thực',
|
||
tableScopePrefix: 'Bảng này được cố ý đặt trong phạm vi',
|
||
tableScopeMiddle: 'tài khoản. Sử dụng',
|
||
tableScopeSuffix: 'để thay đổi chế độ/nhóm/độ sâu.',
|
||
accountMatrix: 'Ma trận tài khoản',
|
||
sharedTotalDesc:
|
||
'Tổng số tài khoản chia sẻ: {{count}}. Bao gồm thao tác Sync và xác nhận kế thừa.',
|
||
loadingAccounts: 'Đang tải tài khoản...',
|
||
},
|
||
health: {
|
||
justNow: 'vừa xong',
|
||
secondsAgo: '{{count}} giây trước',
|
||
minutesAgo: '{{count}} phút trước',
|
||
hoursAgo: '{{count}} giờ trước',
|
||
systemHealth: 'Tình trạng hệ thống',
|
||
build: 'bản dựng {{version}}',
|
||
lastScan: 'Lần quét cuối cùng:',
|
||
autoRefresh: 'Tự động làm mới:',
|
||
refresh: 'Làm mới',
|
||
checks: 'Kiểm tra',
|
||
version: 'Phiên bản',
|
||
platform: 'Nền tảng',
|
||
liveMonitoring: 'Giám sát trực tiếp đang hoạt động',
|
||
copied: 'Đã sao chép vào bảng nhớ tạm',
|
||
refreshing: 'Đang làm mới kiểm tra trạng thái...',
|
||
fix: 'Sửa chữa',
|
||
applyFix: 'Áp dụng bản sửa lỗi',
|
||
healthLabel: 'trạng thái',
|
||
},
|
||
updates: {
|
||
actionRequired: 'Hành động bắt buộc',
|
||
done: 'Xong',
|
||
all: 'Tất cả',
|
||
inboxTitle: 'Trung tâm cập nhật',
|
||
inboxSubtitle:
|
||
'Tập trung vào các hành động, sau đó đánh dấu các cập nhật đã hoàn tất hoặc bị loại bỏ.',
|
||
needsAction: 'Cần hành động',
|
||
doneCount: 'Xong',
|
||
searchPlaceholder: 'Tìm kiếm hành động hoặc lệnh',
|
||
noNotices: 'Không có thông báo nào khớp với chế độ xem này.',
|
||
noUpdates: 'Hiện không có bản cập nhật nào.',
|
||
published: 'Đã xuất bản {{date}}',
|
||
markDone: 'Đánh dấu hoàn tất',
|
||
dismiss: 'Ẩn',
|
||
reopen: 'Mở lại',
|
||
doNext: 'Làm tiếp theo',
|
||
impactedIntegrations: 'Tích hợp bị ảnh hưởng',
|
||
impactedDesc: 'Các khu vực liên quan dựa trên phạm vi cập nhật và định tuyến.',
|
||
whyMatters: 'Tại sao nó quan trọng',
|
||
whyMattersDesc: 'Chỉ ngữ cảnh ngắn, không có ghi chú phát hành trên tường văn bản.',
|
||
open: 'Mở',
|
||
progressNeedsAction: 'Cần hành động',
|
||
progressInReview: 'Đang xem xét',
|
||
progressDone: 'Xong',
|
||
progressDismissed: 'Bị loại bỏ',
|
||
statusNew: 'Mới',
|
||
statusStable: 'Ổn định',
|
||
statusPlanned: 'Đã lên kế hoạch',
|
||
dashboard: 'Trang tổng quan',
|
||
cliUsage: 'Cách sử dụng CLI',
|
||
},
|
||
cliproxyPage: {
|
||
connected: 'Đã kết nối',
|
||
notConnected: 'Chưa kết nối',
|
||
variant: 'Biến thể',
|
||
parentNotConnected: 'Profile gốc chưa kết nối',
|
||
viaProvider: 'qua {{provider}}',
|
||
emptyTitle: 'Trình quản lý hồ sơ CCS',
|
||
emptyDesc:
|
||
'Quản lý xác thực OAuth, tùy chọn tài khoản và chọn mô hình cho nhà cung cấp CLIProxy. Cấu hình cách CCS định tuyến yêu cầu đến các backend AI khác nhau.',
|
||
emptyControlPanelPrefix:
|
||
'Để biết số liệu thống kê sử dụng trực tiếp và theo dõi thời gian thực, hãy truy cập',
|
||
controlPanel: 'Bảng điều khiển',
|
||
quickSetup: 'Thiết lập nhanh',
|
||
accountManagement: 'Quản lý tài khoản cấp CCS',
|
||
providers: 'Nhà cung cấp',
|
||
variants: 'Biến thể',
|
||
providerCount: '{{count}} nhà cung cấp',
|
||
providerCount_other: '{{count}} nhà cung cấp',
|
||
connectedCount: '{{count}} đã kết nối',
|
||
variantDisplay: '{{name}} (biến thể {{provider}})',
|
||
},
|
||
copilotPage: {
|
||
title: 'Copilot',
|
||
subtitle: 'Proxy GitHub Copilot',
|
||
setup: 'Cài đặt',
|
||
auth: 'Xác thực',
|
||
daemon: 'Daemon',
|
||
unofficialTitle: 'API không chính thức - Bạn phải tự chịu rủi ro khi sử dụng',
|
||
unofficialItem1: 'API được thiết kế ngược - có thể bị hỏng bất cứ lúc nào',
|
||
unofficialItem2: 'Việc sử dụng quá mức có thể gây ra hạn chế tài khoản',
|
||
unofficialItem3: 'Không bảo hành, không chịu trách nhiệm từ CCS',
|
||
yes: 'Có',
|
||
no: 'Không',
|
||
installed: 'Đã cài đặt',
|
||
missing: 'Thiếu',
|
||
integration: 'Tích hợp',
|
||
enabled: 'Đã bật',
|
||
disabled: 'Đã tắt',
|
||
github: 'GitHub',
|
||
connected: 'Đã kết nối',
|
||
notConnected: 'Chưa kết nối',
|
||
authenticate: 'Xác thực',
|
||
authenticating: 'Đang xác thực...',
|
||
status: 'Trạng thái',
|
||
running: 'Đang chạy',
|
||
stopped: 'Đã dừng',
|
||
port: 'Cổng',
|
||
stopping: 'Đang dừng...',
|
||
stop: 'Dừng lại',
|
||
starting: 'Đang bắt đầu...',
|
||
start: 'Bắt đầu',
|
||
installing: 'Đang cài đặt...',
|
||
installCopilotApi: 'Cài đặt copilot-api',
|
||
proxy: 'Proxy',
|
||
active: 'Đang hoạt động',
|
||
inactive: 'Không hoạt động',
|
||
},
|
||
cursorPage: {
|
||
title: 'Cursor',
|
||
beta: 'Beta',
|
||
subtitle: 'Bảng điều khiển tích hợp Cursor',
|
||
unofficialTitle: 'API không chính thức - Bạn phải tự chịu rủi ro khi sử dụng',
|
||
unofficialItem1: 'Tích hợp thiết kế ngược có thể bị hỏng bất cứ lúc nào',
|
||
unofficialItem2: 'Lạm dụng hoặc sử dụng quá mức có thể có nguy cơ bị hạn chế tài khoản',
|
||
unofficialItem3: 'Không bảo hành, không chịu trách nhiệm từ CCS',
|
||
integration: 'Tích hợp',
|
||
authentication: 'Xác thực',
|
||
daemon: 'Daemon',
|
||
enabled: 'Đã bật',
|
||
disabled: 'Đã tắt',
|
||
expired: 'Hết hạn',
|
||
connected: 'Đã kết nối',
|
||
notConnected: 'Chưa kết nối',
|
||
running: 'Đang chạy',
|
||
stopped: 'Đã dừng',
|
||
actions: 'Hành động',
|
||
disableIntegration: 'Vô hiệu hóa tích hợp',
|
||
enableIntegration: 'Kích hoạt tích hợp',
|
||
autoDetectAuth: 'Tự động phát hiện xác thực',
|
||
manualAuthImport: 'Nhập xác thực thủ công',
|
||
stopDaemon: 'Dừng Daemon',
|
||
startDaemon: 'Khởi động Daemon',
|
||
port: 'Cổng',
|
||
configuration: 'Cấu hình Cursor',
|
||
lastModified: 'Sửa đổi lần cuối:',
|
||
neverSaved: 'Chưa bao giờ lưu',
|
||
saving: 'Đang lưu...',
|
||
save: 'Lưu',
|
||
modelConfig: 'Cấu hình mô hình',
|
||
settings: 'Cài đặt',
|
||
info: 'Thông tin',
|
||
presets: 'Cài đặt sẵn',
|
||
presetsDesc: 'Áp dụng ánh xạ mô hình được cấu hình sẵn',
|
||
modelMapping: 'Ánh xạ mô hình',
|
||
modelMappingDesc: 'Định cấu hình mô hình nào sẽ sử dụng cho từng tầng',
|
||
defaultModel: 'Mô hình mặc định',
|
||
defaultModelDesc: 'Dùng khi không chỉ định tier cụ thể.',
|
||
opusModel: 'Opus (Có khả năng nhất)',
|
||
opusModelDesc: 'Lý luận phức tạp và phản hồi chất lượng cao nhất.',
|
||
sonnetModel: 'Sonnet (Cân bằng)',
|
||
sonnetModelDesc: 'Khối lượng công việc mã hóa chung và trò chuyện hàng ngày.',
|
||
haikuModel: 'Haiku (Nhanh)',
|
||
haikuModelDesc: 'Đường dẫn yêu cầu nhẹ, độ trễ thấp.',
|
||
runtimeSettings: 'Cài đặt thời gian chạy',
|
||
autoStartDaemon: 'Daemon tự động khởi động',
|
||
autoStartDesc: 'Tự động khởi động daemon Cursor khi dùng tích hợp.',
|
||
ghostMode: 'Chế độ ma',
|
||
ghostModeDesc: 'Gửi x-ghost-mode để giảm telemetry.',
|
||
provider: 'Nhà cung cấp',
|
||
filePath: 'Đường dẫn tệp',
|
||
availableModels: 'Mô hình khả dụng',
|
||
loadingModels: 'Đang tải mô hình...',
|
||
noModels: 'Chưa có siêu dữ liệu mô hình nào. Bắt đầu daemon và làm mới.',
|
||
default: 'Mặc định',
|
||
rawConfiguration: 'Cấu hình thô (JSON)',
|
||
manualImportTitle: 'Nhập xác thực Cursor thủ công',
|
||
manualImportDesc:
|
||
'Cung cấp access token và machine ID của Cursor nếu không tự phát hiện được.',
|
||
accessToken: 'Access token',
|
||
accessTokenPlaceholder: 'Dán access token của Cursor',
|
||
machineId: 'ID máy',
|
||
machineIdPlaceholder: 'Hex 32 ký tự (UUID không có dấu gạch nối)',
|
||
cancel: 'Hủy bỏ',
|
||
import: 'Nhập',
|
||
selectModel: 'Chọn mô hình',
|
||
useDefaultModel: 'Sử dụng mô hình mặc định',
|
||
availableModelCount: 'Mô hình khả dụng ({{count}})',
|
||
invalidPort: 'Cổng phải là số nguyên từ 1 đến 65535',
|
||
defaultModelRequired: 'Mô hình mặc định là bắt buộc',
|
||
savedConfig: 'Đã lưu cấu hình Cursor và ánh xạ mô hình',
|
||
failedSaveConfig: 'Không lưu được cấu hình',
|
||
modelsLoadingWait: 'Mô hình vẫn đang tải. Vui lòng đợi trước khi áp dụng preset.',
|
||
noModelsAvailable: 'Chưa có mô hình nào. Hãy khởi động daemon rồi làm mới.',
|
||
appliedCodexPreset: 'Đã áp dụng preset Codex GPT-5.3',
|
||
appliedClaudePreset: 'Đã áp dụng preset Claude 4.6',
|
||
appliedGeminiPreset: 'Đã áp dụng preset Gemini 3',
|
||
integrationEnabled: 'Đã bật tích hợp Cursor',
|
||
integrationDisabled: 'Đã tắt tích hợp Cursor',
|
||
failedUpdateIntegration: 'Không cập nhật được trạng thái tích hợp',
|
||
credentialsImported: 'Đã nhập thông tin xác thực Cursor',
|
||
autoDetectFailed: 'Tự động phát hiện không thành công',
|
||
manualRequired: 'Cần token và machine ID',
|
||
manualImportFailed: 'Nhập thủ công không thành công',
|
||
failedStartDaemon: 'Không thể khởi động daemon',
|
||
daemonStarted: 'Đã khởi động daemon',
|
||
daemonStartedWithPid: 'Daemon đã khởi động (PID: {{pid}})',
|
||
failedStopDaemon: 'Không thể dừng daemon',
|
||
daemonStopped: 'Đã dừng daemon',
|
||
rawLoading: 'Cài đặt thô vẫn đang tải. Vui lòng đợi và thử lại.',
|
||
invalidJson: 'JSON không hợp lệ',
|
||
rawSaved: 'Đã lưu cài đặt thô',
|
||
rawChanged: 'Cài đặt thô đã thay đổi bên ngoài. Làm mới và thử lại.',
|
||
failedSaveRaw: 'Không lưu được cài đặt thô',
|
||
savedAll: 'Đã lưu cấu hình Cursor',
|
||
},
|
||
droidPage: {
|
||
loadingDiagnostics: 'Đang tải chẩn đoán Droid...',
|
||
failedDiagnostics: 'Không tải được chẩn đoán Droid.',
|
||
overview: 'Tổng quan',
|
||
byok: 'BYOK',
|
||
docs: 'Tài liệu',
|
||
runtimeInstall: 'Thời gian chạy và cài đặt',
|
||
status: 'Trạng thái',
|
||
detected: 'Đã phát hiện',
|
||
notFound: 'Không tìm thấy',
|
||
detectionSource: 'Nguồn phát hiện',
|
||
binaryPath: 'Đường dẫn nhị phân',
|
||
installDirectory: 'Thư mục cài đặt',
|
||
version: 'Phiên bản',
|
||
overridePath: 'Ghi đè (CCS_DROID_PATH)',
|
||
configFiles: 'Tệp cấu hình',
|
||
path: 'Đường dẫn',
|
||
resolved: 'Đã giải quyết',
|
||
size: 'Kích cỡ',
|
||
lastModified: 'Sửa đổi lần cuối',
|
||
parseWarning: 'Cảnh báo phân tích cú pháp: {{value}}',
|
||
readWarning: 'Đọc cảnh báo: {{value}}',
|
||
warnings: 'Cảnh báo',
|
||
byokSummary: 'Tóm tắt BYOK',
|
||
activeModelSelector: 'Bộ chọn mô hình hoạt động',
|
||
customModels: 'Mô hình tùy chỉnh',
|
||
ccsManaged: 'do CCS quản lý',
|
||
userManaged: 'Do người dùng quản lý',
|
||
malformedEntries: 'Mục nhập không đúng định dạng',
|
||
providers: 'Nhà cung cấp',
|
||
none: 'không có',
|
||
customModelsTitle: 'Mô hình tùy chỉnh',
|
||
modelName: 'Tên/model',
|
||
provider: 'Nhà cung cấp',
|
||
baseUrl: 'URL cơ sở',
|
||
noCustomModels: 'Không có mô hình tùy chỉnh',
|
||
docsAlignedNotes: 'Ghi chú được căn chỉnh trong Tài liệu',
|
||
factoryDocs: 'Tài liệu Factory',
|
||
providerFactCheckDocs: 'Tài liệu kiểm tra thực tế của nhà cung cấp',
|
||
providerValues: 'Giá trị của nhà cung cấp: {{value}}',
|
||
settingsHierarchy: 'Phân cấp cài đặt: {{value}}',
|
||
settingsTitle: 'Cài đặt BYOK của Droid',
|
||
fixJsonBeforeQuickSettings:
|
||
'Sửa cú pháp JSON trước khi sử dụng các điều khiển cài đặt nhanh.',
|
||
fixJsonBeforeReasoning: 'Sửa cú pháp JSON trước khi cập nhật cài đặt lý luận BYOK.',
|
||
unableUpdateReasoning: 'Không thể cập nhật cài đặt lý luận mô hình BYOK đã chọn.',
|
||
fixJsonBeforeBudget: 'Sửa cú pháp JSON trước khi cập nhật ngân sách tư duy.',
|
||
anthropicOnlyBudget: 'Ngân sách tư duy chỉ có sẵn cho các mô hình BYOK của Anthropic.',
|
||
invalidJson: 'JSON không hợp lệ: {{value}}',
|
||
saved: 'Đã lưu cài đặt Droid',
|
||
changedExternally: 'Cài đặt Droid đã thay đổi bên ngoài. Làm mới và thử lại.',
|
||
failedSave: 'Không lưu được cài đặt Droid',
|
||
},
|
||
sharedPage: {
|
||
commands: 'Lệnh',
|
||
skills: 'Kỹ năng',
|
||
agents: 'Agent',
|
||
title: 'Dữ liệu dùng chung',
|
||
subtitle: 'Các lệnh, kỹ năng và agent được chia sẻ giữa các phiên Claude',
|
||
totalShared: 'Tổng số mục dùng chung',
|
||
visible: 'Hiển thị',
|
||
markdownDetail: 'Chế độ xem chi tiết Markdown',
|
||
filterPrefix: 'Lọc:',
|
||
configurationRequired: 'Cần cấu hình',
|
||
countsUnavailable: 'Không có số liệu',
|
||
retryCounts: 'Số lần thử lại',
|
||
filterPlaceholder: 'Lọc {{tab}} theo tên, mô tả hoặc đường dẫn',
|
||
showing: 'Đang hiển thị {{visible}} trong số {{total}} {{tab}}',
|
||
showingQuery: 'cho "{{query}}"',
|
||
refreshing: '(đang làm mới...)',
|
||
loadingShared: 'Đang tải {{tab}} dùng chung...',
|
||
failedLoadShared: 'Không tải được danh sách {{tab}} dùng chung',
|
||
retry: 'Thử lại',
|
||
noSharedFound:
|
||
'Không tìm thấy {{tab}} dùng chung. Chạy `ccs sync` hoặc thêm mục trong thư mục dùng chung của bạn.',
|
||
noMatch: 'Không có {{tab}} khớp với "{{query}}".',
|
||
selectOne: 'Chọn {{tab}} để xem toàn bộ nội dung.',
|
||
pathLabel: 'Đường dẫn',
|
||
resolvedSource: 'Nguồn đã giải quyết',
|
||
loadingMarkdown: 'Đang tải nội dung Markdown...',
|
||
failedLoadContent: 'Không tải được nội dung',
|
||
retryContent: 'Thử lại nội dung',
|
||
noMarkdown: 'Không có nội dung Markdown khả dụng.',
|
||
},
|
||
},
|
||
},
|
||
ja: {
|
||
translation: {
|
||
locale: {
|
||
en: '英語',
|
||
'zh-CN': '簡体字中国語',
|
||
vi: 'ベトナム語',
|
||
ja: '日本語',
|
||
},
|
||
layout: {
|
||
languageSwitcher: '言語',
|
||
},
|
||
nav: {
|
||
general: '全般',
|
||
home: 'ホーム',
|
||
analytics: '分析',
|
||
identityAccess: '認証とアクセス',
|
||
apiProfiles: 'API プロファイル',
|
||
cliproxyPlus: 'CLIProxy Plus',
|
||
cliproxyOverview: '概要',
|
||
controlPanel: 'コントロールパネル',
|
||
githubCopilot: 'GitHub Copilot',
|
||
cursorIde: 'Cursor IDE',
|
||
claudeExtension: 'Claude Extension',
|
||
accounts: 'アカウント',
|
||
allAccounts: 'すべてのアカウント',
|
||
sharedData: '共有データ',
|
||
compatibleClis: '互換',
|
||
factoryDroid: 'Factory Droid',
|
||
system: 'システム',
|
||
health: 'ヘルス',
|
||
settings: '設定',
|
||
openrouterTooltip: '注目: OpenRouter + Alibaba Coding Plan + Ollama',
|
||
},
|
||
home: {
|
||
profiles: 'プロファイル',
|
||
cliproxy: 'CLIProxy',
|
||
accounts: 'アカウント',
|
||
health: 'ヘルス',
|
||
configurationRequired: '設定が必要',
|
||
},
|
||
auth: {
|
||
dashboardTitle: 'CCS Dashboard',
|
||
loginDescription: 'ダッシュボードにアクセスするには認証情報を入力してください',
|
||
username: 'ユーザー名',
|
||
password: 'パスワード',
|
||
usernamePlaceholder: 'ユーザー名を入力',
|
||
passwordPlaceholder: 'パスワードを入力',
|
||
signIn: 'サインイン',
|
||
signingIn: 'サインイン中...',
|
||
loginFailed: 'ログインに失敗しました',
|
||
},
|
||
commonToast: {
|
||
apiKeyRequired: 'API キーは必須です',
|
||
accountAddedPresetFailed:
|
||
'アカウントは追加されましたが、デフォルトプリセットの適用に失敗しました',
|
||
settingsCopied: '設定をクリップボードにコピーしました',
|
||
enterPresetName: '保存するプリセット名を入力してください',
|
||
codeCopied: 'コードをクリップボードにコピーしました',
|
||
copyCodeFailed: 'コードのコピーに失敗しました',
|
||
appliedModelAllTiers: 'すべてのティアにモデルを適用しました',
|
||
settingsSaved: '設定を保存しました',
|
||
defaultTargetUpdated: 'デフォルトターゲットを更新しました',
|
||
failedUpdateDefaultTarget:
|
||
'デフォルトターゲットを {{target}}{{suffix}} に更新できませんでした',
|
||
},
|
||
profileDialog: {
|
||
editTitle: 'プロファイルを編集',
|
||
createTitle: 'API プロファイルを作成',
|
||
name: '名前',
|
||
namePlaceholder: 'my-api',
|
||
baseUrl: 'ベース URL',
|
||
baseUrlPlaceholder: 'https://api.example.com',
|
||
apiKey: 'API キー',
|
||
defaultModel: 'デフォルトモデル (ANTHROPIC_MODEL)',
|
||
defaultModelHint: '空欄の場合は {{model}} を使用',
|
||
modelMappingTitle: 'モデルマッピング (Opus/Sonnet/Haiku)',
|
||
modelMappingDesc:
|
||
'各ティアに異なるモデル ID を設定します。異なるモデル種別を別バックエンドへ振り分ける API プロキシで便利です。',
|
||
opusModel: 'Opus モデル (ANTHROPIC_DEFAULT_OPUS_MODEL)',
|
||
sonnetModel: 'Sonnet モデル (ANTHROPIC_DEFAULT_SONNET_MODEL)',
|
||
haikuModel: 'Haiku モデル (ANTHROPIC_DEFAULT_HAIKU_MODEL)',
|
||
cancel: 'キャンセル',
|
||
saving: '保存中...',
|
||
update: '更新',
|
||
create: '作成',
|
||
},
|
||
modelTierMapping: {
|
||
title: 'モデルティアマッピング',
|
||
advanced: '詳細',
|
||
description: 'Claude Code の opus/sonnet/haiku ティアごとに別のモデルを設定します。',
|
||
autoSuggest: '{{provider}} に基づいて自動提案',
|
||
opusPlaceholder: '例: anthropic/claude-opus-4',
|
||
sonnetPlaceholder: '例: anthropic/claude-sonnet-4',
|
||
haikuPlaceholder: '例: anthropic/claude-3.5-haiku',
|
||
footer:
|
||
'これにより ANTHROPIC_DEFAULT_OPUS_MODEL、ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL を設定します。',
|
||
},
|
||
envEditor: {
|
||
sensitive: '機密',
|
||
none: '環境変数は設定されていません。',
|
||
noneHint: '下の入力から追加するか、JSON を直接編集してください。',
|
||
addVariable: '環境変数を追加',
|
||
keyPlaceholder: 'VARIABLE_NAME',
|
||
valuePlaceholder: '値',
|
||
},
|
||
setupVariant: {
|
||
using: '使用中:',
|
||
variantNameRequired: 'バリアント名 *',
|
||
variantNamePlaceholder: '例: my-gemini, g3, flash',
|
||
invokeHintPrefix: 'この名前で呼び出せます:',
|
||
model: 'モデル',
|
||
modelPlaceholder: '例: gemini-2.5-pro, claude-opus-4-6-thinking',
|
||
choosePresetInstead: '代わりにプリセットから選択',
|
||
selectModel: 'モデルを選択',
|
||
customModelName: 'カスタムモデル名...',
|
||
enterAnyModel: 'CLIProxy がサポートする任意のモデル名を入力',
|
||
defaultModel: 'デフォルト: {{model}}',
|
||
providerDefault: 'プロバイダーのデフォルト',
|
||
back: '戻る',
|
||
skip: 'スキップ',
|
||
creating: '作成中...',
|
||
createVariant: 'バリアントを作成',
|
||
skipHint: 'アカウント追加だけが目的なら、バリアント作成はスキップできます',
|
||
},
|
||
customPresetDialog: {
|
||
title: 'カスタムプリセット',
|
||
presetNameOptional: 'プリセット名 (任意)',
|
||
presetNamePlaceholder: '例: My Custom Config',
|
||
codexTipPrefix: 'Codex のヒント: サフィックス',
|
||
codexTipSuffix: 'で推論強度を固定できます。サフィックスなしのモデルは思考設定を使います。',
|
||
defaultModel: 'デフォルトモデル',
|
||
defaultModelDesc: '特定のティア指定がない場合に使用',
|
||
opusModel: 'Opus (最上位)',
|
||
opusModelDesc: '複雑な推論タスク向け',
|
||
sonnetModel: 'Sonnet (バランス)',
|
||
sonnetModelDesc: '速度と性能のバランス',
|
||
haikuModel: 'Haiku (高速)',
|
||
haikuModelDesc: '単純なタスクにすばやく応答',
|
||
cancel: 'キャンセル',
|
||
savePreset: 'プリセットを保存',
|
||
applyPreset: 'プリセットを適用',
|
||
},
|
||
componentModelSelector: {
|
||
selectModel: 'モデルを選択',
|
||
availableModelsCount: '利用可能なモデル ({{count}})',
|
||
preview: 'プレビュー',
|
||
},
|
||
searchableSelect: {
|
||
searchModels: 'モデルを検索...',
|
||
noResults: '一致する結果がありません。',
|
||
},
|
||
copilotSettings: {
|
||
enableCopilot: 'Copilot を有効化',
|
||
enableCopilotDesc: 'GitHub Copilot サブスクリプションを利用できるようにします',
|
||
basicSettings: '基本設定',
|
||
accountType: 'アカウント種別',
|
||
accountTypeIndividual: '個人',
|
||
accountTypeBusiness: 'ビジネス',
|
||
accountTypeEnterprise: 'エンタープライズ',
|
||
rateLimiting: 'レート制限',
|
||
rateLimitSeconds: 'レート制限 (秒)',
|
||
noLimit: '制限なし',
|
||
waitOnRateLimit: 'レート制限時に待機',
|
||
waitOnRateLimitDesc: '制限到達時にエラーではなく待機します',
|
||
daemonSettings: 'デーモン設定',
|
||
autoStartDaemon: 'デーモンを自動起動',
|
||
autoStartDaemonDesc: 'プロファイル使用時に copilot-api を起動します',
|
||
},
|
||
providerModelSelector: {
|
||
selectModel: 'モデルを選択',
|
||
noModelsForProvider: 'このプロバイダーで利用可能なモデルはありません',
|
||
broken: '問題あり',
|
||
deprecated: '非推奨',
|
||
paid: '有料',
|
||
freeTier: '無料ティア',
|
||
paidTier: '有料ティア',
|
||
modelKnownIssues: 'このモデルには既知の問題があります',
|
||
viewIssueDetails: '問題の詳細を見る',
|
||
modelDeprecated: 'このモデルは非推奨です',
|
||
recommended: '推奨',
|
||
allModelsCount: 'すべてのモデル ({{count}})',
|
||
noModelsAvailable: '利用可能なモデルはありません',
|
||
},
|
||
createAuthProfileDialog: {
|
||
title: '新しいアカウントを作成',
|
||
description:
|
||
'認証プロファイルには Claude CLI へのログインが必要です。以下のコマンドをターミナルで実行してください。同期モード、グループ、継続性の深さは後でアカウント一覧から編集できます。',
|
||
profileName: 'プロファイル名',
|
||
profileNamePlaceholder: '例: work, personal, client',
|
||
invalidProfileName: '名前は英字で始め、英数字、ハイフン、アンダースコアのみ使用できます。',
|
||
enableSharedHistory: '他の ccs 認証アカウントとの共有履歴同期を有効にする',
|
||
historySyncGroupOptional: '履歴同期グループ (任意)',
|
||
historySyncGroupPlaceholder: 'default, sprint-a, client-x',
|
||
historySyncGroupHint:
|
||
'空欄の場合はデフォルトの共有グループを使用します。スペースはハイフンに正規化されます。',
|
||
deeperContinuity: '詳細: より深い継続性モード',
|
||
deeperContinuityHint:
|
||
'session-env、file-history、shell-snapshots、todos の同期も追加します。認証情報は分離されたままです。',
|
||
invalidContextGroup:
|
||
'グループは英字で始め、英数字、ハイフン、アンダースコアのみ使用できます (最大 {{max}} 文字)。',
|
||
command: 'コマンド',
|
||
commandFallback: 'ccs auth create <name>',
|
||
afterRunPrefix: 'コマンド実行後:',
|
||
afterRunStep1: 'ブラウザで Claude のログインを完了します',
|
||
afterRunStep2: 'ここに戻って更新し、新しいアカウントを確認します',
|
||
poolingHint:
|
||
'Claude OAuth のプールルーティングを使う場合は、アカウントページのアクションボタンから CLIProxy Claude Pool を利用してください。',
|
||
close: '閉じる',
|
||
copied: 'コピーしました!',
|
||
copyCommand: 'コマンドをコピー',
|
||
},
|
||
cliproxyModelCategory: {
|
||
google: 'Google (Gemini)',
|
||
openai: 'OpenAI (GPT)',
|
||
anthropic: 'Anthropic (Claude)',
|
||
antigravity: 'Antigravity',
|
||
other: 'その他',
|
||
},
|
||
cliproxyOverviewComponents: {
|
||
availableModels: '利用可能なモデル',
|
||
noModelsAvailable: '利用可能なモデルはありません',
|
||
startSessionHint: '利用可能なモデルを取得するには CLIProxy セッションを開始してください',
|
||
totalCount: '合計 {{count}}',
|
||
availableThroughGroupedByProvider:
|
||
'{{backendLabel}} 経由で利用可能なモデルをプロバイダー別に表示',
|
||
moreCount: '+{{count}} 件',
|
||
},
|
||
categorizedModelSelector: {
|
||
selectModel: 'モデルを選択',
|
||
noModelsAvailable: '利用可能なモデルはありません',
|
||
modelPlaceholder: 'モデル...',
|
||
},
|
||
openrouterQuickStart: {
|
||
recommended: '推奨',
|
||
title: 'OpenRouter から始める',
|
||
description:
|
||
'OpenAI、Anthropic、Google、Meta などの {{modelCountLabel}} モデルを、1 つの API で利用できます。',
|
||
featureOneApi: '1 つの API で全プロバイダー',
|
||
featureTierMapping: 'モデルティアマッピング',
|
||
profileCount: '{{count}} 個の API プロファイル',
|
||
profileCount_other: '{{count}} 個の API プロファイル',
|
||
selectProfileTitle: 'API プロファイルを選択',
|
||
summaryDescriptionWithProfiles:
|
||
'このワークスペースには既に {{count}} 個の API プロファイルがあります。左側レールから 1 つ選んで編集するか、ここから新しいプロファイルを作成してください。',
|
||
summaryDescriptionWithProfiles_other:
|
||
'このワークスペースには既に {{count}} 個の API プロファイルがあります。左側レールから 1 つ選んで編集するか、ここから新しいプロファイルを作成してください。',
|
||
summaryDescriptionNoProfiles:
|
||
'API Profiles は Anthropic 互換エンドポイント向けです。AI Providers は Gemini、Codex、Claude、Vertex、OpenAI 互換コネクタ向けです。',
|
||
openrouterModelsBadge: '{{modelCountLabel}} 個の OpenRouter モデル',
|
||
runtimeProviderBadge: 'ランタイムプロバイダー設定',
|
||
runtimeProviderTitle: 'AI Providers を開く',
|
||
runtimeProviderDescription:
|
||
'個別の API プロファイルを作成する前に、共有プロバイダーキーとランタイムコネクタを管理します。',
|
||
runtimeProviderFeatureConnectors: 'Gemini、Codex、Claude、Vertex、OpenAI 互換コネクタ',
|
||
runtimeProviderFeatureSecrets:
|
||
'共有シークレットを個別の API プロファイルから切り離して管理',
|
||
runtimeProviderFooter:
|
||
'複数のプロファイルで 1 つのプロバイダー設定を共有したい場合に最適です。',
|
||
createOpenRouterProfile: 'OpenRouter プロファイルを作成',
|
||
getApiKeyAt: 'API キー取得:',
|
||
or: 'または',
|
||
createCustomProfile: 'カスタム API プロファイルを作成',
|
||
},
|
||
alibabaCodingPlanQuickStart: {
|
||
recommended: '推奨',
|
||
title: 'Alibaba Coding Plan を試す',
|
||
description:
|
||
'コーディング用途向けに、Anthropic 互換エンドポイント経由で Alibaba Cloud Coding Plan を利用します。',
|
||
featureEndpoint: 'Anthropic 互換エンドポイント',
|
||
featureKeyFormat: '専用の sk-sp API キー',
|
||
createAlibabaProfile: 'Alibaba Coding Plan プロファイルを作成',
|
||
readGuideAt: 'セットアップガイド:',
|
||
},
|
||
alibabaCodingPlanPromo: {
|
||
title: 'Alibaba Coding Plan',
|
||
subtitle: 'Anthropic エンドポイント経由の Model Studio Coding Plan',
|
||
add: '追加',
|
||
},
|
||
credentialHealth: {
|
||
title: '認証情報の状態',
|
||
ready: '準備完了',
|
||
noCredentialsConfigured: '認証情報が未設定です。上のログインボタンから認証してください。',
|
||
neverUsed: '未使用',
|
||
justNow: 'たった今',
|
||
unknown: '不明',
|
||
daysAgo: '{{count}}日前',
|
||
hoursAgo: '{{count}}時間前',
|
||
minutesAgo: '{{count}}分前',
|
||
},
|
||
proxyStatusWidget: {
|
||
justNow: 'たった今',
|
||
minutesAgo: '{{count}}分前',
|
||
hoursAgo: '{{count}}時間前',
|
||
syncReady: '同期準備完了',
|
||
noConfig: '設定なし',
|
||
remoteProxy: 'リモートプロキシ',
|
||
active: '稼働中',
|
||
trafficAutoRouted: 'トラフィックは自動でリモートサーバーにルーティングされます',
|
||
tooltipSync: 'CLIProxy にプロファイルを同期',
|
||
tooltipRestart: '再起動',
|
||
tooltipStop: '停止',
|
||
tooltipClose: '閉じる',
|
||
tooltipVersionSettings: 'バージョン設定',
|
||
versionManagement: 'バージョン管理',
|
||
selectVersionPlaceholder: 'インストールするバージョンを選択...',
|
||
stable: '(安定版)',
|
||
install: 'インストール',
|
||
versionsAboveUnstable: '{{version}} より新しいバージョンには既知の問題があります',
|
||
versionsKnownIssues: 'バージョン {{version}} には既知の問題があります',
|
||
lastChecked: '最終確認: {{time}}',
|
||
notRunning: '停止中',
|
||
start: '起動',
|
||
port: 'ポート {{port}}',
|
||
sessionCount: '{{count}} セッション',
|
||
sessionCount_other: '{{count}} セッション',
|
||
installFaultyTitle: '既知の問題があるバージョンをインストールしますか?',
|
||
installFaultyDesc:
|
||
'既知の不具合範囲 <strong>{{range}}</strong> に含まれる <strong>v{{version}}</strong> をインストールしようとしています。',
|
||
installFaultyWarning:
|
||
'このバージョンには既知のバグがあり、失敗したりプロキシが不安定になる可能性があります。',
|
||
installUnstableTitle: '不安定なバージョンをインストールしますか?',
|
||
installUnstableDesc:
|
||
'最大安定版 <strong>v{{maxStable}}</strong> を上回る <strong>v{{version}}</strong> をインストールしようとしています。',
|
||
installUnstableWarning:
|
||
'このバージョンには安定性の問題があり、予期しない動作を引き起こす可能性があります。',
|
||
installUnstableConfirm: 'このまま続行しますか?',
|
||
cancel: 'キャンセル',
|
||
installAnyway: 'このままインストール',
|
||
clickToDowngrade: 'クリックしてダウングレード',
|
||
clickToUpdate: 'クリックして更新',
|
||
},
|
||
syncStatusCard: {
|
||
profileSync: 'プロファイル同期',
|
||
ready: '準備完了',
|
||
noConfig: '設定なし',
|
||
syncsProfilesDesc: 'API プロファイルをローカルの CLIProxy 設定に同期します',
|
||
runDoctorHint: '設定を生成するには <code>ccs doctor --fix</code> を実行してください。',
|
||
details: '詳細',
|
||
syncNow: '今すぐ同期',
|
||
},
|
||
syncDialog: {
|
||
title: 'プロファイルをローカル CLIProxy に同期',
|
||
description: 'CCS の API プロファイルをローカルの CLIProxy config.yaml に同期します。',
|
||
noProfiles: '同期するプロファイルがありません。',
|
||
createProfilesFirst: '先にプロファイルタブで API プロファイルを作成してください。',
|
||
modelLabel: 'モデル:',
|
||
ready: '準備完了',
|
||
profilesToSync_one: '{{count}} 件のプロファイルを同期',
|
||
profilesToSync_other: '{{count}} 件のプロファイルを同期',
|
||
cancel: 'キャンセル',
|
||
syncing: '同期中...',
|
||
synced: '同期完了',
|
||
syncNow: '今すぐ同期',
|
||
},
|
||
errorLogs: {
|
||
title: 'エラーログ',
|
||
failedRequests_one: '{{count}} 件の失敗したリクエスト',
|
||
failedRequests_other: '{{count}} 件の失敗したリクエスト',
|
||
cliproxyDiagnostics: 'CLIProxy 診断',
|
||
showingCount: '{{total}} 件中 50 件のログを表示',
|
||
selectLog: '詳細を表示するログを選択してください',
|
||
failedLoadContent: 'ログ内容の読み込みに失敗しました',
|
||
copyAbsolutePath: '絶対パスをコピー',
|
||
copyRawContent: '生のログ内容をコピー',
|
||
tabOverview: '概要',
|
||
tabHeaders: 'ヘッダー',
|
||
tabRequest: 'リクエスト',
|
||
tabResponse: 'レスポンス',
|
||
tabRaw: '生データ',
|
||
modelLabel: 'モデル:',
|
||
quotaResetsIn: 'クォータのリセットまで ',
|
||
method: 'メソッド',
|
||
provider: 'プロバイダー',
|
||
version: 'バージョン',
|
||
endpoint: 'エンドポイント',
|
||
url: 'URL',
|
||
timestamp: 'タイムスタンプ',
|
||
na: '該当なし',
|
||
noHeaders: '利用可能なヘッダーはありません',
|
||
noRequestBody: 'リクエストボディなし',
|
||
noResponseBody: 'レスポンスボディなし',
|
||
rateLimitedMsg:
|
||
'レート制限です。別のアカウントに切り替えるか、クォータのリセットを待ってください。モデル {{model}} のクォータは上限に達しています。',
|
||
rateLimitedMsgNoModel:
|
||
'レート制限です。別のアカウントに切り替えるか、クォータのリセットを待ってください。',
|
||
authFailedMsg:
|
||
'認証に失敗しました。CLIProxy 設定で再認証するか、API キーを確認してください。',
|
||
notFoundMsg:
|
||
'エンドポイントが見つかりません。このプロバイダーには存在しない可能性があります。',
|
||
serverErrorMsg:
|
||
'上流サーバーでエラーが発生しました。後でもう一度試すか、プロバイダーのステータスページを確認してください。',
|
||
timeoutMsg:
|
||
'リクエストがタイムアウトしました。ネットワーク接続を確認するか、タイムアウト設定を延長してください。',
|
||
unknown: '不明',
|
||
},
|
||
editAccountContext: {
|
||
title: '履歴同期の設定',
|
||
description:
|
||
'"{{name}}" が他の CCS auth アカウントと履歴や継続性を共有する方法を設定します。',
|
||
syncMode: '同期モード',
|
||
selectContextMode: 'コンテキストモードを選択',
|
||
isolatedOption: '分離(同期なし)',
|
||
sharedOption: '共有(同期あり)',
|
||
sharedModeHint:
|
||
'共有モードでは、同じ履歴同期グループ内のアカウントでワークスペースコンテキストを再利用します。',
|
||
isolatedModeHint:
|
||
'分離モードでは、このアカウントを他の CCS auth アカウントから完全に切り離します。',
|
||
historySyncGroup: '履歴同期グループ',
|
||
groupPlaceholder: 'default',
|
||
groupHint:
|
||
'小文字に正規化されます(スペースはダッシュに変換)。使用可能: 英字、数字、_、-(最大 {{max}} 文字)。',
|
||
invalidGroup: '英字で始まる有効なグループ名を入力してください。',
|
||
continuityDepth: '継続性レベル',
|
||
selectContinuityDepth: '継続性レベルを選択',
|
||
standardOption: '標準(プロジェクトのみ)',
|
||
deeperOption: '拡張継続性(上級者向け)',
|
||
deeperHint:
|
||
'上級モードでは、session-env、file-history、shell-snapshots、todos も同期します。',
|
||
standardHint: '標準モードでは、プロジェクトのワークスペースコンテキストのみ同期します。',
|
||
credentialsIsolated:
|
||
'どのモードでも、認証情報と .anthropic はアカウントごとに分離されます。',
|
||
implicationTitle: '保存後の挙動',
|
||
isolatedImplication:
|
||
'このアカウントは分離されたままです。他のアカウントからこの継続状態を再開できません。',
|
||
sameGroupRule:
|
||
'アカウント同士で継続性を共有するには、両方が同じグループ「{{group}}」を使う必要があります。',
|
||
noSameGroupPeer: '現在このグループを使っている他のアカウントはありません。',
|
||
sameGroupPeerCount_one: 'このグループを使う他のアカウントが {{count}} 件あります。',
|
||
sameGroupPeerCount_other: 'このグループを使う他のアカウントが {{count}} 件あります。',
|
||
deeperReady_one:
|
||
'同じグループの {{count}} 件のアカウントがすでに拡張継続性を使っています。これは現状で最も強い引き継ぎ設定です。',
|
||
deeperReady_other:
|
||
'同じグループの {{count}} 件のアカウントがすでに拡張継続性を使っています。これは現状で最も強い引き継ぎ設定です。',
|
||
deeperNeedsPeers:
|
||
'このアカウントでは拡張継続性が有効ですが、同じグループの他アカウントでも拡張継続性を有効にしないと、アカウント間再開の期待には十分ではありません。',
|
||
standardWarning:
|
||
'標準共有はプロジェクト文脈向けです。アカウント間再開を期待するなら、両方のアカウントで拡張継続性を有効にしてください。',
|
||
resumeOriginalWarning:
|
||
'古い会話が重要なら、設定を変える前に元のアカウントで再開してください。',
|
||
cancel: 'キャンセル',
|
||
save: '保存',
|
||
saving: '保存中...',
|
||
},
|
||
historySyncLearningMap: {
|
||
title: '履歴同期の仕組み',
|
||
description: '分離 -> 共有 -> 拡張共有。変更は各行の「同期」から行います。',
|
||
learningMap: '概要図',
|
||
isolated: '分離',
|
||
shared: '共有',
|
||
deeper: '拡張共有',
|
||
cliproxyManaged_one:
|
||
'{{count}} 件の CLIProxy Claude Pool アカウントは、CLIProxy ページで管理します。',
|
||
cliproxyManaged_other:
|
||
'{{count}} 件の CLIProxy Claude Pool アカウントは、CLIProxy ページで管理します。',
|
||
showDetails: '詳細を表示: グループ、切り替え、レガシーポリシー',
|
||
modeSwitch: 'モード切り替え',
|
||
modeSwitchDesc:
|
||
'「同期」ダイアログでは、分離/共有の切り替えと、より深い継続性の選択ができます。',
|
||
historySyncGroup: '履歴同期グループ',
|
||
historySyncGroupDesc:
|
||
'同じグループのアカウントは、同じプロジェクトのコンテキストレーンを共有します。未設定時は default を使います。',
|
||
sameGroupRule:
|
||
'現在、継続性を共有できるのは、両方のアカウントが共有モードかつ同じグループを使っている場合だけです。',
|
||
deeperRecommendation:
|
||
'グループ「{{group}}」は共有されていますが、アカウント間再開を期待するなら拡張継続性も有効にする方が安全です。',
|
||
partialGroup:
|
||
'グループ「{{group}}」は良い状態ですが、他のアカウントやグループでは同グループ設定や拡張継続性がまだ不足しています。',
|
||
readyGroup:
|
||
'グループ「{{group}}」では複数アカウントで拡張継続性が有効です。これは現状で最も強い引き継ぎ設定です。',
|
||
legacyConfirmation_one: '{{count}} 件のレガシーアカウントで明示的な確認がまだ必要です。',
|
||
legacyConfirmation_other: '{{count}} 件のレガシーアカウントで明示的な確認がまだ必要です。',
|
||
},
|
||
continuityReadiness: {
|
||
title: 'アカウント間再開チェック',
|
||
description: 'アカウントを切り替える前に、何が不足しているかをこのカードで確認できます。',
|
||
state: {
|
||
single: '単一アカウント',
|
||
isolated: '再開オフ',
|
||
'shared-alone': '共有だが未完成',
|
||
'shared-standard': 'プロジェクトのみ',
|
||
partial: '一部のみ準備完了',
|
||
ready: '強い引き継ぎ準備完了',
|
||
},
|
||
metrics: {
|
||
isolated: '分離',
|
||
sharedPeers: '同グループあり',
|
||
deeperReady: '拡張準備完了',
|
||
},
|
||
messages: {
|
||
single: {
|
||
title: '現在は auth アカウントが 1 つだけです。',
|
||
description:
|
||
'アカウント間の引き継ぎはまだ関係ありません。共有継続性を設定する前に、もう 1 つ auth アカウントを追加してください。',
|
||
},
|
||
isolated: {
|
||
title: '現在、アカウント間再開はオフです。',
|
||
description:
|
||
'表示中のアカウントはすべて分離モードのため、あるアカウントで作成したセッションはそのアカウントに残ります。',
|
||
},
|
||
'shared-alone': {
|
||
title: '共有モードはありますが、どのグループにも相手がいません。',
|
||
description_one:
|
||
'{{count}} 件の共有アカウントが、同じグループに入る別アカウントを待っています。',
|
||
description_other:
|
||
'{{count}} 件の共有アカウントが、同じグループに入る別アカウントを待っています。',
|
||
},
|
||
'shared-standard': {
|
||
title:
|
||
'グループ「{{group}}」はプロジェクト文脈を共有していますが、拡張継続性のペアがまだありません。',
|
||
description:
|
||
'ユーザーはプロジェクト共有以上を期待する可能性があります。より強い引き継ぎのため、このグループ内の両アカウントで拡張継続性を有効にしてください。',
|
||
},
|
||
partial: {
|
||
title: '1 つのグループは準備できていますが、全体の設定はまだ混在しています。',
|
||
description:
|
||
'少なくとも 1 つのグループでは拡張継続性が使われていますが、他のアカウントはまだ分離状態、共有グループ内で単独、または拡張継続性が未設定です。',
|
||
},
|
||
ready: {
|
||
title: 'グループ「{{group}}」は現状で最も強い継続性設定になっています。',
|
||
description:
|
||
'このグループでは複数アカウントがすでに拡張継続性を使っています。実際に再開できるかどうかは、Claude が上流で何を保存しているかにも依存します。',
|
||
},
|
||
},
|
||
stepsTitle: '次にユーザーがやるべきこと',
|
||
steps: {
|
||
syncBoth:
|
||
'切り替え先のアカウントだけでなく、両方のアカウントで「同期」を開いてください。',
|
||
sameGroup:
|
||
'両方のアカウントで同じ履歴同期グループを使ってください。現在の推奨グループは「{{group}}」です。',
|
||
enableDeeper:
|
||
'プロジェクト共有だけでなくアカウント間再開を期待するなら、両方のアカウントで拡張継続性を有効にしてください。',
|
||
resumeOriginal:
|
||
'元の会話が重要なら、継続性設定を変える前に元のアカウントで再開してください。',
|
||
},
|
||
singleSteps: {
|
||
addAccount:
|
||
'アカウント間引き継ぎを考える前に、まず 2 つ目の ccs auth アカウントを作成してください。',
|
||
sameGroupLater:
|
||
'2 つ目のアカウントができたら、両方を同じ履歴同期グループに入れてください。',
|
||
enableDeeperLater:
|
||
'将来アカウント間再開を期待するなら、両方のアカウントで拡張継続性を有効にしてください。',
|
||
resumeOriginal:
|
||
'2 つ目のアカウントが整うまでは、重要な会話は元のアカウントから再開し続けてください。',
|
||
},
|
||
},
|
||
continuityOverview: {
|
||
plainLaneTitle: '通常の ccs は別の再開レーンを使っています',
|
||
plainLaneDescription:
|
||
'通常の ccs は現在 {{lane}} から再開しており、このアカウントのレーンではありません。同期設定を変える前に元のレーンを先に復旧してください。',
|
||
setDefaultHint:
|
||
'今後の通常の ccs を特定のアカウントに合わせたい場合は、その行の「既定に設定」を使ってください。',
|
||
recommendBadge: '推奨 {{group}}',
|
||
partialBadge: '部分同期 {{group}}',
|
||
lane: {
|
||
native: 'ネイティブ Claude(~/.claude)',
|
||
accountDefault: 'アカウント {{name}}',
|
||
accountInherited: '継続性継承によるアカウント {{name}}',
|
||
profileDefault: '既定プロファイル {{name}}(ネイティブ Claude レーン)',
|
||
},
|
||
},
|
||
accountsTable: {
|
||
name: '名前',
|
||
type: '種別',
|
||
defaultBadge: '既定',
|
||
created: '作成日',
|
||
lastUsed: '最終使用',
|
||
historySync: '履歴同期',
|
||
actions: '操作',
|
||
syncTitle: '同期モード、グループ、継続性レベルを編集',
|
||
confirmLegacyTitle: 'このレガシーアカウントの現在のモードを明示的に確定する',
|
||
sync: '同期',
|
||
confirm: '確定',
|
||
active: '有効',
|
||
setDefault: '既定に設定',
|
||
deleteAccount: 'アカウントを削除',
|
||
cannotDeleteDefault: '既定のアカウントは削除できません',
|
||
noAccounts:
|
||
'CCS auth アカウントが見つかりません。追加するには ccs auth create を使ってください。',
|
||
resetToDefault: 'CCS の既定値に戻す',
|
||
deleteDialogTitle: 'アカウントを削除',
|
||
deleteDialogDesc:
|
||
'アカウント "{{name}}" を削除しますか? この操作でプロファイルと関連するすべてのセッションデータが削除されます。この操作は元に戻せません。',
|
||
cancel: 'キャンセル',
|
||
delete: '削除',
|
||
sharedGroupStandard: '共有({{group}}、標準)',
|
||
sharedGroupDeeper: '共有({{group}}、拡張)',
|
||
sharedGroupLegacy: '共有({{group}}、標準・レガシー)',
|
||
isolatedLegacy: '分離(旧既定値)',
|
||
isolated: '分離',
|
||
noSameGroupPeer: '同じグループの相手がまだいません',
|
||
sameGroupPeerCount_one: '{{count}} 件の同グループアカウント',
|
||
sameGroupPeerCount_other: '{{count}} 件の同グループアカウント',
|
||
legacyReview: 'この推定された既定状態を確認して明示的に確定してください。',
|
||
noHandoff: 'アカウント間再開は元のアカウントに残ります。',
|
||
badges: {
|
||
shared: '共有',
|
||
deeper: '拡張',
|
||
legacy: 'レガシー',
|
||
isolated: '分離',
|
||
},
|
||
},
|
||
addAccountDialog: {
|
||
title: '{{displayName}} アカウントを追加',
|
||
descKiro:
|
||
'Kiro の認証方法を選び、ブラウザーで認証するか Kiro IDE からインポートしてください。',
|
||
descDeviceCode:
|
||
'認証をクリックすると、プロバイダーのサイトで入力する確認コードが表示されます。',
|
||
descOauth:
|
||
'認証をクリックすると OAuth URL を取得します。任意のブラウザーで開いてサインインしてください。',
|
||
powerUserEnabled: '上級者モードが有効です',
|
||
powerUserSkipped:
|
||
'設定 > プロキシのパワーユーザーモードにより、AGY の責任確認チェックと Gemini ダッシュボードのリスク文言入力をスキップしています。OAuth / アカウントに関するリスクはすべて自己責任です。',
|
||
powerUserLoadFailed:
|
||
'パワーユーザーモード設定を読み込めませんでした。設定 > プロキシを確認してから再試行してください。',
|
||
powerUserLoading:
|
||
'パワーユーザーモードの安全設定を読み込み中です。少し待ってから再試行してください。',
|
||
powerUserUnavailableRetry:
|
||
'パワーユーザーモードは利用できません。必要なプロバイダーの安全確認を完了してから再試行してください。',
|
||
authMethod: '認証方法',
|
||
selectKiroAuthMethod: 'Kiro の認証方法を選択',
|
||
nicknameRequired: 'ニックネーム(必須)',
|
||
nicknameOptional: 'ニックネーム(任意)',
|
||
nicknamePlaceholder: '例: work, personal',
|
||
nicknameRequiredHint:
|
||
'このプロバイダーでは必須です。重複しないわかりやすい名前を付けてください(例: work, personal)。',
|
||
nicknameOptionalHint:
|
||
'このアカウントを識別しやすい名前です。空欄の場合は安全な識別子を自動生成します。',
|
||
waitingForAuth: '認証を待機中...',
|
||
deviceCodeHint:
|
||
'確認コードのダイアログがまもなく表示されます。プロバイダーのサイトでコードを入力してください。',
|
||
browserHint: 'ブラウザーで認証を完了してください。このダイアログは自動で閉じます。',
|
||
openUrlLabel: 'サインインするには、この URL を任意のブラウザーで開いてください:',
|
||
copied: 'コピー済み',
|
||
copy: 'コピー',
|
||
open: '開く',
|
||
popupBlocked:
|
||
'ポップアップがブロックされました。上の URL をコピーして、ブラウザーで手動で開いてください。',
|
||
redirectPasteLabel:
|
||
'リダイレクトが機能しない場合は、コールバック URL を貼り付けてください:',
|
||
callbackPlaceholder: 'リダイレクト URL をここに貼り付け...',
|
||
submitCallback: 'コールバックを送信',
|
||
submitting: '送信中...',
|
||
preparingUrl: 'サインイン URL を準備中...',
|
||
cancel: 'キャンセル',
|
||
importingToken: 'Kiro IDE からトークンをインポート中...',
|
||
authenticate: '認証',
|
||
importFromIde: 'IDE からインポート',
|
||
importing: 'インポート中...',
|
||
},
|
||
flowViz: {
|
||
backToProviders: 'プロバイダーに戻る',
|
||
showDetails: '詳細を表示',
|
||
hideDetails: '詳細を隠す',
|
||
resetLayout: 'レイアウトをリセット',
|
||
provider: 'プロバイダー',
|
||
totalRequests: '総リクエスト数',
|
||
accounts: 'アカウント',
|
||
connectionTimeline: '接続タイムライン',
|
||
noRecentConnections: '最近の接続はありません',
|
||
},
|
||
quickStats: {
|
||
totalRequests: '総リクエスト数',
|
||
successRate: '成功率',
|
||
totalTokens: '総トークン数',
|
||
activeModels: 'アクティブなモデル',
|
||
},
|
||
authMonitor: {
|
||
accounts: 'アカウント',
|
||
accountsCount: '{{count}} アカウント',
|
||
success: '成功',
|
||
failed: '失敗',
|
||
successRate: '成功率',
|
||
},
|
||
accountCard: {
|
||
resumeAccount: 'アカウントを再開',
|
||
pauseAccount: 'アカウントを一時停止',
|
||
quotaLoading: 'クォータ...',
|
||
quota: 'クォータ',
|
||
quotaUnavailable: 'クォータ上限を取得できません',
|
||
reauthNeeded: '再認証が必要',
|
||
failureLabelReauth: '再認証',
|
||
failureLabelWorkspace: 'ワークスペース',
|
||
failureLabelNoAccess: 'アクセス不可',
|
||
failureLabelRetry: '再試行',
|
||
failureLabelReconnect: '再接続',
|
||
failureLabelTemporary: '一時的',
|
||
failureLabelUnavailable: '利用不可',
|
||
failureHintReauth: 'このアカウントの認証フローをもう一度実行して更新してください。',
|
||
failureHintWorkspace:
|
||
'このアカウントをアクティブなワークスペースに戻してから、削除して再追加してください。',
|
||
failureHintNoAccess:
|
||
'このアカウントでは、プロバイダーのクォータエンドポイントにアクセスできません。',
|
||
failureHintRetry: 'しばらく待ってから、クォータリクエストを再試行してください。',
|
||
failureHintReconnect: '古いアカウントを削除し、再度認証してください。',
|
||
failureHintTemporary: '一時的な問題のようです。後でもう一度試してください。',
|
||
removeAndReadd: '削除して再追加',
|
||
autoRefreshFailed: '自動更新に失敗しました',
|
||
},
|
||
antigravityChecklist: {
|
||
title: 'Antigravity OAuth の責任確認',
|
||
subtitle: '認証する前に 4 ステップすべて完了してください。',
|
||
mandatory: '必須',
|
||
completion: '完了状況',
|
||
stepsCount: '{{current}}/4 ステップ',
|
||
},
|
||
accountSafetyWarning: {
|
||
title: 'OAuth アカウント安全性の警告',
|
||
subtitle: 'Issue #509 · Gemini + AGY OAuth リスク',
|
||
firstLine:
|
||
'Issue #509 では、CCS AGY と、CCS Gemini と CCS AGY 間での共有アカウント利用に関連する停止・BAN 報告がまとめられています。',
|
||
secondLine:
|
||
'OAuth とアカウントアクセスのリスクをすべて自己責任で負う場合のみ続行してください。',
|
||
issueLabel: 'Issue #509 を読む',
|
||
proxySettingsLabel: 'Gemini + AGY の設定: 設定 > プロキシ',
|
||
},
|
||
cliproxyDialog: {
|
||
name: '名前',
|
||
provider: 'プロバイダー',
|
||
account: 'アカウント',
|
||
accountOptional: 'アカウント(任意)',
|
||
model: 'モデル',
|
||
modelOptional: 'モデル(任意)',
|
||
defaultTarget: 'デフォルトターゲット',
|
||
defaultTier: 'デフォルトティア',
|
||
tierConfig: 'ティア設定',
|
||
selectProvider: 'プロバイダーを選択...',
|
||
useDefaultAccount: 'デフォルトのアカウントを使用',
|
||
defaultSuffix: '(デフォルト)',
|
||
opus: 'Opus',
|
||
sonnet: 'Sonnet',
|
||
haiku: 'Haiku',
|
||
claudeCode: 'Claude Code',
|
||
factoryDroid: 'Factory Droid',
|
||
cancel: 'キャンセル',
|
||
create: '作成',
|
||
creating: '作成中...',
|
||
saveChanges: '変更を保存',
|
||
saving: '保存中...',
|
||
placeholderName: 'my-gemini',
|
||
placeholderModel: 'gemini-2.5-pro',
|
||
placeholderComposite: 'my-composite',
|
||
placeholderModelId: 'model-id',
|
||
placeholderAccountId: 'account-id',
|
||
editCompositeTitle: '複合バリアントを編集: {{name}}',
|
||
editSingleTitle: '単一バリアントを編集: {{name}}',
|
||
},
|
||
profileEditor: {
|
||
profileInfo: 'プロファイル情報',
|
||
profileName: 'プロファイル名',
|
||
filePath: 'ファイルパス',
|
||
lastModified: '最終更新',
|
||
defaultTarget: 'デフォルトターゲット',
|
||
quickUsage: 'クイック実行',
|
||
runWithProfile: 'このプロファイルで実行',
|
||
runOnDroid: 'Droid で実行',
|
||
runOnDroidWithFlag: '--target で Droid 実行',
|
||
droidAliasExplicit: 'Droid エイリアス(明示)',
|
||
overrideToClaude: 'Claude に切り替え',
|
||
overrideToClaudeExplicit: 'Claude に切り替え(明示)',
|
||
targetHintPreferredAlias: '推奨の明示エイリアス:',
|
||
targetHintClaudeDefault: 'デフォルトコマンド:',
|
||
targetHintLegacyAlias: '従来ショートカットも利用可能:',
|
||
targetHintOverride: '実行ごとに次でも上書きできます',
|
||
setAsDefault: 'デフォルトに設定',
|
||
provider: 'プロバイダー',
|
||
custom: 'カスタム',
|
||
providerChooserHint:
|
||
'まずプリセットを選び、その後で URL、API Key、モデルマッピングを調整できます。',
|
||
featuredProviders: '注目のプロバイダー',
|
||
scrollHint: '画面が狭い場合は横にスクロールできます',
|
||
customEndpoint: 'カスタムエンドポイント',
|
||
morePresets: 'その他のプリセット',
|
||
customEndpointDescription: '空の Anthropic 互換 URL から始め、すべて手動で設定します。',
|
||
},
|
||
settings: {
|
||
sectionLoadFailed: 'セクションの読み込みに失敗しました',
|
||
unknownError: '不明なエラーが発生しました',
|
||
reloadPage: 'ページを再読み込み',
|
||
refresh: '更新',
|
||
copy: 'コピー',
|
||
copied: 'コピーしました',
|
||
saved: '保存しました',
|
||
loading: '読み込み中...',
|
||
configFileNotFound: '設定ファイルが見つかりません',
|
||
},
|
||
settingsTabs: {
|
||
web: 'Web検索',
|
||
env: '環境変数',
|
||
think: '思考',
|
||
proxy: 'プロキシ',
|
||
auth: '認証',
|
||
backup: 'バックアップ',
|
||
},
|
||
settingsAuth: {
|
||
failedFetchTokens: '認証トークンの取得に失敗しました',
|
||
failedSaveTokens: 'トークンの保存に失敗しました',
|
||
tokensUpdated: 'トークンを更新しました。反映するには CLIProxy を再起動してください。',
|
||
failedRegenerate: 'シークレットの再生成に失敗しました',
|
||
secretRegenerated:
|
||
'新しい Management Secret を生成しました。反映するには CLIProxy を再起動してください。',
|
||
failedReset: 'トークンのリセットに失敗しました',
|
||
tokensReset:
|
||
'トークンをデフォルトに戻しました。反映するには CLIProxy を再起動してください。',
|
||
description:
|
||
'CLIProxy の認証トークンを設定します。変更を反映するには CLIProxy の再起動が必要です。',
|
||
apiKey: 'API Key',
|
||
custom: 'カスタム',
|
||
apiKeyDesc: 'Claude Code が CLIProxy への認証に使用します',
|
||
apiKeyPlaceholder: 'API key',
|
||
managementSecret: 'Management Secret',
|
||
managementSecretDesc:
|
||
'CCS ダッシュボードが CLIProxy の管理 API にアクセスするために使用します',
|
||
managementSecretPlaceholder: 'Management secret',
|
||
generateSecret: '新しい安全なシークレットを生成',
|
||
resetDefaults: 'デフォルトに戻す',
|
||
resetDesc: 'API Key と Management Secret の両方をデフォルト値に戻します。',
|
||
saving: '保存中...',
|
||
save: '保存',
|
||
},
|
||
settingsGlobalEnv: {
|
||
description:
|
||
'Claude 以外のサブスクリプション型プロファイル(gemini、codex、agy、ghcp など)に注入する環境変数',
|
||
enabled: 'グローバル環境変数を有効化',
|
||
disabled: 'グローバル環境変数を無効化',
|
||
enabledDesc: '環境変数をサードパーティープロファイルに注入します',
|
||
disabledDesc: '環境変数は注入されません',
|
||
envVars: '環境変数',
|
||
noneConfigured: '環境変数は未設定です',
|
||
addNew: '変数を追加',
|
||
keyName: 'KEY_NAME',
|
||
value: '値',
|
||
add: '追加',
|
||
quickAdd: 'よく使う変数を追加',
|
||
allConfigured: '主要な変数はすべて設定済みです',
|
||
},
|
||
settingsBackups: {
|
||
failedFetch: 'バックアップの取得に失敗しました',
|
||
failedRestore: 'バックアップの復元に失敗しました',
|
||
restoreSuccess: 'バックアップを復元しました',
|
||
title: '設定バックアップ',
|
||
description:
|
||
'settings.json の以前のバージョンを復元します。設定を変更するとバックアップが自動作成されます。',
|
||
none: '利用できるバックアップはありません',
|
||
noneHint: '設定を変更すると、ここにバックアップが表示されます',
|
||
latest: '最新',
|
||
restoring: '復元中...',
|
||
restore: '復元',
|
||
restoreConfirmTitle: 'バックアップを復元しますか?',
|
||
restoreConfirmPrefix: '現在の設定を次のバックアップで置き換えます:',
|
||
restoreConfirmSuffix: 'この操作は元に戻せません。',
|
||
cancel: 'キャンセル',
|
||
},
|
||
settingsWebsearch: {
|
||
description:
|
||
'サードパーティープロファイル(gemini、codex、agy など)向けの CLI ベース Web 検索',
|
||
enabled: 'WebSearch を有効化',
|
||
disabled: 'WebSearch を無効化',
|
||
checking: '状態を確認中...',
|
||
providers: 'プロバイダー',
|
||
noneConfigured: 'プロバイダーが設定されていません',
|
||
noneConfiguredHint:
|
||
'Web 検索プロバイダーを有効にするには CLI ツールをインストールしてください',
|
||
checkProviders: 'プロバイダーを確認',
|
||
installed: 'インストール済み',
|
||
notInstalled: '未インストール',
|
||
model: 'モデル:',
|
||
howInstall: '{{name}} CLI のインストール方法',
|
||
installGlobally: 'グローバルにインストール',
|
||
requiresKey: '(xAI API Key が必要)',
|
||
freeTier: '(無料枠あり)',
|
||
viewDocs: 'ドキュメントを見る',
|
||
},
|
||
settingsProxy: {
|
||
failedLoadAgyMode: 'パワーユーザーモードの読み込みに失敗しました',
|
||
failedUpdateAgyMode: 'パワーユーザーモードの更新に失敗しました',
|
||
failedVerifyAgyMode: 'パワーユーザーモードの永続化確認に失敗しました',
|
||
notPersistedAgyMode:
|
||
'パワーユーザーモードが保存されませんでした。別のプロセスが設定を変更した可能性があります。',
|
||
agyModeEnabled: 'パワーユーザーモードを有効にしました。',
|
||
agyModeDisabled: 'パワーユーザーモードを無効にしました。',
|
||
typePhraseToContinue: '続行するには「{{value}}」と入力してください。',
|
||
description:
|
||
'プロキシベースのプロファイル用に、ローカルまたはリモートの {{backend}} 接続を設定します',
|
||
backendPlus: 'CLIProxy Plus',
|
||
backend: 'CLIProxy',
|
||
instanceStatus: 'インスタンス状態',
|
||
connectionMode: '接続モード',
|
||
local: 'ローカル',
|
||
remote: 'リモート',
|
||
localDesc: 'このマシンで {{backend}} バイナリを実行します',
|
||
remoteDesc: 'リモートの {{backend}} サーバーに接続します',
|
||
backendBinary: 'バックエンドバイナリ',
|
||
stopProxyToSwitch:
|
||
'バックエンドを切り替える前に、インスタンス状態から実行中のプロキシを停止してください。',
|
||
default: 'デフォルト',
|
||
plusDesc: 'Kiro と GitHub Copilot を含むすべてのプロバイダーをサポート',
|
||
originalDesc: '元のバイナリ(Gemini、Codex、Antigravity のみ)',
|
||
variantsIncompatible:
|
||
'既存の Kiro/Copilot バリアントは CLIProxyAPI では動作しません。CLIProxyAPIPlus に切り替えるか、それらのバリアントを削除してください。',
|
||
safety: '安全設定',
|
||
agyModeTitle: 'Antigravity + Gemini パワーユーザーモード',
|
||
agyModeDesc:
|
||
'アカウント追加画面の AGY 責任確認チェックと、Gemini ダッシュボードの入力確認をスキップします。',
|
||
agyWarning:
|
||
'OAuth の停止/BAN リスクパターン (#509) を十分理解している場合にのみ使用してください。CCS はアカウント喪失の責任を負いません。',
|
||
finalConfirm: '最終確認',
|
||
finalConfirmDesc:
|
||
'有効にすると、ダッシュボード / CLI の AGY 安全チェックと Gemini ダッシュボードのリスク文言確認をスキップします。続行する前に issue #509 を確認し、正確なフレーズを入力してください。',
|
||
step1: 'ステップ 1',
|
||
readIssue: 'Issue #509 を読む',
|
||
step2: 'ステップ 2',
|
||
typePrefix: '有効にするには',
|
||
typeSuffix: 'と入力してください。',
|
||
typePhraseAria:
|
||
'Antigravity + Gemini パワーユーザーモードを有効にするには I ACCEPT RISK と入力してください',
|
||
exactPhrase: '完全一致で入力してください。',
|
||
enableAgyMode: 'Antigravity + Gemini パワーユーザーモードを有効にする',
|
||
toggleAgyMode: 'Antigravity + Gemini パワーユーザーモードを切り替え',
|
||
fallbackSettings: 'フォールバック設定',
|
||
enableFallback: 'ローカルへのフォールバックを有効化',
|
||
enableFallbackDesc: 'リモートに接続できない場合はローカルプロキシを使用します',
|
||
autoStartLocal: 'ローカルプロキシを自動起動',
|
||
autoStartLocalDesc: 'フォールバック時にローカルプロキシを自動で起動します',
|
||
advanced: '詳細設定',
|
||
debugMode: 'デバッグモード',
|
||
debugModeDesc: 'ブラウザコンソールで開発者向け診断を有効にします',
|
||
debugModeEnabled:
|
||
'デバッグモードを有効にしました。詳細ログはブラウザコンソールを確認してください。',
|
||
localProxy: 'ローカルプロキシ',
|
||
port: 'ポート',
|
||
autoStart: '自動起動',
|
||
localAutoStartDesc: '必要になったらローカルプロキシを自動起動します',
|
||
remoteConfigTitle: 'リモートサーバー設定',
|
||
host: 'ホスト',
|
||
hostPlaceholder: '192.168.1.100 または proxy.example.com',
|
||
defaultPort: 'デフォルト: {{value}}',
|
||
portPlaceholder: '{{value}} を使う場合は空欄',
|
||
protocol: 'プロトコル',
|
||
http: 'HTTP',
|
||
https: 'HTTPS',
|
||
apiKeyOptional: 'API Key(任意)',
|
||
apiKeyPlaceholder: '/v1/* API エンドポイント用',
|
||
apiKeyDesc: '/v1/chat/completions への API リクエストで使用します',
|
||
managementKeyOptional: 'Management Key(任意)',
|
||
managementKeyPlaceholder: '/v0/management/* エンドポイント用',
|
||
managementKeyDesc:
|
||
'ダッシュボードの管理 API で使用します。未設定の場合は API Key を使用します。',
|
||
testing: 'テスト中...',
|
||
testConnection: '接続をテスト',
|
||
connectedLatency: '接続済み({{value}}ms)',
|
||
connectionFailed: '接続に失敗しました',
|
||
invalidPortOrEmpty:
|
||
'ポートは 1〜65535 の整数で入力するか、デフォルトを使う場合は空欄にしてください',
|
||
invalidLocalPort: 'ローカルポートは 1〜65535 の整数で指定してください',
|
||
backendPlusApi: 'CLIProxyAPIPlus',
|
||
backendApi: 'CLIProxyAPI',
|
||
},
|
||
settingsThinking: {
|
||
description: '対応モデルの高度な思考 / 推論設定を行います。',
|
||
supportedProviders: '対応プロバイダー',
|
||
modeTitle: '思考モード',
|
||
modeAutoDesc: 'モデルのティアに応じて思考レベルを自動設定します',
|
||
modeOffDesc: '高度な思考を無効化します',
|
||
modeManualDesc: '永続的な上書きレベルを設定するか、実行ごとに CLI フラグを使います',
|
||
tierDefaults: 'ティア別デフォルト',
|
||
tierDefaultsDesc: '自動モード時に各モデルティアへ適用する既定の思考レベルです。',
|
||
persistentOverride: '永続オーバーライド',
|
||
persistentOverrideDesc: 'すべてのセッションに適用されます。CLI フラグが優先されます。',
|
||
enterCustomBudget: 'カスタム予算を入力',
|
||
apply: '適用',
|
||
providerOverrides: 'プロバイダー別オーバーライド({{count}})',
|
||
providerOverridesDesc:
|
||
'特定のプロバイダーに対してティア別デフォルトを上書きします。必要に応じてカスタムのプロバイダーキーを追加してください。',
|
||
addProviderPlaceholder: 'プロバイダーキーを追加(例: qwen)',
|
||
showWarnings: '警告を表示',
|
||
showWarningsDesc: '思考値が制限または調整された場合に警告を表示します',
|
||
cliEnvOverride: 'CLI / 環境変数の上書き',
|
||
supportLine1Prefix: '思考予算:',
|
||
supportLine1Suffix: '(トークンベース)',
|
||
supportLine2Prefix: '推論強度:',
|
||
supportLine2SuffixPrefix: '(サフィックス、または ',
|
||
supportLine2SuffixPostfix: ': minimal/low/medium/high/xhigh)',
|
||
supportLine3Prefix: 'Codex のサフィックスは推論強度を固定します(例: ',
|
||
supportLine3Suffix: ')。サフィックスなしのモデルは思考モードを使います。',
|
||
},
|
||
analytics: {
|
||
title: '分析',
|
||
subtitle: '利用状況とインサイトを確認',
|
||
month: '月',
|
||
allTime: '全期間',
|
||
updated: '最終更新: {{value}}',
|
||
},
|
||
analyticsSummary: {
|
||
totalTokens: '総トークン数',
|
||
totalTokensSubtitle: '入力 {{input}} / 出力 {{output}}',
|
||
totalCost: '総コスト',
|
||
totalCostSubtitle: '1日平均 ${{value}}',
|
||
cacheTokens: 'キャッシュトークン',
|
||
cacheTokensSubtitle: '${{cost}}(コストの{{percent}}%)',
|
||
inputCost: '入力コスト',
|
||
outputCost: '出力コスト',
|
||
tokensSubtitle: '{{value}} トークン',
|
||
},
|
||
apiProfiles: {
|
||
title: 'API プロファイル',
|
||
new: '新規',
|
||
searchPlaceholder: 'プロファイルを検索...',
|
||
loadingProfiles: 'プロファイルを読み込み中...',
|
||
failedLoadTitle: 'プロファイルを読み込めませんでした',
|
||
failedLoadDesc: 'API プロファイルを取得できませんでした。もう一度お試しください。',
|
||
retry: '再試行',
|
||
noProfilesYet: 'API プロファイルがまだありません',
|
||
noProfilesDesc: '最初のプロファイルを作成して、カスタム API エンドポイントに接続します',
|
||
createProfile: 'プロファイルを作成',
|
||
noProfileMatch: '"{{query}}" に一致するプロファイルはありません',
|
||
profileCount: '{{count}} 件のプロファイル',
|
||
profileCount_other: '{{count}} 件のプロファイル',
|
||
configuredCount: '{{count}} 件設定済み',
|
||
deleteProfileTitle: 'プロファイルを削除',
|
||
deleteProfileDesc:
|
||
'"{{name}}" を削除しますか?設定ファイルも削除され、この操作は元に戻せません。',
|
||
delete: '削除',
|
||
unsavedChangesTitle: '未保存の変更',
|
||
unsavedChangesDesc:
|
||
'"{{current}}" に未保存の変更があります。破棄して "{{next}}" に切り替えますか?',
|
||
discardSwitch: '破棄して切り替え',
|
||
},
|
||
accountsPage: {
|
||
title: 'アカウント',
|
||
managePrefix: '一つの画面で',
|
||
manageSuffix: 'のアカウント管理とプール導線をまとめて扱えます。',
|
||
mobileManageSuffix: 'の継続性設定をまとめて管理できます。',
|
||
primaryActions: '主要アクション',
|
||
createAccount: 'アカウントを作成',
|
||
authClaudeInPool: 'Pool で Claude を認証',
|
||
openClaudePoolSettings: 'Claude Pool の設定を開く',
|
||
openCliProxyClaudePool: 'CLIProxy Claude Pool を開く',
|
||
migrationFollowup: '移行フォローアップ',
|
||
legacyContextPending: '{{count}} 件のアカウントで初回モード確認がまだ必要です。',
|
||
legacyContextPending_other: '{{count}} 件のアカウントで初回モード確認がまだ必要です。',
|
||
legacyContinuityPending: '{{count}} 件の共有アカウントが標準のレガシー継続深度のままです。',
|
||
legacyContinuityPending_other:
|
||
'{{count}} 件の共有アカウントが標準のレガシー継続深度のままです。',
|
||
confirmingLegacy: 'レガシーポリシーを確認中...',
|
||
confirmLegacy: 'レガシーポリシーを確認({{count}})',
|
||
noLegacyFollowup: '保留中のレガシーフォローアップはありません。',
|
||
continuityGuide: '継続性ガイド',
|
||
expandWhenNeeded: '必要なときだけ展開。',
|
||
sharedStandard: '共有標準',
|
||
sharedStandardDesc:
|
||
'プロジェクトワークスペースの同期のみ。ほとんどのチームに最適な既定値です。',
|
||
sharedDeeper: '共有拡張',
|
||
sharedDeeperDesc:
|
||
'session-env、file-history、shell-snapshots、todos も同期します。アカウント間再開を期待するなら推奨です。',
|
||
sharedDeeperPrefix: '追加で',
|
||
isolated: '分離',
|
||
isolatedDesc: 'リンクなし。厳密な分離に最適です。',
|
||
quickCommands: 'クイックコマンド',
|
||
quickCommandsDesc: 'コピーしてターミナルで実行します。',
|
||
workspaceBadge: 'ccs auth ワークスペース',
|
||
historySyncBadge: '履歴同期設定',
|
||
authAccounts: '認証アカウント',
|
||
tableScopePrefix: 'この表では',
|
||
tableScopeMiddle: 'のアカウントのみを表示します。モード/グループ/継続性の変更は',
|
||
tableScopeSuffix: 'を使ってください。',
|
||
accountMatrix: 'アカウント一覧',
|
||
sharedTotalDesc:
|
||
'共有アカウント合計: {{count}}。ここから同期設定とレガシー確認を行えます。',
|
||
loadingAccounts: 'アカウントを読み込み中...',
|
||
},
|
||
health: {
|
||
justNow: 'たった今',
|
||
secondsAgo: '{{count}}秒前',
|
||
minutesAgo: '{{count}}分前',
|
||
hoursAgo: '{{count}}時間前',
|
||
systemHealth: 'システムヘルス',
|
||
build: 'ビルド {{version}}',
|
||
lastScan: '最終スキャン:',
|
||
autoRefresh: '自動更新:',
|
||
refresh: '更新',
|
||
checks: 'チェック',
|
||
version: 'バージョン',
|
||
platform: 'プラットフォーム',
|
||
liveMonitoring: 'ライブ監視中',
|
||
copied: 'クリップボードにコピーしました',
|
||
refreshing: 'ヘルスチェックを更新中...',
|
||
fix: '修正',
|
||
applyFix: '修正を適用',
|
||
healthLabel: 'ヘルス',
|
||
},
|
||
updates: {
|
||
actionRequired: '対応が必要',
|
||
done: '完了',
|
||
all: 'すべて',
|
||
inboxTitle: '更新センター',
|
||
inboxSubtitle: '対応を優先し、その後で完了または非表示にします。',
|
||
needsAction: '要対応',
|
||
doneCount: '完了',
|
||
searchPlaceholder: '対応内容またはコマンドを検索',
|
||
noNotices: 'このビューに一致する通知はありません。',
|
||
noUpdates: '利用可能な更新はありません。',
|
||
published: '{{date}} 公開',
|
||
markDone: '完了にする',
|
||
dismiss: '非表示',
|
||
reopen: '再表示',
|
||
doNext: '次にやる',
|
||
impactedIntegrations: '影響を受ける連携',
|
||
impactedDesc: '更新範囲とルーティングに基づく関連領域です。',
|
||
whyMatters: '重要な理由',
|
||
whyMattersDesc: '長文のリリースノートではなく、要点だけを表示します。',
|
||
open: '開く',
|
||
progressNeedsAction: '要対応',
|
||
progressInReview: '確認中',
|
||
progressDone: '完了',
|
||
progressDismissed: '非表示',
|
||
statusNew: '新着',
|
||
statusStable: '安定',
|
||
statusPlanned: '予定',
|
||
dashboard: 'ダッシュボード',
|
||
cliUsage: 'CLI利用状況',
|
||
},
|
||
cliproxyPage: {
|
||
connected: '接続済み',
|
||
notConnected: '未接続',
|
||
variant: 'バリアント',
|
||
parentNotConnected: '親が未接続',
|
||
viaProvider: '{{provider}} 経由',
|
||
emptyTitle: 'CCS プロファイルマネージャー',
|
||
emptyDesc:
|
||
'CLIProxy プロバイダー向けの OAuth 認証、アカウント設定、モデル選択を管理します。CCS が各 AI バックエンドへのリクエストをどうルーティングするかを設定できます。',
|
||
emptyControlPanelPrefix: 'ライブ利用統計とリアルタイム監視は',
|
||
controlPanel: 'コントロールパネルで確認できます',
|
||
quickSetup: 'クイックセットアップ',
|
||
accountManagement: 'CCSレベルのアカウント管理',
|
||
providers: 'プロバイダー',
|
||
variants: 'バリアント',
|
||
providerCount: '{{count}} 件のプロバイダー',
|
||
providerCount_other: '{{count}} 件のプロバイダー',
|
||
connectedCount: '{{count}} 件接続済み',
|
||
variantDisplay: '{{name}}({{provider}} バリアント)',
|
||
},
|
||
copilotPage: {
|
||
title: 'Copilot',
|
||
subtitle: 'GitHub Copilot プロキシ',
|
||
setup: 'セットアップ',
|
||
auth: '認証',
|
||
daemon: 'デーモン',
|
||
unofficialTitle: '非公式API: 自己責任で利用してください',
|
||
unofficialItem1:
|
||
'リバースエンジニアリングされたAPIのため、いつでも動かなくなる可能性があります',
|
||
unofficialItem2: '過度な利用でアカウントに制限がかかる可能性があります',
|
||
unofficialItem3: 'CCSは保証も責任も負いません',
|
||
yes: 'はい',
|
||
no: 'いいえ',
|
||
installed: 'インストール済み',
|
||
missing: '未インストール',
|
||
integration: '連携',
|
||
enabled: '有効',
|
||
disabled: '無効',
|
||
github: 'GitHub',
|
||
connected: '接続済み',
|
||
notConnected: '未接続',
|
||
authenticate: '認証する',
|
||
authenticating: '認証中...',
|
||
status: 'ステータス',
|
||
running: '稼働中',
|
||
stopped: '停止',
|
||
port: 'ポート',
|
||
stopping: '停止中...',
|
||
stop: '停止',
|
||
starting: '起動中...',
|
||
start: '起動',
|
||
installing: 'インストール中...',
|
||
installCopilotApi: 'copilot-api をインストール',
|
||
proxy: 'プロキシ',
|
||
active: '有効',
|
||
inactive: '無効',
|
||
},
|
||
cursorPage: {
|
||
title: 'Cursor',
|
||
beta: 'ベータ',
|
||
subtitle: 'Cursor 専用の連携設定',
|
||
unofficialTitle: '非公式API - 自己責任で利用',
|
||
unofficialItem1:
|
||
'リバースエンジニアリング連携のため、いつでも利用不能になる可能性があります',
|
||
unofficialItem2: '不正利用や過度な利用により、アカウントが制限されるおそれがあります',
|
||
unofficialItem3: 'CCSは保証も責任も負いません',
|
||
integration: '連携',
|
||
authentication: '認証',
|
||
daemon: 'デーモン',
|
||
enabled: '有効',
|
||
disabled: '無効',
|
||
expired: '期限切れ',
|
||
connected: '接続済み',
|
||
notConnected: '未接続',
|
||
running: '稼働中',
|
||
stopped: '停止中',
|
||
actions: '操作',
|
||
disableIntegration: '連携を無効化',
|
||
enableIntegration: '連携を有効化',
|
||
autoDetectAuth: '認証を自動検出',
|
||
manualAuthImport: '認証情報を手動インポート',
|
||
stopDaemon: 'デーモンを停止',
|
||
startDaemon: 'デーモンを起動',
|
||
port: 'ポート',
|
||
configuration: 'Cursor設定',
|
||
lastModified: '最終更新:',
|
||
neverSaved: '未保存',
|
||
saving: '保存中...',
|
||
save: '保存',
|
||
modelConfig: 'モデル設定',
|
||
settings: '設定',
|
||
info: '情報',
|
||
presets: 'プリセット',
|
||
presetsDesc: '事前設定済みのモデルマッピングを適用します',
|
||
modelMapping: 'モデルマッピング',
|
||
modelMappingDesc: '各ティアで使うモデルを設定します',
|
||
defaultModel: 'デフォルトモデル',
|
||
defaultModelDesc: '特定のティア指定がない場合に使われます。',
|
||
opusModel: 'Opus(最高性能)',
|
||
opusModelDesc: '複雑な推論と最高品質の応答向け。',
|
||
sonnetModel: 'Sonnet(バランス)',
|
||
sonnetModelDesc: '一般的なコーディングや日常的なチャット向け。',
|
||
haikuModel: 'Haiku(高速)',
|
||
haikuModelDesc: '低レイテンシで軽量なリクエスト向け。',
|
||
runtimeSettings: 'ランタイム設定',
|
||
autoStartDaemon: 'デーモンを自動起動',
|
||
autoStartDesc: '連携使用時にCursorデーモンを自動で起動します。',
|
||
ghostMode: 'ゴーストモード',
|
||
ghostModeDesc: 'テレメトリ削減のため x-ghost-mode を要求します。',
|
||
provider: 'プロバイダー',
|
||
filePath: 'ファイルパス',
|
||
availableModels: '利用可能なモデル',
|
||
loadingModels: 'モデルを読み込み中...',
|
||
noModels: 'モデルメタデータはまだありません。デーモンを起動して更新してください。',
|
||
default: 'デフォルト',
|
||
rawConfiguration: '生の設定(JSON)',
|
||
manualImportTitle: 'Cursor 認証情報の手動インポート',
|
||
manualImportDesc:
|
||
'自動検出できない場合は、CursorのアクセストークンとマシンIDを入力してください。',
|
||
accessToken: 'アクセストークン',
|
||
accessTokenPlaceholder: 'Cursorのアクセストークンを貼り付け',
|
||
machineId: 'マシンID',
|
||
machineIdPlaceholder: '32文字の16進数(ハイフンなしUUID)',
|
||
cancel: 'キャンセル',
|
||
import: 'インポート',
|
||
selectModel: 'モデルを選択',
|
||
useDefaultModel: 'デフォルトモデルを使用',
|
||
availableModelCount: '利用可能なモデル({{count}})',
|
||
invalidPort: 'ポートは1から65535の整数で指定してください',
|
||
defaultModelRequired: 'デフォルトモデルは必須です',
|
||
savedConfig: 'Cursor設定とモデルマッピングを保存しました',
|
||
failedSaveConfig: '設定の保存に失敗しました',
|
||
modelsLoadingWait: 'モデルの読み込み中です。プリセットの適用前にしばらくお待ちください。',
|
||
noModelsAvailable:
|
||
'まだ利用可能なモデルがありません。先にデーモンを起動して更新してください。',
|
||
appliedCodexPreset: 'GPT-5.3 Codexプリセットを適用しました',
|
||
appliedClaudePreset: 'Claude 4.6プリセットを適用しました',
|
||
appliedGeminiPreset: 'Gemini 3プリセットを適用しました',
|
||
integrationEnabled: 'Cursor連携を有効化しました',
|
||
integrationDisabled: 'Cursor連携を無効化しました',
|
||
failedUpdateIntegration: '連携状態の更新に失敗しました',
|
||
credentialsImported: 'Cursor認証情報をインポートしました',
|
||
autoDetectFailed: '自動検出に失敗しました',
|
||
manualRequired: 'トークンとマシンIDは必須です',
|
||
manualImportFailed: '手動インポートに失敗しました',
|
||
failedStartDaemon: 'デーモンの起動に失敗しました',
|
||
daemonStarted: 'デーモンを起動しました',
|
||
daemonStartedWithPid: 'デーモンを起動しました(PID: {{pid}})',
|
||
failedStopDaemon: 'デーモンの停止に失敗しました',
|
||
daemonStopped: 'デーモンを停止しました',
|
||
rawLoading: '生の設定をまだ読み込み中です。しばらく待ってから再試行してください。',
|
||
invalidJson: 'JSONが不正です',
|
||
rawSaved: '生の設定を保存しました',
|
||
rawChanged: '生の設定が外部で変更されました。更新して再試行してください。',
|
||
failedSaveRaw: '生の設定の保存に失敗しました',
|
||
savedAll: 'Cursor設定を保存しました',
|
||
},
|
||
droidPage: {
|
||
loadingDiagnostics: 'Droid診断を読み込み中...',
|
||
failedDiagnostics: 'Droid診断の読み込みに失敗しました。',
|
||
overview: '概要',
|
||
byok: 'BYOK',
|
||
docs: 'ドキュメント',
|
||
runtimeInstall: 'ランタイムとインストール',
|
||
status: '状態',
|
||
detected: '検出済み',
|
||
notFound: '未検出',
|
||
detectionSource: '検出元',
|
||
binaryPath: 'バイナリパス',
|
||
installDirectory: 'インストール先',
|
||
version: 'バージョン',
|
||
overridePath: 'オーバーライド(CCS_DROID_PATH)',
|
||
configFiles: '設定ファイル',
|
||
path: 'パス',
|
||
resolved: '解決先',
|
||
size: 'サイズ',
|
||
lastModified: '最終更新',
|
||
parseWarning: '解析警告: {{value}}',
|
||
readWarning: '読み取り警告: {{value}}',
|
||
warnings: '警告',
|
||
byokSummary: 'BYOK概要',
|
||
activeModelSelector: '現在のモデルセレクター',
|
||
customModels: 'カスタムモデル',
|
||
ccsManaged: 'CCS管理',
|
||
userManaged: 'ユーザー管理',
|
||
malformedEntries: '不正なエントリ',
|
||
providers: 'プロバイダー',
|
||
none: 'なし',
|
||
customModelsTitle: 'カスタムモデル',
|
||
modelName: '名前 / モデル',
|
||
provider: 'プロバイダー',
|
||
baseUrl: 'ベース URL',
|
||
noCustomModels: 'カスタムモデルはありません',
|
||
docsAlignedNotes: 'ドキュメント整合メモ',
|
||
factoryDocs: 'Factory Docs',
|
||
providerFactCheckDocs: 'プロバイダー検証ドキュメント',
|
||
providerValues: 'プロバイダー値: {{value}}',
|
||
settingsHierarchy: '設定階層: {{value}}',
|
||
settingsTitle: 'Droid BYOK 設定',
|
||
fixJsonBeforeQuickSettings: 'クイック設定を使う前に JSON 構文を修正してください。',
|
||
fixJsonBeforeReasoning: 'BYOK 推論設定を更新する前に JSON 構文を修正してください。',
|
||
unableUpdateReasoning: '選択した BYOK モデルの推論設定を更新できません。',
|
||
fixJsonBeforeBudget: '思考予算を更新する前に JSON 構文を修正してください。',
|
||
anthropicOnlyBudget: '思考予算は Anthropic の BYOK モデルでのみ利用できます。',
|
||
invalidJson: 'JSON が不正です: {{value}}',
|
||
saved: 'Droid 設定を保存しました',
|
||
changedExternally: 'Droid 設定が外部で変更されました。更新して再試行してください。',
|
||
failedSave: 'Droid 設定の保存に失敗しました',
|
||
},
|
||
sharedPage: {
|
||
commands: 'コマンド',
|
||
skills: 'スキル',
|
||
agents: 'エージェント',
|
||
title: '共有データ',
|
||
subtitle: 'Claudeインスタンス間で共有されるコマンド、スキル、エージェント',
|
||
totalShared: '共有数',
|
||
visible: '表示中',
|
||
markdownDetail: 'Markdown詳細ビュー',
|
||
filterPrefix: 'フィルター:',
|
||
configurationRequired: '設定が必要です',
|
||
countsUnavailable: '件数を取得できません',
|
||
retryCounts: '件数を再取得',
|
||
filterPlaceholder: '{{tab}}を名前、説明、パスで絞り込み',
|
||
showing: '{{visible}} / {{total}} 件の{{tab}}を表示',
|
||
showingQuery: '(「{{query}}」で絞り込み)',
|
||
refreshing: '(更新中...)',
|
||
loadingShared: '共有{{tab}}を読み込み中...',
|
||
failedLoadShared: '共有{{tab}}の読み込みに失敗しました',
|
||
retry: '再試行',
|
||
noSharedFound:
|
||
'共有{{tab}}が見つかりません。`ccs sync` を実行するか、共有ディレクトリに項目を追加してください。',
|
||
noMatch: '{{tab}}で「{{query}}」に一致するものはありません。',
|
||
selectOne: '内容を表示する{{tab}}を選択してください。',
|
||
pathLabel: 'パス',
|
||
resolvedSource: '解決後ソース',
|
||
loadingMarkdown: 'Markdownコンテンツを読み込み中...',
|
||
failedLoadContent: 'コンテンツの読み込みに失敗しました',
|
||
retryContent: '再読み込み',
|
||
noMarkdown: 'Markdownコンテンツはありません。',
|
||
},
|
||
},
|
||
},
|
||
} as const;
|
||
|
||
if (!i18n.isInitialized) {
|
||
i18n.use(initReactI18next).init({
|
||
resources,
|
||
lng: getInitialLocale(),
|
||
fallbackLng: 'en',
|
||
interpolation: {
|
||
escapeValue: false,
|
||
},
|
||
});
|
||
}
|
||
|
||
export default i18n;
|