clauderipple 0.9.5 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +118 -0
- package/README.es.md +45 -0
- package/README.ja.md +17 -0
- package/README.ko.md +31 -0
- package/README.md +70 -0
- package/README.pt-BR.md +45 -0
- package/README.zh-CN.md +17 -0
- package/dist/app/assets/icon.icns +0 -0
- package/dist/app/assets/icon.ico +0 -0
- package/dist/app/assets/icon.png +0 -0
- package/dist/app/assets/trayDirectTemplate.png +0 -0
- package/dist/app/assets/trayDirectTemplate@2x.png +0 -0
- package/dist/app/assets/trayDownTemplate.png +0 -0
- package/dist/app/assets/trayDownTemplate@2x.png +0 -0
- package/dist/app/assets/trayTemplate.png +0 -0
- package/dist/app/assets/trayTemplate@2x.png +0 -0
- package/dist/app/assets/trayWarnTemplate.png +0 -0
- package/dist/app/assets/trayWarnTemplate@2x.png +0 -0
- package/dist/app/assets/trayWin.png +0 -0
- package/dist/app/assets/trayWin@2x.png +0 -0
- package/dist/app/assets/trayWinDirect.png +0 -0
- package/dist/app/assets/trayWinDirect@2x.png +0 -0
- package/dist/app/assets/trayWinDown.png +0 -0
- package/dist/app/assets/trayWinDown@2x.png +0 -0
- package/dist/app/assets/trayWinWarn.png +0 -0
- package/dist/app/assets/trayWinWarn@2x.png +0 -0
- package/dist/app/dist/claude-desktop.js +67 -0
- package/dist/app/dist/main.js +423 -110
- package/dist/app/dist/preload.js +21 -0
- package/dist/app/dist/protocol.js +121 -0
- package/dist/app/dist/status-model.js +87 -0
- package/dist/app/dist/window.js +133 -0
- package/dist/app/package.json +1 -1
- package/dist/cli/src/awake-setup.js +314 -0
- package/dist/cli/src/bundle.js +9 -5
- package/dist/cli/src/direct.js +159 -0
- package/dist/cli/src/doctor.js +205 -0
- package/dist/cli/src/hooks/agent-title.js +7 -4
- package/dist/cli/src/index.js +227 -31
- package/dist/cli/src/launchd.js +29 -20
- package/dist/cli/src/launcher.js +215 -0
- package/dist/cli/src/power.js +182 -0
- package/dist/cli/src/registration.js +157 -0
- package/dist/cli/src/remote.js +263 -0
- package/dist/cli/src/schtasks.js +50 -40
- package/dist/cli/src/settings.js +26 -1
- package/dist/cli/src/tray.js +5 -2
- package/dist/mod/hooks/i18n.ts +473 -227
- package/dist/mod/hooks/judge.ts +35 -17
- package/dist/mod/hooks/modes.ts +56 -1
- package/dist/mod/hooks/register.tsx +237 -32
- package/dist/mod/hooks/session.ts +102 -1
- package/dist/mod/hooks/settings.js +7 -3
- package/dist/mod/hooks/settings.ts +9 -4
- package/dist/mod/hooks/stats.ts +25 -1
- package/dist/mod/hooks/ui/agents.tsx +903 -79
- package/dist/mod/hooks/ui/alerts.tsx +20 -17
- package/dist/mod/hooks/ui/art.ts +33 -7
- package/dist/mod/hooks/ui/band.tsx +262 -81
- package/dist/mod/hooks/ui/flat.ts +265 -0
- package/dist/mod/hooks/ui/kit.tsx +70 -55
- package/dist/mod/hooks/ui/look.ts +129 -0
- package/dist/mod/hooks/ui/settings.tsx +71 -46
- package/dist/mod/hooks/ui/setup.tsx +15 -13
- package/dist/mod/hooks/ui/theme.ts +3 -0
- package/dist/mod/hooks/ui/tools.ts +124 -0
- package/dist/mod/hooks/ui/view.ts +120 -4
- package/dist/mod/hooks/workers.ts +33 -6
- package/dist/mod/tests/register.test.tsx +155 -11
- package/dist/mod/tests/ui.test.tsx +408 -27
- package/dist/mod/types/index.d.ts +66 -2
- package/dist/remote/package.json +28 -0
- package/dist/remote/src/away.js +85 -0
- package/dist/remote/src/bridge-client.js +336 -0
- package/dist/remote/src/composer-menu.js +11 -0
- package/dist/remote/src/config.js +102 -0
- package/dist/remote/src/desktop.js +1018 -0
- package/dist/remote/src/e2ee.js +126 -0
- package/dist/remote/src/e2ee.ts +126 -0
- package/dist/remote/src/eventlog.js +298 -0
- package/dist/remote/src/expo-push.js +127 -0
- package/dist/remote/src/folders.js +79 -0
- package/dist/remote/src/fsutil.js +39 -0
- package/dist/remote/src/handoff.js +38 -0
- package/dist/remote/src/host-service.js +168 -0
- package/dist/remote/src/images.js +215 -0
- package/dist/remote/src/local-control.js +138 -0
- package/dist/remote/src/main.js +264 -0
- package/dist/remote/src/permissions.js +124 -0
- package/dist/remote/src/power.js +76 -0
- package/dist/remote/src/processes.js +24 -0
- package/dist/remote/src/protocol.js +32 -0
- package/dist/remote/src/protocol.ts +284 -0
- package/dist/remote/src/push-content.js +32 -0
- package/dist/remote/src/push.js +134 -0
- package/dist/remote/src/receipts.js +111 -0
- package/dist/remote/src/relay.js +438 -0
- package/dist/remote/src/router.js +208 -0
- package/dist/remote/src/sdk-launcher.js +18 -0
- package/dist/remote/src/server.js +706 -0
- package/dist/remote/src/service.js +157 -0
- package/dist/remote/src/sessions.js +1800 -0
- package/dist/remote/src/sidebar-storage.js +211 -0
- package/dist/remote/src/sidebar.js +173 -0
- package/dist/remote/src/tool-details.js +205 -0
- package/dist/remote/src/tool-details.ts +153 -0
- package/dist/remote/src/worktree.js +99 -0
- package/dist/remote/web/app.ts +746 -0
- package/dist/remote/web/conn.ts +193 -0
- package/dist/remote/web/demo.ts +134 -0
- package/dist/remote/web/dom.ts +124 -0
- package/dist/remote/web/esc.ts +4 -0
- package/dist/remote/web/i18n.ts +374 -0
- package/dist/remote/web/icon.svg +1 -0
- package/dist/remote/web/index.html +24 -0
- package/dist/remote/web/manifest.webmanifest +10 -0
- package/dist/remote/web/mascot.ts +60 -0
- package/dist/remote/web/md.ts +78 -0
- package/dist/remote/web/notify.ts +55 -0
- package/dist/remote/web/pushstate.ts +27 -0
- package/dist/remote/web/secure.ts +109 -0
- package/dist/remote/web/sidebar.ts +106 -0
- package/dist/remote/web/style.css +311 -0
- package/dist/remote/web/sw.ts +48 -0
- package/dist/remote/web/timeline.ts +224 -0
- package/dist/remote/web/views.ts +323 -0
- package/dist/router/src/admin.js +331 -5
- package/dist/router/src/awake-win.js +590 -0
- package/dist/router/src/awake.js +432 -0
- package/dist/router/src/config.js +94 -0
- package/dist/router/src/health.js +86 -3
- package/dist/router/src/hold.js +107 -0
- package/dist/router/src/index.js +108 -6
- package/dist/router/src/ingress/server.js +26 -4
- package/dist/router/src/ingress/translate.js +6 -2
- package/dist/router/src/phone.js +82 -0
- package/dist/router/src/power.js +107 -0
- package/dist/router/src/providers/anthropic-usage.js +33 -1
- package/dist/router/src/providers/google/antigravity.js +73 -10
- package/dist/router/src/providers/google/index.js +191 -14
- package/dist/router/src/providers/google/prompt-refusal.js +29 -0
- package/dist/router/src/providers/google/thoughtSignatures.js +13 -0
- package/dist/router/src/providers/google/transport.js +1 -1
- package/dist/router/src/providers/google/usage.js +302 -0
- package/dist/router/src/providers/grok/index.js +18 -0
- package/dist/router/src/providers/grok/usage.js +77 -0
- package/dist/router/src/providers/openai/translate.js +13 -2
- package/dist/router/src/providers/opencode-usage.js +116 -0
- package/dist/router/src/providers/retry.js +4 -1
- package/dist/router/src/proxy.js +371 -261
- package/dist/router/src/remote-host.js +320 -0
- package/dist/router/src/remote-tunnel.js +320 -0
- package/dist/router/src/requestlog.js +48 -39
- package/dist/router/src/tether-win.js +211 -0
- package/dist/router/src/tether.js +712 -0
- package/dist/router/src/usage-history.js +227 -0
- package/dist/router/src/version.js +1 -1
- package/dist/ui/app.js +1083 -59
- package/dist/ui/i18n.js +670 -69
- package/dist/ui/index.html +33 -6
- package/dist/ui/style.css +177 -0
- package/docs/ARCHITECTURE.md +402 -14
- package/package.json +8 -2
package/dist/ui/i18n.js
CHANGED
|
@@ -6,113 +6,116 @@ const I18N = {
|
|
|
6
6
|
"nav.health": "상태", "nav.slots": "모델 매핑", "nav.providers": "프로바이더", "nav.clients": "클라이언트", "nav.logs": "로그", "nav.about": "정보",
|
|
7
7
|
"lang.label": "언어",
|
|
8
8
|
"common.save": "저장", "common.saved": "저장했습니다.", "common.saveFailed": "저장하지 못했습니다.", "common.loadFailed": "불러오지 못했습니다.", "common.actionFailed": "처리하지 못했습니다.", "common.cancel": "취소", "common.edit": "수정", "common.remove": "삭제", "common.show": "보기", "common.hide": "숨기기", "common.advanced": "고급", "common.notAvailable": "—",
|
|
9
|
-
"health.title": "상태", "health.subtitle": "Claude Desktop
|
|
10
|
-
"update.check": "업데이트 확인", "update.checking": "확인 중…", "update.latest": "최신 버전입니다.", "update.install": "{latest}
|
|
11
|
-
"picker.title": "모델 피커","picker.restartHelp": "
|
|
12
|
-
"slots.title": "모델 매핑", "slots.subtitle": "Claude 앱에서
|
|
13
|
-
"providers.title": "프로바이더", "providers.subtitle": "
|
|
9
|
+
"health.title": "상태", "health.subtitle": "Claude Desktop 연결과 프로바이더, 모델 피커 상태를 5초마다 확인합니다.", "health.desktop": "Claude Desktop 연결", "health.connection": "연결 상태", "health.connected": "연결됨", "health.notConnected": "연결 안 됨", "health.disconnected": "연결 끊김", "health.connectedHelp": "Claude Desktop의 Code 탭에서 보낸 요청을 리플이 처리합니다.", "health.notConnectedHelp": "Claude Desktop이 리플에 연결되어 있지 않습니다. 메뉴 막대 앱에서 리플을 켜거나 터미널에서 clauderipple install을 실행하세요.", "health.requests": "요청 (리플 시작 후)", "health.requestCount": "요청 수", "health.requestsFmt": "완료 {completed} · 실패 {failed} · 진행 중 {inFlight}", "health.providers": "프로바이더", "health.noProviders": "연결된 프로바이더가 없습니다. 프로바이더 메뉴에서 추가하세요.", "health.quota": "사용량 {percent}%{reset}","health.version": "버전", "health.runtime": "리플 실행 파일 · 시작 시각", "health.routes": "매핑 수", "health.cli": "Claude Code 버전",
|
|
10
|
+
"update.check": "업데이트 확인", "update.checking": "확인 중…", "update.latest": "최신 버전입니다.", "update.install": "{latest} 업데이트", "update.download": "{latest} 다운로드", "update.checkout": "{latest} 버전이 나왔습니다. 소스 코드에서 실행 중이므로 git pull로 업데이트하세요.", "update.running": "업데이트 중…", "update.checkFailed": "업데이트를 확인하지 못했습니다.", "update.confirm": "리플을 {current}에서 {latest} 버전으로 업데이트할까요? 진행 중인 요청이 끝나면 리플이 새 버전으로 다시 시작되고, 이 페이지도 자동으로 새로고침됩니다.", "update.started": "업데이트를 시작했습니다. 리플이 새 버전으로 다시 시작되면 이 창이 새로고침됩니다. 진행 상황은 ~/.clauderipple/logs/update.log에서 확인할 수 있습니다.", "update.failed": "업데이트를 시작하지 못했습니다.",
|
|
11
|
+
"picker.title": "모델 피커","picker.restartHelp": "켠 뒤에는 Claude Desktop을 완전히 종료하고 다시 여세요.", "picker.confirmOn": "인증서를 신뢰하도록 설정할 때 운영체제의 확인 창이 열립니다(macOS: 로그인 암호 입력, Windows: 인증서 확인). 리플은 암호를 받거나 확인하지 않습니다. 계속할까요?", "picker.working": "처리 중입니다.", "picker.doneOn": "모델 피커를 켰습니다. Claude Desktop을 완전히 종료하고 다시 여세요.", "picker.doneOff": "모델 피커를 껐습니다. Claude Desktop을 완전히 종료하고 다시 여세요.",
|
|
12
|
+
"slots.title": "모델 매핑", "slots.subtitle": "Claude 앱에서 모델을 골랐을 때 실제로 답할 모델을 정합니다. 바꾸면 자동으로 저장됩니다.","slots.pickerModels": "피커에 표시할 모델", "slots.pickerModelsHelp": "고른 모델이 Claude Desktop 피커에 나오고, 피커에서 고르면 그 모델이 바로 답합니다. 새로 추가한 모델은 새 세션부터 고를 수 있습니다(진행 중인 세션은 시작할 때의 목록을 그대로 씁니다).", "slots.add": "+ 매핑 추가", "slots.th.claude": "Claude 앱에서 고른 모델", "slots.th.target": "실제로 답할 모델", "slots.th.effort": "추론 강도 (effort)", "slots.passthrough": "Claude가 직접 처리", "slots.noProviderModels": "먼저 프로바이더를 연결하고 쓸 모델을 고르세요.", "slots.noChanges": "설정한 매핑이 없습니다. 모든 요청을 Claude가 기본 설정대로 처리합니다.", "slots.duplicate": "같은 Claude 모델에 매핑을 두 개 이상 둘 수 없습니다.", "slots.effortHint": "모델이 앱에서 고른 추론 강도를 지원하지 않으면 가장 가까운 단계로 바꿔 보냅니다. (예: xhigh → high)", "slots.noEffort": "이 모델은 추론 강도를 설정할 수 없습니다.", "pool.ready": "사용 중", "pool.cooling": "{seconds}초 후 다시 사용", "pool.quarantined": "인증 실패 — API 키 확인 필요", "slots.modelSlots": "Claude Code 용도별 모델", "slots.modelSlotsHelp": "Claude Code가 요청을 만들기 전에 용도별로 고르는 모델입니다. 일반 모델 매핑은 여기에 적용되지 않습니다. 비워 두면 Claude가 처리하고 Claude 사용량을 씁니다. 웹 검색은 '작고 빠른 모델'이 맡습니다. 이 항목을 그대로 두면 다른 모델과 대화할 때도 검색에는 Claude 한도를 씁니다. 바꾸면 settings.json에 저장됩니다.", "slots.noWebSearch": "웹 검색을 지원하지 않는 모델", "slots.noWebSearchWarn": "저장했습니다. 다만 리플에서는 이 모델로 웹 검색을 할 수 없어 검색이 실패합니다. (모델 자체는 웹 검색을 지원할 수도 있습니다. 기본값으로 바꾸면 Claude가 검색을 맡습니다.)", "slots.slotDefault": "기본값 (Claude)", "slots.slot.smallFast": "작고 빠른 모델", "slots.slot.subagent": "서브에이전트", "slots.slot.main": "세션 기본 모델", "slots.slotHelp.smallFast": "웹 검색, 제목 생성, 분류", "slots.slotHelp.subagent": "모델을 따로 정하지 않은 서브에이전트", "slots.slotHelp.main": "세션을 시작할 때 쓸 모델", "slots.slotSaved": "용도별 모델을 저장했습니다. 새 세션부터 적용됩니다.", "slots.windowGlobal": "기본값", "slots.windowHelp": "모델이 한 번에 읽을 수 있는 컨텍스트 크기를 토큰 단위로 정합니다. 모델마다 지원하는 크기가 달라 따로 정합니다. 비워 두면 프로바이더가 알려 준 값을 쓰고, 그 값도 없으면 시스템 기본값을 씁니다. 대화를 압축할 시점이 아니라 모델이 실제로 읽을 수 있는 최대 크기를 입력하세요.",
|
|
13
|
+
"providers.title": "프로바이더", "providers.subtitle": "연결한 서비스와 계정을 한곳에서 관리합니다. 프로바이더를 고르면 오른쪽에 세부 설정과 계정 목록이 나옵니다.", "providers.search": "프로바이더 검색…", "providers.overview": "개요", "providers.accounts": "계정","providers.modelsTab": "모델", "providers.selectedModels": "선택한 모델", "providers.modelsCountShort": "모델 {count}개", "providers.noSelection": "왼쪽에서 프로바이더를 고르세요.", "providers.rotationOn": "자동 전환 켜짐", "providers.rotationOff": "자동 전환 꺼짐", "providers.rotationSaving": "자동 전환 설정 저장 중…", "providers.rotationSaved": "자동 전환 설정을 저장했습니다.", "providers.accountCount": "연결된 계정 {count}개", "providers.accountCountHelp": "현재 Claude에 로그인한 계정과 리플에 추가한 계정을 모두 합한 수입니다.", "providers.accountPoolTitle": "Claude 계정", "providers.accountPoolSubtitle": "한 대화는 같은 계정으로 이어갑니다. 답변을 시작하기 전에 사용 한도에 걸리거나 인증 오류가 날 때만 다음 계정으로 넘어갑니다.", "providers.addClaudeAccount": "+ Claude 계정 추가", "providers.currentAccountHelp": "지금 Claude Code나 Claude Desktop에 로그인한 계정입니다. 리플에서는 삭제할 수 없습니다.", "providers.addedAccountHelp": "리플이 이 컴퓨터의 현재 사용자만 읽을 수 있는 파일에 OAuth 로그인 정보를 안전하게 저장하고 자동으로 갱신합니다.", "providers.reauthAction": "다시 로그인", "providers.preferBadge": "1순위", "providers.preferAction": "1순위로 지정", "providers.preferHelp": "새 대화는 목록 맨 위의 1순위 계정부터 씁니다. 한도에 닿으면 다음 계정으로 넘어가고, 한도가 초기화되면 새 대화부터 다시 1순위 계정을 씁니다. 진행 중인 대화는 프롬프트 캐시를 지키려고 같은 계정으로 이어갑니다.","providers.dangerZone": "추가 계정 관리","providers.connection": "연결 상태","providers.rotationRequired": "계정을 여러 개 추가해도 자동 전환을 켜야 Claude 앱과 Claude Code에서 쓸 수 있습니다.", "providers.anthropic": "Claude (Anthropic)", "providers.anthropicHelp": "Claude 구독 계정을 자동으로 돌려 쓰거나, Codex 같은 OpenAI 호환 도구에서 Claude 모델을 쓰게 연결합니다.", "providers.anthropicIngressOnly": "자동 전환을 끄면 고른 모델은 Codex 같은 OpenAI 호환 도구에서만 쓸 수 있고, Claude 앱의 모델 매핑에는 나오지 않습니다.", "providers.anthropicPoolRouting": "자동 전환을 켜면 Claude 앱과 Claude Code의 대화마다 같은 계정을 써서 프롬프트 캐시를 지킵니다. 답변을 만들기 전에 429 한도 초과나 인증 거부 오류가 오면 다음 계정으로 넘어갑니다. 구독 계정을 여러 개 쓰는 것은 Anthropic 이용약관에 따라 제한될 수 있습니다. 본인 계정만 허용된 용도로 쓰세요.","providers.anthropicPool": "Claude 계정 자동 전환","providers.anthropicCurrent": "현재 로그인 계정", "providers.anthropicReauth": "다시 로그인 필요", "providers.anthropicNoAccounts": "리플에 추가한 계정이 없습니다.", "providers.anthropicRenamePrompt": "이 계정을 표시할 이름", "providers.anthropicRemoveConfirm": "리플에서 Claude 계정 {name}을(를) 삭제할까요?", "providers.anthropicLogoutAll": "추가 계정 모두 삭제", "providers.anthropicLogoutAllConfirm": "리플에 추가한 Claude 계정을 모두 삭제할까요? Claude Code와 Claude Desktop의 현재 로그인은 그대로 둡니다.", "providers.anthropicAuthClaudeCode": "Claude Code 로그인 사용 (자동)", "providers.anthropicAuthApiKey": "API 키", "providers.anthropicCredentialsHelp": "Claude Code 로그인을 그대로 쓸지, Anthropic API 키로 연결할지 고르세요.", "providers.anthropicSourceObserved": "Claude Desktop 대화에서 확인됨", "providers.anthropicSourceClaudeCode": "터미널 claude 로그인", "providers.anthropicSourceTokenFile": "리플 토큰", "providers.anthropicSourceMissing": "없음 — 아래 버튼으로 연결","providers.anthropicOAuthTitle": "Claude 계정 추가", "providers.anthropicOAuthWarning": "Claude 구독의 OAuth 로그인을 리플 같은 다른 회사 프로그램에서 쓰는 것은 Anthropic이 공식 지원하지 않습니다. 약관을 어겨 계정 이용이 제한될 수 있습니다. 반드시 본인 계정만 허용된 용도로 쓰세요.", "providers.anthropicOAuthAccept": "위험을 확인했고 OAuth로 계속합니다.", "providers.anthropicOAuthContinue": "OAuth로 계속","providers.anthropicLoginDone": "Claude 구독을 연결했습니다.", "providers.anthropicSignInBrowser": "브라우저에서 Claude에 로그인하세요. 창이 열리지 않으면 아래 링크를 여세요.", "providers.anthropicSignInLink": "로그인 페이지 열기", "providers.anthropicSignInPaste": "브라우저에서 로그인한 뒤 나오는 코드를 여기에 붙여넣으세요.", "providers.anthropicSignInSubmit": "코드 입력 완료", "providers.anthropicSignInManual": "코드 붙여넣기로 다시 시도", "providers.anthropicSignInWaiting": "브라우저에서 승인 대기 중… (최대 5분)", "providers.anthropicSignInFailed": "로그인하지 못했습니다.","providers.add": "+ 프로바이더 추가", "providers.refresh": "전체 연결 확인", "providers.check": "연결 확인", "providers.checking": "확인 중", "providers.empty": "아직 연결된 프로바이더가 없습니다. 위쪽 버튼으로 추가하세요.","providers.noModels": "고른 모델이 없습니다. 수정 메뉴에서 모델을 고르세요.", "providers.removeConfirm": "프로바이더 {name}을(를) 삭제할까요? 이 프로바이더를 쓰는 모델 매핑도 함께 삭제됩니다.", "providers.choose": "프로바이더 추가", "providers.chooseHelp": "연결할 서비스를 고르세요.", "providers.chatgpt": "ChatGPT 구독", "providers.chatgptHelp": "Codex가 포함된 ChatGPT 요금제(Plus, Pro, Business 등)로 GPT 모델을 씁니다. API 키 없이 로그인만 하면 연결됩니다.", "providers.presetHelp": "API 키만 입력하면 바로 연결됩니다.", "providers.openaiGroup": "OpenAI 호환", "providers.openaiGroupHelp": "리플이 요청을 OpenAI API 규격에 맞게 바꿔 보냅니다.","providers.custom": "직접 입력", "providers.customName": "새 프로바이더", "providers.customHelp": "목록에 없는 Anthropic 호환 또는 OpenAI 호환 API를 연결합니다. API 주소(엔드포인트 URL)와 키를 직접 입력하세요.", "providers.formatHelp": "서비스 문서에 나온 규격을 고르세요. API 주소가 /chat/completions로 끝나면 OpenAI Chat Completions 규격입니다.", "providers.addTitle": "프로바이더 추가", "providers.edit": "프로바이더 수정", "providers.name": "이름", "providers.nameHelp": "목록과 모델 매핑에 표시할 프로바이더 이름입니다.", "providers.nameRequired": "이름을 입력하세요.", "providers.apiKey": "API 키", "providers.keyHelp": "프로바이더에서 발급받은 API 키입니다. 이 컴퓨터의 설정 파일에만 저장합니다.", "providers.keyPlaceholder": "API 키를 붙여넣으세요", "providers.keySaved": "저장한 키를 쓰고 있습니다. 바꾸려면 새 키를 입력하세요.", "providers.url": "API 기본 주소 (URL)", "providers.urlHelp": "Anthropic 호환 API의 기본 주소입니다. 서비스 문서의 주소와 다를 때만 바꾸세요.", "providers.openaiUrlHelp": "OpenAI 호환 API의 기본 주소입니다. 요청은 Chat Completions 또는 Responses API에 맞게 바꿔 보냅니다.", "providers.wire": "API 규격", "providers.wireHelp": "대부분 Chat Completions를 씁니다. 프로바이더가 이전 대화를 서버에 저장하지 않는 Responses API를 지원할 때만 Responses를 고르세요.", "providers.urlRequired": "올바른 URL을 입력하세요.", "providers.keyType": "인증 헤더", "providers.keyTypeHelp": "보통 x-api-key를 씁니다. 서비스 문서에 Authorization: Bearer 방식이 나와 있으면 그 항목을 고르세요.", "providers.extraHeaders": "추가 HTTP 헤더", "providers.extraHeadersHelp": "서비스에서 요구하는 추가 헤더를 '이름: 값' 형식으로 한 줄에 하나씩 입력하세요.", "providers.models": "사용할 모델", "providers.modelsHelp": "고른 모델이 모델 매핑에서 고를 수 있는 목록에 나옵니다.", "providers.modelsFound": "프로바이더에서 받아 온 모델 목록입니다.", "providers.modelsFallback": "모델 목록을 받아 오지 못해 기본으로 알려진 모델을 보여 줍니다.", "measure.running": "모델 기능 확인 중… ({done}/{total})", "measure.help": "모델마다 어떤 API 규격과 추론 강도를 지원하는지 확인합니다. 공개 모델 목록(models.dev)에 정보가 있으면 그 정보를 쓰고, 없으면 모델에 직접 요청을 보냅니다.", "measure.done": "모델 기능 확인 완료: {summary}", "measure.nothing": "모델이 응답하지 않아 기능을 확인하지 못했습니다.", "measure.notEntitled": "{models}: 이 프로바이더의 자체 앱에서만 쓸 수 있는 모델입니다. 여기서 골라도 쓸 수 없습니다.", "measure.failed": "모델 기능을 확인하지 못했습니다.", "measure.authFailed": "API 키 인증이 거부되어 모델 기능을 확인하지 못했습니다.", "providers.probeNotEntitled": "API 키는 정상이지만 요금제 제한으로 요청이 거부되었습니다.", "providerStatus.notEntitled": "요금제 제한", "providers.probeOk": "연결했습니다.", "providers.probeFailed": "연결하지 못했습니다.", "providers.apiSoon": "잠시 후 다시 시도하세요.", "providers.showInPicker": "Claude 앱 피커에 실제 모델 이름 표시", "providers.pickerOffHint": "피커 모드가 꺼져 있어 골라도 피커에 나오지 않습니다. 저장할 때 피커를 켤지 묻습니다.", "providers.pickerOffPrompt": "피커 모드가 꺼져 있어 이 모델이 Claude Desktop 피커에 나오지 않습니다. 지금 켤까요? 인증서를 신뢰하도록 설정할 때 운영체제의 확인 창이 열립니다.", "providers.credentials": "로그인 방식", "providers.credentialsHelp": "어디에 저장된 ChatGPT 로그인 정보(토큰)를 쓸지 정합니다.", "providers.authAuto": "자동 (리플 로그인 우선, 없으면 Codex CLI 로그인 사용)", "providers.authOwn": "리플에서 직접 로그인", "providers.authBorrow": "Codex CLI 로그인 사용 (~/.codex/auth.json)", "providers.login": "ChatGPT 로그인 안내", "providers.loginHelp": "메뉴 막대 앱에서 'ChatGPT 로그인…'을 누르거나 터미널에서 clauderipple login을 실행하면 브라우저 로그인 창이 열립니다. 토큰은 이 컴퓨터에만 저장합니다.","providers.chatgptLogin": "ChatGPT 로그인", "providers.chatgptLoginWaiting": "브라우저에서 로그인을 마치면 이 화면이 자동으로 새로고침됩니다.", "providers.chatgptLoginDone": "ChatGPT에 로그인했습니다.", "providers.chatgptAccountsTitle": "ChatGPT 계정", "providers.chatgptAccountsSubtitle": "계정을 여러 개 추가하면 한 계정이 한도에 닿았을 때 다음 계정이 같은 요청을 이어받습니다. 답한 뒤에는 같은 계정으로 대화를 이어가 프롬프트 캐시를 지킵니다. 계정은 목록 순서대로 씁니다.", "providers.addChatgptAccount": "+ ChatGPT 계정 추가", "providers.chatgptAddWaiting": "브라우저에서 추가할 계정으로 로그인하세요. 이미 로그인한 계정이 나오면 다른 계정을 고르세요.", "providers.chatgptAdded": "ChatGPT 계정을 추가했습니다.", "providers.chatgptNoAccounts": "로그인한 ChatGPT 계정이 없습니다.", "providers.chatgptAccountCount": "계정 {count}개", "providers.chatgptCodexHelp": "Codex CLI에 로그인한 계정입니다. 리플은 로그인 정보를 읽기만 하고 자동으로 갱신하지 않습니다. 다른 계정을 모두 쓴 뒤 마지막에 씁니다.", "providers.chatgptOwnHelp": "리플이 이 컴퓨터의 현재 사용자만 읽을 수 있는 파일에 계정 정보를 저장하고 자동으로 갱신합니다.", "providers.chatgptInUse": "현재 사용 중", "providers.chatgptStandby": "대기", "providers.chatgptPause": "일시 중지", "providers.chatgptResume": "다시 사용", "providers.chatgptPaused": "일시 중지됨", "providers.chatgptClearCooldown": "대기 해제", "providers.chatgptRemoveConfirm": "리플에서 ChatGPT 계정 {name}을(를) 삭제할까요?", "providers.chatgptReauthHelp": "로그인이 만료되었거나 거부되었습니다. 같은 계정으로 다시 로그인하면 사용할 수 있습니다.", "pool.coolingFor": "{duration} 후 다시 사용", "time.hoursMinutes": "{h}시간 {m}분", "time.minutes": "{m}분", "time.seconds": "{s}초", "quota.window5h": "5시간", "quota.windowWeek": "주간", "quota.windowHours": "{hours}시간", "quota.line": "{window} {percent}%", "quota.resetAt": "{time} 초기화", "providers.effortLevels": "추론 강도: {levels}", "providers.effortNone": "지원 안 함", "providers.modelEffort": "추론 강도 설정", "providers.modelNoEffort": "추론 강도 지원 안 함", "providers.defaultEffort": "기본 추론 강도 (effort)", "providers.defaultEffortHelp": "모델 매핑이나 앱에서 추론 강도를 따로 정하지 않았을 때 쓸 값입니다.", "providers.identity": "모델에 자기 이름 알려 주기 (identity)", "providers.append": "시스템 프롬프트 추가 문구", "providers.appendHelp": "모든 요청의 시스템 프롬프트 끝에 덧붙이는 고정 문구입니다. 자주 바꾸면 프롬프트 캐시를 쓸 수 없어 비용이 늘 수 있습니다.",
|
|
14
14
|
"providerStatus.connected": "연결됨", "providerStatus.keyNeeded": "API 키 확인 필요", "providerStatus.loginNeeded": "로그인 필요", "providerStatus.disconnected": "연결 안 됨", "providerStatus.checking": "확인 중",
|
|
15
|
-
"clients.title": "클라이언트", "clients.subtitle": "
|
|
16
|
-
"logs.title": "로그", "logs.requests": "요청", "logs.raw": "원본 로그", "logs.lastHour": "최근 1시간", "logs.autoscroll": "자동 스크롤", "logs.polling": "3초마다
|
|
17
|
-
"
|
|
18
|
-
"
|
|
15
|
+
"clients.title": "클라이언트", "clients.subtitle": "리플에 연결해서 쓸 앱을 설정합니다.", "clients.desktop.title": "Claude Desktop", "clients.desktop.help": "프로바이더의 모델을 피커에 실제 이름으로 표시할지 정합니다.", "clients.codex.title": "Codex (앱과 CLI)", "clients.codex.help": "Codex 설정(~/.codex/config.toml)에 리플 프로바이더를 추가합니다. 터미널에서는 `codex --profile clauderipple -m <모델>`을 실행하고, Codex 앱에서는 설정에서 clauderipple 프로바이더를 기본값으로 고르세요.", "clients.codex.note": "켜면 Codex의 GPT 요청도 리플이 처리합니다. Codex 로그인은 그대로입니다. ChatGPT 계정을 여러 개 추가해 두면 한 계정이 한도에 걸려도 로그아웃할 필요 없이 다음 계정이 이어받습니다. 아래는 Codex에서 더 쓸 수 있는 Claude 모델과 Anthropic 호환 모델입니다.", "clients.codex.turnOn": "Codex에서 리플 사용","clients.claudeCode.title": "터미널 Claude Code", "clients.claudeCode.help": "터미널의 `claude`도 같은 리플에 연결됩니다. `/model <이름>` 명령어로 모델을 고르세요.",
|
|
16
|
+
"logs.title": "로그", "logs.requests": "요청", "logs.raw": "원본 로그", "logs.lastHour": "최근 1시간", "logs.autoscroll": "자동 스크롤", "logs.polling": "3초마다 새로고침", "logs.rawPolling": "3초마다 새로고침 · 최근 200줄", "logs.provider": "프로바이더", "logs.all": "전체","logs.empty": "아직 요청이 없습니다.", "logs.summary.requests": "요청 수", "logs.summary.success": "성공 / 실패", "logs.summary.input": "입력 토큰", "logs.summary.output": "출력 토큰", "logs.summary.duration": "평균 응답 시간", "logs.cacheHit": "캐시 {percent}%", "logs.th.time": "시간", "logs.th.models": "모델", "logs.th.effort": "추론 강도", "logs.th.input": "입력", "logs.th.output": "출력", "logs.th.duration": "소요 시간", "logs.th.status": "상태", "logs.status.ok": "성공", "logs.status.error": "오류", "logs.status.resent": "재전송", "logs.status.resentHelp": "오류가 아닙니다. 클라이언트가 같은 요청을 다시 보냈습니다.", "logs.detail.id": "요청 ID", "logs.detail.kind": "종류", "logs.detail.stop": "종료 이유", "logs.detail.uncached": "캐시를 쓰지 않은 입력", "logs.detail.cacheRead": "캐시 읽기", "logs.detail.cacheWrite": "캐시 저장", "logs.detail.note": "메모", "logs.none": "없음", "logs.seconds": "{value}초",
|
|
17
|
+
"logs.usage": "사용량", "logs.period": "기간", "logs.period.hour": "1시간", "logs.period.today": "오늘", "logs.period.7d": "7일", "logs.period.30d": "30일", "logs.period.month": "이번 달", "logs.period.all": "전체", "logs.period.custom": "직접 지정", "logs.customFrom": "시작일", "logs.customTo": "종료일", "logs.since": "{date}부터 기록", "logs.byModel": "모델별 사용량", "logs.modelsEmpty": "이 기간에는 사용 기록이 없습니다.", "logs.th.count": "요청 수", "logs.th.avg": "평균 소요 시간", "logs.recent": "최근 요청", "logs.recentNote": "최근 200건",
|
|
18
|
+
"about.title": "정보", "about.body": "ClaudeRipple은 독립적인 오픈소스 프로젝트로, Anthropic·OpenAI와 제휴 관계가 아니며 보증이나 후원도 받지 않습니다. Claude와 Claude Code는 Anthropic, PBC의 상표입니다.", "about.license": "라이선스: GPL-3.0",
|
|
19
|
+
"providers.identityHelp": "시스템 프롬프트 맨 앞에 '너는 <모델명>이고 Claude Code에서 답한다'를 덧붙입니다. 끄면 모델이 자신을 Claude라고 생각할 수 있습니다.",
|
|
20
|
+
"providers.limits": "상태 바에 한도 표시",
|
|
21
|
+
"providers.limitsHelp": "리플 상태 바 둘째 줄에 이 프로바이더의 사용 한도를 표시합니다. OpenCode Go·Zen, Grok처럼 한도를 알 수 없는 프로바이더는 켜도 표시되지 않습니다.",
|
|
19
22
|
"picker.models": "피커 등록 모델 {count}개: {names}",
|
|
20
|
-
"picker.lastAt": "Claude Desktop
|
|
21
|
-
"picker.never": "아직 Claude Desktop이 목록을
|
|
23
|
+
"picker.lastAt": "Claude Desktop이 마지막으로 목록을 받은 시각: {at}",
|
|
24
|
+
"picker.never": "아직 Claude Desktop이 목록을 받지 못했습니다. 앱을 완전히 종료했다가 다시 실행하세요.",
|
|
22
25
|
"statusMod.title": "ClaudeRipple 모드",
|
|
23
|
-
"statusMod.help": "Claude Code 입력창
|
|
24
|
-
"statusMod.saved": "
|
|
25
|
-
"workerTools.help": "ClaudeRipple이
|
|
26
|
-
"providers.probeNoCredits": "API 키는
|
|
26
|
+
"statusMod.help": "Claude Code 입력창 위에 ClaudeRipple 상태 바를 표시합니다. 프롬프트마다 추론 강도를 정하고, ripple:auto로 맡긴 작업에 알맞은 워커와 강도를 배정하며, 캐시도 유지합니다. 컨텍스트 사용량, 캐시 남은 시간, 요금제 한도, 최근 라우팅 경로를 보여 주고, Log 메뉴에서 요청 로그를 볼 수 있습니다. 설정은 상태 바의 ⚙ 아이콘이나 /ripple 명령어로 바꾸며, 새로 시작하는 세션부터 적용됩니다.",
|
|
27
|
+
"statusMod.saved": "저장했습니다. 새로 시작하는 Claude Code 세션부터 적용됩니다.",
|
|
28
|
+
"workerTools.help": "ClaudeRipple이 만든 워커에 파일 읽기·편집, 명령 실행, 검색, 스킬 도구만 줍니다. 세션의 MCP 서버와 플러그인 도구를 워커 요청마다 넣지 않아 토큰 입력이 크게 줄지만, 브라우저나 iOS 시뮬레이터 등은 쓸 수 없습니다. 그런 도구가 필요한 워커는 ~/.claude/agents에 사용자 정의 에이전트 파일로 두세요(ClaudeRipple은 그 파일을 고치지 않습니다). 새 세션부터 적용됩니다.",
|
|
29
|
+
"providers.probeNoCredits": "API 키는 정상이지만 계정 잔액(크레딧)이 모자라 응답을 받지 못했습니다. 프로바이더 웹사이트에서 충전한 뒤 다시 써 보세요.",
|
|
27
30
|
"providers.probeBadKey": "API 키 인증이 거부되었습니다. 키를 다시 확인하세요.",
|
|
28
31
|
"providers.searchModels": "모델 검색 (이름 또는 ID)",
|
|
29
32
|
"providers.customModelPlaceholder": "모델 ID 직접 입력 (예: abliterated-model)",
|
|
30
33
|
"providers.customModelAdd": "추가",
|
|
31
|
-
"providers.customModelHint": "이 프로바이더는 모델 목록 API
|
|
34
|
+
"providers.customModelHint": "이 프로바이더는 모델 목록 API가 없습니다. 서비스 문서에 나온 모델 ID를 아래에 직접 입력해 추가하세요.",
|
|
32
35
|
"providers.google": "Google Gemini",
|
|
33
|
-
"providers.googleHelp": "Google AI Studio API
|
|
34
|
-
"providers.googleKeyHelp": "aistudio.google.com/apikey에서 발급받을 수 있습니다. 무료 등급은
|
|
36
|
+
"providers.googleHelp": "Google AI Studio API 키나 Google 계정(Antigravity)으로 Gemini 모델을 씁니다.",
|
|
37
|
+
"providers.googleKeyHelp": "aistudio.google.com/apikey에서 발급받을 수 있습니다. 무료 등급은 입력한 내용이 제품 개선에 쓰일 수 있으니 민감한 코드에는 유료 키를 권합니다.",
|
|
35
38
|
"providers.googleAntigravity": "Antigravity 로그인",
|
|
36
39
|
"providers.googleAuthApiKey": "AI Studio API 키",
|
|
37
40
|
"providers.googleAuthHelp": "API 키는 Google이 공식 지원하는 연동 방식입니다. Antigravity 로그인은 Google 계정 구독을 활용하지만 Google 이용약관에서 금지하는 방식입니다.",
|
|
38
41
|
"providers.googleLogin": "Google 계정",
|
|
39
42
|
"providers.addGoogleAccount": "+ Google 계정 로그인",
|
|
40
|
-
"providers.googleWarning": "Google Antigravity 이용약관(제6조)
|
|
41
|
-
"providers.googleWarningShort": "Google
|
|
43
|
+
"providers.googleWarning": "Google Antigravity 이용약관(제6조)과 Gemini CLI FAQ는 공식 앱이 아닌 프로그램에서 이 로그인 정보를 쓰는 것을 분명히 금지합니다. Google은 2026년 2월에 이 용도로 쓴 계정을 대규모로 제재했고, 다시 적발되면 영구 정지한다고 밝혔습니다. ClaudeRipple은 Google과 제휴 관계가 없습니다.\n\n주 계정 대신 보조 계정을 쓰시길 권합니다. 이런 위험을 확인하셨고 로그인을 계속할까요?",
|
|
44
|
+
"providers.googleWarningShort": "Google 이용약관이 이 사용을 금지하고 있고 계정 정지 사례도 있습니다. 주 계정 대신 보조 계정을 쓰시길 권합니다.",
|
|
42
45
|
"providers.googleOpenManually": "브라우저가 열리지 않았습니다. 아래 주소를 직접 여세요.",
|
|
43
46
|
"providers.googleAdded": "Google 계정을 추가했습니다.",
|
|
44
|
-
"providers.googleSignInFirst": "로그인된 Google 계정이 없습니다. 먼저 로그인해 주세요.", "providers.grok": "Grok 구독", "providers.grokHelp": "Grok CLI가 포함된 Grok 요금제로 Grok 모델을 씁니다. `grok login`으로 로그인만 하면 되고 API 키는 필요 없습니다.", "providers.grokFormHelp": "ClaudeRipple은 Grok CLI의 로그인 세션(~/.grok/auth.json)을 읽기만 하고, 만료가 가까우면 CLI
|
|
45
|
-
"providers.googleRemoveConfirm": "Google 계정 {name}을(를) ClaudeRipple에서
|
|
47
|
+
"providers.googleSignInFirst": "로그인된 Google 계정이 없습니다. 먼저 로그인해 주세요.", "providers.grok": "Grok 구독", "providers.grokHelp": "Grok CLI가 포함된 Grok 요금제로 Grok 모델을 씁니다. `grok login`으로 로그인만 하면 되고 API 키는 필요 없습니다.", "providers.grokFormHelp": "ClaudeRipple은 Grok CLI의 로그인 세션(~/.grok/auth.json)을 읽기만 하고, 만료가 가까우면 CLI가 알아서 갱신하게 합니다. 터미널에서 `grok login`을 한 번 실행해 두세요.", "providers.grokWarningShort": "Grok CLI 전용 통로를 씁니다. xAI가 API로 공개한 경로가 아니라서 CLI 업데이트나 xAI 쪽 변경으로 예고 없이 막힐 수 있습니다.", "providers.grokSignInFirst": "Grok CLI 로그인 세션이 없습니다. 먼저 터미널에서 `grok login`을 실행하세요.",
|
|
48
|
+
"providers.googleRemoveConfirm": "Google 계정 {name}을(를) ClaudeRipple에서 삭제할까요? 실제 Google 계정은 삭제되지 않습니다.",
|
|
46
49
|
"providers.googleProject": "프로젝트 {id}",
|
|
47
|
-
"providers.googleOwnHelp": "ClaudeRipple이
|
|
50
|
+
"providers.googleOwnHelp": "ClaudeRipple이 이 컴퓨터의 현재 사용자만 읽을 수 있는 파일에 로그인 정보를 저장하고 자동으로 갱신합니다.",
|
|
48
51
|
"providers.googleVerifyNeeded": "Google 인증 필요",
|
|
49
52
|
"providers.googleVerifyAction": "Google 인증 진행",
|
|
50
53
|
"providers.googleRecheck": "다시 확인",
|
|
51
54
|
"providers.googleVerified": "인증이 확인되었습니다. 이 계정으로 다시 요청을 처리합니다.",
|
|
52
|
-
"providers.googleStillUnverified": "Google
|
|
53
|
-
"providers.googleVerifyUnknown": "
|
|
54
|
-
"providers.googleVerifyHelp": "Google
|
|
55
|
+
"providers.googleStillUnverified": "Google이 여전히 본인 인증을 요구하고 있습니다. 인증 페이지의 절차를 끝냈는지 확인하세요.",
|
|
56
|
+
"providers.googleVerifyUnknown": "지금 상태를 확인하지 못했습니다. 다음 요청 때 다시 확인합니다.",
|
|
57
|
+
"providers.googleVerifyHelp": "Google이 이 계정을 쓰기 전에 본인 확인을 요구하고 있습니다. 버튼을 눌러 그 계정으로 로그인된 브라우저에서 절차를 마치면 다음 요청부터 정상 처리됩니다.",
|
|
55
58
|
"providers.googleNoAccounts": "로그인된 Google 계정이 없습니다.",
|
|
56
59
|
"providers.googleAccountsTitle": "Google 계정",
|
|
57
|
-
"providers.googleAccountsSubtitle": "대화는
|
|
60
|
+
"providers.googleAccountsSubtitle": "한 대화는 한 계정으로 이어갑니다. 답변을 시작하기 전에 사용 한도에 걸리면 다음 계정으로 전환합니다.",
|
|
58
61
|
"providers.googleLoginWaiting": "브라우저에서 Google 로그인을 기다리는 중입니다…",
|
|
59
62
|
"providers.modelsSummary": "선택 {selected}개 / 전체 {total}개",
|
|
60
|
-
"providers.modelsHidden": "
|
|
61
|
-
"providers.modelsFoundMany": "
|
|
62
|
-
"providers.modelsFoundLive": "ChatGPT 카탈로그에서 {n}
|
|
63
|
+
"providers.modelsHidden": "검색하면 {hidden}개를 더 볼 수 있습니다",
|
|
64
|
+
"providers.modelsFoundMany": "프로바이더가 준 모델 목록입니다. 검색해서 쓸 모델만 고르세요.",
|
|
65
|
+
"providers.modelsFoundLive": "ChatGPT 카탈로그에서 모델 {n}개를 받았습니다. 새로 추가된 모델은 선택하지 않은 상태로 등록됩니다.",
|
|
63
66
|
"slots.saving": "저장 중…",
|
|
64
|
-
"slots.saved": "저장됨 ·
|
|
67
|
+
"slots.saved": "저장됨 · 바로 적용됩니다",
|
|
65
68
|
"common.close": "닫기",
|
|
66
69
|
"clients.claudeCode.extras": "Claude Code 부가 기능",
|
|
67
70
|
"workerTools.switch": "워커 도구 제한",
|
|
68
71
|
"providers.remove": "프로바이더 삭제",
|
|
69
|
-
"providers.subscriptionGroup": "
|
|
72
|
+
"providers.subscriptionGroup": "계정과 구독",
|
|
70
73
|
"providers.anthropicGroup": "Anthropic 호환",
|
|
71
74
|
"providers.usage": "사용량",
|
|
72
75
|
"mod.effort": "추론 강도",
|
|
73
|
-
"mod.effortBlurb": "
|
|
76
|
+
"mod.effortBlurb": "보내는 프롬프트마다 추론 강도를 자동으로 고릅니다.",
|
|
74
77
|
"mod.auto": "자동",
|
|
75
|
-
"mod.autoHint": "프롬프트마다
|
|
78
|
+
"mod.autoHint": "프롬프트마다 자동으로 고릅니다. 직접 바꾸면 꺼집니다.",
|
|
76
79
|
"mod.lean": "성향",
|
|
77
|
-
"mod.leanHint": "판단이
|
|
80
|
+
"mod.leanHint": "판단이 애매할 때만 적용",
|
|
78
81
|
"mod.cheaper": "저렴하게",
|
|
79
82
|
"mod.smarter": "똑똑하게",
|
|
80
83
|
"mod.floor": "최저 강도",
|
|
81
84
|
"mod.ceiling": "최고 강도",
|
|
82
|
-
"mod.floorWins": "최저
|
|
85
|
+
"mod.floorWins": "최저 강도보다 낮아 최저 강도를 씁니다.",
|
|
83
86
|
"mod.effort.low": "낮음",
|
|
84
87
|
"mod.effort.medium": "중간",
|
|
85
88
|
"mod.effort.high": "높음",
|
|
86
89
|
"mod.effort.xhigh": "매우 높음",
|
|
87
90
|
"mod.effort.max": "최대",
|
|
88
|
-
"mod.off": "
|
|
91
|
+
"mod.off": "끄기",
|
|
89
92
|
"mod.workers": "워커",
|
|
90
93
|
"mod.takesOver": "적용 대상",
|
|
91
94
|
"mod.allSpawns": "모든 서브에이전트",
|
|
92
95
|
"mod.unavailable": " (사용 불가)",
|
|
93
96
|
"mod.judge": "판정 모델",
|
|
94
|
-
"mod.judgeBlurb": "
|
|
97
|
+
"mod.judgeBlurb": "프롬프트에 알맞은 추론 강도와 작업 분야, 등급을 정하는 모델입니다.",
|
|
95
98
|
"mod.haiku": "Haiku",
|
|
96
99
|
"mod.jev": "Jev",
|
|
97
|
-
"mod.routerModel": "
|
|
98
|
-
"mod.haikuHint": "Claude 로그인으로 Haiku 5.5 사용 · 프롬프트당
|
|
100
|
+
"mod.routerModel": "리플 모델",
|
|
101
|
+
"mod.haikuHint": "Claude 로그인으로 Haiku 5.5 사용 · 프롬프트당 1초쯤",
|
|
99
102
|
"mod.jevSource": "Jev 제공처",
|
|
100
103
|
"mod.typesafe": "TypeSafe",
|
|
101
104
|
"mod.zen": "OpenCode Zen",
|
|
102
|
-
"mod.zenKey": "ClaudeRipple
|
|
105
|
+
"mod.zenKey": "ClaudeRipple에 저장된 OpenCode Zen 키 사용",
|
|
103
106
|
"mod.zenMissing": "ClaudeRipple 설정에 OpenCode Zen 인증 키가 없습니다.",
|
|
104
|
-
"mod.noModels": "표시할
|
|
105
|
-
"mod.haikuFallback": "
|
|
107
|
+
"mod.noModels": "표시할 리플 모델이 없습니다.",
|
|
108
|
+
"mod.haikuFallback": "실패하면 Haiku로 대체",
|
|
106
109
|
"mod.model": "모델",
|
|
107
110
|
"mod.cache": "캐시",
|
|
108
111
|
"mod.cacheBlurb": "자리를 비운 동안에도 프롬프트 캐시를 유지합니다.",
|
|
109
112
|
"mod.keepWarm": "캐시 유지",
|
|
110
|
-
"mod.keepWarmHint": "
|
|
113
|
+
"mod.keepWarmHint": "만료되기 직전에 캐시 핑 보내기",
|
|
111
114
|
"mod.for": "유지 시간",
|
|
112
115
|
"mod.afterReply": "마지막 응답 기준",
|
|
113
116
|
"mod.chatsFrom": "대상 대화",
|
|
114
117
|
"mod.tokens": "토큰 이상",
|
|
115
|
-
"mod.warmCost": "핑을 보낼 때마다 캐시에서 대화 전체를 다시 읽습니다. 입력 비용의
|
|
118
|
+
"mod.warmCost": "핑을 보낼 때마다 캐시에서 대화 전체를 다시 읽습니다. 입력 비용의 10분의 1쯤이고, 요금제 한도도 같은 비율로 씁니다.",
|
|
116
119
|
"mod.hours": "{n}시간",
|
|
117
120
|
"mod.handoff": "압축·인수인계",
|
|
118
121
|
"mod.handoffBlurb": "컨텍스트가 큰 대화를 압축하거나 새 대화로 인수인계합니다.",
|
|
@@ -120,17 +123,17 @@ const I18N = {
|
|
|
120
123
|
"mod.sessionCompactor": "세션 기본",
|
|
121
124
|
"mod.afterHandoff": "인수인계 후 동작",
|
|
122
125
|
"mod.handoffButton": "인수인계 버튼 표시",
|
|
123
|
-
"mod.whenAdvised": "
|
|
126
|
+
"mod.whenAdvised": "권할 때",
|
|
124
127
|
"mod.always": "항상",
|
|
125
128
|
"mod.fullHandoff": "전체 인수인계",
|
|
126
|
-
"mod.noSkill": "스킬 없음:
|
|
129
|
+
"mod.noSkill": "스킬 없음: 대화 한 번 분량으로 HANDOFF.md 작성",
|
|
127
130
|
"mod.heavyAt": "대화 압축 기준",
|
|
128
131
|
"mod.context": "컨텍스트",
|
|
129
132
|
"mod.continue": "새 세션에서 바로",
|
|
130
133
|
"mod.confirm": "확인 후 이동",
|
|
131
134
|
"mod.copy": "복사만",
|
|
132
135
|
"mod.look": "화면 표시",
|
|
133
|
-
"mod.lookBlurb": "상태 바에
|
|
136
|
+
"mod.lookBlurb": "상태 바에 무엇을 어떤 모양으로 표시할지 정합니다.",
|
|
134
137
|
"mod.layout": "레이아웃",
|
|
135
138
|
"mod.dashboard": "대시보드",
|
|
136
139
|
"mod.minimal": "최소화",
|
|
@@ -138,6 +141,9 @@ const I18N = {
|
|
|
138
141
|
"mod.appearance": "테마",
|
|
139
142
|
"mod.dark": "다크",
|
|
140
143
|
"mod.lightAppearance": "라이트",
|
|
144
|
+
"mod.skin": "스킨",
|
|
145
|
+
"mod.skinDeep": "딥",
|
|
146
|
+
"mod.skinFlat": "플랫",
|
|
141
147
|
"mod.language": "언어",
|
|
142
148
|
"mod.show": "표시 항목",
|
|
143
149
|
"mod.part.timer": "캐시 타이머",
|
|
@@ -146,45 +152,45 @@ const I18N = {
|
|
|
146
152
|
"mod.part.limits": "한도",
|
|
147
153
|
"nav.mod": "ClaudeRipple 모드",
|
|
148
154
|
"nav.modShort": "모드",
|
|
149
|
-
"mod.subtitle": "Claude Code의 ClaudeRipple 상태 바가 추론 강도를
|
|
155
|
+
"mod.subtitle": "Claude Code의 ClaudeRipple 상태 바가 추론 강도를 정하고, 일을 워커에 맡기고, 캐시를 유지하는 방식을 설정합니다. 바꾸면 바로 저장되고, 상태 바의 ⚙ 패널에도 같은 설정이 나옵니다.",
|
|
150
156
|
"mod.saved": "저장됨",
|
|
151
|
-
"mod.conflict": "다른 곳에서
|
|
152
|
-
"mod.offNotice": "모드가 꺼져 있어 {clients}에서
|
|
157
|
+
"mod.conflict": "설정이 다른 곳에서 바뀌었습니다. 최신 설정을 불러왔으니 다시 바꿔 주세요.",
|
|
158
|
+
"mod.offNotice": "모드가 꺼져 있어 {clients}에서 켤 때까지 이 설정은 적용되지 않습니다.",
|
|
153
159
|
"mod.openSettings": "ClaudeRipple 모드 설정",
|
|
154
|
-
"mod.takesOverHelp": "
|
|
155
|
-
"mod.takesOverHelp2": "'ripple:auto'를
|
|
156
|
-
"mod.notUsable": "
|
|
157
|
-
"mod.jevKeyNote": "TypeSafe 키는
|
|
160
|
+
"mod.takesOverHelp": "작업이 크면 Claude는 독립 보조 AI인 서브에이전트에게 일을 나눠 맡깁니다. 따로 정하지 않으면 Claude Code 기본 범용 서브에이전트(general-purpose)가 맡고, 지금 대화와 같은 모델로 돌아서 사용량을 씁니다.",
|
|
161
|
+
"mod.takesOverHelp2": "'ripple:auto'를 고르면 Claude가 ripple:auto에 맡긴 작업에만 ClaudeRipple이 모델을 정합니다. '모든 서브에이전트'를 고르면 범용 서브에이전트에 맡긴 작업까지 알맞은 모델과 추론 강도로 바꿔 실행합니다. 모델을 직접 지정한 작업은 그대로 둡니다. 잘 모르겠으면 '모든 서브에이전트'를 고르세요.",
|
|
162
|
+
"mod.notUsable": "로그아웃됐거나 한도를 다 씀",
|
|
163
|
+
"mod.jevKeyNote": "TypeSafe 키는 여기에 저장하지 않습니다. Claude Code 상태 바의 ⚙ 패널, TYPESAFE_API_KEY 환경 변수, 또는 ~/.config/jev/.env에서 넣어 주세요.",
|
|
158
164
|
"mod.zenAdd": "프로바이더 메뉴에서 jev 모델을 지원하는 OpenCode Zen을 추가하세요.",
|
|
159
|
-
"mod.workersBlurb": "
|
|
165
|
+
"mod.workersBlurb": "맡긴 작업은 ClaudeRipple을 거치는 워커 모델이 처리합니다. 메인 대화는 일을 넘기기만 하고, 난이도(low · medium · high · max)는 ClaudeRipple이 판단해 그 워커에 지정된 모델과 추론 강도로 실행합니다.",
|
|
160
166
|
"mod.models": "사용할 모델",
|
|
161
|
-
"mod.modelsHelp": "
|
|
167
|
+
"mod.modelsHelp": "고른 모델만 4개 워커에서 씁니다. 모델을 정하지 않은 워커에는 고른 모델 중에서 알아서 배정합니다.",
|
|
162
168
|
"mod.fourWorkers": "4개 워커",
|
|
163
|
-
"mod.retired": "분야별 설정과 자동(실험) 기능은
|
|
169
|
+
"mod.retired": "분야별 설정과 자동(실험) 기능은 끝났고, 4개 워커 체계로 합쳤습니다.",
|
|
164
170
|
"mod.rung.light": "로우 워커",
|
|
165
171
|
"mod.rung.standard": "미디움 워커",
|
|
166
172
|
"mod.rung.hard": "하이 워커",
|
|
167
173
|
"mod.rung.plan": "맥스 워커",
|
|
168
|
-
"mod.rungHint.light": "파일 검색, 단건 조회, 로그
|
|
169
|
-
"mod.rungHint.standard": "
|
|
170
|
-
"mod.rungHint.hard": "
|
|
171
|
-
"mod.rungHint.plan": "
|
|
172
|
-
"mod.ladderHelp": "워커의 모델을
|
|
174
|
+
"mod.rungHint.light": "파일 검색, 단건 조회, 로그 확인, 기계적 수정",
|
|
175
|
+
"mod.rungHint.standard": "명세에 따른 구현, 리팩터링, 요약, 초안 작성",
|
|
176
|
+
"mod.rungHint.hard": "까다로운 디버깅, 여러 파일 수정, 독립 검토와 반박",
|
|
177
|
+
"mod.rungHint.plan": "최고 품질: 기획, 설계, 아키텍처 수립, 깊은 의견 제시",
|
|
178
|
+
"mod.ladderHelp": "워커의 모델을 쓸 수 없으면(로그아웃, 한도 소진, 선택 해제) 바로 위 워커의 모델이, 위 모델도 안 되면 세션 모델이 처리합니다. 아래 워커로는 내려가지 않습니다.",
|
|
173
179
|
"mod.sessionModel": "세션 기본 모델",
|
|
174
180
|
"mod.unavailableNow": " (현재 사용 불가)",
|
|
175
|
-
"mod.rungUnusable": "
|
|
181
|
+
"mod.rungUnusable": "지금은 쓸 수 없어 위 워커가 대신 처리합니다",
|
|
176
182
|
"mod.billing.free": "무료",
|
|
177
183
|
"mod.billing.payg": "종량제",
|
|
178
184
|
"mod.billing.subscription": "구독",
|
|
179
|
-
"mod.optionsFailed": "
|
|
185
|
+
"mod.optionsFailed": "에이전트와 모델 목록을 불러오지 못해 저장된 설정만 보여 줍니다.",
|
|
180
186
|
"mod.modes": "모드",
|
|
181
|
-
"mod.modeActive": "
|
|
187
|
+
"mod.modeActive": "켜진 모드",
|
|
182
188
|
"mod.modeNone": "기본",
|
|
183
189
|
"mod.modeOn": "켜짐",
|
|
184
190
|
"mod.modeAdd": "+ 새 모드",
|
|
185
191
|
"mod.modeAddTitle": "새 모드",
|
|
186
192
|
"mod.modeName": "이름",
|
|
187
|
-
"mod.modeNameHelp": "기본 워커 목록을
|
|
193
|
+
"mod.modeNameHelp": "기본 워커 목록을 복사해서 시작합니다. 이름은 Claude Code 상태 바에도 나옵니다.",
|
|
188
194
|
"mod.modeDelegation": "위임 강도",
|
|
189
195
|
"mod.modeNormal": "보통",
|
|
190
196
|
"mod.modeEager": "적극 — 메인 대화는 지휘만",
|
|
@@ -202,10 +208,10 @@ const I18N = {
|
|
|
202
208
|
"mod.modeMoveUp": "우선순위 올리기",
|
|
203
209
|
"mod.modeMoveDown": "우선순위 내리기",
|
|
204
210
|
"mod.modeAddModel": "+ 모델 추가",
|
|
205
|
-
"mod.modeOrderHelp": "위에서부터
|
|
211
|
+
"mod.modeOrderHelp": "위에서부터 쓸 수 있는 모델을 씁니다. 목록 전체를 다 쓸 수 없으면 한 단계 위 워커, 그다음 세션 모델을 씁니다.",
|
|
206
212
|
"mod.modeNameRequired": "모드 이름을 입력하세요.",
|
|
207
213
|
"mod.modeTimePast": "종료 시각은 현재 시각 이후여야 합니다.",
|
|
208
|
-
"mod.modeRemoveConfirm": "‘{name}’ 모드를
|
|
214
|
+
"mod.modeRemoveConfirm": "‘{name}’ 모드를 삭제할까요?",
|
|
209
215
|
},
|
|
210
216
|
en: {
|
|
211
217
|
"brand": "ClaudeRipple",
|
|
@@ -220,8 +226,11 @@ const I18N = {
|
|
|
220
226
|
"providerStatus.connected": "Connected", "providerStatus.keyNeeded": "Key needed", "providerStatus.loginNeeded": "Sign-in needed", "providerStatus.disconnected": "Not connected", "providerStatus.checking": "Checking",
|
|
221
227
|
"clients.title": "Clients", "clients.subtitle": "Set up the apps that use ClaudeRipple.", "clients.desktop.title": "Claude Desktop", "clients.desktop.help": "Choose whether provider models appear by real name in the model picker.", "clients.codex.title": "Codex (app and CLI)", "clients.codex.help": "Adds ClaudeRipple as a provider to Codex's config (~/.codex/config.toml). Terminal: `codex --profile clauderipple -m <model>`; Codex app: make clauderipple the default provider in that config.", "clients.codex.note": "When on, Codex's GPT requests go through ClaudeRipple too. Codex keeps its own sign-in, and with several ChatGPT accounts added, the next one takes over when one hits its limit — no sign-out. The list below is the Claude and Anthropic-compatible models Codex gains.", "clients.codex.turnOn": "Use ClaudeRipple in Codex","clients.claudeCode.title": "Terminal Claude Code", "clients.claudeCode.help": "Terminal `claude` uses the same router. Choose with `/model <name>`.",
|
|
222
228
|
"logs.title": "Logs", "logs.requests": "Requests", "logs.raw": "Raw logs", "logs.lastHour": "Last hour", "logs.autoscroll": "Auto-scroll", "logs.polling": "Updates every 3s", "logs.rawPolling": "Updates every 3s · last 200 lines", "logs.provider": "Provider", "logs.all": "All","logs.empty": "No requests yet.", "logs.summary.requests": "Requests", "logs.summary.success": "Succeeded / failed", "logs.summary.input": "Input tokens", "logs.summary.output": "Output tokens", "logs.summary.duration": "Average response", "logs.cacheHit": "Cache {percent}%", "logs.th.time": "Time", "logs.th.models": "Model", "logs.th.effort": "effort", "logs.th.input": "Input", "logs.th.output": "Output", "logs.th.duration": "Duration", "logs.th.status": "Status", "logs.status.ok": "ok", "logs.status.error": "error", "logs.status.resent": "resent", "logs.status.resentHelp": "Not a failure: the client sent this request again on its own.", "logs.detail.id": "Request ID", "logs.detail.kind": "Kind", "logs.detail.stop": "Stop reason", "logs.detail.uncached": "Uncached input", "logs.detail.cacheRead": "Cache read", "logs.detail.cacheWrite": "Cache write", "logs.detail.note": "Note", "logs.none": "None", "logs.seconds": "{value}s",
|
|
229
|
+
"logs.usage": "Usage", "logs.period": "Period", "logs.period.hour": "1 hour", "logs.period.today": "Today", "logs.period.7d": "7 days", "logs.period.30d": "30 days", "logs.period.month": "This month", "logs.period.all": "All time", "logs.period.custom": "Custom", "logs.customFrom": "Start date", "logs.customTo": "End date", "logs.since": "Records start {date}", "logs.byModel": "Usage by model", "logs.modelsEmpty": "No usage in this period.", "logs.th.count": "Requests", "logs.th.avg": "Avg. duration", "logs.recent": "Recent requests", "logs.recentNote": "Last 200",
|
|
223
230
|
"about.title": "About", "about.body": "ClaudeRipple is an independent open-source project, not affiliated with Anthropic or OpenAI. Claude and Claude Code are trademarks of Anthropic, PBC.", "about.license": "License: GPL-3.0",
|
|
224
231
|
"providers.identityHelp": "Prepends 'You are <model>, answering through Claude Code' to the system prompt. Off, the model may believe it is Claude.",
|
|
232
|
+
"providers.limits": "Show limits in the status bar",
|
|
233
|
+
"providers.limitsHelp": "Shows this provider's usage limits on the second row of the ClaudeRipple status bar. Providers whose limits cannot be read (OpenCode Go/Zen, Grok, etc.) stay hidden even when this is on.",
|
|
225
234
|
"picker.models": "{count} models in the picker: {names}",
|
|
226
235
|
"picker.lastAt": "Claude Desktop last fetched the list at {at}",
|
|
227
236
|
"picker.never": "Claude Desktop has not fetched the list yet. Quit it completely and open it again.",
|
|
@@ -344,6 +353,9 @@ const I18N = {
|
|
|
344
353
|
"mod.appearance": "Appearance",
|
|
345
354
|
"mod.dark": "Dark",
|
|
346
355
|
"mod.lightAppearance": "Light",
|
|
356
|
+
"mod.skin": "Skin",
|
|
357
|
+
"mod.skinDeep": "Deep",
|
|
358
|
+
"mod.skinFlat": "Flat",
|
|
347
359
|
"mod.language": "Language",
|
|
348
360
|
"mod.show": "Show",
|
|
349
361
|
"mod.part.timer": "Cache timer",
|
|
@@ -708,10 +720,30 @@ const I18N = {
|
|
|
708
720
|
"logs.detail.note": "备注",
|
|
709
721
|
"logs.none": "无",
|
|
710
722
|
"logs.seconds": "{value} 秒",
|
|
723
|
+
"logs.usage": "用量",
|
|
724
|
+
"logs.period": "时间范围",
|
|
725
|
+
"logs.period.hour": "1 小时",
|
|
726
|
+
"logs.period.today": "今天",
|
|
727
|
+
"logs.period.7d": "7 天",
|
|
728
|
+
"logs.period.30d": "30 天",
|
|
729
|
+
"logs.period.month": "本月",
|
|
730
|
+
"logs.period.all": "全部",
|
|
731
|
+
"logs.period.custom": "自定义",
|
|
732
|
+
"logs.customFrom": "开始日期",
|
|
733
|
+
"logs.customTo": "结束日期",
|
|
734
|
+
"logs.since": "记录始于 {date}",
|
|
735
|
+
"logs.byModel": "按模型统计用量",
|
|
736
|
+
"logs.modelsEmpty": "此期间没有用量记录。",
|
|
737
|
+
"logs.th.count": "请求数",
|
|
738
|
+
"logs.th.avg": "平均耗时",
|
|
739
|
+
"logs.recent": "最近的请求",
|
|
740
|
+
"logs.recentNote": "最近 200 条",
|
|
711
741
|
"about.title": "关于",
|
|
712
742
|
"about.body": "ClaudeRipple 是一个独立的开源项目,与 Anthropic 和 OpenAI 均无关联。Claude 和 Claude Code 是 Anthropic, PBC 的商标。",
|
|
713
743
|
"about.license": "许可证:GPL-3.0",
|
|
714
744
|
"providers.identityHelp": "在系统提示词开头加上 'You are <model>, answering through Claude Code'。关闭时,模型可能会以为自己是 Claude。",
|
|
745
|
+
"providers.limits": "在状态栏显示额度",
|
|
746
|
+
"providers.limitsHelp": "在 ClaudeRipple 状态栏第二行显示此服务商的使用额度。无法读取额度的服务商(OpenCode Go/Zen、Grok 等)即使开启也不会显示。",
|
|
715
747
|
"picker.models": "选择器中的 {count} 个模型:{names}",
|
|
716
748
|
"picker.lastAt": "Claude Desktop 最后一次获取列表的时间:{at}",
|
|
717
749
|
"picker.never": "Claude Desktop 尚未获取过列表。请完全退出后重新打开。",
|
|
@@ -834,6 +866,9 @@ const I18N = {
|
|
|
834
866
|
"mod.appearance": "外观",
|
|
835
867
|
"mod.dark": "深色",
|
|
836
868
|
"mod.lightAppearance": "浅色",
|
|
869
|
+
"mod.skin": "皮肤",
|
|
870
|
+
"mod.skinDeep": "深海",
|
|
871
|
+
"mod.skinFlat": "平面",
|
|
837
872
|
"mod.language": "语言",
|
|
838
873
|
"mod.show": "显示",
|
|
839
874
|
"mod.part.timer": "缓存计时",
|
|
@@ -1198,10 +1233,30 @@ const I18N = {
|
|
|
1198
1233
|
"logs.detail.note": "備考",
|
|
1199
1234
|
"logs.none": "なし",
|
|
1200
1235
|
"logs.seconds": "{value}秒",
|
|
1236
|
+
"logs.usage": "使用量",
|
|
1237
|
+
"logs.period": "期間",
|
|
1238
|
+
"logs.period.hour": "1時間",
|
|
1239
|
+
"logs.period.today": "今日",
|
|
1240
|
+
"logs.period.7d": "7日間",
|
|
1241
|
+
"logs.period.30d": "30日間",
|
|
1242
|
+
"logs.period.month": "今月",
|
|
1243
|
+
"logs.period.all": "全期間",
|
|
1244
|
+
"logs.period.custom": "期間を指定",
|
|
1245
|
+
"logs.customFrom": "開始日",
|
|
1246
|
+
"logs.customTo": "終了日",
|
|
1247
|
+
"logs.since": "記録は{date}から",
|
|
1248
|
+
"logs.byModel": "モデル別の使用量",
|
|
1249
|
+
"logs.modelsEmpty": "この期間の使用記録はありません。",
|
|
1250
|
+
"logs.th.count": "リクエスト数",
|
|
1251
|
+
"logs.th.avg": "平均所要時間",
|
|
1252
|
+
"logs.recent": "最近のリクエスト",
|
|
1253
|
+
"logs.recentNote": "直近200件",
|
|
1201
1254
|
"about.title": "このアプリについて",
|
|
1202
1255
|
"about.body": "ClaudeRippleは独立したオープンソースプロジェクトであり、AnthropicおよびOpenAIとは提携関係にありません。ClaudeおよびClaude Codeは、Anthropic, PBCの商標です。",
|
|
1203
1256
|
"about.license": "ライセンス:GPL-3.0",
|
|
1204
1257
|
"providers.identityHelp": "システムプロンプトの先頭に「You are <model>, answering through Claude Code」を追加します。オフの場合、モデルが自分をClaudeだと思い込むことがあります。",
|
|
1258
|
+
"providers.limits": "ステータスバーに上限を表示",
|
|
1259
|
+
"providers.limitsHelp": "ClaudeRipple ステータスバーの2行目にこのプロバイダーの使用上限を表示します。上限を読み取れないプロバイダー(OpenCode Go/Zen、Grok など)はオンにしても表示されません。",
|
|
1205
1260
|
"picker.models": "ピッカーのモデル {count} 個:{names}",
|
|
1206
1261
|
"picker.lastAt": "Claude Desktopが最後に一覧を取得した日時:{at}",
|
|
1207
1262
|
"picker.never": "Claude Desktopはまだ一覧を取得していません。完全に終了してから開き直してください。",
|
|
@@ -1324,6 +1379,9 @@ const I18N = {
|
|
|
1324
1379
|
"mod.appearance": "テーマ",
|
|
1325
1380
|
"mod.dark": "ダーク",
|
|
1326
1381
|
"mod.lightAppearance": "ライト",
|
|
1382
|
+
"mod.skin": "スキン",
|
|
1383
|
+
"mod.skinDeep": "ディープ",
|
|
1384
|
+
"mod.skinFlat": "フラット",
|
|
1327
1385
|
"mod.language": "言語",
|
|
1328
1386
|
"mod.show": "表示項目",
|
|
1329
1387
|
"mod.part.timer": "キャッシュタイマー",
|
|
@@ -1688,10 +1746,30 @@ const I18N = {
|
|
|
1688
1746
|
"logs.detail.note": "Nota",
|
|
1689
1747
|
"logs.none": "Ninguno",
|
|
1690
1748
|
"logs.seconds": "{value} s",
|
|
1749
|
+
"logs.usage": "Uso",
|
|
1750
|
+
"logs.period": "Período",
|
|
1751
|
+
"logs.period.hour": "1 hora",
|
|
1752
|
+
"logs.period.today": "Hoy",
|
|
1753
|
+
"logs.period.7d": "7 días",
|
|
1754
|
+
"logs.period.30d": "30 días",
|
|
1755
|
+
"logs.period.month": "Este mes",
|
|
1756
|
+
"logs.period.all": "Todo",
|
|
1757
|
+
"logs.period.custom": "Personalizado",
|
|
1758
|
+
"logs.customFrom": "Fecha de inicio",
|
|
1759
|
+
"logs.customTo": "Fecha de fin",
|
|
1760
|
+
"logs.since": "Registros desde el {date}",
|
|
1761
|
+
"logs.byModel": "Uso por modelo",
|
|
1762
|
+
"logs.modelsEmpty": "No hay uso en este período.",
|
|
1763
|
+
"logs.th.count": "Solicitudes",
|
|
1764
|
+
"logs.th.avg": "Duración media",
|
|
1765
|
+
"logs.recent": "Solicitudes recientes",
|
|
1766
|
+
"logs.recentNote": "Últimas 200",
|
|
1691
1767
|
"about.title": "Acerca de",
|
|
1692
1768
|
"about.body": "ClaudeRipple es un proyecto independiente de código abierto, sin afiliación con Anthropic ni con OpenAI. Claude y Claude Code son marcas comerciales de Anthropic, PBC.",
|
|
1693
1769
|
"about.license": "Licencia: GPL-3.0",
|
|
1694
1770
|
"providers.identityHelp": "Antepone 'You are <model>, answering through Claude Code' al prompt del sistema. Si está desactivado, el modelo puede creer que es Claude.",
|
|
1771
|
+
"providers.limits": "Mostrar límites en la barra de estado",
|
|
1772
|
+
"providers.limitsHelp": "Muestra los límites de uso de este proveedor en la segunda fila de la barra de estado de ClaudeRipple. Los proveedores cuyos límites no se pueden leer (OpenCode Go/Zen, Grok, etc.) no se muestran aunque esté activado.",
|
|
1695
1773
|
"picker.models": "{count} modelos en el selector: {names}",
|
|
1696
1774
|
"picker.lastAt": "Claude Desktop obtuvo la lista por última vez el {at}",
|
|
1697
1775
|
"picker.never": "Claude Desktop aún no ha obtenido la lista. Ciérralo por completo y vuelve a abrirlo.",
|
|
@@ -1814,6 +1892,9 @@ const I18N = {
|
|
|
1814
1892
|
"mod.appearance": "Apariencia",
|
|
1815
1893
|
"mod.dark": "Oscuro",
|
|
1816
1894
|
"mod.lightAppearance": "Claro",
|
|
1895
|
+
"mod.skin": "Estilo",
|
|
1896
|
+
"mod.skinDeep": "Profundo",
|
|
1897
|
+
"mod.skinFlat": "Plano",
|
|
1817
1898
|
"mod.language": "Idioma",
|
|
1818
1899
|
"mod.show": "Mostrar",
|
|
1819
1900
|
"mod.part.timer": "Temporizador de caché",
|
|
@@ -2178,10 +2259,30 @@ const I18N = {
|
|
|
2178
2259
|
"logs.detail.note": "Observação",
|
|
2179
2260
|
"logs.none": "Nenhum",
|
|
2180
2261
|
"logs.seconds": "{value}s",
|
|
2262
|
+
"logs.usage": "Uso",
|
|
2263
|
+
"logs.period": "Período",
|
|
2264
|
+
"logs.period.hour": "1 hora",
|
|
2265
|
+
"logs.period.today": "Hoje",
|
|
2266
|
+
"logs.period.7d": "7 dias",
|
|
2267
|
+
"logs.period.30d": "30 dias",
|
|
2268
|
+
"logs.period.month": "Este mês",
|
|
2269
|
+
"logs.period.all": "Tudo",
|
|
2270
|
+
"logs.period.custom": "Personalizado",
|
|
2271
|
+
"logs.customFrom": "Data inicial",
|
|
2272
|
+
"logs.customTo": "Data final",
|
|
2273
|
+
"logs.since": "Registros desde {date}",
|
|
2274
|
+
"logs.byModel": "Uso por modelo",
|
|
2275
|
+
"logs.modelsEmpty": "Nenhum uso neste período.",
|
|
2276
|
+
"logs.th.count": "Requisições",
|
|
2277
|
+
"logs.th.avg": "Duração média",
|
|
2278
|
+
"logs.recent": "Requisições recentes",
|
|
2279
|
+
"logs.recentNote": "Últimas 200",
|
|
2181
2280
|
"about.title": "Sobre",
|
|
2182
2281
|
"about.body": "O ClaudeRipple é um projeto open source independente, sem afiliação com a Anthropic ou a OpenAI. Claude e Claude Code são marcas comerciais da Anthropic, PBC.",
|
|
2183
2282
|
"about.license": "Licença: GPL-3.0",
|
|
2184
2283
|
"providers.identityHelp": "Insere 'You are <model>, answering through Claude Code' no início do prompt de sistema. Desativado, o modelo pode achar que é o Claude.",
|
|
2284
|
+
"providers.limits": "Mostrar limites na barra de status",
|
|
2285
|
+
"providers.limitsHelp": "Mostra os limites de uso deste provedor na segunda linha da barra de status do ClaudeRipple. Provedores cujos limites não podem ser lidos (OpenCode Go/Zen, Grok, etc.) não aparecem mesmo com isto ativado.",
|
|
2185
2286
|
"picker.models": "{count} modelos no seletor: {names}",
|
|
2186
2287
|
"picker.lastAt": "O Claude Desktop buscou a lista pela última vez em {at}",
|
|
2187
2288
|
"picker.never": "O Claude Desktop ainda não buscou a lista. Encerre-o por completo e abra-o de novo.",
|
|
@@ -2304,6 +2405,9 @@ const I18N = {
|
|
|
2304
2405
|
"mod.appearance": "Aparência",
|
|
2305
2406
|
"mod.dark": "Escuro",
|
|
2306
2407
|
"mod.lightAppearance": "Claro",
|
|
2408
|
+
"mod.skin": "Estilo",
|
|
2409
|
+
"mod.skinDeep": "Profundo",
|
|
2410
|
+
"mod.skinFlat": "Plano",
|
|
2307
2411
|
"mod.language": "Idioma",
|
|
2308
2412
|
"mod.show": "Mostrar",
|
|
2309
2413
|
"mod.part.timer": "Timer do cache",
|
|
@@ -2375,6 +2479,503 @@ const I18N = {
|
|
|
2375
2479
|
},
|
|
2376
2480
|
};
|
|
2377
2481
|
|
|
2482
|
+
// Phone control vocabulary stays together across the dashboard's six languages.
|
|
2483
|
+
Object.assign(I18N.ko, {
|
|
2484
|
+
"nav.phone": "휴대폰", "phone.subtitle": "Ripple Remote 앱을 연결하고, 휴대폰 연결과 알림을 관리합니다.",
|
|
2485
|
+
"phone.refresh": "새로고침", "phone.status": "연결 상태", "phone.host": "원격 호스트", "phone.running": "실행 중", "phone.stopped": "중지됨",
|
|
2486
|
+
"phone.mode": "연결 방식", "phone.relayStatus": "Relay — 어디서나 + 알림", "phone.directStatus": "같은 네트워크", "phone.localStatus": "꺼짐",
|
|
2487
|
+
"phone.notifications": "알림", "phone.ready": "준비됨", "phone.needsRelay": "Relay 필요", "phone.install": "저장소 폴더에서 터미널을 열고 호스트를 설치·시작하세요.",
|
|
2488
|
+
"phone.pairing": "휴대폰 연결 (QR)", "phone.scan": "휴대폰 카메라로 스캔", "phone.showQr": "QR 코드 보기", "phone.copyLink": "링크 복사", "phone.copied": "링크를 복사했습니다.", "phone.copyFailed": "링크를 복사하지 못했습니다. 브라우저의 클립보드 권한을 확인하세요.", "phone.qrAlt": "Ripple Remote 연결 QR 코드",
|
|
2489
|
+
"phone.qrWarning": "코드와 링크에 페어링 키가 들어 있습니다. 본인 휴대폰에만 보여 주세요.", "phone.unreachable": "지금은 이 컴퓨터에서만 연결됩니다. 휴대폰으로 연결하려면 아래에서 Relay나 네트워크 연결을 설정하세요.",
|
|
2490
|
+
"phone.settings": "휴대폰 접속", "phone.choice.relay": "켜기 — Relay (권장)", "phone.help.relay": "어디서나 연결되고 알림도 받습니다. 대화는 종단간 암호화됩니다.", "phone.choice.local": "끄기", "phone.help.local": "휴대폰에서 이 컴퓨터에 연결할 수 없습니다.",
|
|
2491
|
+
"phone.apply": "변경 사항 적용",
|
|
2492
|
+
"phone.restartRequired": "호스트를 다시 시작해야 적용됩니다", "phone.restart": "재시작", "phone.restartConfirm": "호스트를 다시 시작할까요? 휴대폰 연결과 진행 중인 원격 작업이 끊길 수 있습니다.", "phone.restarting": "호스트를 다시 시작했습니다. 잠시 후 상태를 확인합니다.", "phone.manualRestart": "이 운영체제에서는 터미널에서 실행하세요: {command}",
|
|
2493
|
+
"phone.phones": "연결된 휴대폰", "phone.connected": "연결됨", "phone.offline": "오프라인", "phone.lastSeen": "마지막 접속: {time}", "phone.unknownSeen": "마지막 접속 기록 없음", "phone.pushOn": "알림 켜짐", "phone.pushOff": "알림 꺼짐", "phone.empty": "아직 연결된 휴대폰이 없습니다. QR 코드로 연결하세요.",
|
|
2494
|
+
"phone.rotate": "모든 휴대폰 연결 끊기 (새 키)", "phone.rotateConfirm": "모든 휴대폰의 연결과 알림을 끊고 새 키를 발급할까요? 기존 QR과 링크는 쓸 수 없게 되고, 휴대폰을 다시 연결해야 합니다.", "phone.rotated": "모든 휴대폰 연결을 끊고 키를 바꿨습니다.", "phone.sharedKey": "모든 휴대폰이 페어링 키 하나를 함께 씁니다. 하나만 연결 해제하는 것은 지원하지 않습니다.",
|
|
2495
|
+
});
|
|
2496
|
+
Object.assign(I18N.en, {
|
|
2497
|
+
"nav.phone": "Phone", "phone.subtitle": "Pair Ripple Remote and manage phone connections and notifications.",
|
|
2498
|
+
"phone.refresh": "Refresh", "phone.status": "Connection status", "phone.host": "Remote host", "phone.running": "Running", "phone.stopped": "Stopped",
|
|
2499
|
+
"phone.mode": "Connection mode", "phone.relayStatus": "Relay — anywhere + notifications", "phone.directStatus": "Same network", "phone.localStatus": "Off",
|
|
2500
|
+
"phone.notifications": "Notifications", "phone.ready": "Ready", "phone.needsRelay": "Relay required", "phone.install": "Install and start the host from a terminal in the repository folder.",
|
|
2501
|
+
"phone.pairing": "Pair a phone (QR)", "phone.scan": "Scan with your phone camera", "phone.showQr": "Show QR code", "phone.copyLink": "Copy link", "phone.copied": "Link copied.", "phone.copyFailed": "Could not copy the link. Check the browser's clipboard permission.", "phone.qrAlt": "Ripple Remote pairing QR code",
|
|
2502
|
+
"phone.qrWarning": "The code and link carry the pairing key. Show them only to your own phone.", "phone.unreachable": "Only this computer can connect right now. Choose Relay or a network connection below to reach it from your phone.",
|
|
2503
|
+
"phone.settings": "Phone access", "phone.choice.relay": "On — Relay (recommended)", "phone.help.relay": "Connect from anywhere, with notifications. Conversations are end-to-end encrypted.", "phone.choice.local": "Off", "phone.help.local": "Phones cannot connect to this computer.",
|
|
2504
|
+
"phone.apply": "Apply changes",
|
|
2505
|
+
"phone.restartRequired": "Restart the host to apply changes", "phone.restart": "Restart", "phone.restartConfirm": "Restart the host? Phone connections and active remote work may be interrupted.", "phone.restarting": "Host restarted. Checking its status shortly.", "phone.manualRestart": "On this operating system, run in a terminal: {command}",
|
|
2506
|
+
"phone.phones": "Connected phones", "phone.connected": "Connected", "phone.offline": "Offline", "phone.lastSeen": "Last seen: {time}", "phone.unknownSeen": "Last seen unknown", "phone.pushOn": "Notifications on", "phone.pushOff": "Notifications off", "phone.empty": "No phones yet. Pair one with the QR code.",
|
|
2507
|
+
"phone.rotate": "Disconnect all phones (new key)", "phone.rotateConfirm": "Disconnect every phone, remove notifications and issue a new key? Existing QR codes and links will stop working. Each phone must pair again.", "phone.rotated": "All phones disconnected and pairing key replaced.", "phone.sharedKey": "All phones share one pairing key. Individual unpairing is not supported.",
|
|
2508
|
+
});
|
|
2509
|
+
Object.assign(I18N.zh, {
|
|
2510
|
+
"nav.phone": "手机", "phone.subtitle": "配对 Ripple Remote,管理手机连接和通知。",
|
|
2511
|
+
"phone.refresh": "刷新", "phone.status": "连接状态", "phone.host": "远程主机", "phone.running": "运行中", "phone.stopped": "已停止",
|
|
2512
|
+
"phone.mode": "连接方式", "phone.relayStatus": "Relay — 随处连接 + 通知", "phone.directStatus": "同一网络", "phone.localStatus": "仅此电脑",
|
|
2513
|
+
"phone.notifications": "通知", "phone.ready": "已就绪", "phone.needsRelay": "需要 Relay", "phone.install": "在仓库文件夹中打开终端,安装并启动主机。",
|
|
2514
|
+
"phone.pairing": "配对手机 (QR)", "phone.scan": "用手机相机扫描", "phone.showQr": "显示 QR 码", "phone.copyLink": "复制链接", "phone.copied": "已复制链接。", "phone.copyFailed": "无法复制链接,请检查浏览器剪贴板权限。", "phone.qrAlt": "Ripple Remote 配对 QR 码",
|
|
2515
|
+
"phone.qrWarning": "QR 码和链接包含配对密钥,仅向您自己的手机展示。", "phone.unreachable": "当前仅此电脑可连接。请在下方选择 Relay 或网络连接以连接手机。",
|
|
2516
|
+
"phone.settings": "手机访问", "phone.choice.relay": "开启 — Relay(推荐)", "phone.help.relay": "随处连接并接收通知。对话端到端加密。", "phone.choice.local": "关闭", "phone.help.local": "手机无法连接到此电脑。",
|
|
2517
|
+
"phone.apply": "应用更改",
|
|
2518
|
+
"phone.restartRequired": "重启主机后更改生效", "phone.restart": "重启", "phone.restartConfirm": "重启主机?手机连接和正在进行的远程任务可能会中断。", "phone.restarting": "主机已重启,稍后检查状态。", "phone.manualRestart": "请在此操作系统的终端中运行:{command}",
|
|
2519
|
+
"phone.phones": "已连接的手机", "phone.connected": "已连接", "phone.offline": "离线", "phone.lastSeen": "最后连接:{time}", "phone.unknownSeen": "无最后连接记录", "phone.pushOn": "通知已开启", "phone.pushOff": "通知已关闭", "phone.empty": "尚无手机,请使用 QR 码配对。",
|
|
2520
|
+
"phone.rotate": "断开所有手机(新密钥)", "phone.rotateConfirm": "断开所有手机、移除通知订阅并生成新密钥?现有 QR 码和链接将失效,所有手机都需要重新配对。", "phone.rotated": "已断开所有手机并更换配对密钥。", "phone.sharedKey": "所有手机共用一个配对密钥,不支持单独解除配对。",
|
|
2521
|
+
});
|
|
2522
|
+
Object.assign(I18N.ja, {
|
|
2523
|
+
"nav.phone": "スマートフォン", "phone.subtitle": "Ripple Remote をペアリングし、接続と通知を管理します。",
|
|
2524
|
+
"phone.refresh": "更新", "phone.status": "接続状況", "phone.host": "リモートホスト", "phone.running": "実行中", "phone.stopped": "停止中",
|
|
2525
|
+
"phone.mode": "接続方式", "phone.relayStatus": "Relay — どこからでも + 通知", "phone.directStatus": "同じネットワーク", "phone.localStatus": "このコンピュータのみ",
|
|
2526
|
+
"phone.notifications": "通知", "phone.ready": "準備完了", "phone.needsRelay": "Relay が必要", "phone.install": "リポジトリのフォルダ内でターミナルを開き、ホストをインストールして起動してください。",
|
|
2527
|
+
"phone.pairing": "スマートフォンの接続 (QR)", "phone.scan": "スマートフォンのカメラでスキャン", "phone.showQr": "QR コードを表示", "phone.copyLink": "リンクをコピー", "phone.copied": "リンクをコピーしました。", "phone.copyFailed": "コピーできませんでした。ブラウザのクリップボード権限を確認してください。", "phone.qrAlt": "Ripple Remote ペアリング QR コード",
|
|
2528
|
+
"phone.qrWarning": "コードとリンクにはペアリングキーが含まれています。ご自身のスマートフォンにのみ見せてください。", "phone.unreachable": "現在はこのコンピュータのみ接続できます。スマートフォンから接続するには、下で Relay またはネットワーク接続を選んでください。",
|
|
2529
|
+
"phone.settings": "スマートフォンからのアクセス", "phone.choice.relay": "オン — Relay(推奨)", "phone.help.relay": "どこからでも接続でき、通知も届きます。会話はエンドツーエンドで暗号化されます。", "phone.choice.local": "オフ", "phone.help.local": "スマートフォンからこのコンピュータに接続できません。",
|
|
2530
|
+
"phone.apply": "変更を適用",
|
|
2531
|
+
"phone.restartRequired": "適用するにはホストの再起動が必要です", "phone.restart": "再起動", "phone.restartConfirm": "ホストを再起動しますか?スマートフォンの接続と実行中のリモート作業が中断する場合があります。", "phone.restarting": "ホストを再起動しました。まもなく状態を確認します。", "phone.manualRestart": "この OS ではターミナルで実行してください:{command}",
|
|
2532
|
+
"phone.phones": "接続済みスマートフォン", "phone.connected": "接続中", "phone.offline": "オフライン", "phone.lastSeen": "最終接続:{time}", "phone.unknownSeen": "最終接続の記録なし", "phone.pushOn": "通知オン", "phone.pushOff": "通知オフ", "phone.empty": "スマートフォンはまだありません。QR コードで接続してください。",
|
|
2533
|
+
"phone.rotate": "すべての接続を解除(新しいキー)", "phone.rotateConfirm": "すべての接続と通知を解除し、新しいキーを発行しますか?既存の QR コードとリンクは無効になり、再ペアリングが必要です。", "phone.rotated": "すべての接続を解除し、キーを更新しました。", "phone.sharedKey": "すべての端末で一つのキーを共有します。個別のペアリング解除はできません。",
|
|
2534
|
+
});
|
|
2535
|
+
Object.assign(I18N.es, {
|
|
2536
|
+
"nav.phone": "Teléfono", "phone.subtitle": "Vincula Ripple Remote y gestiona las conexiones y notificaciones del teléfono.",
|
|
2537
|
+
"phone.refresh": "Actualizar", "phone.status": "Estado de conexión", "phone.host": "Host remoto", "phone.running": "En ejecución", "phone.stopped": "Detenido",
|
|
2538
|
+
"phone.mode": "Modo de conexión", "phone.relayStatus": "Relay — desde cualquier lugar + avisos", "phone.directStatus": "Misma red", "phone.localStatus": "Solo este equipo",
|
|
2539
|
+
"phone.notifications": "Notificaciones", "phone.ready": "Listas", "phone.needsRelay": "Requiere Relay", "phone.install": "Instala e inicia el host desde una terminal en la carpeta del repositorio.",
|
|
2540
|
+
"phone.pairing": "Vincular teléfono (QR)", "phone.scan": "Escanea con la cámara del teléfono", "phone.showQr": "Mostrar código QR", "phone.copyLink": "Copiar enlace", "phone.copied": "Enlace copiado.", "phone.copyFailed": "No se pudo copiar. Revisa el permiso del portapapeles del navegador.", "phone.qrAlt": "Código QR de vinculación de Ripple Remote",
|
|
2541
|
+
"phone.qrWarning": "El código y el enlace contienen la clave de vinculación. Muéstralos solo a tu propio teléfono.", "phone.unreachable": "Ahora solo puede conectarse este equipo. Elige Relay o una conexión de red para conectar tu teléfono.",
|
|
2542
|
+
"phone.settings": "Acceso desde el teléfono", "phone.choice.relay": "Activado — Relay (recomendado)", "phone.help.relay": "Conéctate desde cualquier lugar, con avisos. Las conversaciones se cifran de extremo a extremo.", "phone.choice.local": "Desactivado", "phone.help.local": "Los teléfonos no pueden conectarse a este equipo.",
|
|
2543
|
+
"phone.apply": "Aplicar cambios",
|
|
2544
|
+
"phone.restartRequired": "Reinicia el host para aplicar los cambios", "phone.restart": "Reiniciar", "phone.restartConfirm": "¿Reiniciar el host? Las conexiones y tareas remotas activas podrían interrumpirse.", "phone.restarting": "Host reiniciado. Comprobaremos su estado en breve.", "phone.manualRestart": "En este sistema operativo, ejecuta en una terminal: {command}",
|
|
2545
|
+
"phone.phones": "Teléfonos conectados", "phone.connected": "Conectado", "phone.offline": "Sin conexión", "phone.lastSeen": "Última conexión: {time}", "phone.unknownSeen": "Última conexión desconocida", "phone.pushOn": "Notificaciones activadas", "phone.pushOff": "Notificaciones desactivadas", "phone.empty": "Aún no hay teléfonos. Vincula uno con el QR.",
|
|
2546
|
+
"phone.rotate": "Desconectar todos (nueva clave)", "phone.rotateConfirm": "¿Desconectar todos los teléfonos, eliminar sus avisos y emitir una nueva clave? Los QR y enlaces actuales dejarán de funcionar. Habrá que vincular cada teléfono de nuevo.", "phone.rotated": "Todos los teléfonos desconectados y clave reemplazada.", "phone.sharedKey": "Todos comparten una clave. No se admite desvincular teléfonos individualmente.",
|
|
2547
|
+
});
|
|
2548
|
+
Object.assign(I18N.pt, {
|
|
2549
|
+
"nav.phone": "Celular", "phone.subtitle": "Pareie o Ripple Remote e gerencie conexões e notificações do celular.",
|
|
2550
|
+
"phone.refresh": "Atualizar", "phone.status": "Status da conexão", "phone.host": "Host remoto", "phone.running": "Em execução", "phone.stopped": "Parado",
|
|
2551
|
+
"phone.mode": "Modo de conexão", "phone.relayStatus": "Relay — de qualquer lugar + avisos", "phone.directStatus": "Mesma rede", "phone.localStatus": "Somente este computador",
|
|
2552
|
+
"phone.notifications": "Notificações", "phone.ready": "Prontas", "phone.needsRelay": "Requer Relay", "phone.install": "Instale e inicie o host em um terminal na pasta do repositório.",
|
|
2553
|
+
"phone.pairing": "Parear celular (QR)", "phone.scan": "Escaneie com a câmera do celular", "phone.showQr": "Mostrar QR code", "phone.copyLink": "Copiar link", "phone.copied": "Link copiado.", "phone.copyFailed": "Não foi possível copiar. Verifique a permissão da área de transferência do navegador.", "phone.qrAlt": "QR code de pareamento do Ripple Remote",
|
|
2554
|
+
"phone.qrWarning": "O código e o link contêm a chave de pareamento. Mostre-os apenas ao seu próprio celular.", "phone.unreachable": "Por enquanto, só este computador pode se conectar. Escolha Relay ou uma conexão de rede abaixo para usar o celular.",
|
|
2555
|
+
"phone.settings": "Acesso pelo celular", "phone.choice.relay": "Ativado — Relay (recomendado)", "phone.help.relay": "Conecte de qualquer lugar, com notificações. As conversas têm criptografia de ponta a ponta.", "phone.choice.local": "Desativado", "phone.help.local": "Celulares não podem se conectar a este computador.",
|
|
2556
|
+
"phone.apply": "Aplicar alterações",
|
|
2557
|
+
"phone.restartRequired": "Reinicie o host para aplicar as alterações", "phone.restart": "Reiniciar", "phone.restartConfirm": "Reiniciar o host? As conexões e tarefas remotas em andamento podem ser interrompidas.", "phone.restarting": "Host reiniciado. Verificaremos o status em breve.", "phone.manualRestart": "Neste sistema operacional, execute em um terminal: {command}",
|
|
2558
|
+
"phone.phones": "Celulares conectados", "phone.connected": "Conectado", "phone.offline": "Offline", "phone.lastSeen": "Última conexão: {time}", "phone.unknownSeen": "Última conexão desconhecida", "phone.pushOn": "Notificações ativadas", "phone.pushOff": "Notificações desativadas", "phone.empty": "Nenhum celular ainda. Pareie um com o QR code.",
|
|
2559
|
+
"phone.rotate": "Desconectar todos (nova chave)", "phone.rotateConfirm": "Desconectar todos os celulares, remover as notificações e gerar uma nova chave? Os QR codes e links atuais deixarão de funcionar. Será necessário parear cada celular novamente.", "phone.rotated": "Todos os celulares desconectados e chave substituída.", "phone.sharedKey": "Todos compartilham uma chave. Não há suporte para desemparelhar celulares individualmente.",
|
|
2560
|
+
});
|
|
2561
|
+
|
|
2562
|
+
// The connection card and the "Ripple is down" pages, drawn only inside the ClaudeRipple app.
|
|
2563
|
+
// Written for someone who does not know what a proxy is: "Ripple" and "Claude's default
|
|
2564
|
+
// connection", with the technical names kept to the Details fold (conn.d.*).
|
|
2565
|
+
Object.assign(I18N.ko, {
|
|
2566
|
+
"conn.okTitle": "리플이 잘 돌아가고 있습니다", "conn.okBody": "Claude가 리플을 거쳐 연결되어 있습니다.", "conn.checking": "연결 상태를 확인하는 중…",
|
|
2567
|
+
"conn.downTitle": "리플이 응답하지 않습니다", "conn.downLead": "지금은 Claude가 AI에 연결되지 않습니다. 리플을 복구하거나, 리플 없이 Claude 기본 연결로 바로 쓸 수 있습니다.",
|
|
2568
|
+
"conn.directTitle": "Claude 기본 연결로 쓰는 중", "conn.directBody": "리플이 꺼져 있어 Claude가 곧바로 연결됩니다. 리플로 되돌리면 GPT 같은 다른 모델도 다시 쓸 수 있습니다.",
|
|
2569
|
+
"conn.mixedTitle": "Claude 일부만 리플을 거치고 있습니다", "conn.mixedBody": "Claude 앱: {desktop} · 터미널의 Claude Code: {cli}",
|
|
2570
|
+
"conn.routeRipple": "리플", "conn.routeDirect": "Claude 기본 연결", "conn.routeOther": "다른 연결",
|
|
2571
|
+
"conn.warnTitle": "리플은 켜져 있지만 확인할 것이 있습니다",
|
|
2572
|
+
"conn.why.stopped": "리플 백그라운드 프로그램이 멈춰 있습니다.", "conn.why.supervisorMissing": "리플을 자동으로 켜 주던 등록 정보가 사라졌습니다.", "conn.why.programMissing": "리플 프로그램 파일을 찾을 수 없습니다. 업데이트하면서 위치가 바뀌었을 수 있습니다.", "conn.why.otherInstall": "리플 자동 실행이 다른 설치본을 가리키고 있습니다.", "conn.why.version": "실행 중인 리플이 이 앱과 버전이 다릅니다.", "conn.why.oldSetting": "Claude 설정에 예전 리플 주소가 남아 있습니다.", "conn.why.cliOther": "터미널의 Claude Code가 다른 연결을 쓰도록 설정되어 있습니다.", "conn.why.desktopOther": "Claude 앱이 다른 연결을 쓰도록 설정되어 있습니다.", "conn.why.notInstalled": "리플 설정이 아직 끝나지 않았습니다.", "conn.why.checkFailed": "상태 점검을 실행하지 못했습니다.",
|
|
2573
|
+
"conn.repair": "복구", "conn.repairHint": "리플을 다시 등록하고 켭니다. 20초쯤 걸립니다.",
|
|
2574
|
+
"conn.directOn": "Claude 기본 연결로 전환", "conn.directOnHint": "리플 없이 지금 바로 Claude를 씁니다. 되돌릴 때까지 GPT 등 다른 모델은 쓸 수 없습니다.",
|
|
2575
|
+
"conn.directOff": "리플로 되돌리기", "conn.directOffHint": "다시 리플을 거쳐 다른 모델도 씁니다. 리플이 멈춰 있으면 먼저 복구합니다.",
|
|
2576
|
+
"conn.restart": "Claude 다시 열기",
|
|
2577
|
+
"conn.busy.repair": "복구하는 중… 최대 40초 걸릴 수 있습니다", "conn.busy.directOn": "Claude 기본 연결로 바꾸는 중…", "conn.busy.directOff": "리플로 되돌리는 중…", "conn.busy.restart": "Claude를 다시 여는 중…", "conn.busy.checking": "확인하는 중…",
|
|
2578
|
+
"conn.res.repairOk": "복구했습니다. 리플이 다시 응답합니다.", "conn.res.repairFail": "복구하지 못했습니다. 'Claude 기본 연결로 전환'을 누르면 지금 바로 Claude를 쓸 수 있습니다.", "conn.res.directOnOk": "Claude 기본 연결로 바꿨습니다.", "conn.res.directOffOk": "리플로 되돌렸습니다.", "conn.res.restartOk": "Claude를 다시 열었습니다.", "conn.res.restartFail": "Claude를 다시 열지 못했습니다. Claude 앱을 직접 종료한 뒤 다시 열어 주세요.", "conn.res.fail": "끝내지 못했습니다.", "conn.res.timeout": "40초 안에 끝나지 않았습니다.",
|
|
2579
|
+
"conn.restartTitle": "Claude 앱을 다시 열어 주세요", "conn.restartBody": "바뀐 연결은 Claude 앱을 다시 열어야 적용됩니다. 터미널의 Claude Code는 새로 시작하면 적용됩니다.",
|
|
2580
|
+
"conn.details": "자세히", "conn.recentLog": "최근 로그", "conn.noLog": "아직 로그가 없습니다", "conn.openLogs": "로그 폴더 열기", "conn.refresh": "다시 확인",
|
|
2581
|
+
"conn.loginOffer": "로그인할 때 ClaudeRipple을 자동으로 실행해서, 문제가 생겨도 바로 복구할 수 있게 합니다.", "conn.loginOn": "켜기",
|
|
2582
|
+
"conn.offlineTitle": "리플이 응답하지 않아 이 화면을 쓸 수 없습니다", "conn.offlineBody": "상태 화면에서 복구하면 다시 쓸 수 있습니다. 급하면 Claude 기본 연결로 바로 전환할 수도 있습니다.", "conn.offlineDirectTitle": "리플이 꺼져 있습니다", "conn.offlineDirectBody": "지금은 Claude 기본 연결로 쓰는 중입니다. 리플로 되돌리면 이 화면을 다시 쓸 수 있습니다.", "conn.goStatus": "상태로 가기",
|
|
2583
|
+
"conn.d.router": "라우터", "conn.d.supervisor": "자동 실행", "conn.d.desktop": "Claude 앱", "conn.d.cli": "Claude Code",
|
|
2584
|
+
});
|
|
2585
|
+
Object.assign(I18N.en, {
|
|
2586
|
+
"conn.okTitle": "Ripple is working", "conn.okBody": "Claude is connected through Ripple.", "conn.checking": "Checking the connection…",
|
|
2587
|
+
"conn.downTitle": "Ripple is not responding", "conn.downLead": "Claude cannot reach AI right now. Repair Ripple, or use Claude's default connection without it.",
|
|
2588
|
+
"conn.directTitle": "Using Claude's default connection", "conn.directBody": "Ripple is off and Claude connects directly. Other models such as GPT come back when you switch back to Ripple.",
|
|
2589
|
+
"conn.mixedTitle": "Only part of Claude goes through Ripple", "conn.mixedBody": "Claude app: {desktop} · Claude Code in the terminal: {cli}",
|
|
2590
|
+
"conn.routeRipple": "Ripple", "conn.routeDirect": "Claude's default connection", "conn.routeOther": "another connection",
|
|
2591
|
+
"conn.warnTitle": "Ripple is on, but something needs a look",
|
|
2592
|
+
"conn.why.stopped": "Ripple's background program has stopped.", "conn.why.supervisorMissing": "The entry that starts Ripple automatically is gone.", "conn.why.programMissing": "Ripple's program files cannot be found. An update may have moved them.", "conn.why.otherInstall": "Ripple's automatic start points at another installation.", "conn.why.version": "The Ripple that is running is a different version from this app.", "conn.why.oldSetting": "Claude's settings still name an old Ripple address.", "conn.why.cliOther": "Claude Code in the terminal is set to use another connection.", "conn.why.desktopOther": "The Claude app is set to use another connection.", "conn.why.notInstalled": "Ripple has not been set up yet.", "conn.why.checkFailed": "The status check could not run.",
|
|
2593
|
+
"conn.repair": "Repair", "conn.repairHint": "Registers Ripple again and starts it. Takes about 20 seconds.",
|
|
2594
|
+
"conn.directOn": "Use Claude's default connection", "conn.directOnHint": "Claude works right away without Ripple. GPT and other models are unavailable until you switch back.",
|
|
2595
|
+
"conn.directOff": "Switch back to Ripple", "conn.directOffHint": "Goes through Ripple again so other models work. Repairs Ripple first if it has stopped.",
|
|
2596
|
+
"conn.restart": "Reopen Claude",
|
|
2597
|
+
"conn.busy.repair": "Repairing… this can take up to 40 seconds", "conn.busy.directOn": "Switching to Claude's default connection…", "conn.busy.directOff": "Switching back to Ripple…", "conn.busy.restart": "Reopening Claude…", "conn.busy.checking": "Checking…",
|
|
2598
|
+
"conn.res.repairOk": "Repaired. Ripple is responding again.", "conn.res.repairFail": "Could not repair. Use Claude's default connection to keep using Claude right now.", "conn.res.directOnOk": "Switched to Claude's default connection.", "conn.res.directOffOk": "Switched back to Ripple.", "conn.res.restartOk": "Claude has been reopened.", "conn.res.restartFail": "Could not reopen Claude. Quit the Claude app yourself and open it again.", "conn.res.fail": "That did not finish.", "conn.res.timeout": "That did not finish within 40 seconds.",
|
|
2599
|
+
"conn.restartTitle": "Please reopen the Claude app", "conn.restartBody": "The new connection applies once the Claude app is opened again. Claude Code in the terminal picks it up when started again.",
|
|
2600
|
+
"conn.details": "Details", "conn.recentLog": "Recent log", "conn.noLog": "No log yet", "conn.openLogs": "Open Logs Folder", "conn.refresh": "Check again",
|
|
2601
|
+
"conn.loginOffer": "Start ClaudeRipple when you log in, so it is there to repair things when something breaks.", "conn.loginOn": "Turn On",
|
|
2602
|
+
"conn.offlineTitle": "This page needs Ripple, which is not responding", "conn.offlineBody": "Repair it from Status and this page comes back. In a hurry? You can switch to Claude's default connection there too.", "conn.offlineDirectTitle": "Ripple is off", "conn.offlineDirectBody": "Claude is using its default connection. Switch back to Ripple to use this page again.", "conn.goStatus": "Go to Status",
|
|
2603
|
+
"conn.d.router": "Router", "conn.d.supervisor": "Auto start", "conn.d.desktop": "Claude app", "conn.d.cli": "Claude Code",
|
|
2604
|
+
});
|
|
2605
|
+
Object.assign(I18N.zh, {
|
|
2606
|
+
"conn.okTitle": "Ripple 运行正常", "conn.okBody": "Claude 正在通过 Ripple 连接。", "conn.checking": "正在检查连接…",
|
|
2607
|
+
"conn.downTitle": "Ripple 没有响应", "conn.downLead": "Claude 现在无法连接 AI。可以修复 Ripple,或不经过 Ripple 直接使用 Claude 默认连接。",
|
|
2608
|
+
"conn.directTitle": "正在使用 Claude 默认连接", "conn.directBody": "Ripple 已关闭,Claude 直接连接。切回 Ripple 后即可再次使用 GPT 等其他模型。",
|
|
2609
|
+
"conn.mixedTitle": "Claude 只有一部分经过 Ripple", "conn.mixedBody": "Claude 应用:{desktop} · 终端里的 Claude Code:{cli}",
|
|
2610
|
+
"conn.routeRipple": "Ripple", "conn.routeDirect": "Claude 默认连接", "conn.routeOther": "其他连接",
|
|
2611
|
+
"conn.warnTitle": "Ripple 已开启,但有需要检查的地方",
|
|
2612
|
+
"conn.why.stopped": "Ripple 的后台程序已停止。", "conn.why.supervisorMissing": "让 Ripple 自动启动的登记信息不见了。", "conn.why.programMissing": "找不到 Ripple 的程序文件,可能在更新时被移动了。", "conn.why.otherInstall": "Ripple 的自动启动指向了另一个安装。", "conn.why.version": "正在运行的 Ripple 与本应用版本不同。", "conn.why.oldSetting": "Claude 的设置中还留着旧的 Ripple 地址。", "conn.why.cliOther": "终端里的 Claude Code 被设置为使用其他连接。", "conn.why.desktopOther": "Claude 应用被设置为使用其他连接。", "conn.why.notInstalled": "Ripple 尚未完成设置。", "conn.why.checkFailed": "无法运行状态检查。",
|
|
2613
|
+
"conn.repair": "修复", "conn.repairHint": "重新登记并启动 Ripple,大约需要 20 秒。",
|
|
2614
|
+
"conn.directOn": "切换到 Claude 默认连接", "conn.directOnHint": "不经过 Ripple,立即使用 Claude。切回之前无法使用 GPT 等其他模型。",
|
|
2615
|
+
"conn.directOff": "切回 Ripple", "conn.directOffHint": "重新经过 Ripple,以便使用其他模型。如果 Ripple 已停止,会先修复。",
|
|
2616
|
+
"conn.restart": "重新打开 Claude",
|
|
2617
|
+
"conn.busy.repair": "正在修复… 最多可能需要 40 秒", "conn.busy.directOn": "正在切换到 Claude 默认连接…", "conn.busy.directOff": "正在切回 Ripple…", "conn.busy.restart": "正在重新打开 Claude…", "conn.busy.checking": "正在检查…",
|
|
2618
|
+
"conn.res.repairOk": "已修复,Ripple 恢复响应。", "conn.res.repairFail": "无法修复。切换到 Claude 默认连接即可立即继续使用 Claude。", "conn.res.directOnOk": "已切换到 Claude 默认连接。", "conn.res.directOffOk": "已切回 Ripple。", "conn.res.restartOk": "已重新打开 Claude。", "conn.res.restartFail": "无法重新打开 Claude。请手动退出 Claude 应用后再打开。", "conn.res.fail": "未能完成。", "conn.res.timeout": "40 秒内未能完成。",
|
|
2619
|
+
"conn.restartTitle": "请重新打开 Claude 应用", "conn.restartBody": "重新打开 Claude 应用后,新的连接才会生效。终端里的 Claude Code 重新启动后生效。",
|
|
2620
|
+
"conn.details": "详细信息", "conn.recentLog": "最近日志", "conn.noLog": "暂无日志", "conn.openLogs": "打开日志文件夹", "conn.refresh": "重新检查",
|
|
2621
|
+
"conn.loginOffer": "登录时自动启动 ClaudeRipple,出问题时可以立即修复。", "conn.loginOn": "开启",
|
|
2622
|
+
"conn.offlineTitle": "Ripple 没有响应,此页面暂时无法使用", "conn.offlineBody": "在“状态”中修复后即可恢复。着急的话,也可以在那里直接切换到 Claude 默认连接。", "conn.offlineDirectTitle": "Ripple 已关闭", "conn.offlineDirectBody": "Claude 正在使用默认连接。切回 Ripple 后即可再次使用此页面。", "conn.goStatus": "前往状态",
|
|
2623
|
+
"conn.d.router": "路由服务", "conn.d.supervisor": "自动启动", "conn.d.desktop": "Claude 应用", "conn.d.cli": "Claude Code",
|
|
2624
|
+
});
|
|
2625
|
+
Object.assign(I18N.ja, {
|
|
2626
|
+
"conn.okTitle": "Ripple は正常に動作しています", "conn.okBody": "Claude は Ripple 経由で接続されています。", "conn.checking": "接続を確認しています…",
|
|
2627
|
+
"conn.downTitle": "Ripple が応答しません", "conn.downLead": "現在 Claude は AI に接続できません。Ripple を修復するか、Ripple を通さず Claude の標準接続で使えます。",
|
|
2628
|
+
"conn.directTitle": "Claude の標準接続を使用中", "conn.directBody": "Ripple はオフで、Claude は直接接続しています。GPT などのほかのモデルは Ripple に戻すと使えます。",
|
|
2629
|
+
"conn.mixedTitle": "Claude の一部だけが Ripple を経由しています", "conn.mixedBody": "Claude アプリ:{desktop} · ターミナルの Claude Code:{cli}",
|
|
2630
|
+
"conn.routeRipple": "Ripple", "conn.routeDirect": "Claude の標準接続", "conn.routeOther": "別の接続",
|
|
2631
|
+
"conn.warnTitle": "Ripple はオンですが、確認が必要な点があります",
|
|
2632
|
+
"conn.why.stopped": "Ripple のバックグラウンドプログラムが止まっています。", "conn.why.supervisorMissing": "Ripple を自動で起動するための登録がなくなっています。", "conn.why.programMissing": "Ripple のプログラムファイルが見つかりません。アップデートで場所が変わった可能性があります。", "conn.why.otherInstall": "Ripple の自動起動が別のインストールを指しています。", "conn.why.version": "実行中の Ripple はこのアプリと別のバージョンです。", "conn.why.oldSetting": "Claude の設定に古い Ripple のアドレスが残っています。", "conn.why.cliOther": "ターミナルの Claude Code が別の接続を使うよう設定されています。", "conn.why.desktopOther": "Claude アプリが別の接続を使うよう設定されています。", "conn.why.notInstalled": "Ripple のセットアップがまだ終わっていません。", "conn.why.checkFailed": "状態チェックを実行できませんでした。",
|
|
2633
|
+
"conn.repair": "修復", "conn.repairHint": "Ripple を登録し直して起動します。20 秒ほどかかります。",
|
|
2634
|
+
"conn.directOn": "Claude の標準接続に切り替え", "conn.directOnHint": "Ripple を通さず、すぐに Claude を使えます。戻すまで GPT などのほかのモデルは使えません。",
|
|
2635
|
+
"conn.directOff": "Ripple に戻す", "conn.directOffHint": "再び Ripple を経由して、ほかのモデルも使えるようにします。Ripple が止まっていれば先に修復します。",
|
|
2636
|
+
"conn.restart": "Claude を開き直す",
|
|
2637
|
+
"conn.busy.repair": "修復しています… 最大 40 秒かかることがあります", "conn.busy.directOn": "Claude の標準接続に切り替えています…", "conn.busy.directOff": "Ripple に戻しています…", "conn.busy.restart": "Claude を開き直しています…", "conn.busy.checking": "確認しています…",
|
|
2638
|
+
"conn.res.repairOk": "修復しました。Ripple が再び応答しています。", "conn.res.repairFail": "修復できませんでした。Claude の標準接続に切り替えれば、すぐに Claude を使い続けられます。", "conn.res.directOnOk": "Claude の標準接続に切り替えました。", "conn.res.directOffOk": "Ripple に戻しました。", "conn.res.restartOk": "Claude を開き直しました。", "conn.res.restartFail": "Claude を開き直せませんでした。Claude アプリを手動で終了してから開き直してください。", "conn.res.fail": "完了できませんでした。", "conn.res.timeout": "40 秒以内に完了しませんでした。",
|
|
2639
|
+
"conn.restartTitle": "Claude アプリを開き直してください", "conn.restartBody": "新しい接続は Claude アプリを開き直すと反映されます。ターミナルの Claude Code は起動し直すと反映されます。",
|
|
2640
|
+
"conn.details": "詳細", "conn.recentLog": "最近のログ", "conn.noLog": "まだログはありません", "conn.openLogs": "ログフォルダを開く", "conn.refresh": "再確認",
|
|
2641
|
+
"conn.loginOffer": "ログイン時に ClaudeRipple を自動で起動し、問題が起きてもすぐ修復できるようにします。", "conn.loginOn": "オンにする",
|
|
2642
|
+
"conn.offlineTitle": "Ripple が応答しないため、このページは使えません", "conn.offlineBody": "ステータスで修復すると使えるようになります。急ぐ場合は、そこで Claude の標準接続に切り替えることもできます。", "conn.offlineDirectTitle": "Ripple はオフです", "conn.offlineDirectBody": "Claude は標準接続を使っています。Ripple に戻すと、このページを再び使えます。", "conn.goStatus": "ステータスへ",
|
|
2643
|
+
"conn.d.router": "ルーター", "conn.d.supervisor": "自動起動", "conn.d.desktop": "Claude アプリ", "conn.d.cli": "Claude Code",
|
|
2644
|
+
});
|
|
2645
|
+
Object.assign(I18N.es, {
|
|
2646
|
+
"conn.okTitle": "Ripple funciona correctamente", "conn.okBody": "Claude está conectado a través de Ripple.", "conn.checking": "Comprobando la conexión…",
|
|
2647
|
+
"conn.downTitle": "Ripple no responde", "conn.downLead": "Claude no puede conectarse a la IA ahora mismo. Repara Ripple o usa la conexión predeterminada de Claude sin él.",
|
|
2648
|
+
"conn.directTitle": "Usando la conexión predeterminada de Claude", "conn.directBody": "Ripple está apagado y Claude se conecta directamente. Otros modelos como GPT vuelven cuando regresas a Ripple.",
|
|
2649
|
+
"conn.mixedTitle": "Solo una parte de Claude pasa por Ripple", "conn.mixedBody": "App de Claude: {desktop} · Claude Code en la terminal: {cli}",
|
|
2650
|
+
"conn.routeRipple": "Ripple", "conn.routeDirect": "conexión predeterminada de Claude", "conn.routeOther": "otra conexión",
|
|
2651
|
+
"conn.warnTitle": "Ripple está encendido, pero hay algo que revisar",
|
|
2652
|
+
"conn.why.stopped": "El programa en segundo plano de Ripple se detuvo.", "conn.why.supervisorMissing": "Desapareció el registro que inicia Ripple automáticamente.", "conn.why.programMissing": "No se encuentran los archivos del programa de Ripple. Una actualización pudo haberlos movido.", "conn.why.otherInstall": "El inicio automático de Ripple apunta a otra instalación.", "conn.why.version": "El Ripple en ejecución es de una versión distinta a esta app.", "conn.why.oldSetting": "La configuración de Claude aún tiene una dirección antigua de Ripple.", "conn.why.cliOther": "Claude Code en la terminal está configurado para usar otra conexión.", "conn.why.desktopOther": "La app de Claude está configurada para usar otra conexión.", "conn.why.notInstalled": "Ripple aún no está configurado.", "conn.why.checkFailed": "No se pudo ejecutar la comprobación de estado.",
|
|
2653
|
+
"conn.repair": "Reparar", "conn.repairHint": "Vuelve a registrar Ripple y lo inicia. Tarda unos 20 segundos.",
|
|
2654
|
+
"conn.directOn": "Usar la conexión predeterminada de Claude", "conn.directOnHint": "Claude funciona al instante sin Ripple. GPT y otros modelos no estarán disponibles hasta que vuelvas.",
|
|
2655
|
+
"conn.directOff": "Volver a Ripple", "conn.directOffHint": "Vuelve a pasar por Ripple para que funcionen otros modelos. Si Ripple está detenido, primero lo repara.",
|
|
2656
|
+
"conn.restart": "Reabrir Claude",
|
|
2657
|
+
"conn.busy.repair": "Reparando… puede tardar hasta 40 segundos", "conn.busy.directOn": "Cambiando a la conexión predeterminada de Claude…", "conn.busy.directOff": "Volviendo a Ripple…", "conn.busy.restart": "Reabriendo Claude…", "conn.busy.checking": "Comprobando…",
|
|
2658
|
+
"conn.res.repairOk": "Reparado. Ripple vuelve a responder.", "conn.res.repairFail": "No se pudo reparar. Usa la conexión predeterminada de Claude para seguir usando Claude ahora mismo.", "conn.res.directOnOk": "Cambiado a la conexión predeterminada de Claude.", "conn.res.directOffOk": "De vuelta en Ripple.", "conn.res.restartOk": "Claude se ha vuelto a abrir.", "conn.res.restartFail": "No se pudo reabrir Claude. Cierra la app de Claude tú mismo y vuelve a abrirla.", "conn.res.fail": "No se completó.", "conn.res.timeout": "No se completó en 40 segundos.",
|
|
2659
|
+
"conn.restartTitle": "Vuelve a abrir la app de Claude", "conn.restartBody": "La nueva conexión se aplica al volver a abrir la app de Claude. Claude Code en la terminal la usa al iniciarlo de nuevo.",
|
|
2660
|
+
"conn.details": "Detalles", "conn.recentLog": "Registro reciente", "conn.noLog": "Aún no hay registros", "conn.openLogs": "Abrir carpeta de registros", "conn.refresh": "Comprobar de nuevo",
|
|
2661
|
+
"conn.loginOffer": "Abrir ClaudeRipple al iniciar sesión, para poder reparar enseguida si algo falla.", "conn.loginOn": "Activar",
|
|
2662
|
+
"conn.offlineTitle": "Esta página necesita Ripple, que no responde", "conn.offlineBody": "Repáralo desde Estado y la página vuelve. ¿Con prisa? Allí también puedes usar la conexión predeterminada de Claude.", "conn.offlineDirectTitle": "Ripple está apagado", "conn.offlineDirectBody": "Claude usa su conexión predeterminada. Vuelve a Ripple para usar esta página otra vez.", "conn.goStatus": "Ir a Estado",
|
|
2663
|
+
"conn.d.router": "Router", "conn.d.supervisor": "Inicio automático", "conn.d.desktop": "App de Claude", "conn.d.cli": "Claude Code",
|
|
2664
|
+
});
|
|
2665
|
+
Object.assign(I18N.pt, {
|
|
2666
|
+
"conn.okTitle": "O Ripple está funcionando", "conn.okBody": "O Claude está conectado pelo Ripple.", "conn.checking": "Verificando a conexão…",
|
|
2667
|
+
"conn.downTitle": "O Ripple não está respondendo", "conn.downLead": "O Claude não consegue acessar a IA agora. Repare o Ripple ou use a conexão padrão do Claude sem ele.",
|
|
2668
|
+
"conn.directTitle": "Usando a conexão padrão do Claude", "conn.directBody": "O Ripple está desligado e o Claude se conecta diretamente. Outros modelos, como o GPT, voltam quando você retorna ao Ripple.",
|
|
2669
|
+
"conn.mixedTitle": "Só uma parte do Claude passa pelo Ripple", "conn.mixedBody": "App do Claude: {desktop} · Claude Code no terminal: {cli}",
|
|
2670
|
+
"conn.routeRipple": "Ripple", "conn.routeDirect": "conexão padrão do Claude", "conn.routeOther": "outra conexão",
|
|
2671
|
+
"conn.warnTitle": "O Ripple está ligado, mas há algo para verificar",
|
|
2672
|
+
"conn.why.stopped": "O programa em segundo plano do Ripple parou.", "conn.why.supervisorMissing": "O registro que inicia o Ripple automaticamente sumiu.", "conn.why.programMissing": "Os arquivos do programa do Ripple não foram encontrados. Uma atualização pode tê-los movido.", "conn.why.otherInstall": "A inicialização automática do Ripple aponta para outra instalação.", "conn.why.version": "O Ripple em execução é de uma versão diferente deste app.", "conn.why.oldSetting": "As configurações do Claude ainda têm um endereço antigo do Ripple.", "conn.why.cliOther": "O Claude Code no terminal está configurado para usar outra conexão.", "conn.why.desktopOther": "O app do Claude está configurado para usar outra conexão.", "conn.why.notInstalled": "O Ripple ainda não foi configurado.", "conn.why.checkFailed": "Não foi possível executar a verificação de status.",
|
|
2673
|
+
"conn.repair": "Reparar", "conn.repairHint": "Registra o Ripple de novo e o inicia. Leva cerca de 20 segundos.",
|
|
2674
|
+
"conn.directOn": "Usar a conexão padrão do Claude", "conn.directOnHint": "O Claude funciona na hora, sem o Ripple. GPT e outros modelos ficam indisponíveis até você voltar.",
|
|
2675
|
+
"conn.directOff": "Voltar para o Ripple", "conn.directOffHint": "Volta a passar pelo Ripple para que outros modelos funcionem. Se o Ripple estiver parado, ele é reparado antes.",
|
|
2676
|
+
"conn.restart": "Reabrir o Claude",
|
|
2677
|
+
"conn.busy.repair": "Reparando… pode levar até 40 segundos", "conn.busy.directOn": "Mudando para a conexão padrão do Claude…", "conn.busy.directOff": "Voltando para o Ripple…", "conn.busy.restart": "Reabrindo o Claude…", "conn.busy.checking": "Verificando…",
|
|
2678
|
+
"conn.res.repairOk": "Reparado. O Ripple voltou a responder.", "conn.res.repairFail": "Não foi possível reparar. Use a conexão padrão do Claude para continuar usando o Claude agora.", "conn.res.directOnOk": "Mudou para a conexão padrão do Claude.", "conn.res.directOffOk": "Voltou para o Ripple.", "conn.res.restartOk": "O Claude foi reaberto.", "conn.res.restartFail": "Não foi possível reabrir o Claude. Encerre o app do Claude você mesmo e abra-o de novo.", "conn.res.fail": "Não foi concluído.", "conn.res.timeout": "Não foi concluído em 40 segundos.",
|
|
2679
|
+
"conn.restartTitle": "Reabra o app do Claude", "conn.restartBody": "A nova conexão vale depois que o app do Claude é aberto de novo. O Claude Code no terminal passa a usá-la quando for iniciado de novo.",
|
|
2680
|
+
"conn.details": "Detalhes", "conn.recentLog": "Log recente", "conn.noLog": "Ainda não há logs", "conn.openLogs": "Abrir pasta de logs", "conn.refresh": "Verificar de novo",
|
|
2681
|
+
"conn.loginOffer": "Abrir o ClaudeRipple ao fazer login, para poder reparar na hora se algo quebrar.", "conn.loginOn": "Ativar",
|
|
2682
|
+
"conn.offlineTitle": "Esta página precisa do Ripple, que não está respondendo", "conn.offlineBody": "Repare-o em Status e a página volta. Com pressa? Lá você também pode usar a conexão padrão do Claude.", "conn.offlineDirectTitle": "O Ripple está desligado", "conn.offlineDirectBody": "O Claude está usando a conexão padrão. Volte para o Ripple para usar esta página de novo.", "conn.goStatus": "Ir para Status",
|
|
2683
|
+
"conn.d.router": "Roteador", "conn.d.supervisor": "Início automático", "conn.d.desktop": "App do Claude", "conn.d.cli": "Claude Code",
|
|
2684
|
+
});
|
|
2685
|
+
|
|
2686
|
+
// The laptop page: lid-closed awake and phone-hotspot failover (router awake.ts, tether.ts). For
|
|
2687
|
+
// someone who has never opened a terminal: no pmset, sudo or SSID outside the Details fold (mac.d.*).
|
|
2688
|
+
// Wording is brand-neutral ("휴대폰 핫스팟"/"phone hotspot") and the OS-specific parts are chosen by
|
|
2689
|
+
// the platform in GET /api/power: mac.tether.help is macOS-only, mac.tether.helpWin is Windows'.
|
|
2690
|
+
Object.assign(I18N.ko, {
|
|
2691
|
+
"nav.mac": "노트북 관리", "nav.macShort": "노트북", "mac.title": "노트북 관리", "mac.subtitle": "자리를 비운 동안에도 Claude가 이 노트북에서 계속 일하게 해 줍니다.",
|
|
2692
|
+
"mac.setup.title": "맥 암호는 한 번만 필요합니다", "mac.setup.lead": "아래 일을 ClaudeRipple이 알아서 할 수 있게 허락해 주세요.",
|
|
2693
|
+
"mac.setup.allowSleep": "맥이 잠들지 않게 하고, 나중에 원래대로 되돌리기", "mac.setup.allowLid": "덮개를 닫은 맥 재우기", "mac.setup.allowHotspot": "정해 둔 휴대폰 핫스팟에 접속하기",
|
|
2694
|
+
"mac.setup.private": "암호는 macOS 창에 직접 입력하므로 ClaudeRipple은 볼 수 없습니다. 이 세 가지 밖의 일은 허락되지 않습니다.", "mac.setup.insomnia": "Insomnia 앱을 쓰고 있었다면 하는 일이 같으니, 이때 깔끔하게 정리합니다.",
|
|
2695
|
+
"mac.setup.button": "설정하기", "mac.setup.running": "설정 중…", "mac.setup.waiting": "맥 암호 창이 떴습니다", "mac.setup.waitingSub": "맥 화면에 뜬 창에 맥 로그인 암호를 입력해 주세요. 끝나면 여기에 결과가 나옵니다.",
|
|
2696
|
+
"mac.setup.waitingWin": "설정을 확인하는 중입니다", "mac.setup.waitingSubWin": "Windows는 관리자 권한 없이 확인만 하므로 암호를 묻지 않습니다. 끝나면 여기에 결과가 나옵니다.",
|
|
2697
|
+
"mac.setup.done": "설정을 마쳤습니다.", "mac.setup.failed": "설정하지 못했습니다.", "mac.setup.cancelled": "취소했습니다. 바뀐 것은 없습니다.",
|
|
2698
|
+
"mac.ssid.label": "휴대폰 핫스팟 이름", "mac.ssid.placeholder": "예: 내 휴대폰", "mac.ssid.help": "휴대폰의 핫스팟 설정에 보이는 이름입니다(iPhone: 설정 › 개인용 핫스팟, Android: 설정 › 핫스팟/테더링 › Wi-Fi 핫스팟). 비워 두면 잠들지 않게 하는 것만 설정합니다.",
|
|
2699
|
+
"mac.ssid.invalid": "핫스팟 이름에는 영문, 숫자, 띄어쓰기와 . _ - ' 만 쓸 수 있습니다(32자 이내). 휴대폰 이름을 바꾸면 핫스팟 이름도 바뀔 수 있습니다.",
|
|
2700
|
+
"mac.ssid.change": "바꾸기", "mac.ssid.set": "정하기", "mac.ssid.none": "정하지 않음",
|
|
2701
|
+
"mac.rename.title": "핫스팟 이름 바꾸기", "mac.rename.titleNew": "핫스팟 이름 정하기", "mac.rename.help": "이 노트북이 접속할 휴대폰 핫스팟을 정합니다. 저장하면 설정을 한 번 더 확인합니다.", "mac.rename.save": "저장",
|
|
2702
|
+
"mac.tomorrowAt": "내일 {time}",
|
|
2703
|
+
"mac.awake.title": "노트북을 덮어도 잠들지 않게", "mac.awake.blurb": "노트북 덮개를 닫아도 잠들지 않아서, 휴대폰으로 맡긴 일을 Claude가 이어서 합니다.",
|
|
2704
|
+
"mac.awake.on": "지금 깨어 있음", "mac.awake.off": "잠들어도 됨",
|
|
2705
|
+
"mac.why.off": "잠들지 않게 하는 기능이 꺼져 있습니다", "mac.why.on": "계속 깨어 있는 중", "mac.why.onUntil": "{time}까지 계속 깨어 있는 중", "mac.why.working": "Claude가 일하는 중",
|
|
2706
|
+
"mac.why.recent": "Claude가 {min}분 전에 일을 마쳤습니다 · 10분까지 깨어 있습니다", "mac.why.idle": "Claude가 10분 넘게 쉬고 있습니다", "mac.why.until": "정한 시각이 지났습니다",
|
|
2707
|
+
"mac.why.battery": "배터리가 {floor}% 미만이라 깨어 있기를 멈췄습니다", "mac.why.thermal": "노트북이 뜨거워져서 깨어 있기를 멈췄습니다", "mac.why.error": "배터리나 온도를 읽지 못해 안전하게 깨어 있기를 멈췄습니다",
|
|
2708
|
+
"mac.why.setup": "맥 암호 설정이 필요합니다", "mac.why.failed": "잠들지 않게 하는 설정을 바꾸지 못했습니다", "mac.why.starting": "확인하는 중…",
|
|
2709
|
+
"mac.fact.battery": "배터리 {percent}%", "mac.fact.charging": "배터리 {percent}% · 전원 연결됨", "mac.fact.lidClosed": "덮개 닫힘", "mac.fact.lidOpen": "덮개 열림", "mac.fact.hot": "뜨거움",
|
|
2710
|
+
"mac.mode.label": "깨어 있기", "mac.mode.off": "끔", "mac.mode.working": "일할 때만", "mac.mode.on": "계속 켜 두기",
|
|
2711
|
+
"mac.mode.offHelp": "노트북이 평소처럼 잠듭니다.", "mac.mode.workingHelp": "Claude가 일하는 동안, 그리고 끝난 뒤 10분까지 깨어 있습니다.", "mac.mode.onHelp": "끄거나 정한 시각이 될 때까지 깨어 있습니다.",
|
|
2712
|
+
"mac.until.label": "끝나는 시각", "mac.until.clear": "지우기", "mac.until.set": "{time}에 다시 잠들어도 되게 합니다.", "mac.until.none": "비워 두면 직접 끌 때까지 켜 둡니다.",
|
|
2713
|
+
"mac.awake.safety": "배터리가 {floor}% 아래로 내려가거나 노트북이 뜨거워지면 스스로 깨어 있기를 멈추고, 덮개가 닫혀 있으면 노트북을 재웁니다. 깨어 있는 동안에는 가방처럼 통이 막힌 곳에 넣지 마세요.",
|
|
2714
|
+
"mac.details": "자세히",
|
|
2715
|
+
"mac.d.reason": "판단 근거", "mac.d.applied": "잠들지 않게 함", "mac.d.battery": "배터리", "mac.d.thermal": "온도", "mac.d.lid": "덮개", "mac.d.until": "끝나는 시각",
|
|
2716
|
+
"mac.d.state": "상태", "mac.d.network": "네트워크", "mac.d.probe": "마지막 인터넷 확인", "mac.d.switch": "마지막 전환", "mac.d.hint": "라우터 안내",
|
|
2717
|
+
"mac.tether.title": "와이파이가 끊기면 휴대폰 핫스팟으로", "mac.tether.blurb": "와이파이에서 인터넷이 안 되면 휴대폰 핫스팟으로 옮겼다가, 와이파이가 다시 되면 돌아옵니다. 잠깐 끊기는 정도로는 옮기지 않습니다.",
|
|
2718
|
+
"mac.tether.switch": "자동으로 옮기기", "mac.tether.switchHelp": "Claude가 답하는 중이면 끝날 때까지 조금 기다렸다가 옮깁니다.",
|
|
2719
|
+
"mac.net.wifi": "와이파이", "mac.net.hotspot": "휴대폰 핫스팟", "mac.net.none": "연결 없음",
|
|
2720
|
+
"mac.tstate.off": "자동 전환이 꺼져 있습니다", "mac.tstate.unsupported": "이 컴퓨터에서는 쓸 수 없습니다", "mac.tstate.no-wifi-device": "와이파이 장치를 찾지 못했습니다", "mac.tstate.watching": "인터넷이 잘 되는지 지켜보는 중",
|
|
2721
|
+
"mac.tstate.no-wifi": "와이파이에 연결되어 있지 않습니다", "mac.tstate.outage": "와이파이에서 인터넷이 되지 않습니다", "mac.tstate.pinned": "지금 네트워크를 유지하는 중", "mac.tstate.joining-hotspot": "휴대폰 핫스팟에 연결하는 중…",
|
|
2722
|
+
"mac.tstate.on-hotspot": "핫스팟으로 연결 중 · 와이파이가 돌아오면 옮깁니다", "mac.tstate.returning": "와이파이로 돌아가 보는 중…", "mac.tstate.hotspot-not-visible": "휴대폰 핫스팟이 보이지 않습니다",
|
|
2723
|
+
"mac.tstate.join-failed": "핫스팟에 연결하지 못했습니다", "mac.tstate.needs-setup": "맥 암호 설정이 다시 필요합니다", "mac.tstate.no-hotspot-ssid": "핫스팟 이름이 정해지지 않았습니다",
|
|
2724
|
+
"mac.tstate.no-hotspot-profile": "이 핫스팟에 접속한 적이 없습니다", "mac.hint.no-hotspot-profile": "Windows의 Wi-Fi 메뉴에서 그 핫스팟에 한 번 접속해 암호를 저장하게 해 주세요. 그러면 다음부터 이름으로 바꿔 줍니다.",
|
|
2725
|
+
"mac.tstate.needs-location": "위치 서비스가 꺼져 있습니다", "mac.hint.needs-location": "Windows 11 24H2부터는 위치가 켜져 있어야 와이파이를 바꿀 수 있습니다. 설정 › 개인 정보 및 보안 › 위치에서 위치 서비스와 '데스크톱 앱의 위치 액세스 허용'을 켜 주세요.",
|
|
2726
|
+
"mac.switch.toHotspot": "{time} 핫스팟으로 옮김", "mac.switch.toWifi": "{time} 와이파이로 돌아옴", "mac.switch.failed": "{time} 전환 실패",
|
|
2727
|
+
"mac.hint.title": "확인이 필요합니다",
|
|
2728
|
+
"mac.hint.hotspot-not-visible": "휴대폰에서 핫스팟 화면을 한 번 열어 주세요(iPhone: 설정 › 개인용 핫스팟, Android: 설정 › 핫스팟/테더링 › Wi-Fi 핫스팟). 잠든 휴대폰은 핫스팟을 알리지 않습니다. '다른 사람의 연결 허용'도 켜 두세요.",
|
|
2729
|
+
"mac.hint.join-failed": "핫스팟 이름이 맞는지, 이 노트북이 그 핫스팟에 한 번이라도 접속한 적이 있는지 확인해 주세요. 노트북은 한 번 접속한 핫스팟의 암호를 기억합니다.",
|
|
2730
|
+
"mac.hint.no-wifi": "와이파이가 하나도 없을 때는 노트북이 스스로 휴대폰 핫스팟에 접속할 수 있습니다. 아래의 설정을 확인해 주세요.",
|
|
2731
|
+
"mac.hint.no-hotspot-ssid": "아래 '휴대폰 핫스팟 이름'에서 이름을 정해 주세요.",
|
|
2732
|
+
"mac.hint.needs-setup": "핫스팟 이름이 바뀌었거나 허락이 지워졌습니다. 아래에서 핫스팟 이름을 다시 정하면 맥 암호를 한 번 묻습니다.",
|
|
2733
|
+
"mac.tether.help": "맥이 핫스팟에 잘 붙게 하려면: 이 맥에서 휴대폰 핫스팟에 한 번 직접 접속해 암호를 저장해 두세요. 아이폰이라면 시스템 설정 › Wi-Fi에서 '핫스팟 연결 요청'을 '자동'으로 두고, 같은 Apple 계정으로 로그인한 채 블루투스를 켜 두면 더 잘 붙습니다.",
|
|
2734
|
+
"mac.tether.helpWin": "Windows에서 핫스팟에 붙게 하려면: Wi-Fi 메뉴에서 그 핫스팟에 한 번 접속해 암호를 저장하게 하고, 돌아올 와이파이 하나를 '자동으로 연결'로 두세요. Windows 11 24H2부터는 설정 › 개인 정보 및 보안 › 위치에서 위치 서비스와 '데스크톱 앱의 위치 액세스 허용'을 켜야 합니다.",
|
|
2735
|
+
"mac.unsupported.title": "이 컴퓨터에서는 쓸 수 없습니다", "mac.unsupported.body": "덮개를 닫아도 잠들지 않게 하기와 휴대폰 핫스팟 전환은 macOS와 Windows에서 동작합니다.",
|
|
2736
|
+
"mac.unavailable.title": "이 버전에는 아직 없는 기능입니다", "mac.unavailable.body": "ClaudeRipple을 업데이트하면 여기서 노트북을 관리할 수 있습니다.",
|
|
2737
|
+
});
|
|
2738
|
+
Object.assign(I18N.en, {
|
|
2739
|
+
"nav.mac": "Laptop", "nav.macShort": "Laptop", "mac.title": "Laptop", "mac.subtitle": "Keep Claude working on this laptop while you are away from it.",
|
|
2740
|
+
"mac.setup.title": "Your Mac password, just once", "mac.setup.lead": "Allow ClaudeRipple to do these on its own:",
|
|
2741
|
+
"mac.setup.allowSleep": "Turn the Mac's sleep off and back on", "mac.setup.allowLid": "Put a Mac with its lid closed to sleep", "mac.setup.allowHotspot": "Join the phone hotspot you name",
|
|
2742
|
+
"mac.setup.private": "You type the password into macOS's own window; ClaudeRipple never sees it, and nothing beyond these three is allowed.", "mac.setup.insomnia": "If you used the Insomnia app, which does the same, it is cleaned up at this point.",
|
|
2743
|
+
"mac.setup.button": "Set up", "mac.setup.running": "Setting up…", "mac.setup.waiting": "A Mac password window is open", "mac.setup.waitingSub": "Type your Mac login password in the window on the Mac's screen. The result shows here when it is done.",
|
|
2744
|
+
"mac.setup.waitingWin": "Checking the setup", "mac.setup.waitingSubWin": "Windows needs no administrator rights, so no password is asked. The result shows here when it is done.",
|
|
2745
|
+
"mac.setup.done": "Setup is done.", "mac.setup.failed": "Setup did not finish.", "mac.setup.cancelled": "Cancelled. Nothing was changed.",
|
|
2746
|
+
"mac.ssid.label": "Phone hotspot name", "mac.ssid.placeholder": "e.g. My Phone", "mac.ssid.help": "The name shown in your phone's hotspot settings (iPhone: Settings › Personal Hotspot; Android: Settings › Hotspot & tethering › Wi-Fi hotspot). Leave it empty to set up staying awake only.",
|
|
2747
|
+
"mac.ssid.invalid": "A hotspot name can use only English letters, digits, spaces and . _ - ' (up to 32). Renaming your phone may rename its hotspot too.",
|
|
2748
|
+
"mac.ssid.change": "Change", "mac.ssid.set": "Set", "mac.ssid.none": "Not set",
|
|
2749
|
+
"mac.rename.title": "Change the hotspot name", "mac.rename.titleNew": "Set the hotspot name", "mac.rename.help": "Choose the phone hotspot this laptop may join. Saving checks the setup once more.", "mac.rename.save": "Save",
|
|
2750
|
+
"mac.tomorrowAt": "tomorrow {time}",
|
|
2751
|
+
"mac.awake.title": "Stay awake with the lid closed", "mac.awake.blurb": "Close the laptop lid and it keeps running, so Claude carries on with what you hand it from your phone.",
|
|
2752
|
+
"mac.awake.on": "Awake now", "mac.awake.off": "Sleep allowed",
|
|
2753
|
+
"mac.why.off": "Staying awake is off", "mac.why.on": "Kept on", "mac.why.onUntil": "Kept on until {time}", "mac.why.working": "Claude is working",
|
|
2754
|
+
"mac.why.recent": "Claude finished {min} min ago · stays awake for 10 min", "mac.why.idle": "Claude has been idle for over 10 minutes", "mac.why.until": "The end time has passed",
|
|
2755
|
+
"mac.why.battery": "Stopped staying awake: battery below {floor}%", "mac.why.thermal": "Stopped staying awake: the laptop is hot", "mac.why.error": "Stopped staying awake to be safe: battery or temperature could not be read",
|
|
2756
|
+
"mac.why.setup": "Needs your Mac password once", "mac.why.failed": "Could not change the sleep setting", "mac.why.starting": "Checking…",
|
|
2757
|
+
"mac.fact.battery": "Battery {percent}%", "mac.fact.charging": "Battery {percent}% · plugged in", "mac.fact.lidClosed": "Lid closed", "mac.fact.lidOpen": "Lid open", "mac.fact.hot": "Hot",
|
|
2758
|
+
"mac.mode.label": "Stay awake", "mac.mode.off": "Off", "mac.mode.working": "While working", "mac.mode.on": "Always",
|
|
2759
|
+
"mac.mode.offHelp": "The laptop sleeps as usual.", "mac.mode.workingHelp": "Awake while Claude works, and for 10 minutes after.", "mac.mode.onHelp": "Awake until you turn it off or the end time comes.",
|
|
2760
|
+
"mac.until.label": "Until", "mac.until.clear": "Clear", "mac.until.set": "Sleep is allowed again at {time}.", "mac.until.none": "Leave empty to keep it on until you turn it off.",
|
|
2761
|
+
"mac.awake.safety": "If the battery drops below {floor}% or the laptop gets hot, it stops staying awake and, with the lid closed, puts the laptop to sleep. While it is held awake, never keep it in a bag or anywhere enclosed.",
|
|
2762
|
+
"mac.details": "Details",
|
|
2763
|
+
"mac.d.reason": "Reason", "mac.d.applied": "Sleep blocked", "mac.d.battery": "Battery", "mac.d.thermal": "Temperature", "mac.d.lid": "Lid", "mac.d.until": "Until",
|
|
2764
|
+
"mac.d.state": "State", "mac.d.network": "Network", "mac.d.probe": "Last internet check", "mac.d.switch": "Last switch", "mac.d.hint": "Router note",
|
|
2765
|
+
"mac.tether.title": "Phone hotspot when Wi-Fi drops", "mac.tether.blurb": "When the Wi-Fi has no internet the laptop moves to your phone hotspot, and back once the Wi-Fi works again. A brief blip does not move it.",
|
|
2766
|
+
"mac.tether.switch": "Switch automatically", "mac.tether.switchHelp": "If Claude is in the middle of a reply, it waits a little for it to finish first.",
|
|
2767
|
+
"mac.net.wifi": "Wi-Fi", "mac.net.hotspot": "Phone hotspot", "mac.net.none": "Not connected",
|
|
2768
|
+
"mac.tstate.off": "Automatic switching is off", "mac.tstate.unsupported": "Not available on this computer", "mac.tstate.no-wifi-device": "No Wi-Fi hardware found", "mac.tstate.watching": "Watching that the internet works",
|
|
2769
|
+
"mac.tstate.no-wifi": "Not connected to Wi-Fi", "mac.tstate.outage": "The Wi-Fi has no internet", "mac.tstate.pinned": "Staying on this network", "mac.tstate.joining-hotspot": "Joining the phone hotspot…",
|
|
2770
|
+
"mac.tstate.on-hotspot": "On the hotspot · moves back when the Wi-Fi returns", "mac.tstate.returning": "Trying the Wi-Fi again…", "mac.tstate.hotspot-not-visible": "The phone hotspot is not visible",
|
|
2771
|
+
"mac.tstate.join-failed": "Could not join the hotspot", "mac.tstate.needs-setup": "Needs your Mac password again", "mac.tstate.no-hotspot-ssid": "No hotspot name set",
|
|
2772
|
+
"mac.tstate.no-hotspot-profile": "This hotspot has not been joined before", "mac.hint.no-hotspot-profile": "Join that hotspot once from Windows's Wi-Fi menu so Windows saves its password; from then on ClaudeRipple switches to it by name.",
|
|
2773
|
+
"mac.tstate.needs-location": "Location services are off", "mac.hint.needs-location": "Windows 11 24H2 and later need Location on to change Wi-Fi: turn on Location services and \"Let desktop apps access your location\" in Settings › Privacy & security › Location.",
|
|
2774
|
+
"mac.switch.toHotspot": "Moved to the hotspot {time}", "mac.switch.toWifi": "Back on Wi-Fi {time}", "mac.switch.failed": "Switch failed {time}",
|
|
2775
|
+
"mac.hint.title": "Needs a look",
|
|
2776
|
+
"mac.hint.hotspot-not-visible": "Open the hotspot screen on your phone once (iPhone: Settings › Personal Hotspot; Android: Settings › Hotspot & tethering › Wi-Fi hotspot). An idle phone stops announcing its hotspot. Keep \"Allow Others to Join\" on too.",
|
|
2777
|
+
"mac.hint.join-failed": "Check the hotspot name, and that this laptop has joined that hotspot at least once before — the laptop remembers its password from then.",
|
|
2778
|
+
"mac.hint.no-wifi": "With no Wi-Fi at all, the laptop may join your phone hotspot by itself. Check the setting below.",
|
|
2779
|
+
"mac.hint.no-hotspot-ssid": "Set a name under \"Phone hotspot name\" below.",
|
|
2780
|
+
"mac.hint.needs-setup": "The hotspot name changed or the permission was removed. Set the hotspot name again below; it asks for your Mac password once.",
|
|
2781
|
+
"mac.tether.help": "For the Mac to join the hotspot: join the phone's hotspot from this Mac once so it keeps the password. With an iPhone it joins more readily if System Settings › Wi-Fi \"Ask to join hotspots\" is Automatic, the same Apple Account is signed in on both, and Bluetooth is on.",
|
|
2782
|
+
"mac.tether.helpWin": "For Windows to join the hotspot: connect to it once from the Wi-Fi menu so Windows saves its password, and keep another Wi-Fi network set to connect automatically for the way back. On Windows 11 24H2 and later, turn Location on under Settings › Privacy & security › Location, including \"Let desktop apps access your location\".",
|
|
2783
|
+
"mac.unsupported.title": "Not available on this computer", "mac.unsupported.body": "Staying awake with the lid closed and the phone hotspot switch work on macOS and Windows.",
|
|
2784
|
+
"mac.unavailable.title": "Not in this version yet", "mac.unavailable.body": "Update ClaudeRipple to manage the laptop from here.",
|
|
2785
|
+
});
|
|
2786
|
+
Object.assign(I18N.zh, {
|
|
2787
|
+
"nav.mac": "笔记本管理", "nav.macShort": "笔记本", "mac.title": "笔记本管理", "mac.subtitle": "你不在电脑前时,也让 Claude 在这台笔记本上继续工作。",
|
|
2788
|
+
"mac.setup.title": "只需输入一次 Mac 密码", "mac.setup.lead": "请允许 ClaudeRipple 自行完成以下操作:",
|
|
2789
|
+
"mac.setup.allowSleep": "关闭并重新开启 Mac 的睡眠", "mac.setup.allowLid": "让合盖的 Mac 进入睡眠", "mac.setup.allowHotspot": "加入你指定的手机热点",
|
|
2790
|
+
"mac.setup.private": "密码输入在 macOS 自己的窗口中,ClaudeRipple 看不到;除这三项外不会获得任何权限。", "mac.setup.insomnia": "如果你用过功能相同的 Insomnia 应用,会在这一步一并清理。",
|
|
2791
|
+
"mac.setup.button": "设置", "mac.setup.running": "正在设置…", "mac.setup.waiting": "Mac 密码窗口已打开", "mac.setup.waitingSub": "请在 Mac 屏幕上的窗口中输入 Mac 登录密码。完成后结果会显示在这里。",
|
|
2792
|
+
"mac.setup.waitingWin": "正在检查设置", "mac.setup.waitingSubWin": "Windows 无需管理员权限,因此不会询问密码。完成后结果会显示在这里。",
|
|
2793
|
+
"mac.setup.done": "设置完成。", "mac.setup.failed": "未能完成设置。", "mac.setup.cancelled": "已取消,没有做任何更改。",
|
|
2794
|
+
"mac.ssid.label": "手机热点名称", "mac.ssid.placeholder": "例如 我的手机", "mac.ssid.help": "手机热点设置中显示的名称(iPhone:设置 › 个人热点;Android:设置 › 热点和网络共享 › Wi-Fi 热点)。留空则只设置保持唤醒。",
|
|
2795
|
+
"mac.ssid.invalid": "热点名称只能包含英文字母、数字、空格和 . _ - '(最多 32 个)。更改手机名称也可能同时更改热点名称。",
|
|
2796
|
+
"mac.ssid.change": "更改", "mac.ssid.set": "设置", "mac.ssid.none": "未设置",
|
|
2797
|
+
"mac.rename.title": "更改热点名称", "mac.rename.titleNew": "设置热点名称", "mac.rename.help": "选择这台笔记本可以加入的手机热点。保存时会再检查一次设置。", "mac.rename.save": "保存",
|
|
2798
|
+
"mac.tomorrowAt": "明天 {time}",
|
|
2799
|
+
"mac.awake.title": "合盖时保持唤醒", "mac.awake.blurb": "合上笔记本后它也不会睡眠,Claude 会继续完成你从手机交给它的工作。",
|
|
2800
|
+
"mac.awake.on": "当前保持唤醒", "mac.awake.off": "允许睡眠",
|
|
2801
|
+
"mac.why.off": "保持唤醒已关闭", "mac.why.on": "持续开启中", "mac.why.onUntil": "持续开启至 {time}", "mac.why.working": "Claude 正在工作",
|
|
2802
|
+
"mac.why.recent": "Claude 于 {min} 分钟前完成工作 · 保持唤醒 10 分钟", "mac.why.idle": "Claude 已空闲超过 10 分钟", "mac.why.until": "已过设定的结束时间",
|
|
2803
|
+
"mac.why.battery": "电量低于 {floor}%,已停止保持唤醒", "mac.why.thermal": "笔记本过热,已停止保持唤醒", "mac.why.error": "无法读取电池或温度,为安全起见已停止保持唤醒",
|
|
2804
|
+
"mac.why.setup": "需要输入一次 Mac 密码", "mac.why.failed": "无法更改睡眠设置", "mac.why.starting": "正在检查…",
|
|
2805
|
+
"mac.fact.battery": "电量 {percent}%", "mac.fact.charging": "电量 {percent}% · 已接电源", "mac.fact.lidClosed": "已合盖", "mac.fact.lidOpen": "已开盖", "mac.fact.hot": "过热",
|
|
2806
|
+
"mac.mode.label": "保持唤醒", "mac.mode.off": "关闭", "mac.mode.working": "仅在工作时", "mac.mode.on": "始终开启",
|
|
2807
|
+
"mac.mode.offHelp": "笔记本照常睡眠。", "mac.mode.workingHelp": "Claude 工作期间及结束后 10 分钟内保持唤醒。", "mac.mode.onHelp": "保持唤醒,直到你关闭或到达结束时间。",
|
|
2808
|
+
"mac.until.label": "结束时间", "mac.until.clear": "清除", "mac.until.set": "将在 {time} 恢复允许睡眠。", "mac.until.none": "留空则一直开启,直到你手动关闭。",
|
|
2809
|
+
"mac.awake.safety": "电量低于 {floor}% 或笔记本过热时,会自动停止保持唤醒,若已合盖则让笔记本睡眠。保持唤醒期间切勿放进包里或其他封闭空间。",
|
|
2810
|
+
"mac.details": "详细信息",
|
|
2811
|
+
"mac.d.reason": "判断依据", "mac.d.applied": "阻止睡眠", "mac.d.battery": "电池", "mac.d.thermal": "温度", "mac.d.lid": "盖子", "mac.d.until": "结束时间",
|
|
2812
|
+
"mac.d.state": "状态", "mac.d.network": "网络", "mac.d.probe": "上次联网检查", "mac.d.switch": "上次切换", "mac.d.hint": "路由器提示",
|
|
2813
|
+
"mac.tether.title": "Wi-Fi 断开时改用手机热点", "mac.tether.blurb": "Wi-Fi 无法上网时切换到手机热点,Wi-Fi 恢复后再切回。短暂的抖动不会触发切换。",
|
|
2814
|
+
"mac.tether.switch": "自动切换", "mac.tether.switchHelp": "如果 Claude 正在回复,会稍等它完成后再切换。",
|
|
2815
|
+
"mac.net.wifi": "Wi-Fi", "mac.net.hotspot": "手机热点", "mac.net.none": "未连接",
|
|
2816
|
+
"mac.tstate.off": "自动切换已关闭", "mac.tstate.unsupported": "此电脑不支持", "mac.tstate.no-wifi-device": "未找到 Wi-Fi 硬件", "mac.tstate.watching": "正在确认网络是否正常",
|
|
2817
|
+
"mac.tstate.no-wifi": "未连接 Wi-Fi", "mac.tstate.outage": "Wi-Fi 无法上网", "mac.tstate.pinned": "正在保持当前网络", "mac.tstate.joining-hotspot": "正在加入手机热点…",
|
|
2818
|
+
"mac.tstate.on-hotspot": "正在使用热点 · Wi-Fi 恢复后切回", "mac.tstate.returning": "正在尝试切回 Wi-Fi…", "mac.tstate.hotspot-not-visible": "看不到手机热点",
|
|
2819
|
+
"mac.tstate.join-failed": "无法加入热点", "mac.tstate.needs-setup": "需要再次输入 Mac 密码", "mac.tstate.no-hotspot-ssid": "尚未设置热点名称",
|
|
2820
|
+
"mac.tstate.no-hotspot-profile": "从未连接过此热点", "mac.hint.no-hotspot-profile": "请先在 Windows 的 Wi-Fi 菜单中连接一次该热点,让 Windows 保存密码;之后就能按名称自动切换。",
|
|
2821
|
+
"mac.tstate.needs-location": "定位服务已关闭", "mac.hint.needs-location": "Windows 11 24H2 及以上需要开启定位才能切换 Wi-Fi:在「设置 › 隐私和安全性 › 位置」中开启定位服务,并允许「桌面应用访问你的位置」。",
|
|
2822
|
+
"mac.switch.toHotspot": "{time} 切换到热点", "mac.switch.toWifi": "{time} 切回 Wi-Fi", "mac.switch.failed": "{time} 切换失败",
|
|
2823
|
+
"mac.hint.title": "需要检查",
|
|
2824
|
+
"mac.hint.hotspot-not-visible": "请在手机上打开一次热点界面(iPhone:设置 › 个人热点;Android:设置 › 热点和网络共享 › Wi-Fi 热点)。闲置的手机将停止广播热点。另请保持「允许其他人加入」开启。",
|
|
2825
|
+
"mac.hint.join-failed": "请确认热点名称正确,并且这台笔记本至少加入过该热点一次——笔记本会记住当时的密码。",
|
|
2826
|
+
"mac.hint.no-wifi": "完全没有 Wi-Fi 时,笔记本可能会自行加入手机热点。请检查下方的设置。",
|
|
2827
|
+
"mac.hint.no-hotspot-ssid": "请在下方「手机热点名称」中设置名称。",
|
|
2828
|
+
"mac.hint.needs-setup": "热点名称已更改或权限已被移除。请在下方重新设置热点名称,会询问一次 Mac 密码。",
|
|
2829
|
+
"mac.tether.help": "要让 Mac 连上热点:先在这台 Mac 上手动连接一次手机热点,让它记住密码。如果是 iPhone,在「系统设置 › Wi-Fi」中将「询问是否加入热点」设为「自动」,两台设备登录同一个 Apple 账户并保持蓝牙开启,会更容易连上。",
|
|
2830
|
+
"mac.tether.helpWin": "要让 Windows 连上热点:先在 Wi-Fi 菜单中连接一次,让 Windows 保存密码;另保留一个会自动连接的 Wi-Fi 网络以便切回。Windows 11 24H2 及以上需在「设置 › 隐私和安全性 › 位置」中开启定位,并允许「桌面应用访问你的位置」。",
|
|
2831
|
+
"mac.unsupported.title": "此电脑不支持", "mac.unsupported.body": "合盖保持唤醒和手机热点切换可在 macOS 和 Windows 上使用。",
|
|
2832
|
+
"mac.unavailable.title": "此版本尚无此功能", "mac.unavailable.body": "更新 ClaudeRipple 后即可在这里管理笔记本。",
|
|
2833
|
+
});
|
|
2834
|
+
Object.assign(I18N.ja, {
|
|
2835
|
+
"nav.mac": "ノートPC の管理", "nav.macShort": "ノートPC", "mac.title": "ノートPC の管理", "mac.subtitle": "席を外している間も、このノートPC で Claude が作業を続けられるようにします。",
|
|
2836
|
+
"mac.setup.title": "Mac のパスワードが一度だけ必要です", "mac.setup.lead": "次のことを ClaudeRipple が自動で行えるよう許可してください。",
|
|
2837
|
+
"mac.setup.allowSleep": "Mac のスリープをオフにし、元に戻す", "mac.setup.allowLid": "ふたを閉じた Mac をスリープさせる", "mac.setup.allowHotspot": "指定したスマートフォンのインターネット共有に接続する",
|
|
2838
|
+
"mac.setup.private": "パスワードは macOS 自身のウインドウに入力するため ClaudeRipple からは見えず、この 3 つ以外は許可されません。", "mac.setup.insomnia": "同じことをする Insomnia アプリを使っていた場合は、このときに片付けます。",
|
|
2839
|
+
"mac.setup.button": "設定する", "mac.setup.running": "設定中…", "mac.setup.waiting": "Mac のパスワード入力画面が開きました", "mac.setup.waitingSub": "Mac の画面に表示されたウインドウに Mac のログインパスワードを入力してください。終わると結果がここに表示されます。",
|
|
2840
|
+
"mac.setup.waitingWin": "設定を確認しています", "mac.setup.waitingSubWin": "Windows は管理者権限が不要なため、パスワードは尋ねません。終わると結果がここに表示されます。",
|
|
2841
|
+
"mac.setup.done": "設定が完了しました。", "mac.setup.failed": "設定できませんでした。", "mac.setup.cancelled": "キャンセルしました。何も変更していません。",
|
|
2842
|
+
"mac.ssid.label": "スマートフォンのインターネット共有名", "mac.ssid.placeholder": "例: わたしのスマホ", "mac.ssid.help": "スマートフォンのインターネット共有に表示される名前です(iPhone:設定 › インターネット共有、Android:設定 › テザリング › Wi-Fi テザリング)。空欄にするとスリープ防止だけを設定します。",
|
|
2843
|
+
"mac.ssid.invalid": "名前に使えるのは英字、数字、スペースと . _ - ' だけです(32 文字まで)。スマートフォンの名前を変えると共有名も変わることがあります。",
|
|
2844
|
+
"mac.ssid.change": "変更", "mac.ssid.set": "設定", "mac.ssid.none": "未設定",
|
|
2845
|
+
"mac.rename.title": "共有名を変更", "mac.rename.titleNew": "共有名を設定", "mac.rename.help": "このノートPC が接続するスマートフォンのインターネット共有を選びます。保存すると設定をもう一度確認します。", "mac.rename.save": "保存",
|
|
2846
|
+
"mac.tomorrowAt": "明日 {time}",
|
|
2847
|
+
"mac.awake.title": "ふたを閉じてもスリープしない", "mac.awake.blurb": "ノートPC のふたを閉じても動き続けるので、スマートフォンから頼んだ作業を Claude が続けられます。",
|
|
2848
|
+
"mac.awake.on": "現在スリープしません", "mac.awake.off": "スリープ可",
|
|
2849
|
+
"mac.why.off": "スリープ防止はオフです", "mac.why.on": "常にオン", "mac.why.onUntil": "{time} までオン", "mac.why.working": "Claude が作業中",
|
|
2850
|
+
"mac.why.recent": "Claude は {min} 分前に作業を終えました · 10 分間はスリープしません", "mac.why.idle": "Claude は 10 分以上作業していません", "mac.why.until": "終了時刻を過ぎました",
|
|
2851
|
+
"mac.why.battery": "バッテリーが {floor}% 未満のため、スリープ防止をやめました", "mac.why.thermal": "ノートPC が熱くなったため、スリープ防止をやめました", "mac.why.error": "バッテリーや温度を読み取れないため、安全のためスリープ防止をやめました",
|
|
2852
|
+
"mac.why.setup": "Mac のパスワードが一度必要です", "mac.why.failed": "スリープ設定を変更できませんでした", "mac.why.starting": "確認中…",
|
|
2853
|
+
"mac.fact.battery": "バッテリー {percent}%", "mac.fact.charging": "バッテリー {percent}% · 電源接続中", "mac.fact.lidClosed": "ふた閉", "mac.fact.lidOpen": "ふた開", "mac.fact.hot": "高温",
|
|
2854
|
+
"mac.mode.label": "スリープ防止", "mac.mode.off": "オフ", "mac.mode.working": "作業中のみ", "mac.mode.on": "常にオン",
|
|
2855
|
+
"mac.mode.offHelp": "ノートPC はいつもどおりスリープします。", "mac.mode.workingHelp": "Claude の作業中と、終わってから 10 分間はスリープしません。", "mac.mode.onHelp": "オフにするか終了時刻になるまでスリープしません。",
|
|
2856
|
+
"mac.until.label": "終了時刻", "mac.until.clear": "消去", "mac.until.set": "{time} にスリープを再び許可します。", "mac.until.none": "空欄のままなら、オフにするまで続けます。",
|
|
2857
|
+
"mac.awake.safety": "バッテリーが {floor}% を下回るかノートPC が熱くなると、自動でスリープ防止をやめ、ふたが閉じていればノートPC をスリープさせます。スリープしない間はバッグなど密閉された場所に入れないでください。",
|
|
2858
|
+
"mac.details": "詳細",
|
|
2859
|
+
"mac.d.reason": "判断の理由", "mac.d.applied": "スリープ阻止", "mac.d.battery": "バッテリー", "mac.d.thermal": "温度", "mac.d.lid": "ふた", "mac.d.until": "終了時刻",
|
|
2860
|
+
"mac.d.state": "状態", "mac.d.network": "ネットワーク", "mac.d.probe": "最後の接続確認", "mac.d.switch": "最後の切り替え", "mac.d.hint": "ルーターのメモ",
|
|
2861
|
+
"mac.tether.title": "Wi-Fi が切れたらスマートフォンのインターネット共有へ", "mac.tether.blurb": "Wi-Fi でインターネットにつながらないときはスマートフォンのインターネット共有に切り替え、Wi-Fi が戻れば元に戻します。一瞬の途切れでは切り替えません。",
|
|
2862
|
+
"mac.tether.switch": "自動で切り替える", "mac.tether.switchHelp": "Claude が応答中なら、終わるまで少し待ってから切り替えます。",
|
|
2863
|
+
"mac.net.wifi": "Wi-Fi", "mac.net.hotspot": "スマートフォンのインターネット共有", "mac.net.none": "未接続",
|
|
2864
|
+
"mac.tstate.off": "自動切り替えはオフです", "mac.tstate.unsupported": "このコンピューターでは使えません", "mac.tstate.no-wifi-device": "Wi-Fi ハードウェアが見つかりません", "mac.tstate.watching": "インターネットにつながるか見守っています",
|
|
2865
|
+
"mac.tstate.no-wifi": "Wi-Fi に接続していません", "mac.tstate.outage": "Wi-Fi でインターネットにつながりません", "mac.tstate.pinned": "このネットワークを維持しています", "mac.tstate.joining-hotspot": "スマートフォンのインターネット共有に接続中…",
|
|
2866
|
+
"mac.tstate.on-hotspot": "インターネット共有を使用中 · Wi-Fi が戻れば切り替えます", "mac.tstate.returning": "Wi-Fi に戻れるか試しています…", "mac.tstate.hotspot-not-visible": "スマートフォンのインターネット共有が見えません",
|
|
2867
|
+
"mac.tstate.join-failed": "インターネット共有に接続できませんでした", "mac.tstate.needs-setup": "Mac のパスワードがもう一度必要です", "mac.tstate.no-hotspot-ssid": "共有名が未設定です",
|
|
2868
|
+
"mac.tstate.no-hotspot-profile": "このインターネット共有に接続したことがありません", "mac.hint.no-hotspot-profile": "Windows の Wi-Fi メニューから一度そのインターネット共有に接続してパスワードを保存させてください。以後は名前で自動的に切り替えます。",
|
|
2869
|
+
"mac.tstate.needs-location": "位置情報サービスがオフです", "mac.hint.needs-location": "Windows 11 24H2 以降では Wi-Fi を切り替えるのに位置情報が必要です。「設定 › プライバシーとセキュリティ › 位置情報」で位置情報サービスと「デスクトップ アプリに位置情報へのアクセスを許可する」をオンにしてください。",
|
|
2870
|
+
"mac.switch.toHotspot": "{time} インターネット共有へ切り替え", "mac.switch.toWifi": "{time} Wi-Fi に復帰", "mac.switch.failed": "{time} 切り替え失敗",
|
|
2871
|
+
"mac.hint.title": "確認が必要です",
|
|
2872
|
+
"mac.hint.hotspot-not-visible": "スマートフォンでインターネット共有の画面を一度開いてください(iPhone:設定 › インターネット共有、Android:設定 › テザリング › Wi-Fi テザリング)。使っていないスマートフォンは共有を知らせなくなります。「ほかの人の接続を許可」もオンにしてください。",
|
|
2873
|
+
"mac.hint.join-failed": "共有名が正しいか、このノートPC がそのインターネット共有に一度でも接続したことがあるか確認してください。ノートPC はそのときのパスワードを覚えています。",
|
|
2874
|
+
"mac.hint.no-wifi": "Wi-Fi がまったくないときは、ノートPC が自分でスマートフォンのインターネット共有に接続することがあります。下の設定を確認してください。",
|
|
2875
|
+
"mac.hint.no-hotspot-ssid": "下の「スマートフォンのインターネット共有名」で名前を設定してください。",
|
|
2876
|
+
"mac.hint.needs-setup": "共有名が変わったか、許可が削除されました。下で共有名をもう一度設定すると、Mac のパスワードを一度確認します。",
|
|
2877
|
+
"mac.tether.help": "Mac が共有に接続できるように:この Mac で一度スマートフォンのテザリングに手動で接続し、パスワードを保存してください。iPhone の場合は「システム設定 › Wi-Fi」で「インターネット共有への接続を確認」を「自動」にし、同じ Apple アカウントにサインインして Bluetooth をオンにすると、より確実に接続できます。",
|
|
2878
|
+
"mac.tether.helpWin": "Windows で共有を使うには:Wi-Fi メニューから一度接続してパスワードを保存させ、戻り先用に自動接続する Wi-Fi を 1 つ残してください。Windows 11 24H2 以降では「設定 › プライバシーとセキュリティ › 位置情報」をオンにし、「デスクトップ アプリに位置情報へのアクセスを許可する」も有効にしてください。",
|
|
2879
|
+
"mac.unsupported.title": "このコンピューターでは使えません", "mac.unsupported.body": "ふたを閉じてもスリープしない機能とスマートフォンのインターネット共有への切り替えは macOS と Windows で動作します。",
|
|
2880
|
+
"mac.unavailable.title": "このバージョンにはまだありません", "mac.unavailable.body": "ClaudeRipple をアップデートすると、ここでノートPC を管理できます。",
|
|
2881
|
+
});
|
|
2882
|
+
Object.assign(I18N.es, {
|
|
2883
|
+
"nav.mac": "Portátil", "nav.macShort": "Portátil", "mac.title": "Portátil", "mac.subtitle": "Que Claude siga trabajando en este portátil mientras no estás delante.",
|
|
2884
|
+
"mac.setup.title": "Tu contraseña del Mac, solo una vez", "mac.setup.lead": "Permite que ClaudeRipple haga esto por su cuenta:",
|
|
2885
|
+
"mac.setup.allowSleep": "Desactivar el reposo del Mac y volver a activarlo", "mac.setup.allowLid": "Poner en reposo un Mac con la tapa cerrada", "mac.setup.allowHotspot": "Conectarse al punto de acceso del teléfono que indiques",
|
|
2886
|
+
"mac.setup.private": "La contraseña se escribe en la ventana de macOS; ClaudeRipple nunca la ve y no obtiene ningún permiso aparte de estos tres.", "mac.setup.insomnia": "Si usabas la app Insomnia, que hace lo mismo, se limpia en este paso.",
|
|
2887
|
+
"mac.setup.button": "Configurar", "mac.setup.running": "Configurando…", "mac.setup.waiting": "Se abrió la ventana de contraseña del Mac", "mac.setup.waitingSub": "Escribe la contraseña de inicio de sesión del Mac en la ventana que aparece en su pantalla. El resultado se mostrará aquí.",
|
|
2888
|
+
"mac.setup.waitingWin": "Comprobando la configuración", "mac.setup.waitingSubWin": "Windows no necesita permisos de administrador, así que no se pide contraseña. El resultado se mostrará aquí.",
|
|
2889
|
+
"mac.setup.done": "Configuración terminada.", "mac.setup.failed": "No se pudo completar la configuración.", "mac.setup.cancelled": "Cancelado. No se cambió nada.",
|
|
2890
|
+
"mac.ssid.label": "Nombre del punto de acceso del teléfono", "mac.ssid.placeholder": "p. ej. Mi teléfono", "mac.ssid.help": "El nombre que aparece en los ajustes de punto de acceso del teléfono (iPhone: Ajustes › Punto de acceso personal; Android: Ajustes › Zona Wi-Fi y anclaje a red › Zona Wi-Fi). Déjalo vacío para configurar solo mantenerse despierto.",
|
|
2891
|
+
"mac.ssid.invalid": "El nombre solo admite letras inglesas, números, espacios y . _ - ' (hasta 32). Cambiar el nombre del teléfono también puede cambiar el del punto de acceso.",
|
|
2892
|
+
"mac.ssid.change": "Cambiar", "mac.ssid.set": "Definir", "mac.ssid.none": "Sin definir",
|
|
2893
|
+
"mac.rename.title": "Cambiar el nombre del punto de acceso", "mac.rename.titleNew": "Definir el punto de acceso", "mac.rename.help": "Elige el punto de acceso del teléfono al que puede conectarse este portátil. Al guardar se comprueba la configuración una vez más.", "mac.rename.save": "Guardar",
|
|
2894
|
+
"mac.tomorrowAt": "mañana {time}",
|
|
2895
|
+
"mac.awake.title": "Despierto con la tapa cerrada", "mac.awake.blurb": "Cierra el portátil y sigue funcionando, así Claude continúa con lo que le encargas desde el teléfono.",
|
|
2896
|
+
"mac.awake.on": "Despierto ahora", "mac.awake.off": "Reposo permitido",
|
|
2897
|
+
"mac.why.off": "Mantenerse despierto está desactivado", "mac.why.on": "Siempre activado", "mac.why.onUntil": "Activado hasta las {time}", "mac.why.working": "Claude está trabajando",
|
|
2898
|
+
"mac.why.recent": "Claude terminó hace {min} min · sigue despierto 10 min", "mac.why.idle": "Claude lleva más de 10 minutos sin trabajar", "mac.why.until": "Ya pasó la hora de fin",
|
|
2899
|
+
"mac.why.battery": "Dejó de mantenerse despierto: batería por debajo del {floor}%", "mac.why.thermal": "Dejó de mantenerse despierto: el portátil está caliente", "mac.why.error": "Dejó de mantenerse despierto por seguridad: no se pudo leer la batería o la temperatura",
|
|
2900
|
+
"mac.why.setup": "Necesita tu contraseña del Mac una vez", "mac.why.failed": "No se pudo cambiar el ajuste de reposo", "mac.why.starting": "Comprobando…",
|
|
2901
|
+
"mac.fact.battery": "Batería {percent}%", "mac.fact.charging": "Batería {percent}% · conectado", "mac.fact.lidClosed": "Tapa cerrada", "mac.fact.lidOpen": "Tapa abierta", "mac.fact.hot": "Caliente",
|
|
2902
|
+
"mac.mode.label": "Mantener despierto", "mac.mode.off": "No", "mac.mode.working": "Mientras trabaja", "mac.mode.on": "Siempre",
|
|
2903
|
+
"mac.mode.offHelp": "El portátil entra en reposo como siempre.", "mac.mode.workingHelp": "Despierto mientras Claude trabaja y 10 minutos después.", "mac.mode.onHelp": "Despierto hasta que lo apagues o llegue la hora de fin.",
|
|
2904
|
+
"mac.until.label": "Hasta", "mac.until.clear": "Borrar", "mac.until.set": "El reposo vuelve a permitirse a las {time}.", "mac.until.none": "Déjalo vacío para mantenerlo hasta que lo apagues.",
|
|
2905
|
+
"mac.awake.safety": "Si la batería baja del {floor}% o el portátil se calienta, deja de mantenerse despierto y, con la tapa cerrada, pone el portátil en reposo. Mientras esté despierto, nunca lo guardes en una mochila ni en un lugar cerrado.",
|
|
2906
|
+
"mac.details": "Detalles",
|
|
2907
|
+
"mac.d.reason": "Motivo", "mac.d.applied": "Reposo bloqueado", "mac.d.battery": "Batería", "mac.d.thermal": "Temperatura", "mac.d.lid": "Tapa", "mac.d.until": "Hasta",
|
|
2908
|
+
"mac.d.state": "Estado", "mac.d.network": "Red", "mac.d.probe": "Última comprobación de internet", "mac.d.switch": "Último cambio", "mac.d.hint": "Nota del router",
|
|
2909
|
+
"mac.tether.title": "Punto de acceso del teléfono si se cae el Wi-Fi", "mac.tether.blurb": "Cuando el Wi-Fi no tiene internet, el portátil pasa al punto de acceso del teléfono y vuelve cuando el Wi-Fi funciona de nuevo. Un corte breve no lo mueve.",
|
|
2910
|
+
"mac.tether.switch": "Cambiar automáticamente", "mac.tether.switchHelp": "Si Claude está respondiendo, espera un poco a que termine antes de cambiar.",
|
|
2911
|
+
"mac.net.wifi": "Wi-Fi", "mac.net.hotspot": "Punto de acceso del teléfono", "mac.net.none": "Sin conexión",
|
|
2912
|
+
"mac.tstate.off": "El cambio automático está desactivado", "mac.tstate.unsupported": "No disponible en este equipo", "mac.tstate.no-wifi-device": "No se encontró hardware Wi-Fi", "mac.tstate.watching": "Vigilando que internet funcione",
|
|
2913
|
+
"mac.tstate.no-wifi": "Sin conexión Wi-Fi", "mac.tstate.outage": "El Wi-Fi no tiene internet", "mac.tstate.pinned": "Se mantiene en esta red", "mac.tstate.joining-hotspot": "Conectándose al punto de acceso del teléfono…",
|
|
2914
|
+
"mac.tstate.on-hotspot": "En el punto de acceso · vuelve cuando regrese el Wi-Fi", "mac.tstate.returning": "Probando de nuevo el Wi-Fi…", "mac.tstate.hotspot-not-visible": "No se ve el punto de acceso del teléfono",
|
|
2915
|
+
"mac.tstate.join-failed": "No se pudo conectar al punto de acceso", "mac.tstate.needs-setup": "Necesita de nuevo tu contraseña del Mac", "mac.tstate.no-hotspot-ssid": "No hay nombre de punto de acceso",
|
|
2916
|
+
"mac.tstate.no-hotspot-profile": "Nunca se ha conectado a este punto de acceso", "mac.hint.no-hotspot-profile": "Conéctate a ese punto de acceso una vez desde el menú Wi-Fi de Windows para que guarde la contraseña; desde entonces ClaudeRipple cambia a él por su nombre.",
|
|
2917
|
+
"mac.tstate.needs-location": "Los servicios de ubicación están desactivados", "mac.hint.needs-location": "Windows 11 24H2 o posterior necesita la ubicación activada para cambiar el Wi-Fi: actívala, junto con «Permitir que las aplicaciones de escritorio accedan a tu ubicación», en Configuración › Privacidad y seguridad › Ubicación.",
|
|
2918
|
+
"mac.switch.toHotspot": "Pasó al punto de acceso {time}", "mac.switch.toWifi": "Volvió al Wi-Fi {time}", "mac.switch.failed": "Falló el cambio {time}",
|
|
2919
|
+
"mac.hint.title": "Hay que revisar algo",
|
|
2920
|
+
"mac.hint.hotspot-not-visible": "Abre una vez el punto de acceso en el teléfono (iPhone: Ajustes › Punto de acceso personal; Android: Ajustes › Zona Wi-Fi y anclaje a red › Zona Wi-Fi). Un teléfono inactivo deja de anunciarlo. Mantén también activado «Permitir a otros conectarse».",
|
|
2921
|
+
"mac.hint.join-failed": "Comprueba el nombre del punto de acceso y que este portátil se haya conectado a él al menos una vez: el portátil recuerda su contraseña desde entonces.",
|
|
2922
|
+
"mac.hint.no-wifi": "Sin ningún Wi-Fi, el portátil puede conectarse solo al punto de acceso del teléfono. Revisa el ajuste de abajo.",
|
|
2923
|
+
"mac.hint.no-hotspot-ssid": "Define un nombre en «Nombre del punto de acceso del teléfono», abajo.",
|
|
2924
|
+
"mac.hint.needs-setup": "El nombre del punto de acceso cambió o se quitó el permiso. Vuelve a definir el nombre abajo; pedirá tu contraseña del Mac una vez.",
|
|
2925
|
+
"mac.tether.help": "Para que el Mac se conecte al punto de acceso: conéctate una vez a mano desde este Mac al punto de acceso del teléfono para que guarde la contraseña. Con un iPhone se conecta mejor si en Ajustes del Sistema › Wi-Fi la conexión a puntos de acceso está en Automático, usas la misma cuenta de Apple en ambos y el Bluetooth está activado.",
|
|
2926
|
+
"mac.tether.helpWin": "Para que Windows use el punto de acceso: conéctate a él una vez desde el menú Wi-Fi para que Windows guarde la contraseña y deja otra red Wi-Fi en conexión automática para volver. En Windows 11 24H2 o posterior activa Configuración › Privacidad y seguridad › Ubicación, incluida «Permitir que las aplicaciones de escritorio accedan a tu ubicación».",
|
|
2927
|
+
"mac.unsupported.title": "No disponible en este equipo", "mac.unsupported.body": "Mantenerse despierto con la tapa cerrada y el cambio al punto de acceso del teléfono funcionan en macOS y Windows.",
|
|
2928
|
+
"mac.unavailable.title": "Aún no está en esta versión", "mac.unavailable.body": "Actualiza ClaudeRipple para gestionar el portátil desde aquí.",
|
|
2929
|
+
});
|
|
2930
|
+
Object.assign(I18N.pt, {
|
|
2931
|
+
"nav.mac": "Notebook", "nav.macShort": "Notebook", "mac.title": "Notebook", "mac.subtitle": "Deixe o Claude trabalhando neste notebook enquanto você está longe dele.",
|
|
2932
|
+
"mac.setup.title": "Sua senha do Mac, só uma vez", "mac.setup.lead": "Permita que o ClaudeRipple faça isto sozinho:",
|
|
2933
|
+
"mac.setup.allowSleep": "Desativar e reativar o repouso do Mac", "mac.setup.allowLid": "Colocar em repouso um Mac com a tampa fechada", "mac.setup.allowHotspot": "Entrar no Acesso Pessoal do celular que você indicar",
|
|
2934
|
+
"mac.setup.private": "A senha é digitada na janela do próprio macOS; o ClaudeRipple nunca a vê e não recebe nenhuma permissão além destas três.", "mac.setup.insomnia": "Se você usava o app Insomnia, que faz o mesmo, ele é removido nesta etapa.",
|
|
2935
|
+
"mac.setup.button": "Configurar", "mac.setup.running": "Configurando…", "mac.setup.waiting": "A janela de senha do Mac está aberta", "mac.setup.waitingSub": "Digite a senha de login do Mac na janela que apareceu na tela dele. O resultado aparece aqui ao terminar.",
|
|
2936
|
+
"mac.setup.waitingWin": "Verificando a configuração", "mac.setup.waitingSubWin": "O Windows não precisa de permissões de administrador, então nenhuma senha é pedida. O resultado aparece aqui ao terminar.",
|
|
2937
|
+
"mac.setup.done": "Configuração concluída.", "mac.setup.failed": "Não foi possível concluir a configuração.", "mac.setup.cancelled": "Cancelado. Nada foi alterado.",
|
|
2938
|
+
"mac.ssid.label": "Nome do Acesso Pessoal do celular", "mac.ssid.placeholder": "ex.: Meu celular", "mac.ssid.help": "O nome mostrado nas configurações de Acesso Pessoal do celular (iPhone: Ajustes › Acesso Pessoal; Android: Configurações › Ancoragem e roteador › Roteador Wi-Fi). Deixe vazio para configurar só manter acordado.",
|
|
2939
|
+
"mac.ssid.invalid": "O nome só aceita letras sem acento, números, espaços e . _ - ' (até 32). Renomear o celular também pode renomear o Acesso Pessoal.",
|
|
2940
|
+
"mac.ssid.change": "Alterar", "mac.ssid.set": "Definir", "mac.ssid.none": "Não definido",
|
|
2941
|
+
"mac.rename.title": "Alterar o nome do Acesso Pessoal", "mac.rename.titleNew": "Definir o Acesso Pessoal", "mac.rename.help": "Escolha o Acesso Pessoal do celular em que este notebook pode entrar. Ao salvar, a configuração é verificada mais uma vez.", "mac.rename.save": "Salvar",
|
|
2942
|
+
"mac.tomorrowAt": "amanhã {time}",
|
|
2943
|
+
"mac.awake.title": "Acordado com a tampa fechada", "mac.awake.blurb": "Feche o notebook e ele continua ligado, para o Claude seguir com o que você pede pelo celular.",
|
|
2944
|
+
"mac.awake.on": "Acordado agora", "mac.awake.off": "Repouso permitido",
|
|
2945
|
+
"mac.why.off": "Manter acordado está desativado", "mac.why.on": "Sempre ativado", "mac.why.onUntil": "Ativado até {time}", "mac.why.working": "O Claude está trabalhando",
|
|
2946
|
+
"mac.why.recent": "O Claude terminou há {min} min · fica acordado por 10 min", "mac.why.idle": "O Claude está parado há mais de 10 minutos", "mac.why.until": "O horário de fim já passou",
|
|
2947
|
+
"mac.why.battery": "Parou de manter acordado: bateria abaixo de {floor}%", "mac.why.thermal": "Parou de manter acordado: o notebook está quente", "mac.why.error": "Parou de manter acordado por segurança: não foi possível ler a bateria ou a temperatura",
|
|
2948
|
+
"mac.why.setup": "Precisa da sua senha do Mac uma vez", "mac.why.failed": "Não foi possível alterar o repouso", "mac.why.starting": "Verificando…",
|
|
2949
|
+
"mac.fact.battery": "Bateria {percent}%", "mac.fact.charging": "Bateria {percent}% · na tomada", "mac.fact.lidClosed": "Tampa fechada", "mac.fact.lidOpen": "Tampa aberta", "mac.fact.hot": "Quente",
|
|
2950
|
+
"mac.mode.label": "Manter acordado", "mac.mode.off": "Não", "mac.mode.working": "Enquanto trabalha", "mac.mode.on": "Sempre",
|
|
2951
|
+
"mac.mode.offHelp": "O notebook entra em repouso normalmente.", "mac.mode.workingHelp": "Acordado enquanto o Claude trabalha e por 10 minutos depois.", "mac.mode.onHelp": "Acordado até você desligar ou chegar o horário de fim.",
|
|
2952
|
+
"mac.until.label": "Até", "mac.until.clear": "Limpar", "mac.until.set": "O repouso volta a ser permitido às {time}.", "mac.until.none": "Deixe vazio para manter até você desligar.",
|
|
2953
|
+
"mac.awake.safety": "Se a bateria ficar abaixo de {floor}% ou o notebook esquentar, ele para de ficar acordado e, com a tampa fechada, coloca o notebook em repouso. Enquanto estiver acordado, nunca o guarde numa mochila ou em lugar fechado.",
|
|
2954
|
+
"mac.details": "Detalhes",
|
|
2955
|
+
"mac.d.reason": "Motivo", "mac.d.applied": "Repouso bloqueado", "mac.d.battery": "Bateria", "mac.d.thermal": "Temperatura", "mac.d.lid": "Tampa", "mac.d.until": "Até",
|
|
2956
|
+
"mac.d.state": "Estado", "mac.d.network": "Rede", "mac.d.probe": "Última verificação de internet", "mac.d.switch": "Última troca", "mac.d.hint": "Nota do roteador",
|
|
2957
|
+
"mac.tether.title": "Acesso Pessoal do celular quando o Wi-Fi cai", "mac.tether.blurb": "Quando o Wi-Fi fica sem internet, o notebook passa para o Acesso Pessoal do celular e volta quando o Wi-Fi funciona de novo. Uma queda rápida não faz trocar.",
|
|
2958
|
+
"mac.tether.switch": "Trocar automaticamente", "mac.tether.switchHelp": "Se o Claude estiver respondendo, espera um pouco ele terminar antes de trocar.",
|
|
2959
|
+
"mac.net.wifi": "Wi-Fi", "mac.net.hotspot": "Acesso Pessoal do celular", "mac.net.none": "Sem conexão",
|
|
2960
|
+
"mac.tstate.off": "A troca automática está desativada", "mac.tstate.unsupported": "Indisponível neste computador", "mac.tstate.no-wifi-device": "Nenhum hardware Wi-Fi encontrado", "mac.tstate.watching": "Verificando se a internet funciona",
|
|
2961
|
+
"mac.tstate.no-wifi": "Sem conexão Wi-Fi", "mac.tstate.outage": "O Wi-Fi está sem internet", "mac.tstate.pinned": "Mantendo esta rede", "mac.tstate.joining-hotspot": "Entrando no Acesso Pessoal do celular…",
|
|
2962
|
+
"mac.tstate.on-hotspot": "No Acesso Pessoal · volta quando o Wi-Fi voltar", "mac.tstate.returning": "Tentando o Wi-Fi de novo…", "mac.tstate.hotspot-not-visible": "O Acesso Pessoal do celular não aparece",
|
|
2963
|
+
"mac.tstate.join-failed": "Não foi possível entrar no Acesso Pessoal", "mac.tstate.needs-setup": "Precisa da sua senha do Mac de novo", "mac.tstate.no-hotspot-ssid": "Nenhum nome de Acesso Pessoal definido",
|
|
2964
|
+
"mac.tstate.no-hotspot-profile": "Nunca se conectou a este Acesso Pessoal", "mac.hint.no-hotspot-profile": "Conecte-se a esse Acesso Pessoal uma vez pelo menu Wi-Fi do Windows para que ele guarde a senha; a partir daí o ClaudeRipple troca para ele pelo nome.",
|
|
2965
|
+
"mac.tstate.needs-location": "Os serviços de localização estão desativados", "mac.hint.needs-location": "O Windows 11 24H2 ou posterior precisa da localização ativada para trocar o Wi-Fi: ative-a, junto com «Permitir que aplicativos da área de trabalho acessem sua localização», em Configurações › Privacidade e segurança › Localização.",
|
|
2966
|
+
"mac.switch.toHotspot": "Passou ao Acesso Pessoal {time}", "mac.switch.toWifi": "Voltou ao Wi-Fi {time}", "mac.switch.failed": "Troca falhou {time}",
|
|
2967
|
+
"mac.hint.title": "Precisa de atenção",
|
|
2968
|
+
"mac.hint.hotspot-not-visible": "Abra uma vez o Acesso Pessoal no celular (iPhone: Ajustes › Acesso Pessoal; Android: Configurações › Ancoragem e roteador › Roteador Wi-Fi). Um celular parado deixa de anunciá-lo. Mantenha também «Permitir Outros» ativado.",
|
|
2969
|
+
"mac.hint.join-failed": "Confira o nome do Acesso Pessoal e se este notebook já entrou nele pelo menos uma vez — o notebook guarda a senha desde então.",
|
|
2970
|
+
"mac.hint.no-wifi": "Sem nenhum Wi-Fi, o notebook pode entrar sozinho no Acesso Pessoal do celular. Confira o ajuste abaixo.",
|
|
2971
|
+
"mac.hint.no-hotspot-ssid": "Defina um nome em «Nome do Acesso Pessoal do celular», abaixo.",
|
|
2972
|
+
"mac.hint.needs-setup": "O nome do Acesso Pessoal mudou ou a permissão foi removida. Defina o nome de novo abaixo; a senha do Mac será pedida uma vez.",
|
|
2973
|
+
"mac.tether.help": "Para o Mac entrar no ponto de acesso: conecte-se uma vez manualmente deste Mac ao ponto de acesso do telefone para que ele guarde a senha. Com um iPhone ele entra com mais facilidade se em Ajustes do Sistema › Wi-Fi a entrada em Acessos Pessoais estiver em Automático, a mesma Conta Apple estiver nos dois e o Bluetooth ligado.",
|
|
2974
|
+
"mac.tether.helpWin": "Para o Windows usar o Acesso Pessoal: entre nele uma vez pelo menu Wi-Fi para o Windows guardar a senha e mantenha outra rede Wi-Fi em conexão automática para a volta. No Windows 11 24H2 ou posterior, ative Configurações › Privacidade e segurança › Localização, incluindo «Permitir que aplicativos da área de trabalho acessem sua localização».",
|
|
2975
|
+
"mac.unsupported.title": "Indisponível neste computador", "mac.unsupported.body": "Ficar acordado com a tampa fechada e a troca para o Acesso Pessoal do celular funcionam no macOS e no Windows.",
|
|
2976
|
+
"mac.unavailable.title": "Ainda não está nesta versão", "mac.unavailable.body": "Atualize o ClaudeRipple para gerenciar o notebook por aqui.",
|
|
2977
|
+
});
|
|
2978
|
+
|
|
2378
2979
|
/** The languages offered, each named in itself, in the order the selector lists them. */
|
|
2379
2980
|
const LANGUAGES = [
|
|
2380
2981
|
["en", "English"], ["ko", "한국어"], ["zh", "简体中文"], ["ja", "日本語"], ["es", "Español"], ["pt", "Português (BR)"],
|