Files
cc-connect/core/i18n.go
T
2026-06-02 23:14:41 +08:00

3989 lines
223 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package core
import (
"fmt"
"sync"
)
// Language represents a supported language
type Language string
const (
LangAuto Language = "" // auto-detect from user messages
LangEnglish Language = "en"
LangChinese Language = "zh"
LangTraditionalChinese Language = "zh-TW"
LangJapanese Language = "ja"
LangSpanish Language = "es"
)
// I18n provides internationalized messages.
//
// All exported methods are safe to call from multiple goroutines: cc-connect
// fans out platform message handlers concurrently, all of which can call
// DetectAndSet (writes `detected`) and T / CurrentLang (read `lang`/`detected`)
// at the same time. Without the mutex `go test -race` flags real data races
// on the language fields.
type I18n struct {
mu sync.RWMutex
lang Language
detected Language
saveFunc func(Language) error
}
func NewI18n(lang Language) *I18n {
return &I18n{lang: lang}
}
func (i *I18n) SetSaveFunc(fn func(Language) error) {
i.mu.Lock()
defer i.mu.Unlock()
i.saveFunc = fn
}
func DetectLanguage(text string) Language {
for _, r := range text {
if isJapanese(r) {
return LangJapanese
}
}
for _, r := range text {
if isChinese(r) {
return LangChinese
}
}
if isSpanishHint(text) {
return LangSpanish
}
return LangEnglish
}
func isChinese(r rune) bool {
return (r >= 0x4E00 && r <= 0x9FFF) ||
(r >= 0x3400 && r <= 0x4DBF) ||
(r >= 0x20000 && r <= 0x2A6DF) ||
(r >= 0x2A700 && r <= 0x2B73F) ||
(r >= 0x2B740 && r <= 0x2B81F) ||
(r >= 0x2B820 && r <= 0x2CEAF) ||
(r >= 0xF900 && r <= 0xFAFF) ||
(r >= 0x2F800 && r <= 0x2FA1F)
}
func isJapanese(r rune) bool {
return (r >= 0x3040 && r <= 0x309F) || // Hiragana
(r >= 0x30A0 && r <= 0x30FF) || // Katakana
(r >= 0x31F0 && r <= 0x31FF) || // Katakana Phonetic Extensions
(r >= 0xFF65 && r <= 0xFF9F) // Half-width Katakana
}
// isSpanishHint checks for characters common in Spanish but not English (ñ, ¿, ¡, accented vowels).
func isSpanishHint(text string) bool {
for _, r := range text {
switch r {
case 'ñ', 'Ñ', '¿', '¡', 'á', 'é', 'í', 'ó', 'ú', 'ü':
return true
}
}
return false
}
func (i *I18n) DetectAndSet(text string) {
i.mu.RLock()
if i.lang != LangAuto {
i.mu.RUnlock()
return
}
currentDetected := i.detected
i.mu.RUnlock()
detected := DetectLanguage(text)
if currentDetected == detected {
return
}
i.mu.Lock()
// Re-check under the write lock — another goroutine may have updated
// i.detected between our RUnlock above and the Lock here.
if i.lang != LangAuto || i.detected == detected {
i.mu.Unlock()
return
}
i.detected = detected
saveFunc := i.saveFunc
i.mu.Unlock()
if saveFunc != nil {
if err := saveFunc(detected); err != nil {
fmt.Printf("failed to save language: %v\n", err)
}
}
}
func (i *I18n) currentLang() Language {
// Caller holds either no lock (most public methods take RLock and call
// this) or RLock; this helper just reads the protected fields. All
// public methods that call currentLang() acquire i.mu.RLock first.
if i.lang == LangAuto {
if i.detected != "" {
return i.detected
}
return LangEnglish
}
return i.lang
}
// CurrentLang returns the resolved language (exported for mode display).
func (i *I18n) CurrentLang() Language {
i.mu.RLock()
defer i.mu.RUnlock()
return i.currentLang()
}
// IsZhLike returns true for Simplified and Traditional Chinese.
func (i *I18n) IsZhLike() bool {
i.mu.RLock()
defer i.mu.RUnlock()
l := i.currentLang()
return l == LangChinese || l == LangTraditionalChinese
}
// SetLang overrides the language (disabling auto-detect).
func (i *I18n) SetLang(lang Language) {
i.mu.Lock()
defer i.mu.Unlock()
i.lang = lang
i.detected = ""
}
// Message keys
type MsgKey string
const (
MsgStarting MsgKey = "starting"
MsgThinking MsgKey = "thinking"
MsgTool MsgKey = "tool"
MsgToolResult MsgKey = "tool_result"
MsgToolResultFmtStatus MsgKey = "tool_result_fmt_status"
MsgToolResultFmtExit MsgKey = "tool_result_fmt_exit"
MsgToolResultFmtNoOutput MsgKey = "tool_result_fmt_no_output"
MsgToolResultFmtOk MsgKey = "tool_result_fmt_ok"
MsgToolResultFmtFailed MsgKey = "tool_result_fmt_failed"
MsgExecutionStopped MsgKey = "execution_stopped"
MsgNoExecution MsgKey = "no_execution"
MsgPreviousProcessing MsgKey = "previous_processing"
MsgQueueFull MsgKey = "queue_full"
MsgMessageQueued MsgKey = "message_queued"
MsgNoToolsAllowed MsgKey = "no_tools_allowed"
MsgCurrentTools MsgKey = "current_tools"
MsgCurrentSession MsgKey = "current_session"
MsgToolAuthNotSupported MsgKey = "tool_auth_not_supported"
MsgToolAllowFailed MsgKey = "tool_allow_failed"
MsgToolAllowedNew MsgKey = "tool_allowed_new"
MsgError MsgKey = "error"
MsgSessionNotFound MsgKey = "session_not_found"
MsgFailedToStartAgentSession MsgKey = "failed_to_start_agent_session"
MsgFailedToDeleteSession MsgKey = "failed_to_delete_session"
MsgEmptyResponse MsgKey = "empty_response"
MsgPermissionPrompt MsgKey = "permission_prompt"
MsgPermissionAllowed MsgKey = "permission_allowed"
MsgPermissionApproveAll MsgKey = "permission_approve_all"
MsgPermissionDenied MsgKey = "permission_denied_msg"
MsgPermissionHint MsgKey = "permission_hint"
MsgQuietOn MsgKey = "quiet_on"
MsgQuietOff MsgKey = "quiet_off"
MsgDisplayModeCompact MsgKey = "display_mode_compact"
MsgQuietGlobalOn MsgKey = "quiet_global_on"
MsgQuietGlobalOff MsgKey = "quiet_global_off"
MsgModeChanged MsgKey = "mode_changed"
MsgModeNotSupported MsgKey = "mode_not_supported"
MsgSessionRestarting MsgKey = "session_restarting"
MsgSessionNotStarted MsgKey = "session_not_started"
MsgUntitled MsgKey = "untitled"
MsgLangChanged MsgKey = "lang_changed"
MsgLangInvalid MsgKey = "lang_invalid"
MsgLangCurrent MsgKey = "lang_current"
MsgUnknownCommand MsgKey = "unknown_command"
MsgWelcome MsgKey = "welcome"
MsgHelp MsgKey = "message_help" // change from "help", which is used now for builtin command help
MsgHelpTitle MsgKey = "help_title"
MsgHelpSessionSection MsgKey = "help_session_section"
MsgHelpAgentSection MsgKey = "help_agent_section"
MsgHelpToolsSection MsgKey = "help_tools_section"
MsgHelpSystemSection MsgKey = "help_system_section"
MsgHelpTip MsgKey = "help_tip"
MsgListTitle MsgKey = "list_title"
MsgListTitlePaged MsgKey = "list_title_paged"
MsgListEmpty MsgKey = "list_empty"
MsgListMore MsgKey = "list_more"
MsgListPageHint MsgKey = "list_page_hint"
MsgListSwitchHint MsgKey = "list_switch_hint"
MsgListError MsgKey = "list_error"
MsgHistoryEmpty MsgKey = "history_empty"
MsgNameUsage MsgKey = "name_usage"
MsgNameSet MsgKey = "name_set"
MsgNameNoSession MsgKey = "name_no_session"
MsgProviderNotSupported MsgKey = "provider_not_supported"
MsgProviderNone MsgKey = "provider_none"
MsgProviderCurrent MsgKey = "provider_current"
MsgProviderListTitle MsgKey = "provider_list_title"
MsgProviderListEmpty MsgKey = "provider_list_empty"
MsgProviderSwitchHint MsgKey = "provider_switch_hint"
MsgProviderNotFound MsgKey = "provider_not_found"
MsgProviderSwitched MsgKey = "provider_switched"
MsgProviderCleared MsgKey = "provider_cleared"
MsgProviderAdded MsgKey = "provider_added"
MsgProviderAddUsage MsgKey = "provider_add_usage"
MsgProviderAddFailed MsgKey = "provider_add_failed"
MsgProviderRemoved MsgKey = "provider_removed"
MsgProviderRemoveFailed MsgKey = "provider_remove_failed"
MsgCardTitleProviderAdd MsgKey = "card_title_provider_add"
MsgProviderAddPickHint MsgKey = "provider_add_pick_hint"
MsgProviderAddOther MsgKey = "provider_add_other"
MsgProviderAddApiKeyPrompt MsgKey = "provider_add_api_key_prompt"
MsgProviderAddInviteHint MsgKey = "provider_add_invite_hint"
MsgProviderLinkGlobal MsgKey = "provider_link_global"
MsgProviderLinked MsgKey = "provider_linked"
MsgVoiceNotEnabled MsgKey = "voice_not_enabled"
MsgVoiceUsingPlatformRecognition MsgKey = "voice_using_platform_recognition"
MsgVoiceNoFFmpeg MsgKey = "voice_no_ffmpeg"
MsgVoiceTranscribing MsgKey = "voice_transcribing"
MsgVoiceTranscribed MsgKey = "voice_transcribed"
MsgVoiceTranscribeFailed MsgKey = "voice_transcribe_failed"
MsgVoiceEmpty MsgKey = "voice_empty"
MsgTTSNotEnabled MsgKey = "tts_not_enabled"
MsgTTSStatus MsgKey = "tts_status"
MsgTTSSwitched MsgKey = "tts_switched"
MsgTTSUsage MsgKey = "tts_usage"
MsgHeartbeatNotAvailable MsgKey = "heartbeat_not_available"
MsgHeartbeatStatus MsgKey = "heartbeat_status"
MsgHeartbeatPaused MsgKey = "heartbeat_paused"
MsgHeartbeatResumed MsgKey = "heartbeat_resumed"
MsgHeartbeatInterval MsgKey = "heartbeat_interval"
MsgHeartbeatTriggered MsgKey = "heartbeat_triggered"
MsgHeartbeatUsage MsgKey = "heartbeat_usage"
MsgHeartbeatInvalidMins MsgKey = "heartbeat_invalid_mins"
MsgCronNotAvailable MsgKey = "cron_not_available"
MsgCronUsage MsgKey = "cron_usage"
MsgCronAddUsage MsgKey = "cron_add_usage"
MsgCronAdded MsgKey = "cron_added"
MsgCronAddedExec MsgKey = "cron_added_exec"
MsgCronAddExecUsage MsgKey = "cron_addexec_usage"
MsgCronEmpty MsgKey = "cron_empty"
MsgCronListTitle MsgKey = "cron_list_title"
MsgCronListFooter MsgKey = "cron_list_footer"
MsgCronDelUsage MsgKey = "cron_del_usage"
MsgCronDeleted MsgKey = "cron_deleted"
MsgCronNotFound MsgKey = "cron_not_found"
MsgCronEnabled MsgKey = "cron_enabled"
MsgCronDisabled MsgKey = "cron_disabled"
MsgCronMuted MsgKey = "cron_muted"
MsgCronUnmuted MsgKey = "cron_unmuted"
MsgCronCardHint MsgKey = "cron_card_hint"
MsgCronNextShort MsgKey = "cron_next_short"
MsgCronLastShort MsgKey = "cron_last_short"
MsgCronBtnEnable MsgKey = "cron_btn_enable"
MsgCronBtnDisable MsgKey = "cron_btn_disable"
MsgCronBtnMute MsgKey = "cron_btn_mute"
MsgCronBtnUnmute MsgKey = "cron_btn_unmute"
MsgCronBtnDelete MsgKey = "cron_btn_delete"
MsgStatusTitle MsgKey = "status_title"
MsgReplyFooterRemaining MsgKey = "reply_footer_remaining"
MsgModelCurrent MsgKey = "model_current"
MsgModelChanged MsgKey = "model_changed"
MsgModelChangeFailed MsgKey = "model_change_failed"
MsgModelCardSwitching MsgKey = "model_card_switching"
MsgModelCardSwitched MsgKey = "model_card_switched"
MsgModelCardSwitchFailed MsgKey = "model_card_switch_failed"
MsgModelNotSupported MsgKey = "model_not_supported"
MsgReasoningCurrent MsgKey = "reasoning_current"
MsgReasoningChanged MsgKey = "reasoning_changed"
MsgReasoningNotSupported MsgKey = "reasoning_not_supported"
MsgCompressNotSupported MsgKey = "compress_not_supported"
MsgCompressing MsgKey = "compressing"
MsgCompressNoSession MsgKey = "compress_no_session"
MsgCompressDone MsgKey = "compress_done"
MsgMemoryNotSupported MsgKey = "memory_not_supported"
MsgMemoryShowProject MsgKey = "memory_show_project"
MsgMemoryShowGlobal MsgKey = "memory_show_global"
MsgMemoryEmpty MsgKey = "memory_empty"
MsgMemoryAdded MsgKey = "memory_added"
MsgMemoryAddFailed MsgKey = "memory_add_failed"
MsgMemoryAddUsage MsgKey = "memory_add_usage"
MsgUsageNotSupported MsgKey = "usage_not_supported"
MsgUsageFetchFailed MsgKey = "usage_fetch_failed"
// Inline strings previously hardcoded in engine.go
MsgStatusMode MsgKey = "status_mode"
MsgStatusSession MsgKey = "status_session"
MsgStatusCron MsgKey = "status_cron"
MsgStatusThinkingMessages MsgKey = "status_thinking_messages"
MsgStatusToolMessages MsgKey = "status_tool_messages"
MsgStatusSessionKey MsgKey = "status_session_key"
MsgStatusAgentSID MsgKey = "status_agent_sid"
MsgStatusUserID MsgKey = "status_user_id"
MsgEnabledShort MsgKey = "enabled_short"
MsgDisabledShort MsgKey = "disabled_short"
MsgModelDefault MsgKey = "model_default"
MsgModelListTitle MsgKey = "model_list_title"
MsgModelUsage MsgKey = "model_usage"
MsgReasoningDefault MsgKey = "reasoning_default"
MsgReasoningListTitle MsgKey = "reasoning_list_title"
MsgReasoningUsage MsgKey = "reasoning_usage"
MsgReasoningSelectPlaceholder MsgKey = "reasoning_select_placeholder"
MsgModeUsage MsgKey = "mode_usage"
MsgLangSelectPlaceholder MsgKey = "lang_select_placeholder"
MsgModelSelectPlaceholder MsgKey = "model_select_placeholder"
MsgModeSelectPlaceholder MsgKey = "mode_select_placeholder"
MsgProviderSelectPlaceholder MsgKey = "provider_select_placeholder"
MsgProviderClearOption MsgKey = "provider_clear_option"
MsgCardBack MsgKey = "card_back"
MsgCardPrev MsgKey = "card_prev"
MsgCardNext MsgKey = "card_next"
MsgCardTitleStatus MsgKey = "card_title_status"
MsgCardTitleLanguage MsgKey = "card_title_language"
MsgCardTitleModel MsgKey = "card_title_model"
MsgCardTitleReasoning MsgKey = "card_title_reasoning"
MsgCardTitleMode MsgKey = "card_title_mode"
MsgCardTitleSessions MsgKey = "card_title_sessions"
MsgCardTitleSessionsPaged MsgKey = "card_title_sessions_paged"
MsgCardTitleCurrentSession MsgKey = "card_title_current_session"
MsgCardTitleHistory MsgKey = "card_title_history"
MsgCardTitleHistoryLast MsgKey = "card_title_history_last"
MsgCardTitleProvider MsgKey = "card_title_provider"
MsgCardTitleCron MsgKey = "card_title_cron"
MsgCardTitleHeartbeat MsgKey = "card_title_heartbeat"
MsgCardTitleCommands MsgKey = "card_title_commands"
MsgCardTitleAlias MsgKey = "card_title_alias"
MsgCardTitleConfig MsgKey = "card_title_config"
MsgCardTitleSkills MsgKey = "card_title_skills"
MsgCardTitleDoctor MsgKey = "card_title_doctor"
MsgCardTitleVersion MsgKey = "card_title_version"
MsgCardTitleUpgrade MsgKey = "card_title_upgrade"
MsgListItem MsgKey = "list_item"
MsgListEmptySummary MsgKey = "list_empty_summary"
MsgCronIDLabel MsgKey = "cron_id_label"
MsgCronFailedSuffix MsgKey = "cron_failed_suffix"
MsgCommandsTagAgent MsgKey = "commands_tag_agent"
MsgCommandsTagShell MsgKey = "commands_tag_shell"
MsgUpgradeTimeoutSuffix MsgKey = "upgrade_timeout_suffix"
MsgCronScheduleLabel MsgKey = "cron_schedule_label"
MsgCronNextRunLabel MsgKey = "cron_next_run_label"
MsgCronLastRunLabel MsgKey = "cron_last_run_label"
MsgPermBtnAllow MsgKey = "perm_btn_allow"
MsgPermBtnDeny MsgKey = "perm_btn_deny"
MsgPermBtnAllowAll MsgKey = "perm_btn_allow_all"
MsgPermCardTitle MsgKey = "perm_card_title"
MsgPermCardBody MsgKey = "perm_card_body"
MsgPermCardNote MsgKey = "perm_card_note"
MsgAskQuestionTitle MsgKey = "ask_question_title"
MsgAskQuestionNote MsgKey = "ask_question_note"
MsgAskQuestionMulti MsgKey = "ask_question_multi"
MsgAskQuestionPrompt MsgKey = "ask_question_prompt"
MsgAskQuestionAnswered MsgKey = "ask_question_answered"
MsgCommandsTitle MsgKey = "commands_title"
MsgCommandsEmpty MsgKey = "commands_empty"
MsgCommandsHint MsgKey = "commands_hint"
MsgCommandsUsage MsgKey = "commands_usage"
MsgCommandsAddUsage MsgKey = "commands_add_usage"
MsgCommandsAddExecUsage MsgKey = "commands_addexec_usage"
MsgCommandsAdded MsgKey = "commands_added"
MsgCommandsExecAdded MsgKey = "commands_exec_added"
MsgCommandsAddExists MsgKey = "commands_add_exists"
MsgCommandsDelUsage MsgKey = "commands_del_usage"
MsgCommandsDeleted MsgKey = "commands_deleted"
MsgCommandsNotFound MsgKey = "commands_not_found"
MsgCommandExecTimeout MsgKey = "command_exec_timeout"
MsgCommandExecError MsgKey = "command_exec_error"
MsgCommandExecSuccess MsgKey = "command_exec_success"
MsgSkillsTitle MsgKey = "skills_title"
MsgSkillsEmpty MsgKey = "skills_empty"
MsgSkillsHint MsgKey = "skills_hint"
MsgSkillsTelegramMenuHint MsgKey = "skills_telegram_menu_hint"
MsgConfigTitle MsgKey = "config_title"
MsgConfigHint MsgKey = "config_hint"
MsgConfigGetUsage MsgKey = "config_get_usage"
MsgConfigSetUsage MsgKey = "config_set_usage"
MsgConfigUpdated MsgKey = "config_updated"
MsgConfigKeyNotFound MsgKey = "config_key_not_found"
MsgConfigReloaded MsgKey = "config_reloaded"
MsgDoctorRunning MsgKey = "doctor_running"
MsgDoctorTitle MsgKey = "doctor_title"
MsgDoctorSummary MsgKey = "doctor_summary"
MsgRestarting MsgKey = "restarting"
MsgRestartSuccess MsgKey = "restart_success"
MsgUpgradeChecking MsgKey = "upgrade_checking"
MsgUpgradeUpToDate MsgKey = "upgrade_up_to_date"
MsgUpgradeAvailable MsgKey = "upgrade_available"
MsgUpgradeDownloading MsgKey = "upgrade_downloading"
MsgUpgradeSuccess MsgKey = "upgrade_success"
MsgUpgradeDevBuild MsgKey = "upgrade_dev_build"
MsgWebNotSupported MsgKey = "web_not_supported"
MsgWebNotEnabled MsgKey = "web_not_enabled"
MsgWebSetupSuccess MsgKey = "web_setup_success"
MsgWebNeedRestart MsgKey = "web_need_restart"
MsgWebStatus MsgKey = "web_status"
MsgAliasEmpty MsgKey = "alias_empty"
MsgAliasListHeader MsgKey = "alias_list_header"
MsgAliasAdded MsgKey = "alias_added"
MsgAliasDeleted MsgKey = "alias_deleted"
MsgAliasNotFound MsgKey = "alias_not_found"
MsgAliasUsage MsgKey = "alias_usage"
MsgNewSessionCreated MsgKey = "new_session_created"
MsgNewSessionCreatedName MsgKey = "new_session_created_name"
MsgSessionAutoResetIdle MsgKey = "session_auto_reset_idle"
MsgSessionClosingGraceful MsgKey = "session_closing_graceful"
MsgDeleteUsage MsgKey = "delete_usage"
MsgDeleteSuccess MsgKey = "delete_success"
MsgDeleteActiveDenied MsgKey = "delete_active_denied"
MsgDeleteNotSupported MsgKey = "delete_not_supported"
MsgDeleteModeTitle MsgKey = "delete_mode_title"
MsgDeleteModeSelect MsgKey = "delete_mode_select"
MsgDeleteModeSelected MsgKey = "delete_mode_selected"
MsgDeleteModeSelectedCount MsgKey = "delete_mode_selected_count"
MsgDeleteModeDeleteSelected MsgKey = "delete_mode_delete_selected"
MsgDeleteModeCancel MsgKey = "delete_mode_cancel"
MsgDeleteModeConfirmTitle MsgKey = "delete_mode_confirm_title"
MsgDeleteModeConfirmButton MsgKey = "delete_mode_confirm_button"
MsgDeleteModeBackButton MsgKey = "delete_mode_back_button"
MsgDeleteModeEmptySelection MsgKey = "delete_mode_empty_selection"
MsgDeleteModeResultTitle MsgKey = "delete_mode_result_title"
MsgDeleteModeDeletingTitle MsgKey = "delete_mode_deleting_title"
MsgDeleteModeDeletingBody MsgKey = "delete_mode_deleting_body"
MsgDeleteModeMissingSession MsgKey = "delete_mode_missing_session"
MsgSwitchSuccess MsgKey = "switch_success"
MsgSwitchNoMatch MsgKey = "switch_no_match"
MsgSwitchNoSession MsgKey = "switch_no_session"
MsgCommandTimeout MsgKey = "command_timeout"
MsgBannedWordBlocked MsgKey = "banned_word_blocked"
MsgCommandDisabled MsgKey = "command_disabled"
MsgAdminRequired MsgKey = "admin_required"
MsgRateLimited MsgKey = "rate_limited"
MsgPsSent MsgKey = "ps_sent"
MsgPsSendFailed MsgKey = "ps_send_failed"
MsgPsEmpty MsgKey = "ps_empty"
MsgPsNoSession MsgKey = "ps_no_session"
MsgWhoamiTitle MsgKey = "whoami_title"
MsgWhoamiCardTitle MsgKey = "whoami_card_title"
MsgWhoamiName MsgKey = "whoami_name"
MsgWhoamiPlatform MsgKey = "whoami_platform"
MsgWhoamiUsage MsgKey = "whoami_usage"
MsgRelayNoBinding MsgKey = "relay_no_binding"
MsgRelayBound MsgKey = "relay_bound"
MsgRelayBindRemoved MsgKey = "relay_bind_removed"
MsgRelayBindNotFound MsgKey = "relay_bind_not_found"
MsgRelayBindSuccess MsgKey = "relay_bind_success"
MsgRelayUsage MsgKey = "relay_usage"
MsgRelayNotAvailable MsgKey = "relay_not_available"
MsgRelayUnbound MsgKey = "relay_unbound"
MsgRelayBindSelf MsgKey = "relay_bind_self"
MsgRelayNotFound MsgKey = "relay_not_found"
MsgRelayNoTarget MsgKey = "relay_no_target"
MsgRelaySetupHint MsgKey = "relay_setup_hint"
MsgRelaySetupOK MsgKey = "relay_setup_ok"
MsgRelaySetupExists MsgKey = "relay_setup_exists"
MsgRelaySetupNoMemory MsgKey = "relay_setup_no_memory"
MsgSetupNative MsgKey = "setup_native"
MsgCronSetupOK MsgKey = "cron_setup_ok"
MsgSearchUsage MsgKey = "search_usage"
MsgSearchError MsgKey = "search_error"
MsgSearchNoResult MsgKey = "search_no_result"
MsgSearchResult MsgKey = "search_result"
MsgSearchHint MsgKey = "search_hint"
MsgBuiltinCmdNew MsgKey = "new"
MsgBuiltinCmdList MsgKey = "list"
MsgBuiltinCmdSearch MsgKey = "search"
MsgBuiltinCmdSwitch MsgKey = "switch"
MsgBuiltinCmdDelete MsgKey = "delete"
MsgBuiltinCmdName MsgKey = "name"
MsgBuiltinCmdCurrent MsgKey = "current"
MsgBuiltinCmdHistory MsgKey = "history"
MsgBuiltinCmdProvider MsgKey = "provider"
MsgBuiltinCmdMemory MsgKey = "memory"
MsgBuiltinCmdAllow MsgKey = "allow"
MsgBuiltinCmdModel MsgKey = "model"
MsgBuiltinCmdReasoning MsgKey = "reasoning"
MsgBuiltinCmdMode MsgKey = "mode"
MsgBuiltinCmdLang MsgKey = "lang"
MsgBuiltinCmdQuiet MsgKey = "quiet"
MsgBuiltinCmdCompress MsgKey = "compress"
MsgBuiltinCmdStop MsgKey = "stop"
MsgBuiltinCmdCron MsgKey = "cron"
MsgBuiltinCmdCommands MsgKey = "commands"
MsgBuiltinCmdAlias MsgKey = "alias"
MsgBuiltinCmdSkills MsgKey = "skills"
MsgBuiltinCmdConfig MsgKey = "config"
MsgBuiltinCmdDoctor MsgKey = "doctor"
MsgBuiltinCmdUpgrade MsgKey = "upgrade"
MsgBuiltinCmdRestart MsgKey = "restart"
MsgBuiltinCmdStatus MsgKey = "status"
MsgBuiltinCmdUsage MsgKey = "usage"
MsgBuiltinCmdVersion MsgKey = "version"
MsgBuiltinCmdHelp MsgKey = "help"
MsgBuiltinCmdBind MsgKey = "bind"
MsgBuiltinCmdShell MsgKey = "shell"
MsgBuiltinCmdDir MsgKey = "dir"
MsgBuiltinCmdDiff MsgKey = "diff"
MsgBuiltinCmdPs MsgKey = "ps"
MsgDiffEmpty MsgKey = "diff_empty"
MsgDiffNoDiff2HTML MsgKey = "diff_no_diff2html"
MsgDirChanged MsgKey = "dir_changed"
MsgDirCurrent MsgKey = "dir_current"
MsgDirReset MsgKey = "dir_reset"
MsgDirUsage MsgKey = "dir_usage"
MsgDirNotSupported MsgKey = "dir_not_supported"
MsgDirInvalidPath MsgKey = "dir_invalid_path"
MsgDirHistoryTitle MsgKey = "dir_history_title"
MsgDirHistoryHint MsgKey = "dir_history_hint"
MsgDirInvalidIndex MsgKey = "dir_invalid_index"
MsgDirNoHistory MsgKey = "dir_no_history"
MsgDirNoPrevious MsgKey = "dir_no_previous"
MsgDirCardTitle MsgKey = "dir_card_title"
MsgDirCardPageHint MsgKey = "dir_card_page_hint"
MsgDirCardEmptyHistory MsgKey = "dir_card_empty_history"
MsgDirCardReset MsgKey = "dir_card_reset"
MsgDirCardPrev MsgKey = "dir_card_prev"
MsgShow MsgKey = "show"
MsgShowUsage MsgKey = "show_usage"
MsgShowParseError MsgKey = "show_parse_error"
MsgShowNotFound MsgKey = "show_not_found"
MsgShowDirWithLocation MsgKey = "show_dir_with_location"
MsgShowReadFailed MsgKey = "show_read_failed"
// Multi-workspace messages
MsgWsNotEnabled MsgKey = "ws_not_enabled"
MsgWsNoBinding MsgKey = "ws_no_binding"
MsgWsInfo MsgKey = "ws_info"
MsgWsInfoShared MsgKey = "ws_info_shared"
MsgWsUsage MsgKey = "ws_usage"
MsgWsInitUsage MsgKey = "ws_init_usage"
MsgWsBindUsage MsgKey = "ws_bind_usage"
MsgWsBindSuccess MsgKey = "ws_bind_success"
MsgWsBindNotFound MsgKey = "ws_bind_not_found"
MsgWsRouteUsage MsgKey = "ws_route_usage"
MsgWsRouteSuccess MsgKey = "ws_route_success"
MsgWsRouteAbsoluteRequired MsgKey = "ws_route_absolute_required"
MsgWsRouteNotFound MsgKey = "ws_route_not_found"
MsgWsRouteNotDirectory MsgKey = "ws_route_not_directory"
MsgWsUnbindSuccess MsgKey = "ws_unbind_success"
MsgWsListEmpty MsgKey = "ws_list_empty"
MsgWsListTitle MsgKey = "ws_list_title"
MsgWsSharedNoBinding MsgKey = "ws_shared_no_binding"
MsgWsSharedUsage MsgKey = "ws_shared_usage"
MsgWsSharedBindSuccess MsgKey = "ws_shared_bind_success"
MsgWsSharedRouteSuccess MsgKey = "ws_shared_route_success"
MsgWsSharedUnbindSuccess MsgKey = "ws_shared_unbind_success"
MsgWsSharedListEmpty MsgKey = "ws_shared_list_empty"
MsgWsSharedListTitle MsgKey = "ws_shared_list_title"
MsgWsSharedOnlyHint MsgKey = "ws_shared_only_hint"
MsgWsNotFoundHint MsgKey = "ws_not_found_hint"
MsgWsNotFoundHintGitOnly MsgKey = "ws_not_found_hint_git_only"
MsgWsResolutionError MsgKey = "ws_resolution_error"
MsgWsCloneProgress MsgKey = "ws_clone_progress"
MsgWsCloneSuccess MsgKey = "ws_clone_success"
MsgWsCloneFailed MsgKey = "ws_clone_failed"
MsgWsInitDirNotFound MsgKey = "ws_init_dir_not_found"
MsgWsInitInvalidTarget MsgKey = "ws_init_invalid_target"
MsgWsInitLocalPathsDisabled MsgKey = "ws_init_local_paths_disabled"
MsgBackgroundAutoDenied MsgKey = "background_auto_denied"
)
var messages = map[MsgKey]map[Language]string{
MsgStarting: {
LangEnglish: "⏳ Processing...",
LangChinese: "⏳ 处理中...",
LangTraditionalChinese: "⏳ 處理中...",
LangJapanese: "⏳ 処理中...",
LangSpanish: "⏳ Procesando...",
},
MsgThinking: {
LangEnglish: "💭 %s",
LangChinese: "💭 %s",
},
MsgTool: {
LangEnglish: "🔧 **Tool #%d: %s**\n---\n%s",
LangChinese: "🔧 **工具 #%d: %s**\n---\n%s",
LangTraditionalChinese: "🔧 **工具 #%d: %s**\n---\n%s",
LangJapanese: "🔧 **ツール #%d: %s**\n---\n%s",
LangSpanish: "🔧 **Herramienta #%d: %s**\n---\n%s",
},
MsgToolResult: {
LangEnglish: "📤 **%s**\n---\n%s",
LangChinese: "📤 **%s**\n---\n%s",
LangTraditionalChinese: "📤 **%s**\n---\n%s",
LangJapanese: "📤 **%s**\n---\n%s",
LangSpanish: "📤 **%s**\n---\n%s",
},
MsgToolResultFmtStatus: {
LangEnglish: "Status",
LangChinese: "状态",
LangTraditionalChinese: "狀態",
LangJapanese: "ステータス",
LangSpanish: "Estado",
},
MsgToolResultFmtExit: {
LangEnglish: "Exit",
LangChinese: "退出码",
LangTraditionalChinese: "結束代碼",
LangJapanese: "終了コード",
LangSpanish: "Salida",
},
MsgToolResultFmtNoOutput: {
LangEnglish: "No output",
LangChinese: "无输出",
LangTraditionalChinese: "無輸出",
LangJapanese: "出力なし",
LangSpanish: "Sin salida",
},
MsgToolResultFmtOk: {
LangEnglish: "ok",
LangChinese: "ok",
LangTraditionalChinese: "ok",
LangJapanese: "ok",
LangSpanish: "ok",
},
MsgToolResultFmtFailed: {
LangEnglish: "failed",
LangChinese: "failed",
LangTraditionalChinese: "failed",
LangJapanese: "failed",
LangSpanish: "fallido",
},
MsgExecutionStopped: {
LangEnglish: "⏹ Execution stopped.",
LangChinese: "⏹ 执行已停止。",
LangTraditionalChinese: "⏹ 執行已停止。",
LangJapanese: "⏹ 実行を停止しました。",
LangSpanish: "⏹ Ejecución detenida.",
},
MsgNoExecution: {
LangEnglish: "No execution in progress.",
LangChinese: "没有正在执行的任务。",
LangTraditionalChinese: "沒有正在執行的任務。",
LangJapanese: "実行中のタスクはありません。",
LangSpanish: "No hay ejecución en progreso.",
},
MsgPreviousProcessing: {
LangEnglish: "⏳ Previous request still processing. Use `/ps <message>` to send a P.S. to the running task.",
LangChinese: "⏳ 上一个请求仍在处理中。使用 `/ps <消息>` 可向正在执行的任务追加补充信息。",
LangTraditionalChinese: "⏳ 上一個請求仍在處理中。使用 `/ps <訊息>` 可向正在執行的任務追加補充資訊。",
LangJapanese: "⏳ 前のリクエストを処理中です。`/ps <メッセージ>` で実行中のタスクに補足情報を送れます。",
LangSpanish: "⏳ La solicitud anterior aún se está procesando. Use `/ps <mensaje>` para enviar un P.S. a la tarea en curso.",
},
MsgMessageQueued: {
LangEnglish: "📬 Message received — will process after the current task finishes.",
LangChinese: "📬 消息已收到,将在当前任务完成后处理。",
LangTraditionalChinese: "📬 訊息已收到,將在目前任務完成後處理。",
LangJapanese: "📬 メッセージを受信しました。現在のタスク完了後に処理します。",
LangSpanish: "📬 Mensaje recibido — se procesará después de que termine la tarea actual.",
},
MsgQueueFull: {
LangEnglish: "📬 Message queue is full (%d pending). Please wait for current tasks to complete.",
LangChinese: "📬 消息队列已满(%d 条待处理)。请等待当前任务完成。",
LangTraditionalChinese: "📬 訊息佇列已滿(%d 則待處理)。請等待目前任務完成。",
LangJapanese: "📬 メッセージキューが満杯です(%d 件待ち)。現在のタスク完了をお待ちください。",
LangSpanish: "📬 La cola de mensajes está llena (%d pendientes). Espere a que las tareas actuales se completen.",
},
MsgNoToolsAllowed: {
LangEnglish: "No tools pre-allowed.\nUsage: `/allow <tool_name>`\nExample: `/allow Bash`",
LangChinese: "尚未预授权任何工具。\n用法: `/allow <工具名>`\n示例: `/allow Bash`",
LangTraditionalChinese: "尚未預授權任何工具。\n用法: `/allow <工具名>`\n範例: `/allow Bash`",
LangJapanese: "事前許可されたツールはありません。\n使い方: `/allow <ツール名>`\n例: `/allow Bash`",
LangSpanish: "No hay herramientas pre-autorizadas.\nUso: `/allow <nombre_herramienta>`\nEjemplo: `/allow Bash`",
},
MsgCurrentTools: {
LangEnglish: "Pre-allowed tools: %s",
LangChinese: "预授权的工具: %s",
LangTraditionalChinese: "預授權的工具: %s",
LangJapanese: "事前許可済みツール: %s",
LangSpanish: "Herramientas pre-autorizadas: %s",
},
MsgCurrentSession: {
LangEnglish: "📌 Current session\nName: %s\nSession ID: %s\nLocal messages: %d",
LangChinese: "📌 当前会话\n名称: %s\n会话 ID: %s\n本地消息数: %d",
LangTraditionalChinese: "📌 目前工作階段\n名稱: %s\n工作階段 ID: %s\n本機訊息數: %d",
LangJapanese: "📌 現在のセッション\n名前: %s\nセッション ID: %s\nローカルメッセージ数: %d",
LangSpanish: "📌 Sesión actual\nNombre: %s\nID de sesión: %s\nMensajes locales: %d",
},
MsgToolAuthNotSupported: {
LangEnglish: "This agent does not support tool authorization.",
LangChinese: "此代理不支持工具授权。",
LangTraditionalChinese: "此代理不支援工具授權。",
LangJapanese: "このエージェントはツール認可をサポートしていません。",
LangSpanish: "Este agente no soporta la autorización de herramientas.",
},
MsgToolAllowFailed: {
LangEnglish: "Failed to allow tool: %v",
LangChinese: "授权工具失败: %v",
LangTraditionalChinese: "授權工具失敗: %v",
LangJapanese: "ツール許可に失敗しました: %v",
LangSpanish: "Error al autorizar herramienta: %v",
},
MsgToolAllowedNew: {
LangEnglish: "✅ Tool `%s` pre-allowed. Takes effect on next session.",
LangChinese: "✅ 工具 `%s` 已预授权。将在下次会话生效。",
LangTraditionalChinese: "✅ 工具 `%s` 已預授權。將在下次會話生效。",
LangJapanese: "✅ ツール `%s` を事前許可しました。次のセッションから有効になります。",
LangSpanish: "✅ Herramienta `%s` pre-autorizada. Se aplicará en la próxima sesión.",
},
MsgError: {
LangEnglish: "❌ Error: %v",
LangChinese: "❌ 错误: %v",
LangTraditionalChinese: "❌ 錯誤: %v",
LangJapanese: "❌ エラー: %v",
LangSpanish: "❌ Error: %v",
},
MsgBackgroundAutoDenied: {
LangEnglish: "⚠️ Background task requested permission for `%s` but was auto-denied (no active user turn). Send a message or use `/yolo` to approve future requests.",
LangChinese: "⚠️ 后台任务请求使用工具 `%s` 的权限,但已自动拒绝(当前无活跃会话)。请发送消息或使用 `/yolo` 授权后续请求。",
LangTraditionalChinese: "⚠️ 後台任務請求使用工具 `%s` 的權限,但已自動拒絕(目前無活躍會話)。請發送訊息或使用 `/yolo` 授權後續請求。",
LangJapanese: "⚠️ バックグラウンドタスクがツール `%s` の権限を要求しましたが、自動的に拒否されました(アクティブなユーザーターンなし)。メッセージを送信するか `/yolo` を使用して今後のリクエストを承認してください。",
LangSpanish: "⚠️ Una tarea en segundo plano solicitó permiso para `%s` pero se denegó automáticamente (sin turno de usuario activo). Envía un mensaje o usa `/yolo` para aprobar solicitudes futuras.",
},
MsgSessionNotFound: {
LangEnglish: "⚠️ Session expired. Use /new to start a fresh conversation.",
LangChinese: "⚠️ 会话已过期,请发送 /new 开始新会话",
LangTraditionalChinese: "⚠️ 會話已過期,請發送 /new 開始新會話",
LangJapanese: "⚠️ セッションが期限切れです。/new で新しい会話を開始してください。",
LangSpanish: "⚠️ Sesión expirada. Usa /new para iniciar una nueva conversación.",
},
MsgFailedToStartAgentSession: {
LangEnglish: "❌ Error: failed to start agent session",
LangChinese: "❌ 错误: 启动 Agent 会话失败",
LangTraditionalChinese: "❌ 錯誤: 啟動 Agent 會話失敗",
LangJapanese: "❌ エラー: Agentセッションの起動に失敗しました",
LangSpanish: "❌ Error: error al iniciar la sesión del agente",
},
MsgFailedToDeleteSession: {
LangEnglish: "❌ %s: %v",
LangChinese: "❌ %s: %v",
LangTraditionalChinese: "❌ %s: %v",
LangJapanese: "❌ %s: %v",
LangSpanish: "❌ %s: %v",
},
MsgEmptyResponse: {
LangEnglish: "(empty response)",
LangChinese: "(空响应)",
LangTraditionalChinese: "(空回應)",
LangJapanese: "(空のレスポンス)",
LangSpanish: "(respuesta vacía)",
},
MsgPermissionPrompt: {
LangEnglish: "⚠️ **Permission Request**\n\nAgent wants to use **%s**:\n\n```\n%s\n```\n\nReply **allow** / **deny** / **allow all** (skip all future prompts this session).",
LangChinese: "⚠️ **权限请求**\n\nAgent 想要使用 **%s**:\n\n```\n%s\n```\n\n回复 **允许** / **拒绝** / **允许所有**(本次会话不再提醒)。",
LangTraditionalChinese: "⚠️ **權限請求**\n\nAgent 想要使用 **%s**:\n\n```\n%s\n```\n\n回覆 **允許** / **拒絕** / **允許所有**(本次會話不再提醒)。",
LangJapanese: "⚠️ **権限リクエスト**\n\nエージェントが **%s** を使用しようとしています:\n\n```\n%s\n```\n\n**allow** / **deny** / **allow all**(このセッション中は全て自動許可)で返信してください。",
LangSpanish: "⚠️ **Solicitud de permiso**\n\nEl agente quiere usar **%s**:\n\n```\n%s\n```\n\nResponda **allow** / **deny** / **allow all** (omitir futuras solicitudes en esta sesión).",
},
MsgPermissionAllowed: {
LangEnglish: "✅ Allowed, continuing...",
LangChinese: "✅ 已允许,继续执行...",
LangTraditionalChinese: "✅ 已允許,繼續執行...",
LangJapanese: "✅ 許可しました。続行中...",
LangSpanish: "✅ Permitido, continuando...",
},
MsgPermissionApproveAll: {
LangEnglish: "✅ All permissions auto-approved for this session.",
LangChinese: "✅ 本次会话已开启自动批准,后续权限请求将自动允许。",
LangTraditionalChinese: "✅ 本次會話已開啟自動批准,後續權限請求將自動允許。",
LangJapanese: "✅ このセッションの全ての権限を自動承認に設定しました。",
LangSpanish: "✅ Todos los permisos se aprobarán automáticamente en esta sesión.",
},
MsgPermissionDenied: {
LangEnglish: "❌ Denied. Agent will stop this tool use.",
LangChinese: "❌ 已拒绝。Agent 将停止此工具使用。",
LangTraditionalChinese: "❌ 已拒絕。Agent 將停止此工具使用。",
LangJapanese: "❌ 拒否しました。エージェントはこのツールの使用を中止します。",
LangSpanish: "❌ Denegado. El agente detendrá el uso de esta herramienta.",
},
MsgPermissionHint: {
LangEnglish: "⚠️ Waiting for permission response. Reply **allow** / **deny** / **allow all**.",
LangChinese: "⚠️ 等待权限响应。请回复 **允许** / **拒绝** / **允许所有**。",
LangTraditionalChinese: "⚠️ 等待權限回應。請回覆 **允許** / **拒絕** / **允許所有**。",
LangJapanese: "⚠️ 権限の応答を待っています。**allow** / **deny** / **allow all** で返信してください。",
LangSpanish: "⚠️ Esperando respuesta de permiso. Responda **allow** / **deny** / **allow all**.",
},
MsgQuietOn: {
LangEnglish: "🔇 Quiet mode ON — thinking and tool progress messages will be hidden.",
LangChinese: "🔇 安静模式已开启 — 将不再推送思考和工具调用进度消息。",
LangTraditionalChinese: "🔇 安靜模式已開啟 — 將不再推送思考和工具調用進度訊息。",
LangJapanese: "🔇 静音モード ON — 思考とツール実行の進捗メッセージを非表示にします。",
LangSpanish: "🔇 Modo silencioso activado — los mensajes de progreso se ocultarán.",
},
MsgQuietOff: {
LangEnglish: "🔔 Quiet mode OFF — thinking and tool progress messages will be shown.",
LangChinese: "🔔 安静模式已关闭 — 将恢复推送思考和工具调用进度消息。",
LangTraditionalChinese: "🔔 安靜模式已關閉 — 將恢復推送思考和工具調用進度訊息。",
LangJapanese: "🔔 静音モード OFF — 思考とツール実行の進捗メッセージを表示します。",
LangSpanish: "🔔 Modo silencioso desactivado — los mensajes de progreso se mostrarán.",
},
MsgDisplayModeCompact: {
LangEnglish: "📋 Compact mode — thinking/tool hidden, each text segment sent separately.",
LangChinese: "📋 紧凑模式 — 隐藏思考和工具消息,每段文本独立发送。",
LangTraditionalChinese: "📋 緊湊模式 — 隱藏思考和工具訊息,每段文字獨立發送。",
LangJapanese: "📋 コンパクトモード — 思考・ツール非表示、テキストは個別に送信。",
LangSpanish: "📋 Modo compacto — pensamiento/herramientas ocultos, cada segmento de texto enviado por separado.",
},
MsgQuietGlobalOn: {
LangEnglish: "🔇 Global quiet mode ON — all sessions will hide thinking and tool progress.",
LangChinese: "🔇 全局安静模式已开启 — 所有会话将不再推送思考和工具调用进度消息。",
LangTraditionalChinese: "🔇 全域安靜模式已開啟 — 所有會話將不再推送思考和工具調用進度訊息。",
LangJapanese: "🔇 グローバル静音モード ON — 全セッションで思考とツール進捗を非表示にします。",
LangSpanish: "🔇 Modo silencioso global activado — todas las sesiones ocultarán los mensajes de progreso.",
},
MsgQuietGlobalOff: {
LangEnglish: "🔔 Global quiet mode OFF — all sessions will show thinking and tool progress.",
LangChinese: "🔔 全局安静模式已关闭 — 所有会话将恢复推送思考和工具调用进度消息。",
LangTraditionalChinese: "🔔 全域安靜模式已關閉 — 所有會話將恢復推送思考和工具調用進度訊息。",
LangJapanese: "🔔 グローバル静音モード OFF — 全セッションで思考とツール進捗を表示します。",
LangSpanish: "🔔 Modo silencioso global desactivado — todas las sesiones mostrarán los mensajes de progreso.",
},
MsgModeChanged: {
LangEnglish: "🔄 Permission mode switched to **%s**. New sessions will use this mode.",
LangChinese: "🔄 权限模式已切换为 **%s**,新会话将使用此模式。",
LangTraditionalChinese: "🔄 權限模式已切換為 **%s**,新會話將使用此模式。",
LangJapanese: "🔄 権限モードを **%s** に切り替えました。新しいセッションで有効になります。",
LangSpanish: "🔄 Modo de permisos cambiado a **%s**. Las nuevas sesiones usarán este modo.",
},
MsgModeNotSupported: {
LangEnglish: "This agent does not support permission mode switching.",
LangChinese: "当前 Agent 不支持权限模式切换。",
LangTraditionalChinese: "當前 Agent 不支援權限模式切換。",
LangJapanese: "このエージェントは権限モードの切り替えをサポートしていません。",
LangSpanish: "Este agente no soporta el cambio de modo de permisos.",
},
MsgSessionRestarting: {
LangEnglish: "🔄 Session process exited, restarting...",
LangChinese: "🔄 会话进程已退出,正在重启...",
LangTraditionalChinese: "🔄 會話進程已退出,正在重啟...",
LangJapanese: "🔄 セッションプロセスが終了しました。再起動中...",
LangSpanish: "🔄 El proceso de sesión finalizó, reiniciando...",
},
MsgSessionNotStarted: {
LangEnglish: "(new — not yet started)",
LangChinese: "(新会话 — 尚未开始)",
LangTraditionalChinese: "(新會話 — 尚未開始)",
LangJapanese: "(新規 — まだ開始されていません)",
LangSpanish: "(nuevo — aún no iniciado)",
},
MsgUntitled: {
LangEnglish: "(untitled)",
LangChinese: "(未命名)",
LangTraditionalChinese: "(未命名)",
LangJapanese: "(無題)",
LangSpanish: "(sin título)",
},
MsgLangChanged: {
LangEnglish: "🌐 Language switched to **%s**.",
LangChinese: "🌐 语言已切换为 **%s**。",
LangTraditionalChinese: "🌐 語言已切換為 **%s**。",
LangJapanese: "🌐 言語を **%s** に切り替えました。",
LangSpanish: "🌐 Idioma cambiado a **%s**.",
},
MsgLangInvalid: {
LangEnglish: "Unknown language. Supported: `en`, `zh`, `zh-TW`, `ja`, `es`, `auto`.",
LangChinese: "未知语言。支持: `en`, `zh`, `zh-TW`, `ja`, `es`, `auto`。",
LangTraditionalChinese: "未知語言。支援: `en`, `zh`, `zh-TW`, `ja`, `es`, `auto`。",
LangJapanese: "不明な言語です。対応: `en`, `zh`, `zh-TW`, `ja`, `es`, `auto`。",
LangSpanish: "Idioma desconocido. Soportados: `en`, `zh`, `zh-TW`, `ja`, `es`, `auto`.",
},
MsgLangCurrent: {
LangEnglish: "🌐 Current language: **%s**\n\nUsage: /lang <en|zh|zh-TW|ja|es|auto>",
LangChinese: "🌐 当前语言: **%s**\n\n用法: /lang <en|zh|zh-TW|ja|es|auto>",
LangTraditionalChinese: "🌐 當前語言: **%s**\n\n用法: /lang <en|zh|zh-TW|ja|es|auto>",
LangJapanese: "🌐 現在の言語: **%s**\n\n使い方: /lang <en|zh|zh-TW|ja|es|auto>",
LangSpanish: "🌐 Idioma actual: **%s**\n\nUso: /lang <en|zh|zh-TW|ja|es|auto>",
},
MsgUnknownCommand: {
LangEnglish: "`%s` is not a cc-connect command, forwarding to agent...",
LangChinese: "`%s` 不是 cc-connect 命令,已转发给 Agent 处理...",
LangTraditionalChinese: "`%s` 不是 cc-connect 命令,已轉發給 Agent 處理...",
LangJapanese: "`%s` は cc-connect のコマンドではありません。エージェントに転送します...",
LangSpanish: "`%s` no es un comando de cc-connect, reenviando al agente...",
},
MsgWelcome: {
LangEnglish: "👋 Hi! I'm cc-connect, bridging you to **%s**.\n\nJust send a message to chat with the agent. Type /help to see built-in commands.",
LangChinese: "👋 你好!我是 cc-connect,已为你连接到 **%s**。\n\n直接发送消息即可与 Agent 对话。输入 /help 查看内置命令。",
LangTraditionalChinese: "👋 你好!我是 cc-connect,已為你連接到 **%s**。\n\n直接發送訊息即可與 Agent 對話。輸入 /help 查看內建命令。",
LangJapanese: "👋 こんにちは!cc-connect が **%s** に接続しました。\n\nメッセージを送信すればエージェントと会話できます。/help で組み込みコマンド一覧を確認できます。",
LangSpanish: "👋 ¡Hola! Soy cc-connect, conectándote con **%s**.\n\nEnvía un mensaje para chatear con el agente. Usa /help para ver los comandos integrados.",
},
MsgHelp: {
LangEnglish: "📖 Available Commands\n\n" +
"/new [name]\n Start a new session\n\n" +
"/list\n List agent sessions\n\n" +
"/search <keyword>\n Search sessions by name or ID\n\n" +
"/switch <number>\n Resume a session by its list number\n\n" +
"/delete <number>|1,2,3|3-7|1,3-5,8\n Delete sessions by list number(s)\n\n" +
"/name [number] <text>\n Name a session for easy identification\n\n" +
"/current\n Show current active session\n\n" +
"/history [n]\n Show last n messages (default 10)\n\n" +
"/provider [list|add|remove|switch|clear]\n Manage API providers\n\n" +
"/memory [add|global|global add]\n View/edit agent memory files\n\n" +
"/allow <tool>\n Pre-allow a tool (next session)\n\n" +
"/model [switch <name>]\n View/switch model\n\n" +
"/reasoning [level]\n View/switch reasoning effort\n\n" +
"/mode [name]\n View/switch permission mode\n\n" +
"/lang [en|zh|zh-TW|ja|es|auto]\n View/switch language\n\n" +
"/compress\n Compress conversation context\n\n" +
"/tts [always|voice_only]\n View/switch text-to-speech mode\n\n" +
"/shell [--timeout <sec>] <command>\n Run a shell command and return the output (! prefix shortcut: !cmd)\n\n" +
"/show <ref>\n View a file, directory, or code snippet by reference\n\n" +
"/dir [path|reset]\n Show, switch, or reset agent working directory\n\n" +
"/stop\n Stop current execution\n\n" +
"/cron [add|list|del|enable|disable]\n Manage scheduled tasks\n\n" +
"/heartbeat [status|pause|resume|run|interval]\n Manage heartbeat\n\n" +
"/commands [add|del]\n Manage custom slash commands\n\n" +
"/alias [add|del]\n Manage command aliases (e.g. 帮助 → /help)\n\n" +
"/skills\n List agent skills (from SKILL.md)\n\n" +
"/config [get|set|reload] [key] [value]\n View/update runtime configuration\n\n" +
"/bind [project|remove]\n Manage relay binding in group chats\n\n" +
"/workspace [init]\n Manage workspace\n\n" +
"/doctor\n Run system diagnostics\n\n" +
"/usage\n Show account/model quota usage\n\n" +
"/upgrade\n Check for updates and self-update\n\n" +
"/restart\n Restart cc-connect service\n\n" +
"/status\n Show system status\n\n" +
"/version\n Show cc-connect version\n\n" +
"/whoami\n Show your User ID (for allow_from / admin_from)\n\n" +
"/help\n Show this help\n\n" +
"Tip: Commands support prefix matching, e.g. `/pro l` = `/provider list`, `/sw 2` = `/switch 2`.\n\n" +
"Custom commands: define via `/commands add` or `[[commands]]` in config.toml.\n\n" +
"Command aliases: use `/alias add <trigger> <command>` or `[[aliases]]` in config.toml.\n\n" +
"Agent skills: auto-discovered from .claude/skills/<name>/SKILL.md etc.\n\n" +
"Permission modes: default / edit / plan / yolo",
LangChinese: "📖 可用命令\n\n" +
"/new [名称]\n 创建新会话\n\n" +
"/list\n 列出 Agent 会话列表\n\n" +
"/search <关键词>\n 搜索会话名称或 ID\n\n" +
"/switch <序号>\n 按列表序号切换会话\n\n" +
"/delete <序号>|1,2,3|3-7|1,3-5,8\n 按列表序号批量/单个删除会话\n\n" +
"/name [序号] <名称>\n 给会话命名,方便识别\n\n" +
"/current\n 查看当前活跃会话\n\n" +
"/history [n]\n 查看最近 n 条消息(默认 10\n\n" +
"/provider [list|add|remove|switch|clear]\n 管理 API Provider\n\n" +
"/memory [add|global|global add]\n 查看/编辑 Agent 记忆文件\n\n" +
"/allow <工具名>\n 预授权工具(下次会话生效)\n\n" +
"/model [switch <名称>]\n 查看/切换模型\n\n" +
"/reasoning [级别]\n 查看/切换推理强度\n\n" +
"/mode [名称]\n 查看/切换权限模式\n\n" +
"/lang [en|zh|zh-TW|ja|es|auto]\n 查看/切换语言\n\n" +
"/compress\n 压缩会话上下文\n\n" +
"/tts [always|voice_only]\n 查看/切换语音合成模式\n\n" +
"/shell [--timeout <秒>] <命令>\n 执行 Shell 命令并返回结果(快捷方式:!命令)\n\n" +
"/show <引用>\n 按引用查看文件、目录或代码片段\n\n" +
"/dir [路径|reset]\n 查看、切换或重置 Agent 工作目录\n\n" +
"/stop\n 停止当前执行\n\n" +
"/cron [add|list|del|enable|disable]\n 管理定时任务\n\n" +
"/heartbeat [status|pause|resume|run|interval]\n 管理心跳\n\n" +
"/commands [add|del]\n 管理自定义命令\n\n" +
"/alias [add|del]\n 管理命令别名(如 帮助 → /help\n\n" +
"/skills\n 列出 Agent Skills(来自 SKILL.md\n\n" +
"/config [get|set|reload] [key] [value]\n 查看/修改运行时配置\n\n" +
"/bind [项目名|remove]\n 管理群聊中继绑定\n\n" +
"/workspace [init]\n 管理工作区\n\n" +
"/doctor\n 运行系统诊断\n\n" +
"/usage\n 查看账号/模型限额使用情况\n\n" +
"/upgrade\n 检查更新并自动升级\n\n" +
"/restart\n 重启 cc-connect 服务\n\n" +
"/status\n 查看系统状态\n\n" +
"/version\n 查看 cc-connect 版本\n\n" +
"/whoami\n 查看你的 User ID(用于 allow_from / admin_from 配置)\n\n" +
"/help\n 显示此帮助\n\n" +
"提示:命令支持前缀匹配,如 `/pro l` = `/provider list``/sw 2` = `/switch 2`。\n\n" +
"自定义命令:通过 `/commands add` 添加,或在 config.toml 中配置 `[[commands]]`。\n\n" +
"命令别名:使用 `/alias add <触发词> <命令>` 或在 config.toml 中配置 `[[aliases]]`。\n\n" +
"Agent Skills:自动发现自 .claude/skills/<name>/SKILL.md 等目录。\n\n" +
"权限模式:default / edit / plan / yolo",
LangTraditionalChinese: "📖 可用命令\n\n" +
"/new [名稱]\n 建立新會話\n\n" +
"/list\n 列出 Agent 會話列表\n\n" +
"/search <關鍵詞>\n 搜尋會話名稱或 ID\n\n" +
"/switch <序號>\n 按列表序號切換會話\n\n" +
"/delete <序號>|1,2,3|3-7|1,3-5,8\n 按列表序號批量/單筆刪除會話\n\n" +
"/name [序號] <名稱>\n 為會話命名,方便辨識\n\n" +
"/current\n 查看當前活躍會話\n\n" +
"/history [n]\n 查看最近 n 條訊息(預設 10\n\n" +
"/provider [list|add|remove|switch|clear]\n 管理 API Provider\n\n" +
"/memory [add|global|global add]\n 查看/編輯 Agent 記憶檔案\n\n" +
"/allow <工具名>\n 預授權工具(下次會話生效)\n\n" +
"/model [switch <名稱>]\n 查看/切換模型\n\n" +
"/reasoning [級別]\n 查看/切換推理強度\n\n" +
"/mode [名稱]\n 查看/切換權限模式\n\n" +
"/lang [en|zh|zh-TW|ja|es|auto]\n 查看/切換語言\n\n" +
"/compress\n 壓縮會話上下文\n\n" +
"/tts [always|voice_only]\n 查看/切換語音合成模式\n\n" +
"/shell [--timeout <秒>] <命令>\n 執行 Shell 命令並返回結果(快捷方式:!命令)\n\n" +
"/dir [路徑|reset]\n 查看、切換或重置 Agent 工作目錄\n\n" +
"/stop\n 停止當前執行\n\n" +
"/cron [add|list|del|enable|disable]\n 管理定時任務\n\n" +
"/heartbeat [status|pause|resume|run|interval]\n 管理心跳\n\n" +
"/commands [add|del]\n 管理自訂命令\n\n" +
"/alias [add|del]\n 管理命令別名(如 幫助 → /help\n\n" +
"/skills\n 列出 Agent Skills(來自 SKILL.md\n\n" +
"/config [get|set|reload] [key] [value]\n 查看/修改執行階段配置\n\n" +
"/bind [項目名|remove]\n 管理群聊中繼綁定\n\n" +
"/workspace [init]\n 管理工作區\n\n" +
"/doctor\n 執行系統診斷\n\n" +
"/usage\n 查看帳號/模型限額使用情況\n\n" +
"/upgrade\n 檢查更新並自動升級\n\n" +
"/restart\n 重啟 cc-connect 服務\n\n" +
"/status\n 查看系統狀態\n\n" +
"/version\n 查看 cc-connect 版本\n\n" +
"/whoami\n 查看你的 User ID(用於 allow_from / admin_from 設定)\n\n" +
"/help\n 顯示此說明\n\n" +
"提示:命令支持前綴匹配,如 `/pro l` = `/provider list``/sw 2` = `/switch 2`。\n\n" +
"自訂命令:透過 `/commands add` 新增,或在 config.toml 中配置 `[[commands]]`。\n\n" +
"命令別名:使用 `/alias add <觸發詞> <命令>` 或在 config.toml 中配置 `[[aliases]]`。\n\n" +
"Agent Skills:自動發現自 .claude/skills/<name>/SKILL.md 等目錄。\n\n" +
"權限模式:default / edit / plan / yolo",
LangJapanese: "📖 利用可能なコマンド\n\n" +
"/new [名前]\n 新しいセッションを開始\n\n" +
"/list\n エージェントセッション一覧\n\n" +
"/switch <番号>\n リスト番号でセッションを切り替え\n\n" +
"/delete <番号>|1,2,3|3-7|1,3-5,8\n リスト番号でセッションを単体/複数削除\n\n" +
"/name [番号] <名前>\n セッションに名前を付ける\n\n" +
"/current\n 現在のアクティブセッションを表示\n\n" +
"/history [n]\n 直近 n 件のメッセージを表示(デフォルト 10)\n\n" +
"/provider [list|add|remove|switch|clear]\n API プロバイダ管理\n\n" +
"/memory [add|global|global add]\n エージェントメモリの表示/編集\n\n" +
"/allow <ツール名>\n ツールを事前許可(次のセッションで有効)\n\n" +
"/model [switch <名前>]\n モデルの表示/切り替え\n\n" +
"/reasoning [レベル]\n 推論レベルの表示/切り替え\n\n" +
"/mode [名前]\n 権限モードの表示/切り替え\n\n" +
"/lang [en|zh|zh-TW|ja|es|auto]\n 言語の表示/切り替え\n\n" +
"/compress\n 会話コンテキストを圧縮\n\n" +
"/tts [always|voice_only]\n 音声合成モードの表示/切り替え\n\n" +
"/shell [--timeout <秒>] <コマンド>\n シェルコマンドを実行して結果を返す(ショートカット:!コマンド)\n\n" +
"/dir [パス|reset]\n エージェントの作業ディレクトリを表示/切り替え/リセット\n\n" +
"/stop\n 現在の実行を停止\n\n" +
"/cron [add|list|del|enable|disable]\n スケジュールタスク管理\n\n" +
"/heartbeat [status|pause|resume|run|interval]\n ハートビート管理\n\n" +
"/commands [add|del]\n カスタムコマンド管理\n\n" +
"/alias [add|del]\n コマンドエイリアス管理(例: ヘルプ → /help\n\n" +
"/skills\n エージェントスキル一覧(SKILL.md から)\n\n" +
"/config [get|set|reload] [key] [value]\n ランタイム設定の表示/変更\n\n" +
"/bind [プロジェクト|remove]\n グループチャットのリレー管理\n\n" +
"/workspace [init]\n ワークスペース管理\n\n" +
"/doctor\n システム診断を実行\n\n" +
"/usage\n アカウント/モデル使用量を表示\n\n" +
"/upgrade\n アップデートを確認して自動更新\n\n" +
"/restart\n cc-connect サービスを再起動\n\n" +
"/status\n システム状態を表示\n\n" +
"/version\n cc-connect のバージョンを表示\n\n" +
"/whoami\n あなたの User ID を表示(allow_from / admin_from 設定用)\n\n" +
"/help\n このヘルプを表示\n\n" +
"ヒント:コマンドはプレフィックスマッチに対応しています。例: `/pro l` = `/provider list`、`/sw 2` = `/switch 2`。\n\n" +
"カスタムコマンド: `/commands add` または config.toml の `[[commands]]` で定義。\n\n" +
"コマンドエイリアス: `/alias add <トリガー> <コマンド>` または config.toml の `[[aliases]]` で定義。\n\n" +
"エージェントスキル: .claude/skills/<name>/SKILL.md などから自動検出。\n\n" +
"権限モード: default / edit / plan / yolo",
LangSpanish: "📖 Comandos disponibles\n\n" +
"/new [nombre]\n Iniciar una nueva sesión\n\n" +
"/list\n Listar sesiones del agente\n\n" +
"/switch <número>\n Reanudar sesión por su número en la lista\n\n" +
"/delete <número>|1,2,3|3-7|1,3-5,8\n Eliminar una o varias sesiones por número de lista\n\n" +
"/name [número] <texto>\n Nombrar una sesión para fácil identificación\n\n" +
"/current\n Mostrar sesión activa actual\n\n" +
"/history [n]\n Mostrar últimos n mensajes (por defecto 10)\n\n" +
"/provider [list|add|remove|switch|clear]\n Gestionar proveedores API\n\n" +
"/memory [add|global|global add]\n Ver/editar archivos de memoria del agente\n\n" +
"/allow <herramienta>\n Pre-autorizar herramienta (próxima sesión)\n\n" +
"/model [switch <nombre>]\n Ver/cambiar modelo\n\n" +
"/reasoning [nivel]\n Ver/cambiar nivel de razonamiento\n\n" +
"/mode [nombre]\n Ver/cambiar modo de permisos\n\n" +
"/lang [en|zh|zh-TW|ja|es|auto]\n Ver/cambiar idioma\n\n" +
"/compress\n Comprimir contexto de conversación\n\n" +
"/tts [always|voice_only]\n Ver/cambiar modo de síntesis de voz\n\n" +
"/shell [--timeout <seg>] <comando>\n Ejecutar un comando shell y devolver la salida (atajo: !comando)\n\n" +
"/dir [ruta|reset]\n Ver, cambiar o restablecer el directorio de trabajo del agente\n\n" +
"/stop\n Detener ejecución actual\n\n" +
"/cron [add|list|del|enable|disable]\n Gestionar tareas programadas\n\n" +
"/heartbeat [status|pause|resume|run|interval]\n Gestionar heartbeat\n\n" +
"/commands [add|del]\n Gestionar comandos personalizados\n\n" +
"/alias [add|del]\n Gestionar alias de comandos (ej. ayuda → /help)\n\n" +
"/skills\n Listar skills del agente (desde SKILL.md)\n\n" +
"/config [get|set|reload] [key] [value]\n Ver/actualizar configuración en tiempo de ejecución\n\n" +
"/bind [proyecto|remove]\n Gestionar retransmisión en chats de grupo\n\n" +
"/workspace [init]\n Gestionar workspace\n\n" +
"/doctor\n Ejecutar diagnósticos del sistema\n\n" +
"/usage\n Mostrar uso de cuota de cuenta/modelo\n\n" +
"/upgrade\n Buscar actualizaciones y auto-actualizar\n\n" +
"/restart\n Reiniciar el servicio cc-connect\n\n" +
"/status\n Mostrar estado del sistema\n\n" +
"/version\n Mostrar versión de cc-connect\n\n" +
"/whoami\n Mostrar tu User ID (para allow_from / admin_from)\n\n" +
"/help\n Mostrar esta ayuda\n\n" +
"Consejo: Los comandos admiten coincidencia por prefijo, ej. `/pro l` = `/provider list`, `/sw 2` = `/switch 2`.\n\n" +
"Comandos personalizados: use `/commands add` o defina `[[commands]]` en config.toml.\n\n" +
"Alias de comandos: use `/alias add <trigger> <comando>` o `[[aliases]]` en config.toml.\n\n" +
"Skills del agente: descubiertos de .claude/skills/<name>/SKILL.md etc.\n\n" +
"Modos de permisos: default / edit / plan / yolo",
},
MsgHelpTitle: {
LangEnglish: "cc-connect Help",
LangChinese: "cc-connect 帮助",
LangTraditionalChinese: "cc-connect 說明",
LangJapanese: "cc-connect ヘルプ",
LangSpanish: "cc-connect Ayuda",
},
MsgHelpSessionSection: {
LangEnglish: "**Session Management**\n" +
"/new [name] — Start a new session\n" +
"/list — List agent sessions\n" +
"/search <keyword> — Search sessions\n" +
"/switch <number> — Resume a session\n" +
"/delete <number>|1,2,3|3-7|1,3-5,8 — Delete session(s)\n" +
"/name [number] <text> — Name a session\n" +
"/current — Show active session\n" +
"/history [n] — Show last n messages",
LangChinese: "**会话管理**\n" +
"/new [名称] — 创建新会话\n" +
"/list — 列出会话列表\n" +
"/search <关键词> — 搜索会话\n" +
"/switch <序号> — 切换会话\n" +
"/delete <序号>|1,2,3|3-7|1,3-5,8 — 删除会话\n" +
"/name [序号] <名称> — 命名会话\n" +
"/current — 查看当前会话\n" +
"/history [n] — 查看最近 n 条消息",
LangTraditionalChinese: "**會話管理**\n" +
"/new [名稱] — 建立新會話\n" +
"/list — 列出會話列表\n" +
"/search <關鍵詞> — 搜尋會話\n" +
"/switch <序號> — 切換會話\n" +
"/delete <序號>|1,2,3|3-7|1,3-5,8 — 刪除會話\n" +
"/name [序號] <名稱> — 命名會話\n" +
"/current — 查看當前會話\n" +
"/history [n] — 查看最近 n 條訊息",
LangJapanese: "**セッション管理**\n" +
"/new [名前] — 新しいセッションを開始\n" +
"/list — セッション一覧\n" +
"/search <キーワード> — セッション検索\n" +
"/switch <番号> — セッション切り替え\n" +
"/delete <番号>|1,2,3|3-7|1,3-5,8 — セッション削除\n" +
"/name [番号] <名前> — セッションに名前を付ける\n" +
"/current — 現在のセッションを表示\n" +
"/history [n] — 直近 n 件のメッセージを表示",
LangSpanish: "**Gestión de sesiones**\n" +
"/new [nombre] — Iniciar nueva sesión\n" +
"/list — Listar sesiones\n" +
"/search <keyword> — Buscar sesiones\n" +
"/switch <número> — Reanudar sesión\n" +
"/delete <número>|1,2,3|3-7|1,3-5,8 — Eliminar sesión(es)\n" +
"/name [número] <texto> — Nombrar sesión\n" +
"/current — Mostrar sesión activa\n" +
"/history [n] — Mostrar últimos n mensajes",
},
MsgHelpAgentSection: {
LangEnglish: "**Agent Configuration**\n" +
"/model [switch <name>] — View/switch model\n" +
"/mode [name] — View/switch permission mode\n" +
"/provider [list|add|...] — Manage API providers\n" +
"/memory [add|global|...] — View/edit memory files\n" +
"/allow <tool> — Pre-allow a tool\n" +
"/lang [en|zh|...] — View/switch language",
LangChinese: "**Agent 配置**\n" +
"/model [switch <名称>] — 查看/切换模型\n" +
"/mode [名称] — 查看/切换权限模式\n" +
"/provider [list|add|...] — 管理 API Provider\n" +
"/memory [add|global|...] — 查看/编辑记忆文件\n" +
"/allow <工具名> — 预授权工具\n" +
"/lang [en|zh|...] — 查看/切换语言",
LangTraditionalChinese: "**Agent 配置**\n" +
"/model [switch <名稱>] — 查看/切換模型\n" +
"/mode [名稱] — 查看/切換權限模式\n" +
"/provider [list|add|...] — 管理 API Provider\n" +
"/memory [add|global|...] — 查看/編輯記憶檔案\n" +
"/allow <工具名> — 預授權工具\n" +
"/lang [en|zh|...] — 查看/切換語言",
LangJapanese: "**エージェント設定**\n" +
"/model [switch <名前>] — モデルの表示/切り替え\n" +
"/mode [名前] — 権限モードの表示/切り替え\n" +
"/provider [list|add|...] — API プロバイダ管理\n" +
"/memory [add|global|...] — メモリの表示/編集\n" +
"/allow <ツール名> — ツールを事前許可\n" +
"/lang [en|zh|...] — 言語の表示/切り替え",
LangSpanish: "**Configuración del agente**\n" +
"/model [switch <nombre>] — Ver/cambiar modelo\n" +
"/mode [nombre] — Ver/cambiar modo de permisos\n" +
"/provider [list|add|...] — Gestionar proveedores\n" +
"/memory [add|global|...] — Ver/editar memoria\n" +
"/allow <herramienta> — Pre-autorizar herramienta\n" +
"/lang [en|zh|...] — Ver/cambiar idioma",
},
MsgHelpToolsSection: {
LangEnglish: "**Tools & Automation**\n" +
"/shell <command> — Run a shell command (! shortcut)\n" +
"/show <ref> — View file / directory / snippet by reference\n" +
"/dir [path|reset] — Show, switch, or reset work directory\n" +
"/cron [add|list|del|...] — Scheduled tasks\n" +
"/commands [add|del] — Custom commands\n" +
"/alias [add|del] — Command aliases\n" +
"/skills — List agent skills\n" +
"/compress — Compress context\n" +
"/stop — Stop current execution",
LangChinese: "**工具与自动化**\n" +
"/shell <命令> — 执行 Shell 命令(!快捷方式)\n" +
"/show <引用> — 按引用查看文件、目录或代码片段\n" +
"/dir [路径|reset] — 查看、切换或重置工作目录\n" +
"/cron [add|list|del|...] — 定时任务\n" +
"/commands [add|del] — 自定义命令\n" +
"/alias [add|del] — 命令别名\n" +
"/skills — 列出 Agent Skills\n" +
"/compress — 压缩上下文\n" +
"/stop — 停止当前执行",
LangTraditionalChinese: "**工具與自動化**\n" +
"/shell <命令> — 執行 Shell 命令(!快捷方式)\n" +
"/show <引用> — 按引用查看檔案、目錄或程式碼片段\n" +
"/dir [路徑|reset] — 查看、切換或重置工作目錄\n" +
"/cron [add|list|del|...] — 定時任務\n" +
"/commands [add|del] — 自訂命令\n" +
"/alias [add|del] — 命令別名\n" +
"/skills — 列出 Agent Skills\n" +
"/compress — 壓縮上下文\n" +
"/stop — 停止當前執行",
LangJapanese: "**ツール・自動化**\n" +
"/shell <コマンド> — シェルコマンド実行(!ショートカット)\n" +
"/show <参照> — ファイル/ディレクトリ/スニペットを参照で表示\n" +
"/dir [パス|reset] — 作業ディレクトリの表示/切り替え/リセット\n" +
"/cron [add|list|del|...] — スケジュールタスク\n" +
"/commands [add|del] — カスタムコマンド\n" +
"/alias [add|del] — コマンドエイリアス\n" +
"/skills — エージェントスキル一覧\n" +
"/compress — コンテキスト圧縮\n" +
"/stop — 現在の実行を停止",
LangSpanish: "**Herramientas y automatización**\n" +
"/shell <comando> — Ejecutar comando shell (! atajo)\n" +
"/show <ref> — Ver archivo/directorio/fragmento por referencia\n" +
"/dir [ruta|reset] — Ver, cambiar o restablecer directorio de trabajo\n" +
"/cron [add|list|del|...] — Tareas programadas\n" +
"/commands [add|del] — Comandos personalizados\n" +
"/alias [add|del] — Alias de comandos\n" +
"/skills — Listar skills del agente\n" +
"/compress — Comprimir contexto\n" +
"/stop — Detener ejecución actual",
},
MsgHelpSystemSection: {
LangEnglish: "**System**\n" +
"/config [get|set|reload] — Runtime configuration\n" +
"/doctor — System diagnostics\n" +
"/usage — Account/model quota usage\n" +
"/whoami — Show your User ID\n" +
"/upgrade — Check for updates\n" +
"/restart — Restart service\n" +
"/status — System status\n" +
"/version — Show version",
LangChinese: "**系统**\n" +
"/config [get|set|reload] — 运行时配置\n" +
"/doctor — 系统诊断\n" +
"/usage — 账号/模型限额\n" +
"/whoami — 查看你的 User ID\n" +
"/upgrade — 检查更新\n" +
"/restart — 重启服务\n" +
"/status — 系统状态\n" +
"/version — 查看版本",
LangTraditionalChinese: "**系統**\n" +
"/config [get|set|reload] — 執行階段配置\n" +
"/doctor — 系統診斷\n" +
"/usage — 帳號/模型限額\n" +
"/whoami — 查看你的 User ID\n" +
"/upgrade — 檢查更新\n" +
"/restart — 重啟服務\n" +
"/status — 系統狀態\n" +
"/version — 查看版本",
LangJapanese: "**システム**\n" +
"/config [get|set|reload] — ランタイム設定\n" +
"/doctor — システム診断\n" +
"/usage — アカウント/モデル使用量\n" +
"/whoami — User ID を表示\n" +
"/upgrade — アップデート確認\n" +
"/restart — サービス再起動\n" +
"/status — システム状態\n" +
"/version — バージョン表示",
LangSpanish: "**Sistema**\n" +
"/config [get|set|reload] — Configuración\n" +
"/doctor — Diagnósticos del sistema\n" +
"/usage — Uso de cuota de cuenta/modelo\n" +
"/whoami — Mostrar tu User ID\n" +
"/upgrade — Buscar actualizaciones\n" +
"/restart — Reiniciar servicio\n" +
"/status — Estado del sistema\n" +
"/version — Mostrar versión",
},
MsgHelpTip: {
LangEnglish: "Tip: Commands support prefix matching, e.g. /pro l = /provider list",
LangChinese: "提示:命令支持前缀匹配,如 /pro l = /provider list",
LangTraditionalChinese: "提示:命令支持前綴匹配,如 /pro l = /provider list",
LangJapanese: "ヒント:コマンドはプレフィックスマッチに対応、例: /pro l = /provider list",
LangSpanish: "Consejo: Los comandos admiten coincidencia por prefijo, ej. /pro l = /provider list",
},
MsgListTitle: {
LangEnglish: "**%s Sessions** (%d)\n\n",
LangChinese: "**%s 会话列表** (%d)\n\n",
LangTraditionalChinese: "**%s 會話列表** (%d)\n\n",
LangJapanese: "**%s セッション** (%d)\n\n",
LangSpanish: "**Sesiones de %s** (%d)\n\n",
},
MsgListTitlePaged: {
LangEnglish: "**%s Sessions** (%d) · Page %d/%d\n\n",
LangChinese: "**%s 会话列表** (%d) · 第 %d/%d 页\n\n",
LangTraditionalChinese: "**%s 會話列表** (%d) · 第 %d/%d 頁\n\n",
LangJapanese: "**%s セッション** (%d) · %d/%d ページ\n\n",
LangSpanish: "**Sesiones de %s** (%d) · Página %d/%d\n\n",
},
MsgListEmpty: {
LangEnglish: "No sessions found for this project.",
LangChinese: "未找到此项目的会话。",
LangTraditionalChinese: "未找到此項目的會話。",
LangJapanese: "このプロジェクトのセッションが見つかりません。",
LangSpanish: "No se encontraron sesiones para este proyecto.",
},
MsgListMore: {
LangEnglish: "\n... and %d more\n",
LangChinese: "\n... 还有 %d 条\n",
LangTraditionalChinese: "\n... 還有 %d 條\n",
LangJapanese: "\n... 他 %d 件\n",
LangSpanish: "\n... y %d más\n",
},
MsgListPageHint: {
LangEnglish: "\n\nPage %d/%d \n\n`/list <page>` for more\n",
LangChinese: "\n\n第 %d/%d 页 \n\n`/list <页码>` 翻页\n",
LangTraditionalChinese: "\n\n第 %d/%d 頁 \n\n`/list <頁碼>` 翻頁\n",
LangJapanese: "\n\n%d/%d ページ \n\n`/list <ページ>` で移動\n",
LangSpanish: "\n\nPágina %d/%d \n\n`/list <página>` para más\n",
},
MsgListSwitchHint: {
LangEnglish: "\n`/switch <number>` to switch session",
LangChinese: "\n`/switch <序号>` 切换会话",
LangTraditionalChinese: "\n`/switch <序號>` 切換會話",
LangJapanese: "\n`/switch <番号>` でセッション切替",
LangSpanish: "\n`/switch <número>` para cambiar sesión",
},
MsgListError: {
LangEnglish: "❌ Failed to list sessions: %v",
LangChinese: "❌ 获取会话列表失败: %v",
LangTraditionalChinese: "❌ 取得會話列表失敗: %v",
LangJapanese: "❌ セッション一覧の取得に失敗しました: %v",
LangSpanish: "❌ Error al listar sesiones: %v",
},
MsgHistoryEmpty: {
LangEnglish: "No history in current session.",
LangChinese: "当前会话暂无历史消息。",
LangTraditionalChinese: "當前會話暫無歷史訊息。",
LangJapanese: "現在のセッションに履歴がありません。",
LangSpanish: "No hay historial en la sesión actual.",
},
MsgNameUsage: {
LangEnglish: "Usage:\n`/name <text>` — name the current session\n`/name <number> <text>` — name a session by list number",
LangChinese: "用法:\n`/name <名称>` — 命名当前会话\n`/name <序号> <名称>` — 按列表序号命名会话",
LangTraditionalChinese: "用法:\n`/name <名稱>` — 命名當前會話\n`/name <序號> <名稱>` — 按列表序號命名會話",
LangJapanese: "使い方:\n`/name <名前>` — 現在のセッションに名前を付ける\n`/name <番号> <名前>` — リスト番号でセッションに名前を付ける",
LangSpanish: "Uso:\n`/name <texto>` — nombrar la sesión actual\n`/name <número> <texto>` — nombrar una sesión por número de lista",
},
MsgNameSet: {
LangEnglish: "✅ Session named: **%s** (%s)",
LangChinese: "✅ 会话已命名:**%s** (%s)",
LangTraditionalChinese: "✅ 會話已命名:**%s** (%s)",
LangJapanese: "✅ セッション名設定:**%s** (%s)",
LangSpanish: "✅ Sesión nombrada: **%s** (%s)",
},
MsgNameNoSession: {
LangEnglish: "❌ No active session. Send a message first or switch to a session.",
LangChinese: "❌ 没有活跃会话,请先发送消息或切换到一个会话。",
LangTraditionalChinese: "❌ 沒有活躍會話,請先傳送訊息或切換到一個會話。",
LangJapanese: "❌ アクティブなセッションがありません。メッセージを送信するかセッションに切り替えてください。",
LangSpanish: "❌ No hay sesión activa. Envía un mensaje primero o cambia a una sesión.",
},
MsgProviderNotSupported: {
LangEnglish: "This agent does not support provider switching.",
LangChinese: "当前 Agent 不支持 Provider 切换。",
LangTraditionalChinese: "當前 Agent 不支援 Provider 切換。",
LangJapanese: "このエージェントはプロバイダの切り替えをサポートしていません。",
LangSpanish: "Este agente no soporta el cambio de proveedor.",
},
MsgProviderNone: {
LangEnglish: "No provider configured. Using agent's default environment.\n\nAdd providers in `config.toml` or via `cc-connect provider add`.",
LangChinese: "未配置 Provider,使用 Agent 默认环境。\n\n可在 `config.toml` 中添加或使用 `cc-connect provider add` 命令。",
LangTraditionalChinese: "未配置 Provider,使用 Agent 預設環境。\n\n可在 `config.toml` 中新增或使用 `cc-connect provider add` 命令。",
LangJapanese: "プロバイダが設定されていません。エージェントのデフォルト環境を使用します。\n\n`config.toml` または `cc-connect provider add` でプロバイダを追加してください。",
LangSpanish: "No hay proveedor configurado. Usando el entorno predeterminado del agente.\n\nAgregue proveedores en `config.toml` o mediante `cc-connect provider add`.",
},
MsgProviderCurrent: {
LangEnglish: "📡 Active provider: **%s**\n\nUse `/provider list` to see all, `/provider switch <name>` to switch.",
LangChinese: "📡 当前 Provider: **%s**\n\n使用 `/provider list` 查看全部,`/provider switch <名称>` 切换。",
LangTraditionalChinese: "📡 當前 Provider: **%s**\n\n使用 `/provider list` 查看全部,`/provider switch <名稱>` 切換。",
LangJapanese: "📡 現在のプロバイダ: **%s**\n\n`/provider list` で一覧、`/provider switch <名前>` で切り替え。",
LangSpanish: "📡 Proveedor activo: **%s**\n\nUse `/provider list` para ver todos, `/provider switch <nombre>` para cambiar.",
},
MsgProviderListTitle: {
LangEnglish: "📡 Providers\n\n",
LangChinese: "📡 Provider 列表\n\n",
LangTraditionalChinese: "📡 Provider 列表\n\n",
LangJapanese: "📡 プロバイダ一覧\n\n",
LangSpanish: "📡 Proveedores\n\n",
},
MsgProviderListEmpty: {
LangEnglish: "No providers configured.\n\nAdd providers in `config.toml` or via `cc-connect provider add`.",
LangChinese: "未配置 Provider。\n\n可在 `config.toml` 中添加或使用 `cc-connect provider add` 命令。",
LangTraditionalChinese: "未配置 Provider。\n\n可在 `config.toml` 中新增或使用 `cc-connect provider add` 命令。",
LangJapanese: "プロバイダが設定されていません。\n\n`config.toml` または `cc-connect provider add` で追加してください。",
LangSpanish: "No hay proveedores configurados.\n\nAgregue proveedores en `config.toml` o mediante `cc-connect provider add`.",
},
MsgProviderSwitchHint: {
LangEnglish: "`/provider switch <name>` to switch | `/provider clear` to reset",
LangChinese: "`/provider switch <名称>` 切换 | `/provider clear` 清除",
LangTraditionalChinese: "`/provider switch <名稱>` 切換 | `/provider clear` 清除",
LangJapanese: "`/provider switch <名前>` で切り替え | `/provider clear` でリセット",
LangSpanish: "`/provider switch <nombre>` para cambiar | `/provider clear` para restablecer",
},
MsgProviderNotFound: {
LangEnglish: "❌ Provider %q not found. Use `/provider list` to see available providers.",
LangChinese: "❌ 未找到 Provider %q。使用 `/provider list` 查看可用列表。",
LangTraditionalChinese: "❌ 未找到 Provider %q。使用 `/provider list` 查看可用列表。",
LangJapanese: "❌ プロバイダ %q が見つかりません。`/provider list` で一覧を確認してください。",
LangSpanish: "❌ Proveedor %q no encontrado. Use `/provider list` para ver los disponibles.",
},
MsgProviderSwitched: {
LangEnglish: "✅ Provider switched to **%s**. New sessions will use this provider.",
LangChinese: "✅ Provider 已切换为 **%s**,新会话将使用此 Provider。",
LangTraditionalChinese: "✅ Provider 已切換為 **%s**,新會話將使用此 Provider。",
LangJapanese: "✅ プロバイダを **%s** に切り替えました。新しいセッションで使用されます。",
LangSpanish: "✅ Proveedor cambiado a **%s**. Las nuevas sesiones usarán este proveedor.",
},
MsgProviderCleared: {
LangEnglish: "✅ Provider cleared. New sessions will use the default provider.",
LangChinese: "✅ Provider 已清除,新会话将使用默认 Provider。",
LangTraditionalChinese: "✅ Provider 已清除,新會話將使用預設 Provider。",
LangJapanese: "✅ プロバイダをクリアしました。新しいセッションではデフォルトのプロバイダが使用されます。",
LangSpanish: "✅ Proveedor eliminado. Las nuevas sesiones usarán el proveedor predeterminado.",
},
MsgProviderAdded: {
LangEnglish: "✅ Provider **%s** added.\n\nUse `/provider switch %s` to activate.",
LangChinese: "✅ Provider **%s** 已添加。\n\n使用 `/provider switch %s` 激活。",
LangTraditionalChinese: "✅ Provider **%s** 已新增。\n\n使用 `/provider switch %s` 啟用。",
LangJapanese: "✅ プロバイダ **%s** を追加しました。\n\n`/provider switch %s` で有効化してください。",
LangSpanish: "✅ Proveedor **%s** agregado.\n\nUse `/provider switch %s` para activarlo.",
},
MsgProviderAddUsage: {
LangEnglish: "Usage:\n\n" +
"`/provider add <name> <api_key> [base_url] [model]`\n\n" +
"Or JSON:\n" +
"`/provider add {\"name\":\"relay\",\"api_key\":\"sk-xxx\",\"base_url\":\"https://...\",\"model\":\"...\"}`",
LangChinese: "用法:\n\n" +
"`/provider add <名称> <api_key> [base_url] [model]`\n\n" +
"或 JSON:\n" +
"`/provider add {\"name\":\"relay\",\"api_key\":\"sk-xxx\",\"base_url\":\"https://...\",\"model\":\"...\"}`",
LangTraditionalChinese: "用法:\n\n" +
"`/provider add <名稱> <api_key> [base_url] [model]`\n\n" +
"或 JSON:\n" +
"`/provider add {\"name\":\"relay\",\"api_key\":\"sk-xxx\",\"base_url\":\"https://...\",\"model\":\"...\"}`",
LangJapanese: "使い方:\n\n" +
"`/provider add <名前> <api_key> [base_url] [model]`\n\n" +
"または JSON:\n" +
"`/provider add {\"name\":\"relay\",\"api_key\":\"sk-xxx\",\"base_url\":\"https://...\",\"model\":\"...\"}`",
LangSpanish: "Uso:\n\n" +
"`/provider add <nombre> <api_key> [base_url] [model]`\n\n" +
"O JSON:\n" +
"`/provider add {\"name\":\"relay\",\"api_key\":\"sk-xxx\",\"base_url\":\"https://...\",\"model\":\"...\"}`",
},
MsgProviderAddFailed: {
LangEnglish: "❌ Failed to add provider: %v",
LangChinese: "❌ 添加 Provider 失败: %v",
LangTraditionalChinese: "❌ 新增 Provider 失敗: %v",
LangJapanese: "❌ プロバイダの追加に失敗しました: %v",
LangSpanish: "❌ Error al agregar proveedor: %v",
},
MsgProviderRemoved: {
LangEnglish: "✅ Provider **%s** removed.",
LangChinese: "✅ Provider **%s** 已移除。",
LangTraditionalChinese: "✅ Provider **%s** 已移除。",
LangJapanese: "✅ プロバイダ **%s** を削除しました。",
LangSpanish: "✅ Proveedor **%s** eliminado.",
},
MsgProviderRemoveFailed: {
LangEnglish: "❌ Failed to remove provider: %v",
LangChinese: "❌ 移除 Provider 失败: %v",
LangTraditionalChinese: "❌ 移除 Provider 失敗: %v",
LangJapanese: "❌ プロバイダの削除に失敗しました: %v",
LangSpanish: "❌ Error al eliminar proveedor: %v",
},
MsgCardTitleProviderAdd: {
LangEnglish: "Add Provider", LangChinese: "添加服务商", LangTraditionalChinese: "新增服務商",
LangJapanese: "プロバイダーを追加", LangSpanish: "Añadir proveedor",
},
MsgProviderAddPickHint: {
LangEnglish: "Pick a provider below, or choose **Other** to enter manually.\nAfter selecting, send your API key to complete.",
LangChinese: "选择一个服务商,或选择 **自定义** 手动填写。\n选择后,请发送你的 API Key 来完成添加。",
LangTraditionalChinese: "選擇一個服務商,或選擇 **自訂** 手動填寫。\n選擇後,請傳送你的 API Key 來完成新增。",
LangJapanese: "プロバイダーを選択するか、**その他** を選んで手動入力してください。\n選択後、API キーを送信して完了します。",
LangSpanish: "Elige un proveedor o selecciona **Otro** para ingresar manualmente.\nDespués de seleccionar, envía tu API Key para completar.",
},
MsgProviderAddOther: {
LangEnglish: "Other (manual)", LangChinese: "自定义 (手动)", LangTraditionalChinese: "自訂 (手動)",
LangJapanese: "その他 (手動)", LangSpanish: "Otro (manual)",
},
MsgProviderAddApiKeyPrompt: {
LangEnglish: "✅ Selected **%s**.\n\nPlease send your **API Key** for this provider.\nFormat: just the key, e.g. `sk-xxxxxxxx`",
LangChinese: "✅ 已选择 **%s**。\n\n请发送你的 **API Key**。\n格式:直接发送密钥即可,如 `sk-xxxxxxxx`",
LangTraditionalChinese: "✅ 已選擇 **%s**。\n\n請傳送你的 **API Key**。\n格式:直接傳送金鑰即可,如 `sk-xxxxxxxx`",
LangJapanese: "✅ **%s** を選択しました。\n\n**API キー** を送信してください。\n形式: キーをそのまま送信(例: `sk-xxxxxxxx`",
LangSpanish: "✅ Seleccionado **%s**.\n\nPor favor envía tu **API Key** para este proveedor.\nFormato: solo la clave, por ejemplo `sk-xxxxxxxx`",
},
MsgProviderAddInviteHint: {
LangEnglish: "🔑 Don't have a key? Register here: %s",
LangChinese: "🔑 还没有 Key?点击注册获取:%s",
LangTraditionalChinese: "🔑 還沒有 Key?點擊註冊取得:%s",
LangJapanese: "🔑 キーをお持ちでない場合はこちらから登録: %s",
LangSpanish: "🔑 ¿No tienes una clave? Regístrate aquí: %s",
},
MsgProviderLinkGlobal: {
LangEnglish: "Link existing provider", LangChinese: "关联已有服务商", LangTraditionalChinese: "關聯已有服務商",
LangJapanese: "既存プロバイダーをリンク", LangSpanish: "Vincular proveedor existente",
},
MsgProviderLinked: {
LangEnglish: "✅ Provider **%s** linked to this project.",
LangChinese: "✅ 已关联服务商 **%s** 到当前项目。",
LangTraditionalChinese: "✅ 已關聯服務商 **%s** 到目前專案。",
LangJapanese: "✅ プロバイダー **%s** をこのプロジェクトにリンクしました。",
LangSpanish: "✅ Proveedor **%s** vinculado a este proyecto.",
},
MsgVoiceNotEnabled: {
LangEnglish: "🎙 Voice messages are not enabled. Please configure `[speech]` in config.toml.",
LangChinese: "🎙 语音消息未启用,请在 config.toml 中配置 `[speech]` 部分。",
LangTraditionalChinese: "🎙 語音訊息未啟用,請在 config.toml 中配置 `[speech]` 部分。",
LangJapanese: "🎙 音声メッセージは有効になっていません。config.toml で `[speech]` を設定してください。",
LangSpanish: "🎙 Los mensajes de voz no están habilitados. Configure `[speech]` en config.toml.",
},
MsgVoiceUsingPlatformRecognition: {
LangEnglish: "⚠️ Voice transcription not configured, using %s built-in recognition",
LangChinese: "⚠️ 未配置语音转录,使用 %s 内置语音识别",
LangTraditionalChinese: "⚠️ 未配置語音轉錄,使用 %s 內置語音識別",
LangJapanese: "⚠️ 音声転写が設定されていないため、%s の組み込み認識を使用",
LangSpanish: "⚠️ Transcripción de voz no configurada, usando reconocimiento integrado de %s",
},
MsgVoiceNoFFmpeg: {
LangEnglish: "🎙 Voice message requires `ffmpeg` for format conversion. Please install ffmpeg.",
LangChinese: "🎙 语音消息需要 `ffmpeg` 进行格式转换,请安装 ffmpeg。",
LangTraditionalChinese: "🎙 語音訊息需要 `ffmpeg` 進行格式轉換,請安裝 ffmpeg。",
LangJapanese: "🎙 音声メッセージのフォーマット変換に `ffmpeg` が必要です。ffmpeg をインストールしてください。",
LangSpanish: "🎙 Los mensajes de voz requieren `ffmpeg` para la conversión de formato. Instale ffmpeg.",
},
MsgVoiceTranscribing: {
LangEnglish: "🎙 Transcribing voice message...",
LangChinese: "🎙 正在转录语音消息...",
LangTraditionalChinese: "🎙 正在轉錄語音訊息...",
LangJapanese: "🎙 音声メッセージを文字起こし中...",
LangSpanish: "🎙 Transcribiendo mensaje de voz...",
},
MsgVoiceTranscribed: {
LangEnglish: "🎙 [Voice] %s",
LangChinese: "🎙 [语音] %s",
LangTraditionalChinese: "🎙 [語音] %s",
LangJapanese: "🎙 [音声] %s",
LangSpanish: "🎙 [Voz] %s",
},
MsgVoiceTranscribeFailed: {
LangEnglish: "🎙 Voice transcription failed: %v",
LangChinese: "🎙 语音转文字失败: %v",
LangTraditionalChinese: "🎙 語音轉文字失敗: %v",
LangJapanese: "🎙 音声の文字起こしに失敗しました: %v",
LangSpanish: "🎙 Error en la transcripción de voz: %v",
},
MsgVoiceEmpty: {
LangEnglish: "🎙 Voice message was empty or could not be recognized.",
LangChinese: "🎙 语音消息为空或无法识别。",
LangTraditionalChinese: "🎙 語音訊息為空或無法識別。",
LangJapanese: "🎙 音声メッセージが空か、認識できませんでした。",
LangSpanish: "🎙 El mensaje de voz estaba vacío o no se pudo reconocer.",
},
MsgTTSNotEnabled: {
LangEnglish: "TTS is not enabled. Please configure `[tts]` in config.toml.",
LangChinese: "TTS 未启用,请在 config.toml 中配置 `[tts]` 部分。",
LangTraditionalChinese: "TTS 未啟用,請在 config.toml 中配置 `[tts]` 部分。",
LangJapanese: "TTS は有効になっていません。config.toml で `[tts]` を設定してください。",
LangSpanish: "TTS no está habilitado. Configure `[tts]` en config.toml.",
},
MsgTTSStatus: {
LangEnglish: "TTS status: enabled=true, mode=%s, provider=%s",
LangChinese: "TTS 状态:enabled=truemode=%sprovider=%s",
LangTraditionalChinese: "TTS 狀態:enabled=truemode=%sprovider=%s",
LangJapanese: "TTS 状態: enabled=true, mode=%s, provider=%s",
LangSpanish: "Estado TTS: enabled=true, mode=%s, provider=%s",
},
MsgTTSSwitched: {
LangEnglish: "TTS mode switched to: %s",
LangChinese: "TTS 已切换为 %s 模式",
LangTraditionalChinese: "TTS 已切換為 %s 模式",
LangJapanese: "TTS モードを %s に切り替えました",
LangSpanish: "Modo TTS cambiado a: %s",
},
MsgTTSUsage: {
LangEnglish: "Usage: /tts [always|voice_only]",
LangChinese: "用法:/tts [always|voice_only]",
LangTraditionalChinese: "用法:/tts [always|voice_only]",
LangJapanese: "使い方: /tts [always|voice_only]",
LangSpanish: "Uso: /tts [always|voice_only]",
},
MsgHeartbeatNotAvailable: {
LangEnglish: "Heartbeat is not configured for this project.",
LangChinese: "当前项目未配置心跳。",
LangTraditionalChinese: "當前項目未配置心跳。",
LangJapanese: "このプロジェクトにはハートビートが設定されていません。",
LangSpanish: "El heartbeat no está configurado para este proyecto.",
},
MsgHeartbeatStatus: {
LangEnglish: "💓 Heartbeat Status\n\n" +
"State: %s\n" +
"Interval: %d min\n" +
"Only when idle: %s\n" +
"Silent: %s\n" +
"Runs: %d\n" +
"Errors: %d\n" +
"Skipped (busy): %d\n" +
"%s",
LangChinese: "💓 心跳状态\n\n" +
"状态: %s\n" +
"间隔: %d 分钟\n" +
"仅空闲时: %s\n" +
"静默: %s\n" +
"执行次数: %d\n" +
"失败次数: %d\n" +
"跳过 (忙碌): %d\n" +
"%s",
LangTraditionalChinese: "💓 心跳狀態\n\n" +
"狀態: %s\n" +
"間隔: %d 分鐘\n" +
"僅空閒時: %s\n" +
"靜默: %s\n" +
"執行次數: %d\n" +
"失敗次數: %d\n" +
"跳過 (忙碌): %d\n" +
"%s",
LangJapanese: "💓 ハートビート状態\n\n" +
"状態: %s\n" +
"間隔: %d 分\n" +
"アイドル時のみ: %s\n" +
"サイレント: %s\n" +
"実行回数: %d\n" +
"エラー: %d\n" +
"スキップ (ビジー): %d\n" +
"%s",
LangSpanish: "💓 Estado del Heartbeat\n\n" +
"Estado: %s\n" +
"Intervalo: %d min\n" +
"Solo cuando inactivo: %s\n" +
"Silencioso: %s\n" +
"Ejecuciones: %d\n" +
"Errores: %d\n" +
"Omitidos (ocupado): %d\n" +
"%s",
},
MsgHeartbeatPaused: {
LangEnglish: "💓 Heartbeat paused.",
LangChinese: "💓 心跳已暂停。",
LangTraditionalChinese: "💓 心跳已暫停。",
LangJapanese: "💓 ハートビートを一時停止しました。",
LangSpanish: "💓 Heartbeat pausado.",
},
MsgHeartbeatResumed: {
LangEnglish: "💓 Heartbeat resumed.",
LangChinese: "💓 心跳已恢复。",
LangTraditionalChinese: "💓 心跳已恢復。",
LangJapanese: "💓 ハートビートを再開しました。",
LangSpanish: "💓 Heartbeat reanudado.",
},
MsgHeartbeatInterval: {
LangEnglish: "💓 Heartbeat interval changed to %d minutes.",
LangChinese: "💓 心跳间隔已调整为 %d 分钟。",
LangTraditionalChinese: "💓 心跳間隔已調整為 %d 分鐘。",
LangJapanese: "💓 ハートビート間隔を %d 分に変更しました。",
LangSpanish: "💓 Intervalo del heartbeat cambiado a %d minutos.",
},
MsgHeartbeatTriggered: {
LangEnglish: "💓 Heartbeat triggered.",
LangChinese: "💓 心跳已触发。",
LangTraditionalChinese: "💓 心跳已觸發。",
LangJapanese: "💓 ハートビートをトリガーしました。",
LangSpanish: "💓 Heartbeat activado.",
},
MsgHeartbeatUsage: {
LangEnglish: "Usage: /heartbeat [status|pause|resume|run|interval <mins>]",
LangChinese: "用法: /heartbeat [status|pause|resume|run|interval <分钟>]",
LangTraditionalChinese: "用法: /heartbeat [status|pause|resume|run|interval <分鐘>]",
LangJapanese: "使い方: /heartbeat [status|pause|resume|run|interval <分>]",
LangSpanish: "Uso: /heartbeat [status|pause|resume|run|interval <minutos>]",
},
MsgHeartbeatInvalidMins: {
LangEnglish: "Invalid interval. Please provide a positive number of minutes.",
LangChinese: "无效的间隔。请输入正整数的分钟数。",
LangTraditionalChinese: "無效的間隔。請輸入正整數的分鐘數。",
LangJapanese: "無効な間隔です。正の整数を分で指定してください。",
LangSpanish: "Intervalo inválido. Proporcione un número positivo de minutos.",
},
MsgCronNotAvailable: {
LangEnglish: "Cron scheduler is not available.",
LangChinese: "定时任务调度器未启用。",
LangTraditionalChinese: "定時任務調度器未啟用。",
LangJapanese: "スケジューラは利用できません。",
LangSpanish: "El programador de tareas no está disponible.",
},
MsgCronUsage: {
LangEnglish: "Usage:\n/cron add <min> <hour> <day> <month> <weekday> <prompt>\n/cron list\n/cron del <id>\n/cron enable <id> · /cron disable <id>\n/cron mute <id> · /cron unmute <id>\n/cron setup — write cc-connect instructions to agent memory file",
LangChinese: "用法:\n/cron add <分> <时> <日> <月> <周> <任务描述>\n/cron list\n/cron del <id>\n/cron enable <id> · /cron disable <id>\n/cron mute <id> · /cron unmute <id> 静音/取消静音\n/cron setup — 将 cc-connect 指令写入 agent 记忆文件",
LangTraditionalChinese: "用法:\n/cron add <分> <時> <日> <月> <週> <任務描述>\n/cron list\n/cron del <id>\n/cron enable <id> · /cron disable <id>\n/cron mute <id> · /cron unmute <id> 靜音/取消靜音\n/cron setup — 將 cc-connect 指令寫入 agent 記憶檔案",
LangJapanese: "使い方:\n/cron add <分> <時> <日> <月> <曜日> <タスク内容>\n/cron list\n/cron del <id>\n/cron enable <id> · /cron disable <id>\n/cron mute <id> · /cron unmute <id> ミュート/解除\n/cron setup — cc-connect の指示をエージェントのメモリファイルに書き込む",
LangSpanish: "Uso:\n/cron add <min> <hora> <día> <mes> <día_semana> <tarea>\n/cron list\n/cron del <id>\n/cron enable <id> · /cron disable <id>\n/cron mute <id> · /cron unmute <id>\n/cron setup — escribir las instrucciones de cc-connect en el archivo de memoria del agente",
},
MsgCronAddUsage: {
LangEnglish: "Usage: /cron add <min> <hour> <day> <month> <weekday> <prompt>\nExample: /cron add 0 6 * * * Collect GitHub trending data and send me a summary",
LangChinese: "用法:/cron add <分> <时> <日> <月> <周> <任务描述>\n示例:/cron add 0 6 * * * 收集 GitHub Trending 数据整理成简报发给我",
LangTraditionalChinese: "用法:/cron add <分> <時> <日> <月> <週> <任務描述>\n範例:/cron add 0 6 * * * 收集 GitHub Trending 資料整理成簡報發給我",
LangJapanese: "使い方: /cron add <分> <時> <日> <月> <曜日> <タスク内容>\n例: /cron add 0 6 * * * GitHub Trending を収集してまとめを送って",
LangSpanish: "Uso: /cron add <min> <hora> <día> <mes> <día_semana> <tarea>\nEjemplo: /cron add 0 6 * * * Recopilar datos de GitHub Trending y enviarme un resumen",
},
MsgCronAdded: {
LangEnglish: "✅ Cron job created\nID: `%s`\nSchedule: `%s`\nPrompt: %s",
LangChinese: "✅ 定时任务已创建\nID: `%s`\n调度: `%s`\n内容: %s",
LangTraditionalChinese: "✅ 定時任務已建立\nID: `%s`\n調度: `%s`\n內容: %s",
LangJapanese: "✅ スケジュールタスクを作成しました\nID: `%s`\nスケジュール: `%s`\n内容: %s",
LangSpanish: "✅ Tarea programada creada\nID: `%s`\nProgramación: `%s`\nContenido: %s",
},
MsgCronAddedExec: {
LangEnglish: "✅ Shell cron job created\nID: `%s`\nSchedule: `%s`\nCommand: `%s`",
LangChinese: "✅ Shell 定时任务已创建\nID: `%s`\n调度: `%s`\n命令: `%s`",
LangTraditionalChinese: "✅ Shell 定時任務已建立\nID: `%s`\n調度: `%s`\n命令: `%s`",
LangJapanese: "✅ Shell スケジュールタスクを作成しました\nID: `%s`\nスケジュール: `%s`\nコマンド: `%s`",
LangSpanish: "✅ Tarea shell programada creada\nID: `%s`\nProgramación: `%s`\nComando: `%s`",
},
MsgCronAddExecUsage: {
LangEnglish: "Usage: /cron addexec <min> <hour> <day> <month> <weekday> <shell command>\nExample: /cron addexec 0 6 * * * df -h",
LangChinese: "用法:/cron addexec <分> <时> <日> <月> <周> <shell 命令>\n示例:/cron addexec 0 6 * * * df -h",
LangTraditionalChinese: "用法:/cron addexec <分> <時> <日> <月> <週> <shell 命令>\n範例:/cron addexec 0 6 * * * df -h",
LangJapanese: "使い方: /cron addexec <分> <時> <日> <月> <曜日> <シェルコマンド>\n例: /cron addexec 0 6 * * * df -h",
LangSpanish: "Uso: /cron addexec <min> <hora> <día> <mes> <día_semana> <comando shell>\nEjemplo: /cron addexec 0 6 * * * df -h",
},
MsgCronEmpty: {
LangEnglish: "No scheduled tasks.",
LangChinese: "暂无定时任务。",
LangTraditionalChinese: "暫無定時任務。",
LangJapanese: "スケジュールタスクはありません。",
LangSpanish: "No hay tareas programadas.",
},
MsgCronListTitle: {
LangEnglish: "⏰ Scheduled Tasks (%d)",
LangChinese: "⏰ 定时任务 (%d)",
LangTraditionalChinese: "⏰ 定時任務 (%d)",
LangJapanese: "⏰ スケジュールタスク (%d)",
LangSpanish: "⏰ Tareas programadas (%d)",
},
MsgCronListFooter: {
LangEnglish: "`/cron del <id>` remove · `/cron enable/disable <id>` toggle · `/cron mute/unmute <id>` mute",
LangChinese: "`/cron del <id>` 删除 · `/cron enable/disable <id>` 启停 · `/cron mute/unmute <id>` 静音",
LangTraditionalChinese: "`/cron del <id>` 刪除 · `/cron enable/disable <id>` 啟停 · `/cron mute/unmute <id>` 靜音",
LangJapanese: "`/cron del <id>` 削除 · `/cron enable/disable <id>` 切替 · `/cron mute/unmute <id>` ミュート",
LangSpanish: "`/cron del <id>` eliminar · `/cron enable/disable <id>` activar/desactivar · `/cron mute/unmute <id>` silenciar",
},
MsgCronDelUsage: {
LangEnglish: "Usage: /cron del <id>",
LangChinese: "用法:/cron del <id>",
LangTraditionalChinese: "用法:/cron del <id>",
LangJapanese: "使い方: /cron del <id>",
LangSpanish: "Uso: /cron del <id>",
},
MsgCronDeleted: {
LangEnglish: "✅ Cron job `%s` deleted.",
LangChinese: "✅ 定时任务 `%s` 已删除。",
LangTraditionalChinese: "✅ 定時任務 `%s` 已刪除。",
LangJapanese: "✅ スケジュールタスク `%s` を削除しました。",
LangSpanish: "✅ Tarea programada `%s` eliminada.",
},
MsgCronNotFound: {
LangEnglish: "❌ Cron job `%s` not found.",
LangChinese: "❌ 定时任务 `%s` 未找到。",
LangTraditionalChinese: "❌ 定時任務 `%s` 未找到。",
LangJapanese: "❌ スケジュールタスク `%s` が見つかりません。",
LangSpanish: "❌ Tarea programada `%s` no encontrada.",
},
MsgCronEnabled: {
LangEnglish: "✅ Cron job `%s` enabled.",
LangChinese: "✅ 定时任务 `%s` 已启用。",
LangTraditionalChinese: "✅ 定時任務 `%s` 已啟用。",
LangJapanese: "✅ スケジュールタスク `%s` を有効にしました。",
LangSpanish: "✅ Tarea programada `%s` habilitada.",
},
MsgCronDisabled: {
LangEnglish: "⏸ Cron job `%s` disabled.",
LangChinese: "⏸ 定时任务 `%s` 已暂停。",
LangTraditionalChinese: "⏸ 定時任務 `%s` 已暫停。",
LangJapanese: "⏸ スケジュールタスク `%s` を無効にしました。",
LangSpanish: "⏸ Tarea programada `%s` deshabilitada.",
},
MsgCronMuted: {
LangEnglish: "🔇 Cron job `%s` muted (all messages suppressed).",
LangChinese: "🔇 定时任务 `%s` 已静音(所有消息均不发送)。",
LangTraditionalChinese: "🔇 定時任務 `%s` 已靜音(所有訊息均不發送)。",
LangJapanese: "🔇 スケジュールタスク `%s` をミュートしました(全メッセージ抑制)。",
LangSpanish: "🔇 Tarea programada `%s` silenciada (todos los mensajes suprimidos).",
},
MsgCronUnmuted: {
LangEnglish: "🔔 Cron job `%s` unmuted.",
LangChinese: "🔔 定时任务 `%s` 已取消静音。",
LangTraditionalChinese: "🔔 定時任務 `%s` 已取消靜音。",
LangJapanese: "🔔 スケジュールタスク `%s` のミュートを解除しました。",
LangSpanish: "🔔 Tarea programada `%s` reactivada.",
},
MsgCronCardHint: {
LangEnglish: "💡 `/cron add` · `/cron del <id>` · `/cron enable/disable <id>` · `/cron mute/unmute <id>`",
LangChinese: "💡 `/cron add` 添加 · `/cron del <id>` 删除 · `/cron enable/disable <id>` 启停 · `/cron mute/unmute <id>` 静音",
LangTraditionalChinese: "💡 `/cron add` 新增 · `/cron del <id>` 刪除 · `/cron enable/disable <id>` 啟停 · `/cron mute/unmute <id>` 靜音",
LangJapanese: "💡 `/cron add` 追加 · `/cron del <id>` 削除 · `/cron enable/disable <id>` 切替 · `/cron mute/unmute <id>` ミュート",
LangSpanish: "💡 `/cron add` · `/cron del <id>` · `/cron enable/disable <id>` · `/cron mute/unmute <id>`",
},
MsgCronBtnEnable: {
LangEnglish: "Enable",
LangChinese: "启用",
LangTraditionalChinese: "啟用",
LangJapanese: "有効",
LangSpanish: "Activar",
},
MsgCronBtnDisable: {
LangEnglish: "Disable",
LangChinese: "暂停",
LangTraditionalChinese: "暫停",
LangJapanese: "無効",
LangSpanish: "Desactivar",
},
MsgCronBtnMute: {
LangEnglish: "Mute",
LangChinese: "静音",
LangTraditionalChinese: "靜音",
LangJapanese: "ミュート",
LangSpanish: "Silenciar",
},
MsgCronBtnUnmute: {
LangEnglish: "Unmute",
LangChinese: "取消静音",
LangTraditionalChinese: "取消靜音",
LangJapanese: "ミュート解除",
LangSpanish: "Reactivar",
},
MsgCronBtnDelete: {
LangEnglish: "Delete",
LangChinese: "删除",
LangTraditionalChinese: "刪除",
LangJapanese: "削除",
LangSpanish: "Eliminar",
},
MsgCronNextShort: {
LangEnglish: "Next",
LangChinese: "下次",
LangTraditionalChinese: "下次",
LangJapanese: "次回",
LangSpanish: "Prox",
},
MsgCronLastShort: {
LangEnglish: "Last",
LangChinese: "上次",
LangTraditionalChinese: "上次",
LangJapanese: "前回",
LangSpanish: "Últ",
},
MsgStatusTitle: {
LangEnglish: "cc-connect Status\n\n" +
"Project: %s\n" +
"Agent: %s\n" +
"Work Dir: %s\n" +
"Platforms: %s\n" +
"Uptime: %s\n" +
"Language: %s\n" +
"%s" + "%s" + "%s" + "%s" + "%s" + "%s",
LangChinese: "cc-connect 状态\n\n" +
"项目: %s\n" +
"Agent: %s\n" +
"工作目录: %s\n" +
"平台: %s\n" +
"运行时间: %s\n" +
"语言: %s\n" +
"%s" + "%s" + "%s" + "%s" + "%s" + "%s",
LangTraditionalChinese: "cc-connect 狀態\n\n" +
"項目: %s\n" +
"Agent: %s\n" +
"工作目錄: %s\n" +
"平台: %s\n" +
"運行時間: %s\n" +
"語言: %s\n" +
"%s" + "%s" + "%s" + "%s" + "%s" + "%s",
LangJapanese: "cc-connect ステータス\n\n" +
"プロジェクト: %s\n" +
"エージェント: %s\n" +
"作業ディレクトリ: %s\n" +
"プラットフォーム: %s\n" +
"稼働時間: %s\n" +
"言語: %s\n" +
"%s" + "%s" + "%s" + "%s" + "%s" + "%s",
LangSpanish: "Estado de cc-connect\n\n" +
"Proyecto: %s\n" +
"Agente: %s\n" +
"Directorio: %s\n" +
"Plataformas: %s\n" +
"Tiempo activo: %s\n" +
"Idioma: %s\n" +
"%s" + "%s" + "%s" + "%s" + "%s" + "%s",
},
MsgReplyFooterRemaining: {
LangEnglish: "%d%% left",
LangChinese: "剩余 %d%%",
LangTraditionalChinese: "剩餘 %d%%",
LangJapanese: "残り %d%%",
LangSpanish: "%d%% restante",
},
MsgModelCurrent: {
LangEnglish: "Current model: %s",
LangChinese: "当前模型: %s",
LangTraditionalChinese: "當前模型: %s",
LangJapanese: "現在のモデル: %s",
LangSpanish: "Modelo actual: %s",
},
MsgModelChanged: {
LangEnglish: "Model switched to `%s`. New sessions will use this model.",
LangChinese: "模型已切换为 `%s`,新会话将使用此模型。",
LangTraditionalChinese: "模型已切換為 `%s`,新會話將使用此模型。",
LangJapanese: "モデルを `%s` に切り替えました。新しいセッションで使用されます。",
LangSpanish: "Modelo cambiado a `%s`. Las nuevas sesiones usarán este modelo.",
},
MsgModelChangeFailed: {
LangEnglish: "❌ Failed to change model: %v",
LangChinese: "❌ 切换模型失败: %v",
LangTraditionalChinese: "❌ 切換模型失敗: %v",
LangJapanese: "❌ モデルの切り替えに失敗しました: %v",
LangSpanish: "❌ Error al cambiar el modelo: %v",
},
MsgModelCardSwitching: {
LangEnglish: "Switching model to `%s`...",
LangChinese: "正在切换模型为 `%s`...",
LangTraditionalChinese: "正在切換模型為 `%s`...",
LangJapanese: "モデルを `%s` に切り替えています...",
LangSpanish: "Cambiando el modelo a `%s`...",
},
MsgModelCardSwitched: {
LangEnglish: "Model switched to `%s`.",
LangChinese: "模型已切换为 `%s`。",
LangTraditionalChinese: "模型已切換為 `%s`。",
LangJapanese: "モデルを `%s` に切り替えました。",
LangSpanish: "Modelo cambiado a `%s`.",
},
MsgModelCardSwitchFailed: {
LangEnglish: "Failed to switch model: %v",
LangChinese: "切换模型失败: %v",
LangTraditionalChinese: "切換模型失敗: %v",
LangJapanese: "モデルの切り替えに失敗しました: %v",
LangSpanish: "Error al cambiar el modelo: %v",
},
MsgModelNotSupported: {
LangEnglish: "This agent does not support model switching.",
LangChinese: "当前 Agent 不支持模型切换。",
LangTraditionalChinese: "當前 Agent 不支援模型切換。",
LangJapanese: "このエージェントはモデルの切り替えをサポートしていません。",
LangSpanish: "Este agente no soporta el cambio de modelo.",
},
MsgReasoningCurrent: {
LangEnglish: "Current reasoning effort: %s",
LangChinese: "当前推理强度: %s",
LangTraditionalChinese: "當前推理強度: %s",
LangJapanese: "現在の推論強度: %s",
LangSpanish: "Esfuerzo de razonamiento actual: %s",
},
MsgReasoningChanged: {
LangEnglish: "Reasoning effort switched to `%s`. New sessions will use this setting.",
LangChinese: "推理强度已切换为 `%s`,新会话将使用此设置。",
LangTraditionalChinese: "推理強度已切換為 `%s`,新會話將使用此設定。",
LangJapanese: "推論強度を `%s` に切り替えました。新しいセッションで使用されます。",
LangSpanish: "Esfuerzo de razonamiento cambiado a `%s`. Las nuevas sesiones usarán esta configuración.",
},
MsgReasoningNotSupported: {
LangEnglish: "This agent does not support reasoning effort switching.",
LangChinese: "当前 Agent 不支持推理强度切换。",
LangTraditionalChinese: "當前 Agent 不支援推理強度切換。",
LangJapanese: "このエージェントは推論強度の切り替えをサポートしていません。",
LangSpanish: "Este agente no soporta el cambio de esfuerzo de razonamiento.",
},
MsgMemoryNotSupported: {
LangEnglish: "This agent does not support memory files.",
LangChinese: "当前 Agent 不支持记忆文件。",
LangTraditionalChinese: "當前 Agent 不支援記憶檔案。",
LangJapanese: "このエージェントはメモリファイルをサポートしていません。",
LangSpanish: "Este agente no soporta archivos de memoria.",
},
MsgMemoryShowProject: {
LangEnglish: "📝 **Project Memory** (`%s`)\n\n%s",
LangChinese: "📝 **项目记忆** (`%s`)\n\n%s",
LangTraditionalChinese: "📝 **項目記憶** (`%s`)\n\n%s",
LangJapanese: "📝 **プロジェクトメモリ** (`%s`)\n\n%s",
LangSpanish: "📝 **Memoria del proyecto** (`%s`)\n\n%s",
},
MsgMemoryShowGlobal: {
LangEnglish: "📝 **Global Memory** (`%s`)\n\n%s",
LangChinese: "📝 **全局记忆** (`%s`)\n\n%s",
LangTraditionalChinese: "📝 **全域記憶** (`%s`)\n\n%s",
LangJapanese: "📝 **グローバルメモリ** (`%s`)\n\n%s",
LangSpanish: "📝 **Memoria global** (`%s`)\n\n%s",
},
MsgMemoryEmpty: {
LangEnglish: "📝 `%s`\n\n(empty — no content yet)",
LangChinese: "📝 `%s`\n\n(空 — 尚无内容)",
LangTraditionalChinese: "📝 `%s`\n\n(空 — 尚無內容)",
LangJapanese: "📝 `%s`\n\n(空 — まだ内容がありません)",
LangSpanish: "📝 `%s`\n\n(vacío — aún sin contenido)",
},
MsgMemoryAdded: {
LangEnglish: "✅ Added to `%s`",
LangChinese: "✅ 已追加到 `%s`",
LangTraditionalChinese: "✅ 已追加到 `%s`",
LangJapanese: "✅ `%s` に追加しました",
LangSpanish: "✅ Agregado a `%s`",
},
MsgMemoryAddFailed: {
LangEnglish: "❌ Failed to write memory file: %v",
LangChinese: "❌ 写入记忆文件失败: %v",
LangTraditionalChinese: "❌ 寫入記憶檔案失敗: %v",
LangJapanese: "❌ メモリファイルの書き込みに失敗しました: %v",
LangSpanish: "❌ Error al escribir archivo de memoria: %v",
},
MsgUsageNotSupported: {
LangEnglish: "Current agent does not support `/usage`.",
LangChinese: "当前 Agent 不支持 `/usage`。",
LangTraditionalChinese: "目前 Agent 不支援 `/usage`。",
LangJapanese: "現在のエージェントは `/usage` をサポートしていません。",
LangSpanish: "El agente actual no admite `/usage`.",
},
MsgUsageFetchFailed: {
LangEnglish: "Failed to fetch usage: %v",
LangChinese: "获取 usage 失败:%v",
LangTraditionalChinese: "取得 usage 失敗:%v",
LangJapanese: "usage の取得に失敗しました: %v",
LangSpanish: "No se pudo obtener usage: %v",
},
MsgMemoryAddUsage: {
LangEnglish: "Usage:\n" +
"`/memory` — show project memory\n" +
"`/memory add <text>` — add to project memory\n" +
"`/memory global` — show global memory\n" +
"`/memory global add <text>` — add to global memory",
LangChinese: "用法:\n" +
"`/memory` — 查看项目记忆\n" +
"`/memory add <文本>` — 追加到项目记忆\n" +
"`/memory global` — 查看全局记忆\n" +
"`/memory global add <文本>` — 追加到全局记忆",
LangTraditionalChinese: "用法:\n" +
"`/memory` — 查看項目記憶\n" +
"`/memory add <文字>` — 追加到項目記憶\n" +
"`/memory global` — 查看全域記憶\n" +
"`/memory global add <文字>` — 追加到全域記憶",
LangJapanese: "使い方:\n" +
"`/memory` — プロジェクトメモリを表示\n" +
"`/memory add <テキスト>` — プロジェクトメモリに追加\n" +
"`/memory global` — グローバルメモリを表示\n" +
"`/memory global add <テキスト>` — グローバルメモリに追加",
LangSpanish: "Uso:\n" +
"`/memory` — ver memoria del proyecto\n" +
"`/memory add <texto>` — agregar a memoria del proyecto\n" +
"`/memory global` — ver memoria global\n" +
"`/memory global add <texto>` — agregar a memoria global",
},
MsgCompressNotSupported: {
LangEnglish: "This agent does not support context compression.",
LangChinese: "当前 Agent 不支持上下文压缩。可以使用 `/new` 开始新会话。",
LangTraditionalChinese: "當前 Agent 不支援上下文壓縮。可以使用 `/new` 開始新會話。",
LangJapanese: "このエージェントはコンテキスト圧縮をサポートしていません。`/new` で新しいセッションを開始できます。",
LangSpanish: "Este agente no soporta la compresión de contexto. Puede usar `/new` para iniciar una nueva sesión.",
},
MsgCompressing: {
LangEnglish: "🗜 Compressing context...",
LangChinese: "🗜 正在压缩上下文...",
LangTraditionalChinese: "🗜 正在壓縮上下文...",
LangJapanese: "🗜 コンテキストを圧縮中...",
LangSpanish: "🗜 Comprimiendo contexto...",
},
MsgCompressNoSession: {
LangEnglish: "No active session to compress. Send a message first.",
LangChinese: "没有活跃的会话可以压缩。请先发送一条消息。",
LangTraditionalChinese: "沒有活躍的會話可以壓縮。請先發送一條訊息。",
LangJapanese: "圧縮するアクティブなセッションがありません。まずメッセージを送信してください。",
LangSpanish: "No hay sesión activa para comprimir. Envíe un mensaje primero.",
},
MsgCompressDone: {
LangEnglish: "✅ Context compressed.",
LangChinese: "✅ 上下文压缩完成。",
LangTraditionalChinese: "✅ 上下文壓縮完成。",
LangJapanese: "✅ コンテキスト圧縮完了。",
LangSpanish: "✅ Contexto comprimido.",
},
// Inline strings for engine.go commands
MsgStatusMode: {
LangEnglish: "Mode: %s\n",
LangChinese: "权限模式: %s\n",
LangTraditionalChinese: "權限模式: %s\n",
LangJapanese: "権限モード: %s\n",
LangSpanish: "Modo: %s\n",
},
MsgStatusSession: {
LangEnglish: "Session: %s (messages: %d)\n",
LangChinese: "当前会话: %s (消息: %d)\n",
LangTraditionalChinese: "當前會話: %s (訊息: %d)\n",
LangJapanese: "セッション: %s (メッセージ: %d)\n",
LangSpanish: "Sesión: %s (mensajes: %d)\n",
},
MsgStatusCron: {
LangEnglish: "Cron jobs: %d (enabled: %d)\n",
LangChinese: "定时任务: %d (启用: %d)\n",
LangTraditionalChinese: "定時任務: %d (啟用: %d)\n",
LangJapanese: "スケジュールタスク: %d (有効: %d)\n",
LangSpanish: "Tareas programadas: %d (habilitadas: %d)\n",
},
MsgStatusThinkingMessages: {
LangEnglish: "Thinking messages: %s\n",
LangChinese: "思考消息: %s\n",
LangTraditionalChinese: "思考訊息: %s\n",
LangJapanese: "思考メッセージ: %s\n",
LangSpanish: "Mensajes de razonamiento: %s\n",
},
MsgStatusToolMessages: {
LangEnglish: "Tool progress: %s\n",
LangChinese: "工具进度: %s\n",
LangTraditionalChinese: "工具進度: %s\n",
LangJapanese: "ツール進捗: %s\n",
LangSpanish: "Progreso de herramientas: %s\n",
},
MsgStatusSessionKey: {
LangEnglish: "Session Key: `%s`\n",
LangChinese: "会话 Key: `%s`\n",
LangTraditionalChinese: "會話 Key: `%s`\n",
LangJapanese: "セッションキー: `%s`\n",
LangSpanish: "Clave de sesión: `%s`\n",
},
MsgStatusAgentSID: {
LangEnglish: "Agent SID: `%s`\n",
LangChinese: "Agent SID: `%s`\n",
LangTraditionalChinese: "Agent SID: `%s`\n",
LangJapanese: "Agent SID: `%s`\n",
LangSpanish: "Agent SID: `%s`\n",
},
MsgStatusUserID: {
LangEnglish: "User ID: `%s`\n",
LangChinese: "User ID: `%s`\n",
LangTraditionalChinese: "User ID: `%s`\n",
LangJapanese: "ユーザーID: `%s`\n",
LangSpanish: "ID de usuario: `%s`\n",
},
MsgEnabledShort: {
LangEnglish: "ON",
LangChinese: "开启",
LangTraditionalChinese: "開啟",
LangJapanese: "ON",
LangSpanish: "Activado",
},
MsgDisabledShort: {
LangEnglish: "OFF",
LangChinese: "关闭",
LangTraditionalChinese: "關閉",
LangJapanese: "OFF",
LangSpanish: "Desactivado",
},
MsgModelDefault: {
LangEnglish: "Current model: (not set, using agent default)\n",
LangChinese: "当前模型: (未设置,使用 Agent 默认值)\n",
LangTraditionalChinese: "當前模型: (未設置,使用 Agent 預設值)\n",
LangJapanese: "現在のモデル: (未設定、エージェントのデフォルトを使用)\n",
LangSpanish: "Modelo actual: (no configurado, usando predeterminado del agente)\n",
},
MsgModelListTitle: {
LangEnglish: "Available models:\n",
LangChinese: "可用模型:\n",
LangTraditionalChinese: "可用模型:\n",
LangJapanese: "利用可能なモデル:\n",
LangSpanish: "Modelos disponibles:\n",
},
MsgModelUsage: {
LangEnglish: "Usage: `/model switch <number>` or `/model switch <model_name>`",
LangChinese: "用法: `/model switch <序号>` 或 `/model switch <模型名>`",
LangTraditionalChinese: "用法: `/model switch <序號>` 或 `/model switch <模型名>`",
LangJapanese: "使い方: `/model switch <番号>` または `/model switch <モデル名>`",
LangSpanish: "Uso: `/model switch <número>` o `/model switch <nombre_modelo>`",
},
MsgReasoningDefault: {
LangEnglish: "Current reasoning effort: (not set, using Codex default)\n",
LangChinese: "当前推理强度: (未设置,使用 Codex 默认值)\n",
LangTraditionalChinese: "當前推理強度: (未設置,使用 Codex 預設值)\n",
LangJapanese: "現在の推論強度: (未設定、Codex のデフォルトを使用)\n",
LangSpanish: "Esfuerzo de razonamiento actual: (no configurado, usando el valor predeterminado de Codex)\n",
},
MsgReasoningListTitle: {
LangEnglish: "Available reasoning levels:\n",
LangChinese: "可用推理强度:\n",
LangTraditionalChinese: "可用推理強度:\n",
LangJapanese: "利用可能な推論強度:\n",
LangSpanish: "Niveles de razonamiento disponibles:\n",
},
MsgReasoningUsage: {
LangEnglish: "Usage: `/reasoning <number>` or `/reasoning <low|medium|high|xhigh>`",
LangChinese: "用法: `/reasoning <序号>` 或 `/reasoning <low|medium|high|xhigh>`",
LangTraditionalChinese: "用法: `/reasoning <序號>` 或 `/reasoning <low|medium|high|xhigh>`",
LangJapanese: "使い方: `/reasoning <番号>` または `/reasoning <low|medium|high|xhigh>`",
LangSpanish: "Uso: `/reasoning <número>` o `/reasoning <low|medium|high|xhigh>`",
},
MsgModeUsage: {
LangEnglish: "\nUse `/mode <name>` to switch.\nAvailable: %s",
LangChinese: "\n使用 `/mode <名称>` 切换模式\n可用值: %s",
LangTraditionalChinese: "\n使用 `/mode <名稱>` 切換模式\n可用值: %s",
LangJapanese: "\n`/mode <名前>` で切り替え\n選択肢: %s",
LangSpanish: "\nUse `/mode <nombre>` para cambiar.\nDisponibles: %s",
},
MsgLangSelectPlaceholder: {
LangEnglish: "Select language", LangChinese: "选择语言", LangTraditionalChinese: "選擇語言",
LangJapanese: "言語を選択", LangSpanish: "Seleccionar idioma",
},
MsgModelSelectPlaceholder: {
LangEnglish: "Select model", LangChinese: "选择模型", LangTraditionalChinese: "選擇模型",
LangJapanese: "モデルを選択", LangSpanish: "Seleccionar modelo",
},
MsgReasoningSelectPlaceholder: {
LangEnglish: "Select reasoning level", LangChinese: "选择推理强度", LangTraditionalChinese: "選擇推理強度",
LangJapanese: "推論強度を選択", LangSpanish: "Seleccionar nivel de razonamiento",
},
MsgModeSelectPlaceholder: {
LangEnglish: "Select mode", LangChinese: "选择模式", LangTraditionalChinese: "選擇模式",
LangJapanese: "モードを選択", LangSpanish: "Seleccionar modo",
},
MsgProviderSelectPlaceholder: {
LangEnglish: "Select provider", LangChinese: "选择 Provider", LangTraditionalChinese: "選擇 Provider",
LangJapanese: "プロバイダーを選択", LangSpanish: "Seleccionar proveedor",
},
MsgProviderClearOption: {
LangEnglish: "Do not use provider", LangChinese: "不使用服务商", LangTraditionalChinese: "不使用服務商",
LangJapanese: "プロバイダーを使用しない", LangSpanish: "No usar proveedor",
},
MsgCardBack: {
LangEnglish: "← Back", LangChinese: "← 返回", LangTraditionalChinese: "← 返回",
LangJapanese: "← 戻る", LangSpanish: "← Volver",
},
MsgCardPrev: {
LangEnglish: "← Prev", LangChinese: "← 上一页", LangTraditionalChinese: "← 上一頁",
LangJapanese: "← 前へ", LangSpanish: "← Anterior",
},
MsgCardNext: {
LangEnglish: "Next →", LangChinese: "下一页 →", LangTraditionalChinese: "下一頁 →",
LangJapanese: "次へ →", LangSpanish: "Siguiente →",
},
MsgCardTitleStatus: {
LangEnglish: "cc-connect Status", LangChinese: "cc-connect 状态", LangTraditionalChinese: "cc-connect 狀態",
LangJapanese: "cc-connect ステータス", LangSpanish: "Estado de cc-connect",
},
MsgCardTitleLanguage: {
LangEnglish: "Language", LangChinese: "语言", LangTraditionalChinese: "語言",
LangJapanese: "言語", LangSpanish: "Idioma",
},
MsgCardTitleModel: {
LangEnglish: "Model", LangChinese: "模型", LangTraditionalChinese: "模型",
LangJapanese: "モデル", LangSpanish: "Modelo",
},
MsgCardTitleReasoning: {
LangEnglish: "Reasoning", LangChinese: "推理强度", LangTraditionalChinese: "推理強度",
LangJapanese: "推論強度", LangSpanish: "Razonamiento",
},
MsgCardTitleMode: {
LangEnglish: "Permission Mode", LangChinese: "权限模式", LangTraditionalChinese: "權限模式",
LangJapanese: "権限モード", LangSpanish: "Modo de permisos",
},
MsgCardTitleSessions: {
LangEnglish: "%s Sessions (%d)", LangChinese: "%s 会话列表 (%d)", LangTraditionalChinese: "%s 會話列表 (%d)",
LangJapanese: "%s セッション (%d)", LangSpanish: "Sesiones de %s (%d)",
},
MsgCardTitleSessionsPaged: {
LangEnglish: "%s Sessions (%d) — %d/%d", LangChinese: "%s 会话列表 (%d) · 第 %d/%d 页", LangTraditionalChinese: "%s 會話列表 (%d) · 第 %d/%d 頁",
LangJapanese: "%s セッション (%d) · %d/%d ページ", LangSpanish: "Sesiones de %s (%d) · Página %d/%d",
},
MsgCardTitleCurrentSession: {
LangEnglish: "Current Session", LangChinese: "当前会话", LangTraditionalChinese: "當前會話",
LangJapanese: "現在のセッション", LangSpanish: "Sesión actual",
},
MsgCardTitleHistory: {
LangEnglish: "History", LangChinese: "历史记录", LangTraditionalChinese: "歷史記錄",
LangJapanese: "履歴", LangSpanish: "Historial",
},
MsgCardTitleHistoryLast: {
LangEnglish: "History (last %d)", LangChinese: "历史记录(最近 %d 条)", LangTraditionalChinese: "歷史記錄(最近 %d 條)",
LangJapanese: "履歴(直近 %d 件)", LangSpanish: "Historial (últimos %d)",
},
MsgCardTitleProvider: {
LangEnglish: "Provider", LangChinese: "Provider", LangTraditionalChinese: "Provider",
LangJapanese: "プロバイダー", LangSpanish: "Proveedor",
},
MsgCardTitleCron: {
LangEnglish: "Cron", LangChinese: "定时任务", LangTraditionalChinese: "定時任務",
LangJapanese: "スケジュールタスク", LangSpanish: "Tareas programadas",
},
MsgCardTitleHeartbeat: {
LangEnglish: "Heartbeat", LangChinese: "心跳", LangTraditionalChinese: "心跳",
LangJapanese: "ハートビート", LangSpanish: "Heartbeat",
},
MsgCardTitleCommands: {
LangEnglish: "Commands", LangChinese: "命令", LangTraditionalChinese: "命令",
LangJapanese: "コマンド", LangSpanish: "Comandos",
},
MsgCardTitleAlias: {
LangEnglish: "Alias", LangChinese: "别名", LangTraditionalChinese: "別名",
LangJapanese: "エイリアス", LangSpanish: "Alias",
},
MsgCardTitleConfig: {
LangEnglish: "Config", LangChinese: "配置", LangTraditionalChinese: "配置",
LangJapanese: "設定", LangSpanish: "Configuración",
},
MsgCardTitleSkills: {
LangEnglish: "Skills", LangChinese: "Skills", LangTraditionalChinese: "Skills",
LangJapanese: "スキル", LangSpanish: "Skills",
},
MsgCardTitleDoctor: {
LangEnglish: "Doctor", LangChinese: "系统诊断", LangTraditionalChinese: "系統診斷",
LangJapanese: "診断", LangSpanish: "Diagnóstico",
},
MsgCardTitleVersion: {
LangEnglish: "Version", LangChinese: "版本", LangTraditionalChinese: "版本",
LangJapanese: "バージョン", LangSpanish: "Versión",
},
MsgCardTitleUpgrade: {
LangEnglish: "Upgrade", LangChinese: "升级", LangTraditionalChinese: "升級",
LangJapanese: "アップグレード", LangSpanish: "Actualización",
},
MsgListItem: {
LangEnglish: "%s **%d.** %s · **%d** msgs · %s",
LangChinese: "%s **%d.** %s · **%d** 条消息 · %s",
LangTraditionalChinese: "%s **%d.** %s · **%d** 則訊息 · %s",
LangJapanese: "%s **%d.** %s · **%d** 件のメッセージ · %s",
LangSpanish: "%s **%d.** %s · **%d** mensajes · %s",
},
MsgListEmptySummary: {
LangEnglish: "(empty)", LangChinese: "(空)", LangTraditionalChinese: "(空)",
LangJapanese: "(空)", LangSpanish: "(vacío)",
},
MsgCronIDLabel: {
LangEnglish: "ID: %s\n", LangChinese: "ID%s\n", LangTraditionalChinese: "ID%s\n",
LangJapanese: "ID: %s\n", LangSpanish: "ID: %s\n",
},
MsgCronFailedSuffix: {
LangEnglish: " (failed: %s)", LangChinese: "(失败:%s", LangTraditionalChinese: "(失敗:%s",
LangJapanese: "(失敗: %s", LangSpanish: " (falló: %s)",
},
MsgCommandsTagAgent: {
LangEnglish: " [agent]", LangChinese: " [代理]", LangTraditionalChinese: " [代理]",
LangJapanese: " [エージェント]", LangSpanish: " [agente]",
},
MsgCommandsTagShell: {
LangEnglish: " [shell]", LangChinese: " [终端]", LangTraditionalChinese: " [終端]",
LangJapanese: " [シェル]", LangSpanish: " [shell]",
},
MsgUpgradeTimeoutSuffix: {
LangEnglish: " (timeout)", LangChinese: "(超时)", LangTraditionalChinese: "(逾時)",
LangJapanese: "(タイムアウト)", LangSpanish: " (tiempo de espera agotado)",
},
MsgCronScheduleLabel: {
LangEnglish: "Schedule: %s `%s`\n",
LangChinese: "调度: %s `%s`\n",
LangTraditionalChinese: "調度: %s `%s`\n",
LangJapanese: "スケジュール: %s `%s`\n",
LangSpanish: "Programación: %s `%s`\n",
},
MsgCronNextRunLabel: {
LangEnglish: "Next run: %s\n",
LangChinese: "下次执行: %s\n",
LangTraditionalChinese: "下次執行: %s\n",
LangJapanese: "次回実行: %s\n",
LangSpanish: "Próxima ejecución: %s\n",
},
MsgCronLastRunLabel: {
LangEnglish: "Last run: %s",
LangChinese: "上次执行: %s",
LangTraditionalChinese: "上次執行: %s",
LangJapanese: "前回実行: %s",
LangSpanish: "Última ejecución: %s",
},
MsgPermBtnAllow: {
LangEnglish: "Allow",
LangChinese: "允许",
LangTraditionalChinese: "允許",
LangJapanese: "許可",
LangSpanish: "Permitir",
},
MsgPermBtnDeny: {
LangEnglish: "Deny",
LangChinese: "拒绝",
LangTraditionalChinese: "拒絕",
LangJapanese: "拒否",
LangSpanish: "Denegar",
},
MsgPermBtnAllowAll: {
LangEnglish: "Allow All (this session)",
LangChinese: "允许所有 (本次会话)",
LangTraditionalChinese: "允許所有 (本次會話)",
LangJapanese: "すべて許可 (このセッション)",
LangSpanish: "Permitir todo (esta sesión)",
},
MsgPermCardTitle: {
LangEnglish: "Permission Request",
LangChinese: "权限请求",
LangTraditionalChinese: "權限請求",
LangJapanese: "権限リクエスト",
LangSpanish: "Solicitud de permiso",
},
MsgPermCardBody: {
LangEnglish: "Agent wants to use **%s**:\n\n```\n%s\n```",
LangChinese: "Agent 想要使用 **%s**:\n\n```\n%s\n```",
LangTraditionalChinese: "Agent 想要使用 **%s**:\n\n```\n%s\n```",
LangJapanese: "エージェントが **%s** を使用しようとしています:\n\n```\n%s\n```",
LangSpanish: "El agente quiere usar **%s**:\n\n```\n%s\n```",
},
MsgPermCardNote: {
LangEnglish: "If buttons are unresponsive, reply: allow / deny / allow all",
LangChinese: "如果按钮无响应,请直接回复:允许 / 拒绝 / 允许所有",
LangTraditionalChinese: "若按鈕無回應,請直接回覆:允許 / 拒絕 / 允許所有",
LangJapanese: "ボタンが反応しない場合は直接返信: allow / deny / allow all",
LangSpanish: "Si los botones no responden, responda: allow / deny / allow all",
},
MsgAskQuestionTitle: {
LangEnglish: "Agent Question",
LangChinese: "Agent 提问",
LangTraditionalChinese: "Agent 提問",
LangJapanese: "エージェントの質問",
LangSpanish: "Pregunta del agente",
},
MsgAskQuestionNote: {
LangEnglish: "If buttons are unresponsive, reply with the option number (e.g. 1) or type your answer",
LangChinese: "如果按钮无响应,请回复选项编号(如 1)或直接输入你的回答",
LangTraditionalChinese: "若按鈕無回應,請回覆選項編號(如 1)或直接輸入你的回答",
LangJapanese: "ボタンが反応しない場合は、番号(例: 1)で返信するか、直接回答を入力してください",
LangSpanish: "Si los botones no responden, responda con el número de opción (ej. 1) o escriba su respuesta",
},
MsgAskQuestionMulti: {
LangEnglish: " (multiple selections allowed, separate with commas)",
LangChinese: "(可多选,用逗号分隔)",
LangTraditionalChinese: "(可多選,用逗號分隔)",
LangJapanese: "(複数選択可、カンマで区切る)",
LangSpanish: " (selección múltiple permitida, separe con comas)",
},
MsgAskQuestionPrompt: {
LangEnglish: "❓ **%s**\n\n%s\n\nReply with the option number or type your answer.",
LangChinese: "❓ **%s**\n\n%s\n\n请回复选项编号或直接输入你的回答。",
LangTraditionalChinese: "❓ **%s**\n\n%s\n\n請回覆選項編號或直接輸入你的回答。",
LangJapanese: "❓ **%s**\n\n%s\n\n番号で返信するか、回答を直接入力してください。",
LangSpanish: "❓ **%s**\n\n%s\n\nResponda con el número de opción o escriba su respuesta.",
},
MsgAskQuestionAnswered: {
LangEnglish: "Answer",
LangChinese: "已回答",
LangTraditionalChinese: "已回答",
LangJapanese: "回答済み",
LangSpanish: "Respondido",
},
MsgCommandsTitle: {
LangEnglish: "🔧 **Custom Commands** (%d)\n\n",
LangChinese: "🔧 **自定义命令** (%d)\n\n",
LangTraditionalChinese: "🔧 **自訂命令** (%d)\n\n",
LangJapanese: "🔧 **カスタムコマンド** (%d)\n\n",
LangSpanish: "🔧 **Comandos personalizados** (%d)\n\n",
},
MsgCommandsEmpty: {
LangEnglish: "No custom commands configured.\n\nUse `/commands add <name> <prompt>` or add `[[commands]]` in config.toml.",
LangChinese: "未配置自定义命令。\n\n使用 `/commands add <名称> <prompt>` 添加,或在 config.toml 中配置 `[[commands]]`。",
LangTraditionalChinese: "未配置自訂命令。\n\n使用 `/commands add <名稱> <prompt>` 新增,或在 config.toml 中配置 `[[commands]]`。",
LangJapanese: "カスタムコマンドが設定されていません。\n\n`/commands add <名前> <プロンプト>` で追加するか、config.toml に `[[commands]]` を追加してください。",
LangSpanish: "No hay comandos personalizados configurados.\n\nUse `/commands add <nombre> <prompt>` o agregue `[[commands]]` en config.toml.",
},
MsgCommandsHint: {
LangEnglish: "Type `/<name> [args]` to use.\n`/commands add <name> <prompt>` to add prompt command\n`/commands addexec <name> <shell>` to add exec command\n`/commands del <name>` to remove",
LangChinese: "输入 `/<名称> [参数]` 使用。\n`/commands add <名称> <prompt>` 添加 prompt 命令\n`/commands addexec <名称> <shell命令>` 添加 exec 命令\n`/commands del <名称>` 删除",
LangTraditionalChinese: "輸入 `/<名稱> [參數]` 使用。\n`/commands add <名稱> <prompt>` 新增 prompt 命令\n`/commands addexec <名稱> <shell命令>` 新增 exec 命令\n`/commands del <名稱>` 刪除",
LangJapanese: "`/<名前> [引数]` で使用。\n`/commands add <名前> <プロンプト>` プロンプトコマンド追加\n`/commands addexec <名前> <シェルコマンド>` execコマンド追加\n`/commands del <名前>` 削除",
LangSpanish: "Escriba `/<nombre> [args]` para usar.\n`/commands add <nombre> <prompt>` agregar comando prompt\n`/commands addexec <nombre> <shell>` agregar comando exec\n`/commands del <nombre>` eliminar",
},
MsgCommandsUsage: {
LangEnglish: "Usage:\n`/commands` — list all custom commands\n`/commands add <name> <prompt>` — add prompt command\n`/commands addexec <name> <shell>` — add exec command\n`/commands del <name>` — remove a command",
LangChinese: "用法:\n`/commands` — 列出所有自定义命令\n`/commands add <名称> <prompt>` — 添加 prompt 命令\n`/commands addexec <名称> <shell命令>` — 添加 exec 命令\n`/commands del <名称>` — 删除命令",
LangTraditionalChinese: "用法:\n`/commands` — 列出所有自訂命令\n`/commands add <名稱> <prompt>` — 新增 prompt 命令\n`/commands addexec <名稱> <shell命令>` — 新增 exec 命令\n`/commands del <名稱>` — 刪除命令",
LangJapanese: "使い方:\n`/commands` — カスタムコマンド一覧\n`/commands add <名前> <プロンプト>` — プロンプトコマンド追加\n`/commands addexec <名前> <シェルコマンド>` — execコマンド追加\n`/commands del <名前>` — コマンド削除",
LangSpanish: "Uso:\n`/commands` — listar comandos personalizados\n`/commands add <nombre> <prompt>` — agregar comando prompt\n`/commands addexec <nombre> <shell>` — agregar comando exec\n`/commands del <nombre>` — eliminar comando",
},
MsgCommandsAddUsage: {
LangEnglish: "Usage: `/commands add <name> <prompt template>`\n\nExample: `/commands add finduser Search the database for user「{{1}}」`",
LangChinese: "用法:`/commands add <名称> <prompt 模板>`\n\n示例:`/commands add finduser 在数据库中查找用户「{{1}}」`",
LangTraditionalChinese: "用法:`/commands add <名稱> <prompt 模板>`\n\n範例:`/commands add finduser 在資料庫中查找用戶「{{1}}」`",
LangJapanese: "使い方: `/commands add <名前> <プロンプトテンプレート>`\n\n例: `/commands add finduser データベースでユーザー「{{1}}」を検索`",
LangSpanish: "Uso: `/commands add <nombre> <plantilla prompt>`\n\nEjemplo: `/commands add finduser Buscar en la base de datos al usuario「{{1}}」`",
},
MsgCommandsAddExecUsage: {
LangEnglish: "Usage: `/commands addexec <name> <shell command>`\n `/commands addexec --work-dir <dir> <name> <shell command>`\n\nExamples:\n`/commands addexec push git push`\n`/commands addexec status git status {{args}}`",
LangChinese: "用法:`/commands addexec <名称> <shell 命令>`\n `/commands addexec --work-dir <目录> <名称> <shell 命令>`\n\n示例:\n`/commands addexec push git push`\n`/commands addexec status git status {{args}}`",
LangTraditionalChinese: "用法:`/commands addexec <名稱> <shell 命令>`\n `/commands addexec --work-dir <目錄> <名稱> <shell 命令>`\n\n範例:\n`/commands addexec push git push`\n`/commands addexec status git status {{args}}`",
LangJapanese: "使い方: `/commands addexec <名前> <シェルコマンド>`\n `/commands addexec --work-dir <ディレクトリ> <名前> <シェルコマンド>`\n\n例:\n`/commands addexec push git push`\n`/commands addexec status git status {{args}}`",
LangSpanish: "Uso: `/commands addexec <nombre> <comando shell>`\n `/commands addexec --work-dir <dir> <nombre> <comando shell>`\n\nEjemplos:\n`/commands addexec push git push`\n`/commands addexec status git status {{args}}`",
},
MsgCommandsAdded: {
LangEnglish: "✅ Command `/%s` added.\nPrompt: %s",
LangChinese: "✅ 命令 `/%s` 已添加。\nPrompt: %s",
LangTraditionalChinese: "✅ 命令 `/%s` 已新增。\nPrompt: %s",
LangJapanese: "✅ コマンド `/%s` を追加しました。\nプロンプト: %s",
LangSpanish: "✅ Comando `/%s` agregado.\nPrompt: %s",
},
MsgCommandsAddExists: {
LangEnglish: "❌ Command `/%s` already exists. Remove it first with `/commands del %s`.",
LangChinese: "❌ 命令 `/%s` 已存在。请先使用 `/commands del %s` 删除。",
LangTraditionalChinese: "❌ 命令 `/%s` 已存在。請先使用 `/commands del %s` 刪除。",
LangJapanese: "❌ コマンド `/%s` は既に存在します。`/commands del %s` で削除してから追加してください。",
LangSpanish: "❌ El comando `/%s` ya existe. Elimínelo primero con `/commands del %s`.",
},
MsgCommandsDelUsage: {
LangEnglish: "Usage: `/commands del <name>`",
LangChinese: "用法:`/commands del <名称>`",
LangTraditionalChinese: "用法:`/commands del <名稱>`",
LangJapanese: "使い方: `/commands del <名前>`",
LangSpanish: "Uso: `/commands del <nombre>`",
},
MsgCommandsDeleted: {
LangEnglish: "✅ Command `/%s` removed.",
LangChinese: "✅ 命令 `/%s` 已删除。",
LangTraditionalChinese: "✅ 命令 `/%s` 已刪除。",
LangJapanese: "✅ コマンド `/%s` を削除しました。",
LangSpanish: "✅ Comando `/%s` eliminado.",
},
MsgCommandsNotFound: {
LangEnglish: "❌ Command `/%s` not found. Use `/commands` to see available commands.",
LangChinese: "❌ 命令 `/%s` 未找到。使用 `/commands` 查看可用命令。",
LangTraditionalChinese: "❌ 命令 `/%s` 未找到。使用 `/commands` 查看可用命令。",
LangJapanese: "❌ コマンド `/%s` が見つかりません。`/commands` で一覧を確認してください。",
LangSpanish: "❌ Comando `/%s` no encontrado. Use `/commands` para ver los comandos disponibles.",
},
MsgCommandsExecAdded: {
LangEnglish: "✅ Exec command `/%s` added.\nCommand: %s",
LangChinese: "✅ Exec 命令 `/%s` 已添加。\n命令: %s",
LangTraditionalChinese: "✅ Exec 命令 `/%s` 已新增。\n命令: %s",
LangJapanese: "✅ Exec コマンド `/%s` を追加しました。\nコマンド: %s",
LangSpanish: "✅ Comando exec `/%s` agregado.\nComando: %s",
},
MsgCommandExecTimeout: {
LangEnglish: "⏱️ Command `/%s` timed out (60s limit).",
LangChinese: "⏱️ 命令 `/%s` 超时(60秒限制)。",
LangTraditionalChinese: "⏱️ 命令 `/%s` 超時(60秒限制)。",
LangJapanese: "⏱️ コマンド `/%s` がタイムアウトしました(60秒制限)。",
LangSpanish: "⏱️ Comando `/%s` agotó el tiempo (límite 60s).",
},
MsgCommandExecError: {
LangEnglish: "❌ Command `/%s` failed:\n%s",
LangChinese: "❌ 命令 `/%s` 执行失败:\n%s",
LangTraditionalChinese: "❌ 命令 `/%s` 執行失敗:\n%s",
LangJapanese: "❌ コマンド `/%s` が失敗しました:\n%s",
LangSpanish: "❌ Comando `/%s` falló:\n%s",
},
MsgCommandExecSuccess: {
LangEnglish: "✅ Command executed successfully (no output).",
LangChinese: "✅ 命令执行成功(无输出)。",
LangTraditionalChinese: "✅ 命令執行成功(無輸出)。",
LangJapanese: "✅ コマンドが正常に実行されました(出力なし)。",
LangSpanish: "✅ Comando ejecutado exitosamente (sin salida).",
},
MsgSkillsTitle: {
LangEnglish: "📋 Available Skills (%s) — %d skill(s)\n\n",
LangChinese: "📋 可用 Skills (%s) — %d 个\n\n",
LangTraditionalChinese: "📋 可用 Skills (%s) — %d 個\n\n",
LangJapanese: "📋 利用可能なスキル (%s) — %d 個\n\n",
LangSpanish: "📋 Skills disponibles (%s) — %d skill(s)\n\n",
},
MsgSkillsEmpty: {
LangEnglish: "No skills found.\nSkills are discovered from agent directories (e.g. .claude/skills/<name>/SKILL.md).",
LangChinese: "未发现任何 Skill。\nSkill 从 Agent 目录自动发现(如 .claude/skills/<name>/SKILL.md)。",
LangTraditionalChinese: "未發現任何 Skill。\nSkill 從 Agent 目錄自動發現(如 .claude/skills/<name>/SKILL.md)。",
LangJapanese: "スキルが見つかりません。\nスキルはエージェントのディレクトリから自動検出されます(例: .claude/skills/<name>/SKILL.md)。",
LangSpanish: "No se encontraron skills.\nLos skills se descubren de los directorios del agente (ej. .claude/skills/<name>/SKILL.md).",
},
MsgSkillsHint: {
LangEnglish: "Usage: /<skill-name> [args...] to invoke a skill.",
LangChinese: "用法:/<skill名称> [参数...] 来调用 Skill。",
LangTraditionalChinese: "用法:/<skill名稱> [參數...] 來調用 Skill。",
LangJapanese: "使い方:/<スキル名> [引数...] でスキルを実行します。",
LangSpanish: "Uso: /<nombre-skill> [args...] para invocar un skill.",
},
MsgSkillsTelegramMenuHint: {
LangEnglish: "Telegram's command menu is full, so skill commands are not listed there. You can still invoke them by typing /<skill-name> manually.",
LangChinese: "Telegram 的命令菜单已满,因此 Skill 不会显示在那里。你仍然可以手动输入 /<skill名称> 来调用它们。",
LangTraditionalChinese: "Telegram 的命令選單已滿,因此 Skill 不會顯示在那裡。你仍然可以手動輸入 /<skill名稱> 來調用它們。",
LangJapanese: "Telegram のコマンドメニューがいっぱいのため、スキルコマンドはそこに表示されません。手動で /<スキル名> と入力すれば実行できます。",
LangSpanish: "El menú de comandos de Telegram está lleno, así que los skills no aparecen allí. Aun así puedes invocarlos escribiendo /<nombre-skill> manualmente.",
},
MsgConfigTitle: {
LangEnglish: "⚙️ **Runtime Configuration**\n\n",
LangChinese: "⚙️ **运行时配置**\n\n",
LangTraditionalChinese: "⚙️ **執行階段配置**\n\n",
LangJapanese: "⚙️ **ランタイム設定**\n\n",
LangSpanish: "⚙️ **Configuración en tiempo de ejecución**\n\n",
},
MsgConfigHint: {
LangEnglish: "Usage:\n" +
"`/config` — show all\n" +
"`/config thinking_max_len 200` — update\n" +
"`/config get thinking_max_len` — view single\n\n" +
"Set to `0` to disable truncation.",
LangChinese: "用法:\n" +
"`/config` — 查看所有配置\n" +
"`/config thinking_max_len 200` — 修改配置\n" +
"`/config get thinking_max_len` — 查看单项\n\n" +
"设为 `0` 表示不截断。",
LangTraditionalChinese: "用法:\n" +
"`/config` — 查看所有配置\n" +
"`/config thinking_max_len 200` — 修改配置\n" +
"`/config get thinking_max_len` — 查看單項\n\n" +
"設為 `0` 表示不截斷。",
LangJapanese: "使い方:\n" +
"`/config` — 全設定を表示\n" +
"`/config thinking_max_len 200` — 変更\n" +
"`/config get thinking_max_len` — 単一確認\n\n" +
"`0` = 切り捨てなし",
LangSpanish: "Uso:\n" +
"`/config` — ver todo\n" +
"`/config thinking_max_len 200` — actualizar\n" +
"`/config get thinking_max_len` — ver uno\n\n" +
"Establecer `0` para no truncar.",
},
MsgConfigGetUsage: {
LangEnglish: "Usage: `/config get thinking_max_len`",
LangChinese: "用法:`/config get thinking_max_len`",
LangTraditionalChinese: "用法:`/config get thinking_max_len`",
LangJapanese: "使い方: `/config get thinking_max_len`",
LangSpanish: "Uso: `/config get thinking_max_len`",
},
MsgConfigSetUsage: {
LangEnglish: "Usage: `/config set thinking_max_len 200`",
LangChinese: "用法:`/config set thinking_max_len 200`",
LangTraditionalChinese: "用法:`/config set thinking_max_len 200`",
LangJapanese: "使い方: `/config set thinking_max_len 200`",
LangSpanish: "Uso: `/config set thinking_max_len 200`",
},
MsgConfigUpdated: {
LangEnglish: "✅ `%s` → `%s`",
LangChinese: "✅ `%s` → `%s`",
LangTraditionalChinese: "✅ `%s` → `%s`",
LangJapanese: "✅ `%s` → `%s`",
LangSpanish: "✅ `%s` → `%s`",
},
MsgConfigKeyNotFound: {
LangEnglish: "❌ Unknown config key `%s`. Use `/config` to see available keys.",
LangChinese: "❌ 未知配置项 `%s`。使用 `/config` 查看可用配置。",
LangTraditionalChinese: "❌ 未知配置項 `%s`。使用 `/config` 查看可用配置。",
LangJapanese: "❌ 不明な設定キー `%s`。`/config` で一覧を確認してください。",
LangSpanish: "❌ Clave de configuración desconocida `%s`. Use `/config` para ver las disponibles.",
},
MsgConfigReloaded: {
LangEnglish: "✅ Config reloaded\n\nDisplay updated: %v\nProviders synced: %d\nCommands synced: %d",
LangChinese: "✅ 配置已重新加载\n\n显示设置已更新:%v\nProvider 已同步:%d 个\n自定义命令已同步:%d 个",
LangTraditionalChinese: "✅ 配置已重新載入\n\n顯示設定已更新:%v\nProvider 已同步:%d 個\n自訂命令已同步:%d 個",
LangJapanese: "✅ 設定をリロードしました\n\n表示設定更新: %v\nプロバイダ同期: %d 件\nコマンド同期: %d 件",
LangSpanish: "✅ Configuración recargada\n\nPantalla actualizada: %v\nProveedores sincronizados: %d\nComandos sincronizados: %d",
},
MsgDoctorRunning: {
LangEnglish: "🏥 Running diagnostics...",
LangChinese: "🏥 正在运行系统诊断...",
LangTraditionalChinese: "🏥 正在執行系統診斷...",
LangJapanese: "🏥 診断を実行中...",
LangSpanish: "🏥 Ejecutando diagnósticos...",
},
MsgDoctorTitle: {
LangEnglish: "🏥 **System Diagnostic Report**\n\n",
LangChinese: "🏥 **系统诊断报告**\n\n",
LangTraditionalChinese: "🏥 **系統診斷報告**\n\n",
LangJapanese: "🏥 **システム診断レポート**\n\n",
LangSpanish: "🏥 **Informe de diagnóstico del sistema**\n\n",
},
MsgDoctorSummary: {
LangEnglish: "\n✅ %d passed ⚠️ %d warnings ❌ %d failed",
LangChinese: "\n✅ %d 项通过 ⚠️ %d 项警告 ❌ %d 项失败",
LangTraditionalChinese: "\n✅ %d 項通過 ⚠️ %d 項警告 ❌ %d 項失敗",
LangJapanese: "\n✅ %d 合格 ⚠️ %d 警告 ❌ %d 失敗",
LangSpanish: "\n✅ %d aprobados ⚠️ %d advertencias ❌ %d fallidos",
},
MsgRestarting: {
LangEnglish: "🔄 Restarting cc-connect...",
LangChinese: "🔄 正在重启 cc-connect...",
LangTraditionalChinese: "🔄 正在重啟 cc-connect...",
LangJapanese: "🔄 cc-connect を再起動中...",
LangSpanish: "🔄 Reiniciando cc-connect...",
},
MsgRestartSuccess: {
LangEnglish: "✅ cc-connect restarted successfully.",
LangChinese: "✅ cc-connect 重启成功。",
LangTraditionalChinese: "✅ cc-connect 重啟成功。",
LangJapanese: "✅ cc-connect の再起動が完了しました。",
LangSpanish: "✅ cc-connect se reinició correctamente.",
},
MsgUpgradeChecking: {
LangEnglish: "🔍 Checking for updates...",
LangChinese: "🔍 正在检查更新...",
LangTraditionalChinese: "🔍 正在檢查更新...",
LangJapanese: "🔍 アップデートを確認中...",
LangSpanish: "🔍 Buscando actualizaciones...",
},
MsgUpgradeUpToDate: {
LangEnglish: "✅ Already up to date (%s)",
LangChinese: "✅ 已是最新版本 (%s)",
LangTraditionalChinese: "✅ 已是最新版本 (%s)",
LangJapanese: "✅ 最新バージョンです (%s)",
LangSpanish: "✅ Ya está actualizado (%s)",
},
MsgUpgradeAvailable: {
LangEnglish: "🆕 New version available!\n\n\n" +
"Current: **%s**\n" +
"Latest: **%s**\n\n\n" +
"%s\n\n\n" +
"Run `/upgrade confirm` to install.",
LangChinese: "🆕 发现新版本!\n\n\n" +
"当前版本:**%s**\n" +
"最新版本:**%s**\n\n\n" +
"%s\n\n\n" +
"执行 `/upgrade confirm` 进行更新。",
LangTraditionalChinese: "🆕 發現新版本!\n\n\n" +
"當前版本:**%s**\n" +
"最新版本:**%s**\n\n\n" +
"%s\n\n\n" +
"執行 `/upgrade confirm` 進行更新。",
LangJapanese: "🆕 新しいバージョンがあります!\n\n\n" +
"現在: **%s**\n" +
"最新: **%s**\n\n\n" +
"%s\n\n" +
"`/upgrade confirm` でインストール。",
LangSpanish: "🆕 ¡Nueva versión disponible!\n\n\n" +
"Actual: **%s**\n" +
"Última: **%s**\n\n\n" +
"%s\n\n\n" +
"Ejecute `/upgrade confirm` para instalar.",
},
MsgUpgradeDownloading: {
LangEnglish: "⬇️ Downloading %s ...",
LangChinese: "⬇️ 正在下载 %s ...",
LangTraditionalChinese: "⬇️ 正在下載 %s ...",
LangJapanese: "⬇️ ダウンロード中 %s ...",
LangSpanish: "⬇️ Descargando %s ...",
},
MsgUpgradeSuccess: {
LangEnglish: "✅ Updated to **%s** successfully! Restarting...",
LangChinese: "✅ 已成功更新到 **%s**!正在重启...",
LangTraditionalChinese: "✅ 已成功更新到 **%s**!正在重啟...",
LangJapanese: "✅ **%s** に更新しました!再起動中...",
LangSpanish: "✅ ¡Actualizado a **%s** con éxito! Reiniciando...",
},
MsgUpgradeDevBuild: {
LangEnglish: "⚠️ Running a dev build — version check is not available. Please build from source or install a release version.",
LangChinese: "⚠️ 当前为开发版本,无法检查更新。请从源码构建或安装正式发布版本。",
LangTraditionalChinese: "⚠️ 當前為開發版本,無法檢查更新。請從源碼構建或安裝正式發佈版本。",
LangJapanese: "⚠️ 開発ビルドのため、バージョン確認ができません。ソースからビルドするか、リリース版をインストールしてください。",
LangSpanish: "⚠️ Compilación de desarrollo — la verificación de versión no está disponible. Compile desde el código fuente o instale una versión publicada.",
},
MsgWebNotSupported: {
LangEnglish: "⚠️ Web admin is not available in this build. Rebuild without the `no_web` tag to enable it.",
LangChinese: "⚠️ 当前版本未包含 Web 管理后台。请去掉 `no_web` 标签重新编译以启用。",
LangTraditionalChinese: "⚠️ 目前版本未包含 Web 管理後台。請移除 `no_web` 標籤重新編譯以啟用。",
LangJapanese: "⚠️ このビルドにはWeb管理画面が含まれていません。`no_web` タグなしで再ビルドしてください。",
LangSpanish: "⚠️ La administración web no está incluida en esta compilación. Recompile sin la etiqueta `no_web`.",
},
MsgWebNotEnabled: {
LangEnglish: "️ Web admin is not enabled.\n\nUse `/web setup` to configure and enable it.",
LangChinese: "️ Web 管理后台未启用。\n\n使用 `/web setup` 配置并启用。",
LangTraditionalChinese: "️ Web 管理後台未啟用。\n\n使用 `/web setup` 設定並啟用。",
LangJapanese: "ℹ️ Web管理画面は有効になっていません。\n\n`/web setup` で設定して有効にしてください。",
LangSpanish: "️ La administración web no está habilitada.\n\nUsa `/web setup` para configurarla.",
},
MsgWebSetupSuccess: {
LangEnglish: "✅ Web admin configured!\n\n" +
"🌐 URL: %s\n🔑 Token: `%s`\n\n" +
"Open the URL in your browser and use the token to log in.",
LangChinese: "✅ Web 管理后台配置完成!\n\n" +
"🌐 地址:%s\n🔑 令牌:`%s`\n\n" +
"在浏览器打开地址,使用令牌登录。",
LangTraditionalChinese: "✅ Web 管理後台設定完成!\n\n" +
"🌐 網址:%s\n🔑 權杖:`%s`\n\n" +
"在瀏覽器開啟網址,使用權杖登入。",
LangJapanese: "✅ Web管理画面の設定が完了しました!\n\n" +
"🌐 URL: %s\n🔑 トークン: `%s`\n\n" +
"ブラウザでURLを開き、トークンでログインしてください。",
LangSpanish: "✅ Administración web configurada!\n\n" +
"🌐 URL: %s\n🔑 Token: `%s`\n\n" +
"Abre la URL en tu navegador y usa el token para iniciar sesión.",
},
MsgWebNeedRestart: {
LangEnglish: "🔄 Restart the service with `/restart` to activate the web admin.",
LangChinese: "🔄 请使用 `/restart` 重启服务以激活 Web 管理后台。",
LangTraditionalChinese: "🔄 請使用 `/restart` 重新啟動服務以啟動 Web 管理後台。",
LangJapanese: "🔄 `/restart` でサービスを再起動して、Web管理画面を有効にしてください。",
LangSpanish: "🔄 Reinicia el servicio con `/restart` para activar la administración web.",
},
MsgWebStatus: {
LangEnglish: "🌐 **Web Admin**\n\nURL: %s",
LangChinese: "🌐 **Web 管理后台**\n\n地址:%s",
LangTraditionalChinese: "🌐 **Web 管理後台**\n\n網址:%s",
LangJapanese: "🌐 **Web管理画面**\n\nURL: %s",
LangSpanish: "🌐 **Administración Web**\n\nURL: %s",
},
MsgAliasEmpty: {
LangEnglish: "No aliases configured. Use `/alias add <trigger> <command>` to create one.",
LangChinese: "暂无别名配置。使用 `/alias add <触发词> <命令>` 创建别名。",
LangTraditionalChinese: "尚無別名配置。使用 `/alias add <觸發詞> <命令>` 建立別名。",
LangJapanese: "エイリアスは設定されていません。`/alias add <トリガー> <コマンド>` で作成してください。",
LangSpanish: "No hay alias configurados. Use `/alias add <trigger> <comando>` para crear uno.",
},
MsgAliasListHeader: {
LangEnglish: "📎 Aliases (%d)",
LangChinese: "📎 命令别名 (%d)",
LangTraditionalChinese: "📎 命令別名 (%d)",
LangJapanese: "📎 エイリアス (%d)",
LangSpanish: "📎 Alias (%d)",
},
MsgAliasAdded: {
LangEnglish: "✅ Alias added: %s → %s",
LangChinese: "✅ 别名已添加:%s → %s",
LangTraditionalChinese: "✅ 別名已新增:%s → %s",
LangJapanese: "✅ エイリアス追加:%s → %s",
LangSpanish: "✅ Alias añadido: %s → %s",
},
MsgAliasDeleted: {
LangEnglish: "✅ Alias removed: %s",
LangChinese: "✅ 别名已删除:%s",
LangTraditionalChinese: "✅ 別名已刪除:%s",
LangJapanese: "✅ エイリアス削除:%s",
LangSpanish: "✅ Alias eliminado: %s",
},
MsgAliasNotFound: {
LangEnglish: "❌ Alias `%s` not found.",
LangChinese: "❌ 别名 `%s` 不存在。",
LangTraditionalChinese: "❌ 別名 `%s` 不存在。",
LangJapanese: "❌ エイリアス `%s` が見つかりません。",
LangSpanish: "❌ Alias `%s` no encontrado.",
},
MsgAliasUsage: {
LangEnglish: "Usage:\n `/alias` — list all aliases\n `/alias add <trigger> <command>` — add alias\n `/alias del <trigger>` — remove alias\n\nExample: `/alias add 帮助 /help`",
LangChinese: "用法:\n `/alias` — 列出所有别名\n `/alias add <触发词> <命令>` — 添加别名\n `/alias del <触发词>` — 删除别名\n\n示例:`/alias add 帮助 /help`",
LangTraditionalChinese: "用法:\n `/alias` — 列出所有別名\n `/alias add <觸發詞> <命令>` — 新增別名\n `/alias del <觸發詞>` — 刪除別名\n\n範例:`/alias add 幫助 /help`",
LangJapanese: "使い方:\n `/alias` — エイリアス一覧\n `/alias add <トリガー> <コマンド>` — 追加\n `/alias del <トリガー>` — 削除\n\n例: `/alias add ヘルプ /help`",
LangSpanish: "Uso:\n `/alias` — listar aliases\n `/alias add <trigger> <comando>` — añadir alias\n `/alias del <trigger>` — eliminar alias\n\nEjemplo: `/alias add ayuda /help`",
},
MsgNewSessionCreated: {
LangEnglish: "✅ New session created",
LangChinese: "✅ 新会话已创建",
LangTraditionalChinese: "✅ 新會話已建立",
LangJapanese: "✅ 新しいセッションを作成しました",
LangSpanish: "✅ Nueva sesión creada",
},
MsgNewSessionCreatedName: {
LangEnglish: "✅ New session created: **%s**",
LangChinese: "✅ 新会话已创建:**%s**",
LangTraditionalChinese: "✅ 新會話已建立:**%s**",
LangJapanese: "✅ 新しいセッションを作成しました:**%s**",
LangSpanish: "✅ Nueva sesión creada: **%s**",
},
MsgSessionAutoResetIdle: {
LangEnglish: "⏰ Session auto-reset after %d minute(s) of inactivity.",
LangChinese: "⏰ 因空闲超过 %d 分钟,已自动切换到新会话。",
LangTraditionalChinese: "⏰ 因閒置超過 %d 分鐘,已自動切換到新會話。",
LangJapanese: "⏰ %d 分以上操作がなかったため、新しいセッションに自動切り替えました。",
LangSpanish: "⏰ La sesión se reinició automáticamente tras %d minuto(s) de inactividad.",
},
MsgSessionClosingGraceful: {
LangEnglish: "⏳ Wrapping up your previous session (usually a few seconds, up to 2 minutes). Your new session will start automatically.",
LangChinese: "⏳ 正在结束上一个会话(通常几秒钟,最多2分钟)。新会话将自动启动。",
LangTraditionalChinese: "⏳ 正在結束上一個會話(通常幾秒鐘,最多2分鐘)。新會話將自動啟動。",
LangJapanese: "⏳ 前のセッションを終了中です(通常は数秒、最大2分)。新しいセッションは自動的に開始されます。",
LangSpanish: "⏳ Cerrando la sesión anterior (normalmente unos segundos, hasta 2 minutos). La nueva sesión se iniciará automáticamente.",
},
MsgDeleteUsage: {
LangEnglish: "Usage: `/delete <number>` or `/delete 1,2,3` or `/delete 3-7` or `/delete 1,3-5,8`.\nUse `/list` to see session numbers.",
LangChinese: "用法:`/delete <序号>`,或 `/delete 1,2,3`,或 `/delete 3-7`,或 `/delete 1,3-5,8`。\n使用 `/list` 查看会话序号。",
LangTraditionalChinese: "用法:`/delete <序號>`,或 `/delete 1,2,3`,或 `/delete 3-7`,或 `/delete 1,3-5,8`。\n使用 `/list` 查看會話序號。",
LangJapanese: "使い方:`/delete <番号>`、または `/delete 1,2,3`、または `/delete 3-7`、または `/delete 1,3-5,8`。\n`/list` で番号を確認できます。",
LangSpanish: "Uso: `/delete <número>` o `/delete 1,2,3` o `/delete 3-7` o `/delete 1,3-5,8`.\nUse `/list` para ver los números.",
},
MsgDeleteSuccess: {
LangEnglish: "🗑️ Session deleted: %s",
LangChinese: "🗑️ 会话已删除:%s",
LangTraditionalChinese: "🗑️ 會話已刪除:%s",
LangJapanese: "🗑️ セッション削除:%s",
LangSpanish: "🗑️ Sesión eliminada: %s",
},
MsgSwitchSuccess: {
LangEnglish: "✅ Switched to: %s (%s, %d msgs)",
LangChinese: "✅ 已切换到:%s%s%d 条消息)",
LangTraditionalChinese: "✅ 已切換到:%s%s%d 則訊息)",
LangJapanese: "✅ 切り替え:%s%s、%d件)",
LangSpanish: "✅ Cambiado a: %s (%s, %d mensajes)",
},
MsgSwitchNoMatch: {
LangEnglish: "❌ No session matching %q",
LangChinese: "❌ 没有找到匹配 %q 的会话",
LangTraditionalChinese: "❌ 沒有找到匹配 %q 的會話",
LangJapanese: "❌ %q に一致するセッションが見つかりません",
LangSpanish: "❌ No hay sesión que coincida con %q",
},
MsgSwitchNoSession: {
LangEnglish: "❌ No session #%d",
LangChinese: "❌ 没有第 %d 个会话",
LangTraditionalChinese: "❌ 沒有第 %d 個會話",
LangJapanese: "❌ セッション #%d が見つかりません",
LangSpanish: "❌ No hay sesión #%d",
},
MsgCommandTimeout: {
LangEnglish: "⏰ Command timed out (60s): `%s`",
LangChinese: "⏰ 命令超时 (60秒): `%s`",
LangTraditionalChinese: "⏰ 命令逾時 (60秒): `%s`",
LangJapanese: "⏰ コマンドがタイムアウトしました (60秒): `%s`",
LangSpanish: "⏰ Comando agotado (60s): `%s`",
},
MsgDeleteActiveDenied: {
LangEnglish: "❌ Cannot delete the currently active session. Switch to another session first.",
LangChinese: "❌ 不能删除当前活跃会话,请先切换到其他会话。",
LangTraditionalChinese: "❌ 不能刪除當前活躍會話,請先切換到其他會話。",
LangJapanese: "❌ 現在アクティブなセッションは削除できません。先に別のセッションに切り替えてください。",
LangSpanish: "❌ No se puede eliminar la sesión activa. Cambie a otra sesión primero.",
},
MsgDeleteNotSupported: {
LangEnglish: "❌ This agent does not support session deletion.",
LangChinese: "❌ 当前 Agent 不支持删除会话。",
LangTraditionalChinese: "❌ 當前 Agent 不支持刪除會話。",
LangJapanese: "❌ このエージェントはセッション削除をサポートしていません。",
LangSpanish: "❌ Este agente no admite la eliminación de sesiones.",
},
MsgDeleteModeTitle: {
LangEnglish: "Delete Sessions",
LangChinese: "删除会话",
LangTraditionalChinese: "刪除會話",
LangJapanese: "セッション削除",
LangSpanish: "Eliminar sesiones",
},
MsgDeleteModeSelect: {
LangEnglish: "Select",
LangChinese: "选择",
LangTraditionalChinese: "選擇",
LangJapanese: "選択",
LangSpanish: "Seleccionar",
},
MsgDeleteModeSelected: {
LangEnglish: "Selected",
LangChinese: "已选",
LangTraditionalChinese: "已選",
LangJapanese: "選択済み",
LangSpanish: "Seleccionado",
},
MsgDeleteModeSelectedCount: {
LangEnglish: "%d selected",
LangChinese: "已选 %d 项",
LangTraditionalChinese: "已選 %d 項",
LangJapanese: "%d 件を選択中",
LangSpanish: "%d seleccionadas",
},
MsgDeleteModeDeleteSelected: {
LangEnglish: "Delete Selected",
LangChinese: "删除已选",
LangTraditionalChinese: "刪除已選",
LangJapanese: "選択項目を削除",
LangSpanish: "Eliminar seleccionadas",
},
MsgDeleteModeCancel: {
LangEnglish: "Cancel",
LangChinese: "取消",
LangTraditionalChinese: "取消",
LangJapanese: "キャンセル",
LangSpanish: "Cancelar",
},
MsgDeleteModeConfirmTitle: {
LangEnglish: "Confirm Delete",
LangChinese: "确认删除",
LangTraditionalChinese: "確認刪除",
LangJapanese: "削除確認",
LangSpanish: "Confirmar eliminación",
},
MsgDeleteModeConfirmButton: {
LangEnglish: "Confirm Delete",
LangChinese: "确认删除",
LangTraditionalChinese: "確認刪除",
LangJapanese: "削除を確認",
LangSpanish: "Confirmar eliminación",
},
MsgDeleteModeBackButton: {
LangEnglish: "Back",
LangChinese: "返回继续选择",
LangTraditionalChinese: "返回繼續選擇",
LangJapanese: "選択に戻る",
LangSpanish: "Volver",
},
MsgDeleteModeEmptySelection: {
LangEnglish: "Select at least one session.",
LangChinese: "请至少选择一个会话。",
LangTraditionalChinese: "請至少選擇一個會話。",
LangJapanese: "少なくとも 1 つのセッションを選択してください。",
LangSpanish: "Seleccione al menos una sesión.",
},
MsgDeleteModeResultTitle: {
LangEnglish: "Delete Result",
LangChinese: "删除结果",
LangTraditionalChinese: "刪除結果",
LangJapanese: "削除結果",
LangSpanish: "Resultado de eliminación",
},
MsgDeleteModeDeletingTitle: {
LangEnglish: "Deleting Sessions...",
LangChinese: "正在删除会话...",
LangTraditionalChinese: "正在刪除會話...",
LangJapanese: "セッションを削除中...",
LangSpanish: "Eliminando sesiones...",
},
MsgDeleteModeDeletingBody: {
LangEnglish: "Deleting %d session(s), please wait...",
LangChinese: "正在删除 %d 个会话,请稍候...",
LangTraditionalChinese: "正在刪除 %d 個會話,請稍候...",
LangJapanese: "%d 件のセッションを削除中、お待ちください...",
LangSpanish: "Eliminando %d sesión(es), por favor espere...",
},
MsgDeleteModeMissingSession: {
LangEnglish: "❌ Missing selected session: %s",
LangChinese: "❌ 已选会话不存在:%s",
LangTraditionalChinese: "❌ 已選會話不存在:%s",
LangJapanese: "❌ 選択したセッションが見つかりません: %s",
LangSpanish: "❌ Falta la sesión seleccionada: %s",
},
MsgBannedWordBlocked: {
LangEnglish: "⚠️ Your message was blocked because it contains a prohibited word.",
LangChinese: "⚠️ 消息已被拦截,包含违禁词。",
LangTraditionalChinese: "⚠️ 訊息已被攔截,包含違禁詞。",
LangJapanese: "⚠️ 禁止ワードが含まれているため、メッセージがブロックされました。",
LangSpanish: "⚠️ Su mensaje fue bloqueado porque contiene una palabra prohibida.",
},
MsgCommandDisabled: {
LangEnglish: "🚫 Command `%s` is disabled for this project.",
LangChinese: "🚫 命令 `%s` 在当前项目中已被禁用。",
LangTraditionalChinese: "🚫 命令 `%s` 在當前專案中已被停用。",
LangJapanese: "🚫 コマンド `%s` はこのプロジェクトで無効化されています。",
LangSpanish: "🚫 El comando `%s` está deshabilitado para este proyecto.",
},
MsgAdminRequired: {
LangEnglish: "🔒 Command `%s` requires admin privilege. Set `admin_from` in config to authorize users.",
LangChinese: "🔒 命令 `%s` 需要管理员权限。请在配置中设置 `admin_from` 来授权用户。",
LangTraditionalChinese: "🔒 命令 `%s` 需要管理員權限。請在配置中設定 `admin_from` 來授權使用者。",
LangJapanese: "🔒 コマンド `%s` には管理者権限が必要です。設定で `admin_from` を設定してユーザーを承認してください。",
LangSpanish: "🔒 El comando `%s` requiere privilegios de administrador. Configure `admin_from` en la configuración.",
},
MsgRateLimited: {
LangEnglish: "⏳ You are sending messages too fast. Please wait a moment.",
LangChinese: "⏳ 消息发送过快,请稍后再试。",
LangTraditionalChinese: "⏳ 訊息發送過快,請稍後再試。",
LangJapanese: "⏳ メッセージの送信が速すぎます。しばらくお待ちください。",
LangSpanish: "⏳ Estás enviando mensajes demasiado rápido. Espera un momento.",
},
MsgPsSent: {
LangEnglish: "✅ P.S. delivered.",
LangChinese: "✅ P.S. 已送达。",
LangTraditionalChinese: "✅ P.S. 已送達。",
LangJapanese: "✅ P.S. を送信しました。",
LangSpanish: "✅ P.S. entregado.",
},
MsgPsSendFailed: {
LangEnglish: "❌ Failed to deliver P.S.",
LangChinese: "❌ P.S. 发送失败。",
LangTraditionalChinese: "❌ P.S. 傳送失敗。",
LangJapanese: "❌ P.S. の送信に失敗しました。",
LangSpanish: "❌ Error al entregar el P.S.",
},
MsgPsEmpty: {
LangEnglish: "Usage: `/ps <message>`",
LangChinese: "用法:`/ps <消息>`",
LangTraditionalChinese: "用法:`/ps <訊息>`",
LangJapanese: "使い方:`/ps <メッセージ>`",
LangSpanish: "Uso: `/ps <mensaje>`",
},
MsgPsNoSession: {
LangEnglish: "No task is currently running.",
LangChinese: "当前没有正在执行的任务。",
LangTraditionalChinese: "目前沒有正在執行的任務。",
LangJapanese: "現在実行中のタスクはありません。",
LangSpanish: "No hay ninguna tarea en ejecución.",
},
MsgWhoamiTitle: {
LangEnglish: "🪪 **Your Identity**",
LangChinese: "🪪 **你的身份信息**",
LangTraditionalChinese: "🪪 **你的身分資訊**",
LangJapanese: "🪪 **あなたの身元情報**",
LangSpanish: "🪪 **Tu identidad**",
},
MsgWhoamiCardTitle: {
LangEnglish: "Your Identity",
LangChinese: "你的身份信息",
LangTraditionalChinese: "你的身分資訊",
LangJapanese: "あなたの身元情報",
LangSpanish: "Tu identidad",
},
MsgWhoamiName: {
LangEnglish: "Name",
LangChinese: "名称",
LangTraditionalChinese: "名稱",
LangJapanese: "名前",
LangSpanish: "Nombre",
},
MsgWhoamiPlatform: {
LangEnglish: "Platform",
LangChinese: "平台",
LangTraditionalChinese: "平台",
LangJapanese: "プラットフォーム",
LangSpanish: "Plataforma",
},
MsgWhoamiUsage: {
LangEnglish: "💡 Use the `User ID` above for `allow_from` and `admin_from` in your `config.toml`.",
LangChinese: "💡 可将上方 `User ID` 填入 `config.toml` 的 `allow_from` 或 `admin_from` 中。",
LangTraditionalChinese: "💡 可將上方 `User ID` 填入 `config.toml` 的 `allow_from` 或 `admin_from` 中。",
LangJapanese: "💡 上記の `User ID` を `config.toml` の `allow_from` や `admin_from` に設定してください。",
LangSpanish: "💡 Usa el `User ID` de arriba para `allow_from` y `admin_from` en tu `config.toml`.",
},
MsgRelayNoBinding: {
LangEnglish: "No relay binding in this chat.\nUse `/bind <project>` to bind another bot.\nThe <project> is the project name from your config.toml.",
LangChinese: "当前群聊没有中继绑定。\n使用 `/bind <项目名>` 绑定另一个机器人。\n<项目名> 是 config.toml 中 [[projects]] 的 name 字段。",
},
MsgRelayBound: {
LangEnglish: "Current relay binding: %s",
LangChinese: "当前中继绑定: %s",
},
MsgRelayUsage: {
LangEnglish: "Usage:\n /bind <project> — bind with another bot in this group\n /bind remove — remove binding\n /bind — show current binding\n\n<project> is the project name from config.toml [[projects]].",
LangChinese: "用法:\n /bind <项目名> — 绑定群聊中的另一个机器人\n /bind remove — 解除绑定\n /bind — 查看当前绑定\n\n<项目名> 是 config.toml 中 [[projects]] 的 name 字段。",
},
MsgRelayNotAvailable: {
LangEnglish: "Relay is not available. Make sure you have multiple projects configured.",
LangChinese: "中继功能不可用。请确保配置了多个项目。",
},
MsgRelayUnbound: {
LangEnglish: "Relay binding removed.",
LangChinese: "中继绑定已解除。",
},
MsgRelayBindSelf: {
LangEnglish: "Cannot bind to yourself. Specify a different project.",
LangChinese: "不能绑定自己,请指定另一个项目。",
},
MsgRelayNotFound: {
LangEnglish: "Project %q not found. Available projects: %s",
LangChinese: "项目 %q 不存在。可用的项目: %s",
},
MsgRelayNoTarget: {
LangEnglish: "Project %q not found. No other projects are configured.",
LangChinese: "项目 %q 不存在。没有配置其他项目。",
},
MsgRelayBindRemoved: {
LangEnglish: "✅ Removed %s from binding",
LangChinese: "✅ 已从绑定中移除 %s",
LangTraditionalChinese: "✅ 已從綁定中移除 %s",
LangJapanese: "✅ %s をバインドから削除しました",
LangSpanish: "✅ Eliminado %s del enlace",
},
MsgRelayBindNotFound: {
LangEnglish: "❌ %s is not bound or binding does not exist",
LangChinese: "❌ %s 未绑定或绑定不存在",
LangTraditionalChinese: "❌ %s 未綁定或綁定不存在",
LangJapanese: "❌ %s はバインドされていないか、バインドが存在しません",
LangSpanish: "❌ %s no está vinculado o el enlace no existe",
},
MsgRelayBindSuccess: {
LangEnglish: "✅ Bind successful! Current group bound: %s\n\nYou can now ask this bot to communicate with %s.\nExample: \"Ask %s about ...\"",
LangChinese: "✅ 绑定成功!当前群组已绑定: %s\n\n你现在可以让本机器人去询问 %s。\n示例:\"帮我问一下 %s ...\"",
LangTraditionalChinese: "✅ 綁定成功!當前群組已綁定: %s\n\n你現在可以讓本機器人去詢問 %s。\n示例:\"幫我問一下 %s ...\"",
LangJapanese: "✅ バインド成功!現在のグループ: %s\n\nこのボットに %s への問い合わせを依頼できます。\n例:「%s に...を聞いて」",
LangSpanish: "✅ ¡Enlace exitoso! Grupo actual: %s\n\nAhora puede pedir a este bot que consulte a %s.\nEjemplo: \"Pregunta a %s sobre ...\"",
},
MsgRelaySetupHint: {
LangEnglish: "\n\n⚠️ This agent does not auto-inject cc-connect instructions.\nPlease run `/bind setup` or `/cron setup` to write instructions to %s.",
LangChinese: "\n\n⚠️ 当前 agent 不会自动注入 cc-connect 指令。\n请运行 `/bind setup` 或 `/cron setup` 将指令写入 %s。",
LangTraditionalChinese: "\n\n⚠️ 當前 agent 不會自動注入 cc-connect 指令。\n請執行 `/bind setup` 或 `/cron setup` 將指令寫入 %s。",
LangJapanese: "\n\n⚠️ このエージェントは cc-connect の指示を自動注入しません。\n`/bind setup` または `/cron setup` を実行して %s に指示を書き込んでください。",
LangSpanish: "\n\n⚠️ Este agente no inyecta automáticamente las instrucciones de cc-connect.\nEjecute `/bind setup` o `/cron setup` para escribirlas en %s.",
},
MsgRelaySetupOK: {
LangEnglish: "✅ cc-connect instructions written to %s\nThe agent can now use relay, cron, and attachment send-back.",
LangChinese: "✅ cc-connect 指令已写入 %s\nagent 现在可以使用中继、定时任务和附件回传功能了。",
LangTraditionalChinese: "✅ cc-connect 指令已寫入 %s\nagent 現在可以使用中繼、定時任務和附件回傳功能了。",
LangJapanese: "✅ cc-connect の指示を %s に書き込みました。\nエージェントがリレー、cron、添付ファイル返送を使えるようになりました。",
LangSpanish: "✅ Instrucciones de cc-connect escritas en %s\nEl agente ahora puede usar relay, cron y reenvío de adjuntos.",
},
MsgRelaySetupExists: {
LangEnglish: "️ cc-connect instructions already exist in %s — no changes made.",
LangChinese: "️ cc-connect 指令已存在于 %s 中,无需重复写入。",
LangTraditionalChinese: "️ cc-connect 指令已存在於 %s 中,無需重複寫入。",
LangJapanese: "️ cc-connect の指示は既に %s に存在します。変更はありません。",
LangSpanish: "️ Las instrucciones de cc-connect ya existen en %s — sin cambios.",
},
MsgRelaySetupNoMemory: {
LangEnglish: "❌ This agent does not support instruction files.",
LangChinese: "❌ 当前 agent 不支持指令文件。",
LangTraditionalChinese: "❌ 當前 agent 不支持指令檔案。",
LangJapanese: "❌ このエージェントは指示ファイルをサポートしていません。",
LangSpanish: "❌ Este agente no soporta archivos de instrucciones.",
},
MsgSetupNative: {
LangEnglish: "✅ This agent natively supports cc-connect instructions — no setup needed.",
LangChinese: "✅ 当前 agent 已原生支持 cc-connect 指令,无需额外配置。",
LangTraditionalChinese: "✅ 當前 agent 已原生支持 cc-connect 指令,無需額外配置。",
LangJapanese: "✅ このエージェントは cc-connect の指示をネイティブサポートしています。セットアップ不要です。",
LangSpanish: "✅ Este agente soporta nativamente las instrucciones de cc-connect — no se necesita configuración.",
},
MsgCronSetupOK: {
LangEnglish: "✅ cc-connect instructions written to %s\nThe agent can now use relay, cron, and attachment send-back.",
LangChinese: "✅ cc-connect 指令已写入 %s\nagent 现在可以使用中继、定时任务和附件回传功能了。",
LangTraditionalChinese: "✅ cc-connect 指令已寫入 %s\nagent 現在可以使用中繼、定時任務和附件回傳功能了。",
LangJapanese: "✅ cc-connect の指示を %s に書き込みました。\nエージェントがリレー、cron、添付ファイル返送を使えるようになりました。",
LangSpanish: "✅ Instrucciones de cc-connect escritas en %s\nEl agente ahora puede usar relay, cron y reenvío de adjuntos.",
},
MsgSearchUsage: {
LangEnglish: "Usage: /search <keyword>\nSearch sessions by name or ID.",
LangChinese: "用法: /search <关键词>\n搜索会话名称或 ID。",
LangTraditionalChinese: "用法: /search <關鍵詞>\n搜尋會話名稱或 ID。",
LangJapanese: "使い方: /search <キーワード>\nセッション名またはIDで検索。",
LangSpanish: "Uso: /search <palabra_clave>\nBuscar sesiones por nombre o ID.",
},
MsgSearchError: {
LangEnglish: "❌ Search error: %v",
LangChinese: "❌ 搜索失败: %v",
LangTraditionalChinese: "❌ 搜尋失敗: %v",
LangJapanese: "❌ 検索エラー: %v",
LangSpanish: "❌ Error de búsqueda: %v",
},
MsgSearchNoResult: {
LangEnglish: "No sessions found matching %q",
LangChinese: "没有找到匹配 %q 的会话",
LangTraditionalChinese: "沒有找到匹配 %q 的會話",
LangJapanese: "%q に一致するセッションが見つかりません",
LangSpanish: "No se encontraron sesiones que coincidan con %q",
},
MsgSearchResult: {
LangEnglish: "🔍 Found %d session(s) matching %q:",
LangChinese: "🔍 找到 %d 个匹配 %q 的会话:",
LangTraditionalChinese: "🔍 找到 %d 個匹配 %q 的會話:",
LangJapanese: "🔍 %q に一致する %d 件のセッション:",
LangSpanish: "🔍 Se encontraron %d sesiones que coinciden con %q:",
},
MsgSearchHint: {
LangEnglish: "Use /switch <id> to switch to a session.",
LangChinese: "使用 /switch <id> 切换到对应会话。",
LangTraditionalChinese: "使用 /switch <id> 切換到對應會話。",
LangJapanese: "/switch <id> でセッションを切り替え。",
LangSpanish: "Usa /switch <id> para cambiar a una sesión.",
},
// Builtin command descriptions
MsgBuiltinCmdNew: {
LangEnglish: "Start a new session, arg: [name]",
LangChinese: "创建新会话,参数: [名称]",
LangTraditionalChinese: "建立新會話,參數: [名稱]",
LangJapanese: "新しいセッションを開始、引数: [名前]",
LangSpanish: "Iniciar una nueva sesión, arg: [nombre]",
},
MsgBuiltinCmdList: {
LangEnglish: "List agent sessions",
LangChinese: "列出 Agent 会话列表",
LangTraditionalChinese: "列出 Agent 會話列表",
LangJapanese: "エージェントセッション一覧",
LangSpanish: "Listar sesiones del agente",
},
MsgBuiltinCmdSearch: {
LangEnglish: "Search sessions by name or ID, arg: <keyword>",
LangChinese: "搜索会话名称或 ID,参数: <关键词>",
LangTraditionalChinese: "搜尋會話名稱或 ID,參數: <關鍵詞>",
LangJapanese: "セッションを名前またはIDで検索、引数: <キーワード>",
LangSpanish: "Buscar sesiones por nombre o ID, arg: <palabra_clave>",
},
MsgBuiltinCmdSwitch: {
LangEnglish: "Resume a session by its list number, arg: <number>",
LangChinese: "按列表序号切换会话,参数: <序号>",
LangTraditionalChinese: "按列表序號切換會話,參數: <序號>",
LangJapanese: "リスト番号でセッションを切り替え、引数: <番号>",
LangSpanish: "Reanudar sesión por su número en la lista, arg: <número>",
},
MsgBuiltinCmdDelete: {
LangEnglish: "Delete session(s) by list number, args: <number> | 1,2,3 | 3-7 | 1,3-5,8",
LangChinese: "按列表序号删除会话,参数: <序号> | 1,2,3 | 3-7 | 1,3-5,8",
LangTraditionalChinese: "按列表序號刪除會話,參數: <序號> | 1,2,3 | 3-7 | 1,3-5,8",
LangJapanese: "リスト番号でセッションを削除、引数: <番号> | 1,2,3 | 3-7 | 1,3-5,8",
LangSpanish: "Eliminar sesión(es) por número de lista, args: <número> | 1,2,3 | 3-7 | 1,3-5,8",
},
MsgBuiltinCmdName: {
LangEnglish: "Name a session for easy identification, arg: [number] <text>",
LangChinese: "给会话命名,方便识别,参数: [序号] <名称>",
LangTraditionalChinese: "為會話命名,方便辨識,參數: [序號] <名稱>",
LangJapanese: "セッションに名前を付ける、引数: [番号] <名前>",
LangSpanish: "Nombrar una sesión para fácil identificación, arg: [número] <texto>",
},
MsgBuiltinCmdCurrent: {
LangEnglish: "Show current active session",
LangChinese: "查看当前活跃会话",
LangTraditionalChinese: "查看當前活躍會話",
LangJapanese: "現在のアクティブセッションを表示",
LangSpanish: "Mostrar sesión activa actual",
},
MsgBuiltinCmdHistory: {
LangEnglish: "Show last n messages, arg: [n] (default 10)",
LangChinese: "查看最近 n 条消息,参数: [n](默认 10",
LangTraditionalChinese: "查看最近 n 條訊息,參數: [n](預設 10",
LangJapanese: "直近 n 件のメッセージを表示、引数: [n](デフォルト 10)",
LangSpanish: "Mostrar últimos n mensajes, arg: [n] (por defecto 10)",
},
MsgBuiltinCmdProvider: {
LangEnglish: "Manage API providers, arg: [list|add|remove|switch|clear]",
LangChinese: "管理 API Provider,参数: [list|add|remove|switch|clear]",
LangTraditionalChinese: "管理 API Provider,參數: [list|add|remove|switch|clear]",
LangJapanese: "API プロバイダ管理、引数: [list|add|remove|switch|clear]",
LangSpanish: "Gestionar proveedores API, arg: [list|add|remove|switch|clear]",
},
MsgBuiltinCmdMemory: {
LangEnglish: "View/edit agent memory files, arg: [add|global|global add]",
LangChinese: "查看/编辑 Agent 记忆文件,参数: [add|global|global add]",
LangTraditionalChinese: "查看/編輯 Agent 記憶檔案,參數: [add|global|global add]",
LangJapanese: "エージェントメモリの表示/編集、引数: [add|global|global add]",
LangSpanish: "Ver/editar archivos de memoria del agente, arg: [add|global|global add]",
},
MsgBuiltinCmdAllow: {
LangEnglish: "Pre-allow a tool (next session), arg: <tool>",
LangChinese: "预授权工具(下次会话生效),参数: <工具名>",
LangTraditionalChinese: "預授權工具(下次會話生效),參數: <工具名>",
LangJapanese: "ツールを事前許可(次のセッションで有効)、引数: <ツール>",
LangSpanish: "Pre-autorizar herramienta (próxima sesión), arg: <herramienta>",
},
MsgBuiltinCmdModel: {
LangEnglish: "View/switch model, arg: [name]",
LangChinese: "查看/切换模型,参数: [名称]",
LangTraditionalChinese: "查看/切換模型,參數: [名稱]",
LangJapanese: "モデルの表示/切り替え、引数: [名前]",
LangSpanish: "Ver/cambiar modelo, arg: [nombre]",
},
MsgBuiltinCmdReasoning: {
LangEnglish: "View/switch reasoning effort, arg: [level]",
LangChinese: "查看/切换推理强度,参数: [等级]",
LangTraditionalChinese: "查看/切換推理強度,參數: [等級]",
LangJapanese: "推論強度の表示/切り替え、引数: [レベル]",
LangSpanish: "Ver/cambiar esfuerzo de razonamiento, arg: [nivel]",
},
MsgBuiltinCmdMode: {
LangEnglish: "View/switch permission mode, arg: [name]",
LangChinese: "查看/切换权限模式,参数: [名称]",
LangTraditionalChinese: "查看/切換權限模式,參數: [名稱]",
LangJapanese: "権限モードの表示/切り替え、引数: [名前]",
LangSpanish: "Ver/cambiar modo de permisos, arg: [nombre]",
},
MsgBuiltinCmdLang: {
LangEnglish: "View/switch language, arg: [en|zh|zh-TW|ja|es|auto]",
LangChinese: "查看/切换语言,参数: [en|zh|zh-TW|ja|es|auto]",
LangTraditionalChinese: "查看/切換語言,參數: [en|zh|zh-TW|ja|es|auto]",
LangJapanese: "言語の表示/切り替え、引数: [en|zh|zh-TW|ja|es|auto]",
LangSpanish: "Ver/cambiar idioma, arg: [en|zh|zh-TW|ja|es|auto]",
},
MsgBuiltinCmdQuiet: {
LangEnglish: "Toggle thinking/tool progress, arg: [global]",
LangChinese: "开关思考和工具进度消息, 参数: [global]",
LangTraditionalChinese: "開關思考和工具進度訊息, 參數: [global]",
LangJapanese: "思考/ツール進捗メッセージの表示切替, 引数: [global]",
LangSpanish: "Alternar mensajes de progreso, arg: [global]",
},
MsgBuiltinCmdCompress: {
LangEnglish: "Compress conversation context",
LangChinese: "压缩会话上下文",
LangTraditionalChinese: "壓縮會話上下文",
LangJapanese: "会話コンテキストを圧縮",
LangSpanish: "Comprimir contexto de conversación",
},
MsgBuiltinCmdStop: {
LangEnglish: "Stop current execution",
LangChinese: "停止当前执行",
LangTraditionalChinese: "停止當前執行",
LangJapanese: "現在の実行を停止",
LangSpanish: "Detener ejecución actual",
},
MsgBuiltinCmdCron: {
LangEnglish: "Manage scheduled tasks, arg: [add|list|del|enable|disable]",
LangChinese: "管理定时任务,参数: [add|list|del|enable|disable]",
LangTraditionalChinese: "管理定時任務,參數: [add|list|del|enable|disable]",
LangJapanese: "スケジュールタスク管理、引数: [add|list|del|enable|disable]",
LangSpanish: "Gestionar tareas programadas, arg: [add|list|del|enable|disable]",
},
MsgBuiltinCmdCommands: {
LangEnglish: "Manage custom slash commands, arg: [add|del]",
LangChinese: "管理自定义命令,参数: [add|del]",
LangTraditionalChinese: "管理自訂命令,參數: [add|del]",
LangJapanese: "カスタムコマンド管理、引数: [add|del]",
LangSpanish: "Gestionar comandos personalizados, arg: [add|del]",
},
MsgBuiltinCmdAlias: {
LangEnglish: "Manage command aliases, arg: [add|del]",
LangChinese: "管理命令别名,参数: [add|del]",
LangTraditionalChinese: "管理命令別名,參數: [add|del]",
LangJapanese: "コマンドエイリアス管理、引数: [add|del]",
LangSpanish: "Gestionar alias de comandos, arg: [add|del]",
},
MsgBuiltinCmdSkills: {
LangEnglish: "List agent skills (from SKILL.md)",
LangChinese: "列出 Agent Skills(来自 SKILL.md",
LangTraditionalChinese: "列出 Agent Skills(來自 SKILL.md",
LangJapanese: "エージェントスキル一覧(SKILL.md から)",
LangSpanish: "Listar skills del agente (desde SKILL.md)",
},
MsgBuiltinCmdConfig: {
LangEnglish: "View/update runtime configuration, arg: [get|set|reload] [key] [value]",
LangChinese: "查看/修改运行时配置,参数: [get|set|reload] [键] [值]",
LangTraditionalChinese: "查看/修改執行階段配置,參數: [get|set|reload] [鍵] [值]",
LangJapanese: "ランタイム設定の表示/変更、引数: [get|set|reload] [キー] [値]",
LangSpanish: "Ver/actualizar configuración en tiempo de ejecución, arg: [get|set|reload] [clave] [valor]",
},
MsgBuiltinCmdDoctor: {
LangEnglish: "Run system diagnostics",
LangChinese: "运行系统诊断",
LangTraditionalChinese: "執行系統診斷",
LangJapanese: "システム診断を実行",
LangSpanish: "Ejecutar diagnósticos del sistema",
},
MsgBuiltinCmdUpgrade: {
LangEnglish: "Check for updates and self-update",
LangChinese: "检查更新并自动升级",
LangTraditionalChinese: "檢查更新並自動升級",
LangJapanese: "アップデートを確認して自動更新",
LangSpanish: "Buscar actualizaciones y auto-actualizar",
},
MsgBuiltinCmdRestart: {
LangEnglish: "Restart cc-connect service",
LangChinese: "重启 cc-connect 服务",
LangTraditionalChinese: "重啟 cc-connect 服務",
LangJapanese: "cc-connect サービスを再起動",
LangSpanish: "Reiniciar el servicio cc-connect",
},
MsgBuiltinCmdStatus: {
LangEnglish: "Show system status",
LangChinese: "查看系统状态",
LangTraditionalChinese: "查看系統狀態",
LangJapanese: "システム状態を表示",
LangSpanish: "Mostrar estado del sistema",
},
MsgBuiltinCmdUsage: {
LangEnglish: "Show account/model quota usage",
LangChinese: "查看账号/模型限额使用情况",
LangTraditionalChinese: "查看帳號/模型限額使用情況",
LangJapanese: "アカウント/モデル使用量を表示",
LangSpanish: "Mostrar uso de cuota de cuenta/modelo",
},
MsgBuiltinCmdVersion: {
LangEnglish: "Show cc-connect version",
LangChinese: "查看 cc-connect 版本",
LangTraditionalChinese: "查看 cc-connect 版本",
LangJapanese: "cc-connect のバージョンを表示",
LangSpanish: "Mostrar versión de cc-connect",
},
MsgBuiltinCmdHelp: {
LangEnglish: "Show this help",
LangChinese: "显示此帮助",
LangTraditionalChinese: "顯示此說明",
LangJapanese: "このヘルプを表示",
LangSpanish: "Mostrar esta ayuda",
},
MsgBuiltinCmdBind: {
LangEnglish: "Bind current session to a target, arg: <target>",
LangChinese: "绑定当前会话到目标,参数: <目标>",
LangTraditionalChinese: "綁定當前會話到目標,參數: <目標>",
LangJapanese: "現在のセッションをターゲットにバインド、引数: <ターゲット>",
LangSpanish: "Vincular sesión actual a un objetivo, arg: <objetivo>",
},
MsgBuiltinCmdShell: {
LangEnglish: "Run a shell command, arg: <command>",
LangChinese: "执行 Shell 命令,参数: <命令>",
LangTraditionalChinese: "執行 Shell 命令,參數: <命令>",
LangJapanese: "シェルコマンドを実行、引数: <コマンド>",
LangSpanish: "Ejecutar un comando shell, arg: <comando>",
},
MsgBuiltinCmdDir: {
LangEnglish: "Show, switch, or reset agent working directory, arg: <path>",
LangChinese: "查看、切换或重置 Agent 工作目录,参数: <路径>",
LangTraditionalChinese: "查看、切換或重置 Agent 工作目錄,參數: <路徑>",
LangJapanese: "エージェントの作業ディレクトリを表示/変更/リセット、引数: <パス>",
LangSpanish: "Ver, cambiar o restablecer el directorio de trabajo del agente, arg: <ruta>",
},
MsgBuiltinCmdDiff: {
LangEnglish: "Generate git diff as HTML file, arg: [target]",
LangChinese: "生成 git diff 并以 HTML 文件发送,参数: [目标]",
LangTraditionalChinese: "產生 git diff 並以 HTML 檔案傳送,參數: [目標]",
LangJapanese: "git diff を HTML ファイルで生成、引数: [ターゲット]",
LangSpanish: "Generar git diff como archivo HTML, arg: [objetivo]",
},
MsgBuiltinCmdPs: {
LangEnglish: "Send a P.S. to the running task",
LangChinese: "向正在执行的任务追加补充信息",
LangTraditionalChinese: "向正在執行的任務追加補充資訊",
LangJapanese: "実行中のタスクに補足情報を送信",
LangSpanish: "Enviar un P.S. a la tarea en curso",
},
MsgDiffEmpty: {
LangEnglish: "No diff — clean working tree (or no changes vs `%s`).",
LangChinese: "无差异 — 工作区干净(或与 `%s` 无变化)。",
LangTraditionalChinese: "無差異 — 工作區乾淨(或與 `%s` 無變化)。",
LangJapanese: "差分なし — 作業ツリーはクリーン(または `%s` との差分なし)。",
LangSpanish: "Sin diferencias — árbol limpio (o sin cambios vs `%s`).",
},
MsgDiffNoDiff2HTML: {
LangEnglish: "`diff2html` is not installed, sending plain text diff.\nInstall: `npm install -g diff2html-cli`",
LangChinese: "未安装 `diff2html`,将以纯文本发送差异。\n安装命令: `npm install -g diff2html-cli`",
LangTraditionalChinese: "未安裝 `diff2html`,將以純文字傳送差異。\n安裝指令: `npm install -g diff2html-cli`",
LangJapanese: "`diff2html` がインストールされていません。プレーンテキストで差分を送信します。\nインストール: `npm install -g diff2html-cli`",
LangSpanish: "`diff2html` no está instalado, enviando diff en texto plano.\nInstalar: `npm install -g diff2html-cli`",
},
MsgDirChanged: {
LangEnglish: "✅ Work directory changed to: `%s`\nThe next session will start in this directory.",
LangChinese: "✅ 工作目录已切换为: `%s`\n下次会话将在此目录下启动。",
LangTraditionalChinese: "✅ 工作目錄已切換為: `%s`\n下次會話將在此目錄下啟動。",
LangJapanese: "✅ 作業ディレクトリを変更しました: `%s`\n次のセッションはこのディレクトリで起動します。",
LangSpanish: "✅ Directorio de trabajo cambiado a: `%s`\nLa próxima sesión iniciará en este directorio.",
},
MsgDirCurrent: {
LangEnglish: "📂 Current work directory: `%s`",
LangChinese: "📂 当前工作目录: `%s`",
LangTraditionalChinese: "📂 當前工作目錄: `%s`",
LangJapanese: "📂 現在の作業ディレクトリ: `%s`",
LangSpanish: "📂 Directorio de trabajo actual: `%s`",
},
MsgDirReset: {
LangEnglish: "✅ Work directory reset to the configured default: `%s`",
LangChinese: "✅ 工作目录已重置为配置的默认目录: `%s`",
LangTraditionalChinese: "✅ 工作目錄已重置為設定的預設目錄: `%s`",
LangJapanese: "✅ 作業ディレクトリを設定済みのデフォルトに戻しました: `%s`",
LangSpanish: "✅ El directorio de trabajo se restauró al valor predeterminado configurado: `%s`",
},
MsgDirUsage: {
LangEnglish: "Usage: `/dir <path>`\n `/dir reset`\nExample: `/dir ../project`",
LangChinese: "用法: `/dir <路径>`\n `/dir reset`\n示例: `/dir ../project`",
LangTraditionalChinese: "用法: `/dir <路徑>`\n `/dir reset`\n範例: `/dir ../project`",
LangJapanese: "使い方: `/dir <パス>`\n `/dir reset`\n例: `/dir ../project`",
LangSpanish: "Uso: `/dir <ruta>`\n `/dir reset`\nEjemplo: `/dir ../project`",
},
MsgDirNotSupported: {
LangEnglish: "This agent does not support dynamic work directory switching.",
LangChinese: "当前 Agent 不支持动态切换工作目录。",
LangTraditionalChinese: "當前 Agent 不支援動態切換工作目錄。",
LangJapanese: "このエージェントは動的な作業ディレクトリの切り替えをサポートしていません。",
LangSpanish: "Este agente no soporta el cambio dinámico de directorio de trabajo.",
},
MsgDirInvalidPath: {
LangEnglish: "❌ Directory does not exist: `%s`",
LangChinese: "❌ 目录不存在: `%s`",
LangTraditionalChinese: "❌ 目錄不存在: `%s`",
LangJapanese: "❌ ディレクトリが存在しません: `%s`",
LangSpanish: "❌ El directorio no existe: `%s`",
},
MsgDirHistoryTitle: {
LangEnglish: "📋 History:",
LangChinese: "📋 历史记录:",
LangTraditionalChinese: "📋 歷史記錄:",
LangJapanese: "📋 履歴:",
LangSpanish: "📋 Historial:",
},
MsgDirHistoryHint: {
LangEnglish: "💡 Use `/dir <number>` to switch, or `/dir -` for previous.",
LangChinese: "💡 使用 `/dir <序号>` 切换,或 `/dir -` 返回上一个目录。",
LangTraditionalChinese: "💡 使用 `/dir <序號>` 切換,或 `/dir -` 返回上一個目錄。",
LangJapanese: "💡 `/dir <番号>` で切り替え、`/dir -` で前のディレクトリに戻ります。",
LangSpanish: "💡 Usa `/dir <número>` para cambiar, o `/dir -` para el anterior.",
},
MsgDirInvalidIndex: {
LangEnglish: "❌ Invalid history index: %d",
LangChinese: "❌ 无效的历史序号: %d",
LangTraditionalChinese: "❌ 無效的歷史序號: %d",
LangJapanese: "❌ 無効な履歴番号: %d",
LangSpanish: "❌ Índice de historial inválido: %d",
},
MsgDirNoHistory: {
LangEnglish: "❌ No directory history available.",
LangChinese: "❌ 暂无目录历史记录。",
LangTraditionalChinese: "❌ 暫無目錄歷史記錄。",
LangJapanese: "❌ ディレクトリの履歴がありません。",
LangSpanish: "❌ No hay historial de directorios.",
},
MsgDirNoPrevious: {
LangEnglish: "❌ No previous directory in history.",
LangChinese: "❌ 没有上一个目录记录。",
LangTraditionalChinese: "❌ 沒有上一個目錄記錄。",
LangJapanese: "❌ 前のディレクトリが履歴にありません。",
LangSpanish: "❌ No hay directorio anterior en el historial.",
},
MsgDirCardTitle: {
LangEnglish: "Working directory",
LangChinese: "工作目录",
LangTraditionalChinese: "工作目錄",
LangJapanese: "作業ディレクトリ",
LangSpanish: "Directorio de trabajo",
},
MsgDirCardPageHint: {
LangEnglish: "Page %d/%d — use `/dir <page>` or the buttons below.",
LangChinese: "第 %d/%d 页 — 可用 `/dir <页码>` 或下方按钮翻页。",
LangTraditionalChinese: "第 %d/%d 頁 — 可用 `/dir <頁碼>` 或下方按鈕翻頁。",
LangJapanese: "%d/%d ページ — `/dir <ページ>` または下のボタンで移動。",
LangSpanish: "Página %d/%d — usa `/dir <página>` o los botones.",
},
MsgDirCardEmptyHistory: {
LangEnglish: "No directory history yet. Type `/dir <path>` to switch, or use **Reset** to restore the default.",
LangChinese: "暂无目录历史。可发送 `/dir <路径>` 切换,或点 **重置** 恢复默认目录。",
LangTraditionalChinese: "暫無目錄歷史。可傳送 `/dir <路徑>` 切換,或點 **重置** 恢復預設目錄。",
LangJapanese: "まだディレクトリ履歴がありません。`/dir <パス>` で切替えるか、**リセット** で既定に戻せます。",
LangSpanish: "Aún no hay historial de directorios. Usa `/dir <ruta>` o **Restablecer** al valor por defecto.",
},
MsgDirCardReset: {
LangEnglish: "Reset",
LangChinese: "重置",
LangTraditionalChinese: "重置",
LangJapanese: "リセット",
LangSpanish: "Restablecer",
},
MsgDirCardPrev: {
LangEnglish: "Previous",
LangChinese: "上一目录",
LangTraditionalChinese: "上一目錄",
LangJapanese: "前へ",
LangSpanish: "Anterior",
},
MsgShow: {
LangEnglish: "View file / directory / snippet by reference",
LangChinese: "按引用查看文件、目录或代码片段",
LangTraditionalChinese: "按引用查看檔案、目錄或程式碼片段",
LangJapanese: "参照からファイル・ディレクトリ・コード断片を表示",
LangSpanish: "Ver archivo/directorio/fragmento por referencia",
},
MsgShowUsage: {
LangEnglish: "Usage: `/show <path|path:line|path:start-end|dir/>`\nExample: `/show svc/recovery_session_reconciler.go:12`",
LangChinese: "用法: `/show <路径|路径:行号|路径:起止行|目录/>`\n示例: `/show svc/recovery_session_reconciler.go:12`",
LangTraditionalChinese: "用法: `/show <路徑|路徑:行號|路徑:起止行|目錄/>`\n範例: `/show svc/recovery_session_reconciler.go:12`",
LangJapanese: "使い方: `/show <パス|パス:行|パス:開始-終了|dir/>`\n例: `/show svc/recovery_session_reconciler.go:12`",
LangSpanish: "Uso: `/show <ruta|ruta:línea|ruta:inicio-fin|dir/>`\nEjemplo: `/show svc/recovery_session_reconciler.go:12`",
},
MsgShowParseError: {
LangEnglish: "❌ Cannot parse reference: `%s`",
LangChinese: "❌ 无法解析引用: `%s`",
LangTraditionalChinese: "❌ 無法解析引用: `%s`",
LangJapanese: "❌ 参照を解析できません: `%s`",
LangSpanish: "❌ No se puede interpretar la referencia: `%s`",
},
MsgShowNotFound: {
LangEnglish: "❌ Referenced path does not exist: `%s`",
LangChinese: "❌ 引用路径不存在: `%s`",
LangTraditionalChinese: "❌ 引用路徑不存在: `%s`",
LangJapanese: "❌ 参照パスが存在しません: `%s`",
LangSpanish: "❌ La ruta referenciada no existe: `%s`",
},
MsgShowDirWithLocation: {
LangEnglish: "❌ Directory references cannot include line information: `%s`",
LangChinese: "❌ 目录引用不能带行号信息: `%s`",
LangTraditionalChinese: "❌ 目錄引用不能帶行號資訊: `%s`",
LangJapanese: "❌ ディレクトリ参照に行情報は指定できません: `%s`",
LangSpanish: "❌ Una referencia de directorio no puede incluir líneas: `%s`",
},
MsgShowReadFailed: {
LangEnglish: "❌ Failed to read reference: %s",
LangChinese: "❌ 读取引用失败: %s",
LangTraditionalChinese: "❌ 讀取引用失敗: %s",
LangJapanese: "❌ 参照の読み取りに失敗しました: %s",
LangSpanish: "❌ Error al leer la referencia: %s",
},
// Multi-workspace messages
MsgWsNotEnabled: {
LangEnglish: "Workspace commands are only available in multi-workspace mode.",
LangChinese: "工作区命令仅在多工作区模式下可用。",
LangTraditionalChinese: "工作區命令僅在多工作區模式下可用。",
LangJapanese: "ワークスペースコマンドはマルチワークスペースモードでのみ使用できます。",
LangSpanish: "Los comandos de workspace solo están disponibles en modo multi-workspace.",
},
MsgWsNoBinding: {
LangEnglish: "No workspace bound to this channel.",
LangChinese: "此频道未绑定工作区。",
LangTraditionalChinese: "此頻道未綁定工作區。",
LangJapanese: "このチャンネルにワークスペースがバインドされていません。",
LangSpanish: "No hay workspace vinculado a este canal.",
},
MsgWsInfo: {
LangEnglish: "Workspace: `%s`\nBound: %s",
LangChinese: "工作区: `%s`\n绑定时间: %s",
LangTraditionalChinese: "工作區: `%s`\n綁定時間: %s",
LangJapanese: "ワークスペース: `%s`\nバインド: %s",
LangSpanish: "Workspace: `%s`\nVinculado: %s",
},
MsgWsInfoShared: {
LangEnglish: "Workspace: `%s`\nBound: %s\nSource: shared",
LangChinese: "工作区: `%s`\n绑定时间: %s\n来源: shared",
LangTraditionalChinese: "工作區: `%s`\n綁定時間: %s\n來源: shared",
LangJapanese: "ワークスペース: `%s`\nバインド: %s\nソース: shared",
LangSpanish: "Workspace: `%s`\nVinculado: %s\nOrigen: shared",
},
MsgWsUsage: {
LangEnglish: "Usage: `/workspace [bind <name> | route <absolute-path> | init <url> | unbind | list | shared ...]`",
LangChinese: "用法: `/workspace [bind <名称> | route <绝对路径> | init <仓库地址> | unbind | list | shared ...]`",
LangTraditionalChinese: "用法: `/workspace [bind <名稱> | route <絕對路徑> | init <倉庫地址> | unbind | list | shared ...]`",
LangJapanese: "使い方: `/workspace [bind <名前> | route <絶対パス> | init <url> | unbind | list | shared ...]`",
LangSpanish: "Uso: `/workspace [bind <nombre> | route <ruta-absoluta> | init <url> | unbind | list | shared ...]`",
},
MsgWsInitUsage: {
LangEnglish: "Usage: `/workspace init <git-url or directory-path>`",
LangChinese: "用法: `/workspace init <git仓库地址或目录路径>`",
LangTraditionalChinese: "用法: `/workspace init <git倉庫地址或目錄路徑>`",
LangJapanese: "使い方: `/workspace init <git-urlまたはディレクトリパス>`",
LangSpanish: "Uso: `/workspace init <git-url o ruta-de-directorio>`",
},
MsgWsBindUsage: {
LangEnglish: "Usage: `/workspace bind <workspace-name>`",
LangChinese: "用法: `/workspace bind <工作区名称>`",
LangTraditionalChinese: "用法: `/workspace bind <工作區名稱>`",
LangJapanese: "使い方: `/workspace bind <ワークスペース名>`",
LangSpanish: "Uso: `/workspace bind <nombre-workspace>`",
},
MsgWsBindSuccess: {
LangEnglish: "✅ Workspace bound: `%s`",
LangChinese: "✅ 工作区绑定成功: `%s`",
LangTraditionalChinese: "✅ 工作區綁定成功: `%s`",
LangJapanese: "✅ ワークスペースをバインドしました: `%s`",
LangSpanish: "✅ Workspace vinculado: `%s`",
},
MsgWsBindNotFound: {
LangEnglish: "Workspace not found: `%s`",
LangChinese: "工作区不存在: `%s`",
LangTraditionalChinese: "工作區不存在: `%s`",
LangJapanese: "ワークスペースが見つかりません: `%s`",
LangSpanish: "Workspace no encontrado: `%s`",
},
MsgWsRouteUsage: {
LangEnglish: "Usage: `/workspace route <absolute-path>`",
LangChinese: "用法: `/workspace route <绝对路径>`",
LangTraditionalChinese: "用法: `/workspace route <絕對路徑>`",
LangJapanese: "使い方: `/workspace route <絶対パス>`",
LangSpanish: "Uso: `/workspace route <ruta-absoluta>`",
},
MsgWsRouteSuccess: {
LangEnglish: "✅ Workspace routed: `%s`",
LangChinese: "✅ 工作区路由成功: `%s`",
LangTraditionalChinese: "✅ 工作區路由成功: `%s`",
LangJapanese: "✅ ワークスペースをルーティングしました: `%s`",
LangSpanish: "✅ Workspace enrutado: `%s`",
},
MsgWsRouteAbsoluteRequired: {
LangEnglish: "Workspace route must use an absolute path: `%s`",
LangChinese: "工作区路由必须使用绝对路径: `%s`",
LangTraditionalChinese: "工作區路由必須使用絕對路徑: `%s`",
LangJapanese: "ワークスペースの route には絶対パスが必要です: `%s`",
LangSpanish: "La ruta del workspace debe ser absoluta: `%s`",
},
MsgWsRouteNotFound: {
LangEnglish: "Workspace path not found: `%s`",
LangChinese: "工作区路径不存在: `%s`",
LangTraditionalChinese: "工作區路徑不存在: `%s`",
LangJapanese: "ワークスペースのパスが見つかりません: `%s`",
LangSpanish: "Ruta de workspace no encontrada: `%s`",
},
MsgWsRouteNotDirectory: {
LangEnglish: "Workspace route target is not a directory: `%s`",
LangChinese: "工作区路由目标不是目录: `%s`",
LangTraditionalChinese: "工作區路由目標不是目錄: `%s`",
LangJapanese: "ワークスペースの route 先がディレクトリではありません: `%s`",
LangSpanish: "El destino de workspace route no es un directorio: `%s`",
},
MsgWsUnbindSuccess: {
LangEnglish: "✅ Workspace unbound.",
LangChinese: "✅ 已解除工作区绑定。",
LangTraditionalChinese: "✅ 已解除工作區綁定。",
LangJapanese: "✅ ワークスペースのバインドを解除しました。",
LangSpanish: "✅ Workspace desvinculado.",
},
MsgWsListEmpty: {
LangEnglish: "No workspaces bound.",
LangChinese: "没有绑定的工作区。",
LangTraditionalChinese: "沒有綁定的工作區。",
LangJapanese: "バインドされたワークスペースがありません。",
LangSpanish: "No hay workspaces vinculados.",
},
MsgWsListTitle: {
LangEnglish: "Bound workspaces:",
LangChinese: "已绑定的工作区:",
LangTraditionalChinese: "已綁定的工作區:",
LangJapanese: "バインドされたワークスペース:",
LangSpanish: "Workspaces vinculados:",
},
MsgWsSharedNoBinding: {
LangEnglish: "No shared workspace bound to this channel.",
LangChinese: "此频道未绑定共享工作区。",
LangTraditionalChinese: "此頻道未綁定共享工作區。",
LangJapanese: "このチャンネルに共有ワークスペースがバインドされていません。",
LangSpanish: "No hay workspace compartido vinculado a este canal.",
},
MsgWsSharedUsage: {
LangEnglish: "Usage: `/workspace shared [bind <name> | route <absolute-path> | init <url> | unbind | list]`",
LangChinese: "用法: `/workspace shared [bind <名称> | route <绝对路径> | init <仓库地址> | unbind | list]`",
LangTraditionalChinese: "用法: `/workspace shared [bind <名稱> | route <絕對路徑> | init <倉庫地址> | unbind | list]`",
LangJapanese: "使い方: `/workspace shared [bind <名前> | route <絶対パス> | init <url> | unbind | list]`",
LangSpanish: "Uso: `/workspace shared [bind <nombre> | route <ruta-absoluta> | init <url> | unbind | list]`",
},
MsgWsSharedBindSuccess: {
LangEnglish: "✅ Shared workspace bound: `%s`",
LangChinese: "✅ 共享工作区绑定成功: `%s`",
LangTraditionalChinese: "✅ 共享工作區綁定成功: `%s`",
LangJapanese: "✅ 共有ワークスペースをバインドしました: `%s`",
LangSpanish: "✅ Workspace compartido vinculado: `%s`",
},
MsgWsSharedRouteSuccess: {
LangEnglish: "✅ Shared workspace routed: `%s`",
LangChinese: "✅ 共享工作区路由成功: `%s`",
LangTraditionalChinese: "✅ 共享工作區路由成功: `%s`",
LangJapanese: "✅ 共有ワークスペースをルーティングしました: `%s`",
LangSpanish: "✅ Workspace compartido enrutado: `%s`",
},
MsgWsSharedUnbindSuccess: {
LangEnglish: "✅ Shared workspace unbound.",
LangChinese: "✅ 已解除共享工作区绑定。",
LangTraditionalChinese: "✅ 已解除共享工作區綁定。",
LangJapanese: "✅ 共有ワークスペースのバインドを解除しました。",
LangSpanish: "✅ Workspace compartido desvinculado.",
},
MsgWsSharedListEmpty: {
LangEnglish: "No shared workspaces bound.",
LangChinese: "没有绑定的共享工作区。",
LangTraditionalChinese: "沒有綁定的共享工作區。",
LangJapanese: "バインドされた共有ワークスペースがありません。",
LangSpanish: "No hay workspaces compartidos vinculados.",
},
MsgWsSharedListTitle: {
LangEnglish: "Shared workspaces:",
LangChinese: "共享工作区:",
LangTraditionalChinese: "共享工作區:",
LangJapanese: "共有ワークスペース:",
LangSpanish: "Workspaces compartidos:",
},
MsgWsSharedOnlyHint: {
LangEnglish: "The current effective workspace comes from the shared layer. Use `/workspace shared unbind` to remove it.",
LangChinese: "当前生效的工作区来自 shared 层。请使用 `/workspace shared unbind` 解除绑定。",
LangTraditionalChinese: "當前生效的工作區來自 shared 層。請使用 `/workspace shared unbind` 解除綁定。",
LangJapanese: "現在有効なワークスペースは shared レイヤー由来です。解除するには `/workspace shared unbind` を使用してください。",
LangSpanish: "El workspace efectivo actual proviene de la capa shared. Usa `/workspace shared unbind` para quitarlo.",
},
MsgWsNotFoundHint: {
LangEnglish: "No workspace found for this channel. Send a git repo URL, a local directory path, or use `/workspace init <url-or-path>`.",
LangChinese: "此频道未找到工作区。请发送 git 仓库地址或本地目录路径,或使用 `/workspace init <仓库地址或目录路径>`。",
LangTraditionalChinese: "此頻道未找到工作區。請發送 git 倉庫地址或本地目錄路徑,或使用 `/workspace init <倉庫地址或目錄路徑>`。",
LangJapanese: "このチャンネルにワークスペースが見つかりません。git URL またはローカルディレクトリパスを送信するか、`/workspace init <urlまたはパス>` を使用してください。",
LangSpanish: "No se encontró workspace para este canal. Envía una URL de repo git, una ruta de directorio local, o usa `/workspace init <url-o-ruta>`.",
},
MsgWsNotFoundHintGitOnly: {
LangEnglish: "No workspace found for this channel. Send a git repo URL or use `/workspace init <git-url>`.",
LangChinese: "此频道未找到工作区。请发送 git 仓库地址,或使用 `/workspace init <git仓库地址>`。",
LangTraditionalChinese: "此頻道未找到工作區。請發送 git 倉庫地址,或使用 `/workspace init <git倉庫地址>`。",
LangJapanese: "このチャンネルにワークスペースが見つかりません。git URL を送信するか、`/workspace init <git-url>` を使用してください。",
LangSpanish: "No se encontró workspace para este canal. Envía una URL de repo git o usa `/workspace init <git-url>`.",
},
MsgWsResolutionError: {
LangEnglish: "Workspace resolution error: %v",
LangChinese: "工作区解析错误: %v",
LangTraditionalChinese: "工作區解析錯誤: %v",
LangJapanese: "ワークスペース解決エラー: %v",
LangSpanish: "Error de resolución de workspace: %v",
},
MsgWsCloneProgress: {
LangEnglish: "🔄 Cloning repository: %s",
LangChinese: "🔄 正在克隆仓库: %s",
LangTraditionalChinese: "🔄 正在克隆倉庫: %s",
LangJapanese: "🔄 リポジトリをクローン中: %s",
LangSpanish: "🔄 Clonando repositorio: %s",
},
MsgWsCloneSuccess: {
LangEnglish: "✅ Repository cloned successfully: `%s`",
LangChinese: "✅ 仓库克隆成功: `%s`",
LangTraditionalChinese: "✅ 倉庫克隆成功: `%s`",
LangJapanese: "✅ リポジトリのクローンに成功しました: `%s`",
LangSpanish: "✅ Repositorio clonado exitosamente: `%s`",
},
MsgWsCloneFailed: {
LangEnglish: "❌ Failed to clone repository: %v",
LangChinese: "❌ 克隆仓库失败: %v",
LangTraditionalChinese: "❌ 克隆倉庫失敗: %v",
LangJapanese: "❌ リポジトリのクローンに失敗しました: %v",
LangSpanish: "❌ Error al clonar repositorio: %v",
},
MsgWsInitDirNotFound: {
LangEnglish: "Directory not found: `%s`. Please provide a valid directory path or a git URL.",
LangChinese: "目录不存在: `%s`。请提供有效的目录路径或 git 仓库地址。",
LangTraditionalChinese: "目錄不存在: `%s`。請提供有效的目錄路徑或 git 倉庫地址。",
LangJapanese: "ディレクトリが見つかりません: `%s`。有効なディレクトリパスまたは git URL を指定してください。",
LangSpanish: "Directorio no encontrado: `%s`. Proporcione una ruta de directorio válida o una URL de git.",
},
MsgWsInitInvalidTarget: {
LangEnglish: "Please provide a git URL (e.g. `https://github.com/org/repo`) or a local directory path.",
LangChinese: "请提供 git 仓库地址(如 `https://github.com/org/repo`)或本地目录路径。",
LangTraditionalChinese: "請提供 git 倉庫地址(如 `https://github.com/org/repo`)或本地目錄路徑。",
LangJapanese: "git URL(例: `https://github.com/org/repo`)またはローカルディレクトリパスを指定してください。",
LangSpanish: "Proporcione una URL de git (ej. `https://github.com/org/repo`) o una ruta de directorio local.",
},
MsgWsInitLocalPathsDisabled: {
LangEnglish: "Local directory targets are disabled for `/workspace init`. Use a git URL, or enable `workspace_init_allow_local_paths = true` for this project.",
LangChinese: "`/workspace init` 未启用本地目录目标。请使用 git 仓库地址,或在此项目配置 `workspace_init_allow_local_paths = true`。",
LangTraditionalChinese: "`/workspace init` 未啟用本機目錄目標。請使用 git 倉庫地址,或在此專案配置 `workspace_init_allow_local_paths = true`。",
LangJapanese: "`/workspace init` ではローカルディレクトリ対象が無効です。git URL を使うか、このプロジェクトで `workspace_init_allow_local_paths = true` を有効にしてください。",
LangSpanish: "Los destinos de directorio local están deshabilitados para `/workspace init`. Use una URL de git o habilite `workspace_init_allow_local_paths = true` para este proyecto.",
},
}
func (i *I18n) T(key MsgKey) string {
i.mu.RLock()
lang := i.currentLang()
i.mu.RUnlock()
if msg, ok := messages[key]; ok {
if translated, ok := msg[lang]; ok {
return translated
}
// Fallback: zh-TW → zh → en
if lang == LangTraditionalChinese {
if translated, ok := msg[LangChinese]; ok {
return translated
}
}
if msg[LangEnglish] != "" {
return msg[LangEnglish]
}
}
return string(key)
}
func (i *I18n) Tf(key MsgKey, args ...interface{}) string {
template := i.T(key)
return fmt.Sprintf(template, args...)
}