From a7642b0038840cd32e69278b7c9ee31fddee89e6 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:02:15 -0700 Subject: [PATCH 01/31] fix: gate Cloud command palette actions by capability --- .../Context/CommandPaletteContextKeys.swift | 5 ++ Sources/ContentView+AuthCommandPalette.swift | 71 ++++++++++++++++ Sources/ContentView.swift | 8 ++ .../ShortcutAndCommandPaletteTests.swift | 82 +++++++++++++++++++ docs/command-palette-cloud-parity.md | 35 ++++++++ 5 files changed, 201 insertions(+) create mode 100644 docs/command-palette-cloud-parity.md diff --git a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift index e10ee7d38867..ad048c36fa2b 100644 --- a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift +++ b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift @@ -15,6 +15,11 @@ public struct CommandPaletteContextKeys: Hashable, Sendable { /// Whether a workspace is selected. public static let hasWorkspace = CommandPaletteContextKeys(rawValue: "workspace.hasSelection") + /// Whether the selected workspace is owned by a managed Cloud machine. + /// + /// The app sets this key from the workspace's explicit Cloud VM identity. + /// SSH and other remote workspaces intentionally do not set it. + public static let workspaceIsCloud = CommandPaletteContextKeys(rawValue: "workspace.isCloud") /// Selected workspace display name. public static let workspaceName = CommandPaletteContextKeys(rawValue: "workspace.name") /// Whether the workspace has a custom name. diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index b2cd44e2180c..37e0fb4830ba 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -3,7 +3,78 @@ import CmuxCommandPalette import AppKit import Foundation +/// Describes where a command-palette action can run relative to a managed +/// Cloud workspace. The command materializer applies this once for every +/// contribution, keeping palette visibility aligned with the shared action +/// routing paths instead of duplicating gates in individual contributions. +enum CommandPaletteCloudCapability: Equatable { + /// The action is valid for both local and Cloud workspaces. + case shared + /// The action needs a selected Cloud workspace and its current VM. + case cloudOnly + /// The action creates or reads a resource on this Mac's local filesystem + /// or local browser stack and cannot target a Cloud workspace. + case localOnly +} + extension ContentView { + /// Returns the Cloud capability for every built-in command-palette action. + /// Unknown and user-configured actions remain shared so custom actions keep + /// their existing behavior unless they opt into their own routing checks. + static func commandPaletteCloudCapability(for commandId: String) -> CommandPaletteCloudCapability { + if commandId.hasPrefix("palette.terminalOpenDirectory.") { + return .localOnly + } + + switch commandId { + case commandPaletteCloudForkCommandId, + commandPaletteCloudSnapshotCommandId, + commandPaletteCloudRestoreCommandId, + commandPaletteCloudPromoteTemplateCommandId, + commandPaletteCloudStatusCommandId, + commandPaletteCloudPortsCommandId, + commandPaletteCloudToolsCommandId, + commandPaletteCloudHandoffCommandId: + return .cloudOnly + case "palette.newBrowserWorkspace", + "palette.newAgentChat", + "palette.newBrowserTab", + "palette.newSimulatorPane", + "palette.openFolder", + "palette.openFolderInVSCodeInline", + "palette.openWorkspacePullRequests", + "palette.openDiffViewer", + "palette.openDirectoryDiffViewer", + "palette.findInDirectory", + "palette.vscodeServeWebStop", + "palette.vscodeServeWebRestart", + "palette.browserSplitRight", + "palette.browserSplitDown", + "palette.terminalSplitBrowserRight", + "palette.terminalSplitBrowserDown": + return .localOnly + default: + return .shared + } + } + + /// Applies the capability classification to a palette context snapshot. + /// Cloud-only commands are scoped to the selected VM; local-only commands + /// are omitted while a Cloud workspace is selected. + static func commandPaletteCloudCapabilityAllows( + commandId: String, + context: CommandPaletteContextSnapshot + ) -> Bool { + switch commandPaletteCloudCapability(for: commandId) { + case .shared: + return true + case .cloudOnly: + return context.bool(CommandPaletteContextKeys.workspaceIsCloud) + case .localOnly: + return !context.bool(CommandPaletteContextKeys.workspaceIsCloud) + } + } + static let commandPaletteAuthSignInCommandId = "palette.auth.signIn" static let commandPaletteAuthSignOutCommandId = "palette.auth.signOut" static let commandPaletteAuthTeamPickerCommandId = "palette.auth.teamPicker" diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index ef1deea4bf8a..06391373c889 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7129,6 +7129,10 @@ struct ContentView: View { var nextRank = 0 for contribution in contributions { + guard Self.commandPaletteCloudCapabilityAllows( + commandId: contribution.commandId, + context: context + ) else { continue } let configuredPaletteAction = commandPaletteConfigActionID(for: contribution.commandId) .flatMap { cmuxConfigStore.resolvedAction(id: $0) } if let configuredPaletteAction, !configuredPaletteAction.palette { @@ -7265,6 +7269,10 @@ struct ContentView: View { let pinState = WorkspaceActionDispatcher.pinState(in: tabManager, target: pinTarget) snapshot.setBool(CommandPaletteContextKeys.hasWorkspace, true) snapshot.setBool(Self.commandPaletteWorkspaceIsRemoteKey, workspace.isRemoteWorkspace) + snapshot.setBool( + CommandPaletteContextKeys.workspaceIsCloud, + workspace.isManagedCloudVMWorkspace || workspace.cloudVMID != nil + ) snapshot.setString(CommandPaletteContextKeys.workspaceName, workspaceDisplayName(workspace)) snapshot.setBool(CommandPaletteContextKeys.workspaceHasCustomName, workspace.customTitle != nil) snapshot.setBool(CommandPaletteContextKeys.workspaceHasCustomDescription, workspace.hasCustomDescription) diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index 4eeef5684a0a..109a32af2669 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -870,6 +870,88 @@ final class CommandPaletteRenameSelectionSettingsTests: XCTestCase { } final class CommandPaletteCloudCommandTests: XCTestCase { + func testCloudCapabilityMatrixClassifiesRepresentativeCommands() { + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: "palette.newTerminalTab"), + .shared + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: "palette.terminalSplitRight"), + .shared + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: "palette.browserBack"), + .shared + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: ContentView.commandPaletteCloudStatusCommandId), + .cloudOnly + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: ContentView.commandPaletteCloudForkCommandId), + .cloudOnly + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: ContentView.commandPaletteCloudNewMachineCommandId), + .shared + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: "palette.browserSplitRight"), + .localOnly + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: "palette.openDirectoryDiffViewer"), + .localOnly + ) + XCTAssertEqual( + ContentView.commandPaletteCloudCapability(for: "palette.terminalOpenDirectory.finder"), + .localOnly + ) + } + + func testCloudCapabilityFilterHidesLocalActionsAndScopesCloudActions() { + var localContext = CommandPaletteContextSnapshot() + var cloudContext = CommandPaletteContextSnapshot() + cloudContext.setBool(CommandPaletteContextKeys.workspaceIsCloud, true) + + XCTAssertTrue( + ContentView.commandPaletteCloudCapabilityAllows( + commandId: "palette.terminalSplitRight", + context: localContext + ) + ) + XCTAssertTrue( + ContentView.commandPaletteCloudCapabilityAllows( + commandId: "palette.terminalSplitRight", + context: cloudContext + ) + ) + XCTAssertTrue( + ContentView.commandPaletteCloudCapabilityAllows( + commandId: ContentView.commandPaletteCloudStatusCommandId, + context: cloudContext + ) + ) + XCTAssertFalse( + ContentView.commandPaletteCloudCapabilityAllows( + commandId: ContentView.commandPaletteCloudStatusCommandId, + context: localContext + ) + ) + XCTAssertFalse( + ContentView.commandPaletteCloudCapabilityAllows( + commandId: "palette.browserSplitRight", + context: cloudContext + ) + ) + XCTAssertTrue( + ContentView.commandPaletteCloudCapabilityAllows( + commandId: "palette.browserSplitRight", + context: localContext + ) + ) + } + @MainActor func testCloudCommandPaletteIncludesCloudWorkspaceActions() { let key = BetaFeaturesCatalogSection().cloudMachines.userDefaultsKey diff --git a/docs/command-palette-cloud-parity.md b/docs/command-palette-cloud-parity.md new file mode 100644 index 000000000000..22e1be829210 --- /dev/null +++ b/docs/command-palette-cloud-parity.md @@ -0,0 +1,35 @@ +# Command palette actions in Cloud workspaces + +The Cmd-Shift-P palette uses the selected workspace's explicit Cloud machine +identity to decide which actions can target that workspace. The same action +paths used by shortcuts, menus, and the CLI remain responsible for execution; +the palette only applies the capability gate before it materializes a command. + +## Capability matrix + +| Capability | Palette actions | Local workspace | Cloud workspace | +| --- | --- | --- | --- | +| Shared | Workspace creation and lifecycle, workspace and tab names/colors/read state, pane navigation and sizing, terminal creation and splits, terminal search and input controls, copy/screen actions, Cloud browser navigation/focus/zoom/devtools/console/React Grab/history/duplicate, canvas/layout controls, notifications, settings, account actions, and **New Cloud Machine** | Shown when the normal context gate passes | Shown when the normal context gate passes; terminal creation/splits use the Cloud terminal reservation and remote placement path | +| Cloud-only | Fork, checkpoint, restore, promote-to-template, status, ports, tools, and agent handoff for the current Cloud VM | Hidden because there is no selected VM target | Shown only for the selected Cloud VM; handlers resolve that selected workspace rather than another open machine | +| Local-only | New browser workspace/tab, new Agent Chat, new Simulator pane, open a local folder or VS Code Inline folder, open workspace pull requests, diff viewers, directory search, VS Code serve-web stop/restart, browser splits, terminal-to-browser splits, and every `palette.terminalOpenDirectory.*` action | Shown when the normal context gate passes | Omitted because these create or inspect this Mac's local filesystem/browser/simulator resources | + +Agent conversation forks remain shared where the existing remote capability +probe confirms that the selected terminal can fork. A failed probe leaves the +action unavailable, preserving the provider's permission, loading, and failure +semantics. + +Cloud browser panes opened from the Cloud tree retain their Cloud resource +identity for navigation, zoom, developer tools, console, React Grab, history, +and duplication. Creating a new browser surface still requires a local browser +creation path, so browser creation and split commands are intentionally omitted +from a Cloud workspace until a Cloud browser creation route exists. + +## Verification + +To verify the routing against a real machine, select an authorized Cloud +workspace and open Cmd-Shift-P. Confirm that terminal tab/split, terminal +search/input, workspace metadata, Cloud browser navigation, and the Cloud VM +status action operate on the selected workspace. Confirm that the local-only +entries above are absent. Do not use a local SSH workspace as a proxy for this +check: SSH is remote, but it is not a managed Cloud workspace for palette +capability classification. From 940882472b148b0513978eeae389df718de863d7 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:24:59 -0700 Subject: [PATCH 02/31] refactor: centralize Cloud palette capability policy --- .../CommandPaletteCloudCapabilityPolicy.swift | 74 +++++ ...andPaletteCloudCapabilityPolicyTests.swift | 80 +++++ Resources/Localizable.xcstrings | 292 +++++++++++++++++- Sources/ContentView+AuthCommandPalette.swift | 110 +++---- Sources/ContentView.swift | 5 +- .../ShortcutAndCommandPaletteTests.swift | 84 +---- docs/command-palette-cloud-parity.md | 5 + 7 files changed, 492 insertions(+), 158 deletions(-) create mode 100644 Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift create mode 100644 Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift diff --git a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift new file mode 100644 index 000000000000..02c847553616 --- /dev/null +++ b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift @@ -0,0 +1,74 @@ +import Foundation + +/// Describes where a command-palette action can run relative to a managed +/// Cloud workspace. +public enum CommandPaletteCloudCapability: Equatable, Sendable { + /// The action is valid for both local and Cloud workspaces. + case shared + /// The action needs a selected Cloud workspace and its current VM. + case cloudOnly + /// The action creates or reads a resource on this Mac's local filesystem, + /// browser stack, or simulator and cannot target a Cloud workspace. + case localOnly +} + +/// Classifies built-in command-palette actions before they are materialized. +/// The app owns command contributions and handlers; this package owns the +/// pure capability decision so it can be tested without app singletons. +public enum CommandPaletteCloudCapabilityPolicy { + /// Returns the Cloud capability for a built-in command ID. Unknown and + /// user-configured actions remain shared unless they add their own gate. + public static func capability(for commandId: String) -> CommandPaletteCloudCapability { + if commandId.hasPrefix("palette.terminalOpenDirectory.") { + return .localOnly + } + + switch commandId { + case "palette.cloud.fork", + "palette.cloud.snapshot", + "palette.cloud.restore", + "palette.cloud.promoteTemplate", + "palette.cloud.status", + "palette.cloud.ports", + "palette.cloud.tools", + "palette.cloud.handoff": + return .cloudOnly + case "palette.newBrowserWorkspace", + "palette.newAgentChat", + "palette.newBrowserTab", + "palette.newSimulatorPane", + "palette.openFolder", + "palette.openFolderInVSCodeInline", + "palette.openWorkspacePullRequests", + "palette.openDiffViewer", + "palette.openDirectoryDiffViewer", + "palette.findInDirectory", + "palette.vscodeServeWebStop", + "palette.vscodeServeWebRestart", + "palette.browserSplitRight", + "palette.browserSplitDown", + "palette.terminalSplitBrowserRight", + "palette.terminalSplitBrowserDown": + return .localOnly + default: + return .shared + } + } + + /// Returns whether a command can be materialized for the supplied context. + /// Cloud-only commands require the selected Cloud workspace; local-only + /// commands are omitted while a Cloud workspace is selected. + public static func allows( + commandId: String, + context: CommandPaletteContextSnapshot + ) -> Bool { + switch capability(for: commandId) { + case .shared: + return true + case .cloudOnly: + return context.bool(CommandPaletteContextKeys.workspaceIsCloud) + case .localOnly: + return !context.bool(CommandPaletteContextKeys.workspaceIsCloud) + } + } +} diff --git a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift new file mode 100644 index 000000000000..c32b24bdef01 --- /dev/null +++ b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift @@ -0,0 +1,80 @@ +import CmuxCommandPalette +import Testing + +@Suite("Command palette Cloud capability policy") +struct CommandPaletteCloudCapabilityPolicyTests { + @Test("classifies representative shared, Cloud-only, and local-only commands") + func representativeCommandsHaveExpectedCapabilities() { + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.newTerminalTab") == .shared + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.terminalSplitRight") == .shared + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.browserBack") == .shared + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.cloud.status") == .cloudOnly + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.cloud.fork") == .cloudOnly + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.cloud.newMachine") == .shared + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.browserSplitRight") == .localOnly + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.openDirectoryDiffViewer") == .localOnly + ) + #expect( + CommandPaletteCloudCapabilityPolicy.capability(for: "palette.terminalOpenDirectory.finder") == .localOnly + ) + } + + @Test("scopes Cloud-only and local-only commands to the workspace context") + func contextAllowsOnlyValidCapabilities() { + let localContext = CommandPaletteContextSnapshot() + var cloudContext = CommandPaletteContextSnapshot() + cloudContext.setBool(CommandPaletteContextKeys.workspaceIsCloud, true) + + #expect( + CommandPaletteCloudCapabilityPolicy.allows( + commandId: "palette.terminalSplitRight", + context: localContext + ) + ) + #expect( + CommandPaletteCloudCapabilityPolicy.allows( + commandId: "palette.terminalSplitRight", + context: cloudContext + ) + ) + #expect( + CommandPaletteCloudCapabilityPolicy.allows( + commandId: "palette.cloud.status", + context: cloudContext + ) + ) + #expect( + !CommandPaletteCloudCapabilityPolicy.allows( + commandId: "palette.cloud.status", + context: localContext + ) + ) + #expect( + !CommandPaletteCloudCapabilityPolicy.allows( + commandId: "palette.browserSplitRight", + context: cloudContext + ) + ) + #expect( + CommandPaletteCloudCapabilityPolicy.allows( + commandId: "palette.browserSplitRight", + context: localContext + ) + ) + } +} diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 59024c798d62..0c8ba1c234f8 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -549214,14 +549214,54 @@ "value": "Workspace Color: %@" } }, - "de": {"stringUnit": {"state": "translated", "value": "Arbeitsbereichfarbe: %@"}}, - "fr": {"stringUnit": {"state": "translated", "value": "Couleur de l’espace de travail : %@"}}, - "ar": {"stringUnit": {"state": "translated", "value": "لون مساحة العمل: %@"}}, - "es": {"stringUnit": {"state": "translated", "value": "Color del espacio de trabajo: %@"}}, - "zh-Hant": {"stringUnit": {"state": "translated", "value": "工作區顏色:%@"}}, - "zh-Hans": {"stringUnit": {"state": "translated", "value": "工作区颜色:%@"}}, - "ko": {"stringUnit": {"state": "translated", "value": "작업 공간 색상: %@"}}, - "ja": {"stringUnit": {"state": "translated", "value": "ワークスペースの色: %@"}} + "de": { + "stringUnit": { + "state": "translated", + "value": "Arbeitsbereichfarbe: %@" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleur de l’espace de travail : %@" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لون مساحة العمل: %@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Color del espacio de trabajo: %@" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "工作區顏色:%@" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "工作区颜色:%@" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "작업 공간 색상: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースの色: %@" + } + } } }, "fileExplorer.preview.failedTitle": { @@ -600243,6 +600283,242 @@ } } } + }, + "command.cloudVM.availabilityInfo.alertMessage": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud terminal, browser, workspace, and VM commands remain available here." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Ordner-, Simulator-, lokale Browser-, Verzeichnis-Such- und Diff-Befehle sind nach Auswahl eines lokalen Arbeitsbereichs verfügbar. Cloud-Terminal-, Browser-, Arbeitsbereichs- und VM-Befehle bleiben hier verfügbar." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les commandes de dossier, de simulateur, de création de navigateur local, de recherche dans les répertoires et de comparaison sont disponibles après la sélection d’un espace de travail local. Les commandes de terminal, de navigateur, d’espace de travail et de VM Cloud restent disponibles ici." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تتوفر أوامر المجلد والمحاكي وإنشاء المتصفح المحلي والبحث في الدليل والمقارنة بعد اختيار مساحة عمل محلية. وتبقى أوامر طرفية Cloud والمتصفح ومساحة العمل والآلة الافتراضية متاحة هنا." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Los comandos de carpetas, simulador, creación de navegadores locales, búsqueda en directorios y diferencias están disponibles después de seleccionar un espacio de trabajo local. Los comandos de terminal, navegador, espacio de trabajo y VM de Cloud siguen disponibles aquí." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "選取本機工作區後,即可使用資料夾、模擬器、本機瀏覽器建立、目錄搜尋和差異檢視指令。Cloud 終端機、瀏覽器、工作區和 VM 指令在此仍可使用。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择本地工作区后即可使用文件夹、模拟器、本地浏览器创建、目录搜索和差异查看命令。Cloud 终端、浏览器、工作区和 VM 命令在此仍可使用。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "로컬 작업 공간을 선택하면 폴더, 시뮬레이터, 로컬 브라우저 생성, 디렉터리 검색 및 diff 명령을 사용할 수 있습니다. Cloud 터미널, 브라우저, 작업 공간 및 VM 명령은 여기서 계속 사용할 수 있습니다." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ローカルワークスペースを選択すると、フォルダ、シミュレータ、ローカルブラウザの作成、ディレクトリ検索、差分表示のコマンドを利用できます。Cloud のターミナル、ブラウザ、ワークスペース、VM コマンドはここで引き続き利用できます。" + } + } + } + }, + "command.cloudVM.availabilityInfo.alertTitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Some commands are local-only" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Einige Befehle sind nur lokal verfügbar" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Certaines commandes sont uniquement locales" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "بعض الأوامر محلية فقط" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Algunos comandos solo están disponibles localmente" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "部分指令僅限本機使用" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "部分命令仅限本地使用" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "일부 명령어는 로컬에서만 사용 가능" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "一部のコマンドはローカル専用です" + } + } + } + }, + "command.cloudVM.availabilityInfo.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud workspace" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud-Arbeitsbereich" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Espace de travail Cloud" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "مساحة عمل سحابية" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Espacio de trabajo de Cloud" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Cloud 工作區" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cloud 工作区" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud 작업 공간" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud ワークスペース" + } + } + } + }, + "command.cloudVM.availabilityInfo.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Show Cloud command availability" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Verfügbarkeit von Cloud-Befehlen anzeigen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Afficher la disponibilité des commandes Cloud" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "إظهار مدى توفر أوامر السحابة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Mostrar disponibilidad de comandos de Cloud" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "顯示 Cloud 指令可用性" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示 Cloud 命令可用性" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud 명령어 사용 가능 여부 보기" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud コマンドの利用状況を表示" + } + } + } } }, "version": "1.0" diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index 37e0fb4830ba..dbdd52b78527 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -3,78 +3,7 @@ import CmuxCommandPalette import AppKit import Foundation -/// Describes where a command-palette action can run relative to a managed -/// Cloud workspace. The command materializer applies this once for every -/// contribution, keeping palette visibility aligned with the shared action -/// routing paths instead of duplicating gates in individual contributions. -enum CommandPaletteCloudCapability: Equatable { - /// The action is valid for both local and Cloud workspaces. - case shared - /// The action needs a selected Cloud workspace and its current VM. - case cloudOnly - /// The action creates or reads a resource on this Mac's local filesystem - /// or local browser stack and cannot target a Cloud workspace. - case localOnly -} - extension ContentView { - /// Returns the Cloud capability for every built-in command-palette action. - /// Unknown and user-configured actions remain shared so custom actions keep - /// their existing behavior unless they opt into their own routing checks. - static func commandPaletteCloudCapability(for commandId: String) -> CommandPaletteCloudCapability { - if commandId.hasPrefix("palette.terminalOpenDirectory.") { - return .localOnly - } - - switch commandId { - case commandPaletteCloudForkCommandId, - commandPaletteCloudSnapshotCommandId, - commandPaletteCloudRestoreCommandId, - commandPaletteCloudPromoteTemplateCommandId, - commandPaletteCloudStatusCommandId, - commandPaletteCloudPortsCommandId, - commandPaletteCloudToolsCommandId, - commandPaletteCloudHandoffCommandId: - return .cloudOnly - case "palette.newBrowserWorkspace", - "palette.newAgentChat", - "palette.newBrowserTab", - "palette.newSimulatorPane", - "palette.openFolder", - "palette.openFolderInVSCodeInline", - "palette.openWorkspacePullRequests", - "palette.openDiffViewer", - "palette.openDirectoryDiffViewer", - "palette.findInDirectory", - "palette.vscodeServeWebStop", - "palette.vscodeServeWebRestart", - "palette.browserSplitRight", - "palette.browserSplitDown", - "palette.terminalSplitBrowserRight", - "palette.terminalSplitBrowserDown": - return .localOnly - default: - return .shared - } - } - - /// Applies the capability classification to a palette context snapshot. - /// Cloud-only commands are scoped to the selected VM; local-only commands - /// are omitted while a Cloud workspace is selected. - static func commandPaletteCloudCapabilityAllows( - commandId: String, - context: CommandPaletteContextSnapshot - ) -> Bool { - switch commandPaletteCloudCapability(for: commandId) { - case .shared: - return true - case .cloudOnly: - return context.bool(CommandPaletteContextKeys.workspaceIsCloud) - case .localOnly: - return !context.bool(CommandPaletteContextKeys.workspaceIsCloud) - } - } - static let commandPaletteAuthSignInCommandId = "palette.auth.signIn" static let commandPaletteAuthSignOutCommandId = "palette.auth.signOut" static let commandPaletteAuthTeamPickerCommandId = "palette.auth.teamPicker" @@ -169,6 +98,7 @@ extension ContentView { } extension ContentView { + static let commandPaletteCloudAvailabilityInfoCommandId = "palette.cloud.availabilityInfo" static let commandPaletteCloudForkCommandId = "palette.cloud.fork" static let commandPaletteCloudSnapshotCommandId = "palette.cloud.snapshot" static let commandPaletteCloudRestoreCommandId = "palette.cloud.restore" @@ -193,7 +123,7 @@ extension ContentView { return [ CommandPaletteCommandContribution( commandId: commandPaletteCloudNewMachineCommandId, - title: constant(String(localized: "command.cloudVM.newMachine.title", defaultValue: "New Cloud Machine\u{2026}")), + title: constant(String(localized: "command.cloudVM.newMachine.title", defaultValue: "New Cloud Machine…")), subtitle: subtitle, keywords: ["cloud", "vm", "machine", "new", "create", "desktop", "base"] ), @@ -248,7 +178,43 @@ extension ContentView { ] } + /// Builds the Cloud-context explanation for local-only palette actions. + /// Keeping this as a normal command makes the availability explanation + /// searchable and gives Cloud users a localized reason for omitted rows. + static func commandPaletteCloudAvailabilityInfoContribution() -> CommandPaletteCommandContribution { + CommandPaletteCommandContribution( + commandId: commandPaletteCloudAvailabilityInfoCommandId, + title: { _ in + String( + localized: "command.cloudVM.availabilityInfo.title", + defaultValue: "Show Cloud command availability" + ) + }, + subtitle: { _ in + String( + localized: "command.cloudVM.availabilityInfo.subtitle", + defaultValue: "Cloud workspace" + ) + }, + keywords: ["cloud", "workspace", "availability", "local", "unavailable", "actions"], + when: { $0.bool(CommandPaletteContextKeys.workspaceIsCloud) } + ) + } + func registerCloudCommandHandlers(_ registry: inout CommandPaletteHandlerRegistry) { + registry.register(commandId: Self.commandPaletteCloudAvailabilityInfoCommandId) { + let alert = NSAlert() + alert.messageText = String( + localized: "command.cloudVM.availabilityInfo.alertTitle", + defaultValue: "Some commands are local-only" + ) + alert.informativeText = String( + localized: "command.cloudVM.availabilityInfo.alertMessage", + defaultValue: "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud terminal, browser, workspace, and VM commands remain available here." + ) + alert.addButton(withTitle: String(localized: "common.ok", defaultValue: "OK")) + alert.runModal() + } registry.register(commandId: Self.commandPaletteCloudNewMachineCommandId) { _ = AppDelegate.shared?.performNewCloudMachineAction( preferredWindow: NSApp.keyWindow ?? NSApp.mainWindow, diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 06391373c889..277ccdae3b22 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7116,6 +7116,8 @@ struct ContentView: View { ) } + /// Materializes the currently visible, enabled palette commands after + /// applying config visibility, Cloud capability, and context gates. private func commandPaletteCommands( commandsContext: CommandPaletteCommandsContext ) -> [CommandPaletteCommand] { @@ -7129,7 +7131,7 @@ struct ContentView: View { var nextRank = 0 for contribution in contributions { - guard Self.commandPaletteCloudCapabilityAllows( + guard CommandPaletteCloudCapabilityPolicy.allows( commandId: contribution.commandId, context: context ) else { continue } @@ -7519,6 +7521,7 @@ struct ContentView: View { var contributions: [CommandPaletteCommandContribution] = [Self.commandPaletteFindWorkContribution()] contributions.append(contentsOf: Self.commandPaletteCloudCommandContributions()) + contributions.append(Self.commandPaletteCloudAvailabilityInfoContribution()) contributions.append(contentsOf: Self.commandPaletteComputerUseContributions()) contributions.append( diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index 109a32af2669..d7c199ad918a 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -870,86 +870,16 @@ final class CommandPaletteRenameSelectionSettingsTests: XCTestCase { } final class CommandPaletteCloudCommandTests: XCTestCase { - func testCloudCapabilityMatrixClassifiesRepresentativeCommands() { - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: "palette.newTerminalTab"), - .shared - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: "palette.terminalSplitRight"), - .shared - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: "palette.browserBack"), - .shared - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: ContentView.commandPaletteCloudStatusCommandId), - .cloudOnly - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: ContentView.commandPaletteCloudForkCommandId), - .cloudOnly - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: ContentView.commandPaletteCloudNewMachineCommandId), - .shared - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: "palette.browserSplitRight"), - .localOnly - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: "palette.openDirectoryDiffViewer"), - .localOnly - ) - XCTAssertEqual( - ContentView.commandPaletteCloudCapability(for: "palette.terminalOpenDirectory.finder"), - .localOnly - ) - } - - func testCloudCapabilityFilterHidesLocalActionsAndScopesCloudActions() { - var localContext = CommandPaletteContextSnapshot() + func testCloudAvailabilityInfoAppearsOnlyForCloudWorkspace() { + let contribution = ContentView.commandPaletteCloudAvailabilityInfoContribution() + let localContext = CommandPaletteContextSnapshot() var cloudContext = CommandPaletteContextSnapshot() cloudContext.setBool(CommandPaletteContextKeys.workspaceIsCloud, true) - XCTAssertTrue( - ContentView.commandPaletteCloudCapabilityAllows( - commandId: "palette.terminalSplitRight", - context: localContext - ) - ) - XCTAssertTrue( - ContentView.commandPaletteCloudCapabilityAllows( - commandId: "palette.terminalSplitRight", - context: cloudContext - ) - ) - XCTAssertTrue( - ContentView.commandPaletteCloudCapabilityAllows( - commandId: ContentView.commandPaletteCloudStatusCommandId, - context: cloudContext - ) - ) - XCTAssertFalse( - ContentView.commandPaletteCloudCapabilityAllows( - commandId: ContentView.commandPaletteCloudStatusCommandId, - context: localContext - ) - ) - XCTAssertFalse( - ContentView.commandPaletteCloudCapabilityAllows( - commandId: "palette.browserSplitRight", - context: cloudContext - ) - ) - XCTAssertTrue( - ContentView.commandPaletteCloudCapabilityAllows( - commandId: "palette.browserSplitRight", - context: localContext - ) - ) + XCTAssertFalse(contribution.when(localContext)) + XCTAssertTrue(contribution.when(cloudContext)) + XCTAssertEqual(contribution.title(cloudContext), "Show Cloud command availability") + XCTAssertEqual(contribution.subtitle(cloudContext), "Cloud workspace") } @MainActor diff --git a/docs/command-palette-cloud-parity.md b/docs/command-palette-cloud-parity.md index 22e1be829210..7415e156bd84 100644 --- a/docs/command-palette-cloud-parity.md +++ b/docs/command-palette-cloud-parity.md @@ -24,6 +24,11 @@ and duplication. Creating a new browser surface still requires a local browser creation path, so browser creation and split commands are intentionally omitted from a Cloud workspace until a Cloud browser creation route exists. +The Cloud palette includes **Show Cloud command availability**, which explains +these local-only categories in the current locale. It is available whenever a +Cloud workspace is selected, including when the Cloud VM feature gate changes +while a workspace is already open. + ## Verification To verify the routing against a real machine, select an authorized Cloud From 4ef7b1c393fdbdf8be8569d1687a72a245840c99 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:29:08 -0700 Subject: [PATCH 03/31] fix: instantiate Cloud palette capability policy --- .../CommandPaletteCloudCapabilityPolicy.swift | 9 ++++-- ...andPaletteCloudCapabilityPolicyTests.swift | 32 ++++++++++--------- Sources/ContentView.swift | 2 +- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift index 02c847553616..6b71b10ffde0 100644 --- a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift +++ b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift @@ -15,10 +15,13 @@ public enum CommandPaletteCloudCapability: Equatable, Sendable { /// Classifies built-in command-palette actions before they are materialized. /// The app owns command contributions and handlers; this package owns the /// pure capability decision so it can be tested without app singletons. -public enum CommandPaletteCloudCapabilityPolicy { +public struct CommandPaletteCloudCapabilityPolicy: Sendable { + /// Creates the stateless capability policy. + public init() {} + /// Returns the Cloud capability for a built-in command ID. Unknown and /// user-configured actions remain shared unless they add their own gate. - public static func capability(for commandId: String) -> CommandPaletteCloudCapability { + public func capability(for commandId: String) -> CommandPaletteCloudCapability { if commandId.hasPrefix("palette.terminalOpenDirectory.") { return .localOnly } @@ -58,7 +61,7 @@ public enum CommandPaletteCloudCapabilityPolicy { /// Returns whether a command can be materialized for the supplied context. /// Cloud-only commands require the selected Cloud workspace; local-only /// commands are omitted while a Cloud workspace is selected. - public static func allows( + public func allows( commandId: String, context: CommandPaletteContextSnapshot ) -> Bool { diff --git a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift index c32b24bdef01..b6e7247c278d 100644 --- a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift +++ b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift @@ -3,34 +3,36 @@ import Testing @Suite("Command palette Cloud capability policy") struct CommandPaletteCloudCapabilityPolicyTests { + private let policy = CommandPaletteCloudCapabilityPolicy() + @Test("classifies representative shared, Cloud-only, and local-only commands") func representativeCommandsHaveExpectedCapabilities() { #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.newTerminalTab") == .shared + policy.capability(for: "palette.newTerminalTab") == .shared ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.terminalSplitRight") == .shared + policy.capability(for: "palette.terminalSplitRight") == .shared ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.browserBack") == .shared + policy.capability(for: "palette.browserBack") == .shared ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.cloud.status") == .cloudOnly + policy.capability(for: "palette.cloud.status") == .cloudOnly ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.cloud.fork") == .cloudOnly + policy.capability(for: "palette.cloud.fork") == .cloudOnly ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.cloud.newMachine") == .shared + policy.capability(for: "palette.cloud.newMachine") == .shared ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.browserSplitRight") == .localOnly + policy.capability(for: "palette.browserSplitRight") == .localOnly ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.openDirectoryDiffViewer") == .localOnly + policy.capability(for: "palette.openDirectoryDiffViewer") == .localOnly ) #expect( - CommandPaletteCloudCapabilityPolicy.capability(for: "palette.terminalOpenDirectory.finder") == .localOnly + policy.capability(for: "palette.terminalOpenDirectory.finder") == .localOnly ) } @@ -41,37 +43,37 @@ struct CommandPaletteCloudCapabilityPolicyTests { cloudContext.setBool(CommandPaletteContextKeys.workspaceIsCloud, true) #expect( - CommandPaletteCloudCapabilityPolicy.allows( + policy.allows( commandId: "palette.terminalSplitRight", context: localContext ) ) #expect( - CommandPaletteCloudCapabilityPolicy.allows( + policy.allows( commandId: "palette.terminalSplitRight", context: cloudContext ) ) #expect( - CommandPaletteCloudCapabilityPolicy.allows( + policy.allows( commandId: "palette.cloud.status", context: cloudContext ) ) #expect( - !CommandPaletteCloudCapabilityPolicy.allows( + !policy.allows( commandId: "palette.cloud.status", context: localContext ) ) #expect( - !CommandPaletteCloudCapabilityPolicy.allows( + !policy.allows( commandId: "palette.browserSplitRight", context: cloudContext ) ) #expect( - CommandPaletteCloudCapabilityPolicy.allows( + policy.allows( commandId: "palette.browserSplitRight", context: localContext ) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 277ccdae3b22..fe5b2876fcfd 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7131,7 +7131,7 @@ struct ContentView: View { var nextRank = 0 for contribution in contributions { - guard CommandPaletteCloudCapabilityPolicy.allows( + guard CommandPaletteCloudCapabilityPolicy().allows( commandId: contribution.commandId, context: context ) else { continue } From 4f625f2ae4a5f9c956f6224d5e39e92591eed048 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:43:47 -0700 Subject: [PATCH 04/31] test: pin audited Cloud palette capability sets --- ...andPaletteCloudCapabilityPolicyTests.swift | 38 +++++++++++++++++++ Sources/ContentView.swift | 3 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift index b6e7247c278d..597e473fb4d0 100644 --- a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift +++ b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift @@ -36,6 +36,44 @@ struct CommandPaletteCloudCapabilityPolicyTests { ) } + @Test("keeps the audited Cloud and local-only command sets explicit") + func auditedCapabilitySetsRemainStable() { + let cloudOnly = [ + "palette.cloud.fork", + "palette.cloud.snapshot", + "palette.cloud.restore", + "palette.cloud.promoteTemplate", + "palette.cloud.status", + "palette.cloud.ports", + "palette.cloud.tools", + "palette.cloud.handoff", + ] + let localOnly = [ + "palette.newBrowserWorkspace", + "palette.newAgentChat", + "palette.newBrowserTab", + "palette.newSimulatorPane", + "palette.openFolder", + "palette.openFolderInVSCodeInline", + "palette.openWorkspacePullRequests", + "palette.openDiffViewer", + "palette.openDirectoryDiffViewer", + "palette.findInDirectory", + "palette.vscodeServeWebStop", + "palette.vscodeServeWebRestart", + "palette.browserSplitRight", + "palette.browserSplitDown", + "palette.terminalSplitBrowserRight", + "palette.terminalSplitBrowserDown", + "palette.terminalOpenDirectory.finder", + ] + + #expect(cloudOnly.allSatisfy { policy.capability(for: $0) == .cloudOnly }) + #expect(localOnly.allSatisfy { policy.capability(for: $0) == .localOnly }) + #expect(policy.capability(for: "palette.newTerminalTab") == .shared) + #expect(policy.capability(for: "palette.browserBack") == .shared) + } + @Test("scopes Cloud-only and local-only commands to the workspace context") func contextAllowsOnlyValidCapabilities() { let localContext = CommandPaletteContextSnapshot() diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index fe5b2876fcfd..bd593d0c5e73 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7125,13 +7125,14 @@ struct ContentView: View { let contributions = commandPaletteCommandContributions() var handlerRegistry = CommandPaletteHandlerRegistry() registerCommandPaletteHandlers(&handlerRegistry) + let cloudCapabilityPolicy = CommandPaletteCloudCapabilityPolicy() var commands: [CommandPaletteCommand] = [] commands.reserveCapacity(contributions.count) var nextRank = 0 for contribution in contributions { - guard CommandPaletteCloudCapabilityPolicy().allows( + guard cloudCapabilityPolicy.allows( commandId: contribution.commandId, context: context ) else { continue } From ba7689a251ae531e2842efc11042c1ac0872b458 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:49:50 -0700 Subject: [PATCH 05/31] fix: complete Cloud palette localization and docs --- ...andPaletteCloudCapabilityPolicyTests.swift | 3 + Resources/Localizable.xcstrings | 320 +++++++++++++++--- Sources/ContentView+AuthCommandPalette.swift | 2 + Sources/ContentView.swift | 2 + .../ShortcutAndCommandPaletteTests.swift | 3 + 5 files changed, 282 insertions(+), 48 deletions(-) diff --git a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift index 597e473fb4d0..50bff89c766c 100644 --- a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift +++ b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift @@ -5,6 +5,7 @@ import Testing struct CommandPaletteCloudCapabilityPolicyTests { private let policy = CommandPaletteCloudCapabilityPolicy() + /// Representative command IDs cover each capability classification. @Test("classifies representative shared, Cloud-only, and local-only commands") func representativeCommandsHaveExpectedCapabilities() { #expect( @@ -36,6 +37,7 @@ struct CommandPaletteCloudCapabilityPolicyTests { ) } + /// The audited sets stay explicit so a new palette action cannot silently drift. @Test("keeps the audited Cloud and local-only command sets explicit") func auditedCapabilitySetsRemainStable() { let cloudOnly = [ @@ -74,6 +76,7 @@ struct CommandPaletteCloudCapabilityPolicyTests { #expect(policy.capability(for: "palette.browserBack") == .shared) } + /// Context gating allows only capabilities valid for the selected workspace. @Test("scopes Cloud-only and local-only commands to the workspace context") func contextAllowsOnlyValidCapabilities() { let localContext = CommandPaletteContextSnapshot() diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 0c8ba1c234f8..1524c50659f7 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -549214,54 +549214,14 @@ "value": "Workspace Color: %@" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Arbeitsbereichfarbe: %@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur de l’espace de travail : %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون مساحة العمل: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color del espacio de trabajo: %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "工作區顏色:%@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "工作区颜色:%@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "작업 공간 색상: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースの色: %@" - } - } + "de": {"stringUnit": {"state": "translated", "value": "Arbeitsbereichfarbe: %@"}}, + "fr": {"stringUnit": {"state": "translated", "value": "Couleur de l’espace de travail : %@"}}, + "ar": {"stringUnit": {"state": "translated", "value": "لون مساحة العمل: %@"}}, + "es": {"stringUnit": {"state": "translated", "value": "Color del espacio de trabajo: %@"}}, + "zh-Hant": {"stringUnit": {"state": "translated", "value": "工作區顏色:%@"}}, + "zh-Hans": {"stringUnit": {"state": "translated", "value": "工作区颜色:%@"}}, + "ko": {"stringUnit": {"state": "translated", "value": "작업 공간 색상: %@"}}, + "ja": {"stringUnit": {"state": "translated", "value": "ワークスペースの色: %@"}} } }, "fileExplorer.preview.failedTitle": { @@ -600340,6 +600300,72 @@ "state": "translated", "value": "ローカルワークスペースを選択すると、フォルダ、シミュレータ、ローカルブラウザの作成、ディレクトリ検索、差分表示のコマンドを利用できます。Cloud のターミナル、ブラウザ、ワークスペース、VM コマンドはここで引き続き利用できます。" } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Naredbe za fascikle, simulator, kreiranje lokalnog preglednika, pretragu direktorija i razlike dostupne su nakon odabira lokalnog radnog prostora. Cloud naredbe za terminal, preglednik, radni prostor i VM ostaju dostupne ovdje." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Kommandoer til mapper, simulator, lokal oprettelse af browsere, katalogsøgning og diff er tilgængelige, når du vælger et lokalt arbejdsområde. Cloud-kommandoer til terminal, browser, arbejdsområde og VM er stadig tilgængelige her." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "I comandi per cartelle, simulatore, creazione di browser locali, ricerca nelle directory e differenze sono disponibili dopo aver selezionato uno spazio di lavoro locale. I comandi Cloud per terminale, browser, spazio di lavoro e VM rimangono disponibili qui." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ការបញ្ជាថត ស៊ីម्युឡាទ័រ ការបង្កើតកម្មវិធីរុករកមូលដ្ឋាន ការស្វែងរកថត និងការប្រៀបធៀប នឹងអាចប្រើបានបន្ទាប់ពីជ្រើសរើសកន្លែងធ្វើការមូលដ្ឋាន។ ការបញ្ជា Cloud សម្រាប់ស្ថានីយ កម្មវិធីរុករក កន្លែងធ្វើការ និង VM នៅតែអាចប្រើបាននៅទីនេះ។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Mappe-, simulator-, lokal nettleseroppretting-, katalogsøk- og diff-kommandoer er tilgjengelige etter at du har valgt et lokalt arbeidsområde. Cloud-kommandoer for terminal, nettleser, arbeidsområde og VM er fortsatt tilgjengelige her." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Polecenia dotyczące folderów, symulatora, tworzenia lokalnej przeglądarki, wyszukiwania w katalogach i porównywania są dostępne po wybraniu lokalnego obszaru roboczego. Polecenia Cloud dotyczące terminala, przeglądarki, obszaru roboczego i maszyny wirtualnej są nadal dostępne tutaj." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Os comandos de pasta, simulador, criação de navegador local, pesquisa em diretórios e diferenças ficam disponíveis depois que você seleciona um espaço de trabalho local. Os comandos Cloud de terminal, navegador, espaço de trabalho e VM continuam disponíveis aqui." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Команды для папок, симулятора, создания локального браузера, поиска в каталогах и сравнения доступны после выбора локального рабочего пространства. Команды Cloud для терминала, браузера, рабочего пространства и виртуальной машины по-прежнему доступны здесь." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "คำสั่งโฟลเดอร์ โปรแกรมจำลอง การสร้างเบราว์เซอร์ภายในเครื่อง การค้นหาไดเรกทอรี และการเปรียบเทียบ จะใช้งานได้หลังจากเลือกพื้นที่ทำงานภายในเครื่อง คำสั่ง Cloud สำหรับเทอร์มินัล เบราว์เซอร์ พื้นที่ทำงาน และ VM ยังคงใช้งานได้ที่นี่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Klasör, simülatör, yerel tarayıcı oluşturma, dizin arama ve fark komutları, yerel bir çalışma alanı seçildikten sonra kullanılabilir. Terminal, tarayıcı, çalışma alanı ve VM için Cloud komutları burada kullanılmaya devam eder." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Команди для папок, симулятора, створення локального браузера, пошуку в каталогах і порівняння доступні після вибору локального робочого простору. Команди Cloud для термінала, браузера, робочого простору та віртуальної машини залишаються доступними тут." + } } } }, @@ -600399,6 +600425,72 @@ "state": "translated", "value": "一部のコマンドはローカル専用です" } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Neke naredbe su dostupne samo lokalno" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Nogle kommandoer er kun lokale" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Alcuni comandi sono solo locali" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ការបញ្ជាមួយចំនួនមានសម្រាប់មូលដ្ឋានប៉ុណ្ណោះ" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Noen kommandoer er bare lokale" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Niektóre polecenia są dostępne tylko lokalnie" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Alguns comandos são apenas locais" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Некоторые команды доступны только локально" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "คำสั่งบางรายการใช้ได้เฉพาะในเครื่อง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bazı komutlar yalnızca yereldir" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Деякі команди доступні лише локально" + } } } }, @@ -600458,6 +600550,72 @@ "state": "translated", "value": "Cloud ワークスペース" } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Cloud radni prostor" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Cloud-arbejdsområde" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Spazio di lavoro Cloud" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "កន្លែងធ្វើការ Cloud" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Cloud-arbeidsområde" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Obszar roboczy Cloud" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Espaço de trabalho Cloud" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Рабочее пространство Cloud" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "พื้นที่ทำงาน Cloud" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cloud çalışma alanı" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Робочий простір Cloud" + } } } }, @@ -600517,6 +600675,72 @@ "state": "translated", "value": "Cloud コマンドの利用状況を表示" } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Prikaži dostupnost Cloud naredbi" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Vis tilgængelighed af Cloud-kommandoer" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Mostra disponibilità dei comandi Cloud" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បង្ហាញភាពអាចប្រើបាននៃការបញ្ជា Cloud" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Vis tilgjengelighet for Cloud-kommandoer" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Pokaż dostępność poleceń Cloud" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Mostrar disponibilidade dos comandos Cloud" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Показать доступность команд Cloud" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "แสดงความพร้อมใช้งานของคำสั่ง Cloud" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cloud komutlarının kullanılabilirliğini göster" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Показати доступність команд Cloud" + } } } } diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index dbdd52b78527..189058c8451a 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -109,6 +109,7 @@ extension ContentView { static let commandPaletteCloudHandoffCommandId = "palette.cloud.handoff" static let commandPaletteCloudNewMachineCommandId = "palette.cloud.newMachine" + /// Returns Cloud VM commands when the Cloud feature and account are ready. static func commandPaletteCloudCommandContributions( isAuthenticated: Bool? = nil ) -> [CommandPaletteCommandContribution] { @@ -201,6 +202,7 @@ extension ContentView { ) } + /// Registers Cloud palette handlers with the shared command dispatcher. func registerCloudCommandHandlers(_ registry: inout CommandPaletteHandlerRegistry) { registry.register(commandId: Self.commandPaletteCloudAvailabilityInfoCommandId) { let alert = NSAlert() diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index bd593d0c5e73..f546a1c6a6a5 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7238,6 +7238,7 @@ struct ContentView: View { } /// Captures the lightweight synchronous state consumed by palette contribution gates. + /// Captures the selected workspace and window state used by palette gates. private func commandPaletteContextSnapshot( terminalOpenTargets: Set? = nil ) -> CommandPaletteContextSnapshot { @@ -7462,6 +7463,7 @@ struct ContentView: View { ] /// Builds command-palette contributions from synchronous context and cached async availability. + /// Builds the complete Cmd-Shift-P contribution list before filtering. private func commandPaletteCommandContributions() -> [CommandPaletteCommandContribution] { func constant(_ value: String) -> (CommandPaletteContextSnapshot) -> String { { _ in value } diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index d7c199ad918a..7e976f1a49e0 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -870,6 +870,7 @@ final class CommandPaletteRenameSelectionSettingsTests: XCTestCase { } final class CommandPaletteCloudCommandTests: XCTestCase { + /// Cloud availability guidance is visible only for Cloud workspaces. func testCloudAvailabilityInfoAppearsOnlyForCloudWorkspace() { let contribution = ContentView.commandPaletteCloudAvailabilityInfoContribution() let localContext = CommandPaletteContextSnapshot() @@ -882,6 +883,7 @@ final class CommandPaletteCloudCommandTests: XCTestCase { XCTAssertEqual(contribution.subtitle(cloudContext), "Cloud workspace") } + /// Cloud contributions include each supported current-VM operation. @MainActor func testCloudCommandPaletteIncludesCloudWorkspaceActions() { let key = BetaFeaturesCatalogSection().cloudMachines.userDefaultsKey @@ -915,6 +917,7 @@ final class CommandPaletteCloudCommandTests: XCTestCase { XCTAssertTrue(ContentView.commandPaletteCloudCommandContributions(isAuthenticated: true).isEmpty) } + /// Managed Cloud identity is distinct from a generic SSH configuration. func testCloudVMIdentityIsExplicitMetadata() { let cloudConfig = WorkspaceRemoteConfiguration( destination: "nncop8f8h6w9blhns6sy+cmux@vm-ssh.freestyle.sh", From 5e7852b404f9b82af0f5f67a99fc2b603948755b Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:01:35 -0700 Subject: [PATCH 06/31] fix: defer cloud palette availability alert --- Sources/ContentView+AuthCommandPalette.swift | 35 +++++++++++-------- .../ShortcutAndCommandPaletteTests.swift | 4 ++- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index 189058c8451a..4d78b05133d2 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -182,19 +182,23 @@ extension ContentView { /// Builds the Cloud-context explanation for local-only palette actions. /// Keeping this as a normal command makes the availability explanation /// searchable and gives Cloud users a localized reason for omitted rows. - static func commandPaletteCloudAvailabilityInfoContribution() -> CommandPaletteCommandContribution { + static func commandPaletteCloudAvailabilityInfoContribution( + locale: Locale = .current + ) -> CommandPaletteCommandContribution { CommandPaletteCommandContribution( commandId: commandPaletteCloudAvailabilityInfoCommandId, title: { _ in String( localized: "command.cloudVM.availabilityInfo.title", - defaultValue: "Show Cloud command availability" + defaultValue: "Show Cloud command availability", + locale: locale ) }, subtitle: { _ in String( localized: "command.cloudVM.availabilityInfo.subtitle", - defaultValue: "Cloud workspace" + defaultValue: "Cloud workspace", + locale: locale ) }, keywords: ["cloud", "workspace", "availability", "local", "unavailable", "actions"], @@ -205,17 +209,20 @@ extension ContentView { /// Registers Cloud palette handlers with the shared command dispatcher. func registerCloudCommandHandlers(_ registry: inout CommandPaletteHandlerRegistry) { registry.register(commandId: Self.commandPaletteCloudAvailabilityInfoCommandId) { - let alert = NSAlert() - alert.messageText = String( - localized: "command.cloudVM.availabilityInfo.alertTitle", - defaultValue: "Some commands are local-only" - ) - alert.informativeText = String( - localized: "command.cloudVM.availabilityInfo.alertMessage", - defaultValue: "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud terminal, browser, workspace, and VM commands remain available here." - ) - alert.addButton(withTitle: String(localized: "common.ok", defaultValue: "OK")) - alert.runModal() + // Let the command palette finish dismissing before presenting the modal alert. + DispatchQueue.main.async { + let alert = NSAlert() + alert.messageText = String( + localized: "command.cloudVM.availabilityInfo.alertTitle", + defaultValue: "Some commands are local-only" + ) + alert.informativeText = String( + localized: "command.cloudVM.availabilityInfo.alertMessage", + defaultValue: "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud terminal, browser, workspace, and VM commands remain available here." + ) + alert.addButton(withTitle: String(localized: "common.ok", defaultValue: "OK")) + alert.runModal() + } } registry.register(commandId: Self.commandPaletteCloudNewMachineCommandId) { _ = AppDelegate.shared?.performNewCloudMachineAction( diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index 7e976f1a49e0..bb71858a1557 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -872,7 +872,9 @@ final class CommandPaletteRenameSelectionSettingsTests: XCTestCase { final class CommandPaletteCloudCommandTests: XCTestCase { /// Cloud availability guidance is visible only for Cloud workspaces. func testCloudAvailabilityInfoAppearsOnlyForCloudWorkspace() { - let contribution = ContentView.commandPaletteCloudAvailabilityInfoContribution() + let contribution = ContentView.commandPaletteCloudAvailabilityInfoContribution( + locale: Locale(identifier: "en") + ) let localContext = CommandPaletteContextSnapshot() var cloudContext = CommandPaletteContextSnapshot() cloudContext.setBool(CommandPaletteContextKeys.workspaceIsCloud, true) From 6191d483571c285dd6e05c769e29f8eac4a8683d Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:07:11 -0700 Subject: [PATCH 07/31] fix: tighten Cloud palette capability guidance --- .../CommandPaletteCloudCapabilityPolicy.swift | 1 + ...andPaletteCloudCapabilityPolicyTests.swift | 1 + Resources/Localizable.xcstrings | 165 +++++++++++++++--- Sources/ContentView+AuthCommandPalette.swift | 10 +- .../ShortcutAndCommandPaletteTests.swift | 4 + docs/command-palette-cloud-parity.md | 2 +- 6 files changed, 160 insertions(+), 23 deletions(-) diff --git a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift index 6b71b10ffde0..623b140b8686 100644 --- a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift +++ b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift @@ -48,6 +48,7 @@ public struct CommandPaletteCloudCapabilityPolicy: Sendable { "palette.findInDirectory", "palette.vscodeServeWebStop", "palette.vscodeServeWebRestart", + "palette.terminalAttachTextBoxFile", "palette.browserSplitRight", "palette.browserSplitDown", "palette.terminalSplitBrowserRight", diff --git a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift index 50bff89c766c..e8309a566b3d 100644 --- a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift +++ b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift @@ -63,6 +63,7 @@ struct CommandPaletteCloudCapabilityPolicyTests { "palette.findInDirectory", "palette.vscodeServeWebStop", "palette.vscodeServeWebRestart", + "palette.terminalAttachTextBoxFile", "palette.browserSplitRight", "palette.browserSplitDown", "palette.terminalSplitBrowserRight", diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 1524c50659f7..2cbb34c4828c 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -600250,121 +600250,121 @@ "en": { "stringUnit": { "state": "translated", - "value": "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud terminal, browser, workspace, and VM commands remain available here." + "value": "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud VM commands may be unavailable here." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ordner-, Simulator-, lokale Browser-, Verzeichnis-Such- und Diff-Befehle sind nach Auswahl eines lokalen Arbeitsbereichs verfügbar. Cloud-Terminal-, Browser-, Arbeitsbereichs- und VM-Befehle bleiben hier verfügbar." + "value": "Ordner-, Simulator-, lokale Browser-, Verzeichnis-Such- und Diff-Befehle sind nach Auswahl eines lokalen Arbeitsbereichs verfügbar. Cloud-VM-Befehle sind hier möglicherweise nicht verfügbar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les commandes de dossier, de simulateur, de création de navigateur local, de recherche dans les répertoires et de comparaison sont disponibles après la sélection d’un espace de travail local. Les commandes de terminal, de navigateur, d’espace de travail et de VM Cloud restent disponibles ici." + "value": "Les commandes de dossier, de simulateur, de création de navigateur local, de recherche dans les répertoires et de comparaison sont disponibles après la sélection d’un espace de travail local. Les commandes de VM Cloud peuvent être indisponibles ici." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تتوفر أوامر المجلد والمحاكي وإنشاء المتصفح المحلي والبحث في الدليل والمقارنة بعد اختيار مساحة عمل محلية. وتبقى أوامر طرفية Cloud والمتصفح ومساحة العمل والآلة الافتراضية متاحة هنا." + "value": "تتوفر أوامر المجلد والمحاكي وإنشاء المتصفح المحلي والبحث في الدليل والمقارنة بعد اختيار مساحة عمل محلية. قد لا تتوفر أوامر أجهزة Cloud الافتراضية هنا." } }, "es": { "stringUnit": { "state": "translated", - "value": "Los comandos de carpetas, simulador, creación de navegadores locales, búsqueda en directorios y diferencias están disponibles después de seleccionar un espacio de trabajo local. Los comandos de terminal, navegador, espacio de trabajo y VM de Cloud siguen disponibles aquí." + "value": "Los comandos de carpetas, simulador, creación de navegadores locales, búsqueda en directorios y diferencias están disponibles después de seleccionar un espacio de trabajo local. Es posible que los comandos de VM de Cloud no estén disponibles aquí." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選取本機工作區後,即可使用資料夾、模擬器、本機瀏覽器建立、目錄搜尋和差異檢視指令。Cloud 終端機、瀏覽器、工作區和 VM 指令在此仍可使用。" + "value": "選取本機工作區後,即可使用資料夾、模擬器、本機瀏覽器建立、目錄搜尋和差異檢視指令。Cloud VM 指令可能無法在此使用。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择本地工作区后即可使用文件夹、模拟器、本地浏览器创建、目录搜索和差异查看命令。Cloud 终端、浏览器、工作区和 VM 命令在此仍可使用。" + "value": "选择本地工作区后即可使用文件夹、模拟器、本地浏览器创建、目录搜索和差异查看命令。Cloud VM 命令可能无法在此使用。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로컬 작업 공간을 선택하면 폴더, 시뮬레이터, 로컬 브라우저 생성, 디렉터리 검색 및 diff 명령을 사용할 수 있습니다. Cloud 터미널, 브라우저, 작업 공간 및 VM 명령은 여기서 계속 사용할 수 있습니다." + "value": "로컬 작업 공간을 선택하면 폴더, 시뮬레이터, 로컬 브라우저 생성, 디렉터리 검색 및 diff 명령을 사용할 수 있습니다. Cloud VM 명령은 여기서 사용하지 못할 수 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ローカルワークスペースを選択すると、フォルダ、シミュレータ、ローカルブラウザの作成、ディレクトリ検索、差分表示のコマンドを利用できます。Cloud のターミナル、ブラウザ、ワークスペース、VM コマンドはここで引き続き利用できます。" + "value": "ローカルワークスペースを選択すると、フォルダ、シミュレータ、ローカルブラウザの作成、ディレクトリ検索、差分表示のコマンドを利用できます。Cloud VM コマンドはここでは利用できない場合があります。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Naredbe za fascikle, simulator, kreiranje lokalnog preglednika, pretragu direktorija i razlike dostupne su nakon odabira lokalnog radnog prostora. Cloud naredbe za terminal, preglednik, radni prostor i VM ostaju dostupne ovdje." + "value": "Naredbe za fascikle, simulator, kreiranje lokalnog preglednika, pretragu direktorija i razlike dostupne su nakon odabira lokalnog radnog prostora. Cloud VM naredbe ovdje možda neće biti dostupne." } }, "da": { "stringUnit": { "state": "translated", - "value": "Kommandoer til mapper, simulator, lokal oprettelse af browsere, katalogsøgning og diff er tilgængelige, når du vælger et lokalt arbejdsområde. Cloud-kommandoer til terminal, browser, arbejdsområde og VM er stadig tilgængelige her." + "value": "Kommandoer til mapper, simulator, lokal oprettelse af browsere, katalogsøgning og diff er tilgængelige, når du vælger et lokalt arbejdsområde. Cloud VM-kommandoer er muligvis ikke tilgængelige her." } }, "it": { "stringUnit": { "state": "translated", - "value": "I comandi per cartelle, simulatore, creazione di browser locali, ricerca nelle directory e differenze sono disponibili dopo aver selezionato uno spazio di lavoro locale. I comandi Cloud per terminale, browser, spazio di lavoro e VM rimangono disponibili qui." + "value": "I comandi per cartelle, simulatore, creazione di browser locali, ricerca nelle directory e differenze sono disponibili dopo aver selezionato uno spazio di lavoro locale. I comandi VM Cloud potrebbero non essere disponibili qui." } }, "km": { "stringUnit": { "state": "translated", - "value": "ការបញ្ជាថត ស៊ីម्युឡាទ័រ ការបង្កើតកម្មវិធីរុករកមូលដ្ឋាន ការស្វែងរកថត និងការប្រៀបធៀប នឹងអាចប្រើបានបន្ទាប់ពីជ្រើសរើសកន្លែងធ្វើការមូលដ្ឋាន។ ការបញ្ជា Cloud សម្រាប់ស្ថានីយ កម្មវិធីរុករក កន្លែងធ្វើការ និង VM នៅតែអាចប្រើបាននៅទីនេះ។" + "value": "ការបញ្ជាថត ស៊ីម្យូឡាទ័រ ការបង្កើតកម្មវិធីរុករកមូលដ្ឋាន ការស្វែងរកថត និងការប្រៀបធៀប នឹងអាចប្រើបានបន្ទាប់ពីជ្រើសរើសកន្លែងធ្វើការមូលដ្ឋាន។ ការបញ្ជា Cloud VM អាចមិនអាចប្រើបាននៅទីនេះ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Mappe-, simulator-, lokal nettleseroppretting-, katalogsøk- og diff-kommandoer er tilgjengelige etter at du har valgt et lokalt arbeidsområde. Cloud-kommandoer for terminal, nettleser, arbeidsområde og VM er fortsatt tilgjengelige her." + "value": "Mappe-, simulator-, lokal nettleseroppretting-, katalogsøk- og diff-kommandoer er tilgjengelige etter at du har valgt et lokalt arbeidsområde. Cloud VM-kommandoer er kanskje ikke tilgjengelige her." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Polecenia dotyczące folderów, symulatora, tworzenia lokalnej przeglądarki, wyszukiwania w katalogach i porównywania są dostępne po wybraniu lokalnego obszaru roboczego. Polecenia Cloud dotyczące terminala, przeglądarki, obszaru roboczego i maszyny wirtualnej są nadal dostępne tutaj." + "value": "Polecenia dotyczące folderów, symulatora, tworzenia lokalnej przeglądarki, wyszukiwania w katalogach i porównywania są dostępne po wybraniu lokalnego obszaru roboczego. Polecenia Cloud VM mogą być tutaj niedostępne." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Os comandos de pasta, simulador, criação de navegador local, pesquisa em diretórios e diferenças ficam disponíveis depois que você seleciona um espaço de trabalho local. Os comandos Cloud de terminal, navegador, espaço de trabalho e VM continuam disponíveis aqui." + "value": "Os comandos de pasta, simulador, criação de navegador local, pesquisa em diretórios e diferenças ficam disponíveis depois que você seleciona um espaço de trabalho local. Os comandos de VM do Cloud podem não estar disponíveis aqui." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Команды для папок, симулятора, создания локального браузера, поиска в каталогах и сравнения доступны после выбора локального рабочего пространства. Команды Cloud для терминала, браузера, рабочего пространства и виртуальной машины по-прежнему доступны здесь." + "value": "Команды для папок, симулятора, создания локального браузера, поиска в каталогах и сравнения доступны после выбора локального рабочего пространства. Команды Cloud VM могут быть недоступны здесь." } }, "th": { "stringUnit": { "state": "translated", - "value": "คำสั่งโฟลเดอร์ โปรแกรมจำลอง การสร้างเบราว์เซอร์ภายในเครื่อง การค้นหาไดเรกทอรี และการเปรียบเทียบ จะใช้งานได้หลังจากเลือกพื้นที่ทำงานภายในเครื่อง คำสั่ง Cloud สำหรับเทอร์มินัล เบราว์เซอร์ พื้นที่ทำงาน และ VM ยังคงใช้งานได้ที่นี่" + "value": "คำสั่งโฟลเดอร์ โปรแกรมจำลอง การสร้างเบราว์เซอร์ภายในเครื่อง การค้นหาไดเรกทอรี และการเปรียบเทียบ จะใช้งานได้หลังจากเลือกพื้นที่ทำงานภายในเครื่อง คำสั่ง Cloud VM อาจไม่พร้อมใช้งานที่นี่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Klasör, simülatör, yerel tarayıcı oluşturma, dizin arama ve fark komutları, yerel bir çalışma alanı seçildikten sonra kullanılabilir. Terminal, tarayıcı, çalışma alanı ve VM için Cloud komutları burada kullanılmaya devam eder." + "value": "Klasör, simülatör, yerel tarayıcı oluşturma, dizin arama ve fark komutları, yerel bir çalışma alanı seçildikten sonra kullanılabilir. Cloud VM komutları burada kullanılamayabilir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Команди для папок, симулятора, створення локального браузера, пошуку в каталогах і порівняння доступні після вибору локального робочого простору. Команди Cloud для термінала, браузера, робочого простору та віртуальної машини залишаються доступними тут." + "value": "Команди для папок, симулятора, створення локального браузера, пошуку в каталогах і порівняння доступні після вибору локального робочого простору. Команди Cloud VM можуть бути тут недоступні." } } } @@ -600494,6 +600494,131 @@ } } }, + "command.cloudVM.availabilityInfo.keywords": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cloud, workspace, availability, local, unavailable, actions" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud, Arbeitsbereich, Verfügbarkeit, lokal, nicht verfügbar, Aktionen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cloud, espace de travail, disponibilité, local, indisponible, actions" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "السحابة, مساحة العمل, التوفر, محلي, غير متاح, إجراءات" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cloud, espacio de trabajo, disponibilidad, local, no disponible, acciones" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Cloud, 工作區, 可用性, 本機, 無法使用, 動作" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cloud, 工作区, 可用性, 本地, 不可用, 操作" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud, 작업 공간, 사용 가능 여부, 로컬, 사용할 수 없음, 동작" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud, ワークスペース, 利用可能性, ローカル, 利用不可, アクション" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Cloud, radni prostor, dostupnost, lokalno, nedostupno, radnje" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Cloud, arbejdsområde, tilgængelighed, lokal, utilgængelig, handlinger" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Cloud, spazio di lavoro, disponibilità, locale, non disponibile, azioni" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Cloud, កន្លែងធ្វើការ, ភាពអាចប្រើបាន, មូលដ្ឋាន, មិនអាចប្រើបាន, សកម្មភាព" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Cloud, arbeidsområde, tilgjengelighet, lokal, utilgjengelig, handlinger" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Cloud, obszar roboczy, dostępność, lokalne, niedostępne, działania" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Cloud, espaço de trabalho, disponibilidade, local, indisponível, ações" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Cloud, рабочее пространство, доступность, локальный, недоступно, действия" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Cloud, พื้นที่ทำงาน, ความพร้อมใช้งาน, ในเครื่อง, ไม่พร้อมใช้งาน, การทำงาน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cloud, çalışma alanı, kullanılabilirlik, yerel, kullanılamıyor, işlemler" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Cloud, робочий простір, доступність, локальний, недоступно, дії" + } + } + } + }, "command.cloudVM.availabilityInfo.subtitle": { "extractionState": "manual", "localizations": { diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index 4d78b05133d2..97b390efafc1 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -201,7 +201,13 @@ extension ContentView { locale: locale ) }, - keywords: ["cloud", "workspace", "availability", "local", "unavailable", "actions"], + keywords: String( + localized: "command.cloudVM.availabilityInfo.keywords", + defaultValue: "cloud, workspace, availability, local, unavailable, actions", + locale: locale + ) + .split(separator: ",") + .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }, when: { $0.bool(CommandPaletteContextKeys.workspaceIsCloud) } ) } @@ -218,7 +224,7 @@ extension ContentView { ) alert.informativeText = String( localized: "command.cloudVM.availabilityInfo.alertMessage", - defaultValue: "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud terminal, browser, workspace, and VM commands remain available here." + defaultValue: "Folder, simulator, local browser creation, directory search, and diff commands are available after selecting a local workspace. Cloud VM commands may be unavailable here." ) alert.addButton(withTitle: String(localized: "common.ok", defaultValue: "OK")) alert.runModal() diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index bb71858a1557..99b172d378ec 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -883,6 +883,10 @@ final class CommandPaletteCloudCommandTests: XCTestCase { XCTAssertTrue(contribution.when(cloudContext)) XCTAssertEqual(contribution.title(cloudContext), "Show Cloud command availability") XCTAssertEqual(contribution.subtitle(cloudContext), "Cloud workspace") + XCTAssertEqual( + contribution.keywords, + ["cloud", "workspace", "availability", "local", "unavailable", "actions"] + ) } /// Cloud contributions include each supported current-VM operation. diff --git a/docs/command-palette-cloud-parity.md b/docs/command-palette-cloud-parity.md index 7415e156bd84..5b4dafcb9086 100644 --- a/docs/command-palette-cloud-parity.md +++ b/docs/command-palette-cloud-parity.md @@ -11,7 +11,7 @@ the palette only applies the capability gate before it materializes a command. | --- | --- | --- | --- | | Shared | Workspace creation and lifecycle, workspace and tab names/colors/read state, pane navigation and sizing, terminal creation and splits, terminal search and input controls, copy/screen actions, Cloud browser navigation/focus/zoom/devtools/console/React Grab/history/duplicate, canvas/layout controls, notifications, settings, account actions, and **New Cloud Machine** | Shown when the normal context gate passes | Shown when the normal context gate passes; terminal creation/splits use the Cloud terminal reservation and remote placement path | | Cloud-only | Fork, checkpoint, restore, promote-to-template, status, ports, tools, and agent handoff for the current Cloud VM | Hidden because there is no selected VM target | Shown only for the selected Cloud VM; handlers resolve that selected workspace rather than another open machine | -| Local-only | New browser workspace/tab, new Agent Chat, new Simulator pane, open a local folder or VS Code Inline folder, open workspace pull requests, diff viewers, directory search, VS Code serve-web stop/restart, browser splits, terminal-to-browser splits, and every `palette.terminalOpenDirectory.*` action | Shown when the normal context gate passes | Omitted because these create or inspect this Mac's local filesystem/browser/simulator resources | +| Local-only | New browser workspace/tab, new Agent Chat, new Simulator pane, open a local folder or VS Code Inline folder, open workspace pull requests, diff viewers, directory search, VS Code serve-web stop/restart, browser splits, terminal-to-browser splits, terminal text-box file attachment, and every `palette.terminalOpenDirectory.*` action | Shown when the normal context gate passes | Omitted because these create or inspect this Mac's local filesystem/browser/simulator resources | Agent conversation forks remain shared where the existing remote capability probe confirms that the selected terminal can fork. A failed probe leaves the From eea0219eb8cb1337ff39a33b78a57237fa9ebb11 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:16:28 -0700 Subject: [PATCH 08/31] feat: gate Cloud palette actions by VM capabilities --- .../Context/CommandPaletteContextKeys.swift | 10 +++ Sources/ContentView+AuthCommandPalette.swift | 21 ++++-- Sources/ContentView.swift | 26 ++++++++ .../ShortcutAndCommandPaletteTests.swift | 65 ++++++++++++++++--- docs/command-palette-cloud-parity.md | 2 +- 5 files changed, 109 insertions(+), 15 deletions(-) diff --git a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift index ad048c36fa2b..bb8508345c3d 100644 --- a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift +++ b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift @@ -20,6 +20,16 @@ public struct CommandPaletteContextKeys: Hashable, Sendable { /// The app sets this key from the workspace's explicit Cloud VM identity. /// SSH and other remote workspaces intentionally do not set it. public static let workspaceIsCloud = CommandPaletteContextKeys(rawValue: "workspace.isCloud") + /// Whether the selected Cloud VM has a server-provided capability snapshot. + public static let cloudVMCapabilitiesKnown = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.capabilitiesKnown") + /// Whether the selected Cloud VM supports fork. + public static let cloudVMSupportsFork = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsFork") + /// Whether the selected Cloud VM supports checkpoint or template promotion. + public static let cloudVMSupportsSnapshot = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsSnapshot") + /// Whether the selected Cloud VM supports checkpoint restore. + public static let cloudVMSupportsRestore = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsRestore") + /// Whether the selected Cloud VM supports port previews. + public static let cloudVMSupportsPorts = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsPorts") /// Selected workspace display name. public static let workspaceName = CommandPaletteContextKeys(rawValue: "workspace.name") /// Whether the workspace has a custom name. diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index 97b390efafc1..2509183d4d32 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -120,6 +120,12 @@ extension ContentView { func constant(_ value: String) -> (CommandPaletteContextSnapshot) -> String { { _ in value } } + func capabilityGate(_ key: CommandPaletteContextKeys) -> (CommandPaletteContextSnapshot) -> Bool { + { context in + !context.bool(CommandPaletteContextKeys.cloudVMCapabilitiesKnown) + || context.bool(key) + } + } let subtitle = constant(String(localized: "command.cloudVM.subtitle", defaultValue: "Cloud")) return [ CommandPaletteCommandContribution( @@ -132,25 +138,29 @@ extension ContentView { commandId: commandPaletteCloudForkCommandId, title: constant(String(localized: "command.cloudVM.fork.title", defaultValue: "Fork Current Cloud VM")), subtitle: subtitle, - keywords: ["cloud", "vm", "fork", "clone", "branch"] + keywords: ["cloud", "vm", "fork", "clone", "branch"], + when: capabilityGate(.cloudVMSupportsFork) ), CommandPaletteCommandContribution( commandId: commandPaletteCloudSnapshotCommandId, title: constant(String(localized: "command.cloudVM.snapshot.title", defaultValue: "Checkpoint Current Cloud VM")), subtitle: subtitle, - keywords: ["cloud", "vm", "snapshot", "checkpoint", "save"] + keywords: ["cloud", "vm", "snapshot", "checkpoint", "save"], + when: capabilityGate(.cloudVMSupportsSnapshot) ), CommandPaletteCommandContribution( commandId: commandPaletteCloudRestoreCommandId, title: constant(String(localized: "command.cloudVM.restore.title", defaultValue: "Restore Cloud VM From Checkpoint")), subtitle: subtitle, - keywords: ["cloud", "vm", "restore", "snapshot", "checkpoint"] + keywords: ["cloud", "vm", "restore", "snapshot", "checkpoint"], + when: capabilityGate(.cloudVMSupportsRestore) ), CommandPaletteCommandContribution( commandId: commandPaletteCloudPromoteTemplateCommandId, title: constant(String(localized: "command.cloudVM.promoteTemplate.title", defaultValue: "Promote Current VM to Template")), subtitle: subtitle, - keywords: ["cloud", "vm", "template", "promote", "snapshot"] + keywords: ["cloud", "vm", "template", "promote", "snapshot"], + when: capabilityGate(.cloudVMSupportsSnapshot) ), CommandPaletteCommandContribution( commandId: commandPaletteCloudStatusCommandId, @@ -162,7 +172,8 @@ extension ContentView { commandId: commandPaletteCloudPortsCommandId, title: constant(String(localized: "command.cloudVM.ports.title", defaultValue: "Show Cloud VM Ports")), subtitle: subtitle, - keywords: ["cloud", "vm", "ports", "preview", "localhost"] + keywords: ["cloud", "vm", "ports", "preview", "localhost"], + when: capabilityGate(.cloudVMSupportsPorts) ), CommandPaletteCommandContribution( commandId: commandPaletteCloudToolsCommandId, diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index f546a1c6a6a5..2b0d24cfc65e 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7277,6 +7277,32 @@ struct ContentView: View { CommandPaletteContextKeys.workspaceIsCloud, workspace.isManagedCloudVMWorkspace || workspace.cloudVMID != nil ) + let cloudCapabilities = workspace.cloudVMID.flatMap { vmID in + (SurfaceCatalog.shared.provider(for: .cloud(vmID)) as? CmuxTuiSurfaceProvider)?.capabilities + } + snapshot.setBool( + CommandPaletteContextKeys.cloudVMCapabilitiesKnown, + cloudCapabilities != nil + ) + // Legacy managed workspaces can predate the surface provider's capability + // snapshot. Preserve their existing command visibility until the provider + // publishes authoritative server capabilities. + snapshot.setBool( + CommandPaletteContextKeys.cloudVMSupportsFork, + cloudCapabilities?.fork ?? true + ) + snapshot.setBool( + CommandPaletteContextKeys.cloudVMSupportsSnapshot, + cloudCapabilities?.snapshot ?? true + ) + snapshot.setBool( + CommandPaletteContextKeys.cloudVMSupportsRestore, + cloudCapabilities?.restore ?? true + ) + snapshot.setBool( + CommandPaletteContextKeys.cloudVMSupportsPorts, + cloudCapabilities?.ports ?? true + ) snapshot.setString(CommandPaletteContextKeys.workspaceName, workspaceDisplayName(workspace)) snapshot.setBool(CommandPaletteContextKeys.workspaceHasCustomName, workspace.customTitle != nil) snapshot.setBool(CommandPaletteContextKeys.workspaceHasCustomDescription, workspace.hasCustomDescription) diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index 99b172d378ec..fb976a839bd7 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -13,6 +13,7 @@ import Bonsplit import UserNotifications import Sparkle import CmuxUpdater +import Testing // Selective imports: the app target also defines AppIconMode/StoredShortcut/etc., // so a blanket `import CmuxSettings` here makes those names ambiguous. Import only // the settings symbols this file needs. @@ -869,9 +870,11 @@ final class CommandPaletteRenameSelectionSettingsTests: XCTestCase { } } -final class CommandPaletteCloudCommandTests: XCTestCase { +@Suite("Cloud command palette") +struct CommandPaletteCloudAvailabilityTests { /// Cloud availability guidance is visible only for Cloud workspaces. - func testCloudAvailabilityInfoAppearsOnlyForCloudWorkspace() { + @Test("availability guidance is visible only for Cloud workspaces") + func availabilityInfoAppearsOnlyForCloudWorkspace() { let contribution = ContentView.commandPaletteCloudAvailabilityInfoContribution( locale: Locale(identifier: "en") ) @@ -879,15 +882,59 @@ final class CommandPaletteCloudCommandTests: XCTestCase { var cloudContext = CommandPaletteContextSnapshot() cloudContext.setBool(CommandPaletteContextKeys.workspaceIsCloud, true) - XCTAssertFalse(contribution.when(localContext)) - XCTAssertTrue(contribution.when(cloudContext)) - XCTAssertEqual(contribution.title(cloudContext), "Show Cloud command availability") - XCTAssertEqual(contribution.subtitle(cloudContext), "Cloud workspace") - XCTAssertEqual( - contribution.keywords, - ["cloud", "workspace", "availability", "local", "unavailable", "actions"] + #expect(!contribution.when(localContext)) + #expect(contribution.when(cloudContext)) + #expect(contribution.title(cloudContext) == "Show Cloud command availability") + #expect(contribution.subtitle(cloudContext) == "Cloud workspace") + #expect( + contribution.keywords == [ + "cloud", "workspace", "availability", "local", "unavailable", "actions", + ] + ) + } + + /// Server-advertised VM capabilities hide only the operations the selected machine cannot honor. + @MainActor + @Test("server capabilities gate Cloud VM operations") + func cloudVMCapabilitiesGateOperations() { + let key = BetaFeaturesCatalogSection().cloudMachines.userDefaultsKey + let defaults = UserDefaults.standard + let original = defaults.object(forKey: key) + let flag = CmuxFeatureFlags.cloudMachinesFlag + let originalOverride = CmuxFeatureFlags.shared.overrideValue(for: flag) + defaults.set(true, forKey: key) + CmuxFeatureFlags.shared.setOverride(true, for: flag) + defer { + if let original { defaults.set(original, forKey: key) } + else { defaults.removeObject(forKey: key) } + CmuxFeatureFlags.shared.setOverride(originalOverride, for: flag) + } + let contributions = ContentView.commandPaletteCloudCommandContributions(isAuthenticated: true) + var context = CommandPaletteContextSnapshot() + context.setBool(CommandPaletteContextKeys.workspaceIsCloud, true) + context.setBool(CommandPaletteContextKeys.cloudVMCapabilitiesKnown, true) + context.setBool(CommandPaletteContextKeys.cloudVMSupportsFork, false) + context.setBool(CommandPaletteContextKeys.cloudVMSupportsSnapshot, false) + context.setBool(CommandPaletteContextKeys.cloudVMSupportsRestore, false) + context.setBool(CommandPaletteContextKeys.cloudVMSupportsPorts, false) + + let hidden = Set( + contributions.filter { !$0.when(context) }.map(\.commandId) + ) + #expect(hidden.contains(ContentView.commandPaletteCloudForkCommandId)) + #expect(hidden.contains(ContentView.commandPaletteCloudSnapshotCommandId)) + #expect(hidden.contains(ContentView.commandPaletteCloudRestoreCommandId)) + #expect(hidden.contains(ContentView.commandPaletteCloudPromoteTemplateCommandId)) + #expect(hidden.contains(ContentView.commandPaletteCloudPortsCommandId)) + #expect(!hidden.contains(ContentView.commandPaletteCloudToolsCommandId)) + #expect(!hidden.contains(ContentView.commandPaletteCloudHandoffCommandId)) + #expect( + contributions.first { $0.commandId == ContentView.commandPaletteCloudStatusCommandId }?.when(context) == true ) } +} + +final class CommandPaletteCloudCommandTests: XCTestCase { /// Cloud contributions include each supported current-VM operation. @MainActor diff --git a/docs/command-palette-cloud-parity.md b/docs/command-palette-cloud-parity.md index 5b4dafcb9086..7520f3ffcb7c 100644 --- a/docs/command-palette-cloud-parity.md +++ b/docs/command-palette-cloud-parity.md @@ -10,7 +10,7 @@ the palette only applies the capability gate before it materializes a command. | Capability | Palette actions | Local workspace | Cloud workspace | | --- | --- | --- | --- | | Shared | Workspace creation and lifecycle, workspace and tab names/colors/read state, pane navigation and sizing, terminal creation and splits, terminal search and input controls, copy/screen actions, Cloud browser navigation/focus/zoom/devtools/console/React Grab/history/duplicate, canvas/layout controls, notifications, settings, account actions, and **New Cloud Machine** | Shown when the normal context gate passes | Shown when the normal context gate passes; terminal creation/splits use the Cloud terminal reservation and remote placement path | -| Cloud-only | Fork, checkpoint, restore, promote-to-template, status, ports, tools, and agent handoff for the current Cloud VM | Hidden because there is no selected VM target | Shown only for the selected Cloud VM; handlers resolve that selected workspace rather than another open machine | +| Cloud-only | Fork, checkpoint, restore, promote-to-template, status, ports, tools, and agent handoff for the current Cloud VM | Hidden because there is no selected VM target | Shown only for the selected Cloud VM, and capability-dependent actions are omitted when the server says that VM cannot honor them; handlers resolve that selected workspace rather than another open machine | | Local-only | New browser workspace/tab, new Agent Chat, new Simulator pane, open a local folder or VS Code Inline folder, open workspace pull requests, diff viewers, directory search, VS Code serve-web stop/restart, browser splits, terminal-to-browser splits, terminal text-box file attachment, and every `palette.terminalOpenDirectory.*` action | Shown when the normal context gate passes | Omitted because these create or inspect this Mac's local filesystem/browser/simulator resources | Agent conversation forks remain shared where the existing remote capability From ff1ae6aced85b1fa86dec5eb27311ddfe23d3f55 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 23:04:48 -0700 Subject: [PATCH 09/31] test: serialize Cloud palette feature flag coverage --- cmuxTests/ShortcutAndCommandPaletteTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index a62dc6b473ee..ddfe9eb7255f 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -878,7 +878,7 @@ final class CommandPaletteRenameSelectionSettingsTests: XCTestCase { } } -@Suite("Cloud command palette") +@Suite("Cloud command palette", .serialized) struct CommandPaletteCloudAvailabilityTests { /// Cloud availability guidance is visible only for Cloud workspaces. @Test("availability guidance is visible only for Cloud workspaces") From dffe328406b548f75b6b540773d340e6a41483d6 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 23:42:10 -0700 Subject: [PATCH 10/31] test: reproduce Cloud restore and terminal chat palette gaps --- ...andPaletteCloudCapabilityPolicyTests.swift | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift index e8309a566b3d..1a1df708485b 100644 --- a/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift +++ b/Packages/macOS/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteCloudCapabilityPolicyTests.swift @@ -23,6 +23,9 @@ struct CommandPaletteCloudCapabilityPolicyTests { #expect( policy.capability(for: "palette.cloud.fork") == .cloudOnly ) + #expect( + policy.capability(for: "palette.cloud.restore") == .shared + ) #expect( policy.capability(for: "palette.cloud.newMachine") == .shared ) @@ -35,6 +38,9 @@ struct CommandPaletteCloudCapabilityPolicyTests { #expect( policy.capability(for: "palette.terminalOpenDirectory.finder") == .localOnly ) + #expect( + policy.capability(for: "palette.openTerminalChatView") == .localOnly + ) } /// The audited sets stay explicit so a new palette action cannot silently drift. @@ -43,7 +49,6 @@ struct CommandPaletteCloudCapabilityPolicyTests { let cloudOnly = [ "palette.cloud.fork", "palette.cloud.snapshot", - "palette.cloud.restore", "palette.cloud.promoteTemplate", "palette.cloud.status", "palette.cloud.ports", @@ -68,6 +73,7 @@ struct CommandPaletteCloudCapabilityPolicyTests { "palette.browserSplitDown", "palette.terminalSplitBrowserRight", "palette.terminalSplitBrowserDown", + "palette.openTerminalChatView", "palette.terminalOpenDirectory.finder", ] @@ -75,6 +81,7 @@ struct CommandPaletteCloudCapabilityPolicyTests { #expect(localOnly.allSatisfy { policy.capability(for: $0) == .localOnly }) #expect(policy.capability(for: "palette.newTerminalTab") == .shared) #expect(policy.capability(for: "palette.browserBack") == .shared) + #expect(policy.capability(for: "palette.cloud.restore") == .shared) } /// Context gating allows only capabilities valid for the selected workspace. @@ -120,5 +127,29 @@ struct CommandPaletteCloudCapabilityPolicyTests { context: localContext ) ) + #expect( + policy.allows( + commandId: "palette.cloud.restore", + context: localContext + ) + ) + #expect( + policy.allows( + commandId: "palette.cloud.restore", + context: cloudContext + ) + ) + #expect( + !policy.allows( + commandId: "palette.openTerminalChatView", + context: cloudContext + ) + ) + #expect( + policy.allows( + commandId: "palette.openTerminalChatView", + context: localContext + ) + ) } } From ddd8a574147dfbe2f5cdf21a4efcbc21e16a204e Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Wed, 30 Sep 2026 23:50:58 -0700 Subject: [PATCH 11/31] fix: align Cloud palette capability gates with CLI routes --- .../Context/CommandPaletteContextKeys.swift | 6 ++---- .../CommandPaletteCloudCapabilityPolicy.swift | 4 ++-- Sources/ContentView+AuthCommandPalette.swift | 8 ++++---- Sources/ContentView.swift | 8 ++------ cmuxTests/ShortcutAndCommandPaletteTests.swift | 14 ++++++++++---- docs/command-palette-cloud-parity.md | 10 ++++++---- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift index dc0aad5a1b8a..48fc83d13b3e 100644 --- a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift +++ b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Context/CommandPaletteContextKeys.swift @@ -26,10 +26,8 @@ public struct CommandPaletteContextKeys: Hashable, Sendable { public static let cloudVMSupportsFork = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsFork") /// Whether the selected Cloud VM supports checkpoint or template promotion. public static let cloudVMSupportsSnapshot = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsSnapshot") - /// Whether the selected Cloud VM supports checkpoint restore. - public static let cloudVMSupportsRestore = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsRestore") - /// Whether the selected Cloud VM supports port previews. - public static let cloudVMSupportsPorts = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsPorts") + /// Whether the selected Cloud VM permits control-plane command execution. + public static let cloudVMSupportsExec = CommandPaletteContextKeys(rawValue: "workspace.cloudVM.supportsExec") /// Selected workspace display name. public static let workspaceName = CommandPaletteContextKeys(rawValue: "workspace.name") /// Whether the workspace has a custom name. diff --git a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift index 623b140b8686..6114f41bfde2 100644 --- a/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift +++ b/Packages/macOS/CmuxCommandPalette/Sources/CmuxCommandPalette/Policy/CommandPaletteCloudCapabilityPolicy.swift @@ -29,7 +29,6 @@ public struct CommandPaletteCloudCapabilityPolicy: Sendable { switch commandId { case "palette.cloud.fork", "palette.cloud.snapshot", - "palette.cloud.restore", "palette.cloud.promoteTemplate", "palette.cloud.status", "palette.cloud.ports", @@ -52,7 +51,8 @@ public struct CommandPaletteCloudCapabilityPolicy: Sendable { "palette.browserSplitRight", "palette.browserSplitDown", "palette.terminalSplitBrowserRight", - "palette.terminalSplitBrowserDown": + "palette.terminalSplitBrowserDown", + "palette.openTerminalChatView": return .localOnly default: return .shared diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index 2509183d4d32..3dcdb991a9b8 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -152,8 +152,7 @@ extension ContentView { commandId: commandPaletteCloudRestoreCommandId, title: constant(String(localized: "command.cloudVM.restore.title", defaultValue: "Restore Cloud VM From Checkpoint")), subtitle: subtitle, - keywords: ["cloud", "vm", "restore", "snapshot", "checkpoint"], - when: capabilityGate(.cloudVMSupportsRestore) + keywords: ["cloud", "vm", "restore", "snapshot", "checkpoint"] ), CommandPaletteCommandContribution( commandId: commandPaletteCloudPromoteTemplateCommandId, @@ -173,13 +172,14 @@ extension ContentView { title: constant(String(localized: "command.cloudVM.ports.title", defaultValue: "Show Cloud VM Ports")), subtitle: subtitle, keywords: ["cloud", "vm", "ports", "preview", "localhost"], - when: capabilityGate(.cloudVMSupportsPorts) + when: capabilityGate(.cloudVMSupportsExec) ), CommandPaletteCommandContribution( commandId: commandPaletteCloudToolsCommandId, title: constant(String(localized: "command.cloudVM.tools.title", defaultValue: "Inspect Cloud VM Tools")), subtitle: subtitle, - keywords: ["cloud", "vm", "tools", "bootstrap", "zsh", "gh", "htop", "btop"] + keywords: ["cloud", "vm", "tools", "bootstrap", "zsh", "gh", "htop", "btop"], + when: capabilityGate(.cloudVMSupportsExec) ), CommandPaletteCommandContribution( commandId: commandPaletteCloudHandoffCommandId, diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 85317f7dc6fa..9faf055e5213 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -7157,12 +7157,8 @@ struct ContentView: View { cloudCapabilities?.snapshot ?? true ) snapshot.setBool( - CommandPaletteContextKeys.cloudVMSupportsRestore, - cloudCapabilities?.restore ?? true - ) - snapshot.setBool( - CommandPaletteContextKeys.cloudVMSupportsPorts, - cloudCapabilities?.ports ?? true + CommandPaletteContextKeys.cloudVMSupportsExec, + cloudCapabilities?.exec ?? true ) snapshot.setString(CommandPaletteContextKeys.workspaceName, workspaceDisplayName(workspace)) snapshot.setBool(CommandPaletteContextKeys.workspaceHasCustomName, workspace.customTitle != nil) diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index ddfe9eb7255f..7b32b900237d 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -923,22 +923,28 @@ struct CommandPaletteCloudAvailabilityTests { context.setBool(CommandPaletteContextKeys.cloudVMCapabilitiesKnown, true) context.setBool(CommandPaletteContextKeys.cloudVMSupportsFork, false) context.setBool(CommandPaletteContextKeys.cloudVMSupportsSnapshot, false) - context.setBool(CommandPaletteContextKeys.cloudVMSupportsRestore, false) - context.setBool(CommandPaletteContextKeys.cloudVMSupportsPorts, false) + context.setBool(CommandPaletteContextKeys.cloudVMSupportsExec, false) let hidden = Set( contributions.filter { !$0.when(context) }.map(\.commandId) ) #expect(hidden.contains(ContentView.commandPaletteCloudForkCommandId)) #expect(hidden.contains(ContentView.commandPaletteCloudSnapshotCommandId)) - #expect(hidden.contains(ContentView.commandPaletteCloudRestoreCommandId)) + #expect(!hidden.contains(ContentView.commandPaletteCloudRestoreCommandId)) #expect(hidden.contains(ContentView.commandPaletteCloudPromoteTemplateCommandId)) #expect(hidden.contains(ContentView.commandPaletteCloudPortsCommandId)) - #expect(!hidden.contains(ContentView.commandPaletteCloudToolsCommandId)) + #expect(hidden.contains(ContentView.commandPaletteCloudToolsCommandId)) #expect(!hidden.contains(ContentView.commandPaletteCloudHandoffCommandId)) #expect( contributions.first { $0.commandId == ContentView.commandPaletteCloudStatusCommandId }?.when(context) == true ) + + context.setBool(CommandPaletteContextKeys.cloudVMSupportsExec, true) + let executionSupportedHidden = Set( + contributions.filter { !$0.when(context) }.map(\.commandId) + ) + #expect(!executionSupportedHidden.contains(ContentView.commandPaletteCloudPortsCommandId)) + #expect(!executionSupportedHidden.contains(ContentView.commandPaletteCloudToolsCommandId)) } } diff --git a/docs/command-palette-cloud-parity.md b/docs/command-palette-cloud-parity.md index 7520f3ffcb7c..15ecbfab32e8 100644 --- a/docs/command-palette-cloud-parity.md +++ b/docs/command-palette-cloud-parity.md @@ -9,9 +9,9 @@ the palette only applies the capability gate before it materializes a command. | Capability | Palette actions | Local workspace | Cloud workspace | | --- | --- | --- | --- | -| Shared | Workspace creation and lifecycle, workspace and tab names/colors/read state, pane navigation and sizing, terminal creation and splits, terminal search and input controls, copy/screen actions, Cloud browser navigation/focus/zoom/devtools/console/React Grab/history/duplicate, canvas/layout controls, notifications, settings, account actions, and **New Cloud Machine** | Shown when the normal context gate passes | Shown when the normal context gate passes; terminal creation/splits use the Cloud terminal reservation and remote placement path | -| Cloud-only | Fork, checkpoint, restore, promote-to-template, status, ports, tools, and agent handoff for the current Cloud VM | Hidden because there is no selected VM target | Shown only for the selected Cloud VM, and capability-dependent actions are omitted when the server says that VM cannot honor them; handlers resolve that selected workspace rather than another open machine | -| Local-only | New browser workspace/tab, new Agent Chat, new Simulator pane, open a local folder or VS Code Inline folder, open workspace pull requests, diff viewers, directory search, VS Code serve-web stop/restart, browser splits, terminal-to-browser splits, terminal text-box file attachment, and every `palette.terminalOpenDirectory.*` action | Shown when the normal context gate passes | Omitted because these create or inspect this Mac's local filesystem/browser/simulator resources | +| Shared | Workspace creation and lifecycle, workspace and tab names/colors/read state, pane navigation and sizing, terminal creation and splits, terminal search and input controls, copy/screen actions, Cloud browser navigation/focus/zoom/devtools/console/React Grab/history/duplicate, canvas/layout controls, notifications, settings, account actions, **New Cloud Machine**, and restoring a Cloud VM from a supplied checkpoint or snapshot ID | Shown when the normal context gate passes; Cloud restore also requires the Cloud feature and account | Shown when the normal context gate passes; terminal creation/splits use the Cloud terminal reservation and remote placement path; Cloud restore creates a new machine from the supplied snapshot and does not target the selected VM | +| Cloud-only | Fork, checkpoint, promote-to-template, status, ports, tools, and agent handoff for the current Cloud VM | Hidden because there is no selected VM target | Shown only for the selected Cloud VM, and capability-dependent actions are omitted when the server says that VM cannot honor them; ports and tools require the VM's execution capability because their CLI paths run `vm.exec` | +| Local-only | New browser workspace/tab, new Agent Chat, open terminal as chat, new Simulator pane, open a local folder or VS Code Inline folder, open workspace pull requests, diff viewers, directory search, VS Code serve-web stop/restart, browser splits, terminal-to-browser splits, terminal text-box file attachment, and every `palette.terminalOpenDirectory.*` action | Shown when the normal context gate passes | Omitted because these create or inspect this Mac's local filesystem/browser/simulator resources | Agent conversation forks remain shared where the existing remote capability probe confirms that the selected terminal can fork. A failed probe leaves the @@ -22,7 +22,9 @@ Cloud browser panes opened from the Cloud tree retain their Cloud resource identity for navigation, zoom, developer tools, console, React Grab, history, and duplication. Creating a new browser surface still requires a local browser creation path, so browser creation and split commands are intentionally omitted -from a Cloud workspace until a Cloud browser creation route exists. +from a Cloud workspace until a Cloud browser creation route exists. Opening a +terminal as chat also creates a local browser split and is omitted for the same +reason. The Cloud palette includes **Show Cloud command availability**, which explains these local-only categories in the current locale. It is available whenever a From 85ab349e54ee1871cfec5494b88a4da466ed9e77 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 00:11:17 -0700 Subject: [PATCH 12/31] fix: remove duplicate titlebar accent environment --- Sources/Update/UpdateTitlebarAccessory.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/Update/UpdateTitlebarAccessory.swift b/Sources/Update/UpdateTitlebarAccessory.swift index 7954a7b31f0c..278e5883b16d 100644 --- a/Sources/Update/UpdateTitlebarAccessory.swift +++ b/Sources/Update/UpdateTitlebarAccessory.swift @@ -986,7 +986,6 @@ private struct TitlebarNotificationBadge: View { @Environment(\.cmuxAccentColor) private var cmuxAccent let unreadModel: SidebarUnreadModel let config: TitlebarControlsStyleConfig - @Environment(\.cmuxAccentColor) private var cmuxAccent @Environment(\.cmuxGlobalFontMagnificationPercent) private var globalFontPercent var body: some View { From ea89f4a34afd4fc8fda9f36f7e842dc45b5a5279 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 00:20:04 -0700 Subject: [PATCH 13/31] fix: use accent color value in notification row --- Sources/Update/NotificationPopoverRow.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Update/NotificationPopoverRow.swift b/Sources/Update/NotificationPopoverRow.swift index 116fe12cd6e3..7c39e3064882 100644 --- a/Sources/Update/NotificationPopoverRow.swift +++ b/Sources/Update/NotificationPopoverRow.swift @@ -97,7 +97,7 @@ struct NotificationPopoverRow: View, Equatable { private var rowContent: some View { HStack(spacing: 0) { Rectangle() - .fill(notification.isRead ? Color.clear : cmuxAccent) + .fill(notification.isRead ? Color.clear : cmuxAccent.color) .frame(width: 2.5) .padding(.vertical, 6) From 4354ea5e4f7f23ab8fec9898365a3a4c297de2b0 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 00:32:24 -0700 Subject: [PATCH 14/31] fix: unwrap browser restoration document URL --- Sources/Panels/BrowserPanel+PageRestoration.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/Panels/BrowserPanel+PageRestoration.swift b/Sources/Panels/BrowserPanel+PageRestoration.swift index 97672383ee9a..6892005f0e04 100644 --- a/Sources/Panels/BrowserPanel+PageRestoration.swift +++ b/Sources/Panels/BrowserPanel+PageRestoration.swift @@ -83,6 +83,7 @@ extension BrowserPanel { pendingRecoveryURL == nil, BrowserDiscardRestoreStrategy.canRestoreSessionState(for: documentURL), let restoreURL, + let documentURL, BrowserFormStateSnapshot.isSameDocument( Self.remoteProxyDisplayURL(for: documentURL) ?? documentURL, restoreURL From 9c526cd35942b8d63801320a1970493ede82f46e Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 00:44:27 -0700 Subject: [PATCH 15/31] fix: restore test window geometry reset helper --- Sources/AppDelegate.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index 2f466a04e860..5f50f8e7f65b 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -3862,6 +3862,15 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent legacyPersistedWindowGeometryDefaultsKeys.forEach { defaults.removeObjectIfPresent(forKey: $0) } } + /// Forgets the last closed main window's frame so a test process opens its + /// first window at the default size. + nonisolated static func forgetPersistedWindowGeometryForTestProcess( + defaults: UserDefaults = .standard + ) { + removeLegacyPersistedWindowGeometry(defaults: defaults) + defaults.removeObjectIfPresent(forKey: persistedWindowGeometryDefaultsKey) + } + private func persistWindowGeometry(from window: NSWindow?) { guard let window else { return } persistWindowGeometry( From 6780b6375552517ce51f1d964eb23c382f00ce07 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 01:27:20 -0700 Subject: [PATCH 16/31] fix: restore visible notification anchor lookup --- Sources/Update/UpdateTitlebarAccessory.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Sources/Update/UpdateTitlebarAccessory.swift b/Sources/Update/UpdateTitlebarAccessory.swift index 278e5883b16d..3688448850f3 100644 --- a/Sources/Update/UpdateTitlebarAccessory.swift +++ b/Sources/Update/UpdateTitlebarAccessory.swift @@ -280,6 +280,14 @@ final class NotificationsAnchorRegistry { anchors.add(view) } + func visibleAnchor(in window: NSWindow) -> NSView? { + anchors.allObjects.first { + $0.window === window + && !$0.bounds.isEmpty + && notificationsPopoverAnchorIsVisible($0) + } + } + func closestAnchor(in window: NSWindow, to pointInWindow: NSPoint) -> NSView? { anchors.allObjects .compactMap { view -> (view: NSView, distance: CGFloat)? in From 40d7f75df7df74d34ccc648b6f33657432bf97bd Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 01:31:08 -0700 Subject: [PATCH 17/31] fix: keep test geometry reset private --- Sources/AppDelegate.swift | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index 5f50f8e7f65b..ee0dc2c2a0ed 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -1779,7 +1779,10 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent SystemWideHotkeySettings.reset() KeyboardShortcutSettings.resetAll() if TestProcessDefaults.isolatedDomainName == nil { - Self.forgetPersistedWindowGeometryForTestProcess() + Self.removeLegacyPersistedWindowGeometry() + UserDefaults.standard.removeObjectIfPresent( + forKey: Self.persistedWindowGeometryDefaultsKey + ) } } #endif @@ -3862,15 +3865,6 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent legacyPersistedWindowGeometryDefaultsKeys.forEach { defaults.removeObjectIfPresent(forKey: $0) } } - /// Forgets the last closed main window's frame so a test process opens its - /// first window at the default size. - nonisolated static func forgetPersistedWindowGeometryForTestProcess( - defaults: UserDefaults = .standard - ) { - removeLegacyPersistedWindowGeometry(defaults: defaults) - defaults.removeObjectIfPresent(forKey: persistedWindowGeometryDefaultsKey) - } - private func persistWindowGeometry(from window: NSWindow?) { guard let window else { return } persistWindowGeometry( From 60c18510205c639a1d4c1124b49e603379932565 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 01:34:43 -0700 Subject: [PATCH 18/31] fix: keep notification anchor test on shared lookup --- Sources/Update/UpdateTitlebarAccessory.swift | 8 -------- cmuxTests/UpdatePillReleaseVisibilityTests.swift | 5 ++++- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/Sources/Update/UpdateTitlebarAccessory.swift b/Sources/Update/UpdateTitlebarAccessory.swift index 3688448850f3..278e5883b16d 100644 --- a/Sources/Update/UpdateTitlebarAccessory.swift +++ b/Sources/Update/UpdateTitlebarAccessory.swift @@ -280,14 +280,6 @@ final class NotificationsAnchorRegistry { anchors.add(view) } - func visibleAnchor(in window: NSWindow) -> NSView? { - anchors.allObjects.first { - $0.window === window - && !$0.bounds.isEmpty - && notificationsPopoverAnchorIsVisible($0) - } - } - func closestAnchor(in window: NSWindow, to pointInWindow: NSPoint) -> NSView? { anchors.allObjects .compactMap { view -> (view: NSView, distance: CGFloat)? in diff --git a/cmuxTests/UpdatePillReleaseVisibilityTests.swift b/cmuxTests/UpdatePillReleaseVisibilityTests.swift index 49f04a01d0a9..c3746dc2f6ce 100644 --- a/cmuxTests/UpdatePillReleaseVisibilityTests.swift +++ b/cmuxTests/UpdatePillReleaseVisibilityTests.swift @@ -846,7 +846,10 @@ struct NotificationsPopoverAnchorPolicyTests { anchor.isHidden = true #expect( - NotificationsAnchorRegistry.shared.visibleAnchor(in: window) == nil, + NotificationsAnchorRegistry.shared.closestAnchor( + in: window, + to: NSPoint(x: anchor.frame.midX, y: anchor.frame.midY) + ) == nil, "A hidden titlebar accessory anchor must not be selected for keyboard-opened notifications." ) } From ded840b21fd4e9796184aec3094ebbfddf297208 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 02:05:58 -0700 Subject: [PATCH 19/31] fix: repair inherited app-host test compilation --- .../CLINotifyProcessIntegrationRegressionTests.swift | 12 ++++++++++-- cmuxTests/CloudSidebarNativeDropTests.swift | 5 +++-- cmuxTests/PaneResizeShortcutTests.swift | 3 ++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cmuxTests/CLINotifyProcessIntegrationRegressionTests.swift b/cmuxTests/CLINotifyProcessIntegrationRegressionTests.swift index 1d4bf7edf76d..22e561547794 100644 --- a/cmuxTests/CLINotifyProcessIntegrationRegressionTests.swift +++ b/cmuxTests/CLINotifyProcessIntegrationRegressionTests.swift @@ -9616,13 +9616,21 @@ final class CLINotifyProcessIntegrationRegressionTests: XCTestCase { } } - private func codexLaunchEnvironment(context: ClaudeHookContext, sessionId: String) -> [String: String] { - agentLaunchEnvironment( + private func codexLaunchEnvironment( + context: ClaudeHookContext, + sessionId: String, + observedHookPID: String? = nil + ) -> [String: String] { + var environment = agentLaunchEnvironment( context: context, kind: "codex", executable: "/usr/local/bin/codex", arguments: ["/usr/local/bin/codex", "--model", "gpt-5.4"] ) + if let observedHookPID { + environment["CMUX_CODEX_HOOK_PID"] = observedHookPID + } + return environment } func agentLaunchEnvironment( diff --git a/cmuxTests/CloudSidebarNativeDropTests.swift b/cmuxTests/CloudSidebarNativeDropTests.swift index 6500fb9b09a6..fedab34ba843 100644 --- a/cmuxTests/CloudSidebarNativeDropTests.swift +++ b/cmuxTests/CloudSidebarNativeDropTests.swift @@ -143,9 +143,10 @@ struct CloudSidebarNativeDropTests { expectNoSidebarHints(outline) #expect(coordinator.outlineView(outline, validateDrop: info, proposedItem: parent, proposedChildIndex: 0) == .move) outline.draggingExited(info) - #expect(outline.subviews.filter { + let visibleIndicatorsAfterExit = outline.subviews.filter { $0.identifier?.rawValue == "sidebarReorderIndicator" && !$0.isHidden - }.isEmpty) + } + #expect(visibleIndicatorsAfterExit.isEmpty) expectNoSidebarHints(outline) } diff --git a/cmuxTests/PaneResizeShortcutTests.swift b/cmuxTests/PaneResizeShortcutTests.swift index 0f183b9a227b..19a9813ca345 100644 --- a/cmuxTests/PaneResizeShortcutTests.swift +++ b/cmuxTests/PaneResizeShortcutTests.swift @@ -64,7 +64,8 @@ struct PaneResizeShortcutTests { #expect(await AppKitTestEventPump().waitUntil(timeout: .seconds(3)) { workspace.tmuxLayoutSnapshot?.panes.count == 2 }) - let controller = workspace.bonsplitController; let split = try rootSplit(controller) + controller.setContainerFrame(CGRect(x: 0, y: 0, width: 1000, height: 1000)) + let split = try rootSplit(controller) #expect(controller.setDividerPosition(0.5, forSplit: try #require(UUID(uuidString: split.id)))) workspace.didProgrammaticallyChangeSplitGeometry() From a22dbeb0ffaf71aaeea8d5faf13f28575d5dbffa Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 02:27:25 -0700 Subject: [PATCH 20/31] fix: include CLI error in CLI test target --- cmux.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index 53441d579dae..a394faeb08a3 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -639,6 +639,7 @@ C0D3F1F20000000000000103 /* CLICodexYoloResumePersistenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0D3F1F20000000000000104 /* CLICodexYoloResumePersistenceTests.swift */; }; C11218000000000000000052 /* CLIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C11218000000000000000051 /* CLIError.swift */; }; C11218000000000000000053 /* CLIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C11218000000000000000051 /* CLIError.swift */; }; + C11218000000000000000054 /* CLIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C11218000000000000000051 /* CLIError.swift */; }; 12756C0112756C0112756C01 /* CLIEventsStreamPeerCloseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12756C0212756C0212756C02 /* CLIEventsStreamPeerCloseTests.swift */; }; C51600000000000000000001 /* CLIExecInheritedSignalStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51600000000000000000002 /* CLIExecInheritedSignalStateTests.swift */; }; C1175700000000000000002E /* CLIExplicitSurfaceRoutingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C11757000000000000000015 /* CLIExplicitSurfaceRoutingTests.swift */; }; @@ -13833,6 +13834,7 @@ C11757000000000000000043 /* CLICodexHookTimeoutRegressionTestSupport.swift in Sources */, C1175700000000000000002C /* CLICodexQueuedHookContractTests.swift in Sources */, C1175700000000000000002D /* CLICodexResumeNotificationTests.swift in Sources */, + C11218000000000000000054 /* CLIError.swift in Sources */, C1175700000000000000002E /* CLIExplicitSurfaceRoutingTests.swift in Sources */, C1175700000000000000002F /* CLIHookNoResponseTests.swift in Sources */, C11757000000000000000044 /* CLIHookProcessRunner.swift in Sources */, From 72e28b686ba16472c2b02d028a314b86e18fa05d Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 03:04:28 -0700 Subject: [PATCH 21/31] fix: stabilize inherited agent notification fixtures --- .../AgentSemanticNotificationDeliveryTests.swift | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cmuxTests/AgentSemanticNotificationDeliveryTests.swift b/cmuxTests/AgentSemanticNotificationDeliveryTests.swift index 754416fd4172..11e44125145d 100644 --- a/cmuxTests/AgentSemanticNotificationDeliveryTests.swift +++ b/cmuxTests/AgentSemanticNotificationDeliveryTests.swift @@ -33,6 +33,13 @@ extension AgentNotificationRegressionTests { let fixture = try makeFixture() defer { fixture.restore() } + // Direct PTY prompt delivery still needs a live hook binding so the + // notification target can admit the session before the answer clears it. + fixture.source.surfaceResumeBindingsByPanelId[fixture.panelId] = SurfaceResumeBindingSnapshot( + name: source, kind: source, command: "agent resume", checkpointId: "session", + source: "agent-hook", updatedAt: 1 + ) + #expect( AgentNotificationDelivery().enqueue( workspaceID: fixture.source.id, @@ -168,6 +175,10 @@ extension AgentNotificationRegressionTests { @Test func terminalInputClearsCodexPromptRingAndWorkspaceCount() throws { let fixture = try makeFixture() defer { fixture.restore() } + fixture.source.surfaceResumeBindingsByPanelId[fixture.panelId] = SurfaceResumeBindingSnapshot( + name: "codex", kind: "codex", command: "agent resume", checkpointId: "session", + source: "agent-hook", updatedAt: 1 + ) #expect(AgentNotificationDelivery().enqueue( workspaceID: fixture.source.id, surfaceID: fixture.panelId, From 745b4869bc707432cce9fb0df6d07b047f7eb1f9 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 03:52:24 -0700 Subject: [PATCH 22/31] fix: route cloud palette commands through invoking window --- Sources/AppDelegate.swift | 29 +++++++-- Sources/ContentView+AuthCommandPalette.swift | 59 ++++++++++++++++--- Sources/Update/UpdateTitlebarAccessory.swift | 19 +++++- .../CLIAgentMessageCommandTests.swift | 5 ++ .../ShortcutAndCommandPaletteTests.swift | 33 +++++++++++ 5 files changed, 128 insertions(+), 17 deletions(-) diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index ee0dc2c2a0ed..7c37fdb4db28 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -9207,9 +9207,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent ) return false } - let context = preferredTabManager.flatMap { mainWindowContext(for: $0) } - ?? preferredWindow.flatMap { contextForMainWindow($0) } - ?? preferredMainWindowContextForWorkspaceCreation(event: nil, debugSource: debugSource) + let context = contextForCloudVMCommand( + preferredTabManager: preferredTabManager, + preferredWindow: preferredWindow, + debugSource: debugSource + ) guard let context else { NSSound.beep() return false @@ -9236,6 +9238,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent @discardableResult func performCloudVMRestoreCommand( + tabManager preferredTabManager: TabManager? = nil, preferredWindow: NSWindow? = nil, debugSource: String = "cloudVM.restore" ) -> Bool { @@ -9251,8 +9254,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent ) return false } - let context = preferredWindow.flatMap { contextForMainWindow($0) } - ?? preferredMainWindowContextForWorkspaceCreation(event: nil, debugSource: debugSource) + let context = contextForCloudVMCommand( + preferredTabManager: preferredTabManager, + preferredWindow: preferredWindow, + debugSource: debugSource + ) guard let context else { NSSound.beep() return false @@ -9273,6 +9279,19 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent ) } + /// Resolves a Cloud palette action to the window that opened the palette. + /// The tab manager takes precedence so a secondary window cannot fall back + /// to another window's selected workspace. + func contextForCloudVMCommand( + preferredTabManager: TabManager?, + preferredWindow: NSWindow?, + debugSource: String + ) -> MainWindowContext? { + preferredTabManager.flatMap { mainWindowContext(for: $0) } + ?? preferredWindow.flatMap { contextForMainWindow($0) } + ?? preferredMainWindowContextForWorkspaceCreation(event: nil, debugSource: debugSource) + } + enum CurrentCloudVMCommand { case status case fork diff --git a/Sources/ContentView+AuthCommandPalette.swift b/Sources/ContentView+AuthCommandPalette.swift index 3dcdb991a9b8..87a31aec3b4d 100644 --- a/Sources/ContentView+AuthCommandPalette.swift +++ b/Sources/ContentView+AuthCommandPalette.swift @@ -225,6 +225,7 @@ extension ContentView { /// Registers Cloud palette handlers with the shared command dispatcher. func registerCloudCommandHandlers(_ registry: inout CommandPaletteHandlerRegistry) { + let commandWindow = observedWindow ?? NSApp.keyWindow ?? NSApp.mainWindow registry.register(commandId: Self.commandPaletteCloudAvailabilityInfoCommandId) { // Let the command palette finish dismissing before presenting the modal alert. DispatchQueue.main.async { @@ -243,33 +244,73 @@ extension ContentView { } registry.register(commandId: Self.commandPaletteCloudNewMachineCommandId) { _ = AppDelegate.shared?.performNewCloudMachineAction( - preferredWindow: NSApp.keyWindow ?? NSApp.mainWindow, + tabManager: tabManager, + preferredWindow: commandWindow, debugSource: "palette.cloud.newMachine" ) } registry.register(commandId: Self.commandPaletteCloudForkCommandId) { - _ = AppDelegate.shared?.performCurrentCloudVMCommand(.fork, debugSource: "palette.cloud.fork") + _ = AppDelegate.shared?.performCurrentCloudVMCommand( + .fork, + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.fork" + ) } registry.register(commandId: Self.commandPaletteCloudSnapshotCommandId) { - _ = AppDelegate.shared?.performCurrentCloudVMCommand(.snapshot, debugSource: "palette.cloud.snapshot") + _ = AppDelegate.shared?.performCurrentCloudVMCommand( + .snapshot, + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.snapshot" + ) } registry.register(commandId: Self.commandPaletteCloudRestoreCommandId) { - _ = AppDelegate.shared?.performCloudVMRestoreCommand(debugSource: "palette.cloud.restore") + _ = AppDelegate.shared?.performCloudVMRestoreCommand( + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.restore" + ) } registry.register(commandId: Self.commandPaletteCloudPromoteTemplateCommandId) { - _ = AppDelegate.shared?.performCurrentCloudVMCommand(.promoteTemplate, debugSource: "palette.cloud.promoteTemplate") + _ = AppDelegate.shared?.performCurrentCloudVMCommand( + .promoteTemplate, + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.promoteTemplate" + ) } registry.register(commandId: Self.commandPaletteCloudStatusCommandId) { - _ = AppDelegate.shared?.performCurrentCloudVMCommand(.status, debugSource: "palette.cloud.status") + _ = AppDelegate.shared?.performCurrentCloudVMCommand( + .status, + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.status" + ) } registry.register(commandId: Self.commandPaletteCloudPortsCommandId) { - _ = AppDelegate.shared?.performCurrentCloudVMCommand(.ports, debugSource: "palette.cloud.ports") + _ = AppDelegate.shared?.performCurrentCloudVMCommand( + .ports, + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.ports" + ) } registry.register(commandId: Self.commandPaletteCloudToolsCommandId) { - _ = AppDelegate.shared?.performCurrentCloudVMCommand(.tools, debugSource: "palette.cloud.tools") + _ = AppDelegate.shared?.performCurrentCloudVMCommand( + .tools, + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.tools" + ) } registry.register(commandId: Self.commandPaletteCloudHandoffCommandId) { - _ = AppDelegate.shared?.performCurrentCloudVMCommand(.handoff, debugSource: "palette.cloud.handoff") + _ = AppDelegate.shared?.performCurrentCloudVMCommand( + .handoff, + tabManager: tabManager, + preferredWindow: commandWindow, + debugSource: "palette.cloud.handoff" + ) } } } diff --git a/Sources/Update/UpdateTitlebarAccessory.swift b/Sources/Update/UpdateTitlebarAccessory.swift index 278e5883b16d..fb1c02779917 100644 --- a/Sources/Update/UpdateTitlebarAccessory.swift +++ b/Sources/Update/UpdateTitlebarAccessory.swift @@ -282,7 +282,7 @@ final class NotificationsAnchorRegistry { func closestAnchor(in window: NSWindow, to pointInWindow: NSPoint) -> NSView? { anchors.allObjects - .compactMap { view -> (view: NSView, distance: CGFloat)? in + .compactMap { view -> (view: NSView, frame: NSRect, distance: CGFloat)? in guard view.window === window else { return nil } guard notificationsPopoverAnchorIsVisible(view) else { return nil } let frameInWindow = view.convert(view.bounds, to: nil) @@ -290,9 +290,22 @@ final class NotificationsAnchorRegistry { let center = NSPoint(x: frameInWindow.midX, y: frameInWindow.midY) let dx = center.x - pointInWindow.x let dy = center.y - pointInWindow.y - return (view, (dx * dx) + (dy * dy)) + return (view, frameInWindow, (dx * dx) + (dy * dy)) } - .min { $0.distance < $1.distance }? + .min { lhs, rhs in + if lhs.distance != rhs.distance { + return lhs.distance < rhs.distance + } + // NSHashTable does not promise iteration order. Use the + // converted frame as a stable tie-breaker when two anchors + // are equally close to the requested point. + let lhsFrame = lhs.frame + let rhsFrame = rhs.frame + if lhsFrame.minX != rhsFrame.minX { return lhsFrame.minX < rhsFrame.minX } + if lhsFrame.minY != rhsFrame.minY { return lhsFrame.minY < rhsFrame.minY } + if lhsFrame.width != rhsFrame.width { return lhsFrame.width < rhsFrame.width } + return lhsFrame.height < rhsFrame.height + }? .view } } diff --git a/cmuxCLITests/CLIAgentMessageCommandTests.swift b/cmuxCLITests/CLIAgentMessageCommandTests.swift index 90d23a7d4e6b..e3177dd4a230 100644 --- a/cmuxCLITests/CLIAgentMessageCommandTests.swift +++ b/cmuxCLITests/CLIAgentMessageCommandTests.swift @@ -99,6 +99,11 @@ struct CLIAgentMessageCommandTests { "state": "queued", "sender_name": "coordinator", "body": "first line\nsecond line", + ], [ + "id": "fedcba9876543210", + "state": "queued", + "sender_name": "reviewer", + "body": "follow-up", ]], ], ] diff --git a/cmuxTests/ShortcutAndCommandPaletteTests.swift b/cmuxTests/ShortcutAndCommandPaletteTests.swift index 7b32b900237d..53a1d11b8cb8 100644 --- a/cmuxTests/ShortcutAndCommandPaletteTests.swift +++ b/cmuxTests/ShortcutAndCommandPaletteTests.swift @@ -946,6 +946,39 @@ struct CommandPaletteCloudAvailabilityTests { #expect(!executionSupportedHidden.contains(ContentView.commandPaletteCloudPortsCommandId)) #expect(!executionSupportedHidden.contains(ContentView.commandPaletteCloudToolsCommandId)) } + + /// Cloud commands keep the tab manager that owns the invoking palette. + @MainActor + @Test("Cloud command routing prefers the invoking window context") + func cloudCommandRoutingPrefersInvokingTabManager() { + let previousAppDelegate = AppDelegate.shared + let appDelegate = AppDelegate() + AppDelegate.shared = appDelegate + defer { AppDelegate.shared = previousAppDelegate } + + let mainManager = TabManager() + let paletteManager = TabManager() + let mainWindowID = appDelegate.registerMainWindowContextForTesting( + windowId: UUID(), + tabManager: mainManager + ) + let paletteWindowID = appDelegate.registerMainWindowContextForTesting( + windowId: UUID(), + tabManager: paletteManager + ) + defer { + appDelegate.unregisterMainWindowContextForTesting(windowId: paletteWindowID) + appDelegate.unregisterMainWindowContextForTesting(windowId: mainWindowID) + } + + let context = appDelegate.contextForCloudVMCommand( + preferredTabManager: paletteManager, + preferredWindow: nil, + debugSource: "test.palette.cloud.routing" + ) + #expect(context?.tabManager === paletteManager) + #expect(context?.tabManager !== mainManager) + } } final class CommandPaletteCloudCommandTests: XCTestCase { From 43269cde572c57d70822fd61be12c051e44f71f6 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 04:04:35 -0700 Subject: [PATCH 23/31] fix: expose palette window context to auth commands --- Sources/ContentView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 9faf055e5213..d4ccb1280f91 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -936,7 +936,7 @@ struct ContentView: View { @State private var titlebarText: String = "" @State private var isFullScreen: Bool = false @State private var observedWindowReference = WeakWindowReference() - private var observedWindow: NSWindow? { observedWindowReference.window } + var observedWindow: NSWindow? { observedWindowReference.window } @State private var workspaceSwitchPortalSignalRouter = WorkspaceSwitchPortalSignalRouter() @State private var sidebarRenderWorkerClient: RenderWorkerClient? @StateObject private var fullscreenControlsViewModel = TitlebarControlsViewModel() From ceae107ba8e6e9edf2bb94c4f267441581c48908 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:09:55 -0700 Subject: [PATCH 24/31] chore: drop unrelated command palette PR diffs --- Sources/Update/UpdateTitlebarAccessory.swift | 19 +++---------------- ...entSemanticNotificationDeliveryTests.swift | 11 ----------- web/scripts/db-migrate-local.mjs | 1 + 3 files changed, 4 insertions(+), 27 deletions(-) diff --git a/Sources/Update/UpdateTitlebarAccessory.swift b/Sources/Update/UpdateTitlebarAccessory.swift index 3e6d1ba35be4..6cc5bf2108e3 100644 --- a/Sources/Update/UpdateTitlebarAccessory.swift +++ b/Sources/Update/UpdateTitlebarAccessory.swift @@ -282,7 +282,7 @@ final class NotificationsAnchorRegistry { func closestAnchor(in window: NSWindow, to pointInWindow: NSPoint) -> NSView? { anchors.allObjects - .compactMap { view -> (view: NSView, frame: NSRect, distance: CGFloat)? in + .compactMap { view -> (view: NSView, distance: CGFloat)? in guard view.window === window else { return nil } guard notificationsPopoverAnchorIsVisible(view) else { return nil } let frameInWindow = view.convert(view.bounds, to: nil) @@ -290,22 +290,9 @@ final class NotificationsAnchorRegistry { let center = NSPoint(x: frameInWindow.midX, y: frameInWindow.midY) let dx = center.x - pointInWindow.x let dy = center.y - pointInWindow.y - return (view, frameInWindow, (dx * dx) + (dy * dy)) + return (view, (dx * dx) + (dy * dy)) } - .min { lhs, rhs in - if lhs.distance != rhs.distance { - return lhs.distance < rhs.distance - } - // NSHashTable does not promise iteration order. Use the - // converted frame as a stable tie-breaker when two anchors - // are equally close to the requested point. - let lhsFrame = lhs.frame - let rhsFrame = rhs.frame - if lhsFrame.minX != rhsFrame.minX { return lhsFrame.minX < rhsFrame.minX } - if lhsFrame.minY != rhsFrame.minY { return lhsFrame.minY < rhsFrame.minY } - if lhsFrame.width != rhsFrame.width { return lhsFrame.width < rhsFrame.width } - return lhsFrame.height < rhsFrame.height - }? + .min { $0.distance < $1.distance }? .view } diff --git a/cmuxTests/AgentSemanticNotificationDeliveryTests.swift b/cmuxTests/AgentSemanticNotificationDeliveryTests.swift index 11e44125145d..754416fd4172 100644 --- a/cmuxTests/AgentSemanticNotificationDeliveryTests.swift +++ b/cmuxTests/AgentSemanticNotificationDeliveryTests.swift @@ -33,13 +33,6 @@ extension AgentNotificationRegressionTests { let fixture = try makeFixture() defer { fixture.restore() } - // Direct PTY prompt delivery still needs a live hook binding so the - // notification target can admit the session before the answer clears it. - fixture.source.surfaceResumeBindingsByPanelId[fixture.panelId] = SurfaceResumeBindingSnapshot( - name: source, kind: source, command: "agent resume", checkpointId: "session", - source: "agent-hook", updatedAt: 1 - ) - #expect( AgentNotificationDelivery().enqueue( workspaceID: fixture.source.id, @@ -175,10 +168,6 @@ extension AgentNotificationRegressionTests { @Test func terminalInputClearsCodexPromptRingAndWorkspaceCount() throws { let fixture = try makeFixture() defer { fixture.restore() } - fixture.source.surfaceResumeBindingsByPanelId[fixture.panelId] = SurfaceResumeBindingSnapshot( - name: "codex", kind: "codex", command: "agent resume", checkpointId: "session", - source: "agent-hook", updatedAt: 1 - ) #expect(AgentNotificationDelivery().enqueue( workspaceID: fixture.source.id, surfaceID: fixture.panelId, diff --git a/web/scripts/db-migrate-local.mjs b/web/scripts/db-migrate-local.mjs index 67bdc2770f3d..5ad50ec348d0 100644 --- a/web/scripts/db-migrate-local.mjs +++ b/web/scripts/db-migrate-local.mjs @@ -87,3 +87,4 @@ try { } finally { await pool.end(); } + From 34b2f0edad0bac562663296a8b64c637695e2a3d Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:29:33 -0700 Subject: [PATCH 25/31] fix: isolate command palette identifiers on main actor --- Sources/AppDelegate.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index 488aa63f407b..8d171bf90e5a 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -9201,7 +9201,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent } } - var commandPaletteID: String { + @MainActor var commandPaletteID: String { switch self { case .fork: return ContentView.commandPaletteCloudForkCommandId case .snapshot: return ContentView.commandPaletteCloudSnapshotCommandId From 3378f5d9cfbba367f178819f3852e462925c17c1 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:46:52 -0700 Subject: [PATCH 26/31] fix: expose Foundation types in paste transfer policy --- .../Values/RemotePasteFileTransferPolicy.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/macOS/CmuxRemoteSession/Sources/CmuxRemoteSession/Values/RemotePasteFileTransferPolicy.swift b/Packages/macOS/CmuxRemoteSession/Sources/CmuxRemoteSession/Values/RemotePasteFileTransferPolicy.swift index e7e3c58c9067..a36d1e7d1658 100644 --- a/Packages/macOS/CmuxRemoteSession/Sources/CmuxRemoteSession/Values/RemotePasteFileTransferPolicy.swift +++ b/Packages/macOS/CmuxRemoteSession/Sources/CmuxRemoteSession/Values/RemotePasteFileTransferPolicy.swift @@ -1,4 +1,4 @@ -import Foundation +public import Foundation /// Owns the private remote directory and cleanup contract for pasted files. public struct RemotePasteFileTransferPolicy: Equatable, Sendable { From 05b2e4b3d217f2cfc36d4614bc183a98beb7b577 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:53:34 -0700 Subject: [PATCH 27/31] fix: remove redundant usage owner optional chain --- Sources/Sidebar/SidebarAgentUsageCoordinator.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Sidebar/SidebarAgentUsageCoordinator.swift b/Sources/Sidebar/SidebarAgentUsageCoordinator.swift index 60e4060cce10..ec0476c78f30 100644 --- a/Sources/Sidebar/SidebarAgentUsageCoordinator.swift +++ b/Sources/Sidebar/SidebarAgentUsageCoordinator.swift @@ -283,7 +283,7 @@ final class SidebarAgentUsageCoordinator { // panes' numbers across refreshes that the user did not cause. let ownerPair = sessions .filter { $0.value.workspaceID == row.workspaceID && $0.value.source == row.source } - .max { ($0.value.lastEventAt, $0.key) < ($1.value.lastEventAt, $1.key) }? + .max { ($0.value.lastEventAt, $0.key) < ($1.value.lastEventAt, $1.key) } let owner = ownerPair?.value let usage = isEnabled ? owner?.snapshot.map(Self.sidebarUsage) : nil if usage == nil, !rowsShowingUsage.contains(row) { return } From ec9bd346e72cf8ed7648145c5ea3f512bfad569e Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 16:02:44 -0700 Subject: [PATCH 28/31] fix: use local shell quoting for SSH paste commands --- Sources/TerminalSSHSessionDetector.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/TerminalSSHSessionDetector.swift b/Sources/TerminalSSHSessionDetector.swift index 5c4cc39c0d06..11197e17e4a6 100644 --- a/Sources/TerminalSSHSessionDetector.swift +++ b/Sources/TerminalSSHSessionDetector.swift @@ -205,7 +205,7 @@ struct DetectedSSHSession: Equatable, Sendable { private func prepareRemotePasteDirectory() throws { let result = try Self.runProcess( executable: "/usr/bin/ssh", - arguments: sshArguments(command: "sh -c \(remotePastePolicy.maintenanceScript().shellSingleQuoted)"), + arguments: sshArguments(command: "sh -c \(Self.shellSingleQuoted(remotePastePolicy.maintenanceScript()))"), timeout: 12 ) guard result.status == 0 else { @@ -231,7 +231,7 @@ struct DetectedSSHSession: Equatable, Sendable { private func finalizeRemotePasteFile(_ remotePath: String) throws { let result = try Self.runProcess( executable: "/usr/bin/ssh", - arguments: sshArguments(command: "sh -c \(remotePastePolicy.finalizeScript(for: remotePath).shellSingleQuoted)"), + arguments: sshArguments(command: "sh -c \(Self.shellSingleQuoted(remotePastePolicy.finalizeScript(for: remotePath)))"), timeout: 8 ) guard result.status == 0 else { From f41ba17fcf1867b0149b176950d54b5fc0f7ca85 Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 16:10:50 -0700 Subject: [PATCH 29/31] fix: pass SSH paste policy to custom uploads --- Sources/TerminalCustomUploadRunner.swift | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Sources/TerminalCustomUploadRunner.swift b/Sources/TerminalCustomUploadRunner.swift index 32d272e1ea11..9e7042be4da2 100644 --- a/Sources/TerminalCustomUploadRunner.swift +++ b/Sources/TerminalCustomUploadRunner.swift @@ -79,6 +79,7 @@ struct TerminalCustomUploadRunner { fileURLs: [URL], endpoint: Endpoint, command: String, + remotePastePolicy: RemotePasteFileTransferPolicy = RemotePasteFileTransferPolicy(), operation: TerminalImageTransferOperation, timeout: TimeInterval = 120, completion: @escaping (Result) -> Void @@ -91,6 +92,7 @@ struct TerminalCustomUploadRunner { fileURLs: fileURLs, endpoint: endpoint, command: command, + remotePastePolicy: remotePastePolicy, operation: operation, timeout: timeout )) @@ -101,6 +103,7 @@ struct TerminalCustomUploadRunner { fileURLs: [URL], endpoint: Endpoint, command: String, + remotePastePolicy: RemotePasteFileTransferPolicy = RemotePasteFileTransferPolicy(), operation: TerminalImageTransferOperation, timeout: TimeInterval = 120 ) -> Result { @@ -113,7 +116,7 @@ struct TerminalCustomUploadRunner { guard normalizedLocalURL.isFileURL else { throw Self.uploadError("Dropped item is not a local file.") } - let remotePath = session.remotePastePolicy.remotePath(for: normalizedLocalURL) + let remotePath = remotePastePolicy.remotePath(for: normalizedLocalURL) let env = TerminalUploadCommand.environment( localPath: normalizedLocalURL.path, remotePath: remotePath, @@ -183,7 +186,13 @@ struct TerminalCustomUploadRunner { ) guard let command = matchedCommand(for: endpoint) else { return false } - run(fileURLs: fileURLs, endpoint: endpoint, command: command, operation: operation) { result in + run( + fileURLs: fileURLs, + endpoint: endpoint, + command: command, + remotePastePolicy: session.remotePastePolicy, + operation: operation + ) { result in cleanup(fileURLs) DispatchQueue.main.async { // A cancelled/finished operation means the cancel handler already From efb77966c6cb2cb756501b9c78ff12430e69922a Mon Sep 17 00:00:00 2001 From: Austin Wang <38676809+austinywang@users.noreply.github.com> Date: Thu, 1 Oct 2026 16:58:49 -0700 Subject: [PATCH 30/31] chore: preserve main localization catalog layout --- Resources/Localizable.xcstrings | 16576 +++++++++++++++--------------- 1 file changed, 8268 insertions(+), 8308 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index f3e699c94ea2..e763be039b24 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -115600,65 +115600,6 @@ } } }, - "cli.vm.run.createMissingMachineID": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "vm run: create returned no machine id" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "vm run: 作成結果にマシン ID がありません" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "vm run: Beim Erstellen wurde keine Maschinen-ID zurückgegeben" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "vm run : la création n'a renvoyé aucun identifiant de machine" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "vm run: لم يُرجع الإنشاء معرّف جهاز" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "vm run: la creación no devolvió ningún ID de máquina" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "vm run: 创建未返回机器 ID" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "vm run:建立未回傳機器 ID" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "vm run: 생성 결과에 머신 ID가 없습니다" - } - } - } - }, "cli.vm.run.poolRecordFailed": { "extractionState": "manual", "localizations": { @@ -261314,6 +261255,381 @@ } } }, + "cli.auth.status.teamNotLoaded": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": " team: not loaded" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": " チーム: 未読み込み" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": " 团队: 未加载" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": " Team: nicht geladen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": " équipe: non chargée" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": " الفريق: لم يتم تحميله" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": " equipo: no cargado" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": " 團隊: 未載入" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": " 팀: 로드되지 않음" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": " tim: nije učitan" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": " team: ikke indlæst" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": " team: non caricato" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": " ក្រុម៖ មិនទាន់បានផ្ទុក" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": " team: ikke lastet" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": " zespół: nie załadowano" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": " equipe: não carregada" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": " команда: не загружена" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": " ทีม: ยังไม่ได้โหลด" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": " ekip: yüklenmedi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": " команда: не завантажена" + } + } + } + }, + "cli.auth.status.teamNotLoadedRetrying": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": " team: not loaded (retrying)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": " チーム: 未読み込み(再試行中)" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": " 团队: 未加载(正在重试)" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": " Team: nicht geladen (wird erneut versucht)" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": " équipe: non chargée (nouvel essai)" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": " الفريق: لم يتم تحميله (جارٍ إعادة المحاولة)" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": " equipo: no cargado (reintentando)" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": " 團隊: 未載入(重試中)" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": " 팀: 로드되지 않음 (재시도 중)" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": " tim: nije učitan (ponovni pokušaj)" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": " team: ikke indlæst (prøver igen)" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": " team: non caricato (nuovo tentativo)" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": " ក្រុម៖ មិនទាន់បានផ្ទុក (កំពុងព្យាយាមម្ដងទៀត)" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": " team: ikke lastet (prøver igjen)" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": " zespół: nie załadowano (ponawianie próby)" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": " equipe: não carregada (tentando novamente)" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": " команда: не загружена (повторная попытка)" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": " ทีม: ยังไม่ได้โหลด (กำลังลองอีกครั้ง)" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": " ekip: yüklenmedi (yeniden deneniyor)" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": " команда: не завантажена (повторна спроба)" + } + } + } + }, + "mobile.pairing.error.teamUnavailable": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Could not load your cmux team. Check your internet connection, then try again." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux チームを読み込めませんでした。インターネット接続を確認してから、もう一度お試しください。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法加载你的 cmux 团队。请检查网络连接,然后重试。" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Dein cmux-Team konnte nicht geladen werden. Prüfe deine Internetverbindung und versuche es erneut." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Impossible de charger votre équipe cmux. Vérifiez votre connexion Internet, puis réessayez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تعذّر تحميل فريق cmux الخاص بك. تحقّق من اتصالك بالإنترنت، ثم حاول مرة أخرى." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No se pudo cargar tu equipo de cmux. Comprueba tu conexión a internet e inténtalo de nuevo." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "無法載入你的 cmux 團隊。請檢查網路連線,然後再試一次。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "cmux 팀을 불러올 수 없습니다. 인터넷 연결을 확인한 후 다시 시도하세요." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Nije moguće učitati vaš cmux tim. Provjerite internetsku vezu i pokušajte ponovo." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Din cmux-team kunne ikke indlæses. Kontrollér din internetforbindelse, og prøv igen." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Impossibile caricare il tuo team cmux. Controlla la connessione Internet e riprova." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនអាចផ្ទុកក្រុម cmux របស់អ្នកបានទេ។ សូមពិនិត្យការតភ្ជាប់អ៊ីនធឺណិត ហើយព្យាយាមម្ដងទៀត។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Kunne ikke laste inn cmux-teamet ditt. Kontroller internettilkoblingen, og prøv igjen." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Nie udało się załadować Twojego zespołu cmux. Sprawdź połączenie z internetem i spróbuj ponownie." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Não foi possível carregar sua equipe cmux. Verifique sua conexão com a internet e tente novamente." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить вашу команду cmux. Проверьте подключение к интернету и попробуйте ещё раз." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ไม่สามารถโหลดทีม cmux ของคุณได้ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux ekibiniz yüklenemedi. İnternet bağlantınızı kontrol edip tekrar deneyin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Не вдалося завантажити вашу команду cmux. Перевірте підключення до інтернету й спробуйте ще раз." + } + } + } +}, "mobile.pairing.error.noTicket": { "extractionState": "manual", "localizations": { @@ -300950,6 +301266,482 @@ } } }, + "settings.app.reorderOnNotification.mode.agentActivity": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "نشاط الوكيل" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Aktivnost agenata" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Agentaktivitet" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Agentenaktivität" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Agent Activity" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Actividad de agentes" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Activité des agents" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Attività degli agenti" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "エージェントのアクティビティ" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "에이전트 활동" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Agentaktivitet" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Aktywność agentów" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Atividade dos agentes" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Активность агентов" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "กิจกรรมของเอเจนต์" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Ajan etkinliği" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Активність агентів" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "代理活动" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "代理活動" + } + } + } + }, + "settings.app.reorderOnNotification.mode.notifications": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "الإشعارات" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Obavještenja" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Notifikationer" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Benachrichtigungen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Notificaciones" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Sur notification" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Notifiche" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "通知" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "알림" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Varsler" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Powiadomienia" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Notificações" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Уведомления" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "การแจ้งเตือน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bildirimler" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Сповіщення" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "通知" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "通知" + } + } + } + }, + "settings.app.reorderOnNotification.mode.off": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "إيقاف" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Isključeno" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Fra" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Aus" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Off" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Desactivado" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Désactivé" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Disattivato" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "オフ" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "끔" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Av" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Wyłączone" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Desativado" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выкл." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ปิด" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Kapalı" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Вимкнено" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "關閉" + } + } + } + }, + "settings.app.reorderOnNotification.modeSubtitle": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "ينقل مساحات العمل إلى الأعلى عندما تتلقى إشعارًا. مع نشاط الوكيل، ينقلها أيضًا عندما ترسل مطالبة أو ينهي وكيل دورة أو يحتاج إلى إدخال أو يفشل، لكن ليس أبدًا أثناء وجود المؤشر فوق الشريط الجانبي. الإيقاف يحافظ على ثبات مواضع الاختصارات." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Pomjera radne prostore na vrh kada prime obavještenje. Aktivnost agenata ih pomjera i kada pošaljete upit ili agent završi potez, treba unos ili ne uspije, ali nikad dok je pokazivač iznad bočne trake. Isključeno čuva stabilne pozicije prečica." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Flytter arbejdsområder til toppen, når de modtager en notifikation. Agentaktivitet flytter dem også, når du sender en prompt eller en agent afslutter en tur, har brug for input eller fejler, men aldrig mens markøren er over sidepanelet. Fra holder genvejspositionerne stabile." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Verschiebt Workspaces nach oben, wenn sie eine Benachrichtigung erhalten. Mit Agentenaktivität auch dann, wenn Sie einen Prompt senden oder ein Agent einen Durchlauf beendet, eine Eingabe braucht oder fehlschlägt, aber nie, während der Zeiger über der Seitenleiste ist. Aus hält die Positionen der Tastenkürzel stabil." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Move workspaces to the top when they receive a notification. Agent Activity also moves them when you send a prompt or an agent finishes a turn, needs input, or fails, but never while you point at the sidebar. Off keeps shortcut positions stable." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Mueve los espacios de trabajo arriba cuando reciben una notificación. Con Actividad de agentes, también cuando envías un prompt o un agente termina un turno, necesita una respuesta o falla, pero nunca mientras el puntero está sobre la barra lateral. Desactivado mantiene estables las posiciones de los atajos." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Place les espaces de travail en haut lorsqu’ils reçoivent une notification. Avec Activité des agents, aussi lorsque vous envoyez un prompt ou qu’un agent termine un tour, attend une saisie ou échoue, mais jamais pendant que le pointeur survole la barre latérale. Désactivé garde les positions des raccourcis stables." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Sposta gli spazi di lavoro in cima quando ricevono una notifica. Attività degli agenti li sposta anche quando invii un prompt o un agente termina un turno, attende un input o fallisce, ma mai mentre il puntatore è sulla barra laterale. Disattivato mantiene stabili le posizioni delle scorciatoie." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "通知を受け取ったワークスペースを先頭に移動します。「エージェントのアクティビティ」では、プロンプトを送信したときや、エージェントがターンを終えたとき、入力を待っているとき、失敗したときにも移動しますが、ポインタがサイドバー上にある間は移動しません。「オフ」ではショートカットの位置が変わりません。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "알림을 받으면 워크스페이스를 맨 위로 옮깁니다. 에이전트 활동을 선택하면 프롬프트를 보내거나 에이전트가 턴을 마치거나 입력이 필요하거나 실패할 때도 옮기지만, 포인터가 사이드바 위에 있을 때는 옮기지 않습니다. 끔은 단축키 위치를 고정합니다." + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Flytter arbeidsområder til toppen når de mottar et varsel. Agentaktivitet flytter dem også når du sender en ledetekst eller en agent fullfører en runde, trenger input eller feiler, men aldri mens pekeren er over sidefeltet. Av holder snarveisposisjonene stabile." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Przenosi obszary robocze na górę, gdy otrzymają powiadomienie. Aktywność agentów przenosi je także, gdy wyślesz prompt lub agent zakończy turę, potrzebuje danych lub zakończy się błędem, ale nigdy, gdy wskaźnik jest nad paskiem bocznym. Wyłączone zachowuje stałe pozycje skrótów." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Move os espaços de trabalho para o topo quando recebem uma notificação. Atividade dos agentes também os move quando você envia um prompt ou um agente termina um turno, precisa de uma resposta ou falha, mas nunca enquanto o ponteiro está sobre a barra lateral. Desativado mantém as posições dos atalhos estáveis." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Перемещает рабочие области наверх, когда они получают уведомление. «Активность агентов» также перемещает их, когда вы отправляете запрос или агент завершает ход, ждёт ввода или завершается с ошибкой, но никогда, пока указатель находится над боковой панелью. «Выкл.» сохраняет позиции сочетаний клавиш." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ย้ายเวิร์กสเปซขึ้นด้านบนเมื่อได้รับการแจ้งเตือน กิจกรรมของเอเจนต์จะย้ายเมื่อคุณส่งพรอมต์หรือเอเจนต์จบรอบ ต้องการข้อมูล หรือล้มเหลวด้วย แต่จะไม่ย้ายขณะที่ตัวชี้อยู่เหนือแถบด้านข้าง ปิดจะคงตำแหน่งของทางลัดไว้" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bildirim aldıklarında çalışma alanlarını en üste taşır. Ajan etkinliği, bir istem gönderdiğinizde, bir ajan turunu bitirdiğinde, girdi beklediğinde veya başarısız olduğunda da taşır, ancak işaretçi kenar çubuğunun üzerindeyken asla taşımaz. Kapalı, kısayol konumlarını sabit tutar." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Переміщує робочі області вгору, коли вони отримують сповіщення. «Активність агентів» також переміщує їх, коли ви надсилаєте запит або агент завершує хід, чекає на введення або завершується з помилкою, але ніколи, поки вказівник над бічною панеллю. «Вимкнено» зберігає позиції скорочень." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "工作区收到通知时移到顶部。选择“代理活动”时,你发送提示词或代理完成一轮、需要输入或失败时也会移动,但指针停在侧边栏上时绝不移动。关闭可让快捷键位置保持不变。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" + } + } + } + }, "settings.app.reorderOnNotification.subtitle": { "extractionState": "manual", "localizations": { @@ -451459,65 +452251,6 @@ } } }, - "terminalContextMenu.pasteAsOneLine": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لصق في سطر واحد" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Als eine Zeile einfügen" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Paste as One Line" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Pegar en una sola línea" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Coller sur une seule ligne" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "1行にしてペースト" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "한 줄로 붙여넣기" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "粘贴为单行" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "貼上為單行" - } - } - } - }, "terminalContextMenu.reconnectPane": { "extractionState": "manual", "localizations": { @@ -549995,54 +550728,14 @@ "value": "Workspace Color: %@" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Arbeitsbereichfarbe: %@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur de l’espace de travail : %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون مساحة العمل: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color del espacio de trabajo: %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "工作區顏色:%@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "工作区颜色:%@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "작업 공간 색상: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースの色: %@" - } - } + "de": {"stringUnit": {"state": "translated", "value": "Arbeitsbereichfarbe: %@"}}, + "fr": {"stringUnit": {"state": "translated", "value": "Couleur de l’espace de travail : %@"}}, + "ar": {"stringUnit": {"state": "translated", "value": "لون مساحة العمل: %@"}}, + "es": {"stringUnit": {"state": "translated", "value": "Color del espacio de trabajo: %@"}}, + "zh-Hant": {"stringUnit": {"state": "translated", "value": "工作區顏色:%@"}}, + "zh-Hans": {"stringUnit": {"state": "translated", "value": "工作区颜色:%@"}}, + "ko": {"stringUnit": {"state": "translated", "value": "작업 공간 색상: %@"}}, + "ja": {"stringUnit": {"state": "translated", "value": "ワークスペースの色: %@"}} } }, "fileExplorer.preview.failedTitle": { @@ -565162,131 +565855,6 @@ } } }, - "cli.sshPtyAttach.launchAcknowledgementTimeoutRetry": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux did not acknowledge the SSH launch; retrying %s in %ss." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux hat den SSH-Start nicht bestätigt; neuer Versuch %s in %ss." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux n’a pas confirmé le démarrage SSH ; nouvelle tentative %s dans %ss." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "[cmux] لم يؤكد cmux بدء SSH؛ ستتم إعادة المحاولة %s خلال %s ث." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux no confirmó el inicio de SSH; reintentando %s en %ss." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux 未確認 SSH 啟動;將在第 %s 次於 %s 秒後重試。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux 未确认 SSH 启动;将在第 %s 次于 %s 秒后重试。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux가 SSH 시작을 확인하지 못했습니다. %s번째로 %s초 후 다시 시도합니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux が SSH の起動を確認できないため、%s 回目を %s 秒後に再試行します。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux nije potvrdio SSH pokretanje; ponovni pokušaj %s za %ss." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux bekræftede ikke SSH-starten; prøver igen %s om %ss." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux non ha confermato l’avvio SSH; nuovo tentativo %s tra %ss." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux មិនបានបញ្ជាក់ការចាប់ផ្តើម SSH ទេ; កំពុងព្យាយាមម្តងទៀត %s ក្នុងរយៈពេល %ss។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux bekreftet ikke SSH-oppstarten; prøver på nytt %s om %ss." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux nie potwierdził uruchomienia SSH; ponawianie próby %s za %ss." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "[cmux] o cmux não confirmou o início do SSH; tentando novamente %s em %ss." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux не подтвердил запуск SSH; повторная попытка %s через %ss." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux ไม่ยืนยันการเริ่มต้น SSH; กำลังลองใหม่ครั้งที่ %s ในอีก %s วินาที" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux SSH başlatmasını onaylamadı; %s saniye içinde %s. deneme yapılıyor." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux не підтвердив запуск SSH; повторна спроба %s через %s с." - } - } - } - }, "devices.discovery.settingsDisabled": { "extractionState": "manual", "localizations": { @@ -567057,6 +567625,131 @@ } } }, + "devices.link.error.notDiscoverable": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This Mac isn’t discoverable. On that Mac, turn on “Make this Mac discoverable” in Settings › Devices." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "جهاز Mac هذا غير قابل للاكتشاف. على ذلك الجهاز، فعّل «جعل جهاز Mac هذا قابلاً للاكتشاف» في الإعدادات › الأجهزة." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Dieser Mac ist nicht auffindbar. Aktiviere auf diesem Mac unter „Einstellungen › Geräte“ die Option „Diesen Mac auffindbar machen“." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Este Mac no es detectable. En ese Mac, activa «Hacer que este Mac sea detectable» en Ajustes › Dispositivos." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Ce Mac n’est pas détectable. Sur ce Mac, activez « Rendre ce Mac détectable » dans Réglages › Appareils." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このMacは検出可能になっていません。そのMacの「設定 › デバイス」で「このMacを検出可能にする」をオンにしてください。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 Mac을 검색할 수 없습니다. 해당 Mac의 설정 › 기기에서 “이 Mac을 검색할 수 있도록 설정”을 켜세요." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "这台 Mac 无法被发现。请在该 Mac 的“设置 › 设备”中开启“允许发现此 Mac”。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "這部 Mac 無法被探索。請在該 Mac 的「設定 › 裝置」中開啟「允許探索此 Mac」。" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Ovaj Mac nije vidljiv. Na tom Macu uključite „Učini ovaj Mac vidljivim” u Postavke › Uređaji." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Denne Mac kan ikke findes. Slå “Gør denne Mac synlig” til på den Mac under Indstillinger › Enheder." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Questo Mac non è individuabile. Su quel Mac, attiva “Rendi individuabile questo Mac” in Impostazioni › Dispositivi." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Mac នេះមិនអាចរកឃើញបានទេ។ នៅលើ Mac នោះ សូមបើក “ធ្វើឲ្យ Mac នេះអាចរកឃើញ” ក្នុងការកំណត់ › ឧបករណ៍។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Denne Macen er ikke synlig. Slå på «Gjør denne Macen synlig» på den Macen under Innstillinger › Enheter." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Ten Mac nie jest wykrywalny. Na tym Macu włącz „Uczyń ten Mac wykrywalnym” w Ustawienia › Urządzenia." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Este Mac não está detectável. Nesse Mac, ative “Tornar este Mac detectável” em Ajustes › Dispositivos." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Этот Mac недоступен для обнаружения. На том Mac включите «Сделать этот Mac доступным для обнаружения» в разделе Настройки › Устройства." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Mac เครื่องนี้ไม่สามารถค้นพบได้ บน Mac เครื่องนั้น ให้เปิด “ทำให้ Mac เครื่องนี้ค้นพบได้” ในการตั้งค่า › อุปกรณ์" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu Mac keşfedilebilir değil. O Mac’te Ayarlar › Cihazlar bölümünden “Bu Mac’i keşfedilebilir yap” seçeneğini açın." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Цей Mac недоступний для виявлення. На тому Mac увімкніть «Зробити цей Mac доступним для виявлення» у розділі Налаштування › Пристрої." + } + } + } + }, "settings.automation.pi": { "extractionState": "manual", "localizations": { @@ -567807,506 +568500,6 @@ } } }, - "devices.link.error.notDiscoverable": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This Mac isn’t discoverable. On that Mac, turn on “Make this Mac discoverable” in Settings › Devices." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جهاز Mac هذا غير قابل للاكتشاف. على ذلك الجهاز، فعّل «جعل جهاز Mac هذا قابلاً للاكتشاف» في الإعدادات › الأجهزة." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Dieser Mac ist nicht auffindbar. Aktiviere auf diesem Mac unter „Einstellungen › Geräte“ die Option „Diesen Mac auffindbar machen“." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Este Mac no es detectable. En ese Mac, activa «Hacer que este Mac sea detectable» en Ajustes › Dispositivos." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ce Mac n’est pas détectable. Sur ce Mac, activez « Rendre ce Mac détectable » dans Réglages › Appareils." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このMacは検出可能になっていません。そのMacの「設定 › デバイス」で「このMacを検出可能にする」をオンにしてください。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 Mac을 검색할 수 없습니다. 해당 Mac의 설정 › 기기에서 “이 Mac을 검색할 수 있도록 설정”을 켜세요." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "这台 Mac 无法被发现。请在该 Mac 的“设置 › 设备”中开启“允许发现此 Mac”。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "這部 Mac 無法被探索。請在該 Mac 的「設定 › 裝置」中開啟「允許探索此 Mac」。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Ovaj Mac nije vidljiv. Na tom Macu uključite „Učini ovaj Mac vidljivim” u Postavke › Uređaji." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Denne Mac kan ikke findes. Slå “Gør denne Mac synlig” til på den Mac under Indstillinger › Enheder." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Questo Mac non è individuabile. Su quel Mac, attiva “Rendi individuabile questo Mac” in Impostazioni › Dispositivi." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Mac នេះមិនអាចរកឃើញបានទេ។ នៅលើ Mac នោះ សូមបើក “ធ្វើឲ្យ Mac នេះអាចរកឃើញ” ក្នុងការកំណត់ › ឧបករណ៍។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Denne Macen er ikke synlig. Slå på «Gjør denne Macen synlig» på den Macen under Innstillinger › Enheter." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Ten Mac nie jest wykrywalny. Na tym Macu włącz „Uczyń ten Mac wykrywalnym” w Ustawienia › Urządzenia." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Este Mac não está detectável. Nesse Mac, ative “Tornar este Mac detectável” em Ajustes › Dispositivos." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Этот Mac недоступен для обнаружения. На том Mac включите «Сделать этот Mac доступным для обнаружения» в разделе Настройки › Устройства." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "Mac เครื่องนี้ไม่สามารถค้นพบได้ บน Mac เครื่องนั้น ให้เปิด “ทำให้ Mac เครื่องนี้ค้นพบได้” ในการตั้งค่า › อุปกรณ์" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bu Mac keşfedilebilir değil. O Mac’te Ayarlar › Cihazlar bölümünden “Bu Mac’i keşfedilebilir yap” seçeneğini açın." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Цей Mac недоступний для виявлення. На тому Mac увімкніть «Зробити цей Mac доступним для виявлення» у розділі Налаштування › Пристрої." - } - } - } - }, - "cli.auth.status.teamNotLoaded": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": " team: not loaded" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": " チーム: 未読み込み" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": " 团队: 未加载" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": " Team: nicht geladen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": " équipe: non chargée" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": " الفريق: لم يتم تحميله" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": " equipo: no cargado" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": " 團隊: 未載入" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": " 팀: 로드되지 않음" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": " tim: nije učitan" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": " team: ikke indlæst" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": " team: non caricato" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": " ក្រុម៖ មិនទាន់បានផ្ទុក" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": " team: ikke lastet" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": " zespół: nie załadowano" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": " equipe: não carregada" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": " команда: не загружена" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": " ทีม: ยังไม่ได้โหลด" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": " ekip: yüklenmedi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": " команда: не завантажена" - } - } - } - }, - "cli.auth.status.teamNotLoadedRetrying": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": " team: not loaded (retrying)" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": " チーム: 未読み込み(再試行中)" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": " 团队: 未加载(正在重试)" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": " Team: nicht geladen (wird erneut versucht)" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": " équipe: non chargée (nouvel essai)" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": " الفريق: لم يتم تحميله (جارٍ إعادة المحاولة)" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": " equipo: no cargado (reintentando)" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": " 團隊: 未載入(重試中)" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": " 팀: 로드되지 않음 (재시도 중)" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": " tim: nije učitan (ponovni pokušaj)" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": " team: ikke indlæst (prøver igen)" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": " team: non caricato (nuovo tentativo)" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": " ក្រុម៖ មិនទាន់បានផ្ទុក (កំពុងព្យាយាមម្ដងទៀត)" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": " team: ikke lastet (prøver igjen)" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": " zespół: nie załadowano (ponawianie próby)" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": " equipe: não carregada (tentando novamente)" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": " команда: не загружена (повторная попытка)" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": " ทีม: ยังไม่ได้โหลด (กำลังลองอีกครั้ง)" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": " ekip: yüklenmedi (yeniden deneniyor)" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": " команда: не завантажена (повторна спроба)" - } - } - } - }, - "mobile.pairing.error.teamUnavailable": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Could not load your cmux team. Check your internet connection, then try again." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux チームを読み込めませんでした。インターネット接続を確認してから、もう一度お試しください。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "无法加载你的 cmux 团队。请检查网络连接,然后重试。" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Dein cmux-Team konnte nicht geladen werden. Prüfe deine Internetverbindung und versuche es erneut." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Impossible de charger votre équipe cmux. Vérifiez votre connexion Internet, puis réessayez." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذّر تحميل فريق cmux الخاص بك. تحقّق من اتصالك بالإنترنت، ثم حاول مرة أخرى." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No se pudo cargar tu equipo de cmux. Comprueba tu conexión a internet e inténtalo de nuevo." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "無法載入你的 cmux 團隊。請檢查網路連線,然後再試一次。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "cmux 팀을 불러올 수 없습니다. 인터넷 연결을 확인한 후 다시 시도하세요." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Nije moguće učitati vaš cmux tim. Provjerite internetsku vezu i pokušajte ponovo." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Din cmux-team kunne ikke indlæses. Kontrollér din internetforbindelse, og prøv igen." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Impossibile caricare il tuo team cmux. Controlla la connessione Internet e riprova." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "មិនអាចផ្ទុកក្រុម cmux របស់អ្នកបានទេ។ សូមពិនិត្យការតភ្ជាប់អ៊ីនធឺណិត ហើយព្យាយាមម្ដងទៀត។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Kunne ikke laste inn cmux-teamet ditt. Kontroller internettilkoblingen, og prøv igjen." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Nie udało się załadować Twojego zespołu cmux. Sprawdź połączenie z internetem i spróbuj ponownie." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Não foi possível carregar sua equipe cmux. Verifique sua conexão com a internet e tente novamente." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Не удалось загрузить вашу команду cmux. Проверьте подключение к интернету и попробуйте ещё раз." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ไม่สามารถโหลดทีม cmux ของคุณได้ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "cmux ekibiniz yüklenemedi. İnternet bağlantınızı kontrol edip tekrar deneyin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Не вдалося завантажити вашу команду cmux. Перевірте підключення до інтернету й спробуйте ще раз." - } - } - } - }, "command.newPaneAutoLayout.title": { "extractionState": "manual", "localizations": { @@ -568602,70 +568795,70 @@ "value": "cmux 重新開啟後仍在還原此終端機,並確認要恢復哪個代理工作階段。請幾秒後再試。" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "cmux još vraća terminal nakon ponovnog otvaranja i provjerava koju sesiju agenta treba nastaviti. Pokušajte ponovo za nekoliko sekundi." + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux još vraća terminal nakon ponovnog otvaranja i provjerava koju sesiju agenta treba nastaviti. Pokušajte ponovo za nekoliko sekundi." } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "cmux gendanner stadig terminalen efter genåbning og tjekker, hvilken agentsession der skal genoptages. Prøv igen om et par sekunder." + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux gendanner stadig terminalen efter genåbning og tjekker, hvilken agentsession der skal genoptages. Prøv igen om et par sekunder." } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "cmux sta ancora ripristinando il terminale dopo la riapertura e verifica quale sessione dell’agente riprendere. Riprova tra qualche secondo." + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux sta ancora ripristinando il terminale dopo la riapertura e verifica quale sessione dell’agente riprendere. Riprova tra qualche secondo." } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "cmux នៅតែកំពុងស្ដារទែមីណាល់ឡើងវិញ បន្ទាប់ពីបើកម្ដងទៀត ហើយកំពុងពិនិត្យមើលថាត្រូវបន្តវគ្គភ្នាក់ងារមួយណា។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux នៅតែកំពុងស្ដារទែមីណាល់ឡើងវិញ បន្ទាប់ពីបើកម្ដងទៀត ហើយកំពុងពិនិត្យមើលថាត្រូវបន្តវគ្គភ្នាក់ងារមួយណា។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "cmux gjenoppretter fortsatt terminalen etter at den ble åpnet på nytt, og sjekker hvilken agentøkt som skal gjenopptas. Prøv igjen om noen sekunder." + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux gjenoppretter fortsatt terminalen etter at den ble åpnet på nytt, og sjekker hvilken agentøkt som skal gjenopptas. Prøv igjen om noen sekunder." } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "cmux wciąż przywraca terminal po ponownym otwarciu i sprawdza, którą sesję agenta wznowić. Spróbuj ponownie za kilka sekund." + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux wciąż przywraca terminal po ponownym otwarciu i sprawdza, którą sesję agenta wznowić. Spróbuj ponownie za kilka sekund." } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O cmux ainda está restaurando o terminal após ser reaberto e verificando qual sessão do agente retomar. Tente novamente em alguns segundos." + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O cmux ainda está restaurando o terminal após ser reaberto e verificando qual sessão do agente retomar. Tente novamente em alguns segundos." } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "cmux ещё восстанавливает терминал после повторного открытия и проверяет, какой сеанс агента возобновить. Повторите попытку через несколько секунд." + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux ещё восстанавливает терминал после повторного открытия и проверяет, какой сеанс агента возобновить. Повторите попытку через несколько секунд." } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "cmux ยังคงกู้คืนเทอร์มินัลหลังจากเปิดใหม่ และกำลังตรวจสอบว่าจะทำเซสชันเอเจนต์ใดต่อ ลองอีกครั้งในอีกไม่กี่วินาที" + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux ยังคงกู้คืนเทอร์มินัลหลังจากเปิดใหม่ และกำลังตรวจสอบว่าจะทำเซสชันเอเจนต์ใดต่อ ลองอีกครั้งในอีกไม่กี่วินาที" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "cmux yeniden açıldıktan sonra terminali hâlâ geri yüklüyor ve hangi ajan oturumunun sürdürüleceğini denetliyor. Birkaç saniye sonra yeniden deneyin." + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux yeniden açıldıktan sonra terminali hâlâ geri yüklüyor ve hangi ajan oturumunun sürdürüleceğini denetliyor. Birkaç saniye sonra yeniden deneyin." } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "cmux ще відновлює термінал після повторного відкриття та перевіряє, який сеанс агента відновити. Спробуйте ще раз за кілька секунд." + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux ще відновлює термінал після повторного відкриття та перевіряє, який сеанс агента відновити. Спробуйте ще раз за кілька секунд." } } } @@ -568727,70 +568920,70 @@ "value": "此終端機正在關閉,無法讀取。" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Terminal se zatvara i ne može se pročitati." + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal se zatvara i ne može se pročitati." } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Terminalen lukkes og kan ikke læses." + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen lukkes og kan ikke læses." } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Il terminale si sta chiudendo e non può essere letto." + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale si sta chiudendo e non può essere letto." } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទែមីណាល់កំពុងបិទ ហើយមិនអាចអានបានទេ។" + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់កំពុងបិទ ហើយមិនអាចអានបានទេ។" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Terminalen lukkes og kan ikke leses." + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen lukkes og kan ikke leses." } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Terminal jest zamykany i nie można go odczytać." + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jest zamykany i nie można go odczytać." } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O terminal está sendo fechado e não pode ser lido." + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal está sendo fechado e não pode ser lido." } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Терминал закрывается, и его нельзя прочитать." + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал закрывается, и его нельзя прочитать." } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "เทอร์มินัลกำลังปิดและไม่สามารถอ่านได้" + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลกำลังปิดและไม่สามารถอ่านได้" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Terminal kapanıyor ve okunamıyor." + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal kapanıyor ve okunamıyor." } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Термінал закривається, і його не можна прочитати." + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал закривається, і його не можна прочитати." } } } @@ -568852,70 +569045,70 @@ "value": "此終端機已休眠:cmux 暫停了其閒置的代理以節省記憶體。顯示它即可喚醒(這會將其視窗帶到最前面),然後再試一次:%@" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Probudite ga tako što ćete ga prikazati (njegov prozor prelazi u prvi plan), pa pokušajte ponovo: %@" + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Probudite ga tako što ćete ga prikazati (njegov prozor prelazi u prvi plan), pa pokušajte ponovo: %@" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Væk den ved at vise den (dens vindue kommer forrest), og prøv igen: %@" + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Væk den ved at vise den (dens vindue kommer forrest), og prøv igen: %@" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Riattivalo mostrandolo (la sua finestra passa in primo piano), quindi riprova: %@" + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Riattivalo mostrandolo (la sua finestra passa in primo piano), quindi riprova: %@" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ ដាស់វាដោយបង្ហាញវា (បង្អួចរបស់វានឹងមកខាងមុខ) រួចព្យាយាមម្ដងទៀត៖ %@" + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ ដាស់វាដោយបង្ហាញវា (បង្អួចរបស់វានឹងមកខាងមុខ) រួចព្យាយាមម្ដងទៀត៖ %@" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vekk den ved å vise den (vinduet kommer i forgrunnen), og prøv igjen: %@" + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vekk den ved å vise den (vinduet kommer i forgrunnen), og prøv igjen: %@" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wybudź go, wyświetlając go (jego okno przejdzie na pierwszy plan), a potem spróbuj ponownie: %@" + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wybudź go, wyświetlając go (jego okno przejdzie na pierwszy plan), a potem spróbuj ponownie: %@" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Desperte-o exibindo-o (a janela vem para a frente) e tente novamente: %@" + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Desperte-o exibindo-o (a janela vem para a frente) e tente novamente: %@" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Разбудите его, показав терминал (его окно выйдет на передний план), и повторите попытку: %@" + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Разбудите его, показав терминал (его окно выйдет на передний план), и повторите попытку: %@" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ ปลุกโดยแสดงเทอร์มินัล (หน้าต่างจะมาอยู่ด้านหน้า) แล้วลองอีกครั้ง: %@" + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ ปลุกโดยแสดงเทอร์มินัล (หน้าต่างจะมาอยู่ด้านหน้า) แล้วลองอีกครั้ง: %@" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Onu göstererek uyandırın (penceresi öne gelir), ardından yeniden deneyin: %@" + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Onu göstererek uyandırın (penceresi öne gelir), ardından yeniden deneyin: %@" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Розбудіть його, показавши термінал (його вікно перейде на передній план), і спробуйте ще раз: %@" + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Розбудіть його, показавши термінал (його вікно перейде на передній план), і спробуйте ще раз: %@" } } } @@ -568977,70 +569170,70 @@ "value": "此終端機已休眠:cmux 暫停了其閒置的代理以節省記憶體。請在 cmux 中顯示此終端機以喚醒它,然後再試一次。" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Prikažite terminal u cmuxu da ga probudite, pa pokušajte ponovo." + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Prikažite terminal u cmuxu da ga probudite, pa pokušajte ponovo." } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Vis terminalen i cmux for at vække den, og prøv igen." + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Vis terminalen i cmux for at vække den, og prøv igen." } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Mostra il terminale in cmux per riattivarlo, quindi riprova." + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Mostra il terminale in cmux per riattivarlo, quindi riprova." } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ បង្ហាញទែមីណាល់នៅក្នុង cmux ដើម្បីដាស់វា រួចព្យាយាមម្ដងទៀត។" + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ បង្ហាញទែមីណាល់នៅក្នុង cmux ដើម្បីដាស់វា រួចព្យាយាមម្ដងទៀត។" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vis terminalen i cmux for å vekke den, og prøv igjen." + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vis terminalen i cmux for å vekke den, og prøv igjen." } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wyświetl terminal w cmux, aby go wybudzić, a potem spróbuj ponownie." + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wyświetl terminal w cmux, aby go wybudzić, a potem spróbuj ponownie." } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Mostre o terminal no cmux para despertá-lo e tente novamente." + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Mostre o terminal no cmux para despertá-lo e tente novamente." } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Покажите терминал в cmux, чтобы разбудить его, и повторите попытку." + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Покажите терминал в cmux, чтобы разбудить его, и повторите попытку." } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ แสดงเทอร์มินัลใน cmux เพื่อปลุก แล้วลองอีกครั้ง" + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ แสดงเทอร์มินัลใน cmux เพื่อปลุก แล้วลองอีกครั้ง" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Uyandırmak için terminali cmux'ta gösterin, ardından yeniden deneyin." + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Uyandırmak için terminali cmux'ta gösterin, ardından yeniden deneyin." } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Покажіть термінал у cmux, щоб розбудити його, і спробуйте ще раз." + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Покажіть термінал у cmux, щоб розбудити його, і спробуйте ще раз." } } } @@ -569102,70 +569295,70 @@ "value": "此終端機尚未啟動。請幾秒後再試。" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Terminal se još nije pokrenuo. Pokušajte ponovo za nekoliko sekundi." + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal se još nije pokrenuo. Pokušajte ponovo za nekoliko sekundi." } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Terminalen er ikke startet endnu. Prøv igen om et par sekunder." + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er ikke startet endnu. Prøv igen om et par sekunder." } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Il terminale non è ancora stato avviato. Riprova tra qualche secondo." + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale non è ancora stato avviato. Riprova tra qualche secondo." } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទែមីណាល់មិនទាន់បានចាប់ផ្តើមនៅឡើយទេ។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់មិនទាន់បានចាប់ផ្តើមនៅឡើយទេ។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Terminalen har ikke startet ennå. Prøv igjen om noen sekunder." + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen har ikke startet ennå. Prøv igjen om noen sekunder." } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Terminal jeszcze się nie uruchomił. Spróbuj ponownie za kilka sekund." + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jeszcze się nie uruchomił. Spróbuj ponownie za kilka sekund." } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O terminal ainda não foi iniciado. Tente novamente em alguns segundos." + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal ainda não foi iniciado. Tente novamente em alguns segundos." } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Терминал ещё не запущен. Повторите попытку через несколько секунд." + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал ещё не запущен. Повторите попытку через несколько секунд." } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "เทอร์มินัลยังไม่ได้เริ่มทำงาน ลองอีกครั้งในอีกไม่กี่วินาที" + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลยังไม่ได้เริ่มทำงาน ลองอีกครั้งในอีกไม่กี่วินาที" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Terminal henüz başlamadı. Birkaç saniye sonra yeniden deneyin." + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal henüz başlamadı. Birkaç saniye sonra yeniden deneyin." } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Термінал ще не запущено. Спробуйте ще раз за кілька секунд." + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал ще не запущено. Спробуйте ще раз за кілька секунд." } } } @@ -569996,242 +570189,6 @@ } } }, - "machines.requiresPro.upgrade.short": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Upgrade" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "ترقية" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Upgraden" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Actualizar" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Mettre à niveau" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アップグレード" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "업그레이드" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "升级" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "升級" - } - } - } - }, - "machines.sessionRejected.signInAgain.short": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign In" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تسجيل الدخول" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Anmelden" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se reconnecter" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再サインイン" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 로그인" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "重新登录" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "重新登入" - } - } - } - }, - "machines.requiresPro.stale": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cloud machines need cmux Pro — showing last known" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تتطلب الأجهزة السحابية إصدار cmux Pro — يتم عرض آخر حالة معروفة" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-Maschinen erfordern cmux Pro – zeige letzten bekannten Stand" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Las máquinas en la nube requieren cmux Pro — se muestra el último estado conocido" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Les machines Cloud nécessitent cmux Pro — affichage des dernières informations connues" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud マシンには cmux Pro が必要です — 最後の状態を表示中" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "클라우드 머신을 사용하려면 cmux Pro가 필요함 — 마지막으로 확인된 상태 표시 중" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "云端机器需要 cmux Pro —— 显示的是最后已知状态" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "雲端機器需要 cmux Pro — 顯示上次已知的狀態" - } - } - } - }, - "machines.sessionRejected.stale": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign-in needs a refresh — showing last known" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يحتاج تسجيل الدخول إلى تحديث — يتم عرض آخر حالة معروفة" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Anmeldung muss aktualisiert werden – zeige letzten bekannten Stand" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Es necesario actualizar el inicio de sesión — se muestra el último estado conocido" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "La connexion doit être actualisée — affichage des dernières informations connues" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再サインインが必要です — 最後の状態を表示中" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "로그인 갱신 필요 — 마지막으로 확인된 상태 표시 중" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "登录状态需要刷新 —— 显示的是最后已知状态" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "登入狀態需要重新整理 — 顯示上次已知的狀態" - } - } - } - }, "cli.session.help": { "extractionState": "manual", "localizations": { @@ -571058,16631 +571015,17283 @@ } } }, - "agent.claude.stopFailure.body.generic": { + "settings.app.showAgentUsage": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Claude Code stopped on an API error" + "value": "عرض استخدام الوكيل في الشريط الجانبي" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "Claude Code は API エラーで停止しました" + "value": "Agent-Nutzung in der Seitenleiste anzeigen" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "Claude Code 因 API 错误而停止" + "value": "Show Agent Usage in Sidebar" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Claude Code wurde wegen eines API-Fehlers gestoppt" + "value": "Mostrar el uso del agente en la barra lateral" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Claude Code s'est arrêté sur une erreur d'API" + "value": "Afficher l’utilisation des agents dans la barre latérale" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "توقف Claude Code بسبب خطأ في واجهة API" + "value": "サイドバーにエージェントの使用状況を表示" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Claude Code se detuvo por un error de la API" + "value": "사이드바에 에이전트 사용량 표시" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Claude Code 因 API 錯誤而停止" + "value": "在侧边栏显示代理用量" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Claude Code가 API 오류로 중지되었습니다" + "value": "在側邊欄顯示代理用量" } } } }, - "agent.claude.stopFailure.status.apiError": { + "settings.app.showAgentUsage.subtitle": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "API error" + "value": "يُلحق النموذج ونسبة نافذة السياق المستخدمة بإدخالات حالة Claude Code وCodex، بالإضافة إلى تكلفة API تقديرية لـ Claude Code. التكلفة تقدير مبني على أسعار API المعلنة، وليست فاتورة اشتراكك." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "API エラー" + "value": "Hängt Modell und belegtes Kontextfenster an die Statuseinträge von Claude Code und Codex an, für Claude Code zusätzlich die geschätzten API-Kosten. Die Kosten sind eine Schätzung nach API-Listenpreisen, nicht deine Abo-Rechnung." } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "API 错误" + "value": "Append the model and context window used to Claude Code and Codex status entries, plus an estimated API cost for Claude Code. The cost is an API list-price estimate, not your subscription bill." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "API-Fehler" + "value": "Añade el modelo y la ventana de contexto usada a las entradas de estado de Claude Code y Codex, además de un coste estimado de la API para Claude Code. El coste es una estimación según los precios de lista de la API, no la factura de tu suscripción." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Erreur d'API" + "value": "Ajoute le modèle et la part de la fenêtre de contexte utilisée aux entrées d’état de Claude Code et Codex, ainsi qu’un coût API estimé pour Claude Code. Le coût est une estimation d’après les tarifs API publics, pas votre facture d’abonnement." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "خطأ في واجهة API" + "value": "Claude Code と Codex のステータス項目にモデルと使用中のコンテキストウィンドウを追加し、Claude Code には推定 API コストも表示します。コストは API の定価に基づく推定値で、サブスクリプションの請求額ではありません。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Error de la API" + "value": "Claude Code 및 Codex 상태 항목에 모델과 사용 중인 컨텍스트 창을 덧붙이고, Claude Code에는 예상 API 비용도 표시합니다. 비용은 API 정가 기준의 추정치이며 구독 요금이 아닙니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "API 錯誤" + "value": "在 Claude Code 和 Codex 的状态条目后附加模型和已用的上下文窗口,并为 Claude Code 附加估算的 API 费用。费用是根据 API 公开价格估算的,并非你的订阅账单。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "API 오류" + "value": "在 Claude Code 與 Codex 的狀態項目後附加模型與已用的上下文視窗,並為 Claude Code 附加估算的 API 費用。費用是依 API 公開價格估算,並非你的訂閱帳單。" } } } }, - "agent.claude.stopFailure.status.authentication": { + "settings.search.alias.setting.app.show-agent-usage": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Auth error" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex وكيل استخدام نموذج نافذة السياق رموز نسبة تكلفة سعر تقدير الشريط الجانبي" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "認証エラー" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex Agent Nutzung Modell Kontextfenster Token Prozent Kosten Preis Schätzung Seitenleiste" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "认证错误" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Authentifizierungsfehler" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex agente uso modelo ventana de contexto tokens porcentaje coste precio estimación barra lateral" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Erreur d'authentification" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex agent utilisation modèle fenêtre de contexte jetons pourcentage coût prix estimation barre latérale" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "خطأ في المصادقة" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex エージェント 使用状況 モデル コンテキストウィンドウ トークン パーセント コスト 料金 推定 サイドバー" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Error de autenticación" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 에이전트 사용량 모델 컨텍스트 창 토큰 퍼센트 비용 가격 추정 사이드바" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "驗證錯誤" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 代理 用量 模型 上下文窗口 令牌 百分比 费用 价格 估算 侧边栏" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "인증 오류" + "value": "sidebar.showAgentUsage agent usage model context window tokens percent cost price estimate spend claude codex 代理 用量 模型 上下文視窗 權杖 百分比 費用 價格 估算 側邊欄" } } } }, - "agent.claude.stopFailure.status.billing": { + "sidebar.agentUsage.estimatedCost": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Billing error" + "value": "حوالي %@" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "請求エラー" + "value": "ca. %@" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "账单错误" + "value": "~%@" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Abrechnungsfehler" + "value": "aprox. %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Erreur de facturation" + "value": "env. %@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "خطأ في الفوترة" + "value": "約%@" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Error de facturación" + "value": "약 %@" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "帳單錯誤" + "value": "约 %@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "결제 오류" + "value": "約 %@" } } } }, - "agent.claude.stopFailure.status.connectionDropped": { + "sidebar.agentUsage.estimatedCostAtLeast": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Connection dropped" + "value": "حوالي %@+" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "接続が切断されました" + "value": "ca. %@+" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "连接已断开" + "value": "~%@+" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Verbindung abgebrochen" + "value": "aprox. %@+" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion interrompue" + "value": "env. %@+" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "انقطع الاتصال" + "value": "約%@+" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Conexión perdida" + "value": "약 %@+" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "連線已中斷" + "value": "约 %@+" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "연결 끊김" + "value": "約 %@+" } } } }, - "agent.claude.stopFailure.status.outputLimit": { + "sidebar.agentUsage.costHelp": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Output limit" + "value": "التكلفة تقدير مبني على أسعار API المعلنة، وليست فاتورة اشتراكك." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "出力上限" + "value": "Die Kosten sind eine Schätzung nach API-Listenpreisen, nicht deine Abo-Rechnung." } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "输出上限" + "value": "Cost is an API list-price estimate, not your subscription bill." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Ausgabelimit" + "value": "El coste es una estimación según los precios de lista de la API, no la factura de tu suscripción." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite de sortie" + "value": "Le coût est une estimation d’après les tarifs API publics, pas votre facture d’abonnement." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "حد المخرجات" + "value": "コストは API の定価に基づく推定値で、サブスクリプションの請求額ではありません。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de salida" + "value": "비용은 API 정가 기준의 추정치이며 구독 요금이 아닙니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "輸出上限" + "value": "费用是根据 API 公开价格估算的,并非你的订阅账单。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "출력 한도" + "value": "費用是依 API 公開價格估算,並非你的訂閱帳單。" } } } }, - "agent.claude.stopFailure.status.overloaded": { + "cli.restore.notice.routedLauncherUnavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "API overloaded" + "value": "restore: this session was started through the routed launcher '%@', which is not on PATH. Resuming the agent directly instead." } }, "ja": { "stringUnit": { "state": "translated", - "value": "API 過負荷" + "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "API 过载" + "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" } }, "de": { "stringUnit": { "state": "translated", - "value": "API überlastet" + "value": "restore: Diese Sitzung wurde über den weitergeleiteten Launcher „%@“ gestartet, der nicht im PATH liegt. Der Agent wird stattdessen direkt fortgesetzt." } }, "fr": { "stringUnit": { "state": "translated", - "value": "API surchargée" + "value": "restore : cette session a été lancée via le lanceur routé « %@ », qui est introuvable dans le PATH. Reprise directe de l'agent à la place." } }, "ar": { "stringUnit": { "state": "translated", - "value": "واجهة API محمّلة فوق طاقتها" + "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." } }, "es": { "stringUnit": { "state": "translated", - "value": "API sobrecargada" + "value": "restore: esta sesión se inició mediante el lanzador enrutado '%@', que no está en el PATH. Se reanudará el agente directamente." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "API 過載" + "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "API 과부하" + "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." } } } }, - "agent.claude.stopFailure.status.rateLimited": { + "settings.app.compactAgentStatus": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rate limited" + "value": "Compact Agent Status" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "レート制限中" + "value": "حالة الوكيل المختصرة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "已限速" + "value": "Kompakter Agentenstatus" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Ratenbegrenzt" + "value": "Estado de agente compacto" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite de requêtes atteinte" + "value": "Statut d’agent compact" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم تقييد المعدل" + "value": "エージェント状態のコンパクト表示" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de frecuencia alcanzado" + "value": "간결한 에이전트 상태" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已限速" + "value": "精简代理状态" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "속도 제한됨" + "value": "精簡代理狀態" } } } }, - "agent.claude.stopFailure.status.usageLimit": { + "settings.app.compactAgentStatus.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage limit" + "value": "Show a workspace's agent, unread and pull request state as one colored icon before the title instead of separate rows. Hover the icon for details." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "使用量の上限" + "value": "إظهار حالة الوكيل والعناصر غير المقروءة وطلب السحب لمساحة العمل كأيقونة ملونة واحدة قبل العنوان بدلاً من صفوف منفصلة. مرّر المؤشر فوق الأيقونة لعرض التفاصيل." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "用量上限" + "value": "Agenten-, Ungelesen- und Pull-Request-Status eines Workspace als ein farbiges Symbol vor dem Titel anzeigen statt in eigenen Zeilen. Details erscheinen, wenn du den Zeiger über das Symbol bewegst." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Nutzungslimit" + "value": "Mostrar el estado del agente, lo no leído y la pull request de un espacio de trabajo como un único icono de color antes del título, en lugar de filas separadas. Pasa el cursor sobre el icono para ver los detalles." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite d'utilisation" + "value": "Afficher l’état de l’agent, des éléments non lus et de la pull request d’un espace de travail sous forme d’une seule icône colorée avant le titre, au lieu de lignes distinctes. Survolez l’icône pour voir les détails." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "حد الاستخدام" + "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de uso" + "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用量上限" + "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "사용량 한도" + "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" } } } }, - "agent.claude.stopFailure.status.usageLimitResets": { + "settings.search.alias.setting.app.compact-agent-status": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Usage limit, resets %@" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex مختصر وكيل حالة أيقونة سطر العنوان" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "使用量の上限、%@ にリセット" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex kompakt Agent Status Symbol Titelzeile" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "用量上限,%@ 重置" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Nutzungslimit, Reset %@" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compacto agente estado icono línea de título" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite d'utilisation, réinitialisation %@" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compact agent statut icône ligne de titre" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "حد الاستخدام، يُعاد التعيين %@" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de uso, se restablece %@" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用量上限,%@ 重設" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "사용량 한도, %@에 초기화" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精簡 代理 狀態 圖示 標題列" } } } }, - "settings.app.reorderOnNotification.mode.agentActivity": { + "sidebar.agentStatus.glyph.tooltip": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "نشاط الوكيل" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Aktivnost agenata" + "value": "%1$@: %2$@" } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "%1$@: %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agentenaktivität" + "value": "%1$@: %2$@" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Agent Activity" + "value": "%1$@: %2$@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Actividad de agentes" + "value": "%1$@ : %2$@" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Activité des agents" + "value": "%1$@:%2$@" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Attività degli agenti" + "value": "%1$@: %2$@" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "エージェントのアクティビティ" + "value": "%1$@:%2$@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "에이전트 활동" + "value": "%1$@:%2$@" } - }, - "nb": { + } + } + }, + "sidebar.compactStatus.profile": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "Profile" } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Aktywność agentów" + "value": "الملف الشخصي" } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Atividade dos agentes" + "value": "Profil" } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Активность агентов" + "value": "Perfil" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "กิจกรรมของเอเจนต์" + "value": "Profil" } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ajan etkinliği" + "value": "プロファイル" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Активність агентів" + "value": "프로필" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "代理活动" + "value": "配置文件" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "代理活動" + "value": "設定檔" } } } }, - "settings.app.reorderOnNotification.mode.notifications": { + "agent.claude.stopFailure.body.generic": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "الإشعارات" + "value": "Claude Code stopped on an API error" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Obavještenja" + "value": "Claude Code は API エラーで停止しました" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Notifikationer" + "value": "Claude Code 因 API 错误而停止" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Notifications" + "value": "Claude Code wurde wegen eines API-Fehlers gestoppt" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Notificaciones" + "value": "Claude Code s'est arrêté sur une erreur d'API" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sur notification" + "value": "توقف Claude Code بسبب خطأ في واجهة API" } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Notifiche" + "value": "Claude Code se detuvo por un error de la API" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "Claude Code 因 API 錯誤而停止" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림" + "value": "Claude Code가 API 오류로 중지되었습니다" } - }, - "nb": { + } + } + }, + "agent.claude.stopFailure.status.apiError": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Varsler" + "value": "API error" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Powiadomienia" + "value": "API エラー" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Notificações" + "value": "API 错误" } }, - "ru": { + "de": { "stringUnit": { "state": "translated", - "value": "Уведомления" + "value": "API-Fehler" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "การแจ้งเตือน" + "value": "Erreur d'API" } }, - "tr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Bildirimler" + "value": "خطأ في واجهة API" } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Сповіщення" + "value": "Error de la API" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "API 錯誤" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "API 오류" } } } }, - "settings.app.reorderOnNotification.mode.off": { + "agent.claude.stopFailure.status.authentication": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "إيقاف" + "value": "Auth error" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Isključeno" + "value": "認証エラー" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Fra" + "value": "认证错误" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Off" + "value": "Authentifizierungsfehler" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Desactivado" + "value": "Erreur d'authentification" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "خطأ في المصادقة" } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Disattivato" + "value": "Error de autenticación" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "驗證錯誤" } }, "ko": { "stringUnit": { "state": "translated", - "value": "끔" + "value": "인증 오류" } - }, - "nb": { + } + } + }, + "agent.claude.stopFailure.status.billing": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Av" + "value": "Billing error" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Wyłączone" + "value": "請求エラー" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Desativado" + "value": "账单错误" } }, - "ru": { + "de": { "stringUnit": { "state": "translated", - "value": "Выкл." + "value": "Abrechnungsfehler" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "Erreur de facturation" } }, - "tr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Kapalı" + "value": "خطأ في الفوترة" } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Вимкнено" + "value": "Error de facturación" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "帳單錯誤" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "결제 오류" } } } }, - "settings.app.reorderOnNotification.modeSubtitle": { + "agent.claude.stopFailure.status.connectionDropped": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "ينقل مساحات العمل إلى الأعلى عندما تتلقى إشعارًا. مع نشاط الوكيل، ينقلها أيضًا عندما ترسل مطالبة أو ينهي وكيل دورة أو يحتاج إلى إدخال أو يفشل، لكن ليس أبدًا أثناء وجود المؤشر فوق الشريط الجانبي. الإيقاف يحافظ على ثبات مواضع الاختصارات." + "value": "Connection dropped" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Pomjera radne prostore na vrh kada prime obavještenje. Aktivnost agenata ih pomjera i kada pošaljete upit ili agent završi potez, treba unos ili ne uspije, ali nikad dok je pokazivač iznad bočne trake. Isključeno čuva stabilne pozicije prečica." + "value": "接続が切断されました" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Flytter arbejdsområder til toppen, når de modtager en notifikation. Agentaktivitet flytter dem også, når du sender en prompt eller en agent afslutter en tur, har brug for input eller fejler, men aldrig mens markøren er over sidepanelet. Fra holder genvejspositionerne stabile." + "value": "连接已断开" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verschiebt Workspaces nach oben, wenn sie eine Benachrichtigung erhalten. Mit Agentenaktivität auch dann, wenn Sie einen Prompt senden oder ein Agent einen Durchlauf beendet, eine Eingabe braucht oder fehlschlägt, aber nie, während der Zeiger über der Seitenleiste ist. Aus hält die Positionen der Tastenkürzel stabil." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Move workspaces to the top when they receive a notification. Agent Activity also moves them when you send a prompt or an agent finishes a turn, needs input, or fails, but never while you point at the sidebar. Off keeps shortcut positions stable." + "value": "Verbindung abgebrochen" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mueve los espacios de trabajo arriba cuando reciben una notificación. Con Actividad de agentes, también cuando envías un prompt o un agente termina un turno, necesita una respuesta o falla, pero nunca mientras el puntero está sobre la barra lateral. Desactivado mantiene estables las posiciones de los atajos." + "value": "Connexion interrompue" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Place les espaces de travail en haut lorsqu’ils reçoivent une notification. Avec Activité des agents, aussi lorsque vous envoyez un prompt ou qu’un agent termine un tour, attend une saisie ou échoue, mais jamais pendant que le pointeur survole la barre latérale. Désactivé garde les positions des raccourcis stables." + "value": "انقطع الاتصال" } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Sposta gli spazi di lavoro in cima quando ricevono una notifica. Attività degli agenti li sposta anche quando invii un prompt o un agente termina un turno, attende un input o fallisce, ma mai mentre il puntatore è sulla barra laterale. Disattivato mantiene stabili le posizioni delle scorciatoie." + "value": "Conexión perdida" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知を受け取ったワークスペースを先頭に移動します。「エージェントのアクティビティ」では、プロンプトを送信したときや、エージェントがターンを終えたとき、入力を待っているとき、失敗したときにも移動しますが、ポインタがサイドバー上にある間は移動しません。「オフ」ではショートカットの位置が変わりません。" + "value": "連線已中斷" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림을 받으면 워크스페이스를 맨 위로 옮깁니다. 에이전트 활동을 선택하면 프롬프트를 보내거나 에이전트가 턴을 마치거나 입력이 필요하거나 실패할 때도 옮기지만, 포인터가 사이드바 위에 있을 때는 옮기지 않습니다. 끔은 단축키 위치를 고정합니다." + "value": "연결 끊김" } - }, - "nb": { + } + } + }, + "agent.claude.stopFailure.status.outputLimit": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Flytter arbeidsområder til toppen når de mottar et varsel. Agentaktivitet flytter dem også når du sender en ledetekst eller en agent fullfører en runde, trenger input eller feiler, men aldri mens pekeren er over sidefeltet. Av holder snarveisposisjonene stabile." + "value": "Output limit" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Przenosi obszary robocze na górę, gdy otrzymają powiadomienie. Aktywność agentów przenosi je także, gdy wyślesz prompt lub agent zakończy turę, potrzebuje danych lub zakończy się błędem, ale nigdy, gdy wskaźnik jest nad paskiem bocznym. Wyłączone zachowuje stałe pozycje skrótów." + "value": "出力上限" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Move os espaços de trabalho para o topo quando recebem uma notificação. Atividade dos agentes também os move quando você envia um prompt ou um agente termina um turno, precisa de uma resposta ou falha, mas nunca enquanto o ponteiro está sobre a barra lateral. Desativado mantém as posições dos atalhos estáveis." + "value": "输出上限" } }, - "ru": { + "de": { "stringUnit": { "state": "translated", - "value": "Перемещает рабочие области наверх, когда они получают уведомление. «Активность агентов» также перемещает их, когда вы отправляете запрос или агент завершает ход, ждёт ввода или завершается с ошибкой, но никогда, пока указатель находится над боковой панелью. «Выкл.» сохраняет позиции сочетаний клавиш." + "value": "Ausgabelimit" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "ย้ายเวิร์กสเปซขึ้นด้านบนเมื่อได้รับการแจ้งเตือน กิจกรรมของเอเจนต์จะย้ายเมื่อคุณส่งพรอมต์หรือเอเจนต์จบรอบ ต้องการข้อมูล หรือล้มเหลวด้วย แต่จะไม่ย้ายขณะที่ตัวชี้อยู่เหนือแถบด้านข้าง ปิดจะคงตำแหน่งของทางลัดไว้" + "value": "Limite de sortie" } }, - "tr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Bildirim aldıklarında çalışma alanlarını en üste taşır. Ajan etkinliği, bir istem gönderdiğinizde, bir ajan turunu bitirdiğinde, girdi beklediğinde veya başarısız olduğunda da taşır, ancak işaretçi kenar çubuğunun üzerindeyken asla taşımaz. Kapalı, kısayol konumlarını sabit tutar." + "value": "حد المخرجات" } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Переміщує робочі області вгору, коли вони отримують сповіщення. «Активність агентів» також переміщує їх, коли ви надсилаєте запит або агент завершує хід, чекає на введення або завершується з помилкою, але ніколи, поки вказівник над бічною панеллю. «Вимкнено» зберігає позиції скорочень." + "value": "Límite de salida" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作区收到通知时移到顶部。选择“代理活动”时,你发送提示词或代理完成一轮、需要输入或失败时也会移动,但指针停在侧边栏上时绝不移动。关闭可让快捷键位置保持不变。" + "value": "輸出上限" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" + "value": "출력 한도" } } } }, - "cli.restore.notice.routedLauncherUnavailable": { + "agent.claude.stopFailure.status.overloaded": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "restore: this session was started through the routed launcher '%@', which is not on PATH. Resuming the agent directly instead." + "value": "API overloaded" } }, "ja": { "stringUnit": { "state": "translated", - "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" + "value": "API 過負荷" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" + "value": "API 过载" } }, "de": { "stringUnit": { "state": "translated", - "value": "restore: Diese Sitzung wurde über den weitergeleiteten Launcher „%@“ gestartet, der nicht im PATH liegt. Der Agent wird stattdessen direkt fortgesetzt." + "value": "API überlastet" } }, "fr": { "stringUnit": { "state": "translated", - "value": "restore : cette session a été lancée via le lanceur routé « %@ », qui est introuvable dans le PATH. Reprise directe de l'agent à la place." + "value": "API surchargée" } }, "ar": { "stringUnit": { "state": "translated", - "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." + "value": "واجهة API محمّلة فوق طاقتها" } }, "es": { "stringUnit": { "state": "translated", - "value": "restore: esta sesión se inició mediante el lanzador enrutado '%@', que no está en el PATH. Se reanudará el agente directamente." + "value": "API sobrecargada" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" + "value": "API 過載" } }, "ko": { "stringUnit": { "state": "translated", - "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." + "value": "API 과부하" } } } }, - "sidebar.extensions.action.noSpaceForPane": { + "agent.claude.stopFailure.status.rateLimited": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No space for new pane" + "value": "Rate limited" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لا توجد مساحة للوحة جديدة" + "value": "レート制限中" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Kein Platz für einen neuen Bereich" + "value": "已限速" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "No hay espacio para un panel nuevo" + "value": "Ratenbegrenzt" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pas de place pour un nouveau panneau" + "value": "Limite de requêtes atteinte" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "新しいペインを置く場所がありません" + "value": "تم تقييد المعدل" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "새 창을 위한 공간이 없습니다" + "value": "Límite de frecuencia alcanzado" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "没有空间容纳新窗格" + "value": "已限速" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "沒有空間容納新窗格" + "value": "속도 제한됨" } } } }, - "cli.focus.defaultHelp": { + "agent.claude.stopFailure.status.usageLimit": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Default: focus when run interactively, stay in the background when run by an agent or script." + "value": "Usage limit" } }, "ja": { "stringUnit": { "state": "translated", - "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" + "value": "使用量の上限" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "用量上限" } }, "de": { "stringUnit": { "state": "translated", - "value": "Standard: bei interaktiver Ausführung fokussieren, bei Ausführung durch einen Agenten oder ein Skript im Hintergrund bleiben." + "value": "Nutzungslimit" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Par défaut : prend le focus en exécution interactive, reste en arrière-plan quand un agent ou un script l’exécute." + "value": "Limite d'utilisation" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." + "value": "حد الاستخدام" } }, "es": { "stringUnit": { "state": "translated", - "value": "Predeterminado: enfoca al ejecutarse de forma interactiva y se queda en segundo plano cuando lo ejecuta un agente o un script." + "value": "Límite de uso" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" + "value": "用量上限" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." + "value": "사용량 한도" } } } }, - "cli.help.openFocusFlags": { + "agent.claude.stopFailure.status.usageLimitResets": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Focus:\n --focus Switch to the new workspace\n --no-focus Open it in the background" + "value": "Usage limit, resets %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" + "value": "使用量の上限、%@ にリセット" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "用量上限,%@ 重置" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" + "value": "Nutzungslimit, Reset %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" + "value": "Limite d'utilisation, réinitialisation %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" + "value": "حد الاستخدام، يُعاد التعيين %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" + "value": "Límite de uso, se restablece %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" + "value": "用量上限,%@ 重設" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" + "value": "사용량 한도, %@에 초기화" } } } }, - "settings.app.compactAgentStatus": { + "sidebar.extensions.action.noSpaceForPane": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Compact Agent Status" + "value": "No space for new pane" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حالة الوكيل المختصرة" + "value": "لا توجد مساحة للوحة جديدة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kompakter Agentenstatus" + "value": "Kein Platz für einen neuen Bereich" } }, "es": { "stringUnit": { "state": "translated", - "value": "Estado de agente compacto" + "value": "No hay espacio para un panel nuevo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Statut d’agent compact" + "value": "Pas de place pour un nouveau panneau" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェント状態のコンパクト表示" + "value": "新しいペインを置く場所がありません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "간결한 에이전트 상태" + "value": "새 창을 위한 공간이 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "精简代理状态" + "value": "没有空间容纳新窗格" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "精簡代理狀態" + "value": "沒有空間容納新窗格" } } } }, - "settings.app.compactAgentStatus.subtitle": { + "cli.focus.defaultHelp": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show a workspace's agent, unread and pull request state as one colored icon before the title instead of separate rows. Hover the icon for details." + "value": "Default: focus when run interactively, stay in the background when run by an agent or script." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إظهار حالة الوكيل والعناصر غير المقروءة وطلب السحب لمساحة العمل كأيقونة ملونة واحدة قبل العنوان بدلاً من صفوف منفصلة. مرّر المؤشر فوق الأيقونة لعرض التفاصيل." + "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agenten-, Ungelesen- und Pull-Request-Status eines Workspace als ein farbiges Symbol vor dem Titel anzeigen statt in eigenen Zeilen. Details erscheinen, wenn du den Zeiger über das Symbol bewegst." + "value": "Standard: bei interaktiver Ausführung fokussieren, bei Ausführung durch einen Agenten oder ein Skript im Hintergrund bleiben." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mostrar el estado del agente, lo no leído y la pull request de un espacio de trabajo como un único icono de color antes del título, en lugar de filas separadas. Pasa el cursor sobre el icono para ver los detalles." + "value": "Par défaut : prend le focus en exécution interactive, reste en arrière-plan quand un agent ou un script l’exécute." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Afficher l’état de l’agent, des éléments non lus et de la pull request d’un espace de travail sous forme d’une seule icône colorée avant le titre, au lieu de lignes distinctes. Survolez l’icône pour voir les détails." + "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" + "value": "Predeterminado: enfoca al ejecutarse de forma interactiva y se queda en segundo plano cuando lo ejecuta un agente o un script." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." + "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" + "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" + "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." } } } }, - "settings.search.alias.setting.app.compact-agent-status": { + "cli.help.openFocusFlags": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex مختصر وكيل حالة أيقونة سطر العنوان" + "value": "Focus:\n --focus Switch to the new workspace\n --no-focus Open it in the background" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex kompakt Agent Status Symbol Titelzeile" + "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" + "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compacto agente estado icono línea de título" + "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compact agent statut icône ligne de titre" + "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" + "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" + "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" + "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精簡 代理 狀態 圖示 標題列" + "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" } } } }, - "sidebar.agentStatus.glyph.tooltip": { + "shortcut.sizeTerminalToMyWindow.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Size Terminal to My Window" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "ضبط حجم الطرفية على نافذتي" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Terminal an mein Fenster anpassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Ajustar la terminal a mi ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : %2$@" + "value": "Adapter le terminal à ma fenêtre" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "ターミナルを自分のウィンドウに合わせる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "터미널을 내 창 크기에 맞추기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "让终端适配我的窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "讓終端機符合我的視窗大小" } } } }, - "sidebar.compactStatus.profile": { + "command.terminalDisconnectOtherClients.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Profile" + "value": "Disconnect Other Terminal Clients…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الملف الشخصي" + "value": "قطع اتصال عملاء الطرفية الآخرين…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "Andere Terminal-Clients trennen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Perfil" + "value": "Desconectar otros clientes de la terminal…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "Déconnecter les autres clients du terminal…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "プロファイル" + "value": "他のターミナルクライアントを切断…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "프로필" + "value": "다른 터미널 클라이언트 연결 끊기…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "配置文件" + "value": "断开其他终端客户端…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定檔" + "value": "中斷其他終端機用戶端的連線…" } } } }, - "socket.mainActorHop.timeout.mayHaveRun": { + "command.terminalShowSizePanel.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux did not respond within 10 seconds after the command started, so its result is unknown. Check the effect before retrying." + "value": "Show Terminal Size Panel" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "コマンドの開始後 10 秒以内に cmux が応答しなかったため、結果は不明です。再試行する前に効果を確認してください。" + "value": "إظهار لوحة حجم الطرفية" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "命令开始后 10 秒内 cmux 没有响应,因此结果未知。请先确认效果再重试。" + "value": "Terminalgrößen-Bereich anzeigen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux hat innerhalb von 10 Sekunden nach dem Start des Befehls nicht geantwortet, das Ergebnis ist daher unbekannt. Prüfe die Auswirkung, bevor du es erneut versuchst." + "value": "Mostrar el panel de tamaño de la terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas répondu dans les 10 secondes suivant le démarrage de la commande, son résultat est donc inconnu. Vérifiez l’effet avant de réessayer." + "value": "Afficher le panneau de taille du terminal" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يستجب cmux خلال 10 ثوانٍ بعد بدء الأمر، لذا فإن نتيجته غير معروفة. تحقق من الأثر قبل إعادة المحاولة." + "value": "ターミナルサイズパネルを表示" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux no respondió en los 10 segundos posteriores al inicio del comando, por lo que su resultado es desconocido. Comprueba el efecto antes de reintentar." + "value": "터미널 크기 패널 보기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "命令開始後 10 秒內 cmux 沒有回應,因此結果未知。請先確認效果再重試。" + "value": "显示终端大小面板" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "명령이 시작된 후 10초 안에 cmux가 응답하지 않아 결과를 알 수 없습니다. 다시 시도하기 전에 효과를 확인하세요." + "value": "顯示終端機大小面板" } } } }, - "socket.mainActorHop.timeout.notRun": { + "command.terminalSizeToMyWindow.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux did not respond within 10 seconds, so the command was not run. Retry in a moment." + "value": "Size Terminal to My Window" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux が 10 秒以内に応答しなかったため、コマンドは実行されませんでした。しばらくしてから再試行してください。" + "value": "ضبط حجم الطرفية على نافذتي" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒内没有响应,因此未运行该命令。请稍后重试。" + "value": "Terminal an mein Fenster anpassen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux hat innerhalb von 10 Sekunden nicht geantwortet, der Befehl wurde daher nicht ausgeführt. Versuche es gleich noch einmal." + "value": "Ajustar la terminal a mi ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas répondu dans les 10 secondes, la commande n’a donc pas été exécutée. Réessayez dans un instant." + "value": "Adapter le terminal à ma fenêtre" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يستجب cmux خلال 10 ثوانٍ، لذا لم يتم تنفيذ الأمر. أعد المحاولة بعد لحظات." + "value": "ターミナルを自分のウィンドウに合わせる" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux no respondió en 10 segundos, por lo que el comando no se ejecutó. Reintenta en un momento." + "value": "터미널을 내 창 크기에 맞추기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒內沒有回應,因此未執行該命令。請稍後重試。" + "value": "让终端适配我的窗口" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 10초 안에 응답하지 않아 명령이 실행되지 않았습니다. 잠시 후 다시 시도하세요." + "value": "讓終端機符合我的視窗大小" } } } }, - "socket.overloaded.message": { + "terminalSharing.detached.hostShutdown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux is handling too many control-socket requests right now, so this one was not run. Retry in a moment." + "value": "The terminal host shut down at %@." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux は現在、制御ソケットの要求を処理しきれないため、この要求は実行されませんでした。しばらくしてから再試行してください。" + "value": "توقف مضيف الطرفية في %@." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 当前正在处理过多的控制套接字请求,因此未运行此请求。请稍后重试。" + "value": "Der Terminal-Host wurde um %@ beendet." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux verarbeitet gerade zu viele Control-Socket-Anfragen, diese wurde daher nicht ausgeführt. Versuche es gleich noch einmal." + "value": "El host de la terminal se detuvo a las %@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux traite actuellement trop de requêtes du socket de contrôle, celle-ci n’a donc pas été exécutée. Réessayez dans un instant." + "value": "L’hôte du terminal s’est arrêté à %@." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يعالج cmux حاليًا عددًا كبيرًا جدًا من طلبات مقبس التحكم، لذا لم يتم تنفيذ هذا الطلب. أعد المحاولة بعد لحظات." + "value": "ターミナルホストが %@ に終了しました。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux está gestionando demasiadas solicitudes del socket de control ahora mismo, por lo que esta no se ejecutó. Reintenta en un momento." + "value": "터미널 호스트가 %@에 종료되었습니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 目前正在處理過多的控制 socket 請求,因此未執行此請求。請稍後重試。" + "value": "终端主机已于 %@ 关闭。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 지금 너무 많은 제어 소켓 요청을 처리하고 있어 이 요청은 실행되지 않았습니다. 잠시 후 다시 시도하세요." + "value": "終端機主機已於 %@ 關閉。" } } } }, - "socket.request.cancelled": { + "terminalSharing.detached.network": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request was cancelled" + "value": "The network dropped." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "リクエストはキャンセルされました" + "value": "انقطع اتصال الشبكة." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "请求已取消" + "value": "Die Netzwerkverbindung wurde unterbrochen." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Anfrage wurde abgebrochen" + "value": "Se perdió la conexión de red." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La requête a été annulée" + "value": "La connexion réseau a été interrompue." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم إلغاء الطلب" + "value": "ネットワーク接続が切れました。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Se canceló la solicitud" + "value": "네트워크 연결이 끊어졌습니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "請求已取消" + "value": "网络连接已中断。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "요청이 취소되었습니다" + "value": "網路連線中斷。" } } } }, - "socket.request.failedBeforeResult": { + "terminalSharing.detached.reattach": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request failed before returning a result" + "value": "Reattach" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "結果を返す前にリクエストが失敗しました" + "value": "إعادة الإرفاق" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "请求在返回结果之前失败" + "value": "Erneut verbinden" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Anfrage ist fehlgeschlagen, bevor ein Ergebnis zurückgegeben wurde" + "value": "Volver a conectar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La requête a échoué avant de renvoyer un résultat" + "value": "Se reconnecter" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فشل الطلب قبل إرجاع نتيجة" + "value": "再接続" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "La solicitud falló antes de devolver un resultado" + "value": "다시 연결" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "請求在傳回結果之前失敗" + "value": "重新连接" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "결과를 반환하기 전에 요청이 실패했습니다" + "value": "重新連接" } } } }, - "agent.codex.fork.notice.body": { + "terminalSharing.detached.reattachAsViewer": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux could not identify the new fork session. Start the fork again from the parent pane." + "value": "Reattach as Viewer" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux は新しいフォーク セッションを特定できませんでした。親ペインからもう一度フォークしてください。" + "value": "إعادة الإرفاق كمشاهد" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte die neue Fork-Sitzung nicht erkennen. Starten Sie den Fork erneut im übergeordneten Pane." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "cmux n’a pas pu identifier la nouvelle session forkée. Relancez le fork depuis le volet parent." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذر على cmux تحديد جلسة التفريع الجديدة. ابدأ التفريع مرة أخرى من الجزء الأصلي." + "value": "Als Zuschauer erneut verbinden" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux no pudo identificar la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." + "value": "Volver a conectar como espectador" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 無法識別新的分支工作階段。請從父窗格重新開始分支。" + "value": "Se reconnecter en lecture seule" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 无法识别新的分支会话。请从父窗格重新开始分支。" + "value": "閲覧者として再接続" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux가 새 포크 세션을 식별하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." + "value": "보기 전용으로 다시 연결" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux nije mogao prepoznati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." + "value": "以查看者身份重新连接" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke identificere den nye forgreningssession. Start forgreningen igen fra forældreruden." + "value": "以檢視者身分重新連接" } - }, - "it": { + } + } + }, + "terminalSharing.detached.reattachAsViewer.help": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux non ha potuto identificare la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." + "value": "Reattach without changing the terminal size" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux មិនអាចកំណត់អត្តសញ្ញាណសម័យ fork ថ្មីបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" + "value": "إعادة الإرفاق دون تغيير حجم الطرفية" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke identifisere den nye forgreningsøkten. Start forgreningen på nytt fra den overordnede ruten." + "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł zidentyfikować nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "value": "Volver a conectar sin cambiar el tamaño de la terminal" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "O cmux não conseguiu identificar a nova sessão bifurcada. Inicie o fork novamente no painel principal." + "value": "Se reconnecter sans modifier la taille du terminal" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux не удалось определить новый сеанс форка. Запустите форк снова из родительской панели." + "value": "ターミナルサイズを変えずに再接続" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux ไม่สามารถระบุเซสชันที่แยกใหม่ได้ เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" + "value": "터미널 크기를 바꾸지 않고 다시 연결" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux yeni fork oturumunu belirleyemedi. Fork'u üst panelden yeniden başlatın." + "value": "重新连接但不更改终端大小" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux не вдалося визначити новий сеанс форка. Запустіть форк ще раз із батьківської панелі." + "value": "重新連接但不變更終端機大小" } } } }, - "agent.codex.fork.notice.parentClearFailed.body": { + "terminalSharing.detached.someone": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux could not safely detach the parent session, so the fork was not started. Retry the fork from the parent pane." + "value": "Someone" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux は新しいフォーク セッションを安全にバインドできませんでした。親ペインからもう一度フォークしてください。" + "value": "شخص ما" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte die neue Fork-Sitzung nicht sicher binden. Starten Sie den Fork erneut im übergeordneten Pane." + "value": "Jemand" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas pu lier la nouvelle session forkée en toute sécurité. Relancez le fork depuis le volet parent." + "value": "Alguien" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "تعذر على cmux ربط جلسة التفريع الجديدة بأمان. أعد بدء التفريع من الجزء الأصلي." + "value": "Quelqu’un" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux no pudo vincular de forma segura la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." + "value": "誰か" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux 無法安全繫結新的分支工作階段。請從父窗格重新開始分支。" + "value": "누군가" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 无法安全绑定新的分支会话。请从父窗格重新开始分支。" + "value": "有人" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 새 포크 세션을 안전하게 연결하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." + "value": "有人" } - }, - "bs": { + } + } + }, + "terminalSharing.detached.superseded": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux nije mogao sigurno povezati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." + "value": "Another window of this Mac replaced this one at %@." } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke binde den nye forgreningssession sikkert. Start forgreningen igen fra forældreruden." + "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." } }, - "it": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux non ha potuto associare in sicurezza la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." + "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." } }, - "km": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux មិនអាចភ្ជាប់សម័យ fork ថ្មីដោយសុវត្ថិភាពបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" + "value": "Otra ventana de este Mac reemplazó a esta a las %@." } }, - "nb": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke binde den nye forgreningsøkten på en trygg måte. Start forgreningen på nytt fra den overordnede ruten." + "value": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł bezpiecznie powiązać nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" } }, - "pt-BR": { + "ko": { "stringUnit": { "state": "translated", - "value": "O cmux não conseguiu vincular com segurança a nova sessão bifurcada. Inicie o fork novamente no painel principal." + "value": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." } }, - "ru": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux не удалось безопасно привязать новый сеанс форка. Запустите форк снова из родительской панели." + "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" } }, - "th": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux ไม่สามารถผูกเซสชันที่แยกใหม่ได้อย่างปลอดภัย เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" + "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" } - }, - "tr": { + } + } + }, + "terminalSharing.participant.personDevice": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux yeni fork oturumunu güvenli bir şekilde bağlayamadı. Fork'u üst panelden yeniden başlatın." + "value": "%1$@ · %2$@" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux не вдалося безпечно прив’язати новий сеанс форка. Запустіть форк ще раз із батьківської панелі." + "value": "%1$@ · %2$@" } } } }, - "agent.codex.fork.notice.subtitle": { + "terminalSharing.device.browser": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork unavailable" + "value": "Browser" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "フォークを利用できません" + "value": "المتصفح" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fork nicht verfügbar" + "value": "Browser" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork indisponible" + "value": "Navegador" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "التفريع غير متاح" + "value": "Navigateur" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fork no disponible" + "value": "ブラウザ" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "無法使用分支" + "value": "브라우저" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "分支不可用" + "value": "浏览器" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "포크를 사용할 수 없음" + "value": "瀏覽器" + } + } + } + }, + "terminalSharing.device.ipad": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "iPad" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Račvanje nije dostupno" + "value": "iPad" + } + } + } + }, + "terminalSharing.device.iphone": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "iPhone" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fork ikke tilgængelig" + "value": "iPhone" + } + } + } + }, + "terminalSharing.device.mac": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Mac" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fork non disponibile" + "value": "Mac" + } + } + } + }, + "terminalSharing.device.tui": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Terminal client" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "មិនអាចប្រើការបំបែកបាន" + "value": "عميل طرفية" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Fork utilgjengelig" + "value": "Terminal-Client" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork niedostępny" + "value": "Cliente de terminal" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Fork indisponível" + "value": "Client terminal" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Форк недоступен" + "value": "ターミナルクライアント" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ไม่สามารถใช้การแยกสาขาได้" + "value": "터미널 클라이언트" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Fork kullanılamıyor" + "value": "终端客户端" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Форк недоступний" + "value": "終端機用戶端" } } } }, - "agent.codex.fork.notice.title": { + "terminalSharing.device.unknown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent fork" + "value": "Device" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "エージェントフォーク" + "value": "جهاز" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent-Fork" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Fork d’agent" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تفريع الوكيل" + "value": "Gerät" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fork del agente" + "value": "Dispositivo" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "代理程式分支" + "value": "Appareil" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "代理分支" + "value": "デバイス" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트 포크" + "value": "기기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Račvanje agenta" + "value": "设备" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Agentfork" + "value": "裝置" } - }, - "it": { + } + } + }, + "terminalSharing.owner.held": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Fork dell'agente" + "value": "Held size" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ការបំបែកភ្នាក់ងារ" + "value": "حجم محتفظ به" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Agentforgrening" + "value": "Beibehaltene Größe" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork agenta" + "value": "Tamaño conservado" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Fork do agente" + "value": "Taille conservée" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Форк агента" + "value": "保持されたサイズ" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "การแยกสาขาของเอเจนต์" + "value": "유지된 크기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ajan çatalı" + "value": "保留的大小" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Форк агента" + "value": "保留的大小" } } } }, - "socket.authTeam.committedStatusTimedOut": { + "terminalSharing.owner.largest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The team change was applied, but cmux did not report the updated status within 10 seconds. Run `cmux auth status` to confirm." + "value": "Largest window" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" + "value": "أكبر نافذة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" + "value": "Größtes Fenster" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Teamänderung wurde übernommen, aber cmux hat den aktualisierten Status nicht innerhalb von 10 Sekunden gemeldet. Führe `cmux auth status` aus, um es zu prüfen." + "value": "Ventana más grande" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le changement d’équipe a été appliqué, mais cmux n’a pas signalé le statut mis à jour dans les 10 secondes. Exécutez `cmux auth status` pour confirmer." + "value": "Plus grande fenêtre" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." + "value": "最大のウィンドウ" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "El cambio de equipo se aplicó, pero cmux no informó el estado actualizado en 10 segundos. Ejecuta `cmux auth status` para confirmarlo." + "value": "가장 큰 창" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" + "value": "最大的窗口" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." + "value": "最大的視窗" } } } }, - "cli.browser.inputFiles.error.usage": { + "terminalSharing.owner.shared": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files requires --selector and either --file (repeatable) or --clear" + "value": "Shared size" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتطلب set-input-files الخيار --selector مع --file (يمكن تكراره) أو --clear" + "value": "حجم مشترك" } }, "de": { "stringUnit": { "state": "translated", - "value": "set-input-files benötigt --selector und entweder --file (wiederholbar) oder --clear" + "value": "Gemeinsame Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere --selector y --file (repetible) o --clear" + "value": "Tamaño compartido" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite --selector et soit --file (répétable), soit --clear" + "value": "Taille partagée" } }, "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files には --selector と、--file (複数指定可)または --clear が必要です" + "value": "共有サイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files에는 --selector 와 --file (반복 가능) 또는 --clear가 필요합니다" + "value": "공유 크기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要 --selector ,以及 --file (可重复)或 --clear" + "value": "共享大小" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要 --selector ,以及 --file (可重複)或 --clear" + "value": "共用大小" } } } }, - "cli.browser.inputFiles.help": { + "terminalSharing.owner.smallest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Select local files (up to 128 files, 32 MiB total) or clear the selection. Directory uploads are unsupported." + "value": "Fits everyone" } }, "ar": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n اختر ملفات محلية (حتى 128 ملفًا بإجمالي 32 MiB) أو امسح الاختيار. رفع المجلدات غير مدعوم." + "value": "يناسب الجميع" } }, "de": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Lokale Dateien auswählen (bis zu 128 Dateien, insgesamt 32 MiB) oder die Auswahl leeren. Ordner-Uploads werden nicht unterstützt." + "value": "Passt für alle" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Selecciona archivos locales (hasta 128 archivos, 32 MiB en total) o borra la selección. No se admite subir carpetas." + "value": "Se ajusta a todos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Sélectionner des fichiers locaux (jusqu’à 128 fichiers, 32 MiB au total) ou effacer la sélection. L’envoi de dossiers n’est pas pris en charge." + "value": "Convient à tous" } }, "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n ローカルファイルを選択(最大128個、合計32 MiB)するか、選択を解除します。ディレクトリのアップロードには対応していません。" + "value": "全員に合わせる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 로컬 파일을 선택하거나(최대 128개, 총 32 MiB) 선택을 지웁니다. 디렉터리 업로드는 지원되지 않습니다." + "value": "모두에게 맞춤" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 选择本地文件(最多 128 个文件,总计 32 MiB)或清除选择。不支持上传目录。" + "value": "适合所有人" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 選取本機檔案(最多 128 個檔案,總計 32 MiB)或清除選取。不支援上傳目錄。" + "value": "符合所有人" } } } }, - "browser.inputFiles.error.invalidTarget": { + "terminalSharing.participant.thisMac": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The selector must match a file input without directory selection" + "value": "This Mac" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" + "value": "جهاز Mac هذا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" + "value": "Dieser Mac" } }, "es": { "stringUnit": { "state": "translated", - "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" + "value": "Este Mac" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" + "value": "Ce Mac" } }, "ja": { "stringUnit": { "state": "translated", - "value": "セレクターはディレクトリ選択を使わないファイル入力欄に一致する必要があります" + "value": "このMac" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택자는 디렉터리 선택이 없는 파일 입력 요소와 일치해야 합니다" + "value": "이 Mac" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择器必须匹配未启用目录选择的文件输入字段" + "value": "这台 Mac" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選取器必須符合未啟用目錄選取的檔案輸入欄位" + "value": "這台 Mac" } } } }, - "browser.inputFiles.error.multipleRequired": { + "terminalSharing.owner.possessiveDevice": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This file input does not allow multiple files" + "value": "%1$@'s %2$@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يسمح حقل إدخال الملفات هذا باختيار عدة ملفات" + "value": "%1$@ · %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" + "value": "%1$@ · %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Este campo de archivos no permite seleccionar varios archivos" + "value": "%1$@ · %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" + "value": "%1$@ · %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このファイル入力欄では複数のファイルを選択できません" + "value": "%1$@の%2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 파일 입력 요소는 여러 파일을 허용하지 않습니다" + "value": "%1$@의 %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此文件输入字段不允许选择多个文件" + "value": "%1$@的%2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此檔案輸入欄位不允許選取多個檔案" + "value": "%1$@的%2$@" } } } }, - "browser.inputFiles.error.cancelled": { + "terminalSharing.owner.fixedShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "File upload preparation was cancelled" + "value": "Fixed" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم إلغاء تجهيز الملفات للرفع" + "value": "ثابت" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" + "value": "Fest" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se canceló la preparación de los archivos para subir" + "value": "Fijo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La préparation des fichiers à envoyer a été annulée" + "value": "Fixe" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ファイルのアップロード準備がキャンセルされました" + "value": "固定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파일 업로드 준비가 취소되었습니다" + "value": "고정" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已取消准备上传文件" + "value": "固定" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已取消準備上傳檔案" + "value": "固定" } } } }, - "browser.inputFiles.error.invalidParameters": { + "terminalSharing.tab.tooltip": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files requires a selector and a files array of absolute paths" + "value": "Size set by %1$@ · %2$@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" + "value": "الحجم يحدده %1$@ · %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" + "value": "Größe festgelegt von %1$@ · %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" + "value": "Tamaño definido por %1$@ · %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" + "value": "Taille définie par %1$@ · %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" + "value": "%1$@がサイズを設定 · %2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" + "value": "크기 설정: %1$@ · %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" + "value": "尺寸由%1$@设定 · %2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" + "value": "尺寸由%1$@設定 · %2$@" } } } }, - "browser.inputFiles.error.invalidSelection": { + "terminalSharing.panel.sizeLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Select at most 128 files using absolute paths" + "value": "Size" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اختر ما يصل إلى 128 ملفًا باستخدام مسارات مطلقة" + "value": "الحجم" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wählen Sie höchstens 128 Dateien mit absoluten Pfaden aus" + "value": "Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" + "value": "Tamaño" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" + "value": "Taille" } }, "ja": { "stringUnit": { "state": "translated", - "value": "絶対パスで最大128個のファイルを選択してください" + "value": "サイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "절대 경로를 사용하여 최대 128개의 파일을 선택하세요" + "value": "크기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请使用绝对路径选择最多 128 个文件" + "value": "尺寸" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請使用絕對路徑選取最多 128 個檔案" + "value": "尺寸" } } } }, - "browser.inputFiles.error.timeout": { + "terminalSharing.sizeMode.latest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Timed out preparing files for upload" + "value": "Follow Latest" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتهت مهلة تجهيز الملفات للرفع" + "value": "اتباع الأحدث" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" + "value": "Letzter Eingabe folgen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se agotó el tiempo de preparación de los archivos para subir" + "value": "Seguir la última entrada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le délai de préparation des fichiers à envoyer a été dépassé" + "value": "Suivre la dernière saisie" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップロードするファイルの準備がタイムアウトしました" + "value": "最新の入力に合わせる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "업로드할 파일 준비 시간이 초과되었습니다" + "value": "최근 입력 따르기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "准备上传文件超时" + "value": "跟随最新输入" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "準備上傳檔案逾時" + "value": "跟隨最新輸入" } } } }, - "browser.inputFiles.error.tooLarge": { + "terminalSharing.sizeMode.smallest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The combined upload must be no larger than 32 MiB" + "value": "Fit Everyone" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب ألا يتجاوز الحجم الإجمالي للملفات المرفوعة 32 MiB" + "value": "ملاءمة الجميع" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Uploads dürfen insgesamt nicht größer als 32 MiB sein" + "value": "Allen anpassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" + "value": "Ajustar a todos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" + "value": "Adapter à tous" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップロードするファイルの合計サイズは32 MiB以下にしてください" + "value": "全員に合わせる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전체 업로드 크기는 32 MiB를 초과할 수 없습니다" + "value": "모두에게 맞추기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "上传文件的总大小不得超过 32 MiB" + "value": "适合所有人" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "上傳檔案的總大小不得超過 32 MiB" + "value": "適合所有人" } } } }, - "browser.inputFiles.error.unreadableFile": { + "terminalSharing.sizeMode.largest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Every upload path must be a readable regular file" + "value": "Largest Window" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يشير كل مسار للرفع إلى ملف عادي قابل للقراءة" + "value": "أكبر نافذة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Jeder Upload-Pfad muss auf eine lesbare reguläre Datei verweisen" + "value": "Größtes Fenster" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cada ruta de subida debe apuntar a un archivo normal que se pueda leer" + "value": "Ventana más grande" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Chaque chemin à envoyer doit désigner un fichier ordinaire lisible" + "value": "Plus grande fenêtre" } }, "ja": { "stringUnit": { "state": "translated", - "value": "各アップロードパスは読み取り可能な通常ファイルである必要があります" + "value": "最大のウインドウ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 업로드 경로는 읽을 수 있는 일반 파일이어야 합니다" + "value": "가장 큰 윈도우" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "每个上传路径都必须指向可读取的普通文件" + "value": "最大窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "每個上傳路徑都必須指向可讀取的一般檔案" + "value": "最大視窗" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts": { + "terminalSharing.sizeMode.priority": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "iOS Browser Reaches Other Hosts" + "value": "Priority" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "iOS-Browser erreicht andere Hosts" + "value": "الأولوية" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le navigateur iOS accède aux autres hôtes" + "value": "Priorität" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "متصفح iOS يصل إلى مضيفين آخرين" + "value": "Prioridad" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El navegador de iOS accede a otros hosts" + "value": "Priorité" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器可連線至其他主機" + "value": "優先順位" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器可访问其他主机" + "value": "우선순위" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저의 다른 호스트 접근" + "value": "优先级" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOSブラウザから他のホストに接続" + "value": "優先順序" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts.subtitleOn": { + "terminalSharing.sizeMode.fixed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The iOS browser can load LAN, VPN, and internet hosts through this Mac. Link-local and cloud metadata addresses never go through this Mac; the phone loads them itself." + "value": "Fixed" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Der iOS-Browser kann LAN-, VPN- und Internet-Hosts über diesen Mac laden. Link-Local- und Cloud-Metadatenadressen laufen nie über diesen Mac; das iPhone lädt sie selbst." + "value": "ثابت" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le navigateur iOS peut charger des hôtes du réseau local, du VPN et d’Internet via ce Mac. Les adresses link-local et de métadonnées cloud ne passent jamais par ce Mac ; l’iPhone les charge lui-même." + "value": "Fest" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." + "value": "Fijo" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El navegador de iOS puede cargar hosts de la red local, VPN e internet a través de este Mac. Las direcciones link-local y de metadatos en la nube nunca pasan por este Mac; el iPhone las carga por sí mismo." + "value": "Fixe" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器可透過這台 Mac 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" + "value": "固定" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" + "value": "고정" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저가 이 Mac을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." + "value": "固定" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOSブラウザはこのMac経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" + "value": "固定" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { + "terminalSharing.panel.setsSize": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The iOS browser reaches only this Mac's localhost through this Mac. Other sites load over the phone's own network." + "value": "sets size" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." + "value": "يحدد الحجم" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Via ce Mac, le navigateur iOS n’accède qu’au localhost de ce Mac. Les autres sites se chargent via le réseau du téléphone." + "value": "legt Größe fest" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." + "value": "define el tamaño" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "A través de este Mac, el navegador de iOS solo accede a su localhost. Los demás sitios se cargan con la red del propio teléfono." + "value": "définit la taille" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" + "value": "サイズを設定" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" + "value": "크기 설정" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." + "value": "设定尺寸" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" + "value": "設定尺寸" } } } }, - "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { + "terminalSharing.panel.notCounted": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" + "value": "not counted" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobil browser tunnel proxy lokales netzwerk hosts netzwerk sicherheit" + "value": "غير محتسب" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobile navigateur tunnel proxy réseau local hôtes réseau sécurité" + "value": "nicht gezählt" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" + "value": "no cuenta" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security móvil navegador túnel proxy red local hosts red seguridad" + "value": "non compté" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 行動裝置 瀏覽器 通道 代理 區域網路 主機 網路 安全性" + "value": "カウント対象外" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 移动 浏览器 隧道 代理 局域网 主机 网络 安全" + "value": "계산 안 됨" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 모바일 브라우저 터널 프록시 로컬 네트워크 호스트 네트워크 보안" + "value": "不计入" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security モバイル ブラウザ トンネル プロキシ ローカルネットワーク ホスト ネットワーク セキュリティ" + "value": "不計入" } } } }, - "cloudTree.group.cloudMachines.usage": { + "terminalSharing.panel.rowOptions": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Options for %@" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "خيارات %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Optionen für %@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Opciones de %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Options pour %@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "%@のオプション" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "%@ 옵션" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@的选项" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "%@的選項" + } + } + } + }, + "terminalSharing.panel.disconnectOthersButton": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Disconnect Others" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "قطع اتصال الآخرين" } }, - "ko": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Andere trennen" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Desconectar a los demás" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Déconnecter les autres" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "他の接続を切断" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "다른 연결 끊기" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "断开其他连接" } }, - "it": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "中斷其他連線" + } + } + } + }, + "terminalSharing.detached.titleShort": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Detached" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "تم الفصل" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Getrennt" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Desconectado" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Détaché" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "切断されました" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "분리됨" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "已分离" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "已分離" } } } }, - "shortcut.diffViewerNextHunk.label": { + "terminalSharing.detached.byMessageShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Next Hunk" + "value": "%1$@ disconnected this Mac at %2$@." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 次のハンク" + "value": "قطع %1$@ اتصال هذا الـMac في %2$@." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "差异查看器:下一个块" + "value": "%1$@ hat diesen Mac um %2$@ getrennt." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Nächster Hunk" + "value": "%1$@ desconectó este Mac a las %2$@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc suivant" + "value": "%1$@ a déconnecté ce Mac à %2$@." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: المقطع التالي" + "value": "%1$@が%2$@にこのMacを切断しました。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Siguiente bloque" + "value": "%1$@이(가) %2$@에 이 Mac의 연결을 끊었습니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "差異檢視器:下一個區塊" + "value": "%1$@于%2$@断开了这台Mac的连接。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "비교 뷰어: 다음 헝크" + "value": "%1$@於%2$@中斷了這台Mac的連線。" } } } }, - "shortcut.diffViewerPreviousHunk.label": { + "terminalSharing.chip.hiddenColumns": { "extractionState": "manual", "localizations": { "en": { - "stringUnit": { - "state": "translated", - "value": "Diff Viewer: Previous Hunk" + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld col hidden" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld cols hidden" + } + } + } + } + }, + "ar": { + "variations": { + "plural": { + "zero": { + "stringUnit": { + "state": "translated", + "value": "لا أعمدة مخفية (%ld)" + } + }, + "one": { + "stringUnit": { + "state": "translated", + "value": "عمود واحد مخفي (%ld)" + } + }, + "two": { + "stringUnit": { + "state": "translated", + "value": "عمودان مخفيان (%ld)" + } + }, + "few": { + "stringUnit": { + "state": "translated", + "value": "%ld أعمدة مخفية" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld عمودًا مخفيًا" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld عمود مخفي" + } + } + } + } + }, + "de": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld Spalte ausgeblendet" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld Spalten ausgeblendet" + } + } + } + } + }, + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld columna oculta" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld de columnas ocultas" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld columnas ocultas" + } + } + } + } + }, + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld colonne masquée" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld de colonnes masquées" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld colonnes masquées" + } + } + } } }, "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld列が非表示" + } + } + } + } + }, + "ko": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld열 숨겨짐" + } + } + } + } + }, + "zh-Hans": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "隐藏 %ld 列" + } + } + } + } + }, + "zh-Hant": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "隱藏 %ld 欄" + } + } + } + } + } + } + }, + "terminalSharing.panel.cancel": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 前のハンク" + "value": "Cancel" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "差异查看器:上一个块" + "value": "إلغاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Vorheriger Hunk" + "value": "Abbrechen" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cancelar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc précédent" + "value": "Annuler" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: المقطع السابق" + "value": "キャンセル" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Bloque anterior" + "value": "취소" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "差異檢視器:上一個區塊" + "value": "取消" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "비교 뷰어: 이전 헝크" + "value": "取消" } } } }, - "terminal.clipboardReadConfirmation.deny": { + "terminalSharing.panel.disconnectOthers.confirm": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Deny" + "value": "Disconnect all other clients?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رفض" + "value": "هل تريد قطع اتصال جميع العملاء الآخرين؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ablehnen" + "value": "Alle anderen Clients trennen?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Denegar" + "value": "¿Desconectar todos los demás clientes?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Refuser" + "value": "Déconnecter tous les autres clients ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "拒否" + "value": "他のすべてのクライアントを切断しますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "거부" + "value": "다른 모든 클라이언트의 연결을 끊을까요?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "拒绝" + "value": "要断开其他所有客户端吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "拒絕" + "value": "要中斷其他所有用戶端的連線嗎?" + } + } + } + }, + "terminalSharing.panel.disconnectOthers.confirmButton": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Disconnect" } }, - "bs": { + "ar": { "stringUnit": { "state": "translated", - "value": "Odbij" + "value": "قطع الاتصال" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Afvis" + "value": "Trennen" } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Nega" + "value": "Desconectar" } }, - "km": { + "fr": { "stringUnit": { "state": "translated", - "value": "បដិសេធ" + "value": "Déconnecter" } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "Avslå" + "value": "切断" } }, - "pl": { + "ko": { "stringUnit": { "state": "translated", - "value": "Odmów" + "value": "연결 끊기" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Negar" + "value": "断开连接" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Запретить" + "value": "中斷連線" + } + } + } + }, + "terminalSharing.panel.fixedColumns": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Columns" } }, - "th": { + "ar": { "stringUnit": { "state": "translated", - "value": "ปฏิเสธ" + "value": "الأعمدة" } }, - "tr": { + "de": { "stringUnit": { "state": "translated", - "value": "Reddet" + "value": "Spalten" } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Заборонити" + "value": "Columnas" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Colonnes" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "列" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "열" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "列数" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "欄數" } } } }, - "terminal.clipboardReadConfirmation.message": { + "terminalSharing.panel.fixedRows": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A program in this terminal wants to read your clipboard. Allow it only if you trust the program." + "value": "Rows" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يريد برنامج في هذه الطرفية قراءة الحافظة. اسمح بذلك فقط إذا كنت تثق بالبرنامج." + "value": "الصفوف" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Programm in diesem Terminal möchte deine Zwischenablage lesen. Erlaube es nur, wenn du dem Programm vertraust." + "value": "Zeilen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Un programa de esta terminal quiere leer tu portapapeles. Permítelo solo si confías en el programa." + "value": "Filas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un programme de ce terminal veut lire votre presse-papiers. Ne l’autorisez que si vous faites confiance à ce programme." + "value": "Lignes" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このターミナルのプログラムがクリップボードを読み取ろうとしています。信頼できるプログラムの場合にのみ許可してください。" + "value": "行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 터미널의 프로그램이 클립보드를 읽으려고 합니다. 프로그램을 신뢰할 수 있을 때만 허용하세요." + "value": "행" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端中的程序想要读取你的剪贴板。只有在你信任该程序时才允许。" + "value": "行数" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機中的程式想要讀取你的剪貼簿。只有在你信任該程式時才允許。" + "value": "列數" + } + } + } + }, + "terminalSharing.panel.unavailable": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This terminal is not shared." } }, - "bs": { + "ar": { "stringUnit": { "state": "translated", - "value": "Program u ovom terminalu želi čitati vaš međuspremnik. Dozvolite samo ako vjerujete programu." + "value": "هذه الطرفية غير مشتركة." } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Et program i denne terminal vil læse din udklipsholder. Tillad det kun, hvis du har tillid til programmet." + "value": "Dieses Terminal wird nicht geteilt." } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Un programma in questo terminale vuole leggere gli appunti. Consentilo solo se ti fidi del programma." + "value": "Esta terminal no está compartida." } }, - "km": { + "fr": { "stringUnit": { "state": "translated", - "value": "កម្មវិធីក្នុងស្ថានីយនេះចង់អានក្ដារតម្បៀតខ្ទាស់របស់អ្នក។ អនុញ្ញាតតែបើអ្នកទុកចិត្តកម្មវិធីនេះ។" + "value": "Ce terminal n’est pas partagé." } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "Et program i denne terminalen vil lese utklippstavlen din. Tillat det bare hvis du stoler på programmet." + "value": "このターミナルは共有されていません。" } }, - "pl": { + "ko": { "stringUnit": { "state": "translated", - "value": "Program w tym terminalu chce odczytać schowek. Zezwól tylko, jeśli ufasz temu programowi." + "value": "이 터미널은 공유되지 않았습니다." } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Um programa neste terminal quer ler sua área de transferência. Permita somente se você confiar no programa." + "value": "此终端未共享。" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Программа в этом терминале хочет прочитать буфер обмена. Разрешайте только программам, которым доверяете." + "value": "此終端機未共用。" + } + } + } + }, + "terminalSharing.panel.counts": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Counts toward size" } }, - "th": { + "ar": { "stringUnit": { "state": "translated", - "value": "โปรแกรมในเทอร์มินัลนี้ต้องการอ่านคลิปบอร์ดของคุณ อนุญาตเฉพาะเมื่อคุณเชื่อถือโปรแกรมนี้" + "value": "يُحتسب في الحجم" } }, - "tr": { + "de": { "stringUnit": { "state": "translated", - "value": "Bu terminaldeki bir program panonuzu okumak istiyor. Yalnızca programa güveniyorsanız izin verin." + "value": "Zählt für die Größe" } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Програма в цьому терміналі хоче прочитати ваш буфер обміну. Дозволяйте, лише якщо довіряєте програмі." + "value": "Cuenta para el tamaño" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Compte pour la taille" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サイズに反映" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "크기에 반영" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "计入大小" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "計入大小" } } } }, - "terminal.clipboardReadConfirmation.title": { + "terminalSharing.panel.disconnect": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Allow Clipboard Access?" + "value": "Disconnect" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السماح بالوصول إلى الحافظة؟" + "value": "قطع الاتصال" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zugriff auf die Zwischenablage erlauben?" + "value": "Trennen" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Permitir el acceso al portapapeles?" + "value": "Desconectar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Autoriser l’accès au presse-papiers ?" + "value": "Déconnecter" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クリップボードへのアクセスを許可しますか?" + "value": "切断" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클립보드 접근을 허용하시겠습니까?" + "value": "연결 끊기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "允许访问剪贴板?" + "value": "断开连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "允許存取剪貼簿?" + "value": "中斷連線" + } + } + } + }, + "cli.sshPtyAttach.launchAcknowledgementTimeoutRetry": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux did not acknowledge the SSH launch; retrying %s in %ss." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux hat den SSH-Start nicht bestätigt; neuer Versuch %s in %ss." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux n’a pas confirmé le démarrage SSH ; nouvelle tentative %s dans %ss." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "[cmux] لم يؤكد cmux بدء SSH؛ ستتم إعادة المحاولة %s خلال %s ث." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux no confirmó el inicio de SSH; reintentando %s en %ss." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux 未確認 SSH 啟動;將在第 %s 次於 %s 秒後重試。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux 未确认 SSH 启动;将在第 %s 次于 %s 秒后重试。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux가 SSH 시작을 확인하지 못했습니다. %s번째로 %s초 후 다시 시도합니다." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "[cmux] cmux が SSH の起動を確認できないため、%s 回目を %s 秒後に再試行します。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Dozvoliti pristup međuspremniku?" + "value": "[cmux] cmux nije potvrdio SSH pokretanje; ponovni pokušaj %s za %ss." } }, "da": { "stringUnit": { "state": "translated", - "value": "Tillad adgang til udklipsholderen?" + "value": "[cmux] cmux bekræftede ikke SSH-starten; prøver igen %s om %ss." } }, "it": { "stringUnit": { "state": "translated", - "value": "Consentire l'accesso agli appunti?" + "value": "[cmux] cmux non ha confermato l’avvio SSH; nuovo tentativo %s tra %ss." } }, "km": { "stringUnit": { "state": "translated", - "value": "អនុញ្ញាតឱ្យចូលប្រើក្ដារតម្បៀតខ្ទាស់?" + "value": "[cmux] cmux មិនបានបញ្ជាក់ការចាប់ផ្តើម SSH ទេ; កំពុងព្យាយាមម្តងទៀត %s ក្នុងរយៈពេល %ss។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Tillat tilgang til utklippstavlen?" + "value": "[cmux] cmux bekreftet ikke SSH-oppstarten; prøver på nytt %s om %ss." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zezwolić na dostęp do schowka?" + "value": "[cmux] cmux nie potwierdził uruchomienia SSH; ponawianie próby %s za %ss." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Permitir acesso à área de transferência?" + "value": "[cmux] o cmux não confirmou o início do SSH; tentando novamente %s em %ss." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разрешить доступ к буферу обмена?" + "value": "[cmux] cmux не подтвердил запуск SSH; повторная попытка %s через %ss." } }, "th": { "stringUnit": { "state": "translated", - "value": "อนุญาตให้เข้าถึงคลิปบอร์ดหรือไม่?" + "value": "[cmux] cmux ไม่ยืนยันการเริ่มต้น SSH; กำลังลองใหม่ครั้งที่ %s ในอีก %s วินาที" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Panoya erişime izin verilsin mi?" + "value": "[cmux] cmux SSH başlatmasını onaylamadı; %s saniye içinde %s. deneme yapılıyor." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дозволити доступ до буфера обміну?" + "value": "[cmux] cmux не підтвердив запуск SSH; повторна спроба %s через %s с." } } } }, - "notification.remoteRelay.hostFallback": { + "machines.requiresPro.upgrade.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Remote host" + "value": "Upgrade" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مضيف بعيد" + "value": "ترقية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Remote-Host" + "value": "Upgraden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Actualizar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Hôte distant" + "value": "Mettre à niveau" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リモートホスト" + "value": "アップグレード" } }, "ko": { "stringUnit": { "state": "translated", - "value": "원격 호스트" + "value": "업그레이드" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "远程主机" + "value": "升级" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "遠端主機" + "value": "升級" + } + } + } + }, + "machines.sessionRejected.signInAgain.short": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sign In" } }, - "bs": { + "ar": { "stringUnit": { "state": "translated", - "value": "Udaljeni host" + "value": "تسجيل الدخول" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Fjernvært" + "value": "Anmelden" } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Iniciar sesión" } }, - "km": { + "fr": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីនពីចម្ងាយ" + "value": "Se reconnecter" } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ekstern vert" + "value": "再サインイン" } }, - "pl": { + "ko": { "stringUnit": { "state": "translated", - "value": "Zdalny host" + "value": "다시 로그인" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "重新登录" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Удалённый хост" + "value": "重新登入" + } + } + } + }, + "machines.requiresPro.stale": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud machines need cmux Pro — showing last known" } }, - "th": { + "ar": { "stringUnit": { "state": "translated", - "value": "โฮสต์ระยะไกล" + "value": "تتطلب الأجهزة السحابية إصدار cmux Pro — يتم عرض آخر حالة معروفة" } }, - "tr": { + "de": { "stringUnit": { "state": "translated", - "value": "Uzak ana bilgisayar" + "value": "Cloud-Maschinen erfordern cmux Pro – zeige letzten bekannten Stand" } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "Віддалений хост" + "value": "Las máquinas en la nube requieren cmux Pro — se muestra el último estado conocido" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les machines Cloud nécessitent cmux Pro — affichage des dernières informations connues" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud マシンには cmux Pro が必要です — 最後の状態を表示中" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "클라우드 머신을 사용하려면 cmux Pro가 필요함 — 마지막으로 확인된 상태 표시 중" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "云端机器需要 cmux Pro —— 显示的是最后已知状态" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "雲端機器需要 cmux Pro — 顯示上次已知的狀態" } } } }, - "notification.remoteRelay.title": { + "machines.sessionRejected.stale": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Sign-in needs a refresh — showing last known" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "يحتاج تسجيل الدخول إلى تحديث — يتم عرض آخر حالة معروفة" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Anmeldung muss aktualisiert werden – zeige letzten bekannten Stand" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Es necesario actualizar el inicio de sesión — se muestra el último estado conocido" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "La connexion doit être actualisée — affichage des dernières informations connues" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "再サインインが必要です — 最後の状態を表示中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "로그인 갱신 필요 — 마지막으로 확인된 상태 표시 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "登录状态需要刷新 —— 显示的是最后已知状态" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "登入狀態需要重新整理 — 顯示上次已知的狀態" + } + } + } + }, + "terminal.clipboardReadConfirmation.deny": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Deny" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "رفض" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Ablehnen" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Denegar" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Refuser" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "拒否" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "거부" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "拒绝" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "拒絕" } }, "bs": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Odbij" } }, "da": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Afvis" } }, "it": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Nega" } }, "km": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "បដិសេធ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Avslå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Odmów" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Negar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Запретить" } }, "th": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "ปฏิเสธ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Reddet" } }, "uk": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Заборонити" } } } }, - "cloud.ports.vpnOff.explanation": { + "terminal.clipboardReadConfirmation.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports open in cmux without setup. To use private addresses in other apps, set up Cloud VPN." + "value": "A program in this terminal wants to read your clipboard. Allow it only if you trust the program." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ports lassen sich in cmux ohne Einrichtung öffnen. Richte Cloud-VPN ein, um private Adressen in anderen Apps zu verwenden." + "value": "يريد برنامج في هذه الطرفية قراءة الحافظة. اسمح بذلك فقط إذا كنت تثق بالبرنامج." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Les ports s’ouvrent dans cmux sans configuration. Pour utiliser les adresses privées dans d’autres apps, configurez le VPN Cloud." + "value": "Ein Programm in diesem Terminal möchte deine Zwischenablage lesen. Erlaube es nur, wenn du dem Programm vertraust." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تُفتح المنافذ في cmux دون إعداد. لاستخدام العناوين الخاصة في التطبيقات الأخرى، أعدّ Cloud VPN." + "value": "Un programa de esta terminal quiere leer tu portapapeles. Permítelo solo si confías en el programa." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Los puertos se abren en cmux sin configuración. Para usar direcciones privadas en otras apps, configura Cloud VPN." + "value": "Un programme de ce terminal veut lire votre presse-papiers. Ne l’autorisez que si vous faites confiance à ce programme." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無需設定即可在 cmux 中開啟連接埠。如要在其他 App 使用私有位址,請設定 Cloud VPN。" + "value": "このターミナルのプログラムがクリップボードを読み取ろうとしています。信頼できるプログラムの場合にのみ許可してください。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "无需设置即可在 cmux 中打开端口。要在其他应用中使用私有地址,请设置云 VPN。" + "value": "이 터미널의 프로그램이 클립보드를 읽으려고 합니다. 프로그램을 신뢰할 수 있을 때만 허용하세요." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "별도 설정 없이 cmux에서 포트를 열 수 있습니다. 다른 앱에서 비공개 주소를 사용하려면 Cloud VPN을 설정하세요." + "value": "此终端中的程序想要读取你的剪贴板。只有在你信任该程序时才允许。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定なしで cmux 内のポートを開けます。他のアプリでプライベートアドレスを使うには、Cloud VPN を設定してください。" + "value": "此終端機中的程式想要讀取你的剪貼簿。只有在你信任該程式時才允許。" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Portovi se otvaraju u cmux-u bez podešavanja. Za korištenje privatnih adresa u drugim aplikacijama podesite Cloud VPN." + "state": "translated", + "value": "Program u ovom terminalu želi čitati vaš međuspremnik. Dozvolite samo ako vjerujete programu." } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Porte åbnes i cmux uden opsætning. Opsæt Cloud VPN for at bruge private adresser i andre apps." + "state": "translated", + "value": "Et program i denne terminal vil læse din udklipsholder. Tillad det kun, hvis du har tillid til programmet." } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Le porte si aprono in cmux senza configurazione. Per usare gli indirizzi privati in altre app, configura Cloud VPN." + "state": "translated", + "value": "Un programma in questo terminale vuole leggere gli appunti. Consentilo solo se ti fidi del programma." } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "ច្រកអាចបើកក្នុង cmux ដោយមិនចាំបាច់រៀបចំ។ ដើម្បីប្រើអាសយដ្ឋានឯកជនក្នុងកម្មវិធីផ្សេងទៀត សូមរៀបចំ Cloud VPN។" + "state": "translated", + "value": "កម្មវិធីក្នុងស្ថានីយនេះចង់អានក្ដារតម្បៀតខ្ទាស់របស់អ្នក។ អនុញ្ញាតតែបើអ្នកទុកចិត្តកម្មវិធីនេះ។" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Porter åpnes i cmux uten oppsett. Sett opp Cloud VPN for å bruke private adresser i andre apper." + "state": "translated", + "value": "Et program i denne terminalen vil lese utklippstavlen din. Tillat det bare hvis du stoler på programmet." } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Porty otwierają się w cmux bez konfiguracji. Aby używać prywatnych adresów w innych aplikacjach, skonfiguruj Cloud VPN." + "state": "translated", + "value": "Program w tym terminalu chce odczytać schowek. Zezwól tylko, jeśli ufasz temu programowi." } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "As portas abrem no cmux sem configuração. Para usar endereços privados em outros apps, configure o Cloud VPN." + "state": "translated", + "value": "Um programa neste terminal quer ler sua área de transferência. Permita somente se você confiar no programa." } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Порты открываются в cmux без настройки. Чтобы использовать приватные адреса в других приложениях, настройте Cloud VPN." + "state": "translated", + "value": "Программа в этом терминале хочет прочитать буфер обмена. Разрешайте только программам, которым доверяете." } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "เปิดพอร์ตใน cmux ได้โดยไม่ต้องตั้งค่า หากต้องการใช้ที่อยู่ส่วนตัวในแอปอื่น ให้ตั้งค่า Cloud VPN" + "state": "translated", + "value": "โปรแกรมในเทอร์มินัลนี้ต้องการอ่านคลิปบอร์ดของคุณ อนุญาตเฉพาะเมื่อคุณเชื่อถือโปรแกรมนี้" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Bağlantı noktaları cmux içinde kurulum gerektirmeden açılır. Diğer uygulamalarda özel adresleri kullanmak için Cloud VPN’i kurun." + "state": "translated", + "value": "Bu terminaldeki bir program panonuzu okumak istiyor. Yalnızca programa güveniyorsanız izin verin." } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Порти відкриваються в cmux без налаштування. Щоб використовувати приватні адреси в інших застосунках, налаштуйте Cloud VPN." + "state": "translated", + "value": "Програма в цьому терміналі хоче прочитати ваш буфер обміну. Дозволяйте, лише якщо довіряєте програмі." } } } }, - "cloud.ports.vpnOff.title": { + "terminal.clipboardReadConfirmation.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional: Cloud VPN" + "value": "Allow Clipboard Access?" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Optional: Cloud-VPN" + "value": "السماح بالوصول إلى الحافظة؟" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Facultatif : VPN Cloud" + "value": "Zugriff auf die Zwischenablage erlauben?" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "اختياري: Cloud VPN" + "value": "¿Permitir el acceso al portapapeles?" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Opcional: Cloud VPN" + "value": "Autoriser l’accès au presse-papiers ?" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "選用:Cloud VPN" + "value": "クリップボードへのアクセスを許可しますか?" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "可选:云 VPN" + "value": "클립보드 접근을 허용하시겠습니까?" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "선택 사항: Cloud VPN" + "value": "允许访问剪贴板?" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "任意:Cloud VPN" + "value": "允許存取剪貼簿?" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Opcionalno: Cloud VPN" + "state": "translated", + "value": "Dozvoliti pristup međuspremniku?" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Valgfrit: Cloud VPN" + "state": "translated", + "value": "Tillad adgang til udklipsholderen?" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Facoltativo: Cloud VPN" + "state": "translated", + "value": "Consentire l'accesso agli appunti?" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "ជាជម្រើស៖ Cloud VPN" + "state": "translated", + "value": "អនុញ្ញាតឱ្យចូលប្រើក្ដារតម្បៀតខ្ទាស់?" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Valgfritt: Cloud VPN" + "state": "translated", + "value": "Tillat tilgang til utklippstavlen?" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Opcjonalnie: Cloud VPN" + "state": "translated", + "value": "Zezwolić na dostęp do schowka?" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Opcional: Cloud VPN" + "state": "translated", + "value": "Permitir acesso à área de transferência?" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Необязательно: Cloud VPN" + "state": "translated", + "value": "Разрешить доступ к буферу обмена?" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "ตัวเลือกเพิ่มเติม: Cloud VPN" + "state": "translated", + "value": "อนุญาตให้เข้าถึงคลิปบอร์ดหรือไม่?" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "İsteğe bağlı: Cloud VPN" + "state": "translated", + "value": "Panoya erişime izin verilsin mi?" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Необов’язково: Cloud VPN" + "state": "translated", + "value": "Дозволити доступ до буфера обміну?" } } } }, - "cloud.vpn.setup.address.body": { + "notification.remoteRelay.hostFallback": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Each machine has its own private IP. Two machines may both expose port 3000, for example 10.40.0.10:3000 and 10.40.0.11:3000. Right-click a Cloud port and choose Copy Private Address URL after connecting. These addresses are private, not public share links." + "value": "Remote host" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Jede Maschine hat eine eigene private IP. Zwei Maschinen können beide Port 3000 verwenden, etwa 10.40.0.10:3000 und 10.40.0.11:3000. Klicken Sie nach dem Verbinden mit der rechten Maustaste auf einen Cloud-Port und wählen Sie URL der privaten Adresse kopieren. Diese Adressen sind privat und keine öffentlichen Freigabelinks." + "value": "مضيف بعيد" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Chaque machine a sa propre IP privée. Deux machines peuvent utiliser le port 3000, par exemple 10.40.0.10:3000 et 10.40.0.11:3000. Après connexion, faites un clic droit sur un port Cloud et choisissez Copier l’URL de l’adresse privée. Ces adresses sont privées, ce ne sont pas des liens publics de partage." + "value": "Remote-Host" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cada máquina tiene su propia IP privada. Dos máquinas pueden usar el puerto 3000, como 10.40.0.10:3000 y 10.40.0.11:3000. Después de conectar, haz clic derecho en un puerto Cloud y elige Copiar URL de dirección privada. Estas direcciones son privadas, no enlaces públicos para compartir." + "value": "Host remoto" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "各マシンには個別のプライベートIPがあります。2台のマシンがどちらもポート3000を使えます(例:10.40.0.10:3000と10.40.0.11:3000)。接続後にCloudポートを右クリックし、「プライベートアドレスURLをコピー」を選びます。これらはプライベートアドレスで、公開共有リンクではありません。" + "value": "Hôte distant" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "每台机器都有自己的私有 IP。两台机器可以同时使用端口 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。连接后右键点击 Cloud 端口,选择“复制私有地址 URL”。这些地址是私有地址,不是公开分享链接。" + "value": "リモートホスト" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "每台機器都有自己的私有 IP。兩台機器可以同時使用連接埠 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。連線後對 Cloud 連接埠按右鍵,選擇「複製私有位址 URL」。這些位址是私有位址,不是公開分享連結。" + "value": "원격 호스트" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "각 머신에는 고유한 비공개 IP가 있습니다. 두 머신 모두 포트 3000을 사용할 수 있습니다(예: 10.40.0.10:3000 및 10.40.0.11:3000). 연결 후 Cloud 포트를 오른쪽 클릭하고 비공개 주소 URL 복사를 선택하세요. 이 주소는 비공개이며 공개 공유 링크가 아닙니다." + "value": "远程主机" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "لكل جهاز عنوان IP خاص به. يمكن لجهازين استخدام المنفذ 3000، مثل 10.40.0.10:3000 و10.40.0.11:3000. بعد الاتصال، انقر بزر الماوس الأيمن على منفذ Cloud واختر نسخ رابط العنوان الخاص. هذه عناوين خاصة وليست روابط مشاركة عامة." + "value": "遠端主機" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Svaka mašina ima svoju privatnu IP adresu. Dvije mašine mogu koristiti port 3000, na primjer 10.40.0.10:3000 i 10.40.0.11:3000. Nakon povezivanja kliknite desnim dugmetom na Cloud port i izaberite Kopiraj URL privatne adrese. Ovo su privatne adrese, a ne javne veze za dijeljenje." + "value": "Udaljeni host" } }, "da": { "stringUnit": { "state": "translated", - "value": "Hver maskine har sin egen private IP. To maskiner kan begge bruge port 3000, f.eks. 10.40.0.10:3000 og 10.40.0.11:3000. Højreklik på en Cloud-port efter tilslutning, og vælg Kopiér URL til privat adresse. Adresserne er private, ikke offentlige delelinks." + "value": "Fjernvært" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ogni macchina ha il proprio IP privato. Due macchine possono usare entrambe la porta 3000, ad esempio 10.40.0.10:3000 e 10.40.0.11:3000. Dopo la connessione fai clic destro su una porta Cloud e scegli Copia URL indirizzo privato. Sono indirizzi privati, non link pubblici." + "value": "Host remoto" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីននីមួយៗមាន IP ឯកជនផ្ទាល់ខ្លួន។ ម៉ាស៊ីនពីរអាចប្រើច្រក 3000 ដូចគ្នា ឧទាហរណ៍ 10.40.0.10:3000 និង 10.40.0.11:3000។ បន្ទាប់ពីភ្ជាប់ ចុចខាងស្តាំលើច្រក Cloud ហើយជ្រើស ចម្លង URL អាសយដ្ឋានឯកជន។ ទាំងនេះជាអាសយដ្ឋានឯកជន មិនមែនតំណចែករំលែកសាធារណៈទេ។" + "value": "ម៉ាស៊ីនពីចម្ងាយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hver maskin har sin egen private IP. To maskiner kan bruke port 3000, for eksempel 10.40.0.10:3000 og 10.40.0.11:3000. Høyreklikk en Cloud-port etter tilkobling og velg Kopier URL for privat adresse. Adressene er private, ikke offentlige delingslenker." + "value": "Ekstern vert" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Każda maszyna ma własny prywatny adres IP. Dwie maszyny mogą używać portu 3000, na przykład 10.40.0.10:3000 i 10.40.0.11:3000. Po połączeniu kliknij prawym przyciskiem port Cloud i wybierz Kopiuj URL prywatnego adresu. To prywatne adresy, nie publiczne linki udostępniania." + "value": "Zdalny host" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cada máquina tem seu próprio IP privado. Duas máquinas podem usar a porta 3000, por exemplo 10.40.0.10:3000 e 10.40.0.11:3000. Depois de conectar, clique com o botão direito em uma porta Cloud e escolha Copiar URL do endereço privado. Esses endereços são privados, não links públicos de compartilhamento." + "value": "Host remoto" } }, "ru": { "stringUnit": { "state": "translated", - "value": "У каждой машины свой частный IP. Две машины могут использовать порт 3000, например 10.40.0.10:3000 и 10.40.0.11:3000. После подключения щёлкните правой кнопкой мыши порт Cloud и выберите Скопировать URL частного адреса. Это частные адреса, а не публичные ссылки." + "value": "Удалённый хост" } }, "th": { "stringUnit": { "state": "translated", - "value": "แต่ละเครื่องมี IP ส่วนตัวของตนเอง สองเครื่องสามารถใช้พอร์ต 3000 ได้ เช่น 10.40.0.10:3000 และ 10.40.0.11:3000 หลังเชื่อมต่อ คลิกขวาที่พอร์ต Cloud แล้วเลือกคัดลอก URL ที่อยู่ส่วนตัว ที่อยู่เหล่านี้เป็นส่วนตัว ไม่ใช่ลิงก์สาธารณะ" + "value": "โฮสต์ระยะไกล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Her makinenin kendi özel IP’si vardır. İki makine 3000 bağlantı noktasını kullanabilir; örneğin 10.40.0.10:3000 ve 10.40.0.11:3000. Bağlandıktan sonra bir Cloud portuna sağ tıklayın ve Özel Adres URL’sini Kopyala’yı seçin. Bunlar özel adreslerdir, herkese açık paylaşım bağlantıları değildir." + "value": "Uzak ana bilgisayar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Кожна машина має власну приватну IP-адресу. Дві машини можуть використовувати порт 3000, наприклад 10.40.0.10:3000 і 10.40.0.11:3000. Після підключення клацніть правою кнопкою миші порт Cloud і виберіть Копіювати URL приватної адреси. Це приватні адреси, а не публічні посилання для спільного доступу." + "value": "Віддалений хост" } } } }, - "cloud.vpn.setup.cancel": { + "notification.remoteRelay.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "%1$@: %2$@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "%1$@: %2$@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "%1$@: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "%1$@: %2$@" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "%1$@: %2$@" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "%1$@: %2$@" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "%1$@: %2$@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "%1$@: %2$@" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "%1$@: %2$@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkaži" + "value": "%1$@: %2$@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Annuller" + "value": "%1$@: %2$@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Annulla" + "value": "%1$@: %2$@" } }, "km": { "stringUnit": { "state": "translated", - "value": "បោះបង់" + "value": "%1$@: %2$@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avbryt" + "value": "%1$@: %2$@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Anuluj" + "value": "%1$@: %2$@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "%1$@: %2$@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отменить" + "value": "%1$@: %2$@" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยกเลิก" + "value": "%1$@: %2$@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İptal" + "value": "%1$@: %2$@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скасувати" + "value": "%1$@: %2$@" } } } }, - "cloud.vpn.setup.connect": { + "socket.mainActorHop.timeout.mayHaveRun": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connect Cloud VPN" + "value": "cmux did not respond within 10 seconds after the command started, so its result is unknown. Check the effect before retrying." } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN verbinden" + "value": "コマンドの開始後 10 秒以内に cmux が応答しなかったため、結果は不明です。再試行する前に効果を確認してください。" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Connecter le VPN Cloud" + "value": "命令开始后 10 秒内 cmux 没有响应,因此结果未知。请先确认效果再重试。" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Conectar VPN de Cloud" + "value": "cmux hat innerhalb von 10 Sekunden nach dem Start des Befehls nicht geantwortet, das Ergebnis ist daher unbekannt. Prüfe die Auswirkung, bevor du es erneut versuchst." } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPNに接続" + "value": "cmux n’a pas répondu dans les 10 secondes suivant le démarrage de la commande, son résultat est donc inconnu. Vérifiez l’effet avant de réessayer." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "连接 Cloud VPN" + "value": "لم يستجب cmux خلال 10 ثوانٍ بعد بدء الأمر، لذا فإن نتيجته غير معروفة. تحقق من الأثر قبل إعادة المحاولة." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "cmux no respondió en los 10 segundos posteriores al inicio del comando, por lo que su resultado es desconocido. Comprueba el efecto antes de reintentar." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連接 Cloud VPN" + "value": "命令開始後 10 秒內 cmux 沒有回應,因此結果未知。請先確認效果再重試。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 연결" + "value": "명령이 시작된 후 10초 안에 cmux가 응답하지 않아 결과를 알 수 없습니다. 다시 시도하기 전에 효과를 확인하세요." + } + } + } + }, + "socket.mainActorHop.timeout.notRun": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux did not respond within 10 seconds, so the command was not run. Retry in a moment." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "توصيل VPN الخاص بـ Cloud" + "value": "cmux が 10 秒以内に応答しなかったため、コマンドは実行されませんでした。しばらくしてから再試行してください。" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Poveži Cloud VPN" + "value": "cmux 在 10 秒内没有响应,因此未运行该命令。请稍后重试。" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Forbind Cloud VPN" + "value": "cmux hat innerhalb von 10 Sekunden nicht geantwortet, der Befehl wurde daher nicht ausgeführt. Versuche es gleich noch einmal." } }, - "it": { + "fr": { "stringUnit": { "state": "translated", - "value": "Connetti VPN Cloud" + "value": "cmux n’a pas répondu dans les 10 secondes, la commande n’a donc pas été exécutée. Réessayez dans un instant." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ភ្ជាប់ Cloud VPN" + "value": "لم يستجب cmux خلال 10 ثوانٍ، لذا لم يتم تنفيذ الأمر. أعد المحاولة بعد لحظات." } }, - "nb": { + "es": { "stringUnit": { "state": "translated", - "value": "Koble til Cloud VPN" + "value": "cmux no respondió en 10 segundos, por lo que el comando no se ejecutó. Reintenta en un momento." } }, - "pl": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Połącz z Cloud VPN" + "value": "cmux 在 10 秒內沒有回應,因此未執行該命令。請稍後重試。" } }, - "pt-BR": { + "ko": { "stringUnit": { "state": "translated", - "value": "Conectar Cloud VPN" + "value": "cmux가 10초 안에 응답하지 않아 명령이 실행되지 않았습니다. 잠시 후 다시 시도하세요." + } + } + } + }, + "socket.overloaded.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux is handling too many control-socket requests right now, so this one was not run. Retry in a moment." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Подключить Cloud VPN" + "value": "cmux は現在、制御ソケットの要求を処理しきれないため、この要求は実行されませんでした。しばらくしてから再試行してください。" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "เชื่อมต่อ Cloud VPN" + "value": "cmux 当前正在处理过多的控制套接字请求,因此未运行此请求。请稍后重试。" } }, - "tr": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud VPN’e bağlan" + "value": "cmux verarbeitet gerade zu viele Control-Socket-Anfragen, diese wurde daher nicht ausgeführt. Versuche es gleich noch einmal." } }, - "uk": { + "fr": { "stringUnit": { "state": "translated", - "value": "Підключити Cloud VPN" + "value": "cmux traite actuellement trop de requêtes du socket de contrôle, celle-ci n’a donc pas été exécutée. Réessayez dans un instant." } - } - } - }, - "cloud.vpn.setup.connected": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ar": { "stringUnit": { "state": "translated", - "value": "Connected" + "value": "يعالج cmux حاليًا عددًا كبيرًا جدًا من طلبات مقبس التحكم، لذا لم يتم تنفيذ هذا الطلب. أعد المحاولة بعد لحظات." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Verbunden" + "value": "cmux está gestionando demasiadas solicitudes del socket de control ahora mismo, por lo que esta no se ejecutó. Reintenta en un momento." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Connecté" + "value": "cmux 目前正在處理過多的控制 socket 請求,因此未執行此請求。請稍後重試。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Conectada" + "value": "cmux가 지금 너무 많은 제어 소켓 요청을 처리하고 있어 이 요청은 실행되지 않았습니다. 잠시 후 다시 시도하세요." + } + } + } + }, + "socket.request.cancelled": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Request was cancelled" } }, "ja": { "stringUnit": { "state": "translated", - "value": "接続済み" + "value": "リクエストはキャンセルされました" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已连接" + "value": "请求已取消" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "已連線" + "value": "Die Anfrage wurde abgebrochen" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "연결됨" + "value": "La requête a été annulée" } }, "ar": { "stringUnit": { "state": "translated", - "value": "متصل" + "value": "تم إلغاء الطلب" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Povezano" + "value": "Se canceló la solicitud" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Forbundet" + "value": "請求已取消" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Connessa" + "value": "요청이 취소되었습니다" + } + } + } + }, + "socket.request.failedBeforeResult": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Request failed before returning a result" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "បានភ្ជាប់" + "value": "結果を返す前にリクエストが失敗しました" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Tilkoblet" + "value": "请求在返回结果之前失败" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Połączono" + "value": "Die Anfrage ist fehlgeschlagen, bevor ein Ergebnis zurückgegeben wurde" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Conectada" + "value": "La requête a échoué avant de renvoyer un résultat" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Подключено" + "value": "فشل الطلب قبل إرجاع نتيجة" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "เชื่อมต่อแล้ว" + "value": "La solicitud falló antes de devolver un resultado" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Bağlandı" + "value": "請求在傳回結果之前失敗" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Підключено" + "value": "결과를 반환하기 전에 요청이 실패했습니다" } } } }, - "cloud.vpn.setup.disconnect": { + "agent.codex.fork.notice.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "cmux could not identify the new fork session. Start the fork again from the parent pane." } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "cmux は新しいフォーク セッションを特定できませんでした。親ペインからもう一度フォークしてください。" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "cmux konnte die neue Fork-Sitzung nicht erkennen. Starten Sie den Fork erneut im übergeordneten Pane." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "cmux n’a pas pu identifier la nouvelle session forkée. Relancez le fork depuis le volet parent." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "تعذر على cmux تحديد جلسة التفريع الجديدة. ابدأ التفريع مرة أخرى من الجزء الأصلي." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "cmux no pudo identificar la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "cmux 無法識別新的分支工作階段。請從父窗格重新開始分支。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "연결 해제" + "value": "cmux 无法识别新的分支会话。请从父窗格重新开始分支。" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "cmux가 새 포크 세션을 식별하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prekini vezu" + "value": "cmux nije mogao prepoznati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." } }, "da": { "stringUnit": { "state": "translated", - "value": "Afbryd" + "value": "cmux kunne ikke identificere den nye forgreningssession. Start forgreningen igen fra forældreruden." } }, "it": { "stringUnit": { "state": "translated", - "value": "Disconnetti" + "value": "cmux non ha potuto identificare la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្តាច់" + "value": "cmux មិនអាចកំណត់អត្តសញ្ញាណសម័យ fork ថ្មីបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Koble fra" + "value": "cmux kunne ikke identifisere den nye forgreningsøkten. Start forgreningen på nytt fra den overordnede ruten." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Rozłącz" + "value": "cmux nie mógł zidentyfikować nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "O cmux não conseguiu identificar a nova sessão bifurcada. Inicie o fork novamente no painel principal." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отключить" + "value": "cmux не удалось определить новый сеанс форка. Запустите форк снова из родительской панели." } }, "th": { "stringUnit": { "state": "translated", - "value": "ตัดการเชื่อมต่อ" + "value": "cmux ไม่สามารถระบุเซสชันที่แยกใหม่ได้ เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bağlantıyı kes" + "value": "cmux yeni fork oturumunu belirleyemedi. Fork'u üst panelden yeniden başlatın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Від’єднати" + "value": "cmux не вдалося визначити новий сеанс форка. Запустіть форк ще раз із батьківської панелі." } } } }, - "cloud.vpn.setup.entry.subtitle": { + "agent.codex.fork.notice.parentClearFailed.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional private IP access for other apps" + "value": "cmux could not safely detach the parent session, so the fork was not started. Retry the fork from the parent pane." } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Optionaler Zugriff auf private IPs für andere Apps" + "value": "cmux は新しいフォーク セッションを安全にバインドできませんでした。親ペインからもう一度フォークしてください。" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Accès facultatif aux IP privées pour les autres apps" + "value": "cmux konnte die neue Fork-Sitzung nicht sicher binden. Starten Sie den Fork erneut im übergeordneten Pane." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Acceso opcional a IP privadas para otras apps" + "value": "cmux n’a pas pu lier la nouvelle session forkée en toute sécurité. Relancez le fork depuis le volet parent." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ほかのアプリからプライベートIPへアクセスする任意の設定" + "value": "تعذر على cmux ربط جلسة التفريع الجديدة بأمان. أعد بدء التفريع من الجزء الأصلي." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "为其他应用提供可选的私有 IP 访问" + "value": "cmux no pudo vincular de forma segura la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "為其他 App 提供選用的私有 IP 存取" + "value": "cmux 無法安全繫結新的分支工作階段。請從父窗格重新開始分支。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "다른 앱의 비공개 IP 접근을 위한 선택 설정" + "value": "cmux 无法安全绑定新的分支会话。请从父窗格重新开始分支。" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "وصول اختياري إلى عناوين IP الخاصة للتطبيقات الأخرى" + "value": "cmux가 새 포크 세션을 안전하게 연결하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Opcionalni pristup privatnim IP adresama za druge aplikacije" + "value": "cmux nije mogao sigurno povezati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." } }, "da": { "stringUnit": { "state": "translated", - "value": "Valgfri privat IP-adgang for andre apps" + "value": "cmux kunne ikke binde den nye forgreningssession sikkert. Start forgreningen igen fra forældreruden." } }, "it": { "stringUnit": { "state": "translated", - "value": "Accesso facoltativo agli IP privati per altre app" + "value": "cmux non ha potuto associare in sicurezza la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." } }, "km": { "stringUnit": { "state": "translated", - "value": "ចូលប្រើ IP ឯកជនសម្រាប់កម្មវិធីផ្សេងៗជាជម្រើស" + "value": "cmux មិនអាចភ្ជាប់សម័យ fork ថ្មីដោយសុវត្ថិភាពបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Valgfri privat IP-tilgang for andre apper" + "value": "cmux kunne ikke binde den nye forgreningsøkten på en trygg måte. Start forgreningen på nytt fra den overordnede ruten." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opcjonalny dostęp innych aplikacji do prywatnych adresów IP" + "value": "cmux nie mógł bezpiecznie powiązać nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Acesso opcional a IPs privados para outros apps" + "value": "O cmux não conseguiu vincular com segurança a nova sessão bifurcada. Inicie o fork novamente no painel principal." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Необязательный доступ других приложений к частным IP" + "value": "cmux не удалось безопасно привязать новый сеанс форка. Запустите форк снова из родительской панели." } }, "th": { "stringUnit": { "state": "translated", - "value": "การเข้าถึง IP ส่วนตัวสำหรับแอปอื่นแบบไม่บังคับ" + "value": "cmux ไม่สามารถผูกเซสชันที่แยกใหม่ได้อย่างปลอดภัย เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Diğer uygulamalar için isteğe bağlı özel IP erişimi" + "value": "cmux yeni fork oturumunu güvenli bir şekilde bağlayamadı. Fork'u üst panelden yeniden başlatın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Необов’язковий доступ інших програм до приватних IP" + "value": "cmux не вдалося безпечно прив’язати новий сеанс форка. Запустіть форк ще раз із батьківської панелі." } } } }, - "cloud.vpn.setup.failed": { + "agent.codex.fork.notice.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Needs attention" + "value": "Fork unavailable" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Aktion erforderlich" + "value": "フォークを利用できません" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Action requise" + "value": "Fork nicht verfügbar" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Requiere atención" + "value": "Fork indisponible" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "対応が必要" + "value": "التفريع غير متاح" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "需要处理" + "value": "Fork no disponible" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "需要處理" + "value": "無法使用分支" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "조치 필요" + "value": "分支不可用" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "يتطلب إجراءً" + "value": "포크를 사용할 수 없음" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Potrebna pažnja" + "value": "Račvanje nije dostupno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kræver opmærksomhed" + "value": "Fork ikke tilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Richiede attenzione" + "value": "Fork non disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "ត្រូវការការយកចិត្តទុកដាក់" + "value": "មិនអាចប្រើការបំបែកបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Krever handling" + "value": "Fork utilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wymaga uwagi" + "value": "Fork niedostępny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Requer atenção" + "value": "Fork indisponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Требуется действие" + "value": "Форк недоступен" } }, "th": { "stringUnit": { "state": "translated", - "value": "ต้องดำเนินการ" + "value": "ไม่สามารถใช้การแยกสาขาได้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İlgilenilmeli" + "value": "Fork kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Потрібна увага" + "value": "Форк недоступний" } } } }, - "cloud.vpn.setup.off": { + "agent.codex.fork.notice.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Off" + "value": "Agent fork" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Aus" + "value": "エージェントフォーク" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "Agent-Fork" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Desactivada" + "value": "Fork d’agent" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "تفريع الوكيل" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "已关闭" + "value": "Fork del agente" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已關閉" + "value": "代理程式分支" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "꺼짐" + "value": "代理分支" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "متوقف" + "value": "에이전트 포크" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Isključeno" + "value": "Račvanje agenta" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fra" + "value": "Agentfork" } }, "it": { "stringUnit": { "state": "translated", - "value": "Disattivata" + "value": "Fork dell'agente" } }, "km": { "stringUnit": { "state": "translated", - "value": "បិទ" + "value": "ការបំបែកភ្នាក់ងារ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Av" + "value": "Agentforgrening" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyłączona" + "value": "Fork agenta" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desativada" + "value": "Fork do agente" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выключено" + "value": "Форк агента" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "การแยกสาขาของเอเจนต์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kapalı" + "value": "Ajan çatalı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вимкнено" + "value": "Форк агента" } } } }, - "cloud.vpn.setup.openUnavailable": { + "socket.authTeam.committedStatusTimedOut": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN setup is unavailable" + "value": "The team change was applied, but cmux did not report the updated status within 10 seconds. Run `cmux auth status` to confirm." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN-Einrichtung ist nicht verfügbar" + "value": "Die Teamänderung wurde übernommen, aber cmux hat den aktualisierten Status nicht innerhalb von 10 Sekunden gemeldet. Führe `cmux auth status` aus, um es zu prüfen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La configuration du VPN Cloud est indisponible" + "value": "Le changement d’équipe a été appliqué, mais cmux n’a pas signalé le statut mis à jour dans les 10 secondes. Exécutez `cmux auth status` pour confirmer." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." } }, "es": { "stringUnit": { "state": "translated", - "value": "La configuración de VPN de Cloud no está disponible" + "value": "El cambio de equipo se aplicó, pero cmux no informó el estado actualizado en 10 segundos. Ejecuta `cmux auth status` para confirmarlo." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN設定は利用できません" + "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 设置不可用" + "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." + } + } + } + }, + "settings.mobile.browserTunnel.allowOtherHosts": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "iOS Browser Reaches Other Hosts" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "無法使用 Cloud VPN 設定" + "value": "iOS-Browser erreicht andere Hosts" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Le navigateur iOS accède aux autres hôtes" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "متصفح iOS يصل إلى مضيفين آخرين" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "El navegador de iOS accede a otros hosts" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 설정을 사용할 수 없습니다" + "value": "iOS 瀏覽器可連線至其他主機" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "إعداد VPN الخاص بـ Cloud غير متاح" + "value": "iOS 浏览器可访问其他主机" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Podešavanje Cloud VPN-a nije dostupno" + "value": "iOS 브라우저의 다른 호스트 접근" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-opsætning er ikke tilgængelig" + "value": "iOSブラウザから他のホストに接続" } - }, - "it": { + } + } + }, + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOn": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "La configurazione VPN Cloud non è disponibile" + "value": "The iOS browser can load LAN, VPN, and internet hosts through this Mac. Link-local and cloud metadata addresses never go through this Mac; the phone loads them itself." } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "ការរៀបចំ Cloud VPN មិនអាចប្រើបាន" + "value": "Der iOS-Browser kann LAN-, VPN- und Internet-Hosts über diesen Mac laden. Link-Local- und Cloud-Metadatenadressen laufen nie über diesen Mac; das iPhone lädt sie selbst." } }, - "nb": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-oppsett er ikke tilgjengelig" + "value": "Le navigateur iOS peut charger des hôtes du réseau local, du VPN et d’Internet via ce Mac. Les adresses link-local et de métadonnées cloud ne passent jamais par ce Mac ; l’iPhone les charge lui-même." } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Konfiguracja Cloud VPN jest niedostępna" + "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." } }, - "pt-BR": { + "es": { "stringUnit": { "state": "translated", - "value": "A configuração do Cloud VPN não está disponível" + "value": "El navegador de iOS puede cargar hosts de la red local, VPN e internet a través de este Mac. Las direcciones link-local y de metadatos en la nube nunca pasan por este Mac; el iPhone las carga por sí mismo." } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Настройка Cloud VPN недоступна" + "value": "iOS 瀏覽器可透過這台 Mac 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "การตั้งค่า Cloud VPN ไม่พร้อมใช้งาน" + "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN kurulumu kullanılamıyor" + "value": "iOS 브라우저가 이 Mac을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Налаштування Cloud VPN недоступне" + "value": "iOSブラウザはこのMac経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" } } } }, - "cloud.vpn.setup.permission.body": { + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The VPN software is included in cmux. You do not need another app. macOS may require your password or Touch ID during approval." + "value": "The iOS browser reaches only this Mac's localhost through this Mac. Other sites load over the phone's own network." } }, "de": { "stringUnit": { "state": "translated", - "value": "Die VPN-Software ist in cmux enthalten. Sie brauchen keine weitere App. macOS kann bei der Genehmigung Ihr Passwort oder Touch ID verlangen." + "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le logiciel VPN est inclus dans cmux. Aucune autre app n’est nécessaire. macOS peut demander votre mot de passe ou Touch ID lors de l’autorisation." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El software VPN está incluido en cmux. No necesitas otra app. macOS puede solicitar tu contraseña o Touch ID durante la autorización." + "value": "Via ce Mac, le navigateur iOS n’accède qu’au localhost de ce Mac. Les autres sites se chargent via le réseau du téléphone." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "VPNソフトウェアはcmuxに含まれています。別のアプリは不要です。承認時にmacOSがパスワードまたはTouch IDを求めることがあります。" + "value": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux 已包含 VPN 软件,无需其他应用。批准时,macOS 可能要求您输入密码或使用触控 ID。" + "value": "A través de este Mac, el navegador de iOS solo accede a su localhost. Los demás sitios se cargan con la red del propio teléfono." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 已包含 VPN 軟體,不需要其他 App。核准時,macOS 可能要求您輸入密碼或使用 Touch ID。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VPN 소프트웨어는 cmux에 포함되어 있습니다. 다른 앱은 필요하지 않습니다. 승인 시 macOS에서 암호 또는 Touch ID를 요청할 수 있습니다." + "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "برنامج VPN مضمن في cmux. لا تحتاج إلى تطبيق آخر. قد يطلب macOS كلمة المرور أو Touch ID أثناء الموافقة." + "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "VPN softver je uključen u cmux. Nije potrebna druga aplikacija. macOS može zatražiti lozinku ili Touch ID tokom odobravanja." + "value": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "VPN-softwaren er inkluderet i cmux. Du behøver ingen anden app. macOS kan bede om din adgangskode eller Touch ID under godkendelsen." + "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" } - }, - "it": { + } + } + }, + "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Il software VPN è incluso in cmux. Non serve un’altra app. macOS potrebbe chiedere la password o Touch ID durante l’autorizzazione." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "កម្មវិធី VPN មាននៅក្នុង cmux។ អ្នកមិនត្រូវការកម្មវិធីផ្សេងទៀតទេ។ macOS អាចស្នើពាក្យសម្ងាត់ ឬ Touch ID ក្នុងពេលអនុម័ត។" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobil browser tunnel proxy lokales netzwerk hosts netzwerk sicherheit" } }, - "nb": { + "fr": { "stringUnit": { "state": "translated", - "value": "VPN-programvaren er inkludert i cmux. Du trenger ingen annen app. macOS kan be om passord eller Touch ID under godkjenningen." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobile navigateur tunnel proxy réseau local hôtes réseau sécurité" } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Oprogramowanie VPN jest zawarte w cmux. Nie potrzebujesz innej aplikacji. macOS może poprosić o hasło lub Touch ID podczas zatwierdzania." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" } }, - "pt-BR": { + "es": { "stringUnit": { "state": "translated", - "value": "O software VPN vem incluído no cmux. Você não precisa de outro app. O macOS pode pedir sua senha ou Touch ID durante a aprovação." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security móvil navegador túnel proxy red local hosts red seguridad" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "VPN-программа уже входит в cmux. Другие приложения не нужны. Во время подтверждения macOS может запросить пароль или Touch ID." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 行動裝置 瀏覽器 通道 代理 區域網路 主機 網路 安全性" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ซอฟต์แวร์ VPN รวมอยู่ใน cmux แล้ว ไม่ต้องใช้แอปอื่น macOS อาจขอรหัสผ่านหรือ Touch ID ระหว่างการอนุมัติ" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 移动 浏览器 隧道 代理 局域网 主机 网络 安全" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "VPN yazılımı cmux içinde bulunur. Başka bir uygulama gerekmez. macOS onay sırasında parolanızı veya Touch ID’yi isteyebilir." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 모바일 브라우저 터널 프록시 로컬 네트워크 호스트 네트워크 보안" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Програмне забезпечення VPN входить до cmux. Інша програма не потрібна. Під час схвалення macOS може попросити пароль або Touch ID." + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security モバイル ブラウザ トンネル プロキシ ローカルネットワーク ホスト ネットワーク セキュリティ" } } } }, - "cloud.vpn.setup.status.title": { + "cli.browser.inputFiles.error.usage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private network status" + "value": "set-input-files requires --selector and either --file (repeatable) or --clear" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Status des privaten Netzwerks" + "value": "يتطلب set-input-files الخيار --selector مع --file (يمكن تكراره) أو --clear" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "État du réseau privé" + "value": "set-input-files benötigt --selector und entweder --file (wiederholbar) oder --clear" } }, "es": { "stringUnit": { "state": "translated", - "value": "Estado de la red privada" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プライベートネットワークの状態" + "value": "set-input-files requiere --selector y --file (repetible) o --clear" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "私有网络状态" + "value": "set-input-files nécessite --selector et soit --file (répétable), soit --clear" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "私有網路狀態" + "value": "set-input-files には --selector と、--file (複数指定可)または --clear が必要です" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 네트워크 상태" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "حالة الشبكة الخاصة" + "value": "set-input-files에는 --selector 와 --file (반복 가능) 또는 --clear가 필요합니다" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Status privatne mreže" + "value": "set-input-files 需要 --selector ,以及 --file (可重复)或 --clear" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Status for privat netværk" + "value": "set-input-files 需要 --selector ,以及 --file (可重複)或 --clear" } - }, - "it": { + } + } + }, + "cli.browser.inputFiles.help": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Stato della rete privata" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Select local files (up to 128 files, 32 MiB total) or clear the selection. Directory uploads are unsupported." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ស្ថានភាពបណ្តាញឯកជន" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n اختر ملفات محلية (حتى 128 ملفًا بإجمالي 32 MiB) أو امسح الاختيار. رفع المجلدات غير مدعوم." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Status for privat nettverk" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Lokale Dateien auswählen (bis zu 128 Dateien, insgesamt 32 MiB) oder die Auswahl leeren. Ordner-Uploads werden nicht unterstützt." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Stan sieci prywatnej" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Selecciona archivos locales (hasta 128 archivos, 32 MiB en total) o borra la selección. No se admite subir carpetas." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Status da rede privada" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n Sélectionner des fichiers locaux (jusqu’à 128 fichiers, 32 MiB au total) ou effacer la sélection. L’envoi de dossiers n’est pas pris en charge." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Состояние частной сети" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n ローカルファイルを選択(最大128個、合計32 MiB)するか、選択を解除します。ディレクトリのアップロードには対応していません。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "สถานะเครือข่ายส่วนตัว" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 로컬 파일을 선택하거나(최대 128개, 총 32 MiB) 선택을 지웁니다. 디렉터리 업로드는 지원되지 않습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Özel ağ durumu" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 选择本地文件(最多 128 个文件,总计 32 MiB)或清除选择。不支持上传目录。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Стан приватної мережі" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 選取本機檔案(最多 128 個檔案,總計 32 MiB)或清除選取。不支援上傳目錄。" } } } }, - "cloud.vpn.setup.title": { + "browser.inputFiles.error.invalidTarget": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "The selector must match a file input without directory selection" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN" + "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" } }, "es": { "stringUnit": { "state": "translated", - "value": "VPN de Cloud" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "クラウドVPN" + "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "云端 VPN" + "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "雲端 VPN" + "value": "セレクターはディレクトリ選択を使わないファイル入力欄に一致する必要があります" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 VPN" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شبكة Cloud الخاصة" + "value": "선택자는 디렉터리 선택이 없는 파일 입력 요소와 일치해야 합니다" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "选择器必须匹配未启用目录选择的文件输入字段" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "選取器必須符合未啟用目錄選取的檔案輸入欄位" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.multipleRequired": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "value": "This file input does not allow multiple files" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "لا يسمح حقل إدخال الملفات هذا باختيار عدة ملفات" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Este campo de archivos no permite seleccionar varios archivos" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "このファイル入力欄では複数のファイルを選択できません" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "이 파일 입력 요소는 여러 파일을 허용하지 않습니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "此文件输入字段不允许选择多个文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "此檔案輸入欄位不允許選取多個檔案" } } } }, - "cloud.vpn.setup.unavailable": { + "browser.inputFiles.error.cancelled": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This copy of cmux does not include a signed VPN extension. Use a cmux release with Cloud VPN support. Cloud terminals, Ports, and Desktop remain available without the VPN." + "value": "File upload preparation was cancelled" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Diese cmux-Version enthält keine signierte VPN-Erweiterung. Verwenden Sie eine cmux-Version mit Cloud-VPN-Unterstützung. Cloud-Terminals, Ports und Desktop bleiben ohne VPN verfügbar." + "value": "تم إلغاء تجهيز الملفات للرفع" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Cette copie de cmux ne contient pas d’extension VPN signée. Utilisez une version de cmux qui prend en charge le VPN Cloud. Les terminaux Cloud, Ports et Bureau restent disponibles sans VPN." + "value": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta copia de cmux no incluye una extensión VPN firmada. Usa una versión de cmux compatible con VPN de Cloud. Los terminales Cloud, Puertos y Escritorio siguen disponibles sin VPN." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このcmuxには署名済みのVPN機能拡張が含まれていません。Cloud VPN対応のcmuxリリースを使用してください。Cloudのターミナル、ポート、デスクトップはVPNなしでも使えます。" + "value": "Se canceló la preparación de los archivos para subir" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "此 cmux 副本未包含已签名的 VPN 扩展。请使用支持 Cloud VPN 的 cmux 版本。Cloud 终端、端口和桌面无需 VPN 仍可使用。" + "value": "La préparation des fichiers à envoyer a été annulée" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此 cmux 副本未包含已簽署的 VPN 延伸功能。請使用支援 Cloud VPN 的 cmux 版本。Cloud 終端機、連接埠和桌面不需要 VPN 仍可使用。" + "value": "ファイルのアップロード準備がキャンセルされました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 cmux에는 서명된 VPN 확장이 포함되어 있지 않습니다. Cloud VPN을 지원하는 cmux 릴리스를 사용하세요. Cloud 터미널, 포트 및 데스크탑은 VPN 없이도 사용할 수 있습니다." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لا تتضمن هذه النسخة من cmux امتداد VPN موقعًا. استخدم إصدار cmux يدعم VPN الخاص بـ Cloud. تظل طرفيات Cloud والمنافذ وسطح المكتب متاحة بدون VPN." + "value": "파일 업로드 준비가 취소되었습니다" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ova kopija cmux-a nema potpisani VPN dodatak. Koristite cmux izdanje sa Cloud VPN podrškom. Cloud terminali, portovi i radna površina ostaju dostupni bez VPN-a." + "value": "已取消准备上传文件" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Denne cmux-kopi indeholder ikke en signeret VPN-udvidelse. Brug en cmux-udgave med Cloud VPN-understøttelse. Cloud-terminaler, porte og skrivebord er stadig tilgængelige uden VPN." + "value": "已取消準備上傳檔案" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.invalidParameters": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Questa copia di cmux non include un’estensione VPN firmata. Usa una versione di cmux con supporto Cloud VPN. Terminali Cloud, porte e desktop restano disponibili senza VPN." + "value": "set-input-files requires a selector and a files array of absolute paths" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux ច្បាប់នេះមិនមានផ្នែកបន្ថែម VPN ដែលបានចុះហត្ថលេខាទេ។ ប្រើកំណែ cmux ដែលគាំទ្រ Cloud VPN។ Terminal, Ports និង Desktop របស់ Cloud នៅតែប្រើបានដោយគ្មាន VPN។" + "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Denne cmux-kopien har ingen signert VPN-utvidelse. Bruk en cmux-versjon med Cloud VPN-støtte. Cloud-terminaler, porter og skrivebord er tilgjengelige uten VPN." + "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Ta kopia cmux nie zawiera podpisanego rozszerzenia VPN. Użyj wydania cmux z obsługą Cloud VPN. Terminale Cloud, porty i pulpit pozostają dostępne bez VPN." + "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esta cópia do cmux não inclui uma extensão VPN assinada. Use uma versão do cmux com suporte a Cloud VPN. Terminais Cloud, portas e área de trabalho continuam disponíveis sem VPN." + "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "В этой копии cmux нет подписанного VPN-расширения. Используйте выпуск cmux с поддержкой Cloud VPN. Cloud-терминалы, порты и рабочий стол доступны без VPN." + "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux รุ่นนี้ไม่มีส่วนขยาย VPN ที่ลงนามแล้ว ใช้รุ่น cmux ที่รองรับ Cloud VPN เทอร์มินัล Cloud พอร์ต และเดสก์ท็อปยังใช้ได้โดยไม่ต้องมี VPN" + "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bu cmux kopyasında imzalı VPN uzantısı bulunmuyor. Cloud VPN destekli bir cmux sürümü kullanın. Cloud terminalleri, portlar ve masaüstü VPN olmadan da kullanılabilir." + "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ця копія cmux не містить підписаного VPN-розширення. Використовуйте випуск cmux із підтримкою Cloud VPN. Cloud-термінали, порти й робочий стіл доступні без VPN." + "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" } } } }, - "cloud.vpn.setup.waiting": { + "browser.inputFiles.error.invalidSelection": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "Select at most 128 files using absolute paths" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "اختر ما يصل إلى 128 ملفًا باستخدام مسارات مطلقة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "En attente" + "value": "Wählen Sie höchstens 128 Dateien mit absoluten Pfaden aus" } }, "es": { "stringUnit": { "state": "translated", - "value": "En espera" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "待機中" + "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "絶対パスで最大128個のファイルを選択してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "대기 중" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قيد الانتظار" + "value": "절대 경로를 사용하여 최대 128개의 파일을 선택하세요" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Čekanje" + "value": "请使用绝对路径选择最多 128 个文件" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "請使用絕對路徑選取最多 128 個檔案" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.timeout": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "In attesa" + "value": "Timed out preparing files for upload" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "កំពុងរង់ចាំ" + "value": "انتهت مهلة تجهيز الملفات للرفع" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Oczekiwanie" + "value": "Se agotó el tiempo de preparación de los archivos para subir" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Aguardando" + "value": "Le délai de préparation des fichiers à envoyer a été dépassé" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ожидание" + "value": "アップロードするファイルの準備がタイムアウトしました" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "กำลังรอ" + "value": "업로드할 파일 준비 시간이 초과되었습니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bekliyor" + "value": "准备上传文件超时" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Очікування" + "value": "準備上傳檔案逾時" } } } }, - "cloudTree.ports.action.wake": { + "browser.inputFiles.error.tooLarge": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wake Machine" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Maschine aktivieren" + "value": "The combined upload must be no larger than 32 MiB" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Réveiller la machine" + "value": "يجب ألا يتجاوز الحجم الإجمالي للملفات المرفوعة 32 MiB" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إيقاظ الجهاز" + "value": "Die Uploads dürfen insgesamt nicht größer als 32 MiB sein" } }, "es": { "stringUnit": { "state": "translated", - "value": "Activar máquina" + "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "喚醒機器" + "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "唤醒机器" + "value": "アップロードするファイルの合計サイズは32 MiB以下にしてください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "머신 깨우기" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マシンを起動" + "value": "전체 업로드 크기는 32 MiB를 초과할 수 없습니다" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Probudi mašinu" + "value": "上传文件的总大小不得超过 32 MiB" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Væk maskine" + "value": "上傳檔案的總大小不得超過 32 MiB" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.unreadableFile": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Riattiva macchina" + "value": "Every upload path must be a readable regular file" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ដាស់ម៉ាស៊ីន" + "value": "يجب أن يشير كل مسار للرفع إلى ملف عادي قابل للقراءة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Vekk maskin" + "value": "Jeder Upload-Pfad muss auf eine lesbare reguläre Datei verweisen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Wybudź maszynę" + "value": "Cada ruta de subida debe apuntar a un archivo normal que se pueda leer" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Despertar máquina" + "value": "Chaque chemin à envoyer doit désigner un fichier ordinaire lisible" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Разбудить машину" + "value": "各アップロードパスは読み取り可能な通常ファイルである必要があります" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ปลุกเครื่อง" + "value": "모든 업로드 경로는 읽을 수 있는 일반 파일이어야 합니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Makineyi uyandır" + "value": "每个上传路径都必须指向可读取的普通文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Розбудити машину" + "value": "每個上傳路徑都必須指向可讀取的一般檔案" } } } }, - "cloudTree.ports.asleep.detail": { + "cloudTree.group.cloudMachines.usage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wake the machine to check its services. cmux’s in-app forwarding does not need Cloud VPN." + "value": "%1$d/%2$d" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aktivieren Sie die Maschine, um ihre Dienste zu prüfen. Die Weiterleitung in cmux benötigt kein Cloud-VPN." + "value": "%1$d/%2$d" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Réveillez la machine pour vérifier ses services. Le transfert intégré à cmux ne nécessite pas de VPN Cloud." + "value": "%1$d/%2$d" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أيقظ الجهاز لفحص خدماته. لا تحتاج إعادة التوجيه داخل cmux إلى Cloud VPN." + "value": "%1$d/%2$d" } }, "es": { "stringUnit": { "state": "translated", - "value": "Activa la máquina para comprobar sus servicios. El reenvío integrado de cmux no necesita Cloud VPN." + "value": "%1$d/%2$d" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "喚醒機器以檢查其服務。cmux 的應用程式內轉送不需要 Cloud VPN。" + "value": "%1$d/%2$d" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "唤醒机器以检查其服务。cmux 的应用内转发无需 Cloud VPN。" + "value": "%1$d/%2$d" } }, "ko": { "stringUnit": { "state": "translated", - "value": "머신을 깨워 서비스를 확인하세요. cmux 앱 내 전달에는 Cloud VPN이 필요하지 않습니다." + "value": "%1$d/%2$d" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マシンを起動してサービスを確認してください。cmux のアプリ内転送に Cloud VPN は不要です。" + "value": "%1$d/%2$d" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Probudite mašinu da provjerite njene servise. Prosljeđivanje unutar cmux-a ne treba Cloud VPN." + "value": "%1$d/%2$d" } }, "da": { "stringUnit": { "state": "translated", - "value": "Væk maskinen for at kontrollere dens tjenester. Videresendelse i cmux kræver ikke Cloud VPN." + "value": "%1$d/%2$d" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riattiva la macchina per controllarne i servizi. L’inoltro all’interno di cmux non richiede la VPN Cloud." + "value": "%1$d/%2$d" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដាស់ម៉ាស៊ីនដើម្បីពិនិត្យសេវាកម្មរបស់វា។ ការបញ្ជូនបន្តនៅក្នុង cmux មិនត្រូវការ Cloud VPN ទេ។" + "value": "%1$d/%2$d" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vekk maskinen for å sjekke tjenestene. Videresending i cmux trenger ikke Cloud VPN." + "value": "%1$d/%2$d" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybudź maszynę, aby sprawdzić jej usługi. Przekierowywanie w cmux nie wymaga Cloud VPN." + "value": "%1$d/%2$d" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desperte a máquina para verificar os serviços. O encaminhamento dentro do cmux não precisa do Cloud VPN." + "value": "%1$d/%2$d" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разбудите машину, чтобы проверить её службы. Перенаправлению внутри cmux Cloud VPN не нужен." + "value": "%1$d/%2$d" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปลุกเครื่องเพื่อตรวจสอบบริการ การส่งต่อภายใน cmux ไม่ต้องใช้ Cloud VPN" + "value": "%1$d/%2$d" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hizmetlerini denetlemek için makineyi uyandırın. cmux içi yönlendirme Cloud VPN gerektirmez." + "value": "%1$d/%2$d" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Розбудіть машину, щоб перевірити її служби. Перенаправлення всередині cmux не потребує Cloud VPN." + "value": "%1$d/%2$d" } } } }, - "cloudTree.ports.available.title": { + "cloud.ports.vpnOff.explanation": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Listening services" + "value": "Ports open in cmux without setup. To use private addresses in other apps, set up Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Lauschende Dienste" + "value": "Ports lassen sich in cmux ohne Einrichtung öffnen. Richte Cloud-VPN ein, um private Adressen in anderen Apps zu verwenden." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Services en écoute" + "value": "Les ports s’ouvrent dans cmux sans configuration. Pour utiliser les adresses privées dans d’autres apps, configurez le VPN Cloud." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الخدمات المستمعة" + "value": "تُفتح المنافذ في cmux دون إعداد. لاستخدام العناوين الخاصة في التطبيقات الأخرى، أعدّ Cloud VPN." } }, "es": { "stringUnit": { "state": "translated", - "value": "Servicios en escucha" + "value": "Los puertos se abren en cmux sin configuración. Para usar direcciones privadas en otras apps, configura Cloud VPN." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "監聽中的服務" + "value": "無需設定即可在 cmux 中開啟連接埠。如要在其他 App 使用私有位址,請設定 Cloud VPN。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "监听中的服务" + "value": "无需设置即可在 cmux 中打开端口。要在其他应用中使用私有地址,请设置云 VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "수신 대기 서비스" + "value": "별도 설정 없이 cmux에서 포트를 열 수 있습니다. 다른 앱에서 비공개 주소를 사용하려면 Cloud VPN을 설정하세요." } }, "ja": { "stringUnit": { "state": "translated", - "value": "待ち受け中のサービス" + "value": "設定なしで cmux 内のポートを開けます。他のアプリでプライベートアドレスを使うには、Cloud VPN を設定してください。" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Servisi koji slušaju" + "state": "needs_review", + "value": "Portovi se otvaraju u cmux-u bez podešavanja. Za korištenje privatnih adresa u drugim aplikacijama podesite Cloud VPN." } }, "da": { "stringUnit": { - "state": "translated", - "value": "Lyttende tjenester" + "state": "needs_review", + "value": "Porte åbnes i cmux uden opsætning. Opsæt Cloud VPN for at bruge private adresser i andre apps." } }, "it": { "stringUnit": { - "state": "translated", - "value": "Servizi in ascolto" + "state": "needs_review", + "value": "Le porte si aprono in cmux senza configurazione. Per usare gli indirizzi privati in altre app, configura Cloud VPN." } }, "km": { "stringUnit": { - "state": "translated", - "value": "សេវាកម្មដែលកំពុងស្តាប់" + "state": "needs_review", + "value": "ច្រកអាចបើកក្នុង cmux ដោយមិនចាំបាច់រៀបចំ។ ដើម្បីប្រើអាសយដ្ឋានឯកជនក្នុងកម្មវិធីផ្សេងទៀត សូមរៀបចំ Cloud VPN។" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Lyttende tjenester" + "state": "needs_review", + "value": "Porter åpnes i cmux uten oppsett. Sett opp Cloud VPN for å bruke private adresser i andre apper." } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Nasłuchujące usługi" + "state": "needs_review", + "value": "Porty otwierają się w cmux bez konfiguracji. Aby używać prywatnych adresów w innych aplikacjach, skonfiguruj Cloud VPN." } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Serviços em escuta" + "state": "needs_review", + "value": "As portas abrem no cmux sem configuração. Para usar endereços privados em outros apps, configure o Cloud VPN." } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Прослушивающие службы" + "state": "needs_review", + "value": "Порты открываются в cmux без настройки. Чтобы использовать приватные адреса в других приложениях, настройте Cloud VPN." } }, "th": { "stringUnit": { - "state": "translated", - "value": "บริการที่กำลังรับฟัง" + "state": "needs_review", + "value": "เปิดพอร์ตใน cmux ได้โดยไม่ต้องตั้งค่า หากต้องการใช้ที่อยู่ส่วนตัวในแอปอื่น ให้ตั้งค่า Cloud VPN" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Dinleyen hizmetler" + "state": "needs_review", + "value": "Bağlantı noktaları cmux içinde kurulum gerektirmeden açılır. Diğer uygulamalarda özel adresleri kullanmak için Cloud VPN’i kurun." } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Служби, що прослуховують" + "state": "needs_review", + "value": "Порти відкриваються в cmux без налаштування. Щоб використовувати приватні адреси в інших застосунках, налаштуйте Cloud VPN." } } } }, - "cloudTree.ports.binding.detail": { + "cloud.ports.vpnOff.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux’s browser route connects to 127.0.0.1 on the machine. Bind the service to 127.0.0.1 or 0.0.0.0, then refresh. Turning on Cloud VPN does not change this route." + "value": "Optional: Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Browser-Verbindung von cmux verwendet 127.0.0.1 auf der Maschine. Binden Sie den Dienst an 127.0.0.1 oder 0.0.0.0 und aktualisieren Sie. Cloud-VPN ändert diese Route nicht." + "value": "Optional: Cloud-VPN" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le navigateur cmux se connecte à 127.0.0.1 sur la machine. Liez le service à 127.0.0.1 ou 0.0.0.0, puis actualisez. Activer le VPN Cloud ne change pas cette route." + "value": "Facultatif : VPN Cloud" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتصل مسار متصفح cmux بالعنوان 127.0.0.1 على الجهاز. اربط الخدمة بالعنوان 127.0.0.1 أو 0.0.0.0 ثم حدّث. تشغيل Cloud VPN لا يغير هذا المسار." + "value": "اختياري: Cloud VPN" } }, "es": { "stringUnit": { "state": "translated", - "value": "La ruta del navegador de cmux conecta a 127.0.0.1 en la máquina. Enlaza el servicio a 127.0.0.1 o 0.0.0.0 y actualiza. Activar Cloud VPN no cambia esta ruta." + "value": "Opcional: Cloud VPN" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 的瀏覽器路徑會連線到機器上的 127.0.0.1。請將服務繫結至 127.0.0.1 或 0.0.0.0 後重新整理。開啟 Cloud VPN 不會改變此路徑。" + "value": "選用:Cloud VPN" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 的浏览器路由连接到机器上的 127.0.0.1。请将服务绑定到 127.0.0.1 或 0.0.0.0 后刷新。开启 Cloud VPN 不会改变此路由。" + "value": "可选:云 VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux 브라우저 경로는 머신의 127.0.0.1에 연결합니다. 서비스를 127.0.0.1 또는 0.0.0.0에 바인딩한 후 새로 고치세요. Cloud VPN을 켜도 이 경로는 바뀌지 않습니다." + "value": "선택 사항: Cloud VPN" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux のブラウザはマシン上の 127.0.0.1 に接続します。サービスを 127.0.0.1 または 0.0.0.0 にバインドして更新してください。Cloud VPN を有効にしてもこの経路は変わりません。" + "value": "任意:Cloud VPN" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Ruta preglednika u cmux-u povezuje se na 127.0.0.1 na mašini. Vežite servis na 127.0.0.1 ili 0.0.0.0, zatim osvježite. Uključivanje Cloud VPN-a ne mijenja ovu rutu." + "state": "needs_review", + "value": "Opcionalno: Cloud VPN" } }, "da": { "stringUnit": { - "state": "translated", - "value": "cmux’ browserrute forbinder til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og opdater derefter. Aktivering af Cloud VPN ændrer ikke denne rute." + "state": "needs_review", + "value": "Valgfrit: Cloud VPN" } }, "it": { "stringUnit": { - "state": "translated", - "value": "Il percorso del browser di cmux si connette a 127.0.0.1 sulla macchina. Associa il servizio a 127.0.0.1 o 0.0.0.0, quindi aggiorna. L’attivazione della VPN Cloud non modifica questo percorso." + "state": "needs_review", + "value": "Facoltativo: Cloud VPN" } }, "km": { "stringUnit": { - "state": "translated", - "value": "ផ្លូវកម្មវិធីរុករករបស់ cmux ភ្ជាប់ទៅ 127.0.0.1 នៅលើម៉ាស៊ីន។ ចងសេវាកម្មទៅ 127.0.0.1 ឬ 0.0.0.0 រួចផ្ទុកឡើងវិញ។ ការបើក Cloud VPN មិនផ្លាស់ប្តូរផ្លូវនេះទេ។" + "state": "needs_review", + "value": "ជាជម្រើស៖ Cloud VPN" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "cmux sin nettleserrute kobler til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og oppdater deretter. Å slå på Cloud VPN endrer ikke denne ruten." + "state": "needs_review", + "value": "Valgfritt: Cloud VPN" } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Trasa przeglądarki cmux łączy się z 127.0.0.1 na maszynie. Powiąż usługę z 127.0.0.1 lub 0.0.0.0, a następnie odśwież. Włączenie Cloud VPN nie zmienia tej trasy." + "state": "needs_review", + "value": "Opcjonalnie: Cloud VPN" } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "A rota de navegador do cmux se conecta a 127.0.0.1 na máquina. Vincule o serviço a 127.0.0.1 ou 0.0.0.0 e atualize. Ativar o Cloud VPN não altera essa rota." + "state": "needs_review", + "value": "Opcional: Cloud VPN" } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Браузерный маршрут cmux подключается к 127.0.0.1 на машине. Привяжите службу к 127.0.0.1 или 0.0.0.0, затем обновите. Включение Cloud VPN не меняет этот маршрут." + "state": "needs_review", + "value": "Необязательно: Cloud VPN" } }, "th": { "stringUnit": { - "state": "translated", - "value": "เส้นทางเบราว์เซอร์ของ cmux เชื่อมต่อกับ 127.0.0.1 บนเครื่อง ผูกบริการกับ 127.0.0.1 หรือ 0.0.0.0 แล้วรีเฟรช การเปิด Cloud VPN ไม่ได้เปลี่ยนเส้นทางนี้" + "state": "needs_review", + "value": "ตัวเลือกเพิ่มเติม: Cloud VPN" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "cmux’un tarayıcı yolu makinedeki 127.0.0.1 adresine bağlanır. Hizmeti 127.0.0.1 veya 0.0.0.0 adresine bağlayın, ardından yenileyin. Cloud VPN’i açmak bu yolu değiştirmez." + "state": "needs_review", + "value": "İsteğe bağlı: Cloud VPN" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Браузерний маршрут cmux підключається до 127.0.0.1 на машині. Прив’яжіть службу до 127.0.0.1 або 0.0.0.0, потім оновіть. Увімкнення Cloud VPN не змінює цей маршрут." + "state": "needs_review", + "value": "Необов’язково: Cloud VPN" } } } }, - "cloudTree.ports.binding.title": { + "cloud.vpn.setup.address.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Services use another interface" + "value": "Each machine has its own private IP. Two machines may both expose port 3000, for example 10.40.0.10:3000 and 10.40.0.11:3000. Right-click a Cloud port and choose Copy Private Address URL after connecting. These addresses are private, not public share links." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dienste verwenden eine andere Schnittstelle" + "value": "Jede Maschine hat eine eigene private IP. Zwei Maschinen können beide Port 3000 verwenden, etwa 10.40.0.10:3000 und 10.40.0.11:3000. Klicken Sie nach dem Verbinden mit der rechten Maustaste auf einen Cloud-Port und wählen Sie URL der privaten Adresse kopieren. Diese Adressen sind privat und keine öffentlichen Freigabelinks." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les services utilisent une autre interface" + "value": "Chaque machine a sa propre IP privée. Deux machines peuvent utiliser le port 3000, par exemple 10.40.0.10:3000 et 10.40.0.11:3000. Après connexion, faites un clic droit sur un port Cloud et choisissez Copier l’URL de l’adresse privée. Ces adresses sont privées, ce ne sont pas des liens publics de partage." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تستخدم الخدمات واجهة أخرى" + "value": "Cada máquina tiene su propia IP privada. Dos máquinas pueden usar el puerto 3000, como 10.40.0.10:3000 y 10.40.0.11:3000. Después de conectar, haz clic derecho en un puerto Cloud y elige Copiar URL de dirección privada. Estas direcciones son privadas, no enlaces públicos para compartir." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Los servicios usan otra interfaz" + "value": "各マシンには個別のプライベートIPがあります。2台のマシンがどちらもポート3000を使えます(例:10.40.0.10:3000と10.40.0.11:3000)。接続後にCloudポートを右クリックし、「プライベートアドレスURLをコピー」を選びます。これらはプライベートアドレスで、公開共有リンクではありません。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "服務使用其他介面" + "value": "每台机器都有自己的私有 IP。两台机器可以同时使用端口 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。连接后右键点击 Cloud 端口,选择“复制私有地址 URL”。这些地址是私有地址,不是公开分享链接。" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "服务使用其他接口" + "value": "每台機器都有自己的私有 IP。兩台機器可以同時使用連接埠 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。連線後對 Cloud 連接埠按右鍵,選擇「複製私有位址 URL」。這些位址是私有位址,不是公開分享連結。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "서비스가 다른 인터페이스를 사용함" + "value": "각 머신에는 고유한 비공개 IP가 있습니다. 두 머신 모두 포트 3000을 사용할 수 있습니다(예: 10.40.0.10:3000 및 10.40.0.11:3000). 연결 후 Cloud 포트를 오른쪽 클릭하고 비공개 주소 URL 복사를 선택하세요. 이 주소는 비공개이며 공개 공유 링크가 아닙니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "サービスが別のインターフェイスを使用しています" + "value": "لكل جهاز عنوان IP خاص به. يمكن لجهازين استخدام المنفذ 3000، مثل 10.40.0.10:3000 و10.40.0.11:3000. بعد الاتصال، انقر بزر الماوس الأيمن على منفذ Cloud واختر نسخ رابط العنوان الخاص. هذه عناوين خاصة وليست روابط مشاركة عامة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Servisi koriste drugi interfejs" + "value": "Svaka mašina ima svoju privatnu IP adresu. Dvije mašine mogu koristiti port 3000, na primjer 10.40.0.10:3000 i 10.40.0.11:3000. Nakon povezivanja kliknite desnim dugmetom na Cloud port i izaberite Kopiraj URL privatne adrese. Ovo su privatne adrese, a ne javne veze za dijeljenje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Tjenester bruger en anden grænseflade" + "value": "Hver maskine har sin egen private IP. To maskiner kan begge bruge port 3000, f.eks. 10.40.0.10:3000 og 10.40.0.11:3000. Højreklik på en Cloud-port efter tilslutning, og vælg Kopiér URL til privat adresse. Adresserne er private, ikke offentlige delelinks." } }, "it": { "stringUnit": { "state": "translated", - "value": "I servizi usano un’altra interfaccia" + "value": "Ogni macchina ha il proprio IP privato. Due macchine possono usare entrambe la porta 3000, ad esempio 10.40.0.10:3000 e 10.40.0.11:3000. Dopo la connessione fai clic destro su una porta Cloud e scegli Copia URL indirizzo privato. Sono indirizzi privati, non link pubblici." } }, "km": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មប្រើចំណុចប្រទាក់ផ្សេង" + "value": "ម៉ាស៊ីននីមួយៗមាន IP ឯកជនផ្ទាល់ខ្លួន។ ម៉ាស៊ីនពីរអាចប្រើច្រក 3000 ដូចគ្នា ឧទាហរណ៍ 10.40.0.10:3000 និង 10.40.0.11:3000។ បន្ទាប់ពីភ្ជាប់ ចុចខាងស្តាំលើច្រក Cloud ហើយជ្រើស ចម្លង URL អាសយដ្ឋានឯកជន។ ទាំងនេះជាអាសយដ្ឋានឯកជន មិនមែនតំណចែករំលែកសាធារណៈទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Tjenester bruker et annet grensesnitt" + "value": "Hver maskin har sin egen private IP. To maskiner kan bruke port 3000, for eksempel 10.40.0.10:3000 og 10.40.0.11:3000. Høyreklikk en Cloud-port etter tilkobling og velg Kopier URL for privat adresse. Adressene er private, ikke offentlige delingslenker." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usługi używają innego interfejsu" + "value": "Każda maszyna ma własny prywatny adres IP. Dwie maszyny mogą używać portu 3000, na przykład 10.40.0.10:3000 i 10.40.0.11:3000. Po połączeniu kliknij prawym przyciskiem port Cloud i wybierz Kopiuj URL prywatnego adresu. To prywatne adresy, nie publiczne linki udostępniania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Os serviços usam outra interface" + "value": "Cada máquina tem seu próprio IP privado. Duas máquinas podem usar a porta 3000, por exemplo 10.40.0.10:3000 e 10.40.0.11:3000. Depois de conectar, clique com o botão direito em uma porta Cloud e escolha Copiar URL do endereço privado. Esses endereços são privados, não links públicos de compartilhamento." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Службы используют другой интерфейс" + "value": "У каждой машины свой частный IP. Две машины могут использовать порт 3000, например 10.40.0.10:3000 и 10.40.0.11:3000. После подключения щёлкните правой кнопкой мыши порт Cloud и выберите Скопировать URL частного адреса. Это частные адреса, а не публичные ссылки." } }, "th": { "stringUnit": { "state": "translated", - "value": "บริการใช้อินเทอร์เฟซอื่น" + "value": "แต่ละเครื่องมี IP ส่วนตัวของตนเอง สองเครื่องสามารถใช้พอร์ต 3000 ได้ เช่น 10.40.0.10:3000 และ 10.40.0.11:3000 หลังเชื่อมต่อ คลิกขวาที่พอร์ต Cloud แล้วเลือกคัดลอก URL ที่อยู่ส่วนตัว ที่อยู่เหล่านี้เป็นส่วนตัว ไม่ใช่ลิงก์สาธารณะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hizmetler başka bir arabirim kullanıyor" + "value": "Her makinenin kendi özel IP’si vardır. İki makine 3000 bağlantı noktasını kullanabilir; örneğin 10.40.0.10:3000 ve 10.40.0.11:3000. Bağlandıktan sonra bir Cloud portuna sağ tıklayın ve Özel Adres URL’sini Kopyala’yı seçin. Bunlar özel adreslerdir, herkese açık paylaşım bağlantıları değildir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Служби використовують інший інтерфейс" + "value": "Кожна машина має власну приватну IP-адресу. Дві машини можуть використовувати порт 3000, наприклад 10.40.0.10:3000 і 10.40.0.11:3000. Після підключення клацніть правою кнопкою миші порт Cloud і виберіть Копіювати URL приватної адреси. Це приватні адреси, а не публічні посилання для спільного доступу." } } } }, - "cloudTree.ports.empty.noService": { + "cloud.vpn.setup.cancel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Start a web server on this machine, then refresh." + "value": "Cancel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Starte einen Webserver auf diesem Rechner und aktualisiere dann die Liste." + "value": "Abbrechen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Démarrez un serveur web sur cette machine, puis actualisez." + "value": "Annuler" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "شغّل خادم ويب على هذا الجهاز، ثم حدّث القائمة." + "value": "Cancelar" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Inicia un servidor web en esta máquina y luego actualiza." + "value": "キャンセル" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在這台機器上啟動網頁伺服器,然後重新整理。" + "value": "取消" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在此机器上启动网页服务器,然后刷新。" + "value": "取消" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 머신에서 웹 서버를 시작한 다음 새로 고치세요." + "value": "취소" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このマシンで Web サーバーを起動してから、更新してください。" + "value": "إلغاء" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Pokrenite web server na ovoj mašini, zatim osvježite." + "state": "translated", + "value": "Otkaži" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Start en webserver på denne maskine, og opdater derefter." + "state": "translated", + "value": "Annuller" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Avvia un server web su questa macchina, poi aggiorna." + "state": "translated", + "value": "Annulla" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "ចាប់ផ្តើមម៉ាស៊ីនមេបណ្តាញនៅលើម៉ាស៊ីននេះ រួចផ្ទុកឡើងវិញ។" + "state": "translated", + "value": "បោះបង់" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Start en webserver på denne maskinen, og oppdater deretter." + "state": "translated", + "value": "Avbryt" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Uruchom serwer WWW na tej maszynie, a następnie odśwież." + "state": "translated", + "value": "Anuluj" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Inicie um servidor web nesta máquina e atualize." + "state": "translated", + "value": "Cancelar" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Запустите веб-сервер на этой машине, затем обновите список." + "state": "translated", + "value": "Отменить" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "เริ่มเว็บเซิร์ฟเวอร์บนเครื่องนี้ แล้วรีเฟรช" + "state": "translated", + "value": "ยกเลิก" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Bu makinede bir web sunucusu başlatın, ardından yenileyin." + "state": "translated", + "value": "İptal" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Запустіть вебсервер на цій машині, а потім оновіть список." + "state": "translated", + "value": "Скасувати" } } } }, - "cloudTree.ports.hub.detail": { + "cloud.vpn.setup.connect": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This build cannot start cmux’s authenticated Cloud forward. Update cmux, then retry." + "value": "Connect Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Build kann die authentifizierte Cloud-Weiterleitung von cmux nicht starten. Aktualisieren Sie cmux und versuchen Sie es erneut." + "value": "Cloud-VPN verbinden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cette version ne peut pas démarrer le transfert Cloud authentifié de cmux. Mettez cmux à jour, puis réessayez." + "value": "Connecter le VPN Cloud" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لا يمكن لهذا الإصدار بدء إعادة توجيه Cloud الموثّقة من cmux. حدّث cmux ثم أعد المحاولة." + "value": "Conectar VPN de Cloud" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Esta compilación no puede iniciar el reenvío autenticado de Cloud de cmux. Actualiza cmux y vuelve a intentarlo." + "value": "Cloud VPNに接続" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此版本無法啟動 cmux 的已驗證 Cloud 轉送。請更新 cmux 後重試。" + "value": "连接 Cloud VPN" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此版本无法启动 cmux 的已验证 Cloud 转发。请更新 cmux 后重试。" + "value": "連接 Cloud VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 빌드에서는 cmux 인증 Cloud 전달을 시작할 수 없습니다. cmux를 업데이트한 후 다시 시도하세요." + "value": "Cloud VPN 연결" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このビルドでは cmux の認証済み Cloud 転送を開始できません。cmux を更新して再試行してください。" + "value": "توصيل VPN الخاص بـ Cloud" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ova verzija ne može pokrenuti autentificirano Cloud prosljeđivanje cmux-a. Ažurirajte cmux, zatim pokušajte ponovo." + "value": "Poveži Cloud VPN" } }, "da": { "stringUnit": { "state": "translated", - "value": "Denne build kan ikke starte cmux’ godkendte Cloud-videresendelse. Opdater cmux, og prøv igen." + "value": "Forbind Cloud VPN" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa build non può avviare l’inoltro Cloud autenticato di cmux. Aggiorna cmux, quindi riprova." + "value": "Connetti VPN Cloud" } }, "km": { "stringUnit": { "state": "translated", - "value": "កំណែនេះមិនអាចចាប់ផ្តើមការបញ្ជូនបន្ត Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux បានទេ។ ធ្វើបច្ចុប្បន្នភាព cmux រួចព្យាយាមម្តងទៀត។" + "value": "ភ្ជាប់ Cloud VPN" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Denne versjonen kan ikke starte cmux sin autentiserte Cloud-videresending. Oppdater cmux, og prøv igjen." + "value": "Koble til Cloud VPN" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ta kompilacja nie może uruchomić uwierzytelnionego przekierowania Cloud w cmux. Zaktualizuj cmux i spróbuj ponownie." + "value": "Połącz z Cloud VPN" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Esta versão não consegue iniciar o encaminhamento Cloud autenticado do cmux. Atualize o cmux e tente novamente." + "value": "Conectar Cloud VPN" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Эта сборка не может запустить аутентифицированное перенаправление Cloud в cmux. Обновите cmux и повторите попытку." + "value": "Подключить Cloud VPN" } }, "th": { "stringUnit": { "state": "translated", - "value": "บิลด์นี้ไม่สามารถเริ่มการส่งต่อ Cloud ที่ยืนยันตัวตนแล้วของ cmux ได้ อัปเดต cmux แล้วลองอีกครั้ง" + "value": "เชื่อมต่อ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu derleme cmux’un kimliği doğrulanmış Cloud yönlendirmesini başlatamıyor. cmux’u güncelleyin, ardından yeniden deneyin." + "value": "Cloud VPN’e bağlan" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ця збірка не може запустити автентифіковане перенаправлення Cloud у cmux. Оновіть cmux і повторіть спробу." + "value": "Підключити Cloud VPN" } } } }, - "cloudTree.ports.link.detail": { + "cloud.vpn.setup.connected": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port discovery could not connect to this machine. Existing cmux ports may still work. Refresh to reconnect; Cloud VPN is not required." + "value": "Connected" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Porterkennung konnte diese Maschine nicht erreichen. Bereits geöffnete cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie zum erneuten Verbinden; Cloud-VPN ist nicht erforderlich." + "value": "Verbunden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La découverte des ports n’a pas pu se connecter à cette machine. Les ports cmux existants peuvent encore fonctionner. Actualisez pour reconnecter ; le VPN Cloud n’est pas nécessaire." + "value": "Connecté" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تعذر اتصال اكتشاف المنافذ بهذا الجهاز. قد تظل منافذ cmux الحالية تعمل. حدّث لإعادة الاتصال؛ Cloud VPN غير مطلوب." + "value": "Conectada" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "El descubrimiento de puertos no pudo conectar con esta máquina. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reconectar; Cloud VPN no es necesario." + "value": "接続済み" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "連接埠探索無法連線到此機器。現有 cmux 連接埠可能仍可使用。請重新整理以重新連線;不需要 Cloud VPN。" + "value": "已连接" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "端口发现无法连接到此机器。现有 cmux 端口可能仍可使用。请刷新以重新连接;无需 Cloud VPN。" + "value": "已連線" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 검색이 이 머신에 연결하지 못했습니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 연결하세요. Cloud VPN은 필요하지 않습니다." + "value": "연결됨" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ポート検出がこのマシンに接続できませんでした。既存の cmux ポートは引き続き動作する可能性があります。更新して再接続してください。Cloud VPN は不要です。" + "value": "متصل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkrivanje portova nije se moglo povezati s ovom mašinom. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovno povezivanje; Cloud VPN nije potreban." + "value": "Povezano" } }, "da": { "stringUnit": { "state": "translated", - "value": "Portregistrering kunne ikke oprette forbindelse til denne maskine. Eksisterende cmux-porte virker muligvis stadig. Opdater for at genoprette forbindelsen; Cloud VPN er ikke påkrævet." + "value": "Forbundet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il rilevamento delle porte non è riuscito a connettersi a questa macchina. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riconnetterti; la VPN Cloud non è necessaria." + "value": "Connessa" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការស្វែងរកច្រកមិនអាចភ្ជាប់ទៅម៉ាស៊ីននេះបានទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីភ្ជាប់ម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" + "value": "បានភ្ជាប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Portoppdagelse kunne ikke koble til denne maskinen. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å koble til på nytt; Cloud VPN er ikke nødvendig." + "value": "Tilkoblet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wykrywanie portów nie mogło połączyć się z tą maszyną. Istniejące porty cmux mogą nadal działać. Odśwież, aby połączyć ponownie; Cloud VPN nie jest wymagany." + "value": "Połączono" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A descoberta de portas não conseguiu se conectar a esta máquina. As portas existentes do cmux ainda podem funcionar. Atualize para reconectar; o Cloud VPN não é necessário." + "value": "Conectada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Обнаружению портов не удалось подключиться к этой машине. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы переподключиться; Cloud VPN не требуется." + "value": "Подключено" } }, "th": { "stringUnit": { "state": "translated", - "value": "การค้นหาพอร์ตไม่สามารถเชื่อมต่อกับเครื่องนี้ได้ พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อเชื่อมต่อใหม่ ไม่จำเป็นต้องใช้ Cloud VPN" + "value": "เชื่อมต่อแล้ว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Port keşfi bu makineye bağlanamadı. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden bağlanmak için yenileyin; Cloud VPN gerekmez." + "value": "Bağlandı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виявленню портів не вдалося підключитися до цієї машини. Наявні порти cmux можуть і далі працювати. Оновіть, щоб підключитися знову; Cloud VPN не потрібен." + "value": "Підключено" } } } }, - "cloudTree.ports.link.title": { + "cloud.vpn.setup.disconnect": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud link unavailable" + "value": "Disconnect" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Verbindung nicht verfügbar" + "value": "Trennen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion Cloud indisponible" + "value": "Déconnecter" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "اتصال Cloud غير متاح" + "value": "Desconectar" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Conexión de Cloud no disponible" + "value": "切断" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud 連線無法使用" + "value": "断开连接" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud 连接不可用" + "value": "中斷連線" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cloud 연결을 사용할 수 없음" + "value": "연결 해제" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud 接続を利用できません" + "value": "قطع الاتصال" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Cloud veza nije dostupna" + "value": "Prekini vezu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Cloud-forbindelse utilgængelig" + "value": "Afbryd" } }, "it": { "stringUnit": { "state": "translated", - "value": "Collegamento Cloud non disponibile" + "value": "Disconnetti" } }, "km": { "stringUnit": { "state": "translated", - "value": "តំណ Cloud មិនអាចប្រើបាន" + "value": "ផ្តាច់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Cloud-tilkobling utilgjengelig" + "value": "Koble fra" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Połączenie Cloud niedostępne" + "value": "Rozłącz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Conexão Cloud indisponível" + "value": "Desconectar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Связь с Cloud недоступна" + "value": "Отключить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลิงก์ Cloud ไม่พร้อมใช้งาน" + "value": "ตัดการเชื่อมต่อ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cloud bağlantısı kullanılamıyor" + "value": "Bağlantıyı kes" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зв’язок із Cloud недоступний" + "value": "Від’єднати" } } } }, - "cloudTree.ports.loading.detail": { + "cloud.vpn.setup.entry.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Checking services through cmux’s authenticated Cloud link. No system VPN is needed." + "value": "Optional private IP access for other apps" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dienste werden über die authentifizierte Cloud-Verbindung von cmux geprüft. Ein System-VPN ist nicht erforderlich." + "value": "Optionaler Zugriff auf private IPs für andere Apps" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vérification des services via la connexion Cloud authentifiée de cmux. Aucun VPN système n’est nécessaire." + "value": "Accès facultatif aux IP privées pour les autres apps" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "جارٍ فحص الخدمات عبر اتصال Cloud الموثّق من cmux. لا حاجة إلى VPN النظام." + "value": "Acceso opcional a IP privadas para otras apps" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Comprobando servicios mediante la conexión autenticada de Cloud de cmux. No se necesita una VPN del sistema." + "value": "ほかのアプリからプライベートIPへアクセスする任意の設定" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在透過 cmux 的已驗證 Cloud 連線檢查服務。不需要系統 VPN。" + "value": "为其他应用提供可选的私有 IP 访问" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在通过 cmux 的已验证 Cloud 连接检查服务。无需系统 VPN。" + "value": "為其他 App 提供選用的私有 IP 存取" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux의 인증된 Cloud 연결로 서비스를 확인하고 있습니다. 시스템 VPN은 필요하지 않습니다." + "value": "다른 앱의 비공개 IP 접근을 위한 선택 설정" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux の認証済み Cloud 接続でサービスを確認しています。システム VPN は不要です。" + "value": "وصول اختياري إلى عناوين IP الخاصة للتطبيقات الأخرى" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Provjera servisa putem autentificirane Cloud veze cmux-a. Sistemski VPN nije potreban." + "value": "Opcionalni pristup privatnim IP adresama za druge aplikacije" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kontrollerer tjenester via cmux’ godkendte Cloud-forbindelse. Der kræves ingen system-VPN." + "value": "Valgfri privat IP-adgang for andre apps" } }, "it": { "stringUnit": { "state": "translated", - "value": "Controllo dei servizi tramite il collegamento Cloud autenticato di cmux. Non serve una VPN di sistema." + "value": "Accesso facoltativo agli IP privati per altre app" } }, "km": { "stringUnit": { "state": "translated", - "value": "កំពុងពិនិត្យសេវាកម្មតាមរយៈតំណ Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux។ មិនត្រូវការ VPN របស់ប្រព័ន្ធទេ។" + "value": "ចូលប្រើ IP ឯកជនសម្រាប់កម្មវិធីផ្សេងៗជាជម្រើស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Sjekker tjenester via cmux sin autentiserte Cloud-tilkobling. Ingen system-VPN er nødvendig." + "value": "Valgfri privat IP-tilgang for andre apper" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Sprawdzanie usług przez uwierzytelnione połączenie Cloud w cmux. Systemowa sieć VPN nie jest potrzebna." + "value": "Opcjonalny dostęp innych aplikacji do prywatnych adresów IP" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Verificando serviços pela conexão Cloud autenticada do cmux. Nenhuma VPN do sistema é necessária." + "value": "Acesso opcional a IPs privados para outros apps" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Проверка служб через аутентифицированную связь cmux с Cloud. Системный VPN не нужен." + "value": "Необязательный доступ других приложений к частным IP" } }, "th": { "stringUnit": { "state": "translated", - "value": "กำลังตรวจสอบบริการผ่านลิงก์ Cloud ที่ยืนยันตัวตนแล้วของ cmux ไม่ต้องใช้ VPN ของระบบ" + "value": "การเข้าถึง IP ส่วนตัวสำหรับแอปอื่นแบบไม่บังคับ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hizmetler cmux’un kimliği doğrulanmış Cloud bağlantısı üzerinden denetleniyor. Sistem VPN’i gerekmez." + "value": "Diğer uygulamalar için isteğe bağlı özel IP erişimi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перевірка служб через автентифікований зв’язок cmux із Cloud. Системний VPN не потрібен." + "value": "Необов’язковий доступ інших програм до приватних IP" } } } }, - "cloudTree.ports.loopback.detail": { + "cloud.vpn.setup.failed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "These services open in cmux without Cloud VPN. They listen on the machine’s loopback address, so other apps cannot reach them through its private IP, even with VPN connected." + "value": "Needs attention" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diese Dienste lassen sich in cmux ohne Cloud-VPN öffnen. Sie lauschen auf der Loopback-Adresse der Maschine. Andere Apps erreichen sie daher auch mit VPN nicht über deren private IP." + "value": "Aktion erforderlich" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ces services s’ouvrent dans cmux sans VPN Cloud. Ils écoutent sur l’adresse locale de la machine : les autres apps ne peuvent pas y accéder via son IP privée, même avec le VPN." + "value": "Action requise" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تُفتح هذه الخدمات داخل cmux دون Cloud VPN. وهي تستمع على عنوان الواجهة المحلية للجهاز، لذا لا تستطيع التطبيقات الأخرى الوصول إليها عبر عنوان IP الخاص به حتى مع اتصال VPN." + "value": "Requiere atención" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Estos servicios se abren en cmux sin Cloud VPN. Escuchan en la dirección de bucle local de la máquina, por lo que otras apps no pueden acceder por su IP privada, incluso con la VPN conectada." + "value": "対応が必要" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "這些服務可在 cmux 中開啟,不需要 Cloud VPN。它們在機器的迴路位址上監聽,因此即使已連線 VPN,其他 App 也無法透過其私人 IP 存取。" + "value": "需要处理" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "这些服务可在 cmux 中打开,无需 Cloud VPN。它们监听机器的回环地址,因此即使已连接 VPN,其他应用也无法通过其专用 IP 访问。" + "value": "需要處理" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 서비스는 Cloud VPN 없이 cmux에서 열립니다. 머신의 루프백 주소에서 수신 대기하므로 VPN에 연결해도 다른 앱은 비공개 IP로 접근할 수 없습니다." + "value": "조치 필요" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "これらのサービスは Cloud VPN なしで cmux から開けます。マシンのループバックアドレスで待ち受けるため、VPN 接続中でも他のアプリからプライベート IP 経由ではアクセスできません。" + "value": "يتطلب إجراءً" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovi servisi se otvaraju u cmux-u bez Cloud VPN-a. Slušaju na loopback adresi mašine, pa ih druge aplikacije ne mogu dosegnuti preko njene privatne IP adrese, čak ni uz povezan VPN." + "value": "Potrebna pažnja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Disse tjenester åbnes i cmux uden Cloud VPN. De lytter på maskinens loopback-adresse, så andre apps kan ikke nå dem via dens private IP, heller ikke med VPN forbundet." + "value": "Kræver opmærksomhed" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questi servizi si aprono in cmux senza VPN Cloud. Sono in ascolto sull’indirizzo di loopback della macchina, quindi le altre app non possono raggiungerli tramite il suo IP privato, nemmeno con la VPN connessa." + "value": "Richiede attenzione" } }, "km": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មទាំងនេះបើកនៅក្នុង cmux ដោយមិនត្រូវការ Cloud VPN។ ពួកវាស្តាប់នៅលើអាសយដ្ឋាន loopback របស់ម៉ាស៊ីន ដូច្នេះកម្មវិធីផ្សេងទៀតមិនអាចចូលដល់ពួកវាតាមរយៈ IP ឯកជនរបស់វាបានទេ ទោះបីភ្ជាប់ VPN ក៏ដោយ។" + "value": "ត្រូវការការយកចិត្តទុកដាក់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Disse tjenestene åpnes i cmux uten Cloud VPN. De lytter på maskinens loopback-adresse, så andre apper kan ikke nå dem via den private IP-adressen, selv med VPN tilkoblet." + "value": "Krever handling" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Te usługi otwierają się w cmux bez Cloud VPN. Nasłuchują na adresie pętli zwrotnej maszyny, więc inne aplikacje nie mogą do nich dotrzeć przez jej prywatny adres IP, nawet przy połączonym VPN." + "value": "Wymaga uwagi" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Esses serviços abrem no cmux sem o Cloud VPN. Eles escutam no endereço de loopback da máquina, então outros apps não conseguem alcançá-los pelo IP privado dela, mesmo com a VPN conectada." + "value": "Requer atenção" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Эти службы открываются в cmux без Cloud VPN. Они прослушивают loopback-адрес машины, поэтому другие приложения не могут обратиться к ним через её частный IP даже при подключённом VPN." + "value": "Требуется действие" } }, "th": { "stringUnit": { "state": "translated", - "value": "บริการเหล่านี้เปิดใน cmux ได้โดยไม่ต้องใช้ Cloud VPN บริการรับฟังบนที่อยู่ loopback ของเครื่อง แอปอื่นจึงเข้าถึงผ่าน IP ส่วนตัวของเครื่องไม่ได้ แม้จะเชื่อมต่อ VPN แล้วก็ตาม" + "value": "ต้องดำเนินการ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu hizmetler cmux’ta Cloud VPN olmadan açılır. Makinenin geri döngü adresinde dinledikleri için diğer uygulamalar, VPN bağlıyken bile makinenin özel IP’si üzerinden onlara ulaşamaz." + "value": "İlgilenilmeli" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ці служби відкриваються в cmux без Cloud VPN. Вони прослуховують loopback-адресу машини, тому інші застосунки не можуть дістатися до них через її приватну IP-адресу, навіть із підключеним VPN." + "value": "Потрібна увага" } } } }, - "cloudTree.ports.loopback.title": { + "cloud.vpn.setup.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Loopback services available" + "value": "Off" } }, "de": { "stringUnit": { "state": "translated", - "value": "Loopback-Dienste verfügbar" + "value": "Aus" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Services locaux disponibles" + "value": "Désactivé" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "خدمات الواجهة المحلية متاحة" + "value": "Desactivada" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Servicios de bucle local disponibles" + "value": "オフ" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "可使用迴路服務" + "value": "已关闭" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "回环服务可用" + "value": "已關閉" } }, "ko": { "stringUnit": { "state": "translated", - "value": "루프백 서비스 사용 가능" + "value": "꺼짐" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ループバックのサービスを利用できます" + "value": "متوقف" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Dostupni loopback servisi" + "value": "Isključeno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Loopback-tjenester tilgængelige" + "value": "Fra" } }, "it": { "stringUnit": { "state": "translated", - "value": "Servizi di loopback disponibili" + "value": "Disattivata" } }, "km": { "stringUnit": { "state": "translated", - "value": "មានសេវាកម្ម loopback" + "value": "បិទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Loopback-tjenester tilgjengelige" + "value": "Av" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Dostępne usługi pętli zwrotnej" + "value": "Wyłączona" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Serviços de loopback disponíveis" + "value": "Desativada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Доступны loopback-службы" + "value": "Выключено" } }, "th": { "stringUnit": { "state": "translated", - "value": "มีบริการ loopback พร้อมใช้งาน" + "value": "ปิด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Geri döngü hizmetleri kullanılabilir" + "value": "Kapalı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Доступні loopback-служби" + "value": "Вимкнено" } } } }, - "cloudTree.ports.notRequested.title": { + "cloud.vpn.setup.openUnavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports not checked yet" + "value": "Cloud VPN setup is unavailable" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ports noch nicht geprüft" + "value": "Cloud-VPN-Einrichtung ist nicht verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ports pas encore vérifiés" + "value": "La configuration du VPN Cloud est indisponible" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لم يتم فحص المنافذ بعد" + "value": "La configuración de VPN de Cloud no está disponible" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Puertos aún sin comprobar" + "value": "Cloud VPN設定は利用できません" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尚未檢查連接埠" + "value": "Cloud VPN 设置不可用" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尚未检查端口" + "value": "無法使用 Cloud VPN 設定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아직 포트를 확인하지 않음" + "value": "Cloud VPN 설정을 사용할 수 없습니다" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ポートは未確認です" + "value": "إعداد VPN الخاص بـ Cloud غير متاح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Portovi još nisu provjereni" + "value": "Podešavanje Cloud VPN-a nije dostupno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Porte er ikke kontrolleret endnu" + "value": "Cloud VPN-opsætning er ikke tilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Porte non ancora controllate" + "value": "La configurazione VPN Cloud non è disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "មិនទាន់បានពិនិត្យច្រកនៅឡើយ" + "value": "ការរៀបចំ Cloud VPN មិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Porter er ikke sjekket ennå" + "value": "Cloud VPN-oppsett er ikke tilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Porty nie zostały jeszcze sprawdzone" + "value": "Konfiguracja Cloud VPN jest niedostępna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Portas ainda não verificadas" + "value": "A configuração do Cloud VPN não está disponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Порты ещё не проверены" + "value": "Настройка Cloud VPN недоступна" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยังไม่ได้ตรวจสอบพอร์ต" + "value": "การตั้งค่า Cloud VPN ไม่พร้อมใช้งาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Portlar henüz denetlenmedi" + "value": "Cloud VPN kurulumu kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Порти ще не перевірено" + "value": "Налаштування Cloud VPN недоступне" } } } }, - "cloudTree.ports.privateAddress": { + "cloud.vpn.setup.permission.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private address unavailable" + "value": "The VPN software is included in cmux. You do not need another app. macOS may require your password or Touch ID during approval." } }, "de": { "stringUnit": { "state": "translated", - "value": "Private Adresse nicht verfügbar" + "value": "Die VPN-Software ist in cmux enthalten. Sie brauchen keine weitere App. macOS kann bei der Genehmigung Ihr Passwort oder Touch ID verlangen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adresse privée indisponible" + "value": "Le logiciel VPN est inclus dans cmux. Aucune autre app n’est nécessaire. macOS peut demander votre mot de passe ou Touch ID lors de l’autorisation." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "العنوان الخاص غير متاح" + "value": "El software VPN está incluido en cmux. No necesitas otra app. macOS puede solicitar tu contraseña o Touch ID durante la autorización." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Dirección privada no disponible" + "value": "VPNソフトウェアはcmuxに含まれています。別のアプリは不要です。承認時にmacOSがパスワードまたはTouch IDを求めることがあります。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "私人位址無法使用" + "value": "cmux 已包含 VPN 软件,无需其他应用。批准时,macOS 可能要求您输入密码或使用触控 ID。" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "专用地址不可用" + "value": "cmux 已包含 VPN 軟體,不需要其他 App。核准時,macOS 可能要求您輸入密碼或使用 Touch ID。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 주소를 사용할 수 없음" + "value": "VPN 소프트웨어는 cmux에 포함되어 있습니다. 다른 앱은 필요하지 않습니다. 승인 시 macOS에서 암호 또는 Touch ID를 요청할 수 있습니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "プライベートアドレスを利用できません" + "value": "برنامج VPN مضمن في cmux. لا تحتاج إلى تطبيق آخر. قد يطلب macOS كلمة المرور أو Touch ID أثناء الموافقة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Privatna adresa nije dostupna" + "value": "VPN softver je uključen u cmux. Nije potrebna druga aplikacija. macOS može zatražiti lozinku ili Touch ID tokom odobravanja." } }, "da": { "stringUnit": { "state": "translated", - "value": "Privat adresse utilgængelig" + "value": "VPN-softwaren er inkluderet i cmux. Du behøver ingen anden app. macOS kan bede om din adgangskode eller Touch ID under godkendelsen." } }, "it": { "stringUnit": { "state": "translated", - "value": "Indirizzo privato non disponibile" + "value": "Il software VPN è incluso in cmux. Non serve un’altra app. macOS potrebbe chiedere la password o Touch ID durante l’autorizzazione." } }, "km": { "stringUnit": { "state": "translated", - "value": "អាសយដ្ឋានឯកជនមិនអាចប្រើបាន" + "value": "កម្មវិធី VPN មាននៅក្នុង cmux។ អ្នកមិនត្រូវការកម្មវិធីផ្សេងទៀតទេ។ macOS អាចស្នើពាក្យសម្ងាត់ ឬ Touch ID ក្នុងពេលអនុម័ត។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Privat adresse utilgjengelig" + "value": "VPN-programvaren er inkludert i cmux. Du trenger ingen annen app. macOS kan be om passord eller Touch ID under godkjenningen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Adres prywatny niedostępny" + "value": "Oprogramowanie VPN jest zawarte w cmux. Nie potrzebujesz innej aplikacji. macOS może poprosić o hasło lub Touch ID podczas zatwierdzania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Endereço privado indisponível" + "value": "O software VPN vem incluído no cmux. Você não precisa de outro app. O macOS pode pedir sua senha ou Touch ID durante a aprovação." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Частный адрес недоступен" + "value": "VPN-программа уже входит в cmux. Другие приложения не нужны. Во время подтверждения macOS может запросить пароль или Touch ID." } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่มีที่อยู่ส่วนตัว" + "value": "ซอฟต์แวร์ VPN รวมอยู่ใน cmux แล้ว ไม่ต้องใช้แอปอื่น macOS อาจขอรหัสผ่านหรือ Touch ID ระหว่างการอนุมัติ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel adres kullanılamıyor" + "value": "VPN yazılımı cmux içinde bulunur. Başka bir uygulama gerekmez. macOS onay sırasında parolanızı veya Touch ID’yi isteyebilir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Приватна адреса недоступна" + "value": "Програмне забезпечення VPN входить до cmux. Інша програма не потрібна. Під час схвалення macOS може попросити пароль або Touch ID." } } } }, - "cloudTree.ports.privateAddress.detail": { + "cloud.vpn.setup.status.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux’s authenticated route needs this machine’s private address. Refresh to retrieve it. Turning on Cloud VPN does not assign a missing address." + "value": "Private network status" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die authentifizierte Route von cmux benötigt die private Adresse dieser Maschine. Aktualisieren Sie, um sie abzurufen. Cloud-VPN weist keine fehlende Adresse zu." + "value": "Status des privaten Netzwerks" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La route authentifiée de cmux nécessite l’adresse privée de cette machine. Actualisez pour la récupérer. Activer le VPN Cloud n’attribue pas d’adresse manquante." + "value": "État du réseau privé" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يحتاج مسار cmux الموثّق إلى العنوان الخاص لهذا الجهاز. حدّث لاسترجاعه. تشغيل Cloud VPN لا يعيّن عنوانًا مفقودًا." + "value": "Estado de la red privada" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "La ruta autenticada de cmux necesita la dirección privada de esta máquina. Actualiza para obtenerla. Activar Cloud VPN no asigna una dirección que falta." + "value": "プライベートネットワークの状態" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 的已驗證路徑需要此機器的私人位址。請重新整理以取得位址。開啟 Cloud VPN 不會指派缺少的位址。" + "value": "私有网络状态" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 的已验证路由需要此机器的专用地址。请刷新以获取地址。开启 Cloud VPN 不会分配缺失的地址。" + "value": "私有網路狀態" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux의 인증된 경로에는 이 머신의 비공개 주소가 필요합니다. 새로 고쳐 주소를 가져오세요. Cloud VPN을 켜도 누락된 주소가 할당되지는 않습니다." + "value": "비공개 네트워크 상태" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux の認証済み経路にはこのマシンのプライベートアドレスが必要です。更新して取得してください。Cloud VPN を有効にしても不足しているアドレスは割り当てられません。" + "value": "حالة الشبكة الخاصة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Autentificirana ruta cmux-a treba privatnu adresu ove mašine. Osvježite da je preuzmete. Uključivanje Cloud VPN-a ne dodjeljuje adresu koja nedostaje." + "value": "Status privatne mreže" } }, "da": { "stringUnit": { "state": "translated", - "value": "cmux’ godkendte rute kræver denne maskines private adresse. Opdater for at hente den. Aktivering af Cloud VPN tildeler ikke en manglende adresse." + "value": "Status for privat netværk" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il percorso autenticato di cmux richiede l’indirizzo privato di questa macchina. Aggiorna per recuperarlo. L’attivazione della VPN Cloud non assegna un indirizzo mancante." + "value": "Stato della rete privata" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្លូវដែលបានផ្ទៀងផ្ទាត់របស់ cmux ត្រូវការអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីននេះ។ ផ្ទុកឡើងវិញដើម្បីទាញយកវា។ ការបើក Cloud VPN មិនផ្តល់អាសយដ្ឋានដែលបាត់ទេ។" + "value": "ស្ថានភាពបណ្តាញឯកជន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "cmux sin autentiserte rute trenger denne maskinens private adresse. Oppdater for å hente den. Å slå på Cloud VPN tildeler ikke en manglende adresse." + "value": "Status for privat nettverk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uwierzytelniona trasa cmux wymaga prywatnego adresu tej maszyny. Odśwież, aby go pobrać. Włączenie Cloud VPN nie przypisuje brakującego adresu." + "value": "Stan sieci prywatnej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A rota autenticada do cmux precisa do endereço privado desta máquina. Atualize para obtê-lo. Ativar o Cloud VPN não atribui um endereço ausente." + "value": "Status da rede privada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Аутентифицированному маршруту cmux нужен частный адрес этой машины. Обновите, чтобы получить его. Включение Cloud VPN не назначает отсутствующий адрес." + "value": "Состояние частной сети" } }, "th": { "stringUnit": { "state": "translated", - "value": "เส้นทางที่ยืนยันตัวตนแล้วของ cmux ต้องใช้ที่อยู่ส่วนตัวของเครื่องนี้ รีเฟรชเพื่อดึงข้อมูล การเปิด Cloud VPN ไม่ได้กำหนดที่อยู่ที่ขาดหายไป" + "value": "สถานะเครือข่ายส่วนตัว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux’un kimliği doğrulanmış yolu bu makinenin özel adresine ihtiyaç duyar. Adresi almak için yenileyin. Cloud VPN’i açmak eksik bir adres atamaz." + "value": "Özel ağ durumu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Автентифікованому маршруту cmux потрібна приватна адреса цієї машини. Оновіть, щоб отримати її. Увімкнення Cloud VPN не призначає відсутню адресу." + "value": "Стан приватної мережі" } } } }, - "cloudTree.ports.routeNote": { + "cloud.vpn.setup.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux forwards ports without Cloud VPN. Web browsers and other Mac apps need Cloud VPN to reach services bound to the machine’s private address." + "value": "Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux leitet Ports ohne Cloud-VPN weiter. Webbrowser und andere Mac-Apps benötigen Cloud-VPN, um Dienste an der privaten Adresse der Maschine zu erreichen." + "value": "Cloud-VPN" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux transfère les ports sans VPN Cloud. Les navigateurs web et les autres apps Mac ont besoin du VPN Cloud pour atteindre les services liés à l’adresse privée de la machine." + "value": "VPN Cloud" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعيد cmux توجيه المنافذ دون Cloud VPN. تحتاج متصفحات الويب وتطبيقات Mac الأخرى إلى Cloud VPN للوصول إلى الخدمات المرتبطة بالعنوان الخاص للجهاز." + "value": "VPN de Cloud" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux reenvía puertos sin Cloud VPN. Los navegadores web y otras apps de Mac necesitan Cloud VPN para acceder a servicios enlazados a la dirección privada de la máquina." + "value": "クラウドVPN" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 可轉送連接埠,不需要 Cloud VPN。網頁瀏覽器和其他 Mac App 需要 Cloud VPN,才能存取繫結至機器私人位址的服務。" + "value": "云端 VPN" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 可转发端口,无需 Cloud VPN。网页浏览器和其他 Mac 应用需要 Cloud VPN,才能访问绑定到机器专用地址的服务。" + "value": "雲端 VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux는 Cloud VPN 없이 포트를 전달합니다. 웹 브라우저 및 다른 Mac 앱이 머신의 비공개 주소에 바인딩된 서비스에 접근하려면 Cloud VPN이 필요합니다." + "value": "클라우드 VPN" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux は Cloud VPN なしでポートを転送します。Web ブラウザやその他の Mac アプリからマシンのプライベートアドレスにバインドされたサービスにアクセスするには Cloud VPN が必要です。" + "value": "شبكة Cloud الخاصة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "cmux prosljeđuje portove bez Cloud VPN-a. Web preglednicima i drugim Mac aplikacijama potreban je Cloud VPN za pristup servisima vezanim za privatnu adresu mašine." + "value": "Cloud VPN" } }, "da": { "stringUnit": { "state": "translated", - "value": "cmux videresender porte uden Cloud VPN. Webbrowsere og andre Mac-apps skal bruge Cloud VPN for at nå tjenester, der er bundet til maskinens private adresse." + "value": "Cloud VPN" } }, "it": { "stringUnit": { "state": "translated", - "value": "cmux inoltra le porte senza VPN Cloud. I browser web e le altre app per Mac hanno bisogno della VPN Cloud per raggiungere i servizi associati all’indirizzo privato della macchina." + "value": "VPN Cloud" } }, "km": { "stringUnit": { "state": "translated", - "value": "cmux បញ្ជូនបន្តច្រកដោយមិនត្រូវការ Cloud VPN។ កម្មវិធីរុករកបណ្តាញ និងកម្មវិធី Mac ផ្សេងទៀតត្រូវការ Cloud VPN ដើម្បីចូលដល់សេវាកម្មដែលចងទៅអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីន។" + "value": "Cloud VPN" } }, "nb": { "stringUnit": { "state": "translated", - "value": "cmux videresender porter uten Cloud VPN. Nettlesere og andre Mac-apper trenger Cloud VPN for å nå tjenester som er bundet til maskinens private adresse." + "value": "Cloud VPN" } }, "pl": { "stringUnit": { "state": "translated", - "value": "cmux przekierowuje porty bez Cloud VPN. Przeglądarki internetowe i inne aplikacje na Maca potrzebują Cloud VPN, aby dotrzeć do usług powiązanych z prywatnym adresem maszyny." + "value": "Cloud VPN" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O cmux encaminha portas sem o Cloud VPN. Navegadores e outros apps do Mac precisam do Cloud VPN para acessar serviços vinculados ao endereço privado da máquina." + "value": "Cloud VPN" } }, "ru": { "stringUnit": { "state": "translated", - "value": "cmux перенаправляет порты без Cloud VPN. Веб-браузерам и другим приложениям Mac нужен Cloud VPN, чтобы обращаться к службам, привязанным к частному адресу машины." + "value": "Cloud VPN" } }, "th": { "stringUnit": { "state": "translated", - "value": "cmux ส่งต่อพอร์ตได้โดยไม่ต้องใช้ Cloud VPN เว็บเบราว์เซอร์และแอป Mac อื่นๆ ต้องใช้ Cloud VPN เพื่อเข้าถึงบริการที่ผูกกับที่อยู่ส่วนตัวของเครื่อง" + "value": "Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux, portları Cloud VPN olmadan yönlendirir. Web tarayıcıları ve diğer Mac uygulamaları, makinenin özel adresine bağlı hizmetlere ulaşmak için Cloud VPN’e ihtiyaç duyar." + "value": "Cloud VPN" } }, "uk": { "stringUnit": { "state": "translated", - "value": "cmux перенаправляє порти без Cloud VPN. Веббраузерам та іншим застосункам Mac потрібен Cloud VPN, щоб звертатися до служб, прив’язаних до приватної адреси машини." + "value": "Cloud VPN" } } } }, - "cloudTree.ports.setupVPN": { + "cloud.vpn.setup.unavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Set Up VPN…" + "value": "This copy of cmux does not include a signed VPN extension. Use a cmux release with Cloud VPN support. Cloud terminals, Ports, and Desktop remain available without the VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "VPN einrichten…" + "value": "Diese cmux-Version enthält keine signierte VPN-Erweiterung. Verwenden Sie eine cmux-Version mit Cloud-VPN-Unterstützung. Cloud-Terminals, Ports und Desktop bleiben ohne VPN verfügbar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Configurer le VPN…" + "value": "Cette copie de cmux ne contient pas d’extension VPN signée. Utilisez une version de cmux qui prend en charge le VPN Cloud. Les terminaux Cloud, Ports et Bureau restent disponibles sans VPN." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "إعداد VPN…" + "value": "Esta copia de cmux no incluye una extensión VPN firmada. Usa una versión de cmux compatible con VPN de Cloud. Los terminales Cloud, Puertos y Escritorio siguen disponibles sin VPN." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Configurar VPN…" + "value": "このcmuxには署名済みのVPN機能拡張が含まれていません。Cloud VPN対応のcmuxリリースを使用してください。Cloudのターミナル、ポート、デスクトップはVPNなしでも使えます。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "設定 VPN…" + "value": "此 cmux 副本未包含已签名的 VPN 扩展。请使用支持 Cloud VPN 的 cmux 版本。Cloud 终端、端口和桌面无需 VPN 仍可使用。" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "设置 VPN…" + "value": "此 cmux 副本未包含已簽署的 VPN 延伸功能。請使用支援 Cloud VPN 的 cmux 版本。Cloud 終端機、連接埠和桌面不需要 VPN 仍可使用。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "VPN 설정…" + "value": "이 cmux에는 서명된 VPN 확장이 포함되어 있지 않습니다. Cloud VPN을 지원하는 cmux 릴리스를 사용하세요. Cloud 터미널, 포트 및 데스크탑은 VPN 없이도 사용할 수 있습니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "VPN を設定…" + "value": "لا تتضمن هذه النسخة من cmux امتداد VPN موقعًا. استخدم إصدار cmux يدعم VPN الخاص بـ Cloud. تظل طرفيات Cloud والمنافذ وسطح المكتب متاحة بدون VPN." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Postavi VPN…" + "value": "Ova kopija cmux-a nema potpisani VPN dodatak. Koristite cmux izdanje sa Cloud VPN podrškom. Cloud terminali, portovi i radna površina ostaju dostupni bez VPN-a." } }, "da": { "stringUnit": { "state": "translated", - "value": "Konfigurer VPN…" + "value": "Denne cmux-kopi indeholder ikke en signeret VPN-udvidelse. Brug en cmux-udgave med Cloud VPN-understøttelse. Cloud-terminaler, porte og skrivebord er stadig tilgængelige uden VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "Configura VPN…" + "value": "Questa copia di cmux non include un’estensione VPN firmata. Usa una versione di cmux con supporto Cloud VPN. Terminali Cloud, porte e desktop restano disponibili senza VPN." } }, "km": { "stringUnit": { "state": "translated", - "value": "រៀបចំ VPN…" + "value": "cmux ច្បាប់នេះមិនមានផ្នែកបន្ថែម VPN ដែលបានចុះហត្ថលេខាទេ។ ប្រើកំណែ cmux ដែលគាំទ្រ Cloud VPN។ Terminal, Ports និង Desktop របស់ Cloud នៅតែប្រើបានដោយគ្មាន VPN។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Konfigurer VPN…" + "value": "Denne cmux-kopien har ingen signert VPN-utvidelse. Bruk en cmux-versjon med Cloud VPN-støtte. Cloud-terminaler, porter og skrivebord er tilgjengelige uten VPN." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Skonfiguruj VPN…" + "value": "Ta kopia cmux nie zawiera podpisanego rozszerzenia VPN. Użyj wydania cmux z obsługą Cloud VPN. Terminale Cloud, porty i pulpit pozostają dostępne bez VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Configurar VPN…" + "value": "Esta cópia do cmux não inclui uma extensão VPN assinada. Use uma versão do cmux com suporte a Cloud VPN. Terminais Cloud, portas e área de trabalho continuam disponíveis sem VPN." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Настроить VPN…" + "value": "В этой копии cmux нет подписанного VPN-расширения. Используйте выпуск cmux с поддержкой Cloud VPN. Cloud-терминалы, порты и рабочий стол доступны без VPN." } }, "th": { "stringUnit": { "state": "translated", - "value": "ตั้งค่า VPN…" + "value": "cmux รุ่นนี้ไม่มีส่วนขยาย VPN ที่ลงนามแล้ว ใช้รุ่น cmux ที่รองรับ Cloud VPN เทอร์มินัล Cloud พอร์ต และเดสก์ท็อปยังใช้ได้โดยไม่ต้องมี VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "VPN’i Kur…" + "value": "Bu cmux kopyasında imzalı VPN uzantısı bulunmuyor. Cloud VPN destekli bir cmux sürümü kullanın. Cloud terminalleri, portlar ve masaüstü VPN olmadan da kullanılabilir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Налаштувати VPN…" + "value": "Ця копія cmux не містить підписаного VPN-розширення. Використовуйте випуск cmux із підтримкою Cloud VPN. Cloud-термінали, порти й робочий стіл доступні без VPN." } } } }, - "cloudTree.ports.stale": { + "cloud.vpn.setup.waiting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port list may be out of date" + "value": "Waiting" } }, "de": { "stringUnit": { "state": "translated", - "value": "Portliste möglicherweise veraltet" + "value": "Warten" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La liste des ports peut être obsolète" + "value": "En attente" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "قد تكون قائمة المنافذ قديمة" + "value": "En espera" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "La lista de puertos puede estar desactualizada" + "value": "待機中" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "連接埠清單可能已過時" + "value": "等待中" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "端口列表可能已过期" + "value": "等待中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 목록이 오래되었을 수 있음" + "value": "대기 중" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ポートリストが古い可能性があります" + "value": "قيد الانتظار" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lista portova je možda zastarjela" + "value": "Čekanje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Portlisten er muligvis forældet" + "value": "Venter" } }, "it": { "stringUnit": { "state": "translated", - "value": "L’elenco delle porte potrebbe non essere aggiornato" + "value": "In attesa" } }, "km": { "stringUnit": { "state": "translated", - "value": "បញ្ជីច្រកអាចហួសសម័យ" + "value": "កំពុងរង់ចាំ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Portlisten kan være utdatert" + "value": "Venter" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Lista portów może być nieaktualna" + "value": "Oczekiwanie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A lista de portas pode estar desatualizada" + "value": "Aguardando" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Список портов может быть устаревшим" + "value": "Ожидание" } }, "th": { "stringUnit": { "state": "translated", - "value": "รายการพอร์ตอาจไม่เป็นปัจจุบัน" + "value": "กำลังรอ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Port listesi güncel olmayabilir" + "value": "Bekliyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Список портів може бути застарілим" + "value": "Очікування" } } } }, - "cloudTree.ports.stale.detail": { + "cloudTree.ports.action.wake": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The last scan could not be refreshed. Listed services may have changed; refresh to check again. cmux forwarding does not need Cloud VPN." + "value": "Wake Machine" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der letzte Scan konnte nicht aktualisiert werden. Die aufgeführten Dienste könnten sich geändert haben. Aktualisieren Sie erneut. Die cmux-Weiterleitung benötigt kein Cloud-VPN." + "value": "Maschine aktivieren" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La dernière analyse n’a pas pu être actualisée. Les services listés peuvent avoir changé ; actualisez pour vérifier. Le transfert cmux ne nécessite pas de VPN Cloud." + "value": "Réveiller la machine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذر تحديث آخر فحص. ربما تغيرت الخدمات المدرجة؛ حدّث للفحص مجددًا. لا تحتاج إعادة توجيه cmux إلى Cloud VPN." + "value": "إيقاظ الجهاز" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo actualizar el último escaneo. Los servicios listados pueden haber cambiado; actualiza para comprobarlos. El reenvío de cmux no necesita Cloud VPN." + "value": "Activar máquina" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法重新整理上次掃描結果。列出的服務可能已變更;請重新整理以再次檢查。cmux 轉送不需要 Cloud VPN。" + "value": "喚醒機器" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法刷新上次扫描结果。列出的服务可能已更改;请刷新以再次检查。cmux 转发无需 Cloud VPN。" + "value": "唤醒机器" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마지막 검색 결과를 새로 고치지 못했습니다. 나열된 서비스가 변경되었을 수 있으니 새로 고쳐 확인하세요. cmux 전달에는 Cloud VPN이 필요하지 않습니다." + "value": "머신 깨우기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "前回のスキャンを更新できませんでした。表示されたサービスが変わっている可能性があります。更新して再確認してください。cmux の転送に Cloud VPN は不要です。" + "value": "マシンを起動" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Posljednje skeniranje nije se moglo osvježiti. Navedeni servisi su se možda promijenili; osvježite da ponovo provjerite. Prosljeđivanje u cmux-u ne treba Cloud VPN." + "value": "Probudi mašinu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den seneste scanning kunne ikke opdateres. De viste tjenester kan have ændret sig; opdater for at kontrollere igen. Videresendelse i cmux kræver ikke Cloud VPN." + "value": "Væk maskine" } }, "it": { "stringUnit": { "state": "translated", - "value": "Non è stato possibile aggiornare l’ultima scansione. I servizi elencati potrebbero essere cambiati; aggiorna per controllare di nuovo. L’inoltro di cmux non richiede la VPN Cloud." + "value": "Riattiva macchina" } }, "km": { "stringUnit": { "state": "translated", - "value": "មិនអាចផ្ទុកការស្កេនចុងក្រោយឡើងវិញបានទេ។ សេវាកម្មដែលបានរាយអាចបានផ្លាស់ប្តូរ; ផ្ទុកឡើងវិញដើម្បីពិនិត្យម្តងទៀត។ ការបញ្ជូនបន្តរបស់ cmux មិនត្រូវការ Cloud VPN ទេ។" + "value": "ដាស់ម៉ាស៊ីន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den siste skanningen kunne ikke oppdateres. De oppførte tjenestene kan ha endret seg; oppdater for å sjekke på nytt. Videresending i cmux trenger ikke Cloud VPN." + "value": "Vekk maskin" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nie udało się odświeżyć ostatniego skanowania. Wymienione usługi mogły się zmienić; odśwież, aby sprawdzić ponownie. Przekierowywanie w cmux nie wymaga Cloud VPN." + "value": "Wybudź maszynę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Não foi possível atualizar a última verificação. Os serviços listados podem ter mudado; atualize para verificar de novo. O encaminhamento do cmux não precisa do Cloud VPN." + "value": "Despertar máquina" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Не удалось обновить последнее сканирование. Перечисленные службы могли измениться; обновите, чтобы проверить снова. Перенаправлению cmux Cloud VPN не нужен." + "value": "Разбудить машину" } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่สามารถรีเฟรชการสแกนครั้งล่าสุดได้ บริการที่แสดงอาจเปลี่ยนไปแล้ว รีเฟรชเพื่อตรวจสอบอีกครั้ง การส่งต่อของ cmux ไม่ต้องใช้ Cloud VPN" + "value": "ปลุกเครื่อง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Son tarama yenilenemedi. Listelenen hizmetler değişmiş olabilir; yeniden denetlemek için yenileyin. cmux yönlendirmesi Cloud VPN gerektirmez." + "value": "Makineyi uyandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Не вдалося оновити останнє сканування. Перелічені служби могли змінитися; оновіть, щоб перевірити знову. Перенаправлення cmux не потребує Cloud VPN." + "value": "Розбудити машину" } } } }, - "cloudTree.ports.unavailable.detail": { + "cloudTree.ports.asleep.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The port scan failed; this does not mean no service is listening. Existing cmux ports may still work. Refresh to retry; Cloud VPN is not required." + "value": "Wake the machine to check its services. cmux’s in-app forwarding does not need Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Portscan ist fehlgeschlagen; das bedeutet nicht, dass kein Dienst lauscht. Vorhandene cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie; Cloud-VPN ist nicht erforderlich." + "value": "Aktivieren Sie die Maschine, um ihre Dienste zu prüfen. Die Weiterleitung in cmux benötigt kein Cloud-VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’analyse des ports a échoué ; cela ne signifie pas qu’aucun service n’écoute. Les ports cmux existants peuvent encore fonctionner. Actualisez pour réessayer ; le VPN Cloud n’est pas nécessaire." + "value": "Réveillez la machine pour vérifier ses services. Le transfert intégré à cmux ne nécessite pas de VPN Cloud." } }, "ar": { "stringUnit": { "state": "translated", - "value": "فشل فحص المنافذ؛ هذا لا يعني عدم وجود خدمة تستمع. قد تظل منافذ cmux الحالية تعمل. حدّث للمحاولة مجددًا؛ Cloud VPN غير مطلوب." + "value": "أيقظ الجهاز لفحص خدماته. لا تحتاج إعادة التوجيه داخل cmux إلى Cloud VPN." } }, "es": { "stringUnit": { "state": "translated", - "value": "Falló el escaneo de puertos; no significa que no haya servicios en escucha. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reintentar; Cloud VPN no es necesario." + "value": "Activa la máquina para comprobar sus servicios. El reenvío integrado de cmux no necesita Cloud VPN." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連接埠掃描失敗;這不代表沒有服務正在監聽。現有 cmux 連接埠可能仍可使用。請重新整理以重試;不需要 Cloud VPN。" + "value": "喚醒機器以檢查其服務。cmux 的應用程式內轉送不需要 Cloud VPN。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "端口扫描失败;这并不代表没有服务正在监听。现有 cmux 端口可能仍可使用。请刷新以重试;无需 Cloud VPN。" + "value": "唤醒机器以检查其服务。cmux 的应用内转发无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 검색이 실패했지만 수신 대기 서비스가 없다는 뜻은 아닙니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 시도하세요. Cloud VPN은 필요하지 않습니다." + "value": "머신을 깨워 서비스를 확인하세요. cmux 앱 내 전달에는 Cloud VPN이 필요하지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ポートスキャンが失敗しましたが、サービスが待ち受けていないとは限りません。既存の cmux ポートは引き続き動作する可能性があります。更新して再試行してください。Cloud VPN は不要です。" + "value": "マシンを起動してサービスを確認してください。cmux のアプリ内転送に Cloud VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Skeniranje portova nije uspjelo; to ne znači da nijedan servis ne sluša. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovni pokušaj; Cloud VPN nije potreban." + "value": "Probudite mašinu da provjerite njene servise. Prosljeđivanje unutar cmux-a ne treba Cloud VPN." } }, "da": { "stringUnit": { "state": "translated", - "value": "Portscanningen mislykkedes; det betyder ikke, at ingen tjeneste lytter. Eksisterende cmux-porte virker muligvis stadig. Opdater for at prøve igen; Cloud VPN er ikke påkrævet." + "value": "Væk maskinen for at kontrollere dens tjenester. Videresendelse i cmux kræver ikke Cloud VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "La scansione delle porte non è riuscita; ciò non significa che nessun servizio sia in ascolto. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riprovare; la VPN Cloud non è necessaria." + "value": "Riattiva la macchina per controllarne i servizi. L’inoltro all’interno di cmux non richiede la VPN Cloud." } }, "km": { "stringUnit": { "state": "translated", - "value": "ការស្កេនច្រកបានបរាជ័យ; នេះមិនមានន័យថាគ្មានសេវាកម្មណាកំពុងស្តាប់ទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីព្យាយាមម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" + "value": "ដាស់ម៉ាស៊ីនដើម្បីពិនិត្យសេវាកម្មរបស់វា។ ការបញ្ជូនបន្តនៅក្នុង cmux មិនត្រូវការ Cloud VPN ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Portskanningen mislyktes; det betyr ikke at ingen tjeneste lytter. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å prøve igjen; Cloud VPN er ikke nødvendig." + "value": "Vekk maskinen for å sjekke tjenestene. Videresending i cmux trenger ikke Cloud VPN." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Skanowanie portów nie powiodło się; nie oznacza to, że żadna usługa nie nasłuchuje. Istniejące porty cmux mogą nadal działać. Odśwież, aby spróbować ponownie; Cloud VPN nie jest wymagany." + "value": "Wybudź maszynę, aby sprawdzić jej usługi. Przekierowywanie w cmux nie wymaga Cloud VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A verificação de portas falhou; isso não significa que nenhum serviço esteja em escuta. As portas existentes do cmux ainda podem funcionar. Atualize para tentar de novo; o Cloud VPN não é necessário." + "value": "Desperte a máquina para verificar os serviços. O encaminhamento dentro do cmux não precisa do Cloud VPN." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сканирование портов не удалось; это не значит, что ни одна служба не прослушивает порты. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы повторить; Cloud VPN не требуется." + "value": "Разбудите машину, чтобы проверить её службы. Перенаправлению внутри cmux Cloud VPN не нужен." } }, "th": { "stringUnit": { "state": "translated", - "value": "การสแกนพอร์ตล้มเหลว ไม่ได้หมายความว่าไม่มีบริการที่กำลังรับฟัง พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อลองอีกครั้ง ไม่จำเป็นต้องใช้ Cloud VPN" + "value": "ปลุกเครื่องเพื่อตรวจสอบบริการ การส่งต่อภายใน cmux ไม่ต้องใช้ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Port taraması başarısız oldu; bu, dinleyen bir hizmet olmadığı anlamına gelmez. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden denemek için yenileyin; Cloud VPN gerekmez." + "value": "Hizmetlerini denetlemek için makineyi uyandırın. cmux içi yönlendirme Cloud VPN gerektirmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сканування портів не вдалося; це не означає, що жодна служба не прослуховує. Наявні порти cmux можуть і далі працювати. Оновіть, щоб повторити; Cloud VPN не потрібен." + "value": "Розбудіть машину, щоб перевірити її служби. Перенаправлення всередині cmux не потребує Cloud VPN." } } } }, - "cloudTree.ports.unsupported": { + "cloudTree.ports.available.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports are not supported by this provider." + "value": "Listening services" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ports werden von diesem Anbieter nicht unterstützt." + "value": "Lauschende Dienste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les ports ne sont pas pris en charge par ce fournisseur." + "value": "Services en écoute" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يدعم هذا الموفر المنافذ." + "value": "الخدمات المستمعة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Este proveedor no admite puertos." + "value": "Servicios en escucha" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此提供者不支援連接埠。" + "value": "監聽中的服務" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此提供商不支持端口。" + "value": "监听中的服务" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 제공자는 포트를 지원하지 않습니다." + "value": "수신 대기 서비스" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このプロバイダーはポートをサポートしていません。" + "value": "待ち受け中のサービス" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovaj pružalac ne podržava portove." + "value": "Servisi koji slušaju" } }, "da": { "stringUnit": { "state": "translated", - "value": "Porte understøttes ikke af denne udbyder." + "value": "Lyttende tjenester" } }, "it": { "stringUnit": { "state": "translated", - "value": "Le porte non sono supportate da questo provider." + "value": "Servizi in ascolto" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកផ្តល់សេវានេះមិនគាំទ្រច្រកទេ។" + "value": "សេវាកម្មដែលកំពុងស្តាប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Porter støttes ikke av denne leverandøren." + "value": "Lyttende tjenester" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ten dostawca nie obsługuje portów." + "value": "Nasłuchujące usługi" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Este provedor não oferece suporte a portas." + "value": "Serviços em escuta" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Этот провайдер не поддерживает порты." + "value": "Прослушивающие службы" } }, "th": { "stringUnit": { "state": "translated", - "value": "ผู้ให้บริการนี้ไม่รองรับพอร์ต" + "value": "บริการที่กำลังรับฟัง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sağlayıcı portları desteklemiyor." + "value": "Dinleyen hizmetler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Цей постачальник не підтримує порти." + "value": "Служби, що прослуховують" } } } }, - "cloudTree.ports.unsupported.detail": { + "cloudTree.ports.binding.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This provider has no supported in-app port route. Open a shell to access the service inside the machine. Cloud VPN does not add provider support." + "value": "cmux’s browser route connects to 127.0.0.1 on the machine. Bind the service to 127.0.0.1 or 0.0.0.0, then refresh. Turning on Cloud VPN does not change this route." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Anbieter unterstützt keine Portverbindung in der App. Öffnen Sie eine Shell, um innerhalb der Maschine auf den Dienst zuzugreifen. Cloud-VPN fügt keine Anbieterunterstützung hinzu." + "value": "Die Browser-Verbindung von cmux verwendet 127.0.0.1 auf der Maschine. Binden Sie den Dienst an 127.0.0.1 oder 0.0.0.0 und aktualisieren Sie. Cloud-VPN ändert diese Route nicht." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce fournisseur ne prend pas en charge les ports dans l’app. Ouvrez un shell pour accéder au service dans la machine. Le VPN Cloud n’ajoute pas cette prise en charge." + "value": "Le navigateur cmux se connecte à 127.0.0.1 sur la machine. Liez le service à 127.0.0.1 ou 0.0.0.0, puis actualisez. Activer le VPN Cloud ne change pas cette route." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يدعم هذا الموفر مسار منافذ داخل التطبيق. افتح صدفة للوصول إلى الخدمة داخل الجهاز. لا يضيف Cloud VPN دعمًا للموفر." + "value": "يتصل مسار متصفح cmux بالعنوان 127.0.0.1 على الجهاز. اربط الخدمة بالعنوان 127.0.0.1 أو 0.0.0.0 ثم حدّث. تشغيل Cloud VPN لا يغير هذا المسار." } }, "es": { "stringUnit": { "state": "translated", - "value": "Este proveedor no admite una ruta de puertos dentro de la app. Abre una shell para acceder al servicio dentro de la máquina. Cloud VPN no añade soporte al proveedor." + "value": "La ruta del navegador de cmux conecta a 127.0.0.1 en la máquina. Enlaza el servicio a 127.0.0.1 o 0.0.0.0 y actualiza. Activar Cloud VPN no cambia esta ruta." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此提供者不支援應用程式內連接埠路徑。請開啟 Shell 以在機器內存取服務。Cloud VPN 不會新增提供者支援。" + "value": "cmux 的瀏覽器路徑會連線到機器上的 127.0.0.1。請將服務繫結至 127.0.0.1 或 0.0.0.0 後重新整理。開啟 Cloud VPN 不會改變此路徑。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此提供商不支持应用内端口路由。请打开 Shell 以在机器内部访问服务。Cloud VPN 不会添加提供商支持。" + "value": "cmux 的浏览器路由连接到机器上的 127.0.0.1。请将服务绑定到 127.0.0.1 或 0.0.0.0 后刷新。开启 Cloud VPN 不会改变此路由。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 제공자는 앱 내 포트 경로를 지원하지 않습니다. 셸을 열어 머신 내부의 서비스에 접근하세요. Cloud VPN으로 제공자 지원이 추가되지는 않습니다." + "value": "cmux 브라우저 경로는 머신의 127.0.0.1에 연결합니다. 서비스를 127.0.0.1 또는 0.0.0.0에 바인딩한 후 새로 고치세요. Cloud VPN을 켜도 이 경로는 바뀌지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このプロバイダーはアプリ内のポート経路に対応していません。シェルを開き、マシン内でサービスにアクセスしてください。Cloud VPN を有効にしても対応は追加されません。" + "value": "cmux のブラウザはマシン上の 127.0.0.1 に接続します。サービスを 127.0.0.1 または 0.0.0.0 にバインドして更新してください。Cloud VPN を有効にしてもこの経路は変わりません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovaj pružalac nema podržanu rutu portova unutar aplikacije. Otvorite shell da pristupite servisu unutar mašine. Cloud VPN ne dodaje podršku pružaoca." + "value": "Ruta preglednika u cmux-u povezuje se na 127.0.0.1 na mašini. Vežite servis na 127.0.0.1 ili 0.0.0.0, zatim osvježite. Uključivanje Cloud VPN-a ne mijenja ovu rutu." } }, "da": { "stringUnit": { "state": "translated", - "value": "Denne udbyder har ingen understøttet portrute i appen. Åbn en shell for at få adgang til tjenesten inde i maskinen. Cloud VPN tilføjer ikke understøttelse for udbyderen." + "value": "cmux’ browserrute forbinder til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og opdater derefter. Aktivering af Cloud VPN ændrer ikke denne rute." } }, "it": { "stringUnit": { "state": "translated", - "value": "Questo provider non ha un percorso delle porte supportato nell’app. Apri una shell per accedere al servizio all’interno della macchina. La VPN Cloud non aggiunge il supporto del provider." + "value": "Il percorso del browser di cmux si connette a 127.0.0.1 sulla macchina. Associa il servizio a 127.0.0.1 o 0.0.0.0, quindi aggiorna. L’attivazione della VPN Cloud non modifica questo percorso." } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកផ្តល់សេវានេះគ្មានផ្លូវច្រកក្នុងកម្មវិធីដែលគាំទ្រទេ។ បើក shell ដើម្បីចូលប្រើសេវាកម្មនៅខាងក្នុងម៉ាស៊ីន។ Cloud VPN មិនបន្ថែមការគាំទ្រអ្នកផ្តល់សេវាទេ។" + "value": "ផ្លូវកម្មវិធីរុករករបស់ cmux ភ្ជាប់ទៅ 127.0.0.1 នៅលើម៉ាស៊ីន។ ចងសេវាកម្មទៅ 127.0.0.1 ឬ 0.0.0.0 រួចផ្ទុកឡើងវិញ។ ការបើក Cloud VPN មិនផ្លាស់ប្តូរផ្លូវនេះទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Denne leverandøren har ingen støttet portrute i appen. Åpne et skall for å få tilgang til tjenesten inne i maskinen. Cloud VPN legger ikke til støtte for leverandøren." + "value": "cmux sin nettleserrute kobler til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og oppdater deretter. Å slå på Cloud VPN endrer ikke denne ruten." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ten dostawca nie ma obsługiwanej trasy portów w aplikacji. Otwórz powłokę, aby uzyskać dostęp do usługi wewnątrz maszyny. Cloud VPN nie dodaje obsługi dostawcy." + "value": "Trasa przeglądarki cmux łączy się z 127.0.0.1 na maszynie. Powiąż usługę z 127.0.0.1 lub 0.0.0.0, a następnie odśwież. Włączenie Cloud VPN nie zmienia tej trasy." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Este provedor não tem uma rota de portas compatível no app. Abra um shell para acessar o serviço dentro da máquina. O Cloud VPN não adiciona suporte ao provedor." + "value": "A rota de navegador do cmux se conecta a 127.0.0.1 na máquina. Vincule o serviço a 127.0.0.1 ou 0.0.0.0 e atualize. Ativar o Cloud VPN não altera essa rota." } }, "ru": { "stringUnit": { "state": "translated", - "value": "У этого провайдера нет поддерживаемого маршрута портов в приложении. Откройте оболочку, чтобы получить доступ к службе внутри машины. Cloud VPN не добавляет поддержку провайдера." + "value": "Браузерный маршрут cmux подключается к 127.0.0.1 на машине. Привяжите службу к 127.0.0.1 или 0.0.0.0, затем обновите. Включение Cloud VPN не меняет этот маршрут." } }, "th": { "stringUnit": { "state": "translated", - "value": "ผู้ให้บริการนี้ไม่มีเส้นทางพอร์ตในแอปที่รองรับ เปิดเชลล์เพื่อเข้าถึงบริการภายในเครื่อง Cloud VPN ไม่ได้เพิ่มการรองรับผู้ให้บริการ" + "value": "เส้นทางเบราว์เซอร์ของ cmux เชื่อมต่อกับ 127.0.0.1 บนเครื่อง ผูกบริการกับ 127.0.0.1 หรือ 0.0.0.0 แล้วรีเฟรช การเปิด Cloud VPN ไม่ได้เปลี่ยนเส้นทางนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sağlayıcının desteklenen bir uygulama içi port yolu yok. Makinenin içindeki hizmete erişmek için bir kabuk açın. Cloud VPN sağlayıcı desteği eklemez." + "value": "cmux’un tarayıcı yolu makinedeki 127.0.0.1 adresine bağlanır. Hizmeti 127.0.0.1 veya 0.0.0.0 adresine bağlayın, ardından yenileyin. Cloud VPN’i açmak bu yolu değiştirmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Цей постачальник не має підтримуваного маршруту портів у застосунку. Відкрийте оболонку, щоб отримати доступ до служби всередині машини. Cloud VPN не додає підтримку постачальника." + "value": "Браузерний маршрут cmux підключається до 127.0.0.1 на машині. Прив’яжіть службу до 127.0.0.1 або 0.0.0.0, потім оновіть. Увімкнення Cloud VPN не змінює цей маршрут." } } } }, - "cloudTree.port.openInCmux": { + "cloudTree.ports.binding.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open in cmux" + "value": "Services use another interface" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "فتح في cmux" + "value": "Dienste verwenden eine andere Schnittstelle" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "In cmux öffnen" + "value": "Les services utilisent une autre interface" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تستخدم الخدمات واجهة أخرى" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir en cmux" + "value": "Los servicios usan otra interfaz" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ouvrir dans cmux" + "value": "服務使用其他介面" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmuxで開く" + "value": "服务使用其他接口" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux에서 열기" + "value": "서비스가 다른 인터페이스를 사용함" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "在 cmux 中打开" + "value": "サービスが別のインターフェイスを使用しています" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "在 cmux 中開啟" + "value": "Servisi koriste drugi interfejs" } - } - } - }, - "cloudTree.port.openInCmux.help": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Open in cmux. No VPN setup needed." + "value": "Tjenester bruger en anden grænseflade" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "افتح في cmux. لا يلزم إعداد VPN." + "value": "I servizi usano un’altra interfaccia" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "In cmux öffnen. Keine VPN-Einrichtung nötig." + "value": "សេវាកម្មប្រើចំណុចប្រទាក់ផ្សេង" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Abrir en cmux. No hace falta configurar una VPN." + "value": "Tjenester bruker et annet grensesnitt" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Ouvrir dans cmux. Aucune configuration VPN nécessaire." + "value": "Usługi używają innego interfejsu" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "cmux で開きます。VPN の設定は不要です。" + "value": "Os serviços usam outra interface" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "cmux에서 열기. VPN 설정이 필요하지 않습니다." + "value": "Службы используют другой интерфейс" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "在 cmux 中打开。无需设置 VPN。" + "value": "บริการใช้อินเทอร์เฟซอื่น" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "在 cmux 中開啟。無需設定 VPN。" + "value": "Hizmetler başka bir arabirim kullanıyor" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Служби використовують інший інтерфейс" } } } }, - "cloudTree.port.title": { + "cloudTree.ports.empty.noService": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port %@" + "value": "Start a web server on this machine, then refresh." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "المنفذ %@" + "value": "Starte einen Webserver auf diesem Rechner und aktualisiere dann die Liste." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Port-Nr. %@" + "value": "Démarrez un serveur web sur cette machine, puis actualisez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "شغّل خادم ويب على هذا الجهاز، ثم حدّث القائمة." } }, "es": { "stringUnit": { "state": "translated", - "value": "Puerto %@" + "value": "Inicia un servidor web en esta máquina y luego actualiza." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Port n° %@" + "value": "在這台機器上啟動網頁伺服器,然後重新整理。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ポート %@" + "value": "在此机器上启动网页服务器,然后刷新。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 %@" + "value": "이 머신에서 웹 서버를 시작한 다음 새로 고치세요." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "端口 %@" + "value": "このマシンで Web サーバーを起動してから、更新してください。" } }, - "zh-Hant": { + "bs": { "stringUnit": { - "state": "translated", - "value": "連接埠 %@" + "state": "needs_review", + "value": "Pokrenite web server na ovoj mašini, zatim osvježite." } - } - } - }, - "cloudTree.placeholder.deviceOffline": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { - "state": "translated", - "value": "Offline — its workspaces return when it does" + "state": "needs_review", + "value": "Start en webserver på denne maskine, og opdater derefter." } }, - "ar": { + "it": { "stringUnit": { - "state": "translated", - "value": "غير متصل — ستعود مساحات عمله عند اتصاله مجددًا" + "state": "needs_review", + "value": "Avvia un server web su questa macchina, poi aggiorna." } }, - "de": { + "km": { "stringUnit": { - "state": "translated", - "value": "Offline — die Arbeitsbereiche erscheinen wieder, sobald das Gerät online ist" + "state": "needs_review", + "value": "ចាប់ផ្តើមម៉ាស៊ីនមេបណ្តាញនៅលើម៉ាស៊ីននេះ រួចផ្ទុកឡើងវិញ។" } }, - "es": { + "nb": { "stringUnit": { - "state": "translated", - "value": "Sin conexión — sus espacios de trabajo volverán cuando se conecte" + "state": "needs_review", + "value": "Start en webserver på denne maskinen, og oppdater deretter." } }, - "fr": { + "pl": { "stringUnit": { - "state": "translated", - "value": "Hors ligne — ses espaces de travail réapparaîtront à sa reconnexion" + "state": "needs_review", + "value": "Uruchom serwer WWW na tej maszynie, a następnie odśwież." } }, - "ja": { + "pt-BR": { "stringUnit": { - "state": "translated", - "value": "オフライン — 再接続するとワークスペースが戻ります" + "state": "needs_review", + "value": "Inicie um servidor web nesta máquina e atualize." } }, - "ko": { + "ru": { "stringUnit": { - "state": "translated", - "value": "오프라인 — 다시 연결되면 작업 공간이 돌아옵니다" + "state": "needs_review", + "value": "Запустите веб-сервер на этой машине, затем обновите список." } }, - "zh-Hans": { + "th": { "stringUnit": { - "state": "translated", - "value": "离线 — 重新连接后会恢复工作区" + "state": "needs_review", + "value": "เริ่มเว็บเซิร์ฟเวอร์บนเครื่องนี้ แล้วรีเฟรช" } }, - "zh-Hant": { + "tr": { "stringUnit": { - "state": "translated", - "value": "離線 — 重新連線後會恢復工作區" + "state": "needs_review", + "value": "Bu makinede bir web sunucusu başlatın, ardından yenileyin." + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Запустіть вебсервер на цій машині, а потім оновіть список." } } } }, - "cloud.vpn.setup.heading": { + "cloudTree.ports.hub.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Use Cloud machines from any app" + "value": "This build cannot start cmux’s authenticated Cloud forward. Update cmux, then retry." } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen aus jeder App verwenden" + "value": "Dieser Build kann die authentifizierte Cloud-Weiterleitung von cmux nicht starten. Aktualisieren Sie cmux und versuchen Sie es erneut." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utiliser les machines Cloud depuis toute app" + "value": "Cette version ne peut pas démarrer le transfert Cloud authentifié de cmux. Mettez cmux à jour, puis réessayez." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Usar máquinas Cloud desde cualquier app" + "value": "لا يمكن لهذا الإصدار بدء إعادة توجيه Cloud الموثّقة من cmux. حدّث cmux ثم أعد المحاولة." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "ほかのアプリからCloudマシンを使う" + "value": "Esta compilación no puede iniciar el reenvío autenticado de Cloud de cmux. Actualiza cmux y vuelve a intentarlo." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "从任何应用使用 Cloud 机器" + "value": "此版本無法啟動 cmux 的已驗證 Cloud 轉送。請更新 cmux 後重試。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "從任何 App 使用 Cloud 機器" + "value": "此版本无法启动 cmux 的已验证 Cloud 转发。请更新 cmux 后重试。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 앱에서 Cloud 머신 사용" + "value": "이 빌드에서는 cmux 인증 Cloud 전달을 시작할 수 없습니다. cmux를 업데이트한 후 다시 시도하세요." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "استخدام أجهزة Cloud من أي تطبيق" + "value": "このビルドでは cmux の認証済み Cloud 転送を開始できません。cmux を更新して再試行してください。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Koristite Cloud mašine iz bilo koje aplikacije" + "value": "Ova verzija ne može pokrenuti autentificirano Cloud prosljeđivanje cmux-a. Ažurirajte cmux, zatim pokušajte ponovo." } }, "da": { "stringUnit": { "state": "translated", - "value": "Brug Cloud-maskiner fra alle apps" + "value": "Denne build kan ikke starte cmux’ godkendte Cloud-videresendelse. Opdater cmux, og prøv igen." } }, "it": { "stringUnit": { "state": "translated", - "value": "Usa le macchine Cloud da qualsiasi app" + "value": "Questa build non può avviare l’inoltro Cloud autenticato di cmux. Aggiorna cmux, quindi riprova." } }, "km": { "stringUnit": { "state": "translated", - "value": "ប្រើម៉ាស៊ីន Cloud ពីកម្មវិធីណាមួយ" + "value": "កំណែនេះមិនអាចចាប់ផ្តើមការបញ្ជូនបន្ត Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux បានទេ។ ធ្វើបច្ចុប្បន្នភាព cmux រួចព្យាយាមម្តងទៀត។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Bruk Cloud-maskiner fra alle apper" + "value": "Denne versjonen kan ikke starte cmux sin autentiserte Cloud-videresending. Oppdater cmux, og prøv igjen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Używaj maszyn Cloud z dowolnej aplikacji" + "value": "Ta kompilacja nie może uruchomić uwierzytelnionego przekierowania Cloud w cmux. Zaktualizuj cmux i spróbuj ponownie." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Use máquinas Cloud em qualquer app" + "value": "Esta versão não consegue iniciar o encaminhamento Cloud autenticado do cmux. Atualize o cmux e tente novamente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Используйте Cloud-машины из любого приложения" + "value": "Эта сборка не может запустить аутентифицированное перенаправление Cloud в cmux. Обновите cmux и повторите попытку." } }, "th": { "stringUnit": { "state": "translated", - "value": "ใช้เครื่อง Cloud จากทุกแอป" + "value": "บิลด์นี้ไม่สามารถเริ่มการส่งต่อ Cloud ที่ยืนยันตัวตนแล้วของ cmux ได้ อัปเดต cmux แล้วลองอีกครั้ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cloud makinelerini her uygulamadan kullanın" + "value": "Bu derleme cmux’un kimliği doğrulanmış Cloud yönlendirmesini başlatamıyor. cmux’u güncelleyin, ardından yeniden deneyin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Використовуйте Cloud-машини з будь-якої програми" + "value": "Ця збірка не може запустити автентифіковане перенаправлення Cloud у cmux. Оновіть cmux і повторіть спробу." } } } }, - "cloud.vpn.setup.subtitle": { + "cloudTree.ports.link.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional access to each VM's private address and original ports, such as 10.40.0.10:3000." + "value": "Port discovery could not connect to this machine. Existing cmux ports may still work. Refresh to reconnect; Cloud VPN is not required." } }, "de": { "stringUnit": { "state": "translated", - "value": "Optionaler Zugriff auf die private Adresse und die ursprünglichen Ports jeder VM, etwa 10.40.0.10:3000." + "value": "Die Porterkennung konnte diese Maschine nicht erreichen. Bereits geöffnete cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie zum erneuten Verbinden; Cloud-VPN ist nicht erforderlich." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Accès facultatif à chaque adresse privée et aux ports d’origine des VM, comme 10.40.0.10:3000." + "value": "La découverte des ports n’a pas pu se connecter à cette machine. Les ports cmux existants peuvent encore fonctionner. Actualisez pour reconnecter ; le VPN Cloud n’est pas nécessaire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Acceso opcional a la dirección privada y los puertos originales de cada VM, como 10.40.0.10:3000." + "value": "تعذر اتصال اكتشاف المنافذ بهذا الجهاز. قد تظل منافذ cmux الحالية تعمل. حدّث لإعادة الاتصال؛ Cloud VPN غير مطلوب." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "各VMのプライベートアドレスと元のポート(例:10.40.0.10:3000)にアクセスするための任意の設定です。" + "value": "El descubrimiento de puertos no pudo conectar con esta máquina. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reconectar; Cloud VPN no es necesario." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "可选设置,用于访问每台 VM 的私有地址和原始端口,例如 10.40.0.10:3000。" + "value": "連接埠探索無法連線到此機器。現有 cmux 連接埠可能仍可使用。請重新整理以重新連線;不需要 Cloud VPN。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "選用設定,可存取每台 VM 的私有位址和原始連接埠,例如 10.40.0.10:3000。" + "value": "端口发现无法连接到此机器。现有 cmux 端口可能仍可使用。请刷新以重新连接;无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "각 VM의 비공개 주소와 원래 포트(예: 10.40.0.10:3000)에 접근하기 위한 선택 설정입니다." + "value": "포트 검색이 이 머신에 연결하지 못했습니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 연결하세요. Cloud VPN은 필요하지 않습니다." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "وصول اختياري إلى العنوان الخاص والمنافذ الأصلية لكل جهاز افتراضي، مثل 10.40.0.10:3000." + "value": "ポート検出がこのマシンに接続できませんでした。既存の cmux ポートは引き続き動作する可能性があります。更新して再接続してください。Cloud VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Opcionalni pristup privatnoj adresi i izvornim portovima svake VM, na primjer 10.40.0.10:3000." + "value": "Otkrivanje portova nije se moglo povezati s ovom mašinom. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovno povezivanje; Cloud VPN nije potreban." } }, "da": { "stringUnit": { "state": "translated", - "value": "Valgfri adgang til hver VM’s private adresse og oprindelige porte, f.eks. 10.40.0.10:3000." + "value": "Portregistrering kunne ikke oprette forbindelse til denne maskine. Eksisterende cmux-porte virker muligvis stadig. Opdater for at genoprette forbindelsen; Cloud VPN er ikke påkrævet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Accesso facoltativo all’indirizzo privato e alle porte originali di ogni VM, ad esempio 10.40.0.10:3000." + "value": "Il rilevamento delle porte non è riuscito a connettersi a questa macchina. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riconnetterti; la VPN Cloud non è necessaria." } }, "km": { "stringUnit": { "state": "translated", - "value": "ចូលប្រើអាសយដ្ឋានឯកជន និងច្រកដើមរបស់ VM នីមួយៗ ដូចជា 10.40.0.10:3000 ជាជម្រើស។" + "value": "ការស្វែងរកច្រកមិនអាចភ្ជាប់ទៅម៉ាស៊ីននេះបានទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីភ្ជាប់ម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Valgfri tilgang til hver VMs private adresse og opprinnelige porter, som 10.40.0.10:3000." + "value": "Portoppdagelse kunne ikke koble til denne maskinen. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å koble til på nytt; Cloud VPN er ikke nødvendig." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opcjonalny dostęp do prywatnego adresu i oryginalnych portów każdej maszyny VM, na przykład 10.40.0.10:3000." + "value": "Wykrywanie portów nie mogło połączyć się z tą maszyną. Istniejące porty cmux mogą nadal działać. Odśwież, aby połączyć ponownie; Cloud VPN nie jest wymagany." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Acesso opcional ao endereço privado e às portas originais de cada VM, como 10.40.0.10:3000." + "value": "A descoberta de portas não conseguiu se conectar a esta máquina. As portas existentes do cmux ainda podem funcionar. Atualize para reconectar; o Cloud VPN não é necessário." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Необязательный доступ к частному адресу и исходным портам каждой VM, например 10.40.0.10:3000." + "value": "Обнаружению портов не удалось подключиться к этой машине. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы переподключиться; Cloud VPN не требуется." } }, "th": { "stringUnit": { "state": "translated", - "value": "การเข้าถึงที่ไม่บังคับไปยังที่อยู่ส่วนตัวและพอร์ตเดิมของ VM แต่ละเครื่อง เช่น 10.40.0.10:3000" + "value": "การค้นหาพอร์ตไม่สามารถเชื่อมต่อกับเครื่องนี้ได้ พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อเชื่อมต่อใหม่ ไม่จำเป็นต้องใช้ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Her VM’nin özel adresine ve özgün bağlantı noktalarına isteğe bağlı erişim; örneğin 10.40.0.10:3000." + "value": "Port keşfi bu makineye bağlanamadı. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden bağlanmak için yenileyin; Cloud VPN gerekmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Необов’язковий доступ до приватної адреси та початкових портів кожної VM, наприклад 10.40.0.10:3000." + "value": "Виявленню портів не вдалося підключитися до цієї машини. Наявні порти cmux можуть і далі працювати. Оновіть, щоб підключитися знову; Cloud VPN не потрібен." } } } }, - "cloud.vpn.setup.howItWorks.title": { + "cloudTree.ports.link.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "How it works" + "value": "Cloud link unavailable" } }, "de": { "stringUnit": { "state": "translated", - "value": "So funktioniert es" + "value": "Cloud-Verbindung nicht verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fonctionnement" + "value": "Connexion Cloud indisponible" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cómo funciona" + "value": "اتصال Cloud غير متاح" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "仕組み" + "value": "Conexión de Cloud no disponible" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作原理" + "value": "Cloud 連線無法使用" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "運作方式" + "value": "Cloud 连接不可用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작동 방식" + "value": "Cloud 연결을 사용할 수 없음" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "طريقة العمل" + "value": "Cloud 接続を利用できません" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kako radi" + "value": "Cloud veza nije dostupna" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sådan fungerer det" + "value": "Cloud-forbindelse utilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Come funziona" + "value": "Collegamento Cloud non disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "របៀបដំណើរការ" + "value": "តំណ Cloud មិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slik fungerer det" + "value": "Cloud-tilkobling utilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Jak to działa" + "value": "Połączenie Cloud niedostępne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Como funciona" + "value": "Conexão Cloud indisponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Как это работает" + "value": "Связь с Cloud недоступна" } }, "th": { "stringUnit": { "state": "translated", - "value": "วิธีการทำงาน" + "value": "ลิงก์ Cloud ไม่พร้อมใช้งาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Nasıl çalışır" + "value": "Cloud bağlantısı kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Як це працює" + "value": "Зв’язок із Cloud недоступний" } } } }, - "cloud.vpn.setup.status.off": { + "cloudTree.ports.loading.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Off. Your Cloud panes continue to work through cmux's built-in route." + "value": "Checking services through cmux’s authenticated Cloud link. No system VPN is needed." } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus. Ihre Cloud-Bereiche funktionieren weiterhin über die integrierte Verbindung von cmux." + "value": "Dienste werden über die authentifizierte Cloud-Verbindung von cmux geprüft. Ein System-VPN ist nicht erforderlich." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désactivé. Vos volets Cloud continuent de fonctionner via la connexion intégrée de cmux." + "value": "Vérification des services via la connexion Cloud authentifiée de cmux. Aucun VPN système n’est nécessaire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Desactivada. Tus paneles Cloud siguen funcionando mediante la conexión integrada de cmux." + "value": "جارٍ فحص الخدمات عبر اتصال Cloud الموثّق من cmux. لا حاجة إلى VPN النظام." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "オフ。Cloudペインは引き続きcmux内蔵の接続経路で動作します。" + "value": "Comprobando servicios mediante la conexión autenticada de Cloud de cmux. No se necesita una VPN del sistema." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已关闭。Cloud 面板仍通过 cmux 内置连接工作。" + "value": "正在透過 cmux 的已驗證 Cloud 連線檢查服務。不需要系統 VPN。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已關閉。Cloud 面板仍透過 cmux 內建連線運作。" + "value": "正在通过 cmux 的已验证 Cloud 连接检查服务。无需系统 VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꺼짐. Cloud 패널은 cmux의 내장 연결을 통해 계속 작동합니다." + "value": "cmux의 인증된 Cloud 연결로 서비스를 확인하고 있습니다. 시스템 VPN은 필요하지 않습니다." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "متوقف. تستمر لوحات Cloud في العمل عبر اتصال cmux المضمن." + "value": "cmux の認証済み Cloud 接続でサービスを確認しています。システム VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Isključeno. Cloud paneli i dalje rade preko ugrađene cmux veze." + "value": "Provjera servisa putem autentificirane Cloud veze cmux-a. Sistemski VPN nije potreban." } }, "da": { "stringUnit": { "state": "translated", - "value": "Fra. Dine Cloud-paneler fungerer stadig via cmux’ indbyggede forbindelse." + "value": "Kontrollerer tjenester via cmux’ godkendte Cloud-forbindelse. Der kræves ingen system-VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "Disattivata. I pannelli Cloud continuano a funzionare tramite la connessione integrata di cmux." + "value": "Controllo dei servizi tramite il collegamento Cloud autenticato di cmux. Non serve una VPN di sistema." } }, "km": { "stringUnit": { "state": "translated", - "value": "បិទ។ ផ្ទាំង Cloud របស់អ្នកនៅតែដំណើរការតាមការភ្ជាប់ដែលមានស្រាប់របស់ cmux។" + "value": "កំពុងពិនិត្យសេវាកម្មតាមរយៈតំណ Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux។ មិនត្រូវការ VPN របស់ប្រព័ន្ធទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Av. Cloud-panelene dine fortsetter å fungere gjennom cmux sin innebygde forbindelse." + "value": "Sjekker tjenester via cmux sin autentiserte Cloud-tilkobling. Ingen system-VPN er nødvendig." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyłączona. Panele Cloud nadal działają przez wbudowane połączenie cmux." + "value": "Sprawdzanie usług przez uwierzytelnione połączenie Cloud w cmux. Systemowa sieć VPN nie jest potrzebna." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desativada. Seus painéis Cloud continuam funcionando pela conexão integrada do cmux." + "value": "Verificando serviços pela conexão Cloud autenticada do cmux. Nenhuma VPN do sistema é necessária." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выключено. Панели Cloud продолжают работать через встроенное соединение cmux." + "value": "Проверка служб через аутентифицированную связь cmux с Cloud. Системный VPN не нужен." } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดอยู่ แผง Cloud ยังคงทำงานผ่านการเชื่อมต่อในตัวของ cmux" + "value": "กำลังตรวจสอบบริการผ่านลิงก์ Cloud ที่ยืนยันตัวตนแล้วของ cmux ไม่ต้องใช้ VPN ของระบบ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kapalı. Cloud panelleriniz cmux’un yerleşik bağlantısıyla çalışmaya devam eder." + "value": "Hizmetler cmux’un kimliği doğrulanmış Cloud bağlantısı üzerinden denetleniyor. Sistem VPN’i gerekmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вимкнено. Панелі Cloud продовжують працювати через вбудоване з’єднання cmux." + "value": "Перевірка служб через автентифікований зв’язок cmux із Cloud. Системний VPN не потрібен." } } } }, - "cloud.vpn.setup.steps.title": { + "cloudTree.ports.loopback.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "First-time setup" + "value": "These services open in cmux without Cloud VPN. They listen on the machine’s loopback address, so other apps cannot reach them through its private IP, even with VPN connected." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ersteinrichtung" + "value": "Diese Dienste lassen sich in cmux ohne Cloud-VPN öffnen. Sie lauschen auf der Loopback-Adresse der Maschine. Andere Apps erreichen sie daher auch mit VPN nicht über deren private IP." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Première configuration" + "value": "Ces services s’ouvrent dans cmux sans VPN Cloud. Ils écoutent sur l’adresse locale de la machine : les autres apps ne peuvent pas y accéder via son IP privée, même avec le VPN." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Configuración inicial" + "value": "تُفتح هذه الخدمات داخل cmux دون Cloud VPN. وهي تستمع على عنوان الواجهة المحلية للجهاز، لذا لا تستطيع التطبيقات الأخرى الوصول إليها عبر عنوان IP الخاص به حتى مع اتصال VPN." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "初回設定" + "value": "Estos servicios se abren en cmux sin Cloud VPN. Escuchan en la dirección de bucle local de la máquina, por lo que otras apps no pueden acceder por su IP privada, incluso con la VPN conectada." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "首次设置" + "value": "這些服務可在 cmux 中開啟,不需要 Cloud VPN。它們在機器的迴路位址上監聽,因此即使已連線 VPN,其他 App 也無法透過其私人 IP 存取。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "首次設定" + "value": "这些服务可在 cmux 中打开,无需 Cloud VPN。它们监听机器的回环地址,因此即使已连接 VPN,其他应用也无法通过其专用 IP 访问。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최초 설정" + "value": "이 서비스는 Cloud VPN 없이 cmux에서 열립니다. 머신의 루프백 주소에서 수신 대기하므로 VPN에 연결해도 다른 앱은 비공개 IP로 접근할 수 없습니다." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "الإعداد الأولي" + "value": "これらのサービスは Cloud VPN なしで cmux から開けます。マシンのループバックアドレスで待ち受けるため、VPN 接続中でも他のアプリからプライベート IP 経由ではアクセスできません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prvo podešavanje" + "value": "Ovi servisi se otvaraju u cmux-u bez Cloud VPN-a. Slušaju na loopback adresi mašine, pa ih druge aplikacije ne mogu dosegnuti preko njene privatne IP adrese, čak ni uz povezan VPN." } }, "da": { "stringUnit": { "state": "translated", - "value": "Første opsætning" + "value": "Disse tjenester åbnes i cmux uden Cloud VPN. De lytter på maskinens loopback-adresse, så andre apps kan ikke nå dem via dens private IP, heller ikke med VPN forbundet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Prima configurazione" + "value": "Questi servizi si aprono in cmux senza VPN Cloud. Sono in ascolto sull’indirizzo di loopback della macchina, quindi le altre app non possono raggiungerli tramite il suo IP privato, nemmeno con la VPN connessa." } }, "km": { "stringUnit": { "state": "translated", - "value": "ការរៀបចំលើកដំបូង" + "value": "សេវាកម្មទាំងនេះបើកនៅក្នុង cmux ដោយមិនត្រូវការ Cloud VPN។ ពួកវាស្តាប់នៅលើអាសយដ្ឋាន loopback របស់ម៉ាស៊ីន ដូច្នេះកម្មវិធីផ្សេងទៀតមិនអាចចូលដល់ពួកវាតាមរយៈ IP ឯកជនរបស់វាបានទេ ទោះបីភ្ជាប់ VPN ក៏ដោយ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Førstegangsoppsett" + "value": "Disse tjenestene åpnes i cmux uten Cloud VPN. De lytter på maskinens loopback-adresse, så andre apper kan ikke nå dem via den private IP-adressen, selv med VPN tilkoblet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pierwsza konfiguracja" + "value": "Te usługi otwierają się w cmux bez Cloud VPN. Nasłuchują na adresie pętli zwrotnej maszyny, więc inne aplikacje nie mogą do nich dotrzeć przez jej prywatny adres IP, nawet przy połączonym VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Primeira configuração" + "value": "Esses serviços abrem no cmux sem o Cloud VPN. Eles escutam no endereço de loopback da máquina, então outros apps não conseguem alcançá-los pelo IP privado dela, mesmo com a VPN conectada." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Первая настройка" + "value": "Эти службы открываются в cmux без Cloud VPN. Они прослушивают loopback-адрес машины, поэтому другие приложения не могут обратиться к ним через её частный IP даже при подключённом VPN." } }, "th": { "stringUnit": { "state": "translated", - "value": "การตั้งค่าครั้งแรก" + "value": "บริการเหล่านี้เปิดใน cmux ได้โดยไม่ต้องใช้ Cloud VPN บริการรับฟังบนที่อยู่ loopback ของเครื่อง แอปอื่นจึงเข้าถึงผ่าน IP ส่วนตัวของเครื่องไม่ได้ แม้จะเชื่อมต่อ VPN แล้วก็ตาม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İlk kurulum" + "value": "Bu hizmetler cmux’ta Cloud VPN olmadan açılır. Makinenin geri döngü adresinde dinledikleri için diğer uygulamalar, VPN bağlıyken bile makinenin özel IP’si üzerinden onlara ulaşamaz." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перше налаштування" + "value": "Ці служби відкриваються в cmux без Cloud VPN. Вони прослуховують loopback-адресу машини, тому інші застосунки не можуть дістатися до них через її приватну IP-адресу, навіть із підключеним VPN." } } } }, - "cloud.vpn.setup.steps.extension": { + "cloudTree.ports.loopback.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "1. Click Connect Cloud VPN. When macOS asks, allow the cmux network extension in System Settings." + "value": "Loopback services available" } }, "de": { "stringUnit": { "state": "translated", - "value": "1. Klicken Sie auf Cloud-VPN verbinden. Erlauben Sie auf Aufforderung von macOS die cmux-Netzwerkerweiterung in den Systemeinstellungen." + "value": "Loopback-Dienste verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "1. Cliquez sur Connecter le VPN Cloud. Lorsque macOS le demande, autorisez l’extension réseau cmux dans Réglages Système." + "value": "Services locaux disponibles" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "1. Haz clic en Conectar VPN de Cloud. Cuando macOS lo solicite, permite la extensión de red de cmux en Ajustes del Sistema." + "value": "خدمات الواجهة المحلية متاحة" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "1. 「Cloud VPNに接続」をクリックします。macOSに求められたら、システム設定でcmuxのネットワーク機能拡張を許可します。" + "value": "Servicios de bucle local disponibles" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "1. 点击“连接 Cloud VPN”。macOS 提示时,在系统设置中允许 cmux 网络扩展。" + "value": "可使用迴路服務" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "1. 按一下「連接 Cloud VPN」。macOS 提示時,請在系統設定中允許 cmux 網路延伸功能。" + "value": "回环服务可用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "1. Cloud VPN 연결을 클릭합니다. macOS에서 요청하면 시스템 설정에서 cmux 네트워크 확장을 허용합니다." + "value": "루프백 서비스 사용 가능" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "1. انقر على توصيل VPN الخاص بـ Cloud. عندما يطلب macOS ذلك، اسمح بامتداد شبكة cmux في إعدادات النظام." + "value": "ループバックのサービスを利用できます" } }, "bs": { "stringUnit": { "state": "translated", - "value": "1. Kliknite Poveži Cloud VPN. Kada macOS zatraži, dozvolite cmux mrežni dodatak u Postavkama sistema." + "value": "Dostupni loopback servisi" } }, "da": { "stringUnit": { "state": "translated", - "value": "1. Klik på Forbind Cloud VPN. Når macOS spørger, skal du tillade cmux-netværksudvidelsen i Systemindstillinger." + "value": "Loopback-tjenester tilgængelige" } }, "it": { "stringUnit": { "state": "translated", - "value": "1. Fai clic su Connetti VPN Cloud. Quando macOS lo richiede, consenti l’estensione di rete cmux nelle Impostazioni di Sistema." + "value": "Servizi di loopback disponibili" } }, "km": { "stringUnit": { "state": "translated", - "value": "1. ចុច ភ្ជាប់ Cloud VPN។ ពេល macOS ស្នើ សូមអនុញ្ញាតផ្នែកបន្ថែមបណ្តាញ cmux ក្នុងការកំណត់ប្រព័ន្ធ។" + "value": "មានសេវាកម្ម loopback" } }, "nb": { "stringUnit": { "state": "translated", - "value": "1. Klikk Koble til Cloud VPN. Når macOS spør, tillat cmux-nettverksutvidelsen i Systeminnstillinger." + "value": "Loopback-tjenester tilgjengelige" } }, "pl": { "stringUnit": { "state": "translated", - "value": "1. Kliknij Połącz z Cloud VPN. Gdy macOS poprosi, zezwól na rozszerzenie sieci cmux w Ustawieniach systemowych." + "value": "Dostępne usługi pętli zwrotnej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "1. Clique em Conectar Cloud VPN. Quando o macOS pedir, permita a extensão de rede do cmux nos Ajustes do Sistema." + "value": "Serviços de loopback disponíveis" } }, "ru": { "stringUnit": { "state": "translated", - "value": "1. Нажмите Подключить Cloud VPN. Когда macOS попросит, разрешите сетевое расширение cmux в системных настройках." + "value": "Доступны loopback-службы" } }, "th": { "stringUnit": { "state": "translated", - "value": "1. คลิก เชื่อมต่อ Cloud VPN เมื่อ macOS ขอ ให้อนุญาตส่วนขยายเครือข่าย cmux ในการตั้งค่าระบบ" + "value": "มีบริการ loopback พร้อมใช้งาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "1. Cloud VPN’e bağlan’a tıklayın. macOS istediğinde Sistem Ayarları’nda cmux ağ uzantısına izin verin." + "value": "Geri döngü hizmetleri kullanılabilir" } }, "uk": { "stringUnit": { "state": "translated", - "value": "1. Натисніть Підключити Cloud VPN. Коли macOS попросить, дозвольте мережеве розширення cmux у Системних параметрах." + "value": "Доступні loopback-служби" } } } }, - "cloud.vpn.setup.steps.settings": { + "cloudTree.ports.notRequested.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open General > Login Items & Extensions > Network Extensions, then enable cmux." + "value": "Ports not checked yet" } }, "de": { "stringUnit": { "state": "translated", - "value": "Öffnen Sie Allgemein > Anmeldeobjekte & Erweiterungen > Netzwerkerweiterungen und aktivieren Sie cmux." + "value": "Ports noch nicht geprüft" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrez Général > Ouverture et extensions > Extensions réseau, puis activez cmux." + "value": "Ports pas encore vérifiés" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abre General > Ítems de inicio y extensiones > Extensiones de red y activa cmux." + "value": "لم يتم فحص المنافذ بعد" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "「一般」>「ログイン項目と機能拡張」>「ネットワーク機能拡張」を開き、cmuxを有効にします。" + "value": "Puertos aún sin comprobar" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打开“通用”>“登录项与扩展”>“网络扩展”,然后启用 cmux。" + "value": "尚未檢查連接埠" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打開「一般」>「登入項目與延伸功能」>「網路延伸功能」,然後啟用 cmux。" + "value": "尚未检查端口" } }, "ko": { "stringUnit": { "state": "translated", - "value": "일반 > 로그인 항목 및 확장 프로그램 > 네트워크 확장을 열고 cmux를 활성화합니다." + "value": "아직 포트를 확인하지 않음" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "افتح عام > عناصر الدخول والامتدادات > امتدادات الشبكة، ثم فعّل cmux." + "value": "ポートは未確認です" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvorite Opšte > Stavke za prijavu i dodaci > Mrežni dodaci, pa omogućite cmux." + "value": "Portovi još nisu provjereni" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Generelt > Loginemner og udvidelser > Netværksudvidelser, og aktivér cmux." + "value": "Porte er ikke kontrolleret endnu" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Generali > Elementi login ed estensioni > Estensioni di rete, quindi abilita cmux." + "value": "Porte non ancora controllate" } }, "km": { "stringUnit": { "state": "translated", - "value": "បើក ទូទៅ > ធាតុចូល និងផ្នែកបន្ថែម > ផ្នែកបន្ថែមបណ្តាញ ហើយបើក cmux។" + "value": "មិនទាន់បានពិនិត្យច្រកនៅឡើយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Generelt > Påloggingselementer og utvidelser > Nettverksutvidelser, og aktiver cmux." + "value": "Porter er ikke sjekket ennå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Ogólne > Elementy logowania i rozszerzenia > Rozszerzenia sieciowe, a następnie włącz cmux." + "value": "Porty nie zostały jeszcze sprawdzone" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra Geral > Itens de Início e Extensões > Extensões de Rede e ative o cmux." + "value": "Portas ainda não verificadas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Откройте Основные > Объекты входа и расширения > Сетевые расширения и включите cmux." + "value": "Порты ещё не проверены" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิด ทั่วไป > รายการเข้าสู่ระบบและส่วนขยาย > ส่วนขยายเครือข่าย แล้วเปิดใช้ cmux" + "value": "ยังไม่ได้ตรวจสอบพอร์ต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel > Giriş Öğeleri ve Uzantılar > Ağ Uzantıları’nı açın ve cmux’u etkinleştirin." + "value": "Portlar henüz denetlenmedi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрийте Загальні > Об’єкти входу та розширення > Мережеві розширення й увімкніть cmux." + "value": "Порти ще не перевірено" } } } }, - "cloud.vpn.setup.steps.settingsLegacy": { + "cloudTree.ports.privateAddress": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Privacy & Security and allow the cmux extension." + "value": "Private address unavailable" } }, "de": { "stringUnit": { "state": "translated", - "value": "Öffnen Sie Datenschutz & Sicherheit und erlauben Sie die cmux-Erweiterung." + "value": "Private Adresse nicht verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrez Confidentialité et sécurité et autorisez l’extension cmux." + "value": "Adresse privée indisponible" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abre Privacidad y seguridad y permite la extensión de cmux." + "value": "العنوان الخاص غير متاح" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "「プライバシーとセキュリティ」を開き、cmuxの機能拡張を許可します。" + "value": "Dirección privada no disponible" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打开“隐私与安全性”,然后允许 cmux 扩展。" + "value": "私人位址無法使用" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打開「隱私權與安全性」,然後允許 cmux 延伸功能。" + "value": "专用地址不可用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "개인정보 보호 및 보안을 열고 cmux 확장을 허용합니다." + "value": "비공개 주소를 사용할 수 없음" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "افتح الخصوصية والأمان واسمح بامتداد cmux." + "value": "プライベートアドレスを利用できません" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvorite Privatnost i sigurnost i dozvolite cmux dodatak." + "value": "Privatna adresa nije dostupna" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Anonymitet og sikkerhed, og tillad cmux-udvidelsen." + "value": "Privat adresse utilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Privacy e sicurezza e consenti l’estensione cmux." + "value": "Indirizzo privato non disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "បើក ឯកជនភាព និងសុវត្ថិភាព ហើយអនុញ្ញាតផ្នែកបន្ថែម cmux។" + "value": "អាសយដ្ឋានឯកជនមិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Personvern og sikkerhet og tillat cmux-utvidelsen." + "value": "Privat adresse utilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Prywatność i ochrona i zezwól na rozszerzenie cmux." + "value": "Adres prywatny niedostępny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra Privacidade e Segurança e permita a extensão do cmux." + "value": "Endereço privado indisponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Откройте Конфиденциальность и безопасность и разрешите расширение cmux." + "value": "Частный адрес недоступен" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิด ความเป็นส่วนตัวและความปลอดภัย แล้วอนุญาตส่วนขยาย cmux" + "value": "ไม่มีที่อยู่ส่วนตัว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gizlilik ve Güvenlik’i açın ve cmux uzantısına izin verin." + "value": "Özel adres kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрийте Конфіденційність і безпека та дозвольте розширення cmux." + "value": "Приватна адреса недоступна" } } } }, - "cloud.vpn.setup.steps.configuration": { + "cloudTree.ports.privateAddress.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "2. Allow cmux to add a VPN configuration named cmux Cloud. This is a separate macOS permission." + "value": "cmux’s authenticated route needs this machine’s private address. Refresh to retrieve it. Turning on Cloud VPN does not assign a missing address." } }, "de": { "stringUnit": { "state": "translated", - "value": "2. Erlauben Sie cmux, eine VPN-Konfiguration namens cmux Cloud hinzuzufügen. Dies ist eine separate macOS-Berechtigung." + "value": "Die authentifizierte Route von cmux benötigt die private Adresse dieser Maschine. Aktualisieren Sie, um sie abzurufen. Cloud-VPN weist keine fehlende Adresse zu." } }, "fr": { "stringUnit": { "state": "translated", - "value": "2. Autorisez cmux à ajouter une configuration VPN nommée cmux Cloud. Il s’agit d’une autorisation macOS distincte." + "value": "La route authentifiée de cmux nécessite l’adresse privée de cette machine. Actualisez pour la récupérer. Activer le VPN Cloud n’attribue pas d’adresse manquante." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "2. Permite que cmux añada una configuración VPN llamada cmux Cloud. Este es un permiso independiente de macOS." + "value": "يحتاج مسار cmux الموثّق إلى العنوان الخاص لهذا الجهاز. حدّث لاسترجاعه. تشغيل Cloud VPN لا يعيّن عنوانًا مفقودًا." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "2. cmux Cloudという名前のVPN構成の追加を許可します。これは別のmacOS権限です。" + "value": "La ruta autenticada de cmux necesita la dirección privada de esta máquina. Actualiza para obtenerla. Activar Cloud VPN no asigna una dirección que falta." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "2. 允许 cmux 添加名为 cmux Cloud 的 VPN 配置。这是单独的 macOS 权限。" + "value": "cmux 的已驗證路徑需要此機器的私人位址。請重新整理以取得位址。開啟 Cloud VPN 不會指派缺少的位址。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "2. 允許 cmux 加入名為 cmux Cloud 的 VPN 設定。這是另一項 macOS 權限。" + "value": "cmux 的已验证路由需要此机器的专用地址。请刷新以获取地址。开启 Cloud VPN 不会分配缺失的地址。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "2. cmux가 cmux Cloud라는 VPN 구성을 추가하도록 허용합니다. 이는 별도의 macOS 권한입니다." + "value": "cmux의 인증된 경로에는 이 머신의 비공개 주소가 필요합니다. 새로 고쳐 주소를 가져오세요. Cloud VPN을 켜도 누락된 주소가 할당되지는 않습니다." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "2. اسمح لـ cmux بإضافة إعداد VPN باسم cmux Cloud. هذا إذن منفصل في macOS." + "value": "cmux の認証済み経路にはこのマシンのプライベートアドレスが必要です。更新して取得してください。Cloud VPN を有効にしても不足しているアドレスは割り当てられません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "2. Dozvolite cmux-u da doda VPN konfiguraciju pod imenom cmux Cloud. Ovo je posebna macOS dozvola." + "value": "Autentificirana ruta cmux-a treba privatnu adresu ove mašine. Osvježite da je preuzmete. Uključivanje Cloud VPN-a ne dodjeljuje adresu koja nedostaje." } }, "da": { "stringUnit": { "state": "translated", - "value": "2. Tillad cmux at tilføje en VPN-konfiguration med navnet cmux Cloud. Dette er en separat macOS-tilladelse." + "value": "cmux’ godkendte rute kræver denne maskines private adresse. Opdater for at hente den. Aktivering af Cloud VPN tildeler ikke en manglende adresse." } }, "it": { "stringUnit": { "state": "translated", - "value": "2. Consenti a cmux di aggiungere una configurazione VPN chiamata cmux Cloud. È un’autorizzazione macOS separata." + "value": "Il percorso autenticato di cmux richiede l’indirizzo privato di questa macchina. Aggiorna per recuperarlo. L’attivazione della VPN Cloud non assegna un indirizzo mancante." } }, "km": { "stringUnit": { "state": "translated", - "value": "2. អនុញ្ញាតឱ្យ cmux បន្ថែមការកំណត់ VPN ឈ្មោះ cmux Cloud។ នេះជាសិទ្ធិ macOS ផ្សេងមួយ។" + "value": "ផ្លូវដែលបានផ្ទៀងផ្ទាត់របស់ cmux ត្រូវការអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីននេះ។ ផ្ទុកឡើងវិញដើម្បីទាញយកវា។ ការបើក Cloud VPN មិនផ្តល់អាសយដ្ឋានដែលបាត់ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "2. Tillat cmux å legge til en VPN-konfigurasjon kalt cmux Cloud. Dette er en separat macOS-tillatelse." + "value": "cmux sin autentiserte rute trenger denne maskinens private adresse. Oppdater for å hente den. Å slå på Cloud VPN tildeler ikke en manglende adresse." } }, "pl": { "stringUnit": { "state": "translated", - "value": "2. Zezwól cmux dodać konfigurację VPN o nazwie cmux Cloud. To osobne uprawnienie macOS." + "value": "Uwierzytelniona trasa cmux wymaga prywatnego adresu tej maszyny. Odśwież, aby go pobrać. Włączenie Cloud VPN nie przypisuje brakującego adresu." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "2. Permita que o cmux adicione uma configuração VPN chamada cmux Cloud. Esta é uma permissão separada do macOS." + "value": "A rota autenticada do cmux precisa do endereço privado desta máquina. Atualize para obtê-lo. Ativar o Cloud VPN não atribui um endereço ausente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "2. Разрешите cmux добавить VPN-конфигурацию с именем cmux Cloud. Это отдельное разрешение macOS." + "value": "Аутентифицированному маршруту cmux нужен частный адрес этой машины. Обновите, чтобы получить его. Включение Cloud VPN не назначает отсутствующий адрес." } }, "th": { "stringUnit": { "state": "translated", - "value": "2. อนุญาตให้ cmux เพิ่มการกำหนดค่า VPN ชื่อ cmux Cloud นี่เป็นสิทธิ์ macOS แยกต่างหาก" + "value": "เส้นทางที่ยืนยันตัวตนแล้วของ cmux ต้องใช้ที่อยู่ส่วนตัวของเครื่องนี้ รีเฟรชเพื่อดึงข้อมูล การเปิด Cloud VPN ไม่ได้กำหนดที่อยู่ที่ขาดหายไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "2. cmux’un cmux Cloud adlı bir VPN yapılandırması eklemesine izin verin. Bu ayrı bir macOS iznidir." + "value": "cmux’un kimliği doğrulanmış yolu bu makinenin özel adresine ihtiyaç duyar. Adresi almak için yenileyin. Cloud VPN’i açmak eksik bir adres atamaz." } }, "uk": { "stringUnit": { "state": "translated", - "value": "2. Дозвольте cmux додати конфігурацію VPN з назвою cmux Cloud. Це окремий дозвіл macOS." + "value": "Автентифікованому маршруту cmux потрібна приватна адреса цієї машини. Оновіть, щоб отримати її. Увімкнення Cloud VPN не призначає відсутню адресу." } } } }, - "cloud.vpn.setup.steps.return": { + "cloudTree.ports.routeNote": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "3. Return to this pane. The connection continues automatically after approval. Disconnect here when finished. Quitting cmux or signing out also disconnects it." + "value": "cmux forwards ports without Cloud VPN. Web browsers and other Mac apps need Cloud VPN to reach services bound to the machine’s private address." } }, "de": { "stringUnit": { "state": "translated", - "value": "3. Kehren Sie zu diesem Bereich zurück. Die Verbindung wird nach der Genehmigung automatisch fortgesetzt. Trennen Sie sie hier, wenn Sie fertig sind. Das Beenden von cmux oder Abmelden trennt sie ebenfalls." + "value": "cmux leitet Ports ohne Cloud-VPN weiter. Webbrowser und andere Mac-Apps benötigen Cloud-VPN, um Dienste an der privaten Adresse der Maschine zu erreichen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "3. Revenez à ce volet. La connexion reprend automatiquement après autorisation. Déconnectez-la ici lorsque vous avez terminé. Quitter cmux ou fermer la session la déconnecte aussi." + "value": "cmux transfère les ports sans VPN Cloud. Les navigateurs web et les autres apps Mac ont besoin du VPN Cloud pour atteindre les services liés à l’adresse privée de la machine." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "3. Vuelve a este panel. La conexión continúa automáticamente tras la autorización. Desconéctala aquí cuando termines. Salir de cmux o cerrar sesión también la desconecta." + "value": "يعيد cmux توجيه المنافذ دون Cloud VPN. تحتاج متصفحات الويب وتطبيقات Mac الأخرى إلى Cloud VPN للوصول إلى الخدمات المرتبطة بالعنوان الخاص للجهاز." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "3. このペインに戻ります。承認後、接続は自動的に続行されます。使い終わったらここで切断してください。cmuxの終了やサインアウトでも切断されます。" + "value": "cmux reenvía puertos sin Cloud VPN. Los navegadores web y otras apps de Mac necesitan Cloud VPN para acceder a servicios enlazados a la dirección privada de la máquina." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "3. 返回此面板。批准后连接会自动继续。完成后可在此断开连接。退出 cmux 或退出登录也会断开连接。" + "value": "cmux 可轉送連接埠,不需要 Cloud VPN。網頁瀏覽器和其他 Mac App 需要 Cloud VPN,才能存取繫結至機器私人位址的服務。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "3. 返回此面板。核准後連線會自動繼續。完成後可在此中斷連線。結束 cmux 或登出也會中斷連線。" + "value": "cmux 可转发端口,无需 Cloud VPN。网页浏览器和其他 Mac 应用需要 Cloud VPN,才能访问绑定到机器专用地址的服务。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "3. 이 패널로 돌아옵니다. 승인 후 연결이 자동으로 계속됩니다. 사용을 마치면 여기에서 연결을 해제하세요. cmux를 종료하거나 로그아웃해도 연결이 해제됩니다." + "value": "cmux는 Cloud VPN 없이 포트를 전달합니다. 웹 브라우저 및 다른 Mac 앱이 머신의 비공개 주소에 바인딩된 서비스에 접근하려면 Cloud VPN이 필요합니다." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "3. ارجع إلى هذه اللوحة. يستمر الاتصال تلقائيًا بعد الموافقة. اقطع الاتصال هنا عند الانتهاء. يؤدي إنهاء cmux أو تسجيل الخروج أيضًا إلى قطع الاتصال." + "value": "cmux は Cloud VPN なしでポートを転送します。Web ブラウザやその他の Mac アプリからマシンのプライベートアドレスにバインドされたサービスにアクセスするには Cloud VPN が必要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "3. Vratite se na ovaj panel. Veza se nastavlja automatski nakon odobrenja. Ovdje prekinite vezu kada završite. Izlazak iz cmux-a ili odjava takođe prekida vezu." + "value": "cmux prosljeđuje portove bez Cloud VPN-a. Web preglednicima i drugim Mac aplikacijama potreban je Cloud VPN za pristup servisima vezanim za privatnu adresu mašine." } }, "da": { "stringUnit": { "state": "translated", - "value": "3. Gå tilbage til dette panel. Forbindelsen fortsætter automatisk efter godkendelsen. Afbryd her, når du er færdig. Hvis du afslutter cmux eller logger ud, afbrydes forbindelsen også." + "value": "cmux videresender porte uden Cloud VPN. Webbrowsere og andre Mac-apps skal bruge Cloud VPN for at nå tjenester, der er bundet til maskinens private adresse." } }, "it": { "stringUnit": { "state": "translated", - "value": "3. Torna a questo pannello. La connessione continua automaticamente dopo l’autorizzazione. Disconnettila qui quando hai finito. Anche uscire da cmux o effettuare il logout la disconnette." + "value": "cmux inoltra le porte senza VPN Cloud. I browser web e le altre app per Mac hanno bisogno della VPN Cloud per raggiungere i servizi associati all’indirizzo privato della macchina." } }, "km": { "stringUnit": { "state": "translated", - "value": "3. ត្រឡប់ទៅផ្ទាំងនេះ។ ការភ្ជាប់នឹងបន្តដោយស្វ័យប្រវត្តិបន្ទាប់ពីអនុម័ត។ ផ្តាច់នៅទីនេះពេលបញ្ចប់។ ការបិទ cmux ឬចាកចេញក៏ផ្តាច់ការភ្ជាប់ដែរ។" + "value": "cmux បញ្ជូនបន្តច្រកដោយមិនត្រូវការ Cloud VPN។ កម្មវិធីរុករកបណ្តាញ និងកម្មវិធី Mac ផ្សេងទៀតត្រូវការ Cloud VPN ដើម្បីចូលដល់សេវាកម្មដែលចងទៅអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីន។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "3. Gå tilbake til dette panelet. Forbindelsen fortsetter automatisk etter godkjenning. Koble fra her når du er ferdig. Avslutning av cmux eller utlogging kobler også fra." + "value": "cmux videresender porter uten Cloud VPN. Nettlesere og andre Mac-apper trenger Cloud VPN for å nå tjenester som er bundet til maskinens private adresse." } }, "pl": { "stringUnit": { "state": "translated", - "value": "3. Wróć do tego panelu. Połączenie będzie kontynuowane automatycznie po zatwierdzeniu. Po zakończeniu rozłącz je tutaj. Zamknięcie cmux lub wylogowanie również rozłączy połączenie." + "value": "cmux przekierowuje porty bez Cloud VPN. Przeglądarki internetowe i inne aplikacje na Maca potrzebują Cloud VPN, aby dotrzeć do usług powiązanych z prywatnym adresem maszyny." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "3. Volte a este painel. A conexão continuará automaticamente após a aprovação. Desconecte aqui quando terminar. Sair do cmux ou encerrar a sessão também desconecta." + "value": "O cmux encaminha portas sem o Cloud VPN. Navegadores e outros apps do Mac precisam do Cloud VPN para acessar serviços vinculados ao endereço privado da máquina." } }, "ru": { "stringUnit": { "state": "translated", - "value": "3. Вернитесь в эту панель. После подтверждения соединение продолжится автоматически. Завершив работу, отключите его здесь. Выход из cmux или системы также отключает соединение." + "value": "cmux перенаправляет порты без Cloud VPN. Веб-браузерам и другим приложениям Mac нужен Cloud VPN, чтобы обращаться к службам, привязанным к частному адресу машины." } }, "th": { "stringUnit": { "state": "translated", - "value": "3. กลับมาที่แผงนี้ การเชื่อมต่อจะดำเนินต่อโดยอัตโนมัติหลังการอนุมัติ ตัดการเชื่อมต่อที่นี่เมื่อเสร็จแล้ว การออกจาก cmux หรือออกจากระบบจะตัดการเชื่อมต่อด้วย" + "value": "cmux ส่งต่อพอร์ตได้โดยไม่ต้องใช้ Cloud VPN เว็บเบราว์เซอร์และแอป Mac อื่นๆ ต้องใช้ Cloud VPN เพื่อเข้าถึงบริการที่ผูกกับที่อยู่ส่วนตัวของเครื่อง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "3. Bu panele dönün. Onaydan sonra bağlantı otomatik olarak devam eder. Bitirdiğinizde buradan bağlantıyı kesin. cmux’tan çıkmak veya oturumu kapatmak da bağlantıyı keser." + "value": "cmux, portları Cloud VPN olmadan yönlendirir. Web tarayıcıları ve diğer Mac uygulamaları, makinenin özel adresine bağlı hizmetlere ulaşmak için Cloud VPN’e ihtiyaç duyar." } }, "uk": { "stringUnit": { "state": "translated", - "value": "3. Поверніться до цієї панелі. Після схвалення з’єднання продовжиться автоматично. Завершивши роботу, від’єднайте його тут. Вихід із cmux або системи також від’єднає з’єднання." + "value": "cmux перенаправляє порти без Cloud VPN. Веббраузерам та іншим застосункам Mac потрібен Cloud VPN, щоб звертатися до служб, прив’язаних до приватної адреси машини." } } } }, - "cloud.vpn.setup.address.title": { + "cloudTree.ports.setupVPN": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private addresses" + "value": "Set Up VPN…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Private Adressen" + "value": "VPN einrichten…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adresses privées" + "value": "Configurer le VPN…" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Direcciones privadas" + "value": "إعداد VPN…" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "プライベートアドレス" + "value": "Configurar VPN…" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "私有地址" + "value": "設定 VPN…" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "私有位址" + "value": "设置 VPN…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 주소" + "value": "VPN 설정…" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "العناوين الخاصة" + "value": "VPN を設定…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Privatne adrese" + "value": "Postavi VPN…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Private adresser" + "value": "Konfigurer VPN…" } }, "it": { "stringUnit": { "state": "translated", - "value": "Indirizzi privati" + "value": "Configura VPN…" } }, "km": { "stringUnit": { "state": "translated", - "value": "អាសយដ្ឋានឯកជន" + "value": "រៀបចំ VPN…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Private adresser" + "value": "Konfigurer VPN…" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Prywatne adresy" + "value": "Skonfiguruj VPN…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Endereços privados" + "value": "Configurar VPN…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Частные адреса" + "value": "Настроить VPN…" } }, "th": { "stringUnit": { "state": "translated", - "value": "ที่อยู่ส่วนตัว" + "value": "ตั้งค่า VPN…" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel adresler" + "value": "VPN’i Kur…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Приватні адреси" + "value": "Налаштувати VPN…" } } } }, - "cloud.vpn.setup.openSettings": { + "cloudTree.ports.stale": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open System Settings" + "value": "Port list may be out of date" } }, "de": { "stringUnit": { "state": "translated", - "value": "Systemeinstellungen öffnen" + "value": "Portliste möglicherweise veraltet" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir Réglages Système" + "value": "La liste des ports peut être obsolète" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes del Sistema" + "value": "قد تكون قائمة المنافذ قديمة" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "システム設定を開く" + "value": "La lista de puertos puede estar desactualizada" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打开系统设置" + "value": "連接埠清單可能已過時" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打開系統設定" + "value": "端口列表可能已过期" } }, "ko": { "stringUnit": { "state": "translated", - "value": "시스템 설정 열기" + "value": "포트 목록이 오래되었을 수 있음" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فتح إعدادات النظام" + "value": "ポートリストが古い可能性があります" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori Postavke sistema" + "value": "Lista portova je možda zastarjela" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Systemindstillinger" + "value": "Portlisten er muligvis forældet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Impostazioni di Sistema" + "value": "L’elenco delle porte potrebbe non essere aggiornato" } }, "km": { "stringUnit": { "state": "translated", - "value": "បើកការកំណត់ប្រព័ន្ធ" + "value": "បញ្ជីច្រកអាចហួសសម័យ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Systeminnstillinger" + "value": "Portlisten kan være utdatert" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Ustawienia systemowe" + "value": "Lista portów może być nieaktualna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes do Sistema" + "value": "A lista de portas pode estar desatualizada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть системные настройки" + "value": "Список портов может быть устаревшим" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดการตั้งค่าระบบ" + "value": "รายการพอร์ตอาจไม่เป็นปัจจุบัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sistem Ayarlarını aç" + "value": "Port listesi güncel olmayabilir" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити Системні параметри" + "value": "Список портів може бути застарілим" } } } }, - "settings.app.accentColor.custom": { + "cloudTree.ports.stale.detail": { + "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "مخصص" + "value": "The last scan could not be refreshed. Listed services may have changed; refresh to check again. cmux forwarding does not need Cloud VPN." } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Prilagođeno" + "value": "Der letzte Scan konnte nicht aktualisiert werden. Die aufgeführten Dienste könnten sich geändert haben. Aktualisieren Sie erneut. Die cmux-Weiterleitung benötigt kein Cloud-VPN." } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Tilpasset" + "value": "La dernière analyse n’a pas pu être actualisée. Les services listés peuvent avoir changé ; actualisez pour vérifier. Le transfert cmux ne nécessite pas de VPN Cloud." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Benutzerdefiniert" + "value": "تعذر تحديث آخر فحص. ربما تغيرت الخدمات المدرجة؛ حدّث للفحص مجددًا. لا تحتاج إعادة توجيه cmux إلى Cloud VPN." } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Custom" + "value": "No se pudo actualizar el último escaneo. Los servicios listados pueden haber cambiado; actualiza para comprobarlos. El reenvío de cmux no necesita Cloud VPN." } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Personalizado" + "value": "無法重新整理上次掃描結果。列出的服務可能已變更;請重新整理以再次檢查。cmux 轉送不需要 Cloud VPN。" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Personnalisée" + "value": "无法刷新上次扫描结果。列出的服务可能已更改;请刷新以再次检查。cmux 转发无需 Cloud VPN。" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Personalizzato" + "value": "마지막 검색 결과를 새로 고치지 못했습니다. 나열된 서비스가 변경되었을 수 있으니 새로 고쳐 확인하세요. cmux 전달에는 Cloud VPN이 필요하지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "カスタム" + "value": "前回のスキャンを更新できませんでした。表示されたサービスが変わっている可能性があります。更新して再確認してください。cmux の転送に Cloud VPN は不要です。" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "사용자 지정" + "value": "Posljednje skeniranje nije se moglo osvježiti. Navedeni servisi su se možda promijenili; osvježite da ponovo provjerite. Prosljeđivanje u cmux-u ne treba Cloud VPN." } }, - "nb": { + "da": { "stringUnit": { "state": "translated", - "value": "Egendefinert" + "value": "Den seneste scanning kunne ikke opdateres. De viste tjenester kan have ændret sig; opdater for at kontrollere igen. Videresendelse i cmux kræver ikke Cloud VPN." } }, - "pl": { + "it": { "stringUnit": { "state": "translated", - "value": "Niestandardowy" + "value": "Non è stato possibile aggiornare l’ultima scansione. I servizi elencati potrebbero essere cambiati; aggiorna per controllare di nuovo. L’inoltro di cmux non richiede la VPN Cloud." } }, - "pt-BR": { + "km": { "stringUnit": { "state": "translated", - "value": "Personalizado" + "value": "មិនអាចផ្ទុកការស្កេនចុងក្រោយឡើងវិញបានទេ។ សេវាកម្មដែលបានរាយអាចបានផ្លាស់ប្តូរ; ផ្ទុកឡើងវិញដើម្បីពិនិត្យម្តងទៀត។ ការបញ្ជូនបន្តរបស់ cmux មិនត្រូវការ Cloud VPN ទេ។" } }, - "ru": { + "nb": { "stringUnit": { "state": "translated", - "value": "Пользовательский" + "value": "Den siste skanningen kunne ikke oppdateres. De oppførte tjenestene kan ha endret seg; oppdater for å sjekke på nytt. Videresending i cmux trenger ikke Cloud VPN." } }, - "th": { + "pl": { "stringUnit": { "state": "translated", - "value": "กำหนดเอง" + "value": "Nie udało się odświeżyć ostatniego skanowania. Wymienione usługi mogły się zmienić; odśwież, aby sprawdzić ponownie. Przekierowywanie w cmux nie wymaga Cloud VPN." } }, - "tr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Özel" + "value": "Não foi possível atualizar a última verificação. Os serviços listados podem ter mudado; atualize para verificar de novo. O encaminhamento do cmux não precisa do Cloud VPN." } }, - "uk": { + "ru": { "stringUnit": { "state": "translated", - "value": "Власний" + "value": "Не удалось обновить последнее сканирование. Перечисленные службы могли измениться; обновите, чтобы проверить снова. Перенаправлению cmux Cloud VPN не нужен." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "自定义" + "value": "ไม่สามารถรีเฟรชการสแกนครั้งล่าสุดได้ บริการที่แสดงอาจเปลี่ยนไปแล้ว รีเฟรชเพื่อตรวจสอบอีกครั้ง การส่งต่อของ cmux ไม่ต้องใช้ Cloud VPN" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "自訂" + "value": "Son tarama yenilenemedi. Listelenen hizmetler değişmiş olabilir; yeniden denetlemek için yenileyin. cmux yönlendirmesi Cloud VPN gerektirmez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Не вдалося оновити останнє сканування. Перелічені служби могли змінитися; оновіть, щоб перевірити знову. Перенаправлення cmux не потребує Cloud VPN." } } } }, - "devices.incoming.confirm.enable": { + "cloudTree.ports.unavailable.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Make Discoverable" + "value": "The port scan failed; this does not mean no service is listening. Existing cmux ports may still work. Refresh to retry; Cloud VPN is not required." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جعل الجهاز قابلاً للاكتشاف" + "value": "Der Portscan ist fehlgeschlagen; das bedeutet nicht, dass kein Dienst lauscht. Vorhandene cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie; Cloud-VPN ist nicht erforderlich." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Auffindbar machen" + "value": "L’analyse des ports a échoué ; cela ne signifie pas qu’aucun service n’écoute. Les ports cmux existants peuvent encore fonctionner. Actualisez pour réessayer ; le VPN Cloud n’est pas nécessaire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Hacer detectable" + "value": "فشل فحص المنافذ؛ هذا لا يعني عدم وجود خدمة تستمع. قد تظل منافذ cmux الحالية تعمل. حدّث للمحاولة مجددًا؛ Cloud VPN غير مطلوب." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Rendre détectable" + "value": "Falló el escaneo de puertos; no significa que no haya servicios en escucha. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reintentar; Cloud VPN no es necesario." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "検出可能にする" + "value": "連接埠掃描失敗;這不代表沒有服務正在監聽。現有 cmux 連接埠可能仍可使用。請重新整理以重試;不需要 Cloud VPN。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "검색 허용" + "value": "端口扫描失败;这并不代表没有服务正在监听。现有 cmux 端口可能仍可使用。请刷新以重试;无需 Cloud VPN。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许发现" + "value": "포트 검색이 실패했지만 수신 대기 서비스가 없다는 뜻은 아닙니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 시도하세요. Cloud VPN은 필요하지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "允許探索" + "value": "ポートスキャンが失敗しましたが、サービスが待ち受けていないとは限りません。既存の cmux ポートは引き続き動作する可能性があります。更新して再試行してください。Cloud VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Učini dostupnim" + "value": "Skeniranje portova nije uspjelo; to ne znači da nijedan servis ne sluša. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovni pokušaj; Cloud VPN nije potreban." } }, "da": { "stringUnit": { "state": "translated", - "value": "Gør synlig" + "value": "Portscanningen mislykkedes; det betyder ikke, at ingen tjeneste lytter. Eksisterende cmux-porte virker muligvis stadig. Opdater for at prøve igen; Cloud VPN er ikke påkrævet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Rendi individuabile" + "value": "La scansione delle porte non è riuscita; ciò non significa che nessun servizio sia in ascolto. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riprovare; la VPN Cloud non è necessaria." } }, "km": { "stringUnit": { "state": "translated", - "value": "ធ្វើឲ្យអាចរកឃើញ" + "value": "ការស្កេនច្រកបានបរាជ័យ; នេះមិនមានន័យថាគ្មានសេវាកម្មណាកំពុងស្តាប់ទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីព្យាយាមម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gjør denne Mac-en synlig" + "value": "Portskanningen mislyktes; det betyr ikke at ingen tjeneste lytter. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å prøve igjen; Cloud VPN er ikke nødvendig." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Włącz wykrywanie" + "value": "Skanowanie portów nie powiodło się; nie oznacza to, że żadna usługa nie nasłuchuje. Istniejące porty cmux mogą nadal działać. Odśwież, aby spróbować ponownie; Cloud VPN nie jest wymagany." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tornar detectável" + "value": "A verificação de portas falhou; isso não significa que nenhum serviço esteja em escuta. As portas existentes do cmux ainda podem funcionar. Atualize para tentar de novo; o Cloud VPN não é necessário." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сделать доступным для обнаружения" + "value": "Сканирование портов не удалось; это не значит, что ни одна служба не прослушивает порты. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы повторить; Cloud VPN не требуется." } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำให้ Mac เครื่องนี้ค้นพบได้" + "value": "การสแกนพอร์ตล้มเหลว ไม่ได้หมายความว่าไม่มีบริการที่กำลังรับฟัง พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อลองอีกครั้ง ไม่จำเป็นต้องใช้ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Keşfedilebilir yap" + "value": "Port taraması başarısız oldu; bu, dinleyen bir hizmet olmadığı anlamına gelmez. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden denemek için yenileyin; Cloud VPN gerekmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зробити цей Mac видимим" + "value": "Сканування портів не вдалося; це не означає, що жодна служба не прослуховує. Наявні порти cmux можуть і далі працювати. Оновіть, щоб повторити; Cloud VPN не потрібен." } } } }, - "devices.incoming.confirm.message": { + "cloudTree.ports.unsupported": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Other Macs signed in to your cmux account may discover this Mac and connect to its workspaces. Do you want to continue?" + "value": "Ports are not supported by this provider." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "قد تكتشف أجهزة Mac الأخرى التي سجّلت الدخول إلى حساب cmux هذا الـ Mac وتتصل بمساحات العمل فيه. هل تريد المتابعة؟" + "value": "Ports werden von diesem Anbieter nicht unterstützt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Andere Macs, die bei deinem cmux-Konto angemeldet sind, können diesen Mac finden und sich mit seinen Arbeitsbereichen verbinden. Möchtest du fortfahren?" + "value": "Les ports ne sont pas pris en charge par ce fournisseur." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Otros Mac que hayan iniciado sesión en tu cuenta de cmux podrán descubrir este Mac y conectarse a sus espacios de trabajo. ¿Quieres continuar?" + "value": "لا يدعم هذا الموفر المنافذ." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Les autres Mac connectés à votre compte cmux pourront détecter ce Mac et se connecter à ses espaces de travail. Voulez-vous continuer ?" + "value": "Este proveedor no admite puertos." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmuxアカウントにサインインしているほかのMacから、このMacが検出され、ワークスペースに接続されることがあります。続けますか?" + "value": "此提供者不支援連接埠。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 계정에 로그인한 다른 Mac에서 이 Mac을 검색하고 작업 공간에 연결할 수 있습니다. 계속하시겠습니까?" + "value": "此提供商不支持端口。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "登录你 cmux 帐户的其他 Mac 可能会发现此 Mac 并连接到其工作区。要继续吗?" + "value": "이 제공자는 포트를 지원하지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "登入您 cmux 帳戶的其他 Mac 可能會探索此 Mac 並連線至其工作區。要繼續嗎?" + "value": "このプロバイダーはポートをサポートしていません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Drugi Mac računari prijavljeni na vaš cmux nalog možda će otkriti ovaj Mac i povezati se s njegovim radnim prostorima. Želite li nastaviti?" + "value": "Ovaj pružalac ne podržava portove." } }, "da": { "stringUnit": { "state": "translated", - "value": "Andre Mac-computere, der er logget ind på din cmux-konto, kan muligvis finde denne Mac og oprette forbindelse til dens arbejdsområder. Vil du fortsætte?" + "value": "Porte understøttes ikke af denne udbyder." } }, "it": { "stringUnit": { "state": "translated", - "value": "Gli altri Mac che hanno effettuato l’accesso al tuo account cmux potrebbero rilevare questo Mac e connettersi ai suoi spazi di lavoro. Vuoi continuare?" + "value": "Le porte non sono supportate da questo provider." } }, "km": { "stringUnit": { "state": "translated", - "value": "Mac ផ្សេងទៀតដែលបានចូលគណនី cmux របស់អ្នក អាចរកឃើញ Mac នេះ និងភ្ជាប់ទៅកាន់ workspace របស់វា។ តើអ្នកចង់បន្តឬទេ?" + "value": "អ្នកផ្តល់សេវានេះមិនគាំទ្រច្រកទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Andre Mac-maskiner som er logget på cmux-kontoen din, kan finne denne Mac-en og koble til arbeidsområdene. Vil du fortsette?" + "value": "Porter støttes ikke av denne leverandøren." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Inne Maki zalogowane na Twoje konto cmux mogą wykryć tego Maca i połączyć się z jego obszarami roboczymi. Czy chcesz kontynuować?" + "value": "Ten dostawca nie obsługuje portów." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Outros Macs conectados à sua conta cmux poderão descobrir este Mac e se conectar aos seus espaços de trabalho. Deseja continuar?" + "value": "Este provedor não oferece suporte a portas." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Другие Mac, вошедшие в вашу учётную запись cmux, могут обнаружить этот Mac и подключиться к его рабочим пространствам. Продолжить?" + "value": "Этот провайдер не поддерживает порты." } }, "th": { "stringUnit": { "state": "translated", - "value": "Mac เครื่องอื่นที่ลงชื่อเข้าใช้บัญชี cmux ของคุณอาจค้นพบ Mac เครื่องนี้และเชื่อมต่อกับพื้นที่ทำงานของเครื่องนี้ คุณต้องการดำเนินการต่อหรือไม่" + "value": "ผู้ให้บริการนี้ไม่รองรับพอร์ต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux hesabınızda oturum açmış diğer Mac’ler bu Mac’i keşfedebilir ve çalışma alanlarına bağlanabilir. Devam etmek istiyor musunuz?" + "value": "Bu sağlayıcı portları desteklemiyor." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Інші Mac, на яких виконано вхід у ваш обліковий запис cmux, можуть виявити цей Mac і підключитися до його робочих просторів. Продовжити?" + "value": "Цей постачальник не підтримує порти." } } } }, - "devices.incoming.confirm.title": { + "cloudTree.ports.unsupported.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Make this Mac discoverable?" + "value": "This provider has no supported in-app port route. Open a shell to access the service inside the machine. Cloud VPN does not add provider support." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "هل تريد جعل جهاز Mac هذا قابلاً للاكتشاف؟" + "value": "Dieser Anbieter unterstützt keine Portverbindung in der App. Öffnen Sie eine Shell, um innerhalb der Maschine auf den Dienst zuzugreifen. Cloud-VPN fügt keine Anbieterunterstützung hinzu." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Diesen Mac auffindbar machen?" + "value": "Ce fournisseur ne prend pas en charge les ports dans l’app. Ouvrez un shell pour accéder au service dans la machine. Le VPN Cloud n’ajoute pas cette prise en charge." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "¿Hacer que este Mac sea detectable?" + "value": "لا يدعم هذا الموفر مسار منافذ داخل التطبيق. افتح صدفة للوصول إلى الخدمة داخل الجهاز. لا يضيف Cloud VPN دعمًا للموفر." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Rendre ce Mac détectable ?" + "value": "Este proveedor no admite una ruta de puertos dentro de la app. Abre una shell para acceder al servicio dentro de la máquina. Cloud VPN no añade soporte al proveedor." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このMacを検出可能にしますか?" + "value": "此提供者不支援應用程式內連接埠路徑。請開啟 Shell 以在機器內存取服務。Cloud VPN 不會新增提供者支援。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 Mac을 검색 가능하게 할까요?" + "value": "此提供商不支持应用内端口路由。请打开 Shell 以在机器内部访问服务。Cloud VPN 不会添加提供商支持。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许发现此 Mac 吗?" + "value": "이 제공자는 앱 내 포트 경로를 지원하지 않습니다. 셸을 열어 머신 내부의 서비스에 접근하세요. Cloud VPN으로 제공자 지원이 추가되지는 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "要允許探索此 Mac 嗎?" + "value": "このプロバイダーはアプリ内のポート経路に対応していません。シェルを開き、マシン内でサービスにアクセスしてください。Cloud VPN を有効にしても対応は追加されません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Učiniti ovaj Mac dostupnim?" + "value": "Ovaj pružalac nema podržanu rutu portova unutar aplikacije. Otvorite shell da pristupite servisu unutar mašine. Cloud VPN ne dodaje podršku pružaoca." } }, "da": { "stringUnit": { "state": "translated", - "value": "Gør denne Mac synlig?" + "value": "Denne udbyder har ingen understøttet portrute i appen. Åbn en shell for at få adgang til tjenesten inde i maskinen. Cloud VPN tilføjer ikke understøttelse for udbyderen." } }, "it": { "stringUnit": { "state": "translated", - "value": "Rendere individuabile questo Mac?" + "value": "Questo provider non ha un percorso delle porte supportato nell’app. Apri una shell per accedere al servizio all’interno della macchina. La VPN Cloud non aggiunge il supporto del provider." } }, "km": { "stringUnit": { "state": "translated", - "value": "ធ្វើឲ្យ Mac នេះអាចរកឃើញ?" + "value": "អ្នកផ្តល់សេវានេះគ្មានផ្លូវច្រកក្នុងកម្មវិធីដែលគាំទ្រទេ។ បើក shell ដើម្បីចូលប្រើសេវាកម្មនៅខាងក្នុងម៉ាស៊ីន។ Cloud VPN មិនបន្ថែមការគាំទ្រអ្នកផ្តល់សេវាទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gjøre denne Mac-en synlig?" + "value": "Denne leverandøren har ingen støttet portrute i appen. Åpne et skall for å få tilgang til tjenesten inne i maskinen. Cloud VPN legger ikke til støtte for leverandøren." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uwidocznić tego Maca?" + "value": "Ten dostawca nie ma obsługiwanej trasy portów w aplikacji. Otwórz powłokę, aby uzyskać dostęp do usługi wewnątrz maszyny. Cloud VPN nie dodaje obsługi dostawcy." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tornar este Mac detectável?" + "value": "Este provedor não tem uma rota de portas compatível no app. Abra um shell para acessar o serviço dentro da máquina. O Cloud VPN não adiciona suporte ao provedor." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сделать этот Mac доступным для обнаружения?" + "value": "У этого провайдера нет поддерживаемого маршрута портов в приложении. Откройте оболочку, чтобы получить доступ к службе внутри машины. Cloud VPN не добавляет поддержку провайдера." } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำให้ Mac เครื่องนี้ค้นพบได้หรือไม่" + "value": "ผู้ให้บริการนี้ไม่มีเส้นทางพอร์ตในแอปที่รองรับ เปิดเชลล์เพื่อเข้าถึงบริการภายในเครื่อง Cloud VPN ไม่ได้เพิ่มการรองรับผู้ให้บริการ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu Mac keşfedilebilir yapılsın mı?" + "value": "Bu sağlayıcının desteklenen bir uygulama içi port yolu yok. Makinenin içindeki hizmete erişmek için bir kabuk açın. Cloud VPN sağlayıcı desteği eklemez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зробити цей Mac доступним для виявлення?" + "value": "Цей постачальник не має підтримуваного маршруту портів у застосунку. Відкрийте оболонку, щоб отримати доступ до служби всередині машини. Cloud VPN не додає підтримку постачальника." } } } }, - "cloudTree.device.status.connecting": { + "cloudTree.port.openInCmux": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connecting…" + "value": "Open in cmux" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جارٍ الاتصال…" + "value": "فتح في cmux" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wird verbunden…" + "value": "In cmux öffnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Conectando…" + "value": "Abrir en cmux" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion…" + "value": "Ouvrir dans cmux" } }, "ja": { "stringUnit": { "state": "translated", - "value": "接続中…" + "value": "cmuxで開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 중…" + "value": "cmux에서 열기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在连接…" + "value": "在 cmux 中打开" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在連線…" + "value": "在 cmux 中開啟" } } } }, - "cloud.teamPicker.createSheet.create": { + "cloudTree.port.openInCmux.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Create" + "value": "Open in cmux. No VPN setup needed." } }, "ar": { "stringUnit": { "state": "translated", - "value": "إنشاء" + "value": "افتح في cmux. لا يلزم إعداد VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Erstellen" + "value": "In cmux öffnen. Keine VPN-Einrichtung nötig." } }, "es": { "stringUnit": { "state": "translated", - "value": "Crear" + "value": "Abrir en cmux. No hace falta configurar una VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Créer" + "value": "Ouvrir dans cmux. Aucune configuration VPN nécessaire." } }, "ja": { "stringUnit": { "state": "translated", - "value": "作成" + "value": "cmux で開きます。VPN の設定は不要です。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "만들기" + "value": "cmux에서 열기. VPN 설정이 필요하지 않습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "创建" + "value": "在 cmux 中打开。无需设置 VPN。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "建立" + "value": "在 cmux 中開啟。無需設定 VPN。" } } } }, - "cloud.teamPicker.createSheet.title": { + "cloudTree.port.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Create Team" + "value": "Port %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إنشاء فريق" + "value": "المنفذ %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Team erstellen" + "value": "Port-Nr. %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Crear equipo" + "value": "Puerto %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Créer une équipe" + "value": "Port n° %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームを作成" + "value": "ポート %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 만들기" + "value": "포트 %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "创建团队" + "value": "端口 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "建立團隊" + "value": "連接埠 %@" } } } }, - "cloud.teamPicker.createTeam": { + "cloudTree.placeholder.deviceOffline": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Create Team…" + "value": "Offline — its workspaces return when it does" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إنشاء فريق…" + "value": "غير متصل — ستعود مساحات عمله عند اتصاله مجددًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Team erstellen…" + "value": "Offline — die Arbeitsbereiche erscheinen wieder, sobald das Gerät online ist" } }, "es": { "stringUnit": { "state": "translated", - "value": "Crear equipo…" + "value": "Sin conexión — sus espacios de trabajo volverán cuando se conecte" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Créer une équipe…" + "value": "Hors ligne — ses espaces de travail réapparaîtront à sa reconnexion" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームを作成…" + "value": "オフライン — 再接続するとワークスペースが戻ります" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 만들기…" + "value": "오프라인 — 다시 연결되면 작업 공간이 돌아옵니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "创建团队…" + "value": "离线 — 重新连接后会恢复工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "建立團隊…" + "value": "離線 — 重新連線後會恢復工作區" } } } }, - "cloud.teamPicker.switching": { + "cloud.vpn.setup.heading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switching teams…" + "value": "Use Cloud machines from any app" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ تبديل الفريق…" + "value": "Cloud-Maschinen aus jeder App verwenden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Team wird gewechselt…" + "value": "Utiliser les machines Cloud depuis toute app" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cambiando de equipo…" + "value": "Usar máquinas Cloud desde cualquier app" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Changement d’équipe…" + "value": "ほかのアプリからCloudマシンを使う" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "チームを切り替え中…" + "value": "从任何应用使用 Cloud 机器" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "從任何 App 使用 Cloud 機器" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 전환 중…" + "value": "모든 앱에서 Cloud 머신 사용" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "正在切换团队…" + "value": "استخدام أجهزة Cloud من أي تطبيق" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "正在切換團隊…" + "value": "Koristite Cloud mašine iz bilo koje aplikacije" } - } - } - }, - "cloud.teamPicker.creating": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Creating team…" + "value": "Brug Cloud-maskiner fra alle apps" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "جارٍ إنشاء الفريق…" + "value": "Usa le macchine Cloud da qualsiasi app" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Team wird erstellt…" + "value": "ប្រើម៉ាស៊ីន Cloud ពីកម្មវិធីណាមួយ" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Creando equipo…" + "value": "Bruk Cloud-maskiner fra alle apper" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Création de l’équipe…" + "value": "Używaj maszyn Cloud z dowolnej aplikacji" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "チームを作成中…" + "value": "Use máquinas Cloud em qualquer app" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "팀 만드는 중…" + "value": "Используйте Cloud-машины из любого приложения" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "正在创建团队…" + "value": "ใช้เครื่อง Cloud จากทุกแอป" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "正在建立團隊…" + "value": "Cloud makinelerini her uygulamadan kullanın" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Використовуйте Cloud-машини з будь-якої програми" } } } }, - "socket.authTeam.busy": { + "cloud.vpn.setup.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Another team change is in progress. Try again when it finishes." + "value": "Optional access to each VM's private address and original ports, such as 10.40.0.10:3000." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." + "value": "Optionaler Zugriff auf die private Adresse und die ursprünglichen Ports jeder VM, etwa 10.40.0.10:3000." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." + "value": "Accès facultatif à chaque adresse privée et aux ports d’origine des VM, comme 10.40.0.10:3000." } }, "es": { "stringUnit": { "state": "translated", - "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." + "value": "Acceso opcional a la dirección privada y los puertos originales de cada VM, como 10.40.0.10:3000." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Une autre modification d’équipe est en cours. Réessayez une fois terminée." + "value": "各VMのプライベートアドレスと元のポート(例:10.40.0.10:3000)にアクセスするための任意の設定です。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "別のチーム変更を処理中です。完了してからもう一度お試しください。" + "value": "可选设置,用于访问每台 VM 的私有地址和原始端口,例如 10.40.0.10:3000。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "選用設定,可存取每台 VM 的私有位址和原始連接埠,例如 10.40.0.10:3000。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 팀 변경이 진행 중입니다. 완료된 후 다시 시도하세요." + "value": "각 VM의 비공개 주소와 원래 포트(예: 10.40.0.10:3000)에 접근하기 위한 선택 설정입니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "另一项团队更改正在进行中,请在完成后重试。" + "value": "وصول اختياري إلى العنوان الخاص والمنافذ الأصلية لكل جهاز افتراضي، مثل 10.40.0.10:3000." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "另一項團隊變更正在進行中,請在完成後再試一次。" + "value": "Opcionalni pristup privatnoj adresi i izvornim portovima svake VM, na primjer 10.40.0.10:3000." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Valgfri adgang til hver VM’s private adresse og oprindelige porte, f.eks. 10.40.0.10:3000." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Accesso facoltativo all’indirizzo privato e alle porte originali di ogni VM, ad esempio 10.40.0.10:3000." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចូលប្រើអាសយដ្ឋានឯកជន និងច្រកដើមរបស់ VM នីមួយៗ ដូចជា 10.40.0.10:3000 ជាជម្រើស។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Valgfri tilgang til hver VMs private adresse og opprinnelige porter, som 10.40.0.10:3000." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Opcjonalny dostęp do prywatnego adresu i oryginalnych portów każdej maszyny VM, na przykład 10.40.0.10:3000." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Acesso opcional ao endereço privado e às portas originais de cada VM, como 10.40.0.10:3000." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Необязательный доступ к частному адресу и исходным портам каждой VM, например 10.40.0.10:3000." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "การเข้าถึงที่ไม่บังคับไปยังที่อยู่ส่วนตัวและพอร์ตเดิมของ VM แต่ละเครื่อง เช่น 10.40.0.10:3000" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Her VM’nin özel adresine ve özgün bağlantı noktalarına isteğe bağlı erişim; örneğin 10.40.0.10:3000." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Необов’язковий доступ до приватної адреси та початкових портів кожної VM, наприклад 10.40.0.10:3000." } } } }, - "cloud.teamPicker.createSheet.message": { + "cloud.vpn.setup.howItWorks.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The new team becomes your active team." + "value": "How it works" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يصبح الفريق الجديد فريقك النشط." + "value": "So funktioniert es" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Das neue Team wird Ihr aktives Team." + "value": "Fonctionnement" } }, "es": { "stringUnit": { "state": "translated", - "value": "El nuevo equipo pasa a ser su equipo activo." + "value": "Cómo funciona" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "La nouvelle équipe devient votre équipe active." + "value": "仕組み" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新しいチームがアクティブなチームになります。" + "value": "工作原理" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "運作方式" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 팀이 활성 팀이 됩니다." + "value": "작동 방식" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "新团队将成为你的当前团队。" + "value": "طريقة العمل" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "新團隊會成為你使用中的團隊。" + "value": "Kako radi" } - } - } - }, - "settings.terminal.textEditingCommandMovesByWord": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Command Moves by Word" + "value": "Sådan fungerer det" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "Command ينقل حسب الكلمة" + "value": "Come funziona" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Befehlstaste bewegt wortweise" + "value": "របៀបដំណើរការ" } }, - "es": { + "nb": { + "stringUnit": { + "state": "translated", + "value": "Slik fungerer det" + } + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Comando mueve por palabra" + "value": "Jak to działa" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Commande déplace par mot" + "value": "Como funciona" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "Command で単語単位に移動" + "value": "Как это работает" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "Command로 단어 단위 이동" + "value": "วิธีการทำงาน" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "Command 按词移动" + "value": "Nasıl çalışır" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "Command 依字移動" + "value": "Як це працює" } } } }, - "settings.terminal.textEditingCommandMovesByWord.subtitleOn": { + "cloud.vpn.setup.status.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Command arrow and delete keys move and delete by word, like Option. Control Left and Right Arrow move to the start and end of the line." + "value": "Off. Your Cloud panes continue to work through cmux's built-in route." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب الكلمة، مثل Option. وينقل Control مع السهمين الأيسر والأيمن إلى بداية السطر ونهايته." + "value": "Aus. Ihre Cloud-Bereiche funktionieren weiterhin über die integrierte Verbindung von cmux." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht wortweise, wie die Wahltaste. Control mit Links- und Rechtspfeil springt an Anfang und Ende der Zeile." + "value": "Désactivé. Vos volets Cloud continuent de fonctionner via la connexion intégrée de cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por palabra, como Opción. Control con las flechas izquierda y derecha va al inicio y al final de la línea." + "value": "Desactivada. Tus paneles Cloud siguen funcionando mediante la conexión integrada de cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par mot, comme Option. Contrôle avec les flèches gauche et droite va au début et à la fin de la ligne." + "value": "オフ。Cloudペインは引き続きcmux内蔵の接続経路で動作します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Command と矢印キー・削除キーで、Option と同じく単語単位に移動・削除します。Control と左右矢印キーで行頭・行末に移動します。" + "value": "已关闭。Cloud 面板仍通过 cmux 内置连接工作。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "已關閉。Cloud 面板仍透過 cmux 內建連線運作。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Command 화살표 및 삭제 키가 Option처럼 단어 단위로 이동하고 삭제합니다. Control 왼쪽 및 오른쪽 화살표는 줄의 시작과 끝으로 이동합니다." + "value": "꺼짐. Cloud 패널은 cmux의 내장 연결을 통해 계속 작동합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "Command 加方向键和删除键按词移动和删除,与 Option 相同。Control 加左右方向键移到行首和行尾。" + "value": "متوقف. تستمر لوحات Cloud في العمل عبر اتصال cmux المضمن." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "Command 加方向鍵與刪除鍵會依字移動與刪除,與 Option 相同。Control 加左右方向鍵會移到行首與行尾。" + "value": "Isključeno. Cloud paneli i dalje rade preko ugrađene cmux veze." } - } - } - }, - "settings.terminal.textEditingCommandMovesByWord.subtitleOff": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Command arrow and delete keys move and delete by line, as in macOS text fields." + "value": "Fra. Dine Cloud-paneler fungerer stadig via cmux’ indbyggede forbindelse." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب السطر، كما في حقول النص في macOS." + "value": "Disattivata. I pannelli Cloud continuano a funzionare tramite la connessione integrata di cmux." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht zeilenweise, wie in macOS-Textfeldern." + "value": "បិទ។ ផ្ទាំង Cloud របស់អ្នកនៅតែដំណើរការតាមការភ្ជាប់ដែលមានស្រាប់របស់ cmux។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por línea, como en los campos de texto de macOS." + "value": "Av. Cloud-panelene dine fortsetter å fungere gjennom cmux sin innebygde forbindelse." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par ligne, comme dans les champs de texte de macOS." + "value": "Wyłączona. Panele Cloud nadal działają przez wbudowane połączenie cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Command と矢印キー・削除キーで、macOS のテキストフィールドと同じく行単位に移動・削除します。" + "value": "Desativada. Seus painéis Cloud continuam funcionando pela conexão integrada do cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "Command 화살표 및 삭제 키가 macOS 텍스트 필드처럼 줄 단위로 이동하고 삭제합니다." + "value": "Выключено. Панели Cloud продолжают работать через встроенное соединение cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "Command 加方向键和删除键按行移动和删除,与 macOS 文本框相同。" + "value": "ปิดอยู่ แผง Cloud ยังคงทำงานผ่านการเชื่อมต่อในตัวของ cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "Command 加方向鍵與刪除鍵會依行移動與刪除,與 macOS 文字欄位相同。" + "value": "Kapalı. Cloud panelleriniz cmux’un yerleşik bağlantısıyla çalışmaya devam eder." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Вимкнено. Панелі Cloud продовжують працювати через вбудоване з’єднання cmux." } } } }, - "settings.terminal.textEditingGesturesInFullScreenApps": { + "cloud.vpn.setup.steps.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Text Editing Gestures in Full-Screen Apps" + "value": "First-time setup" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إيماءات تحرير النص في التطبيقات بملء الشاشة" + "value": "Ersteinrichtung" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Textbearbeitungsgesten in Vollbild-Apps" + "value": "Première configuration" } }, "es": { "stringUnit": { "state": "translated", - "value": "Gestos de edición de texto en apps a pantalla completa" + "value": "Configuración inicial" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Gestes d’édition de texte dans les apps plein écran" + "value": "初回設定" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "フルスクリーンアプリでのテキスト編集ジェスチャー" + "value": "首次设置" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "首次設定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전체 화면 앱에서 텍스트 편집 제스처" + "value": "최초 설정" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "全屏应用中的文本编辑手势" + "value": "الإعداد الأولي" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "全螢幕 App 中的文字編輯手勢" + "value": "Prvo podešavanje" } - } - } - }, - "settings.terminal.textEditingGesturesInFullScreenApps.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Gestures also apply while a full-screen app such as vim, less, or tmux is running, so they keep working at a shell inside tmux, screen, or zellij." + "value": "Første opsætning" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "تنطبق الإيماءات أيضًا أثناء تشغيل تطبيق بملء الشاشة مثل vim أو less أو tmux، فتظل تعمل في الصدفة داخل tmux أو screen أو zellij." + "value": "Prima configurazione" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Gesten gelten auch, während eine Vollbild-App wie vim, less oder tmux läuft, und funktionieren so weiter an einer Shell in tmux, screen oder zellij." + "value": "ការរៀបចំលើកដំបូង" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Los gestos también se aplican mientras se ejecuta una app a pantalla completa como vim, less o tmux, así que siguen funcionando en una shell dentro de tmux, screen o zellij." + "value": "Førstegangsoppsett" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Les gestes s’appliquent aussi lorsqu’une app plein écran comme vim, less ou tmux est en cours d’exécution, et continuent donc de fonctionner dans un shell sous tmux, screen ou zellij." + "value": "Pierwsza konfiguracja" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "vim、less、tmux などのフルスクリーンアプリの実行中もジェスチャーが有効になるため、tmux、screen、zellij 内のシェルでも引き続き使えます。" + "value": "Primeira configuração" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "vim, less, tmux 같은 전체 화면 앱이 실행 중일 때도 제스처가 적용되므로 tmux, screen, zellij 안의 셸에서도 계속 작동합니다." + "value": "Первая настройка" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "在 vim、less 或 tmux 等全屏应用运行时手势也会生效,因此在 tmux、screen 或 zellij 中的 shell 里仍可使用。" + "value": "การตั้งค่าครั้งแรก" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "在 vim、less 或 tmux 等全螢幕 App 執行時手勢也會生效,因此在 tmux、screen 或 zellij 中的 shell 裡仍可使用。" + "value": "İlk kurulum" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Перше налаштування" } } } }, - "cloudTree.action.newCloudMachine": { + "cloud.vpn.setup.steps.extension": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "New Cloud Machine" + "value": "1. Click Connect Cloud VPN. When macOS asks, allow the cmux network extension in System Settings." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جهاز سحابي جديد" + "value": "1. Klicken Sie auf Cloud-VPN verbinden. Erlauben Sie auf Aufforderung von macOS die cmux-Netzwerkerweiterung in den Systemeinstellungen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Neue Cloud-Maschine" + "value": "1. Cliquez sur Connecter le VPN Cloud. Lorsque macOS le demande, autorisez l’extension réseau cmux dans Réglages Système." } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva máquina en la nube" + "value": "1. Haz clic en Conectar VPN de Cloud. Cuando macOS lo solicite, permite la extensión de red de cmux en Ajustes del Sistema." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Nouvelle machine cloud" + "value": "1. 「Cloud VPNに接続」をクリックします。macOSに求められたら、システム設定でcmuxのネットワーク機能拡張を許可します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新しいクラウドマシン" + "value": "1. 点击“连接 Cloud VPN”。macOS 提示时,在系统设置中允许 cmux 网络扩展。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "새 클라우드 머신" + "value": "1. 按一下「連接 Cloud VPN」。macOS 提示時,請在系統設定中允許 cmux 網路延伸功能。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "新建云主机" + "value": "1. Cloud VPN 연결을 클릭합니다. macOS에서 요청하면 시스템 설정에서 cmux 네트워크 확장을 허용합니다." } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "新增雲端機器" + "value": "1. انقر على توصيل VPN الخاص بـ Cloud. عندما يطلب macOS ذلك، اسمح بامتداد شبكة cmux في إعدادات النظام." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nova cloud mašina" + "value": "1. Kliknite Poveži Cloud VPN. Kada macOS zatraži, dozvolite cmux mrežni dodatak u Postavkama sistema." } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny cloud-maskine" + "value": "1. Klik på Forbind Cloud VPN. Når macOS spørger, skal du tillade cmux-netværksudvidelsen i Systemindstillinger." } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova macchina cloud" + "value": "1. Fai clic su Connetti VPN Cloud. Quando macOS lo richiede, consenti l’estensione di rete cmux nelle Impostazioni di Sistema." } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីន Cloud ថ្មី" + "value": "1. ចុច ភ្ជាប់ Cloud VPN។ ពេល macOS ស្នើ សូមអនុញ្ញាតផ្នែកបន្ថែមបណ្តាញ cmux ក្នុងការកំណត់ប្រព័ន្ធ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny sky-maskin" + "value": "1. Klikk Koble til Cloud VPN. Når macOS spør, tillat cmux-nettverksutvidelsen i Systeminnstillinger." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa maszyna w chmurze" + "value": "1. Kliknij Połącz z Cloud VPN. Gdy macOS poprosi, zezwól na rozszerzenie sieci cmux w Ustawieniach systemowych." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova máquina na nuvem" + "value": "1. Clique em Conectar Cloud VPN. Quando o macOS pedir, permita a extensão de rede do cmux nos Ajustes do Sistema." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая облачная машина" + "value": "1. Нажмите Подключить Cloud VPN. Когда macOS попросит, разрешите сетевое расширение cmux в системных настройках." } }, "th": { "stringUnit": { "state": "translated", - "value": "เครื่องคลาวด์ใหม่" + "value": "1. คลิก เชื่อมต่อ Cloud VPN เมื่อ macOS ขอ ให้อนุญาตส่วนขยายเครือข่าย cmux ในการตั้งค่าระบบ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni bulut makinesi" + "value": "1. Cloud VPN’e bağlan’a tıklayın. macOS istediğinde Sistem Ayarları’nda cmux ağ uzantısına izin verin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова хмарна машина" + "value": "1. Натисніть Підключити Cloud VPN. Коли macOS попросить, дозвольте мережеве розширення cmux у Системних параметрах." } } } }, - "shortcut.sizeTerminalToMyWindow.label": { + "cloud.vpn.setup.steps.settings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" + "value": "Open General > Login Items & Extensions > Network Extensions, then enable cmux." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "Öffnen Sie Allgemein > Anmeldeobjekte & Erweiterungen > Netzwerkerweiterungen und aktivieren Sie cmux." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" + "value": "Ouvrez Général > Ouverture et extensions > Extensions réseau, puis activez cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "Abre General > Ítems de inicio y extensiones > Extensiones de red y activa cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "「一般」>「ログイン項目と機能拡張」>「ネットワーク機能拡張」を開き、cmuxを有効にします。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "value": "打开“通用”>“登录项与扩展”>“网络扩展”,然后启用 cmux。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "打開「一般」>「登入項目與延伸功能」>「網路延伸功能」,然後啟用 cmux。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "일반 > 로그인 항목 및 확장 프로그램 > 네트워크 확장을 열고 cmux를 활성화합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "افتح عام > عناصر الدخول والامتدادات > امتدادات الشبكة، ثم فعّل cmux." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" + "value": "Otvorite Opšte > Stavke za prijavu i dodaci > Mrežni dodaci, pa omogućite cmux." } - } - } - }, - "command.terminalDisconnectOtherClients.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Disconnect Other Terminal Clients…" + "value": "Åbn Generelt > Loginemner og udvidelser > Netværksudvidelser, og aktivér cmux." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "قطع اتصال عملاء الطرفية الآخرين…" + "value": "Apri Generali > Elementi login ed estensioni > Estensioni di rete, quindi abilita cmux." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Andere Terminal-Clients trennen…" + "value": "បើក ទូទៅ > ធាតុចូល និងផ្នែកបន្ថែម > ផ្នែកបន្ថែមបណ្តាញ ហើយបើក cmux។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Desconectar otros clientes de la terminal…" + "value": "Åpne Generelt > Påloggingselementer og utvidelser > Nettverksutvidelser, og aktiver cmux." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres clients du terminal…" + "value": "Otwórz Ogólne > Elementy logowania i rozszerzenia > Rozszerzenia sieciowe, a następnie włącz cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "他のターミナルクライアントを切断…" + "value": "Abra Geral > Itens de Início e Extensões > Extensões de Rede e ative o cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "다른 터미널 클라이언트 연결 끊기…" + "value": "Откройте Основные > Объекты входа и расширения > Сетевые расширения и включите cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "断开其他终端客户端…" + "value": "เปิด ทั่วไป > รายการเข้าสู่ระบบและส่วนขยาย > ส่วนขยายเครือข่าย แล้วเปิดใช้ cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "中斷其他終端機用戶端的連線…" + "value": "Genel > Giriş Öğeleri ve Uzantılar > Ağ Uzantıları’nı açın ve cmux’u etkinleştirin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відкрийте Загальні > Об’єкти входу та розширення > Мережеві розширення й увімкніть cmux." } } } }, - "command.terminalShowSizePanel.title": { + "cloud.vpn.setup.steps.settingsLegacy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Terminal Size Panel" + "value": "Open Privacy & Security and allow the cmux extension." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إظهار لوحة حجم الطرفية" + "value": "Öffnen Sie Datenschutz & Sicherheit und erlauben Sie die cmux-Erweiterung." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Terminalgrößen-Bereich anzeigen" + "value": "Ouvrez Confidentialité et sécurité et autorisez l’extension cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar el panel de tamaño de la terminal" + "value": "Abre Privacidad y seguridad y permite la extensión de cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Afficher le panneau de taille du terminal" + "value": "「プライバシーとセキュリティ」を開き、cmuxの機能拡張を許可します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズパネルを表示" + "value": "打开“隐私与安全性”,然后允许 cmux 扩展。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "打開「隱私權與安全性」,然後允許 cmux 延伸功能。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 크기 패널 보기" + "value": "개인정보 보호 및 보안을 열고 cmux 확장을 허용합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "显示终端大小面板" + "value": "افتح الخصوصية والأمان واسمح بامتداد cmux." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "顯示終端機大小面板" + "value": "Otvorite Privatnost i sigurnost i dozvolite cmux dodatak." } - } - } - }, - "command.terminalSizeToMyWindow.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" + "value": "Åbn Anonymitet og sikkerhed, og tillad cmux-udvidelsen." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "Apri Privacy e sicurezza e consenti l’estensione cmux." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" + "value": "បើក ឯកជនភាព និងសុវត្ថិភាព ហើយអនុញ្ញាតផ្នែកបន្ថែម cmux។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "Åpne Personvern og sikkerhet og tillat cmux-utvidelsen." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "Otwórz Prywatność i ochrona i zezwól na rozszerzenie cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "value": "Abra Privacidade e Segurança e permita a extensão do cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "Откройте Конфиденциальность и безопасность и разрешите расширение cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "เปิด ความเป็นส่วนตัวและความปลอดภัย แล้วอนุญาตส่วนขยาย cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" + "value": "Gizlilik ve Güvenlik’i açın ve cmux uzantısına izin verin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відкрийте Конфіденційність і безпека та дозвольте розширення cmux." } } } }, - "terminalSharing.detached.hostShutdown": { + "cloud.vpn.setup.steps.configuration": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The terminal host shut down at %@." + "value": "2. Allow cmux to add a VPN configuration named cmux Cloud. This is a separate macOS permission." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "توقف مضيف الطرفية في %@." + "value": "2. Erlauben Sie cmux, eine VPN-Konfiguration namens cmux Cloud hinzuzufügen. Dies ist eine separate macOS-Berechtigung." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Der Terminal-Host wurde um %@ beendet." + "value": "2. Autorisez cmux à ajouter une configuration VPN nommée cmux Cloud. Il s’agit d’une autorisation macOS distincte." } }, "es": { "stringUnit": { "state": "translated", - "value": "El host de la terminal se detuvo a las %@." + "value": "2. Permite que cmux añada una configuración VPN llamada cmux Cloud. Este es un permiso independiente de macOS." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "L’hôte du terminal s’est arrêté à %@." + "value": "2. cmux Cloudという名前のVPN構成の追加を許可します。これは別のmacOS権限です。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルホストが %@ に終了しました。" + "value": "2. 允许 cmux 添加名为 cmux Cloud 的 VPN 配置。这是单独的 macOS 权限。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "2. 允許 cmux 加入名為 cmux Cloud 的 VPN 設定。這是另一項 macOS 權限。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 호스트가 %@에 종료되었습니다." + "value": "2. cmux가 cmux Cloud라는 VPN 구성을 추가하도록 허용합니다. 이는 별도의 macOS 권한입니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "终端主机已于 %@ 关闭。" + "value": "2. اسمح لـ cmux بإضافة إعداد VPN باسم cmux Cloud. هذا إذن منفصل في macOS." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "終端機主機已於 %@ 關閉。" + "value": "2. Dozvolite cmux-u da doda VPN konfiguraciju pod imenom cmux Cloud. Ovo je posebna macOS dozvola." } - } - } - }, - "terminalSharing.detached.network": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "The network dropped." + "value": "2. Tillad cmux at tilføje en VPN-konfiguration med navnet cmux Cloud. Dette er en separat macOS-tilladelse." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "انقطع اتصال الشبكة." + "value": "2. Consenti a cmux di aggiungere una configurazione VPN chiamata cmux Cloud. È un’autorizzazione macOS separata." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Die Netzwerkverbindung wurde unterbrochen." + "value": "2. អនុញ្ញាតឱ្យ cmux បន្ថែមការកំណត់ VPN ឈ្មោះ cmux Cloud។ នេះជាសិទ្ធិ macOS ផ្សេងមួយ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Se perdió la conexión de red." + "value": "2. Tillat cmux å legge til en VPN-konfigurasjon kalt cmux Cloud. Dette er en separat macOS-tillatelse." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "La connexion réseau a été interrompue." + "value": "2. Zezwól cmux dodać konfigurację VPN o nazwie cmux Cloud. To osobne uprawnienie macOS." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "ネットワーク接続が切れました。" + "value": "2. Permita que o cmux adicione uma configuração VPN chamada cmux Cloud. Esta é uma permissão separada do macOS." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "네트워크 연결이 끊어졌습니다." + "value": "2. Разрешите cmux добавить VPN-конфигурацию с именем cmux Cloud. Это отдельное разрешение macOS." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "网络连接已中断。" + "value": "2. อนุญาตให้ cmux เพิ่มการกำหนดค่า VPN ชื่อ cmux Cloud นี่เป็นสิทธิ์ macOS แยกต่างหาก" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "網路連線中斷。" + "value": "2. cmux’un cmux Cloud adlı bir VPN yapılandırması eklemesine izin verin. Bu ayrı bir macOS iznidir." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "2. Дозвольте cmux додати конфігурацію VPN з назвою cmux Cloud. Це окремий дозвіл macOS." } } } }, - "terminalSharing.detached.reattach": { + "cloud.vpn.setup.steps.return": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reattach" + "value": "3. Return to this pane. The connection continues automatically after approval. Disconnect here when finished. Quitting cmux or signing out also disconnects it." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق" + "value": "3. Kehren Sie zu diesem Bereich zurück. Die Verbindung wird nach der Genehmigung automatisch fortgesetzt. Trennen Sie sie hier, wenn Sie fertig sind. Das Beenden von cmux oder Abmelden trennt sie ebenfalls." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden" + "value": "3. Revenez à ce volet. La connexion reprend automatiquement après autorisation. Déconnectez-la ici lorsque vous avez terminé. Quitter cmux ou fermer la session la déconnecte aussi." } }, "es": { "stringUnit": { "state": "translated", - "value": "Volver a conectar" + "value": "3. Vuelve a este panel. La conexión continúa automáticamente tras la autorización. Desconéctala aquí cuando termines. Salir de cmux o cerrar sesión también la desconecta." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Se reconnecter" + "value": "3. このペインに戻ります。承認後、接続は自動的に続行されます。使い終わったらここで切断してください。cmuxの終了やサインアウトでも切断されます。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "再接続" + "value": "3. 返回此面板。批准后连接会自动继续。完成后可在此断开连接。退出 cmux 或退出登录也会断开连接。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "3. 返回此面板。核准後連線會自動繼續。完成後可在此中斷連線。結束 cmux 或登出也會中斷連線。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다시 연결" + "value": "3. 이 패널로 돌아옵니다. 승인 후 연결이 자동으로 계속됩니다. 사용을 마치면 여기에서 연결을 해제하세요. cmux를 종료하거나 로그아웃해도 연결이 해제됩니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "重新连接" + "value": "3. ارجع إلى هذه اللوحة. يستمر الاتصال تلقائيًا بعد الموافقة. اقطع الاتصال هنا عند الانتهاء. يؤدي إنهاء cmux أو تسجيل الخروج أيضًا إلى قطع الاتصال." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "重新連接" + "value": "3. Vratite se na ovaj panel. Veza se nastavlja automatski nakon odobrenja. Ovdje prekinite vezu kada završite. Izlazak iz cmux-a ili odjava takođe prekida vezu." } - } - } - }, - "terminalSharing.detached.reattachAsViewer": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Reattach as Viewer" + "value": "3. Gå tilbage til dette panel. Forbindelsen fortsætter automatisk efter godkendelsen. Afbryd her, når du er færdig. Hvis du afslutter cmux eller logger ud, afbrydes forbindelsen også." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق كمشاهد" + "value": "3. Torna a questo pannello. La connessione continua automaticamente dopo l’autorizzazione. Disconnettila qui quando hai finito. Anche uscire da cmux o effettuare il logout la disconnette." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Als Zuschauer erneut verbinden" + "value": "3. ត្រឡប់ទៅផ្ទាំងនេះ។ ការភ្ជាប់នឹងបន្តដោយស្វ័យប្រវត្តិបន្ទាប់ពីអនុម័ត។ ផ្តាច់នៅទីនេះពេលបញ្ចប់។ ការបិទ cmux ឬចាកចេញក៏ផ្តាច់ការភ្ជាប់ដែរ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Volver a conectar como espectador" + "value": "3. Gå tilbake til dette panelet. Forbindelsen fortsetter automatisk etter godkjenning. Koble fra her når du er ferdig. Avslutning av cmux eller utlogging kobler også fra." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Se reconnecter en lecture seule" + "value": "3. Wróć do tego panelu. Połączenie będzie kontynuowane automatycznie po zatwierdzeniu. Po zakończeniu rozłącz je tutaj. Zamknięcie cmux lub wylogowanie również rozłączy połączenie." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "閲覧者として再接続" + "value": "3. Volte a este painel. A conexão continuará automaticamente após a aprovação. Desconecte aqui quando terminar. Sair do cmux ou encerrar a sessão também desconecta." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "보기 전용으로 다시 연결" + "value": "3. Вернитесь в эту панель. После подтверждения соединение продолжится автоматически. Завершив работу, отключите его здесь. Выход из cmux или системы также отключает соединение." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "以查看者身份重新连接" + "value": "3. กลับมาที่แผงนี้ การเชื่อมต่อจะดำเนินต่อโดยอัตโนมัติหลังการอนุมัติ ตัดการเชื่อมต่อที่นี่เมื่อเสร็จแล้ว การออกจาก cmux หรือออกจากระบบจะตัดการเชื่อมต่อด้วย" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "以檢視者身分重新連接" + "value": "3. Bu panele dönün. Onaydan sonra bağlantı otomatik olarak devam eder. Bitirdiğinizde buradan bağlantıyı kesin. cmux’tan çıkmak veya oturumu kapatmak da bağlantıyı keser." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "3. Поверніться до цієї панелі. Після схвалення з’єднання продовжиться автоматично. Завершивши роботу, від’єднайте його тут. Вихід із cmux або системи також від’єднає з’єднання." } } } }, - "terminalSharing.detached.reattachAsViewer.help": { + "cloud.vpn.setup.address.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reattach without changing the terminal size" + "value": "Private addresses" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق دون تغيير حجم الطرفية" + "value": "Private Adressen" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" + "value": "Adresses privées" } }, "es": { "stringUnit": { "state": "translated", - "value": "Volver a conectar sin cambiar el tamaño de la terminal" + "value": "Direcciones privadas" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Se reconnecter sans modifier la taille du terminal" + "value": "プライベートアドレス" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズを変えずに再接続" + "value": "私有地址" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "私有位址" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 크기를 바꾸지 않고 다시 연결" + "value": "비공개 주소" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "重新连接但不更改终端大小" + "value": "العناوين الخاصة" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "重新連接但不變更終端機大小" + "value": "Privatne adrese" } - } - } - }, - "terminalSharing.detached.someone": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Someone" + "value": "Private adresser" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "شخص ما" + "value": "Indirizzi privati" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Jemand" + "value": "អាសយដ្ឋានឯកជន" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Alguien" + "value": "Private adresser" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Quelqu’un" + "value": "Prywatne adresy" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "誰か" + "value": "Endereços privados" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "누군가" + "value": "Частные адреса" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "ที่อยู่ส่วนตัว" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "Özel adresler" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Приватні адреси" } } } }, - "terminalSharing.detached.superseded": { + "cloud.vpn.setup.openSettings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Another window of this Mac replaced this one at %@." + "value": "Open System Settings" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." + "value": "Systemeinstellungen öffnen" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." + "value": "Ouvrir Réglages Système" } }, "es": { "stringUnit": { "state": "translated", - "value": "Otra ventana de este Mac reemplazó a esta a las %@." + "value": "Abrir Ajustes del Sistema" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." + "value": "システム設定を開く" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" + "value": "打开系统设置" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." + "value": "打開系統設定" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" + "value": "시스템 설정 열기" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" + "value": "فتح إعدادات النظام" } - } - } - }, - "terminalSharing.participant.personDevice": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Otvori Postavke sistema" } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Åbn Systemindstillinger" } - } - } - }, - "terminalSharing.device.browser": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Apri Impostazioni di Sistema" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "المتصفح" + "value": "បើកការកំណត់ប្រព័ន្ធ" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Åpne Systeminnstillinger" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Navegador" + "value": "Otwórz Ustawienia systemowe" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navigateur" + "value": "Abrir Ajustes do Sistema" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "value": "Открыть системные настройки" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "브라우저" + "value": "เปิดการตั้งค่าระบบ" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "浏览器" + "value": "Sistem Ayarlarını aç" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "瀏覽器" + "value": "Відкрити Системні параметри" } } } }, - "terminalSharing.device.ipad": { - "extractionState": "manual", + "settings.app.accentColor.custom": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "iPad" + "value": "مخصص" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "iPad" + "value": "Prilagođeno" } - } - } - }, - "terminalSharing.device.iphone": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "iPhone" + "value": "Tilpasset" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "iPhone" + "value": "Benutzerdefiniert" } - } - } - }, - "terminalSharing.device.mac": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Mac" + "value": "Custom" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Personalizado" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Personnalisée" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Personalizzato" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Mac" + "value": "カスタム" } - } - } - }, - "terminalSharing.device.tui": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Terminal client" + "value": "사용자 지정" } }, - "ar": { + "nb": { "stringUnit": { "state": "translated", - "value": "عميل طرفية" + "value": "Egendefinert" } }, - "de": { + "pl": { "stringUnit": { "state": "translated", - "value": "Terminal-Client" + "value": "Niestandardowy" } }, - "es": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cliente de terminal" + "value": "Personalizado" } }, - "fr": { + "ru": { "stringUnit": { "state": "translated", - "value": "Client terminal" + "value": "Пользовательский" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "ターミナルクライアント" + "value": "กำหนดเอง" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "터미널 클라이언트" + "value": "Özel" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Власний" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "终端客户端" + "value": "自定义" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終端機用戶端" + "value": "自訂" } } } }, - "terminalSharing.device.unknown": { + "devices.incoming.confirm.enable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Device" + "value": "Make Discoverable" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جهاز" + "value": "جعل الجهاز قابلاً للاكتشاف" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gerät" + "value": "Auffindbar machen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dispositivo" + "value": "Hacer detectable" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appareil" + "value": "Rendre détectable" } }, "ja": { "stringUnit": { "state": "translated", - "value": "デバイス" + "value": "検出可能にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기기" + "value": "검색 허용" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设备" + "value": "允许发现" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "裝置" + "value": "允許探索" } - } - } - }, - "terminalSharing.owner.held": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Held size" + "value": "Učini dostupnim" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "حجم محتفظ به" + "value": "Gør synlig" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Beibehaltene Größe" + "value": "Rendi individuabile" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Tamaño conservado" + "value": "ធ្វើឲ្យអាចរកឃើញ" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Taille conservée" + "value": "Gjør denne Mac-en synlig" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "保持されたサイズ" + "value": "Włącz wykrywanie" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "유지된 크기" + "value": "Tornar detectável" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "保留的大小" + "value": "Сделать доступным для обнаружения" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "保留的大小" + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Keşfedilebilir yap" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Зробити цей Mac видимим" } } } }, - "terminalSharing.owner.largest": { + "devices.incoming.confirm.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Largest window" + "value": "Other Macs signed in to your cmux account may discover this Mac and connect to its workspaces. Do you want to continue?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أكبر نافذة" + "value": "قد تكتشف أجهزة Mac الأخرى التي سجّلت الدخول إلى حساب cmux هذا الـ Mac وتتصل بمساحات العمل فيه. هل تريد المتابعة؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Größtes Fenster" + "value": "Andere Macs, die bei deinem cmux-Konto angemeldet sind, können diesen Mac finden und sich mit seinen Arbeitsbereichen verbinden. Möchtest du fortfahren?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana más grande" + "value": "Otros Mac que hayan iniciado sesión en tu cuenta de cmux podrán descubrir este Mac y conectarse a sus espacios de trabajo. ¿Quieres continuar?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Plus grande fenêtre" + "value": "Les autres Mac connectés à votre compte cmux pourront détecter ce Mac et se connecter à ses espaces de travail. Voulez-vous continuer ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最大のウィンドウ" + "value": "cmuxアカウントにサインインしているほかのMacから、このMacが検出され、ワークスペースに接続されることがあります。続けますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가장 큰 창" + "value": "cmux 계정에 로그인한 다른 Mac에서 이 Mac을 검색하고 작업 공간에 연결할 수 있습니다. 계속하시겠습니까?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最大的窗口" + "value": "登录你 cmux 帐户的其他 Mac 可能会发现此 Mac 并连接到其工作区。要继续吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最大的視窗" + "value": "登入您 cmux 帳戶的其他 Mac 可能會探索此 Mac 並連線至其工作區。要繼續嗎?" } - } - } - }, - "terminalSharing.owner.shared": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Shared size" + "value": "Drugi Mac računari prijavljeni na vaš cmux nalog možda će otkriti ovaj Mac i povezati se s njegovim radnim prostorima. Želite li nastaviti?" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "حجم مشترك" + "value": "Andre Mac-computere, der er logget ind på din cmux-konto, kan muligvis finde denne Mac og oprette forbindelse til dens arbejdsområder. Vil du fortsætte?" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Gemeinsame Größe" + "value": "Gli altri Mac che hanno effettuato l’accesso al tuo account cmux potrebbero rilevare questo Mac e connettersi ai suoi spazi di lavoro. Vuoi continuare?" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Tamaño compartido" + "value": "Mac ផ្សេងទៀតដែលបានចូលគណនី cmux របស់អ្នក អាចរកឃើញ Mac នេះ និងភ្ជាប់ទៅកាន់ workspace របស់វា។ តើអ្នកចង់បន្តឬទេ?" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Taille partagée" + "value": "Andre Mac-maskiner som er logget på cmux-kontoen din, kan finne denne Mac-en og koble til arbeidsområdene. Vil du fortsette?" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "共有サイズ" + "value": "Inne Maki zalogowane na Twoje konto cmux mogą wykryć tego Maca i połączyć się z jego obszarami roboczymi. Czy chcesz kontynuować?" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "공유 크기" + "value": "Outros Macs conectados à sua conta cmux poderão descobrir este Mac e se conectar aos seus espaços de trabalho. Deseja continuar?" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "共享大小" + "value": "Другие Mac, вошедшие в вашу учётную запись cmux, могут обнаружить этот Mac и подключиться к его рабочим пространствам. Продолжить?" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Mac เครื่องอื่นที่ลงชื่อเข้าใช้บัญชี cmux ของคุณอาจค้นพบ Mac เครื่องนี้และเชื่อมต่อกับพื้นที่ทำงานของเครื่องนี้ คุณต้องการดำเนินการต่อหรือไม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux hesabınızda oturum açmış diğer Mac’ler bu Mac’i keşfedebilir ve çalışma alanlarına bağlanabilir. Devam etmek istiyor musunuz?" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "共用大小" + "value": "Інші Mac, на яких виконано вхід у ваш обліковий запис cmux, можуть виявити цей Mac і підключитися до його робочих просторів. Продовжити?" } } } }, - "terminalSharing.owner.smallest": { + "devices.incoming.confirm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fits everyone" + "value": "Make this Mac discoverable?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يناسب الجميع" + "value": "هل تريد جعل جهاز Mac هذا قابلاً للاكتشاف؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Passt für alle" + "value": "Diesen Mac auffindbar machen?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se ajusta a todos" + "value": "¿Hacer que este Mac sea detectable?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Convient à tous" + "value": "Rendre ce Mac détectable ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "全員に合わせる" + "value": "このMacを検出可能にしますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모두에게 맞춤" + "value": "이 Mac을 검색 가능하게 할까요?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "适合所有人" + "value": "允许发现此 Mac 吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "符合所有人" + "value": "要允許探索此 Mac 嗎?" } - } - } - }, - "terminalSharing.participant.thisMac": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "This Mac" + "value": "Učiniti ovaj Mac dostupnim?" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "جهاز Mac هذا" + "value": "Gør denne Mac synlig?" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Dieser Mac" + "value": "Rendere individuabile questo Mac?" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Este Mac" + "value": "ធ្វើឲ្យ Mac នេះអាចរកឃើញ?" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Ce Mac" + "value": "Gjøre denne Mac-en synlig?" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "このMac" + "value": "Uwidocznić tego Maca?" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "이 Mac" + "value": "Tornar este Mac detectável?" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "这台 Mac" + "value": "Сделать этот Mac доступным для обнаружения?" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "這台 Mac" + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้หรือไม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu Mac keşfedilebilir yapılsın mı?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Зробити цей Mac доступним для виявлення?" } } } }, - "terminalSharing.owner.possessiveDevice": { + "cloudTree.device.status.connecting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@'s %2$@" + "value": "Connecting…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "جارٍ الاتصال…" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Wird verbunden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Conectando…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Connexion…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@の%2$@" + "value": "接続中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@의 %2$@" + "value": "연결 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@的%2$@" + "value": "正在连接…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@的%2$@" + "value": "正在連線…" } } } }, - "terminalSharing.owner.fixedShort": { + "cloud.teamPicker.createSheet.create": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "Create" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "إنشاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "Erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "Crear" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fixe" + "value": "Créer" } }, "ja": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "고정" + "value": "만들기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "创建" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "建立" } } } }, - "terminalSharing.tab.tooltip": { + "cloud.teamPicker.createSheet.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size set by %1$@ · %2$@" + "value": "Create Team" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحجم يحدده %1$@ · %2$@" + "value": "إنشاء فريق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Größe festgelegt von %1$@ · %2$@" + "value": "Team erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño definido por %1$@ · %2$@" + "value": "Crear equipo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille définie par %1$@ · %2$@" + "value": "Créer une équipe" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@がサイズを設定 · %2$@" + "value": "チームを作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기 설정: %1$@ · %2$@" + "value": "팀 만들기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尺寸由%1$@设定 · %2$@" + "value": "创建团队" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尺寸由%1$@設定 · %2$@" + "value": "建立團隊" } } } }, - "terminalSharing.panel.sizeLabel": { + "cloud.teamPicker.createTeam": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size" + "value": "Create Team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحجم" + "value": "إنشاء فريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Größe" + "value": "Team erstellen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño" + "value": "Crear equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille" + "value": "Créer une équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイズ" + "value": "チームを作成…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기" + "value": "팀 만들기…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尺寸" + "value": "创建团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尺寸" + "value": "建立團隊…" } } } }, - "terminalSharing.sizeMode.latest": { + "cloud.teamPicker.switching": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Follow Latest" + "value": "Switching teams…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اتباع الأحدث" + "value": "جارٍ تبديل الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Letzter Eingabe folgen" + "value": "Team wird gewechselt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Seguir la última entrada" + "value": "Cambiando de equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Suivre la dernière saisie" + "value": "Changement d’équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最新の入力に合わせる" + "value": "チームを切り替え中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최근 입력 따르기" + "value": "팀 전환 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "跟随最新输入" + "value": "正在切换团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "跟隨最新輸入" + "value": "正在切換團隊…" } } } }, - "terminalSharing.sizeMode.smallest": { + "cloud.teamPicker.creating": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fit Everyone" + "value": "Creating team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ملاءمة الجميع" + "value": "جارٍ إنشاء الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Allen anpassen" + "value": "Team wird erstellt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustar a todos" + "value": "Creando equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adapter à tous" + "value": "Création de l’équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "全員に合わせる" + "value": "チームを作成中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모두에게 맞추기" + "value": "팀 만드는 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "适合所有人" + "value": "正在创建团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "適合所有人" + "value": "正在建立團隊…" } } } }, - "terminalSharing.sizeMode.largest": { + "socket.authTeam.busy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Largest Window" + "value": "Another team change is in progress. Try again when it finishes." } }, "ar": { "stringUnit": { "state": "translated", - "value": "أكبر نافذة" + "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." } }, "de": { "stringUnit": { "state": "translated", - "value": "Größtes Fenster" + "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana más grande" + "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Plus grande fenêtre" + "value": "Une autre modification d’équipe est en cours. Réessayez une fois terminée." } }, "ja": { "stringUnit": { "state": "translated", - "value": "最大のウインドウ" + "value": "別のチーム変更を処理中です。完了してからもう一度お試しください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가장 큰 윈도우" + "value": "다른 팀 변경이 진행 중입니다. 완료된 후 다시 시도하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最大窗口" + "value": "另一项团队更改正在进行中,请在完成后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最大視窗" + "value": "另一項團隊變更正在進行中,請在完成後再試一次。" } } } }, - "terminalSharing.sizeMode.priority": { + "cloud.teamPicker.createSheet.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Priority" + "value": "The new team becomes your active team." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأولوية" + "value": "يصبح الفريق الجديد فريقك النشط." } }, "de": { "stringUnit": { "state": "translated", - "value": "Priorität" + "value": "Das neue Team wird Ihr aktives Team." } }, "es": { "stringUnit": { "state": "translated", - "value": "Prioridad" + "value": "El nuevo equipo pasa a ser su equipo activo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Priorité" + "value": "La nouvelle équipe devient votre équipe active." } }, "ja": { "stringUnit": { "state": "translated", - "value": "優先順位" + "value": "新しいチームがアクティブなチームになります。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "우선순위" + "value": "새 팀이 활성 팀이 됩니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "优先级" + "value": "新团队将成为你的当前团队。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "優先順序" + "value": "新團隊會成為你使用中的團隊。" } } } }, - "terminalSharing.sizeMode.fixed": { + "settings.search.alias.section.themes": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "theme themes color scheme colors palette ghostty light dark mode accent" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "theme themes color scheme colors palette ghostty light dark mode accent design designs farbschema farben palette hell dunkel akzent" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "theme themes color scheme colors palette ghostty light dark mode accent thème thèmes couleurs palette clair sombre accent" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "theme themes color scheme colors palette ghostty light dark mode accent سمة سمات ألوان لوحة فاتح داكن تمييز" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fixe" + "value": "theme themes color scheme colors palette ghostty light dark mode accent tema temas colores paleta claro oscuro acento" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "theme themes color scheme colors palette ghostty light dark mode accent 主題 配色 顏色 調色盤 淺色 深色 強調色" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "고정" + "value": "theme themes color scheme colors palette ghostty light dark mode accent 主题 配色 颜色 调色板 浅色 深色 强调色" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "theme themes color scheme colors palette ghostty light dark mode accent 테마 색상 팔레트 라이트 다크 강조색" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "theme themes color scheme colors palette ghostty light dark mode accent テーマ 配色 カラー パレット ライト ダーク アクセント" } } } }, - "terminalSharing.panel.setsSize": { + "settings.section.themes": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "sets size" + "value": "Themes" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يحدد الحجم" + "value": "السمات" } }, "de": { "stringUnit": { "state": "translated", - "value": "legt Größe fest" + "value": "Designs" } }, "es": { "stringUnit": { "state": "translated", - "value": "define el tamaño" + "value": "Temas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "définit la taille" + "value": "Thèmes" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイズを設定" + "value": "テーマ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기 설정" + "value": "테마" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设定尺寸" + "value": "主题" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定尺寸" + "value": "主題" } } } }, - "terminalSharing.panel.notCounted": { + "settings.terminal.theme": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "not counted" + "value": "Terminal Theme" } }, "ar": { "stringUnit": { "state": "translated", - "value": "غير محتسب" + "value": "سمة الطرفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "nicht gezählt" + "value": "Terminal-Design" } }, "es": { "stringUnit": { "state": "translated", - "value": "no cuenta" + "value": "Tema del terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "non compté" + "value": "Thème du terminal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カウント対象外" + "value": "ターミナルテーマ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "계산 안 됨" + "value": "터미널 테마" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "不计入" + "value": "终端主题" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "不計入" + "value": "終端機主題" } } } }, - "terminalSharing.panel.rowOptions": { + "shortcut.diffViewerNextHunk.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Options for %@" + "value": "Diff Viewer: Next Hunk" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "خيارات %@" + "value": "差分ビューア: 次のハンク" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Optionen für %@" + "value": "差异查看器:下一个块" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Opciones de %@" + "value": "Diff-Viewer: Nächster Hunk" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Options pour %@" + "value": "Visionneuse de diff : Bloc suivant" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@のオプション" + "value": "عارض الفروق: المقطع التالي" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ 옵션" + "value": "Visor de diff: Siguiente bloque" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@的选项" + "value": "差異檢視器:下一個區塊" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@的選項" + "value": "비교 뷰어: 다음 헝크" } } } }, - "terminalSharing.panel.disconnectOthersButton": { + "shortcut.diffViewerPreviousHunk.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect Others" + "value": "Diff Viewer: Previous Hunk" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "قطع اتصال الآخرين" + "value": "差分ビューア: 前のハンク" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Andere trennen" + "value": "差异查看器:上一个块" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Desconectar a los demás" + "value": "Diff-Viewer: Vorheriger Hunk" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres" + "value": "Visionneuse de diff : Bloc précédent" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "他の接続を切断" + "value": "عارض الفروق: المقطع السابق" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "다른 연결 끊기" + "value": "Visor de diff: Bloque anterior" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "断开其他连接" + "value": "差異檢視器:上一個區塊" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "中斷其他連線" + "value": "비교 뷰어: 이전 헝크" } } } }, - "terminalSharing.detached.titleShort": { + "cloudMenu.machine.freeAccess": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Detached" + "value": "Free access" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم الفصل" + "value": "وصول مجاني" } }, "de": { "stringUnit": { "state": "translated", - "value": "Getrennt" + "value": "Kostenloser Zugang" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectado" + "value": "Acceso gratuito" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Détaché" + "value": "Accès gratuit" } }, "ja": { "stringUnit": { "state": "translated", - "value": "切断されました" + "value": "無料アクセス" } }, "ko": { "stringUnit": { "state": "translated", - "value": "분리됨" + "value": "무료 이용" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已分离" + "value": "免费访问" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已分離" + "value": "免費存取" } } } }, - "terminalSharing.detached.byMessageShort": { + "cloudMenu.machine.locked": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ disconnected this Mac at %2$@." + "value": "Locked" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع %1$@ اتصال هذا الـMac في %2$@." + "value": "مقفلة" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ hat diesen Mac um %2$@ getrennt." + "value": "Gesperrt" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ desconectó este Mac a las %2$@." + "value": "Bloqueada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ a déconnecté ce Mac à %2$@." + "value": "Verrouillée" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@が%2$@にこのMacを切断しました。" + "value": "ロック中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@이(가) %2$@에 이 Mac의 연결을 끊었습니다." + "value": "잠김" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@于%2$@断开了这台Mac的连接。" + "value": "已锁定" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@於%2$@中斷了這台Mac的連線。" + "value": "已鎖定" } } } }, - "terminalSharing.chip.hiddenColumns": { + "cloudMenu.dashboard": { "extractionState": "manual", "localizations": { "en": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld col hidden" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld cols hidden" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Open Cloud Dashboard" } }, "ar": { - "variations": { - "plural": { - "zero": { - "stringUnit": { - "state": "translated", - "value": "لا أعمدة مخفية (%ld)" - } - }, - "one": { - "stringUnit": { - "state": "translated", - "value": "عمود واحد مخفي (%ld)" - } - }, - "two": { - "stringUnit": { - "state": "translated", - "value": "عمودان مخفيان (%ld)" - } - }, - "few": { - "stringUnit": { - "state": "translated", - "value": "%ld أعمدة مخفية" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld عمودًا مخفيًا" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld عمود مخفي" - } - } - } + "stringUnit": { + "state": "translated", + "value": "فتح لوحة تحكم السحابة" } }, "de": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld Spalte ausgeblendet" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld Spalten ausgeblendet" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Cloud-Dashboard öffnen" } }, "es": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld columna oculta" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld de columnas ocultas" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld columnas ocultas" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Abrir el panel de Cloud" } }, "fr": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld colonne masquée" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld de colonnes masquées" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld colonnes masquées" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Ouvrir le tableau de bord Cloud" } }, "ja": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld列が非表示" - } - } - } + "stringUnit": { + "state": "translated", + "value": "クラウドダッシュボードを開く" } }, "ko": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld열 숨겨짐" - } - } - } + "stringUnit": { + "state": "translated", + "value": "클라우드 대시보드 열기" } }, "zh-Hans": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "隐藏 %ld 列" - } - } - } + "stringUnit": { + "state": "translated", + "value": "打开云端控制面板" } }, "zh-Hant": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "隱藏 %ld 欄" - } - } - } + "stringUnit": { + "state": "translated", + "value": "打開雲端控制面板" } } } }, - "terminalSharing.panel.cancel": { + "cloudMenu.diagnostics": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Cloud Diagnostics" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "تشخيصات السحابة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Cloud-Diagnose" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Diagnóstico de Cloud" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Diagnostics Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "クラウド診断" } }, "ko": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "클라우드 진단" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "云端诊断" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "雲端診斷" } } } }, - "terminalSharing.panel.disconnectOthers.confirm": { + "cloudMenu.machines.empty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect all other clients?" + "value": "No machines yet" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد قطع اتصال جميع العملاء الآخرين؟" + "value": "لا توجد أجهزة بعد" } }, "de": { "stringUnit": { "state": "translated", - "value": "Alle anderen Clients trennen?" + "value": "Noch keine Maschinen" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Desconectar todos los demás clientes?" + "value": "Aún no hay máquinas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter tous les autres clients ?" + "value": "Aucune machine pour le moment" } }, "ja": { "stringUnit": { "state": "translated", - "value": "他のすべてのクライアントを切断しますか?" + "value": "マシンはまだありません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 모든 클라이언트의 연결을 끊을까요?" + "value": "아직 머신이 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "要断开其他所有客户端吗?" + "value": "还没有机器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要中斷其他所有用戶端的連線嗎?" + "value": "尚無機器" } } } }, - "terminalSharing.panel.disconnectOthers.confirmButton": { + "cloudMenu.machines.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "Cloud Machines" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "أجهزة السحابة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "Cloud-Maschinen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Máquinas de Cloud" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "Machines Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "クラウドマシン" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 끊기" + "value": "클라우드 머신" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "云端机器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "雲端機器" } } } }, - "terminalSharing.panel.fixedColumns": { + "cloudMenu.more": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Columns" + "value": "More Cloud" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأعمدة" + "value": "المزيد من السحابة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Spalten" + "value": "Mehr Cloud" } }, "es": { "stringUnit": { "state": "translated", - "value": "Columnas" + "value": "Más de Cloud" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Colonnes" + "value": "Plus de Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "列" + "value": "その他のクラウド" } }, "ko": { "stringUnit": { "state": "translated", - "value": "열" + "value": "클라우드 더 보기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "列数" + "value": "更多云端项目" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "欄數" + "value": "更多雲端項目" } } } }, - "terminalSharing.panel.fixedRows": { + "cloudMenu.problem.requiresPro": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rows" + "value": "Cloud machines need cmux Pro" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الصفوف" + "value": "تتطلب أجهزة السحابة cmux Pro" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeilen" + "value": "Cloud-Maschinen erfordern cmux Pro" } }, "es": { "stringUnit": { "state": "translated", - "value": "Filas" + "value": "Las máquinas de Cloud requieren cmux Pro" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Lignes" + "value": "Les machines Cloud nécessitent cmux Pro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "行" + "value": "クラウドマシンには cmux Pro が必要です" } }, "ko": { "stringUnit": { "state": "translated", - "value": "행" + "value": "클라우드 머신에는 cmux Pro가 필요합니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "行数" + "value": "云端机器需要 cmux Pro" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "列數" + "value": "雲端機器需要 cmux Pro" } } } }, - "terminalSharing.panel.unavailable": { + "cloudMenu.problem.session": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This terminal is not shared." + "value": "Your Cloud session expired" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هذه الطرفية غير مشتركة." + "value": "انتهت صلاحية جلسة السحابة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Terminal wird nicht geteilt." + "value": "Deine Cloud-Sitzung ist abgelaufen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta terminal no está compartida." + "value": "Tu sesión de Cloud ha caducado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce terminal n’est pas partagé." + "value": "Votre session Cloud a expiré" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このターミナルは共有されていません。" + "value": "クラウドのセッションが期限切れです" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 터미널은 공유되지 않았습니다." + "value": "클라우드 세션이 만료되었습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端未共享。" + "value": "你的云端会话已过期" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機未共用。" + "value": "你的雲端工作階段已過期" } } } }, - "terminalSharing.panel.counts": { + "cloudMenu.problem.unreachable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Counts toward size" + "value": "Could not reach cmux Cloud" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يُحتسب في الحجم" + "value": "تعذر الوصول إلى cmux Cloud" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zählt für die Größe" + "value": "cmux Cloud ist nicht erreichbar" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cuenta para el tamaño" + "value": "No se pudo conectar con cmux Cloud" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Compte pour la taille" + "value": "Impossible de joindre cmux Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイズに反映" + "value": "cmux Cloud に接続できません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기에 반영" + "value": "cmux Cloud에 연결할 수 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "计入大小" + "value": "无法连接 cmux Cloud" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "計入大小" + "value": "無法連線到 cmux Cloud" } } } }, - "terminalSharing.panel.disconnect": { + "cloudMenu.retry": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "Try Again" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "إعادة المحاولة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "Erneut versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Reintentar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "Réessayer" } }, "ja": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "再試行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 끊기" + "value": "다시 시도" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "再試一次" } } } }, - "settings.search.alias.section.themes": { + "cloudMenu.showMachines": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent" + "value": "Show Machines Sidebar" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent design designs farbschema farben palette hell dunkel akzent" + "value": "إظهار الشريط الجانبي للأجهزة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent thème thèmes couleurs palette clair sombre accent" + "value": "Maschinen-Seitenleiste anzeigen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent سمة سمات ألوان لوحة فاتح داكن تمييز" + "value": "Mostrar la barra lateral de máquinas" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent tema temas colores paleta claro oscuro acento" + "value": "Afficher la barre latérale des machines" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 主題 配色 顏色 調色盤 淺色 深色 強調色" + "value": "マシンのサイドバーを表示" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 主题 配色 颜色 调色板 浅色 深色 强调色" + "value": "머신 사이드바 보기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 테마 색상 팔레트 라이트 다크 강조색" + "value": "显示机器侧边栏" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent テーマ 配色 カラー パレット ライト ダーク アクセント" + "value": "顯示機器側邊欄" } } } }, - "settings.section.themes": { + "cloudMenu.signOut": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Themes" + "value": "Sign Out" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السمات" + "value": "تسجيل الخروج" } }, "de": { "stringUnit": { "state": "translated", - "value": "Designs" + "value": "Abmelden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Temas" + "value": "Cerrar sesión" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Thèmes" + "value": "Se déconnecter" } }, "ja": { "stringUnit": { "state": "translated", - "value": "テーマ" + "value": "サインアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "테마" + "value": "로그아웃" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "主题" + "value": "退出登录" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "主題" + "value": "登出" } } } }, - "settings.terminal.theme": { + "cloudMenu.signedIn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Terminal Theme" + "value": "Signed In" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سمة الطرفية" + "value": "تم تسجيل الدخول" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal-Design" + "value": "Angemeldet" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tema del terminal" + "value": "Sesión iniciada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Thème du terminal" + "value": "Connecté" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルテーマ" + "value": "サインイン済み" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 테마" + "value": "로그인됨" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "终端主题" + "value": "已登录" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終端機主題" + "value": "已登入" } } } }, - "cloudMenu.machine.freeAccess": { + "cloudMenu.team": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Free access" + "value": "Team" } }, "ar": { "stringUnit": { "state": "translated", - "value": "وصول مجاني" + "value": "الفريق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kostenloser Zugang" + "value": "Team" } }, "es": { "stringUnit": { "state": "translated", - "value": "Acceso gratuito" + "value": "Equipo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Accès gratuit" + "value": "Équipe" } }, "ja": { "stringUnit": { "state": "translated", - "value": "無料アクセス" + "value": "チーム" } }, "ko": { "stringUnit": { "state": "translated", - "value": "무료 이용" + "value": "팀" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "免费访问" + "value": "团队" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "免費存取" + "value": "團隊" } } } }, - "cloudMenu.machine.locked": { + "cloudMenu.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Locked" + "value": "Cloud" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مقفلة" + "value": "السحابة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gesperrt" + "value": "Cloud" } }, "es": { "stringUnit": { "state": "translated", - "value": "Bloqueada" + "value": "Cloud" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Verrouillée" + "value": "Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ロック中" + "value": "クラウド" } }, "ko": { "stringUnit": { "state": "translated", - "value": "잠김" + "value": "클라우드" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已锁定" + "value": "云端" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已鎖定" + "value": "雲端" } } } }, - "cloudMenu.dashboard": { + "cloudMenu.tone.attention": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Cloud Dashboard" + "value": "Needs attention" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فتح لوحة تحكم السحابة" + "value": "يحتاج إلى انتباه" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Dashboard öffnen" + "value": "Erfordert Aufmerksamkeit" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir el panel de Cloud" + "value": "Requiere atención" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir le tableau de bord Cloud" + "value": "Nécessite une attention" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウドダッシュボードを開く" + "value": "対応が必要" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 대시보드 열기" + "value": "확인 필요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开云端控制面板" + "value": "需要处理" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打開雲端控制面板" + "value": "需要處理" } } } }, - "cloudMenu.diagnostics": { + "menu.cloud.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud Diagnostics" + "value": "Cloud" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تشخيصات السحابة" + "value": "السحابة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Diagnose" + "value": "Cloud" } }, "es": { "stringUnit": { "state": "translated", - "value": "Diagnóstico de Cloud" + "value": "Cloud" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Diagnostics Cloud" + "value": "Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウド診断" + "value": "クラウド" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 진단" + "value": "클라우드" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端诊断" + "value": "云端" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端診斷" + "value": "雲端" } } } }, - "cloudMenu.machines.empty": { + "cloudMenu.machines.loading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No machines yet" + "value": "Cloud Machines · Loading…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد أجهزة بعد" + "value": "أجهزة السحابة · جارٍ التحميل…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Noch keine Maschinen" + "value": "Cloud-Maschinen · Wird geladen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Aún no hay máquinas" + "value": "Máquinas de Cloud · Cargando…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune machine pour le moment" + "value": "Machines Cloud · Chargement…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マシンはまだありません" + "value": "クラウドマシン · 読み込み中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아직 머신이 없습니다" + "value": "클라우드 머신 · 불러오는 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "还没有机器" + "value": "云端机器 · 正在加载…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尚無機器" + "value": "雲端機器 · 正在載入…" } } } }, - "cloudMenu.machines.title": { + "cloudMenu.machines.showAll": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud Machines" + "value": "Show All Machines…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أجهزة السحابة" + "value": "عرض كل الأجهزة…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen" + "value": "Alle Maschinen anzeigen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Máquinas de Cloud" + "value": "Mostrar todas las máquinas…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Machines Cloud" + "value": "Afficher toutes les machines…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウドマシン" + "value": "すべてのマシンを表示…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 머신" + "value": "모든 머신 보기…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端机器" + "value": "显示所有机器…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端機器" + "value": "顯示所有機器…" } } } }, - "cloudMenu.more": { + "cloudMenu.newMachine": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "More Cloud" + "value": "New Cloud Machine…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "المزيد من السحابة" + "value": "جهاز سحابي جديد…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mehr Cloud" + "value": "Neue Cloud-Maschine…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Más de Cloud" + "value": "Nueva máquina de Cloud…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Plus de Cloud" + "value": "Nouvelle machine Cloud…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "その他のクラウド" + "value": "新規クラウドマシン…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 더 보기" + "value": "새 클라우드 머신…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "更多云端项目" + "value": "新建云端机器…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "更多雲端項目" + "value": "新增雲端機器…" } } } }, - "cloudMenu.problem.requiresPro": { + "cloudMenu.signIn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud machines need cmux Pro" + "value": "Sign In to cmux Cloud…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تتطلب أجهزة السحابة cmux Pro" + "value": "تسجيل الدخول إلى cmux Cloud…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen erfordern cmux Pro" + "value": "Bei cmux Cloud anmelden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Las máquinas de Cloud requieren cmux Pro" + "value": "Iniciar sesión en cmux Cloud…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les machines Cloud nécessitent cmux Pro" + "value": "Se connecter à cmux Cloud…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウドマシンには cmux Pro が必要です" + "value": "cmux Cloud にサインイン…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 머신에는 cmux Pro가 필요합니다" + "value": "cmux Cloud에 로그인…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端机器需要 cmux Pro" + "value": "登录 cmux Cloud…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端機器需要 cmux Pro" + "value": "登入 cmux Cloud…" } } } }, - "cloudMenu.problem.session": { + "cloudMenu.signInAgain": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Your Cloud session expired" + "value": "Sign In Again…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتهت صلاحية جلسة السحابة" + "value": "تسجيل الدخول مجددًا…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Deine Cloud-Sitzung ist abgelaufen" + "value": "Erneut anmelden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tu sesión de Cloud ha caducado" + "value": "Volver a iniciar sesión…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Votre session Cloud a expiré" + "value": "Se reconnecter…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウドのセッションが期限切れです" + "value": "もう一度サインイン…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 세션이 만료되었습니다" + "value": "다시 로그인…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "你的云端会话已过期" + "value": "重新登录…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "你的雲端工作階段已過期" + "value": "重新登入…" } } } }, - "cloudMenu.problem.unreachable": { + "cloudMenu.signingIn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Could not reach cmux Cloud" + "value": "Signing In…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذر الوصول إلى cmux Cloud" + "value": "جارٍ تسجيل الدخول…" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux Cloud ist nicht erreichbar" + "value": "Anmeldung läuft…" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo conectar con cmux Cloud" + "value": "Iniciando sesión…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible de joindre cmux Cloud" + "value": "Connexion…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux Cloud に接続できません" + "value": "サインイン中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux Cloud에 연결할 수 없습니다" + "value": "로그인 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法连接 cmux Cloud" + "value": "正在登录…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法連線到 cmux Cloud" + "value": "正在登入…" } } } }, - "cloudMenu.retry": { + "cloudMenu.upgrade": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Try Again" + "value": "Upgrade to Pro…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إعادة المحاولة" + "value": "الترقية إلى Pro…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Erneut versuchen" + "value": "Auf Pro upgraden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reintentar" + "value": "Mejorar a Pro…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Réessayer" + "value": "Passer à Pro…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再試行" + "value": "Pro にアップグレード…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다시 시도" + "value": "Pro로 업그레이드…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重试" + "value": "升级到 Pro…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "再試一次" + "value": "升級至 Pro…" } } } }, - "cloudMenu.showMachines": { + "cloudTree.action.newCloudMachine": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Machines Sidebar" + "value": "New Cloud Machine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار الشريط الجانبي للأجهزة" + "value": "جهاز سحابي جديد" } }, "de": { "stringUnit": { "state": "translated", - "value": "Maschinen-Seitenleiste anzeigen" + "value": "Neue Cloud-Maschine" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar la barra lateral de máquinas" + "value": "Nueva máquina en la nube" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher la barre latérale des machines" + "value": "Nouvelle machine cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マシンのサイドバーを表示" + "value": "新しいクラウドマシン" } }, "ko": { "stringUnit": { "state": "translated", - "value": "머신 사이드바 보기" + "value": "새 클라우드 머신" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示机器侧边栏" + "value": "新建云主机" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示機器側邊欄" + "value": "新增雲端機器" } - } - } - }, - "cloudMenu.signOut": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Sign Out" + "value": "Nova cloud mašina" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "تسجيل الخروج" + "value": "Ny cloud-maskine" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Abmelden" + "value": "Nuova macchina cloud" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Cerrar sesión" + "value": "ម៉ាស៊ីន Cloud ថ្មី" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Se déconnecter" + "value": "Ny sky-maskin" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "サインアウト" + "value": "Nowa maszyna w chmurze" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "로그아웃" + "value": "Nova máquina na nuvem" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "退出登录" + "value": "Новая облачная машина" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "登出" + "value": "เครื่องคลาวด์ใหม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Yeni bulut makinesi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Нова хмарна машина" } } } }, - "cloudMenu.signedIn": { + "terminalContextMenu.copyLink": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Signed In" + "value": "Copy Link" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم تسجيل الدخول" + "value": "نسخ الرابط" } }, "de": { "stringUnit": { "state": "translated", - "value": "Angemeldet" + "value": "Link kopieren" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sesión iniciada" + "value": "Copiar enlace" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connecté" + "value": "Copier le lien" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サインイン済み" + "value": "リンクをコピー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로그인됨" + "value": "링크 복사" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已登录" + "value": "复制链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已登入" + "value": "複製連結" } } } }, - "cloudMenu.team": { + "terminalContextMenu.openLinkInCmuxBrowser": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Team" + "value": "Open Link in cmux Browser" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الفريق" + "value": "فتح الرابط في متصفح cmux" } }, "de": { "stringUnit": { "state": "translated", - "value": "Team" + "value": "Link im cmux-Browser öffnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Equipo" + "value": "Abrir enlace en el navegador de cmux" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Équipe" + "value": "Ouvrir le lien dans le navigateur cmux" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チーム" + "value": "リンクをcmuxブラウザで開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀" + "value": "링크를 cmux 브라우저에서 열기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "团队" + "value": "在 cmux 浏览器中打开链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "團隊" + "value": "在 cmux 瀏覽器中開啟連結" } } } }, - "cloudMenu.title": { + "terminalContextMenu.openLinkInDefaultBrowser": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Open Link in Default Browser" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السحابة" + "value": "فتح الرابط في المتصفح الافتراضي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Link im Standardbrowser öffnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Abrir enlace en el navegador predeterminado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Ouvrir le lien dans le navigateur par défaut" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウド" + "value": "リンクをデフォルトブラウザで開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드" + "value": "링크를 기본 브라우저에서 열기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端" + "value": "在默认浏览器中打开链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端" + "value": "在預設瀏覽器中開啟連結" } } } }, - "cloudMenu.tone.attention": { + "cli.restore.error.routedLauncherNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Needs attention" + "value": "restore: this session was started with '%1$@ claude proxy', but '%1$@' is not on PATH in this shell. Add it to PATH, then retry." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يحتاج إلى انتباه" + "value": "restore: このセッションは「%1$@ claude proxy」で起動されましたが、このシェルの PATH に「%1$@」がありません。PATH に追加してから、再試行してください。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Erfordert Aufmerksamkeit" + "value": "restore:此会话是通过“%1$@ claude proxy”启动的,但此 shell 的 PATH 中没有“%1$@”。请将其添加到 PATH,然后重试。" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Requiere atención" + "value": "restore: Diese Sitzung wurde mit „%1$@ claude proxy“ gestartet, aber „%1$@“ ist in dieser Shell nicht im PATH. Fügen Sie es zum PATH hinzu und versuchen Sie es dann erneut." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nécessite une attention" + "value": "restore : cette session a été démarrée avec « %1$@ claude proxy », mais « %1$@ » n'est pas dans le PATH de ce shell. Ajoutez-le au PATH, puis réessayez." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "対応が必要" + "value": "restore: بدأت هذه الجلسة باستخدام '%1$@ claude proxy'، لكن '%1$@' غير موجود في PATH في هذه الصدفة. أضفه إلى PATH، ثم أعد المحاولة." } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "확인 필요" + "value": "restore: esta sesión se inició con '%1$@ claude proxy', pero '%1$@' no está en el PATH de este shell. Agréguelo al PATH y vuelva a intentarlo." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "需要处理" + "value": "restore:此工作階段是以「%1$@ claude proxy」啟動的,但此 shell 的 PATH 中沒有「%1$@」。請將其加入 PATH,然後重試。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "需要處理" + "value": "restore: 이 세션은 '%1$@ claude proxy'로 시작되었지만 이 셸의 PATH에 '%1$@'이(가) 없습니다. PATH에 추가한 후 다시 시도하십시오." } } } }, - "menu.cloud.title": { + "settings.terminal.textEditingCommandMovesByWord": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Command Moves by Word" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السحابة" + "value": "Command ينقل حسب الكلمة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Befehlstaste bewegt wortweise" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Comando mueve por palabra" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Commande déplace par mot" } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウド" + "value": "Command で単語単位に移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드" + "value": "Command로 단어 단위 이동" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端" + "value": "Command 按词移动" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端" + "value": "Command 依字移動" } } } }, - "cloudMenu.machines.loading": { + "settings.terminal.textEditingCommandMovesByWord.subtitleOn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud Machines · Loading…" + "value": "Command arrow and delete keys move and delete by word, like Option. Control Left and Right Arrow move to the start and end of the line." } }, "ar": { "stringUnit": { "state": "translated", - "value": "أجهزة السحابة · جارٍ التحميل…" + "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب الكلمة، مثل Option. وينقل Control مع السهمين الأيسر والأيمن إلى بداية السطر ونهايته." } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen · Wird geladen…" + "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht wortweise, wie die Wahltaste. Control mit Links- und Rechtspfeil springt an Anfang und Ende der Zeile." } }, "es": { "stringUnit": { "state": "translated", - "value": "Máquinas de Cloud · Cargando…" + "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por palabra, como Opción. Control con las flechas izquierda y derecha va al inicio y al final de la línea." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Machines Cloud · Chargement…" + "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par mot, comme Option. Contrôle avec les flèches gauche et droite va au début et à la fin de la ligne." } }, "ja": { "stringUnit": { "state": "translated", - "value": "クラウドマシン · 読み込み中…" + "value": "Command と矢印キー・削除キーで、Option と同じく単語単位に移動・削除します。Control と左右矢印キーで行頭・行末に移動します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 머신 · 불러오는 중…" + "value": "Command 화살표 및 삭제 키가 Option처럼 단어 단위로 이동하고 삭제합니다. Control 왼쪽 및 오른쪽 화살표는 줄의 시작과 끝으로 이동합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端机器 · 正在加载…" + "value": "Command 加方向键和删除键按词移动和删除,与 Option 相同。Control 加左右方向键移到行首和行尾。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端機器 · 正在載入…" + "value": "Command 加方向鍵與刪除鍵會依字移動與刪除,與 Option 相同。Control 加左右方向鍵會移到行首與行尾。" } } } }, - "cloudMenu.machines.showAll": { + "settings.terminal.textEditingCommandMovesByWord.subtitleOff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show All Machines…" + "value": "Command arrow and delete keys move and delete by line, as in macOS text fields." } }, "ar": { "stringUnit": { "state": "translated", - "value": "عرض كل الأجهزة…" + "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب السطر، كما في حقول النص في macOS." } }, "de": { "stringUnit": { "state": "translated", - "value": "Alle Maschinen anzeigen…" + "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht zeilenweise, wie in macOS-Textfeldern." } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar todas las máquinas…" + "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por línea, como en los campos de texto de macOS." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher toutes les machines…" + "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par ligne, comme dans les champs de texte de macOS." } }, "ja": { "stringUnit": { "state": "translated", - "value": "すべてのマシンを表示…" + "value": "Command と矢印キー・削除キーで、macOS のテキストフィールドと同じく行単位に移動・削除します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 머신 보기…" + "value": "Command 화살표 및 삭제 키가 macOS 텍스트 필드처럼 줄 단위로 이동하고 삭제합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示所有机器…" + "value": "Command 加方向键和删除键按行移动和删除,与 macOS 文本框相同。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示所有機器…" + "value": "Command 加方向鍵與刪除鍵會依行移動與刪除,與 macOS 文字欄位相同。" } } } }, - "cloudMenu.newMachine": { + "settings.terminal.textEditingGesturesInFullScreenApps": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "New Cloud Machine…" + "value": "Text Editing Gestures in Full-Screen Apps" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جهاز سحابي جديد…" + "value": "إيماءات تحرير النص في التطبيقات بملء الشاشة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neue Cloud-Maschine…" + "value": "Textbearbeitungsgesten in Vollbild-Apps" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva máquina de Cloud…" + "value": "Gestos de edición de texto en apps a pantalla completa" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvelle machine Cloud…" + "value": "Gestes d’édition de texte dans les apps plein écran" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規クラウドマシン…" + "value": "フルスクリーンアプリでのテキスト編集ジェスチャー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 클라우드 머신…" + "value": "전체 화면 앱에서 텍스트 편집 제스처" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建云端机器…" + "value": "全屏应用中的文本编辑手势" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增雲端機器…" + "value": "全螢幕 App 中的文字編輯手勢" } } } }, - "cloudMenu.signIn": { + "settings.terminal.textEditingGesturesInFullScreenApps.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign In to cmux Cloud…" + "value": "Gestures also apply while a full-screen app such as vim, less, or tmux is running, so they keep working at a shell inside tmux, screen, or zellij." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسجيل الدخول إلى cmux Cloud…" + "value": "تنطبق الإيماءات أيضًا أثناء تشغيل تطبيق بملء الشاشة مثل vim أو less أو tmux، فتظل تعمل في الصدفة داخل tmux أو screen أو zellij." } }, "de": { "stringUnit": { "state": "translated", - "value": "Bei cmux Cloud anmelden…" + "value": "Gesten gelten auch, während eine Vollbild-App wie vim, less oder tmux läuft, und funktionieren so weiter an einer Shell in tmux, screen oder zellij." } }, "es": { "stringUnit": { "state": "translated", - "value": "Iniciar sesión en cmux Cloud…" + "value": "Los gestos también se aplican mientras se ejecuta una app a pantalla completa como vim, less o tmux, así que siguen funcionando en una shell dentro de tmux, screen o zellij." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Se connecter à cmux Cloud…" + "value": "Les gestes s’appliquent aussi lorsqu’une app plein écran comme vim, less ou tmux est en cours d’exécution, et continuent donc de fonctionner dans un shell sous tmux, screen ou zellij." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux Cloud にサインイン…" + "value": "vim、less、tmux などのフルスクリーンアプリの実行中もジェスチャーが有効になるため、tmux、screen、zellij 内のシェルでも引き続き使えます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux Cloud에 로그인…" + "value": "vim, less, tmux 같은 전체 화면 앱이 실행 중일 때도 제스처가 적용되므로 tmux, screen, zellij 안의 셸에서도 계속 작동합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "登录 cmux Cloud…" + "value": "在 vim、less 或 tmux 等全屏应用运行时手势也会生效,因此在 tmux、screen 或 zellij 中的 shell 里仍可使用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "登入 cmux Cloud…" + "value": "在 vim、less 或 tmux 等全螢幕 App 執行時手勢也會生效,因此在 tmux、screen 或 zellij 中的 shell 裡仍可使用。" } } } }, - "cloudMenu.signInAgain": { + "socket.sidebar.closeSurface.confirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign In Again…" + "value": "Surface has a running process; retry with --force" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسجيل الدخول مجددًا…" + "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" } }, "de": { "stringUnit": { "state": "translated", - "value": "Erneut anmelden…" + "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Volver a iniciar sesión…" + "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con --force" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Se reconnecter…" + "value": "La surface a un processus en cours d’exécution ; réessayez avec --force" } }, "ja": { "stringUnit": { "state": "translated", - "value": "もう一度サインイン…" + "value": "サーフェスでプロセスが実行中です。--force を指定して再試行してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다시 로그인…" + "value": "표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重新登录…" + "value": "此表面有正在运行的进程;请使用 --force 重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新登入…" + "value": "此表面有正在執行的程序;請使用 --force 重試" } } } }, - "cloudMenu.signingIn": { + "socket.sidebar.closeSurface.failed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Signing In…" + "value": "Failed to close surface" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جارٍ تسجيل الدخول…" + "value": "تعذر إغلاق السطح" } }, "de": { "stringUnit": { "state": "translated", - "value": "Anmeldung läuft…" + "value": "Die Oberfläche konnte nicht geschlossen werden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Iniciando sesión…" + "value": "No se pudo cerrar la superficie" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion…" + "value": "Échec de la fermeture de la surface" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サインイン中…" + "value": "サーフェスを閉じられませんでした" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로그인 중…" + "value": "표면을 닫지 못했습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在登录…" + "value": "无法关闭此表面" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在登入…" + "value": "無法關閉表面" } } } }, - "cloudMenu.upgrade": { + "socket.surface.close.confirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Upgrade to Pro…" + "value": "Surface has a running process; retry with force=true" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الترقية إلى Pro…" + "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" } }, "de": { "stringUnit": { "state": "translated", - "value": "Auf Pro upgraden…" + "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mejorar a Pro…" + "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con force=true" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Passer à Pro…" + "value": "La surface a un processus en cours d’exécution ; réessayez avec force=true" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Pro にアップグレード…" + "value": "サーフェスでプロセスが実行中です。force=true を指定して再試行してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Pro로 업그레이드…" + "value": "표면에서 실행 중인 프로세스가 있습니다. force=true로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "升级到 Pro…" + "value": "此表面有正在运行的进程;请使用 force=true 重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "升級至 Pro…" + "value": "此表面有正在執行的程序;請使用 force=true 重試" } } } }, - "terminalContextMenu.copyLink": { + "socket.surface.close.failed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Link" + "value": "Failed to close surface" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نسخ الرابط" + "value": "تعذر إغلاق السطح" } }, "de": { "stringUnit": { "state": "translated", - "value": "Link kopieren" + "value": "Die Oberfläche konnte nicht geschlossen werden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copiar enlace" + "value": "No se pudo cerrar la superficie" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copier le lien" + "value": "Échec de la fermeture de la surface" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リンクをコピー" + "value": "サーフェスを閉じられませんでした" } }, "ko": { "stringUnit": { "state": "translated", - "value": "링크 복사" + "value": "표면을 닫지 못했습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "复制链接" + "value": "无法关闭此表面" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "複製連結" + "value": "無法關閉表面" } } } }, - "terminalContextMenu.openLinkInCmuxBrowser": { + "socket.tabAction.close.confirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Link in cmux Browser" + "value": "One or more surfaces have a running process; retry with force=true" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فتح الرابط في متصفح cmux" + "value": "سطح واحد أو أكثر يحتوي على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" } }, "de": { "stringUnit": { "state": "translated", - "value": "Link im cmux-Browser öffnen" + "value": "Mindestens eine Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir enlace en el navegador de cmux" + "value": "Una o más superficies tienen un proceso en ejecución; vuelve a intentarlo con force=true" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir le lien dans le navigateur cmux" + "value": "Une ou plusieurs surfaces ont un processus en cours d’exécution ; réessayez avec force=true" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リンクをcmuxブラウザで開く" + "value": "1 つ以上のサーフェスでプロセスが実行中です。force=true を指定して再試行してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "링크를 cmux 브라우저에서 열기" + "value": "하나 이상의 표면에서 프로세스가 실행 중입니다. force=true로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在 cmux 浏览器中打开链接" + "value": "一个或多个表面有正在运行的进程;请使用 force=true 重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在 cmux 瀏覽器中開啟連結" + "value": "一個或多個表面有正在執行的程序;請使用 force=true 重試" } } } }, - "terminalContextMenu.openLinkInDefaultBrowser": { + "cli.socket.error.workspaceCloseConfirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Link in Default Browser" + "value": "Workspace has a running process; retry with --force" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فتح الرابط في المتصفح الافتراضي" + "value": "تحتوي مساحة العمل على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" } }, "de": { "stringUnit": { "state": "translated", - "value": "Link im Standardbrowser öffnen" + "value": "Arbeitsbereich mit laufendem Prozess; erneut mit --force versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir enlace en el navegador predeterminado" + "value": "El espacio de trabajo tiene un proceso en ejecución; vuelve a intentarlo con --force" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir le lien dans le navigateur par défaut" + "value": "L’espace de travail a un processus en cours d’exécution ; réessayez avec --force" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リンクをデフォルトブラウザで開く" + "value": "ワークスペースでプロセスが実行中です。--force を指定して再試行してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "링크를 기본 브라우저에서 열기" + "value": "워크스페이스에서 프로세스가 실행 중입니다. --force로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在默认浏览器中打开链接" + "value": "此工作区有正在运行的进程;请使用 --force 重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在預設瀏覽器中開啟連結" + "value": "此工作區有正在執行的程序;請使用 --force 重試" } } } }, - "cli.restore.error.routedLauncherNotFound": { + "cli.socket.error.windowCloseConfirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "restore: this session was started with '%1$@ claude proxy', but '%1$@' is not on PATH in this shell. Add it to PATH, then retry." + "value": "One or more workspaces or Dock surfaces have a running process; retry with --force" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "restore: このセッションは「%1$@ claude proxy」で起動されましたが、このシェルの PATH に「%1$@」がありません。PATH に追加してから、再試行してください。" + "value": "تحتوي مساحة عمل واحدة أو أكثر أو أسطح Dock على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "restore:此会话是通过“%1$@ claude proxy”启动的,但此 shell 的 PATH 中没有“%1$@”。请将其添加到 PATH,然后重试。" + "value": "Mindestens ein Workspace oder eine Dock-Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "restore: Diese Sitzung wurde mit „%1$@ claude proxy“ gestartet, aber „%1$@“ ist in dieser Shell nicht im PATH. Fügen Sie es zum PATH hinzu und versuchen Sie es dann erneut." + "value": "Uno o más espacios de trabajo o superficies del Dock tienen un proceso en ejecución; vuelve a intentarlo con --force" } }, "fr": { "stringUnit": { "state": "translated", - "value": "restore : cette session a été démarrée avec « %1$@ claude proxy », mais « %1$@ » n'est pas dans le PATH de ce shell. Ajoutez-le au PATH, puis réessayez." + "value": "Un ou plusieurs espaces de travail ou surfaces du Dock ont un processus en cours d’exécution ; réessayez avec --force" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "restore: بدأت هذه الجلسة باستخدام '%1$@ claude proxy'، لكن '%1$@' غير موجود في PATH في هذه الصدفة. أضفه إلى PATH، ثم أعد المحاولة." + "value": "1 つ以上のワークスペースまたは Dock サーフェスでプロセスが実行中です。--force を指定して再試行してください" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "restore: esta sesión se inició con '%1$@ claude proxy', pero '%1$@' no está en el PATH de este shell. Agréguelo al PATH y vuelva a intentarlo." + "value": "하나 이상의 워크스페이스 또는 Dock 표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "restore:此工作階段是以「%1$@ claude proxy」啟動的,但此 shell 的 PATH 中沒有「%1$@」。請將其加入 PATH,然後重試。" + "value": "一个或多个工作区或 Dock 表面有正在运行的进程;请使用 --force 重试" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "restore: 이 세션은 '%1$@ claude proxy'로 시작되었지만 이 셸의 PATH에 '%1$@'이(가) 없습니다. PATH에 추가한 후 다시 시도하십시오." + "value": "一個或多個工作區或 Dock 表面有正在執行的程序;請使用 --force 重試" } } } @@ -588044,4054 +588653,3759 @@ } } }, - "actions.discovery.typeDetail": { + "shortcut.diffViewerToggleViewed.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Action type: %@" + "value": "Diff Viewer: Toggle Viewed" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "نوع الإجراء: %@" + "value": "差分ビューア: 確認済みを切り替え" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Vrsta radnje: %@" + "value": "差异查看器:切换已查看" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Handlingstype: %@" + "value": "差異檢視器:切換已檢視" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aktionstyp: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tipo de acción: %@" + "value": "Diff-Viewer: Angesehen umschalten" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Type d’action : %@" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Tipo di azione: %@" + "value": "Visionneuse de diff : Basculer « vu »" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "アクションの種類:%@" + "value": "عارض الفروق: تبديل حالة المشاهدة" } }, - "km": { + "es": { "stringUnit": { "state": "translated", - "value": "ប្រភេទសកម្មភាព៖ %@" + "value": "Visor de diff: Alternar visto" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 유형: %@" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Handlingstype: %@" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Typ działania: %@" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Tipo de ação: %@" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Тип действия: %@" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ประเภทการดำเนินการ: %@" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Eylem türü: %@" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Тип дії: %@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "操作类型:%@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "動作類型:%@" + "value": "차이 뷰어: 확인함 전환" } } } }, - "actions.discovery.shortcutDetail": { + "diffViewer.viewed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shortcut: %@" + "value": "Viewed" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "اختصار لوحة المفاتيح: %@" + "value": "確認済み" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Prečica: %@" + "value": "已查看" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Genvej: %@" + "value": "已檢視" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tastenkürzel: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Atajo: %@" + "value": "Angesehen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Raccourci : %@" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Scorciatoia: %@" + "value": "Vu" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ショートカット:%@" + "value": "تمت المشاهدة" } }, - "km": { + "es": { "stringUnit": { "state": "translated", - "value": "ផ្លូវកាត់៖ %@" + "value": "Visto" } }, "ko": { "stringUnit": { "state": "translated", - "value": "단축키: %@" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Snarvei: %@" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Skrót: %@" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Atalho: %@" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Сочетание клавиш: %@" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "แป้นพิมพ์ลัด: %@" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Klavye kısayolu: %@" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Сполучення клавіш: %@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "快捷键:%@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "快速鍵:%@" + "value": "확인함" } } } }, - "actions.discovery.menuTitle": { + "diffViewer.markViewed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Actions · cmux.json…" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الإجراءات · cmux.json…" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Aktionen · cmux.json…" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Acciones · cmux.json…" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Opérations · cmux.json…" + "value": "Mark as viewed" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アクション · cmux.json…" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "작업 · cmux.json…" + "value": "確認済みにする" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "操作 · cmux.json…" + "value": "标记为已查看" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "動作 · cmux.json…" - } - } - } - }, - "actions.discovery.dialogTitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Actions · cmux.json" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الإجراءات · cmux.json" + "value": "標記為已檢視" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aktionen · cmux.json" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Acciones · cmux.json" + "value": "Als angesehen markieren" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Opérations · cmux.json" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アクション · cmux.json" + "value": "Marquer comme vu" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "작업 · cmux.json" + "value": "وضع علامة تمت المشاهدة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "操作 · cmux.json" + "value": "Marcar como visto" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "動作 · cmux.json" + "value": "확인함으로 표시" } } } }, - "actions.discovery.empty": { + "diffViewer.markNotViewed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No configured actions." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لا توجد إجراءات مُعدّة." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Nema konfigurisanih radnji." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Ingen konfigurerede handlinger." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Keine konfigurierten Aktionen." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No hay acciones configuradas." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Aucune action configurée." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Nessuna azione configurata." + "value": "Mark as not viewed" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定済みのアクションはありません。" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "មិនមានសកម្មភាពដែលបានកំណត់រចនាសម្ព័ន្ធទេ។" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "구성된 작업이 없습니다." - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Ingen konfigurerte handlinger." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Brak skonfigurowanych działań." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Nenhuma ação configurada." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Нет настроенных действий." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ไม่มีการดำเนินการที่กำหนดค่าไว้" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Yapılandırılmış eylem yok." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Немає налаштованих дій." + "value": "未確認にする" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有已配置的操作。" + "value": "标记为未查看" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有已設定的動作。" - } - } - } - }, - "agentWake.banner.close": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Close" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "閉じる" + "value": "標記為未檢視" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schließen" + "value": "Als nicht angesehen markieren" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer" + "value": "Marquer comme non vu" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق" + "value": "إزالة علامة تمت المشاهدة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "關閉" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "关闭" + "value": "Marcar como no visto" } }, "ko": { "stringUnit": { "state": "translated", - "value": "닫기" + "value": "확인 안 함으로 표시" } } } }, - "agentWake.banner.copy": { + "diffViewer.changedSinceViewed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy" + "value": "Changed since viewed" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コピー" + "value": "確認後に変更あり" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Kopieren" + "value": "查看后已更改" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Copier" + "value": "檢視後已變更" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "نسخ" + "value": "Seit dem Ansehen geändert" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Copiar" + "value": "Modifié depuis la consultation" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "複製" + "value": "تغيّر منذ المشاهدة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "复制" + "value": "Cambiado desde que se vio" } }, "ko": { "stringUnit": { "state": "translated", - "value": "복사" + "value": "확인 후 변경됨" } } } }, - "agentWake.banner.hideCommand": { + "diffViewer.filesViewedProgress": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hide command" + "value": "{viewed} of {total} files viewed" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コマンドを隠す" + "value": "{total} 件中 {viewed} 件のファイルを確認済み" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Befehl ausblenden" + "value": "已查看 {viewed}/{total} 个文件" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Masquer la commande" + "value": "已檢視 {viewed}/{total} 個檔案" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إخفاء الأمر" + "value": "{viewed} von {total} Dateien angesehen" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ocultar comando" + "value": "{viewed} fichiers sur {total} vus" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "隱藏指令" + "value": "تمت مشاهدة {viewed} من {total} ملفات" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "隐藏命令" + "value": "{viewed} de {total} archivos vistos" } }, "ko": { "stringUnit": { "state": "translated", - "value": "명령 숨기기" + "value": "{total}개 중 {viewed}개 파일 확인함" } } } }, - "agentWake.banner.message": { + "diffViewer.filterFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ didn't resume after waking." + "value": "Filter files" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ はスリープ解除後に再開しませんでした。" + "value": "ファイルを絞り込む" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ wurde nach dem Aufwecken nicht fortgesetzt." + "value": "筛选文件" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ n’a pas repris après le réveil." + "value": "篩選檔案" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لم يُستأنف %@ بعد الإيقاظ." + "value": "Dateien filtern" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ no se reanudó después de despertar." + "value": "Filtrer les fichiers" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ 在喚醒後未能恢復。" + "value": "تصفية الملفات" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ 在唤醒后未能恢复。" + "value": "Filtrar archivos" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@이(가) 깨운 후 다시 시작되지 않았습니다." + "value": "파일 필터" } } } }, - "agentWake.banner.retry": { + "diffViewer.filterAddedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Retry" + "value": "Added" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再試行" + "value": "追加" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Erneut versuchen" + "value": "新增" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Réessayer" + "value": "新增" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إعادة المحاولة" + "value": "Hinzugefügt" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Reintentar" + "value": "Ajoutés" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "重試" + "value": "مضافة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "重试" + "value": "Añadidos" } }, "ko": { "stringUnit": { "state": "translated", - "value": "재시도" + "value": "추가됨" } } } }, - "agentWake.banner.showCommand": { + "diffViewer.filterModifiedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show command" + "value": "Modified" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コマンドを表示" + "value": "変更" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Befehl anzeigen" + "value": "已修改" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Afficher la commande" + "value": "已修改" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إظهار الأمر" + "value": "Geändert" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mostrar comando" + "value": "Modifiés" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "顯示指令" + "value": "معدّلة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "显示命令" + "value": "Modificados" } }, "ko": { "stringUnit": { "state": "translated", - "value": "명령 보기" + "value": "수정됨" } } } }, - "agentWake.notification.title": { + "diffViewer.filterDeletedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ didn't resume" + "value": "Deleted" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ が再開しませんでした" + "value": "削除" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ wurde nicht fortgesetzt" + "value": "已删除" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ n’a pas repris" + "value": "已刪除" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لم يُستأنف %@" + "value": "Gelöscht" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ no se reanudó" + "value": "Supprimés" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ 未能恢復" + "value": "محذوفة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ 未能恢复" + "value": "Eliminados" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@이(가) 다시 시작되지 않았습니다" + "value": "삭제됨" } } } }, - "agentWake.reason.didNotStart": { + "diffViewer.filterRenamedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "It did not start within 90 seconds." + "value": "Renamed" } }, "ja": { "stringUnit": { "state": "translated", - "value": "90 秒以内に起動しませんでした。" + "value": "名前変更" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Es wurde nicht innerhalb von 90 Sekunden gestartet." + "value": "已重命名" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Il n’a pas démarré dans les 90 secondes." + "value": "已重新命名" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لم يبدأ خلال 90 ثانية." + "value": "Umbenannt" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "No se inició en 90 segundos." + "value": "Renommés" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "未在 90 秒內啟動。" + "value": "معاد تسميتها" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "未在 90 秒内启动。" + "value": "Renombrados" } }, "ko": { "stringUnit": { "state": "translated", - "value": "90초 안에 시작되지 않았습니다." + "value": "이름 변경됨" } } } }, - "agentWake.reason.exitedBeforeStart": { + "diffViewer.hideViewedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Its resume command exited." + "value": "Hide viewed files" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再開コマンドが終了しました。" + "value": "確認済みのファイルを隠す" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Sein Fortsetzungsbefehl wurde beendet." + "value": "隐藏已查看的文件" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Sa commande de reprise s’est terminée." + "value": "隱藏已檢視的檔案" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "انتهى أمر الاستئناف الخاص به." + "value": "Angesehene Dateien ausblenden" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Su comando de reanudación terminó." + "value": "Masquer les fichiers vus" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "其恢復指令已結束。" + "value": "إخفاء الملفات التي تمت مشاهدتها" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "其恢复命令已退出。" + "value": "Ocultar archivos vistos" } }, "ko": { "stringUnit": { "state": "translated", - "value": "재개 명령이 종료되었습니다." + "value": "확인한 파일 숨기기" } } } }, - "agentWake.status.multiple": { + "diffViewer.showViewedFiles": { "extractionState": "manual", "localizations": { "en": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld agent didn't resume" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld agents didn't resume" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Show viewed files" } }, "ja": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld 個のエージェントが再開しませんでした" - } - } - } + "stringUnit": { + "state": "translated", + "value": "確認済みのファイルを表示" } }, - "de": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld Agent wurde nicht fortgesetzt" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld Agenten wurden nicht fortgesetzt" - } - } - } + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示已查看的文件" } }, - "fr": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld agent n’a pas repris" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld agents n’ont pas repris" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld agents n’ont pas repris" - } - } - } + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "顯示已檢視的檔案" } }, - "ar": { - "variations": { - "plural": { - "zero": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف أي وكيل (%ld)" - } - }, - "one": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف وكيل واحد (%ld)" - } - }, - "two": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف وكيلان (%ld)" - } - }, - "few": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف %ld وكلاء" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف %ld وكيلًا" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "لم يُستأنف %ld وكيل" - } - } - } + "de": { + "stringUnit": { + "state": "translated", + "value": "Angesehene Dateien anzeigen" } }, - "es": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%ld agente no se reanudó" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%ld agentes no se reanudaron" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld agentes no se reanudaron" - } - } - } + "fr": { + "stringUnit": { + "state": "translated", + "value": "Afficher les fichiers vus" } }, - "zh-Hant": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld 個代理程式未能恢復" - } - } - } + "ar": { + "stringUnit": { + "state": "translated", + "value": "إظهار الملفات التي تمت مشاهدتها" } }, - "zh-Hans": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%ld 个代理未能恢复" - } - } - } + "es": { + "stringUnit": { + "state": "translated", + "value": "Mostrar archivos vistos" } }, "ko": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "에이전트 %ld개가 다시 시작되지 않았습니다" - } - } - } + "stringUnit": { + "state": "translated", + "value": "확인한 파일 표시" } } } }, - "agentWake.status.single": { + "diffViewer.noFilesMatchFilter": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent didn't resume" + "value": "No files match the filter." } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントが再開しませんでした" + "value": "絞り込み条件に一致するファイルはありません。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Agent wurde nicht fortgesetzt" + "value": "没有符合筛选条件的文件。" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "L’agent n’a pas repris" + "value": "沒有符合篩選條件的檔案。" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لم يُستأنف الوكيل" + "value": "Keine Dateien entsprechen dem Filter." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El agente no se reanudó" + "value": "Aucun fichier ne correspond au filtre." } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "代理程式未能恢復" + "value": "لا توجد ملفات مطابقة للتصفية." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "代理未能恢复" + "value": "Ningún archivo coincide con el filtro." } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트가 다시 시작되지 않았습니다" + "value": "필터와 일치하는 파일이 없습니다." } } } }, - "cli.help.record": { + "diffViewer.generatedFile": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nRecord a cmux window to an mp4 or gif, for a pull request or a bug\nreport. Only cmux's own windows can be recorded, and no Screen\nRecording permission is involved.\n\nFlags for start:\n --format mp4|gif Output format (default: mp4)\n --gif Shorthand for --format gif\n --fps <1-30> Frames per second (default: 12 for mp4, 8 for gif)\n --max-seconds Stop by itself after n seconds, 0.5-120 (default: 15)\n --scale <0.1-1> Scale the output (default: 1 for mp4, 0.5 for gif)\n --max-width <64-4096> Cap the output width, keeping the aspect ratio\n --region Record part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --no-captions Do not draw `record note` captions into the clip\n --window Window to record (default: the frontmost one)\n\nOutput: ` `, or the full response with --json.\n\nA recording stops itself at --max-seconds, so a clip is never left\nrunning by an agent that goes away. One recording at a time.\n\nExample:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "Generated file" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nتسجيل نافذة cmux بصيغة mp4 أو gif، من أجل طلب سحب أو تقرير خطأ.\nلا يمكن تسجيل سوى نوافذ cmux نفسها،\nولا يتطلب ذلك إذن تسجيل الشاشة.\n\nخيارات start:\n --format mp4|gif صيغة الإخراج (الافتراضي: mp4)\n --gif اختصار لـ --format gif\n --fps <1-30> الإطارات في الثانية (الافتراضي: 12 لـ mp4، 8 لـ gif)\n --max-seconds يتوقف من تلقاء نفسه بعد n ثانية، 0.5-120 (الافتراضي: 15)\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1 لـ mp4، 0.5 لـ gif)\n --max-width <64-4096> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --region تسجيل جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --no-captions عدم رسم تعليقات `record note` داخل المقطع\n --window النافذة المراد تسجيلها (الافتراضي: النافذة الأمامية)\n\nالإخراج: ` `، أو الاستجابة الكاملة مع --json.\n\nيتوقف التسجيل من تلقاء نفسه عند --max-seconds، حتى لا يترك وكيل غادر\nمقطعًا قيد التسجيل. تسجيل واحد في كل مرة.\n\nمثال:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "自動生成ファイル" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux record [start] [Flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEin cmux-Fenster als mp4 oder gif aufzeichnen, für einen Pull Request\noder einen Fehlerbericht. Nur cmux-eigene Fenster können aufgezeichnet\nwerden, und es ist keine Bildschirmaufnahme-Berechtigung beteiligt.\n\nFlags für start:\n --format mp4|gif Ausgabeformat (Standard: mp4)\n --gif Kurzform für --format gif\n --fps <1-30> Bilder pro Sekunde (Standard: 12 für mp4, 8 für gif)\n --max-seconds Nach n Sekunden selbst beenden, 0.5-120 (Standard: 15)\n --scale <0.1-1> Ausgabe skalieren (Standard: 1 für mp4, 0.5 für gif)\n --max-width <64-4096> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --region Teil des Fensters aufzeichnen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --no-captions Keine `record note`-Untertitel in den Clip zeichnen\n --window Fenster zum Aufzeichnen (Standard: das vorderste)\n\nAusgabe: ` `, oder mit --json die vollständige Antwort.\n\nEine Aufzeichnung beendet sich bei --max-seconds selbst, damit ein Agent, der\nverschwindet, keinen laufenden Clip hinterlässt. Eine Aufzeichnung zur Zeit.\n\nBeispiel:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "生成的文件" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Uso: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nGraba una ventana de cmux en mp4 o gif, para un pull request o un informe\nde error. Solo se pueden grabar las ventanas propias de cmux, y no\ninterviene ningún permiso de grabación de pantalla.\n\nFlags para start:\n --format mp4|gif Formato de salida (predeterminado: mp4)\n --gif Atajo para --format gif\n --fps <1-30> Fotogramas por segundo (predeterminado: 12 para mp4, 8 para gif)\n --max-seconds Se detiene solo tras n segundos, 0.5-120 (predeterminado: 15)\n --scale <0.1-1> Escala la salida (predeterminado: 1 para mp4, 0.5 para gif)\n --max-width <64-4096> Limita el ancho de salida manteniendo la proporción\n --region Graba parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --no-captions No dibujar los subtítulos de `record note` en el clip\n --window Ventana que se graba (predeterminado: la del frente)\n\nSalida: ` `, o la respuesta completa con --json.\n\nUna grabación se detiene sola en --max-seconds, para que un agente que\ndesaparece nunca deje un clip en marcha. Una grabación a la vez.\n\nEjemplo:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "產生的檔案" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEnregistrer une fenêtre cmux en mp4 ou gif, pour une pull request ou un\nrapport de bug. Seules les fenêtres de cmux peuvent être enregistrées, et\naucune autorisation d'enregistrement de l'écran n'intervient.\n\nFlags pour start :\n --format mp4|gif Format de sortie (par défaut : mp4)\n --gif Raccourci pour --format gif\n --fps <1-30> Images par seconde (par défaut : 12 pour mp4, 8 pour gif)\n --max-seconds S'arrête seul après n secondes, 0.5-120 (par défaut : 15)\n --scale <0.1-1> Mettre la sortie à l'échelle (par défaut : 1 pour mp4, 0.5 pour gif)\n --max-width <64-4096> Limiter la largeur de sortie en gardant les proportions\n --region N'enregistrer qu'une partie de la fenêtre, en points fenêtre\n --out Écrire ici au lieu d'un répertoire temporaire\n --label Nommer le fichier\n --no-captions Ne pas dessiner les légendes `record note` dans le clip\n --window Fenêtre à enregistrer (par défaut : celle au premier plan)\n\nSortie : ` `, ou la réponse complète avec --json.\n\nUn enregistrement s'arrête de lui-même à --max-seconds, afin qu'un agent qui\ndisparaît ne laisse jamais un clip en cours. Un seul enregistrement à la fois.\n\nExemple :\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "Generierte Datei" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nプルリクエストやバグ報告のために、cmux のウィンドウを mp4 または gif\nで録画します。録画できるのは cmux 自身のウィンドウだけで、画面収録の\n権限は必要ありません。\n\nstart のフラグ:\n --format mp4|gif 出力形式(既定: mp4)\n --gif --format gif の短縮形\n --fps <1-30> 1 秒あたりのフレーム数(既定: mp4 は 12、gif は 8)\n --max-seconds n 秒後に自動停止、0.5-120(既定: 15)\n --scale <0.1-1> 出力を拡大縮小(既定: mp4 は 1、gif は 0.5)\n --max-width <64-4096> 縦横比を保ったまま出力の幅を制限\n --region ウィンドウの一部だけを録画(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --no-captions `record note` のキャプションをクリップに描画しない\n --window 録画するウィンドウ(既定: 最前面のウィンドウ)\n\n出力: ` `、または --json で完全なレスポンス。\n\n録画は --max-seconds で自動停止するので、いなくなったエージェントが\n録画を実行したままにすることはありません。録画は同時に 1 つだけです。\n\n例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "Fichier généré" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "사용법: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n풀 리퀘스트나 버그 리포트에 쓰려고 cmux 창을 mp4 또는 gif로\n녹화합니다. cmux 자신의 창만 녹화할 수 있고, 화면 기록 권한은\n필요하지 않습니다.\n\nstart 플래그:\n --format mp4|gif 출력 형식 (기본값: mp4)\n --gif --format gif의 단축형\n --fps <1-30> 초당 프레임 수 (기본값: mp4는 12, gif는 8)\n --max-seconds n초 후 스스로 정지, 0.5-120 (기본값: 15)\n --scale <0.1-1> 출력 크기 조정 (기본값: mp4는 1, gif는 0.5)\n --max-width <64-4096> 가로 세로 비율을 유지하며 출력 너비 제한\n --region 창의 일부만 녹화, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --no-captions `record note` 캡션을 클립에 그리지 않음\n --window 녹화할 창 (기본값: 맨 앞 창)\n\n출력: ` `, 또는 --json으로 전체 응답.\n\n녹화는 --max-seconds에서 스스로 멈추므로 사라진 에이전트가 녹화를 계속\n남겨 두는 일은 없습니다. 한 번에 하나의 녹화만 가능합니다.\n\n예:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "ملف مُولَّد" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n将 cmux 窗口录制为 mp4 或 gif,用于 pull request 或错误报告。\n只能录制 cmux 自己的窗口,\n而且不需要任何屏幕录制权限。\n\nstart 的标志:\n --format mp4|gif 输出格式(默认: mp4)\n --gif --format gif 的简写\n --fps <1-30> 每秒帧数(默认: mp4 为 12,gif 为 8)\n --max-seconds n 秒后自行停止,0.5-120(默认: 15)\n --scale <0.1-1> 缩放输出(默认: mp4 为 1,gif 为 0.5)\n --max-width <64-4096> 限制输出宽度并保持宽高比\n --region 只录制窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --no-captions 不要把 `record note` 字幕画进视频\n --window 要录制的窗口(默认: 最前面的窗口)\n\n输出: ` `,或用 --json 获取完整响应。\n\n录制会在 --max-seconds 时自行停止,因此离开的代理不会留下仍在录制的\n视频。同一时间只能有一份录制。\n\n示例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "Archivo generado" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n將 cmux 視窗錄製成 mp4 或 gif,用於 pull request 或錯誤報告。\n只能錄製 cmux 自己的視窗,\n而且不需要任何螢幕錄製權限。\n\nstart 的旗標:\n --format mp4|gif 輸出格式(預設: mp4)\n --gif --format gif 的簡寫\n --fps <1-30> 每秒影格數(預設: mp4 為 12,gif 為 8)\n --max-seconds n 秒後自行停止,0.5-120(預設: 15)\n --scale <0.1-1> 縮放輸出(預設: mp4 為 1,gif 為 0.5)\n --max-width <64-4096> 限制輸出寬度並維持長寬比\n --region 只錄製視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --no-captions 不要將 `record note` 字幕畫進影片\n --window 要錄製的視窗(預設: 最前面的視窗)\n\n輸出: ` `,或以 --json 取得完整回應。\n\n錄製會在 --max-seconds 時自行停止,因此離開的代理程式不會留下仍在\n錄製的影片。同一時間只能有一份錄製。\n\n範例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" + "value": "생성된 파일" } } } }, - "cli.record.error.formatConflict": { + "diffViewer.largeDiff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record start: --gif conflicts with --format" + "value": "Large diff" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "record start: لا يمكن دمج --gif مع --format" + "value": "大きな差分" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record start: --gif kann nicht mit --format kombiniert werden" + "value": "大型差异" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record start: --gif no se puede combinar con --format" + "value": "大型差異" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "record start: --gif ne peut pas être combiné avec --format" + "value": "Großer Diff" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "record start: --gif は --format と併用できません" + "value": "Diff volumineux" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "record start: --gif은 --format과 함께 사용할 수 없습니다" + "value": "فرق كبير" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "record start: --gif 不能与 --format 同用" + "value": "Diff grande" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "record start: --gif 無法與 --format 同時使用" + "value": "큰 변경 사항" } } } }, - "cli.record.error.noteText": { + "diffViewer.loadDiff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record note: text is required" + "value": "Load diff" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "record note: النص مطلوب" + "value": "差分を読み込む" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record note: Text ist erforderlich" + "value": "加载差异" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record note: se requiere el texto" + "value": "載入差異" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "record note : le texte est requis" + "value": "Diff laden" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "record note: テキストが必要です" + "value": "Charger le diff" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "record note: 텍스트가 필요합니다" + "value": "تحميل الفرق" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "record note: 必须提供文本" + "value": "Cargar diff" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "record note: 必須提供文字" + "value": "변경 사항 불러오기" } } } }, - "cli.record.error.unexpectedArguments": { + "diffViewer.clearFileFilter": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record %@: unexpected arguments: %@" + "value": "Clear filter" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "record %@: وسائط غير متوقعة: %@" + "value": "絞り込みを解除" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record %@: unerwartete Argumente: %@" + "value": "清除筛选" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record %@: argumentos inesperados: %@" + "value": "清除篩選" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "record %@ : arguments inattendus : %@" + "value": "Filter zurücksetzen" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "record %@: 予期しない引数: %@" + "value": "Effacer le filtre" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "record %@: 예기치 않은 인수: %@" + "value": "مسح التصفية" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "record %@: 多余的参数: %@" + "value": "Borrar filtro" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "record %@: 未預期的引數: %@" + "value": "필터 지우기" } } } }, - "cli.record.error.unknownSubcommand": { + "agent.generic.status.runningSubagents": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record: unknown subcommand '%@' (start, stop, status, note, list)" + "value": "Running subagents" } }, "ar": { "stringUnit": { "state": "translated", - "value": "record: أمر فرعي غير معروف '%@' (start، stop، status، note، list)" + "value": "تشغيل الوكلاء الفرعيين" } }, "de": { "stringUnit": { "state": "translated", - "value": "record: unbekannter Unterbefehl „%@“ (start, stop, status, note, list)" + "value": "Subagenten werden ausgeführt" } }, "es": { "stringUnit": { "state": "translated", - "value": "record: subcomando desconocido '%@' (start, stop, status, note, list)" + "value": "Ejecutando subagentes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "record : sous-commande inconnue '%@' (start, stop, status, note, list)" + "value": "Sous-agents en cours d’exécution" } }, "ja": { "stringUnit": { "state": "translated", - "value": "record: 不明なサブコマンド '%@' です(start、stop、status、note、list)" + "value": "サブエージェントを実行中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record: 알 수 없는 하위 명령 '%@' (start, stop, status, note, list)" + "value": "하위 에이전트 실행 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" + "value": "正在运行子代理" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" + "value": "執行子代理程式中" } } } }, - "cli.usage.record": { + "agent.generic.status.waiting": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "Waiting" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "في الانتظار" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "Warten" } }, "es": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "Esperando" } }, "fr": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "En attente" } }, "ja": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "待機中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "대기 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "等待中" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" + "value": "等待中" } } } }, - "cli.help.shot": { + "cloud.overlay.accessLost.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux shot [flags]\n\nScreenshot a cmux window, or a region of one, to a png or a jpeg. Only\ncmux's own windows can be captured, and no Screen Recording permission\nis involved, so this works on a release build and inside CI.\n\nFlags:\n --format png|jpg Output format (default: png)\n --jpg Shorthand for --format jpg\n --scale <0.1-1> Scale the output (default: 1)\n --max-width <64-8192> Cap the output width, keeping the aspect ratio\n --quality <0.1-1> JPEG quality (default: 0.8, ignored for png)\n --region Capture part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --caption Draw a caption into the image\n --window Window to capture (default: the frontmost one)\n\nOutput: `x `, or the full response with --json.\n\nA region is the same rectangle `cmux record --region` films, so a\ndetail spotted in a clip can be shot with the same four numbers.\n\nExample:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "You no longer have access to this machine." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux shot [flags]\n\nتصوير نافذة cmux أو جزء منها بصيغة png أو jpeg.\nلا يمكن تصوير سوى نوافذ cmux نفسها، ولا يتطلب ذلك إذن تسجيل الشاشة،\nلذلك يعمل هذا في بناء الإصدار وداخل CI.\n\nالخيارات:\n --format png|jpg صيغة الإخراج (الافتراضي: png)\n --jpg اختصار لـ --format jpg\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1)\n --max-width <64-8192> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --quality <0.1-1> جودة JPEG (الافتراضي: 0.8، وتُهمل مع png)\n --region تصوير جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --caption رسم تعليق داخل الصورة\n --window النافذة المراد تصويرها (الافتراضي: النافذة الأمامية)\n\nالإخراج: `x `، أو الاستجابة الكاملة مع --json.\n\nالمنطقة هي نفس المستطيل الذي يصوّره `cmux record --region`، لذا يمكن تصوير\nتفصيل لوحظ في مقطع بالأرقام الأربعة نفسها.\n\nمثال:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "لم يعد لديك حق الوصول إلى هذا الجهاز." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux shot [Flags]\n\nEin cmux-Fenster oder einen Teil davon als png oder jpeg aufnehmen. Nur\ncmux-eigene Fenster sind aufnehmbar, und es ist keine Berechtigung für\nBildschirmaufnahmen nötig, das geht also im Release-Build und in der CI.\n\nFlags:\n --format png|jpg Ausgabeformat (Standard: png)\n --jpg Kurzform für --format jpg\n --scale <0.1-1> Ausgabe skalieren (Standard: 1)\n --max-width <64-8192> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --quality <0.1-1> JPEG-Qualität (Standard: 0.8, für png ignoriert)\n --region Teil des Fensters aufnehmen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --caption Eine Bildunterschrift ins Bild zeichnen\n --window Fenster zum Aufnehmen (Standard: das vorderste)\n\nAusgabe: `x `, oder mit --json die vollständige Antwort.\n\nEine Region ist dasselbe Rechteck, das `cmux record --region` filmt: ein im\nClip entdecktes Detail lässt sich mit denselben vier Zahlen aufnehmen.\n\nBeispiel:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "Sie haben keinen Zugriff mehr auf diese Maschine." } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux shot [flags]\n\nCaptura una ventana de cmux, o una región de ella, en png o jpeg. Solo se\npueden capturar las ventanas propias de cmux, y no interviene ningún permiso\nde grabación de pantalla, así que funciona en una release y dentro de CI.\n\nFlags:\n --format png|jpg Formato de salida (predeterminado: png)\n --jpg Atajo para --format jpg\n --scale <0.1-1> Escala la salida (predeterminado: 1)\n --max-width <64-8192> Limita el ancho de salida manteniendo la proporción\n --quality <0.1-1> Calidad JPEG (predeterminado: 0.8, se ignora en png)\n --region Captura parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --caption Dibuja un rótulo dentro de la imagen\n --window Ventana que se captura (predeterminado: la del frente)\n\nSalida: `x `, o la respuesta completa con --json.\n\nUna región es el mismo rectángulo que filma `cmux record --region`, así que un\ndetalle visto en un clip se captura con los mismos cuatro números.\n\nEjemplo:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "Ya no tienes acceso a esta máquina." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux shot [flags]\n\nCapture une fenêtre cmux, ou une partie de celle-ci, en png ou en jpeg.\nSeules les fenêtres de cmux peuvent être capturées, et aucune autorisation\nd'enregistrement d'écran n'intervient : cela marche en release et dans la CI.\n\nFlags :\n --format png|jpg Format de sortie (par défaut : png)\n --jpg Raccourci pour --format jpg\n --scale <0.1-1> Met la sortie à l'échelle (par défaut : 1)\n --max-width <64-8192> Limite la largeur de sortie en gardant les proportions\n --quality <0.1-1> Qualité JPEG (par défaut : 0.8, ignorée pour png)\n --region Capture une partie de la fenêtre, en points de fenêtre\n --out Écrit ici au lieu d'un répertoire temporaire\n --label Nomme le fichier\n --caption Dessine une légende dans l'image\n --window Fenêtre à capturer (par défaut : celle au premier plan)\n\nSortie : `x `, ou la réponse complète avec --json.\n\nUne région est le même rectangle que filme `cmux record --region` : un détail\nrepéré dans un clip se capture avec les mêmes quatre nombres.\n\nExemple :\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "Vous n’avez plus accès à cette machine." } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux shot [flags]\n\ncmux のウィンドウ、またはその一部の領域を png または jpeg で撮ります。\n撮れるのは cmux 自身のウィンドウだけで、画面収録の権限は必要ないので、\nリリースビルドでも CI の中でも動きます。\n\nフラグ:\n --format png|jpg 出力形式(既定: png)\n --jpg --format jpg の短縮形\n --scale <0.1-1> 出力を拡大縮小(既定: 1)\n --max-width <64-8192> 縦横比を保ったまま出力の幅を制限\n --quality <0.1-1> JPEG の品質(既定: 0.8、png では無視)\n --region ウィンドウの一部だけを撮る(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --caption 画像にキャプションを描画する\n --window 撮るウィンドウ(既定: 最前面のウィンドウ)\n\n出力: `x `、または --json で完全なレスポンス。\n\n領域は `cmux record --region` が撮るのと同じ矩形なので、クリップで見つけた\n細部を同じ 4 つの数字で撮れます。\n\n例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "このマシンへのアクセス権がなくなりました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux shot [flags]\n\ncmux 창이나 창의 일부 영역을 png 또는 jpeg로 캡처합니다. cmux 자신의\n창만 캡처할 수 있고, 화면 기록 권한이 필요하지 않으므로 릴리스 빌드와\nCI 안에서도 동작합니다.\n\n플래그:\n --format png|jpg 출력 형식 (기본값: png)\n --jpg --format jpg의 단축형\n --scale <0.1-1> 출력 크기 조정 (기본값: 1)\n --max-width <64-8192> 가로 세로 비율을 유지하며 출력 너비 제한\n --quality <0.1-1> JPEG 품질 (기본값: 0.8, png에서는 무시)\n --region 창의 일부만 캡처, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --caption 이미지에 캡션 그리기\n --window 캡처할 창 (기본값: 맨 앞 창)\n\n출력: `x `, 또는 --json으로 전체 응답.\n\n영역은 `cmux record --region`이 촬영하는 사각형과 같으므로, 클립에서 본\n세부를 같은 네 숫자로 캡처할 수 있습니다.\n\n예:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "더 이상 이 머신에 접근할 수 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux shot [flags]\n\n将 cmux 窗口或其中一块区域截取为 png 或 jpeg。\n只能截取 cmux 自己的窗口,而且不需要任何屏幕录制权限,\n因此在 release 构建和 CI 中都能用。\n\n标志:\n --format png|jpg 输出格式(默认: png)\n --jpg --format jpg 的简写\n --scale <0.1-1> 缩放输出(默认: 1)\n --max-width <64-8192> 限制输出宽度并保持宽高比\n --quality <0.1-1> JPEG 质量(默认: 0.8,png 会忽略)\n --region 只截取窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --caption 在图片上绘制字幕\n --window 要截取的窗口(默认: 最前面的窗口)\n\n输出: `x `,或用 --json 获取完整响应。\n\n区域和 `cmux record --region` 拍摄的矩形相同,因此在视频里看到的细节\n可以用同样的四个数字截取。\n\n示例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "你已无法再访问这台机器。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux shot [flags]\n\n將 cmux 視窗或其中一塊區域擷取成 png 或 jpeg。\n只能擷取 cmux 自己的視窗,而且不需要任何螢幕錄製權限,\n因此在 release 版本與 CI 內都能用。\n\n旗標:\n --format png|jpg 輸出格式(預設: png)\n --jpg --format jpg 的簡寫\n --scale <0.1-1> 縮放輸出(預設: 1)\n --max-width <64-8192> 限制輸出寬度並保持長寬比\n --quality <0.1-1> JPEG 品質(預設: 0.8,png 會忽略)\n --region 只擷取視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --caption 在圖片上畫出字幕\n --window 要擷取的視窗(預設: 最前面的視窗)\n\n輸出: `x `,或用 --json 取得完整回應。\n\n區域和 `cmux record --region` 拍攝的矩形相同,所以在影片裡看到的細節\n可以用同樣的四個數字擷取。\n\n範例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" + "value": "你已無法再存取這台機器。" } } } }, - "cli.shot.error.formatConflict": { + "cloud.overlay.accessLost.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "shot: --jpg conflicts with --format" + "value": "Cloud machine unavailable" } }, "ar": { "stringUnit": { "state": "translated", - "value": "shot: لا يمكن دمج --jpg مع --format" + "value": "جهاز Cloud غير متاح" } }, "de": { "stringUnit": { "state": "translated", - "value": "shot: --jpg kann nicht mit --format kombiniert werden" + "value": "Cloud-Maschine nicht verfügbar" } }, "es": { "stringUnit": { "state": "translated", - "value": "shot: --jpg no se puede combinar con --format" + "value": "Máquina de Cloud no disponible" } }, "fr": { "stringUnit": { "state": "translated", - "value": "shot : --jpg ne peut pas être combiné avec --format" + "value": "Machine Cloud indisponible" } }, "ja": { "stringUnit": { "state": "translated", - "value": "shot: --jpg は --format と併用できません" + "value": "Cloud マシンを利用できません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "shot: --jpg은 --format과 함께 사용할 수 없습니다" + "value": "Cloud 머신을 사용할 수 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "shot: --jpg 不能与 --format 同用" + "value": "Cloud 机器不可用" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "shot: --jpg 無法與 --format 同時使用" + "value": "Cloud 機器無法使用" } } } }, - "cli.shot.error.unexpectedArguments": { + "cloud.overlay.signedOut.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "shot: unexpected arguments: %@" + "value": "Sign in to cmux to reconnect this terminal." } }, "ar": { "stringUnit": { "state": "translated", - "value": "shot: وسائط غير متوقعة: %@" + "value": "سجّل الدخول إلى cmux لإعادة توصيل هذه الطرفية." } }, "de": { "stringUnit": { "state": "translated", - "value": "shot: unerwartete Argumente: %@" + "value": "Melden Sie sich bei cmux an, um dieses Terminal erneut zu verbinden." } }, "es": { "stringUnit": { "state": "translated", - "value": "shot: argumentos inesperados: %@" + "value": "Inicia sesión en cmux para volver a conectar este terminal." } }, "fr": { "stringUnit": { "state": "translated", - "value": "shot : arguments inattendus : %@" + "value": "Connectez-vous à cmux pour reconnecter ce terminal." } }, "ja": { "stringUnit": { "state": "translated", - "value": "shot: 予期しない引数: %@" + "value": "このターミナルに再接続するには cmux にサインインしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "shot: 예기치 않은 인수: %@" + "value": "이 터미널을 다시 연결하려면 cmux에 로그인하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "shot: 多余的参数: %@" + "value": "登录 cmux 以重新连接此终端。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "shot: 未預期的引數: %@" - } - } - } - }, - "cli.usage.shot": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" + "value": "登入 cmux 以重新連線此終端機。" } } } }, - "socket.sidebar.closeSurface.confirmationRequired": { + "cloud.overlay.signedOut.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Surface has a running process; retry with --force" + "value": "Cloud session ended" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" + "value": "انتهت جلسة Cloud" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" + "value": "Cloud-Sitzung beendet" } }, "es": { "stringUnit": { "state": "translated", - "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con --force" + "value": "Sesión de Cloud finalizada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La surface a un processus en cours d’exécution ; réessayez avec --force" + "value": "Session Cloud terminée" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サーフェスでプロセスが実行中です。--force を指定して再試行してください" + "value": "Cloud セッションが終了しました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" + "value": "Cloud 세션이 종료되었습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此表面有正在运行的进程;请使用 --force 重试" + "value": "Cloud 会话已结束" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此表面有正在執行的程序;請使用 --force 重試" + "value": "Cloud 工作階段已結束" } } } }, - "socket.sidebar.closeSurface.failed": { + "settingAction.confirm.apply": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Failed to close surface" + "value": "Change" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذر إغلاق السطح" + "value": "Ändern" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche konnte nicht geschlossen werden" + "value": "Modifier" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "No se pudo cerrar la superficie" + "value": "تغيير" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Échec de la fermeture de la surface" + "value": "Cambiar" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サーフェスを閉じられませんでした" + "value": "變更" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "표면을 닫지 못했습니다" + "value": "更改" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "无法关闭此表面" + "value": "변경" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無法關閉表面" + "value": "変更" } } } }, - "socket.surface.close.confirmationRequired": { + "settingAction.confirm.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Surface has a running process; retry with force=true" + "value": "This action edits your cmux.json:\n\n%@" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" + "value": "Diese Aktion bearbeitet deine cmux.json:\n\n%@" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" + "value": "Cette action modifie votre cmux.json :\n\n%@" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con force=true" + "value": "يعدّل هذا الإجراء ملف cmux.json:\n\n%@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "La surface a un processus en cours d’exécution ; réessayez avec force=true" + "value": "Esta acción edita tu cmux.json:\n\n%@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サーフェスでプロセスが実行中です。force=true を指定して再試行してください" + "value": "此動作會編輯你的 cmux.json:\n\n%@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "표면에서 실행 중인 프로세스가 있습니다. force=true로 다시 시도하세요" + "value": "此操作会编辑你的 cmux.json:\n\n%@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "此表面有正在运行的进程;请使用 force=true 重试" + "value": "이 작업은 cmux.json을 편집합니다:\n\n%@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此表面有正在執行的程序;請使用 force=true 重試" + "value": "このアクションは cmux.json を編集します:\n\n%@" } } } }, - "socket.surface.close.failed": { + "settingAction.confirm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Failed to close surface" + "value": "Change Setting?" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذر إغلاق السطح" + "value": "Einstellung ändern?" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche konnte nicht geschlossen werden" + "value": "Modifier le réglage ?" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "No se pudo cerrar la superficie" + "value": "هل تريد تغيير الإعداد؟" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Échec de la fermeture de la surface" + "value": "¿Cambiar el ajuste?" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サーフェスを閉じられませんでした" + "value": "要變更設定嗎?" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "표면을 닫지 못했습니다" + "value": "要更改设置吗?" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "无法关闭此表面" + "value": "설정을 변경할까요?" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無法關閉表面" + "value": "設定を変更しますか?" } } } }, - "socket.tabAction.close.confirmationRequired": { + "settingAction.failed.unreadable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "One or more surfaces have a running process; retry with force=true" + "value": "cmux couldn't read or save ~/.config/cmux/cmux.json. Check it for a syntax error, then try again." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "سطح واحد أو أكثر يحتوي على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" + "value": "cmux konnte ~/.config/cmux/cmux.json nicht lesen oder speichern. Prüfe die Datei auf einen Syntaxfehler und versuche es erneut." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mindestens eine Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" + "value": "cmux n'a pas pu lire ou enregistrer ~/.config/cmux/cmux.json. Vérifiez qu'il ne contient pas d'erreur de syntaxe, puis réessayez." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Una o más superficies tienen un proceso en ejecución; vuelve a intentarlo con force=true" + "value": "تعذّر على cmux قراءة ~/.config/cmux/cmux.json أو حفظه. تحقّق من عدم وجود خطأ في الصياغة، ثم حاول مرة أخرى." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Une ou plusieurs surfaces ont un processus en cours d’exécution ; réessayez avec force=true" + "value": "cmux no pudo leer ni guardar ~/.config/cmux/cmux.json. Revisa si tiene un error de sintaxis y vuelve a intentarlo." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "1 つ以上のサーフェスでプロセスが実行中です。force=true を指定して再試行してください" + "value": "cmux 無法讀取或儲存 ~/.config/cmux/cmux.json。請檢查是否有語法錯誤,然後再試一次。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "하나 이상의 표면에서 프로세스가 실행 중입니다. force=true로 다시 시도하세요" + "value": "cmux 无法读取或保存 ~/.config/cmux/cmux.json。请检查是否有语法错误,然后重试。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "一个或多个表面有正在运行的进程;请使用 force=true 重试" + "value": "cmux가 ~/.config/cmux/cmux.json을 읽거나 저장하지 못했습니다. 구문 오류가 있는지 확인한 뒤 다시 시도하세요." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "一個或多個表面有正在執行的程序;請使用 force=true 重試" + "value": "cmux は ~/.config/cmux/cmux.json を読み込むか保存できませんでした。構文エラーがないか確認してから、もう一度お試しください。" } } } }, - "cli.socket.error.workspaceCloseConfirmationRequired": { + "settingAction.failed.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Workspace has a running process; retry with --force" + "value": "Couldn't Change Setting" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحتوي مساحة العمل على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" + "value": "تعذّر تغيير الإعداد" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich mit laufendem Prozess; erneut mit --force versuchen" + "value": "Einstellung konnte nicht geändert werden" } }, "es": { "stringUnit": { "state": "translated", - "value": "El espacio de trabajo tiene un proceso en ejecución; vuelve a intentarlo con --force" + "value": "No se pudo cambiar el ajuste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’espace de travail a un processus en cours d’exécution ; réessayez avec --force" + "value": "Impossible de modifier le réglage" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースでプロセスが実行中です。--force を指定して再試行してください" + "value": "設定を変更できませんでした" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스에서 프로세스가 실행 중입니다. --force로 다시 시도하세요" + "value": "설정을 변경할 수 없음" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此工作区有正在运行的进程;请使用 --force 重试" + "value": "无法更改设置" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此工作區有正在執行的程序;請使用 --force 重試" + "value": "無法更改設定" } } } }, - "cli.socket.error.windowCloseConfirmationRequired": { + "settings.terminal.predictiveLocalEcho": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "One or more workspaces or Dock surfaces have a running process; retry with --force" + "value": "Predictive Local Echo" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تحتوي مساحة عمل واحدة أو أكثر أو أسطح Dock على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" + "value": "Vorausschauendes lokales Echo" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mindestens ein Workspace oder eine Dock-Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" + "value": "Écho local prédictif" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Uno o más espacios de trabajo o superficies del Dock tienen un proceso en ejecución; vuelve a intentarlo con --force" + "value": "الصدى المحلي التنبؤي" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Un ou plusieurs espaces de travail ou surfaces du Dock ont un processus en cours d’exécution ; réessayez avec --force" + "value": "Eco local predictivo" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "1 つ以上のワークスペースまたは Dock サーフェスでプロセスが実行中です。--force を指定して再試行してください" + "value": "預測性本機回顯" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "하나 이상의 워크스페이스 또는 Dock 표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" + "value": "预测性本地回显" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "一个或多个工作区或 Dock 表面有正在运行的进程;请使用 --force 重试" + "value": "예측 로컬 에코" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "一個或多個工作區或 Dock 表面有正在執行的程序;請使用 --force 重試" + "value": "予測ローカルエコー" } } } }, - "shortcut.diffViewerToggleViewed.label": { + "settings.search.alias.setting.terminal.predictive-local-echo": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Toggle Viewed" + "value": "terminal.predictiveLocalEcho predictive local echo typing latency lag ssh remote speculative mosh round trip underline" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 確認済みを切り替え" + "value": "terminal.predictiveLocalEcho vorausschauendes lokales echo tippen latenz verzögerung ssh remote spekulativ mosh round trip unterstrichen" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "差异查看器:切换已查看" + "value": "terminal.predictiveLocalEcho écho local prédictif saisie latence décalage ssh distant spéculatif mosh aller-retour souligné" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "差異檢視器:切換已檢視" + "value": "terminal.predictiveLocalEcho الصدى المحلي التنبؤي الكتابة زمن الاستجابة التأخير ssh بعيد تخميني mosh ذهاب وإياب تسطير" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Angesehen umschalten" + "value": "terminal.predictiveLocalEcho eco local predictivo escritura latencia retraso ssh remoto especulativo mosh ida y vuelta subrayado" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Basculer « vu »" + "value": "terminal.predictiveLocalEcho 預測性本機回顯 輸入 延遲 卡頓 ssh 遠端 推測 mosh 往返 底線" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: تبديل حالة المشاهدة" + "value": "terminal.predictiveLocalEcho 预测性本地回显 输入 延迟 卡顿 ssh 远程 推测 mosh 往返 下划线" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Alternar visto" + "value": "terminal.predictiveLocalEcho 예측 로컬 에코 입력 지연 랙 ssh 원격 추측 mosh 왕복 밑줄" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "차이 뷰어: 확인함 전환" + "value": "terminal.predictiveLocalEcho 予測ローカルエコー 入力 遅延 ラグ ssh リモート 投機的 mosh 往復 下線" } } } }, - "diffViewer.viewed": { + "cli.vm.run.createMissingMachineID": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Viewed" + "value": "vm run: create returned no machine id" } }, "ja": { "stringUnit": { "state": "translated", - "value": "確認済み" + "value": "vm run: 作成結果にマシン ID がありません" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "已查看" + "value": "vm run: Beim Erstellen wurde keine Maschinen-ID zurückgegeben" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "已檢視" + "value": "vm run : la création n'a renvoyé aucun identifiant de machine" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Angesehen" + "value": "vm run: لم يُرجع الإنشاء معرّف جهاز" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Vu" + "value": "vm run: la creación no devolvió ningún ID de máquina" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "تمت المشاهدة" + "value": "vm run: 创建未返回机器 ID" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Visto" + "value": "vm run:建立未回傳機器 ID" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인함" + "value": "vm run: 생성 결과에 머신 ID가 없습니다" } } } }, - "diffViewer.markViewed": { + "terminalContextMenu.pasteAsOneLine": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Mark as viewed" + "value": "لصق في سطر واحد" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "確認済みにする" + "value": "Als eine Zeile einfügen" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "标记为已查看" + "value": "Paste as One Line" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "標記為已檢視" + "value": "Pegar en una sola línea" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Als angesehen markieren" + "value": "Coller sur une seule ligne" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Marquer comme vu" + "value": "1行にしてペースト" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "وضع علامة تمت المشاهدة" + "value": "한 줄로 붙여넣기" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Marcar como visto" + "value": "粘贴为单行" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "확인함으로 표시" + "value": "貼上為單行" } } } }, - "diffViewer.markNotViewed": { + "actions.discovery.typeDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mark as not viewed" + "value": "Action type: %@" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "未確認にする" + "value": "نوع الإجراء: %@" } }, - "zh-Hans": { + "bs": { "stringUnit": { "state": "translated", - "value": "标记为未查看" + "value": "Vrsta radnje: %@" } }, - "zh-Hant": { + "da": { "stringUnit": { "state": "translated", - "value": "標記為未檢視" + "value": "Handlingstype: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Als nicht angesehen markieren" + "value": "Aktionstyp: %@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Tipo de acción: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Marquer comme non vu" + "value": "Type d’action : %@" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "إزالة علامة تمت المشاهدة" + "value": "Tipo di azione: %@" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Marcar como no visto" + "value": "アクションの種類:%@" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ប្រភេទសកម្មភាព៖ %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인 안 함으로 표시" + "value": "작업 유형: %@" } - } - } - }, - "diffViewer.changedSinceViewed": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "Changed since viewed" + "value": "Handlingstype: %@" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "確認後に変更あり" + "value": "Typ działania: %@" } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "查看后已更改" + "value": "Tipo de ação: %@" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "檢視後已變更" + "value": "Тип действия: %@" } }, - "de": { + "th": { "stringUnit": { "state": "translated", - "value": "Seit dem Ansehen geändert" + "value": "ประเภทการดำเนินการ: %@" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "Modifié depuis la consultation" + "value": "Eylem türü: %@" } }, - "ar": { + "uk": { "stringUnit": { "state": "translated", - "value": "تغيّر منذ المشاهدة" + "value": "Тип дії: %@" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cambiado desde que se vio" + "value": "操作类型:%@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "확인 후 변경됨" + "value": "動作類型:%@" } } } }, - "diffViewer.filesViewedProgress": { + "actions.discovery.shortcutDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "{viewed} of {total} files viewed" + "value": "Shortcut: %@" } }, - "ja": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "اختصار لوحة المفاتيح: %@" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Prečica: %@" + } + }, + "da": { "stringUnit": { "state": "translated", - "value": "{total} 件中 {viewed} 件のファイルを確認済み" + "value": "Genvej: %@" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "已查看 {viewed}/{total} 个文件" + "value": "Tastenkürzel: %@" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "已檢視 {viewed}/{total} 個檔案" + "value": "Atajo: %@" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "{viewed} von {total} Dateien angesehen" + "value": "Raccourci : %@" } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "{viewed} fichiers sur {total} vus" + "value": "Scorciatoia: %@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تمت مشاهدة {viewed} من {total} ملفات" + "value": "ショートカット:%@" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "{viewed} de {total} archivos vistos" + "value": "ផ្លូវកាត់៖ %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "{total}개 중 {viewed}개 파일 확인함" + "value": "단축키: %@" } - } - } - }, - "diffViewer.filterFiles": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "Filter files" + "value": "Snarvei: %@" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "ファイルを絞り込む" + "value": "Skrót: %@" } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "筛选文件" + "value": "Atalho: %@" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "篩選檔案" + "value": "Сочетание клавиш: %@" } }, - "de": { + "th": { "stringUnit": { "state": "translated", - "value": "Dateien filtern" + "value": "แป้นพิมพ์ลัด: %@" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "Filtrer les fichiers" + "value": "Klavye kısayolu: %@" } }, - "ar": { + "uk": { "stringUnit": { "state": "translated", - "value": "تصفية الملفات" + "value": "Сполучення клавіш: %@" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Filtrar archivos" + "value": "快捷键:%@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "파일 필터" + "value": "快速鍵:%@" } } } }, - "diffViewer.filterAddedFiles": { + "actions.discovery.menuTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Added" + "value": "Actions · cmux.json…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "追加" + "value": "الإجراءات · cmux.json…" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "新增" + "value": "Aktionen · cmux.json…" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "新增" + "value": "Acciones · cmux.json…" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Hinzugefügt" + "value": "Opérations · cmux.json…" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ajoutés" + "value": "アクション · cmux.json…" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "مضافة" + "value": "작업 · cmux.json…" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Añadidos" + "value": "操作 · cmux.json…" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "추가됨" + "value": "動作 · cmux.json…" } } } }, - "diffViewer.filterModifiedFiles": { + "actions.discovery.dialogTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Modified" + "value": "Actions · cmux.json" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "変更" + "value": "الإجراءات · cmux.json" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "已修改" + "value": "Aktionen · cmux.json" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "已修改" + "value": "Acciones · cmux.json" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Geändert" + "value": "Opérations · cmux.json" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Modifiés" + "value": "アクション · cmux.json" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "معدّلة" + "value": "작업 · cmux.json" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Modificados" + "value": "操作 · cmux.json" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "수정됨" + "value": "動作 · cmux.json" } } } }, - "diffViewer.filterDeletedFiles": { + "actions.discovery.empty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Deleted" + "value": "No configured actions." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "削除" + "value": "لا توجد إجراءات مُعدّة." } }, - "zh-Hans": { + "bs": { "stringUnit": { "state": "translated", - "value": "已删除" + "value": "Nema konfigurisanih radnji." } }, - "zh-Hant": { + "da": { "stringUnit": { "state": "translated", - "value": "已刪除" + "value": "Ingen konfigurerede handlinger." } }, "de": { "stringUnit": { "state": "translated", - "value": "Gelöscht" + "value": "Keine konfigurierten Aktionen." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No hay acciones configuradas." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimés" + "value": "Aucune action configurée." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "محذوفة" + "value": "Nessuna azione configurata." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Eliminados" + "value": "設定済みのアクションはありません。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនមានសកម្មភាពដែលបានកំណត់រចនាសម្ព័ន្ធទេ។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "삭제됨" + "value": "구성된 작업이 없습니다." } - } - } - }, - "diffViewer.filterRenamedFiles": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "Renamed" + "value": "Ingen konfigurerte handlinger." } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "名前変更" + "value": "Brak skonfigurowanych działań." } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "已重命名" + "value": "Nenhuma ação configurada." } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "已重新命名" + "value": "Нет настроенных действий." } }, - "de": { + "th": { "stringUnit": { "state": "translated", - "value": "Umbenannt" + "value": "ไม่มีการดำเนินการที่กำหนดค่าไว้" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "Renommés" + "value": "Yapılandırılmış eylem yok." } }, - "ar": { + "uk": { "stringUnit": { "state": "translated", - "value": "معاد تسميتها" + "value": "Немає налаштованих дій." } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Renombrados" + "value": "没有已配置的操作。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "이름 변경됨" + "value": "沒有已設定的動作。" } } } }, - "diffViewer.hideViewedFiles": { + "agentWake.banner.close": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hide viewed files" + "value": "Close" } }, "ja": { "stringUnit": { "state": "translated", - "value": "確認済みのファイルを隠す" + "value": "閉じる" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "隐藏已查看的文件" + "value": "Schließen" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "隱藏已檢視的檔案" + "value": "Fermer" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Angesehene Dateien ausblenden" + "value": "إغلاق" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Masquer les fichiers vus" + "value": "Cerrar" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "إخفاء الملفات التي تمت مشاهدتها" + "value": "關閉" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ocultar archivos vistos" + "value": "关闭" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인한 파일 숨기기" + "value": "닫기" } } } }, - "diffViewer.showViewedFiles": { + "agentWake.banner.copy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show viewed files" + "value": "Copy" } }, "ja": { "stringUnit": { "state": "translated", - "value": "確認済みのファイルを表示" + "value": "コピー" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "显示已查看的文件" + "value": "Kopieren" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "顯示已檢視的檔案" + "value": "Copier" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Angesehene Dateien anzeigen" + "value": "نسخ" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Afficher les fichiers vus" + "value": "Copiar" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "إظهار الملفات التي تمت مشاهدتها" + "value": "複製" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Mostrar archivos vistos" + "value": "复制" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인한 파일 표시" + "value": "복사" } } } }, - "diffViewer.noFilesMatchFilter": { + "agentWake.banner.hideCommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No files match the filter." + "value": "Hide command" } }, "ja": { "stringUnit": { "state": "translated", - "value": "絞り込み条件に一致するファイルはありません。" + "value": "コマンドを隠す" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "没有符合筛选条件的文件。" + "value": "Befehl ausblenden" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "沒有符合篩選條件的檔案。" + "value": "Masquer la commande" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Keine Dateien entsprechen dem Filter." + "value": "إخفاء الأمر" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Aucun fichier ne correspond au filtre." + "value": "Ocultar comando" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "لا توجد ملفات مطابقة للتصفية." + "value": "隱藏指令" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ningún archivo coincide con el filtro." + "value": "隐藏命令" } }, "ko": { "stringUnit": { "state": "translated", - "value": "필터와 일치하는 파일이 없습니다." + "value": "명령 숨기기" } } } }, - "diffViewer.generatedFile": { + "agentWake.banner.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Generated file" + "value": "%@ didn't resume after waking." } }, "ja": { "stringUnit": { "state": "translated", - "value": "自動生成ファイル" + "value": "%@ はスリープ解除後に再開しませんでした。" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "生成的文件" + "value": "%@ wurde nach dem Aufwecken nicht fortgesetzt." } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "產生的檔案" + "value": "%@ n’a pas repris après le réveil." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Generierte Datei" + "value": "لم يُستأنف %@ بعد الإيقاظ." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fichier généré" + "value": "%@ no se reanudó después de despertar." } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ملف مُولَّد" + "value": "%@ 在喚醒後未能恢復。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Archivo generado" + "value": "%@ 在唤醒后未能恢复。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "생성된 파일" + "value": "%@이(가) 깨운 후 다시 시작되지 않았습니다." } } } }, - "diffViewer.largeDiff": { + "agentWake.banner.retry": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Large diff" + "value": "Retry" } }, "ja": { "stringUnit": { "state": "translated", - "value": "大きな差分" + "value": "再試行" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "大型差异" + "value": "Erneut versuchen" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "大型差異" + "value": "Réessayer" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Großer Diff" + "value": "إعادة المحاولة" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff volumineux" + "value": "Reintentar" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "فرق كبير" + "value": "重試" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Diff grande" + "value": "重试" } }, "ko": { "stringUnit": { "state": "translated", - "value": "큰 변경 사항" + "value": "재시도" } } } }, - "diffViewer.loadDiff": { + "agentWake.banner.showCommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Load diff" + "value": "Show command" } }, "ja": { "stringUnit": { "state": "translated", - "value": "差分を読み込む" + "value": "コマンドを表示" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "加载差异" + "value": "Befehl anzeigen" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "載入差異" + "value": "Afficher la commande" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Diff laden" + "value": "إظهار الأمر" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Charger le diff" + "value": "Mostrar comando" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "تحميل الفرق" + "value": "顯示指令" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cargar diff" + "value": "显示命令" } }, "ko": { "stringUnit": { "state": "translated", - "value": "변경 사항 불러오기" + "value": "명령 보기" } } } }, - "diffViewer.clearFileFilter": { + "agentWake.notification.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Clear filter" + "value": "%@ didn't resume" } }, "ja": { "stringUnit": { "state": "translated", - "value": "絞り込みを解除" + "value": "%@ が再開しませんでした" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "清除筛选" + "value": "%@ wurde nicht fortgesetzt" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "清除篩選" + "value": "%@ n’a pas repris" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Filter zurücksetzen" + "value": "لم يُستأنف %@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Effacer le filtre" + "value": "%@ no se reanudó" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "مسح التصفية" + "value": "%@ 未能恢復" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Borrar filtro" + "value": "%@ 未能恢复" } }, "ko": { "stringUnit": { "state": "translated", - "value": "필터 지우기" + "value": "%@이(가) 다시 시작되지 않았습니다" } } } }, - "agent.generic.status.runningSubagents": { + "agentWake.reason.didNotStart": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Running subagents" + "value": "It did not start within 90 seconds." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تشغيل الوكلاء الفرعيين" + "value": "90 秒以内に起動しませんでした。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Subagenten werden ausgeführt" + "value": "Es wurde nicht innerhalb von 90 Sekunden gestartet." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ejecutando subagentes" + "value": "Il n’a pas démarré dans les 90 secondes." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sous-agents en cours d’exécution" + "value": "لم يبدأ خلال 90 ثانية." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "サブエージェントを実行中" + "value": "No se inició en 90 segundos." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "하위 에이전트 실행 중" + "value": "未在 90 秒內啟動。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在运行子代理" + "value": "未在 90 秒内启动。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "執行子代理程式中" + "value": "90초 안에 시작되지 않았습니다." } } } }, - "agent.generic.status.waiting": { + "agentWake.reason.exitedBeforeStart": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "Its resume command exited." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "في الانتظار" + "value": "再開コマンドが終了しました。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "Sein Fortsetzungsbefehl wurde beendet." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esperando" + "value": "Sa commande de reprise s’est terminée." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "En attente" + "value": "انتهى أمر الاستئناف الخاص به." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "待機中" + "value": "Su comando de reanudación terminó." } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "대기 중" + "value": "其恢復指令已結束。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "其恢复命令已退出。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "재개 명령이 종료되었습니다." } } } }, - "cloud.overlay.accessLost.detail": { + "agentWake.status.multiple": { "extractionState": "manual", "localizations": { "en": { - "stringUnit": { - "state": "translated", - "value": "You no longer have access to this machine." + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld agent didn't resume" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld agents didn't resume" + } + } + } } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لم يعد لديك حق الوصول إلى هذا الجهاز." + "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 個のエージェントが再開しませんでした" + } + } + } } }, "de": { - "stringUnit": { - "state": "translated", - "value": "Sie haben keinen Zugriff mehr auf diese Maschine." + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld Agent wurde nicht fortgesetzt" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld Agenten wurden nicht fortgesetzt" + } + } + } } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ya no tienes acceso a esta máquina." + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld agent n’a pas repris" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld agents n’ont pas repris" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld agents n’ont pas repris" + } + } + } } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Vous n’avez plus accès à cette machine." + "ar": { + "variations": { + "plural": { + "zero": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف أي وكيل (%ld)" + } + }, + "one": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف وكيل واحد (%ld)" + } + }, + "two": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف وكيلان (%ld)" + } + }, + "few": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف %ld وكلاء" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف %ld وكيلًا" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "لم يُستأنف %ld وكيل" + } + } + } } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このマシンへのアクセス権がなくなりました。" + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld agente no se reanudó" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld agentes no se reanudaron" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld agentes no se reanudaron" + } + } + } } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "더 이상 이 머신에 접근할 수 없습니다." + "zh-Hant": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 個代理程式未能恢復" + } + } + } } }, "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "你已无法再访问这台机器。" + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 个代理未能恢复" + } + } + } } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "你已無法再存取這台機器。" + "ko": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "에이전트 %ld개가 다시 시작되지 않았습니다" + } + } + } } } } }, - "cloud.overlay.accessLost.title": { + "agentWake.status.single": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud machine unavailable" + "value": "Agent didn't resume" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "جهاز Cloud غير متاح" + "value": "エージェントが再開しませんでした" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschine nicht verfügbar" + "value": "Agent wurde nicht fortgesetzt" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Máquina de Cloud no disponible" + "value": "L’agent n’a pas repris" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Machine Cloud indisponible" + "value": "لم يُستأنف الوكيل" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud マシンを利用できません" + "value": "El agente no se reanudó" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud 머신을 사용할 수 없습니다" + "value": "代理程式未能恢復" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud 机器不可用" + "value": "代理未能恢复" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud 機器無法使用" + "value": "에이전트가 다시 시작되지 않았습니다" } } } }, - "cloud.overlay.signedOut.detail": { + "cli.help.record": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign in to cmux to reconnect this terminal." + "value": "Usage: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nRecord a cmux window to an mp4 or gif, for a pull request or a bug\nreport. Only cmux's own windows can be recorded, and no Screen\nRecording permission is involved.\n\nFlags for start:\n --format mp4|gif Output format (default: mp4)\n --gif Shorthand for --format gif\n --fps <1-30> Frames per second (default: 12 for mp4, 8 for gif)\n --max-seconds Stop by itself after n seconds, 0.5-120 (default: 15)\n --scale <0.1-1> Scale the output (default: 1 for mp4, 0.5 for gif)\n --max-width <64-4096> Cap the output width, keeping the aspect ratio\n --region Record part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --no-captions Do not draw `record note` captions into the clip\n --window Window to record (default: the frontmost one)\n\nOutput: ` `, or the full response with --json.\n\nA recording stops itself at --max-seconds, so a clip is never left\nrunning by an agent that goes away. One recording at a time.\n\nExample:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سجّل الدخول إلى cmux لإعادة توصيل هذه الطرفية." + "value": "الاستخدام: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nتسجيل نافذة cmux بصيغة mp4 أو gif، من أجل طلب سحب أو تقرير خطأ.\nلا يمكن تسجيل سوى نوافذ cmux نفسها،\nولا يتطلب ذلك إذن تسجيل الشاشة.\n\nخيارات start:\n --format mp4|gif صيغة الإخراج (الافتراضي: mp4)\n --gif اختصار لـ --format gif\n --fps <1-30> الإطارات في الثانية (الافتراضي: 12 لـ mp4، 8 لـ gif)\n --max-seconds يتوقف من تلقاء نفسه بعد n ثانية، 0.5-120 (الافتراضي: 15)\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1 لـ mp4، 0.5 لـ gif)\n --max-width <64-4096> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --region تسجيل جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --no-captions عدم رسم تعليقات `record note` داخل المقطع\n --window النافذة المراد تسجيلها (الافتراضي: النافذة الأمامية)\n\nالإخراج: ` `، أو الاستجابة الكاملة مع --json.\n\nيتوقف التسجيل من تلقاء نفسه عند --max-seconds، حتى لا يترك وكيل غادر\nمقطعًا قيد التسجيل. تسجيل واحد في كل مرة.\n\nمثال:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "de": { "stringUnit": { "state": "translated", - "value": "Melden Sie sich bei cmux an, um dieses Terminal erneut zu verbinden." + "value": "Verwendung: cmux record [start] [Flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEin cmux-Fenster als mp4 oder gif aufzeichnen, für einen Pull Request\noder einen Fehlerbericht. Nur cmux-eigene Fenster können aufgezeichnet\nwerden, und es ist keine Bildschirmaufnahme-Berechtigung beteiligt.\n\nFlags für start:\n --format mp4|gif Ausgabeformat (Standard: mp4)\n --gif Kurzform für --format gif\n --fps <1-30> Bilder pro Sekunde (Standard: 12 für mp4, 8 für gif)\n --max-seconds Nach n Sekunden selbst beenden, 0.5-120 (Standard: 15)\n --scale <0.1-1> Ausgabe skalieren (Standard: 1 für mp4, 0.5 für gif)\n --max-width <64-4096> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --region Teil des Fensters aufzeichnen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --no-captions Keine `record note`-Untertitel in den Clip zeichnen\n --window Fenster zum Aufzeichnen (Standard: das vorderste)\n\nAusgabe: ` `, oder mit --json die vollständige Antwort.\n\nEine Aufzeichnung beendet sich bei --max-seconds selbst, damit ein Agent, der\nverschwindet, keinen laufenden Clip hinterlässt. Eine Aufzeichnung zur Zeit.\n\nBeispiel:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "es": { "stringUnit": { "state": "translated", - "value": "Inicia sesión en cmux para volver a conectar este terminal." + "value": "Uso: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nGraba una ventana de cmux en mp4 o gif, para un pull request o un informe\nde error. Solo se pueden grabar las ventanas propias de cmux, y no\ninterviene ningún permiso de grabación de pantalla.\n\nFlags para start:\n --format mp4|gif Formato de salida (predeterminado: mp4)\n --gif Atajo para --format gif\n --fps <1-30> Fotogramas por segundo (predeterminado: 12 para mp4, 8 para gif)\n --max-seconds Se detiene solo tras n segundos, 0.5-120 (predeterminado: 15)\n --scale <0.1-1> Escala la salida (predeterminado: 1 para mp4, 0.5 para gif)\n --max-width <64-4096> Limita el ancho de salida manteniendo la proporción\n --region Graba parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --no-captions No dibujar los subtítulos de `record note` en el clip\n --window Ventana que se graba (predeterminado: la del frente)\n\nSalida: ` `, o la respuesta completa con --json.\n\nUna grabación se detiene sola en --max-seconds, para que un agente que\ndesaparece nunca deje un clip en marcha. Una grabación a la vez.\n\nEjemplo:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connectez-vous à cmux pour reconnecter ce terminal." + "value": "Utilisation : cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nEnregistrer une fenêtre cmux en mp4 ou gif, pour une pull request ou un\nrapport de bug. Seules les fenêtres de cmux peuvent être enregistrées, et\naucune autorisation d'enregistrement de l'écran n'intervient.\n\nFlags pour start :\n --format mp4|gif Format de sortie (par défaut : mp4)\n --gif Raccourci pour --format gif\n --fps <1-30> Images par seconde (par défaut : 12 pour mp4, 8 pour gif)\n --max-seconds S'arrête seul après n secondes, 0.5-120 (par défaut : 15)\n --scale <0.1-1> Mettre la sortie à l'échelle (par défaut : 1 pour mp4, 0.5 pour gif)\n --max-width <64-4096> Limiter la largeur de sortie en gardant les proportions\n --region N'enregistrer qu'une partie de la fenêtre, en points fenêtre\n --out Écrire ici au lieu d'un répertoire temporaire\n --label Nommer le fichier\n --no-captions Ne pas dessiner les légendes `record note` dans le clip\n --window Fenêtre à enregistrer (par défaut : celle au premier plan)\n\nSortie : ` `, ou la réponse complète avec --json.\n\nUn enregistrement s'arrête de lui-même à --max-seconds, afin qu'un agent qui\ndisparaît ne laisse jamais un clip en cours. Un seul enregistrement à la fois.\n\nExemple :\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このターミナルに再接続するには cmux にサインインしてください。" + "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\nプルリクエストやバグ報告のために、cmux のウィンドウを mp4 または gif\nで録画します。録画できるのは cmux 自身のウィンドウだけで、画面収録の\n権限は必要ありません。\n\nstart のフラグ:\n --format mp4|gif 出力形式(既定: mp4)\n --gif --format gif の短縮形\n --fps <1-30> 1 秒あたりのフレーム数(既定: mp4 は 12、gif は 8)\n --max-seconds n 秒後に自動停止、0.5-120(既定: 15)\n --scale <0.1-1> 出力を拡大縮小(既定: mp4 は 1、gif は 0.5)\n --max-width <64-4096> 縦横比を保ったまま出力の幅を制限\n --region ウィンドウの一部だけを録画(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --no-captions `record note` のキャプションをクリップに描画しない\n --window 録画するウィンドウ(既定: 最前面のウィンドウ)\n\n出力: ` `、または --json で完全なレスポンス。\n\n録画は --max-seconds で自動停止するので、いなくなったエージェントが\n録画を実行したままにすることはありません。録画は同時に 1 つだけです。\n\n例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 터미널을 다시 연결하려면 cmux에 로그인하세요." + "value": "사용법: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n풀 리퀘스트나 버그 리포트에 쓰려고 cmux 창을 mp4 또는 gif로\n녹화합니다. cmux 자신의 창만 녹화할 수 있고, 화면 기록 권한은\n필요하지 않습니다.\n\nstart 플래그:\n --format mp4|gif 출력 형식 (기본값: mp4)\n --gif --format gif의 단축형\n --fps <1-30> 초당 프레임 수 (기본값: mp4는 12, gif는 8)\n --max-seconds n초 후 스스로 정지, 0.5-120 (기본값: 15)\n --scale <0.1-1> 출력 크기 조정 (기본값: mp4는 1, gif는 0.5)\n --max-width <64-4096> 가로 세로 비율을 유지하며 출력 너비 제한\n --region 창의 일부만 녹화, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --no-captions `record note` 캡션을 클립에 그리지 않음\n --window 녹화할 창 (기본값: 맨 앞 창)\n\n출력: ` `, 또는 --json으로 전체 응답.\n\n녹화는 --max-seconds에서 스스로 멈추므로 사라진 에이전트가 녹화를 계속\n남겨 두는 일은 없습니다. 한 번에 하나의 녹화만 가능합니다.\n\n예:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "登录 cmux 以重新连接此终端。" + "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n将 cmux 窗口录制为 mp4 或 gif,用于 pull request 或错误报告。\n只能录制 cmux 自己的窗口,\n而且不需要任何屏幕录制权限。\n\nstart 的标志:\n --format mp4|gif 输出格式(默认: mp4)\n --gif --format gif 的简写\n --fps <1-30> 每秒帧数(默认: mp4 为 12,gif 为 8)\n --max-seconds n 秒后自行停止,0.5-120(默认: 15)\n --scale <0.1-1> 缩放输出(默认: mp4 为 1,gif 为 0.5)\n --max-width <64-4096> 限制输出宽度并保持宽高比\n --region 只录制窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --no-captions 不要把 `record note` 字幕画进视频\n --window 要录制的窗口(默认: 最前面的窗口)\n\n输出: ` `,或用 --json 获取完整响应。\n\n录制会在 --max-seconds 时自行停止,因此离开的代理不会留下仍在录制的\n视频。同一时间只能有一份录制。\n\n示例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "登入 cmux 以重新連線此終端機。" + "value": "使用方法: cmux record [start] [flags]\n cmux record stop|status [--id ]\n cmux record note [--id ] \n cmux record list\n\n將 cmux 視窗錄製成 mp4 或 gif,用於 pull request 或錯誤報告。\n只能錄製 cmux 自己的視窗,\n而且不需要任何螢幕錄製權限。\n\nstart 的旗標:\n --format mp4|gif 輸出格式(預設: mp4)\n --gif --format gif 的簡寫\n --fps <1-30> 每秒影格數(預設: mp4 為 12,gif 為 8)\n --max-seconds n 秒後自行停止,0.5-120(預設: 15)\n --scale <0.1-1> 縮放輸出(預設: mp4 為 1,gif 為 0.5)\n --max-width <64-4096> 限制輸出寬度並維持長寬比\n --region 只錄製視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --no-captions 不要將 `record note` 字幕畫進影片\n --window 要錄製的視窗(預設: 最前面的視窗)\n\n輸出: ` `,或以 --json 取得完整回應。\n\n錄製會在 --max-seconds 時自行停止,因此離開的代理程式不會留下仍在\n錄製的影片。同一時間只能有一份錄製。\n\n範例:\n cmux record start --gif --max-seconds 8 --label sidebar-drag\n cmux record note \"dragging the workspace\"\n cmux record stop" } } } }, - "cloud.overlay.signedOut.title": { + "cli.record.error.formatConflict": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud session ended" + "value": "record start: --gif conflicts with --format" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتهت جلسة Cloud" + "value": "record start: لا يمكن دمج --gif مع --format" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Sitzung beendet" + "value": "record start: --gif kann nicht mit --format kombiniert werden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sesión de Cloud finalizada" + "value": "record start: --gif no se puede combinar con --format" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Session Cloud terminée" + "value": "record start: --gif ne peut pas être combiné avec --format" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Cloud セッションが終了しました" + "value": "record start: --gif は --format と併用できません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cloud 세션이 종료되었습니다" + "value": "record start: --gif은 --format과 함께 사용할 수 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud 会话已结束" + "value": "record start: --gif 不能与 --format 同用" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud 工作階段已結束" + "value": "record start: --gif 無法與 --format 同時使用" } } } }, - "settingAction.confirm.apply": { + "cli.record.error.noteText": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Change" + "value": "record note: text is required" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ändern" + "value": "record note: النص مطلوب" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Modifier" + "value": "record note: Text ist erforderlich" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تغيير" + "value": "record note: se requiere el texto" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cambiar" + "value": "record note : le texte est requis" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "變更" + "value": "record note: テキストが必要です" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "更改" + "value": "record note: 텍스트가 필요합니다" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "변경" + "value": "record note: 必须提供文本" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "変更" + "value": "record note: 必須提供文字" } } } }, - "settingAction.confirm.message": { + "cli.record.error.unexpectedArguments": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This action edits your cmux.json:\n\n%@" + "value": "record %@: unexpected arguments: %@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Diese Aktion bearbeitet deine cmux.json:\n\n%@" + "value": "record %@: وسائط غير متوقعة: %@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Cette action modifie votre cmux.json :\n\n%@" + "value": "record %@: unerwartete Argumente: %@" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعدّل هذا الإجراء ملف cmux.json:\n\n%@" + "value": "record %@: argumentos inesperados: %@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esta acción edita tu cmux.json:\n\n%@" + "value": "record %@ : arguments inattendus : %@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此動作會編輯你的 cmux.json:\n\n%@" + "value": "record %@: 予期しない引数: %@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "此操作会编辑你的 cmux.json:\n\n%@" + "value": "record %@: 예기치 않은 인수: %@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 작업은 cmux.json을 편집합니다:\n\n%@" + "value": "record %@: 多余的参数: %@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このアクションは cmux.json を編集します:\n\n%@" + "value": "record %@: 未預期的引數: %@" } } } }, - "settingAction.confirm.title": { + "cli.record.error.unknownSubcommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Change Setting?" + "value": "record: unknown subcommand '%@' (start, stop, status, note, list)" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Einstellung ändern?" + "value": "record: أمر فرعي غير معروف '%@' (start، stop، status، note، list)" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Modifier le réglage ?" + "value": "record: unbekannter Unterbefehl „%@“ (start, stop, status, note, list)" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "هل تريد تغيير الإعداد؟" + "value": "record: subcomando desconocido '%@' (start, stop, status, note, list)" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "¿Cambiar el ajuste?" + "value": "record : sous-commande inconnue '%@' (start, stop, status, note, list)" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "要變更設定嗎?" + "value": "record: 不明なサブコマンド '%@' です(start、stop、status、note、list)" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "要更改设置吗?" + "value": "record: 알 수 없는 하위 명령 '%@' (start, stop, status, note, list)" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "설정을 변경할까요?" + "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定を変更しますか?" + "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" } } } }, - "settingAction.failed.unreadable": { + "cli.usage.record": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux couldn't read or save ~/.config/cmux/cmux.json. Check it for a syntax error, then try again." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte ~/.config/cmux/cmux.json nicht lesen oder speichern. Prüfe die Datei auf einen Syntaxfehler und versuche es erneut." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "fr": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux n'a pas pu lire ou enregistrer ~/.config/cmux/cmux.json. Vérifiez qu'il ne contient pas d'erreur de syntaxe, puis réessayez." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تعذّر على cmux قراءة ~/.config/cmux/cmux.json أو حفظه. تحقّق من عدم وجود خطأ في الصياغة، ثم حاول مرة أخرى." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux no pudo leer ni guardar ~/.config/cmux/cmux.json. Revisa si tiene un error de sintaxis y vuelve a intentarlo." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 無法讀取或儲存 ~/.config/cmux/cmux.json。請檢查是否有語法錯誤,然後再試一次。" + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux 无法读取或保存 ~/.config/cmux/cmux.json。请检查是否有语法错误,然后重试。" + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux가 ~/.config/cmux/cmux.json을 읽거나 저장하지 못했습니다. 구문 오류가 있는지 확인한 뒤 다시 시도하세요." + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux は ~/.config/cmux/cmux.json を読み込むか保存できませんでした。構文エラーがないか確認してから、もう一度お試しください。" + "value": "record [start] [--format mp4|gif] [--gif] [--fps ] [--max-seconds ] [--scale ] [--max-width ] [--region ] [--out ] [--label ] [--no-captions] [--window ] | record stop|status [--id ] | record note [--id ] | record list" } } } }, - "settingAction.failed.title": { + "cli.help.shot": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Couldn't Change Setting" + "value": "Usage: cmux shot [flags]\n\nScreenshot a cmux window, or a region of one, to a png or a jpeg. Only\ncmux's own windows can be captured, and no Screen Recording permission\nis involved, so this works on a release build and inside CI.\n\nFlags:\n --format png|jpg Output format (default: png)\n --jpg Shorthand for --format jpg\n --scale <0.1-1> Scale the output (default: 1)\n --max-width <64-8192> Cap the output width, keeping the aspect ratio\n --quality <0.1-1> JPEG quality (default: 0.8, ignored for png)\n --region Capture part of the window, in window points\n --out Write here instead of a temporary directory\n --label Name the file\n --caption Draw a caption into the image\n --window Window to capture (default: the frontmost one)\n\nOutput: `x `, or the full response with --json.\n\nA region is the same rectangle `cmux record --region` films, so a\ndetail spotted in a clip can be shot with the same four numbers.\n\nExample:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر تغيير الإعداد" + "value": "الاستخدام: cmux shot [flags]\n\nتصوير نافذة cmux أو جزء منها بصيغة png أو jpeg.\nلا يمكن تصوير سوى نوافذ cmux نفسها، ولا يتطلب ذلك إذن تسجيل الشاشة،\nلذلك يعمل هذا في بناء الإصدار وداخل CI.\n\nالخيارات:\n --format png|jpg صيغة الإخراج (الافتراضي: png)\n --jpg اختصار لـ --format jpg\n --scale <0.1-1> تحجيم الإخراج (الافتراضي: 1)\n --max-width <64-8192> تحديد أقصى عرض للإخراج مع الحفاظ على نسبة الأبعاد\n --quality <0.1-1> جودة JPEG (الافتراضي: 0.8، وتُهمل مع png)\n --region تصوير جزء من النافذة، بوحدات نقاط النافذة\n --out الكتابة هنا بدلاً من دليل مؤقت\n --label تسمية الملف\n --caption رسم تعليق داخل الصورة\n --window النافذة المراد تصويرها (الافتراضي: النافذة الأمامية)\n\nالإخراج: `x `، أو الاستجابة الكاملة مع --json.\n\nالمنطقة هي نفس المستطيل الذي يصوّره `cmux record --region`، لذا يمكن تصوير\nتفصيل لوحظ في مقطع بالأرقام الأربعة نفسها.\n\nمثال:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einstellung konnte nicht geändert werden" + "value": "Verwendung: cmux shot [Flags]\n\nEin cmux-Fenster oder einen Teil davon als png oder jpeg aufnehmen. Nur\ncmux-eigene Fenster sind aufnehmbar, und es ist keine Berechtigung für\nBildschirmaufnahmen nötig, das geht also im Release-Build und in der CI.\n\nFlags:\n --format png|jpg Ausgabeformat (Standard: png)\n --jpg Kurzform für --format jpg\n --scale <0.1-1> Ausgabe skalieren (Standard: 1)\n --max-width <64-8192> Ausgabebreite begrenzen, Seitenverhältnis bleibt\n --quality <0.1-1> JPEG-Qualität (Standard: 0.8, für png ignoriert)\n --region Teil des Fensters aufnehmen, in Fensterpunkten\n --out Hierhin schreiben statt in ein temporäres Verzeichnis\n --label Datei benennen\n --caption Eine Bildunterschrift ins Bild zeichnen\n --window Fenster zum Aufnehmen (Standard: das vorderste)\n\nAusgabe: `x `, oder mit --json die vollständige Antwort.\n\nEine Region ist dasselbe Rechteck, das `cmux record --region` filmt: ein im\nClip entdecktes Detail lässt sich mit denselben vier Zahlen aufnehmen.\n\nBeispiel:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo cambiar el ajuste" + "value": "Uso: cmux shot [flags]\n\nCaptura una ventana de cmux, o una región de ella, en png o jpeg. Solo se\npueden capturar las ventanas propias de cmux, y no interviene ningún permiso\nde grabación de pantalla, así que funciona en una release y dentro de CI.\n\nFlags:\n --format png|jpg Formato de salida (predeterminado: png)\n --jpg Atajo para --format jpg\n --scale <0.1-1> Escala la salida (predeterminado: 1)\n --max-width <64-8192> Limita el ancho de salida manteniendo la proporción\n --quality <0.1-1> Calidad JPEG (predeterminado: 0.8, se ignora en png)\n --region Captura parte de la ventana, en puntos de ventana\n --out Escribe aquí en lugar de en un directorio temporal\n --label Da nombre al archivo\n --caption Dibuja un rótulo dentro de la imagen\n --window Ventana que se captura (predeterminado: la del frente)\n\nSalida: `x `, o la respuesta completa con --json.\n\nUna región es el mismo rectángulo que filma `cmux record --region`, así que un\ndetalle visto en un clip se captura con los mismos cuatro números.\n\nEjemplo:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible de modifier le réglage" + "value": "Utilisation : cmux shot [flags]\n\nCapture une fenêtre cmux, ou une partie de celle-ci, en png ou en jpeg.\nSeules les fenêtres de cmux peuvent être capturées, et aucune autorisation\nd'enregistrement d'écran n'intervient : cela marche en release et dans la CI.\n\nFlags :\n --format png|jpg Format de sortie (par défaut : png)\n --jpg Raccourci pour --format jpg\n --scale <0.1-1> Met la sortie à l'échelle (par défaut : 1)\n --max-width <64-8192> Limite la largeur de sortie en gardant les proportions\n --quality <0.1-1> Qualité JPEG (par défaut : 0.8, ignorée pour png)\n --region Capture une partie de la fenêtre, en points de fenêtre\n --out Écrit ici au lieu d'un répertoire temporaire\n --label Nomme le fichier\n --caption Dessine une légende dans l'image\n --window Fenêtre à capturer (par défaut : celle au premier plan)\n\nSortie : `x `, ou la réponse complète avec --json.\n\nUne région est le même rectangle que filme `cmux record --region` : un détail\nrepéré dans un clip se capture avec les mêmes quatre nombres.\n\nExemple :\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定を変更できませんでした" + "value": "使用方法: cmux shot [flags]\n\ncmux のウィンドウ、またはその一部の領域を png または jpeg で撮ります。\n撮れるのは cmux 自身のウィンドウだけで、画面収録の権限は必要ないので、\nリリースビルドでも CI の中でも動きます。\n\nフラグ:\n --format png|jpg 出力形式(既定: png)\n --jpg --format jpg の短縮形\n --scale <0.1-1> 出力を拡大縮小(既定: 1)\n --max-width <64-8192> 縦横比を保ったまま出力の幅を制限\n --quality <0.1-1> JPEG の品質(既定: 0.8、png では無視)\n --region ウィンドウの一部だけを撮る(ウィンドウポイント単位)\n --out 一時ディレクトリではなくこのパスに書き出す\n --label ファイルに名前を付ける\n --caption 画像にキャプションを描画する\n --window 撮るウィンドウ(既定: 最前面のウィンドウ)\n\n出力: `x `、または --json で完全なレスポンス。\n\n領域は `cmux record --region` が撮るのと同じ矩形なので、クリップで見つけた\n細部を同じ 4 つの数字で撮れます。\n\n例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "ko": { "stringUnit": { "state": "translated", - "value": "설정을 변경할 수 없음" + "value": "사용법: cmux shot [flags]\n\ncmux 창이나 창의 일부 영역을 png 또는 jpeg로 캡처합니다. cmux 자신의\n창만 캡처할 수 있고, 화면 기록 권한이 필요하지 않으므로 릴리스 빌드와\nCI 안에서도 동작합니다.\n\n플래그:\n --format png|jpg 출력 형식 (기본값: png)\n --jpg --format jpg의 단축형\n --scale <0.1-1> 출력 크기 조정 (기본값: 1)\n --max-width <64-8192> 가로 세로 비율을 유지하며 출력 너비 제한\n --quality <0.1-1> JPEG 품질 (기본값: 0.8, png에서는 무시)\n --region 창의 일부만 캡처, 창 포인트 단위\n --out 임시 디렉터리 대신 이 경로에 기록\n --label 파일 이름 지정\n --caption 이미지에 캡션 그리기\n --window 캡처할 창 (기본값: 맨 앞 창)\n\n출력: `x `, 또는 --json으로 전체 응답.\n\n영역은 `cmux record --region`이 촬영하는 사각형과 같으므로, 클립에서 본\n세부를 같은 네 숫자로 캡처할 수 있습니다.\n\n예:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法更改设置" + "value": "使用方法: cmux shot [flags]\n\n将 cmux 窗口或其中一块区域截取为 png 或 jpeg。\n只能截取 cmux 自己的窗口,而且不需要任何屏幕录制权限,\n因此在 release 构建和 CI 中都能用。\n\n标志:\n --format png|jpg 输出格式(默认: png)\n --jpg --format jpg 的简写\n --scale <0.1-1> 缩放输出(默认: 1)\n --max-width <64-8192> 限制输出宽度并保持宽高比\n --quality <0.1-1> JPEG 质量(默认: 0.8,png 会忽略)\n --region 只截取窗口的一部分,以窗口点为单位\n --out 写入此处而非临时目录\n --label 为文件命名\n --caption 在图片上绘制字幕\n --window 要截取的窗口(默认: 最前面的窗口)\n\n输出: `x `,或用 --json 获取完整响应。\n\n区域和 `cmux record --region` 拍摄的矩形相同,因此在视频里看到的细节\n可以用同样的四个数字截取。\n\n示例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法更改設定" + "value": "使用方法: cmux shot [flags]\n\n將 cmux 視窗或其中一塊區域擷取成 png 或 jpeg。\n只能擷取 cmux 自己的視窗,而且不需要任何螢幕錄製權限,\n因此在 release 版本與 CI 內都能用。\n\n旗標:\n --format png|jpg 輸出格式(預設: png)\n --jpg --format jpg 的簡寫\n --scale <0.1-1> 縮放輸出(預設: 1)\n --max-width <64-8192> 限制輸出寬度並保持長寬比\n --quality <0.1-1> JPEG 品質(預設: 0.8,png 會忽略)\n --region 只擷取視窗的一部分,以視窗點為單位\n --out 寫入此處而非暫存目錄\n --label 為檔案命名\n --caption 在圖片上畫出字幕\n --window 要擷取的視窗(預設: 最前面的視窗)\n\n輸出: `x `,或用 --json 取得完整回應。\n\n區域和 `cmux record --region` 拍攝的矩形相同,所以在影片裡看到的細節\n可以用同樣的四個數字擷取。\n\n範例:\n cmux shot --label settings-sheet\n cmux shot --region 0,0,420,900 --out ~/sidebar.png" } } } }, - "settings.terminal.predictiveLocalEcho": { + "cli.shot.error.formatConflict": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Predictive Local Echo" + "value": "shot: --jpg conflicts with --format" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Vorausschauendes lokales Echo" + "value": "shot: لا يمكن دمج --jpg مع --format" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Écho local prédictif" + "value": "shot: --jpg kann nicht mit --format kombiniert werden" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "الصدى المحلي التنبؤي" + "value": "shot: --jpg no se puede combinar con --format" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Eco local predictivo" + "value": "shot : --jpg ne peut pas être combiné avec --format" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "預測性本機回顯" + "value": "shot: --jpg は --format と併用できません" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "预测性本地回显" + "value": "shot: --jpg은 --format과 함께 사용할 수 없습니다" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "예측 로컬 에코" + "value": "shot: --jpg 不能与 --format 同用" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "予測ローカルエコー" + "value": "shot: --jpg 無法與 --format 同時使用" } } } }, - "settings.search.alias.setting.terminal.predictive-local-echo": { + "cli.shot.error.unexpectedArguments": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho predictive local echo typing latency lag ssh remote speculative mosh round trip underline" + "value": "shot: unexpected arguments: %@" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "shot: وسائط غير متوقعة: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho vorausschauendes lokales echo tippen latenz verzögerung ssh remote spekulativ mosh round trip unterstrichen" + "value": "shot: unerwartete Argumente: %@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho écho local prédictif saisie latence décalage ssh distant spéculatif mosh aller-retour souligné" + "value": "shot: argumentos inesperados: %@" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho الصدى المحلي التنبؤي الكتابة زمن الاستجابة التأخير ssh بعيد تخميني mosh ذهاب وإياب تسطير" + "value": "shot : arguments inattendus : %@" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho eco local predictivo escritura latencia retraso ssh remoto especulativo mosh ida y vuelta subrayado" + "value": "shot: 予期しない引数: %@" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho 預測性本機回顯 輸入 延遲 卡頓 ssh 遠端 推測 mosh 往返 底線" + "value": "shot: 예기치 않은 인수: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho 预测性本地回显 输入 延迟 卡顿 ssh 远程 推测 mosh 往返 下划线" + "value": "shot: 多余的参数: %@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho 예측 로컬 에코 입력 지연 랙 ssh 원격 추측 mosh 왕복 밑줄" + "value": "shot: 未預期的引數: %@" + } + } + } + }, + "cli.usage.shot": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" } }, "ja": { "stringUnit": { "state": "translated", - "value": "terminal.predictiveLocalEcho 予測ローカルエコー 入力 遅延 ラグ ssh リモート 投機的 mosh 往復 下線" + "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" } } } @@ -604832,1016 +605146,72 @@ } } }, - "sidebar.template.finder.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Finder" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Finder-Seitenleiste" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Barre Finder" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شريط Finder الجانبي" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Barra Finder" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "Finder 側邊欄" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "Finder 侧边栏" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Finder 사이드바" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Finder サイドバー" - } - } - } - }, - "sidebar.template.finder.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "A Finder-style workspace and tab browser." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.focus.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Focus" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Fokus" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Concentration" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "التركيز" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enfoque" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "焦點" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "聚焦" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "포커스" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "フォーカス" - } - } - } - }, - "sidebar.template.focus.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The selected workspace first, followed by what needs attention." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.kitchen-sink.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Kitchen Sink" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Küchenspüle" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tout-en-un" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "كل الميزات" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Todo en uno" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "功能大全" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "功能大全" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "종합" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "全部入り" - } - } - } - }, - "sidebar.template.kitchen-sink.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "A tour of the custom sidebar runtime features." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.panel-info.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Panel Info" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Panel-Info" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Infos du panneau" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "معلومات اللوحة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Información del panel" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "面板資訊" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "面板信息" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "패널 정보" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パネル情報" - } - } - } - }, - "sidebar.template.panel-info.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "A selected-workspace overview with ports and pull requests." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.panel-sessions.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Panel Sessions" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Panel-Sitzungen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Sessions du panneau" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جلسات اللوحة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Sesiones del panel" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "面板工作階段" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "面板会话" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "패널 세션" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パネルセッション" - } - } - } - }, - "sidebar.template.panel-sessions.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Searchable sessions for this workspace or all workspaces." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.panel-subagents.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Panel Subagents" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Panel-Unteragenten" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Sous-agents du panneau" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الوكلاء الفرعيون" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Subagentes del panel" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "面板子代理" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "面板子代理" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "패널 하위 에이전트" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パネルサブエージェント" - } - } - } - }, - "sidebar.template.panel-subagents.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Coding-agent sessions grouped by workspace with live status." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.panel-todo.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Panel Todo" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Panel-Aufgaben" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tâches du panneau" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "مهام اللوحة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tareas del panel" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "面板待辦" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "面板待办" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "패널 할 일" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パネルToDo" - } - } - } - }, - "sidebar.template.panel-todo.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "An interactive scratch checklist for the current workspace." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.ports.name": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ports" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Netzwerkports" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ports réseau" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "المنافذ" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Puertos" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "連接埠" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "端口" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "포트" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ポート" - } - } - } - }, - "sidebar.template.ports.description": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Listening ports across the current workspaces." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un modèle modifiable pour une barre latérale personnalisée." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قالب قابل للتحرير لشريط جانبي مخصص." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Una plantilla editable para una barra lateral personalizada." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "可編輯的自訂側邊欄範本。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "可编辑的自定义侧边栏模板。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 가능한 맞춤 사이드바 템플릿입니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集できるカスタムサイドバーのテンプレートです。" - } - } - } - }, - "sidebar.template.status-board.name": { + "sidebar.template.finder.name": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Status Board" + "value": "Finder" } }, "de": { "stringUnit": { "state": "translated", - "value": "Status-Board" + "value": "Finder-Seitenleiste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Tableau des statuts" + "value": "Barre Finder" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لوحة الحالة" + "value": "شريط Finder الجانبي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Panel de estado" + "value": "Barra Finder" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "狀態看板" + "value": "Finder 側邊欄" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "状态看板" + "value": "Finder 侧边栏" } }, "ko": { "stringUnit": { "state": "translated", - "value": "상태 보드" + "value": "Finder 사이드바" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ステータスボード" + "value": "Finder サイドバー" } } } }, - "sidebar.template.status-board.description": { + "sidebar.template.finder.description": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Workspaces grouped by urgency, review, progress, and completion." + "value": "A Finder-style workspace and tab browser." } }, "de": { @@ -605894,72 +605264,72 @@ } } }, - "sidebar.template.workspaces.name": { + "sidebar.template.focus.name": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Workspaces" + "value": "Focus" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche" + "value": "Fokus" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espaces de travail" + "value": "Concentration" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مساحات العمل" + "value": "التركيز" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacios de trabajo" + "value": "Enfoque" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區" + "value": "焦點" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "聚焦" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스" + "value": "포커스" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "フォーカス" } } } }, - "sidebar.template.workspaces.description": { + "sidebar.template.focus.description": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A straightforward live workspace list." + "value": "The selected workspace first, followed by what needs attention." } }, "de": { @@ -606012,1394 +605382,1359 @@ } } }, - "cli.sidebar.try.created": { + "sidebar.template.kitchen-sink.name": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Created a temporary preview at %@ from %@." + "value": "Kitchen Sink" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "معاينة %@ من %@." + "value": "Küchenspüle" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Vorschau von %@ aus %@." + "value": "Tout-en-un" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Vista previa de %@ desde %@." + "value": "كل الميزات" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Aperçu de %@ depuis %@." + "value": "Todo en uno" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ の %@ をプレビューしています。" + "value": "功能大全" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@에서 %@을(를) 미리 봅니다." + "value": "功能大全" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在从 %@ 预览 %@。" + "value": "종합" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在從 %@ 預覽 %@。" + "value": "全部入り" } } } }, - "cli.sidebar.try.openHint": { + "sidebar.template.kitchen-sink.description": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open it with: cmux sidebar open %@" + "value": "A tour of the custom sidebar runtime features." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "افتحه باستخدام: cmux sidebar open %@" + "value": "Eine bearbeitbare Vorlage für eine benutzerdefinierte Seitenleiste." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mit diesem Befehl öffnen: cmux sidebar open %@" + "value": "Un modèle modifiable pour une barre latérale personnalisée." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ábrelo con: cmux sidebar open %@" + "value": "قالب قابل للتحرير لشريط جانبي مخصص." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Ouvrez avec : cmux sidebar open %@" + "value": "Una plantilla editable para una barra lateral personalizada." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "次で開く: cmux sidebar open %@" + "value": "可編輯的自訂側邊欄範本。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "다음으로 열기: cmux sidebar open %@" + "value": "可编辑的自定义侧边栏模板。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "使用此命令打开:cmux sidebar open %@" + "value": "편집 가능한 맞춤 사이드바 템플릿입니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "使用此命令開啟:cmux sidebar open %@" + "value": "編集できるカスタムサイドバーのテンプレートです。" } } } }, - "cli.sidebar.try.revertHint": { + "sidebar.template.panel-info.name": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Remove it when finished: rm %@" + "value": "Panel Info" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أزله عند الانتهاء: rm %@" + "value": "Panel-Info" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Nach der Verwendung entfernen: rm %@" + "value": "Infos du panneau" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Elimínalo al terminar: rm %@" + "value": "معلومات اللوحة" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Supprimez-le ensuite : rm %@" + "value": "Información del panel" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終了後に削除: rm %@" + "value": "面板資訊" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "끝나면 삭제: rm %@" + "value": "面板信息" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "完成后移除:rm %@" + "value": "패널 정보" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "完成後移除:rm %@" + "value": "パネル情報" } } } }, - "cli.sidebar.try.usage": { + "sidebar.template.panel-info.description": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux sidebar try