From d1eb159a7ee0b826c51ffe6ea6542db23d40c276 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Thu, 2 Jul 2026 00:29:32 -0700 Subject: [PATCH 01/26] remote-tmux: add per-host color registry RemoteHostColorRegistry maps each remote host destination to a stable color slot in the workspace palette: a stable FNV-1a hash picks the starting slot, collisions linear-probe to the next free slot, and the slot is cached per host so a server keeps one color everywhere for the life of the session. Pure and @MainActor; unit-tested for the hash, probe, exhaustion, and empty-palette behavior. Not wired into UI yet. --- Sources/RemoteHostColorRegistry.swift | 101 +++++++++++++++++++ cmux.xcodeproj/project.pbxproj | 8 ++ cmuxTests/RemoteHostColorRegistryTests.swift | 95 +++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 Sources/RemoteHostColorRegistry.swift create mode 100644 cmuxTests/RemoteHostColorRegistryTests.swift diff --git a/Sources/RemoteHostColorRegistry.swift b/Sources/RemoteHostColorRegistry.swift new file mode 100644 index 000000000000..c9d4329c91ad --- /dev/null +++ b/Sources/RemoteHostColorRegistry.swift @@ -0,0 +1,101 @@ +import Foundation + +/// Assigns each remote destination a color from the workspace color palette so +/// servers are easy to tell apart at a glance, and the same destination shows the +/// same color in every open window for the life of the app session. Gated by the +/// `remoteTmux.originColors.beta` flag at the call sites. +/// +/// Keyed by the host's `destination` STRING (the ssh alias or `user@host` — the +/// "host name" the user typed), NOT the port/identity-specific ``connectionHash``. +/// That deliberately keeps one color per destination string across ports, at the +/// cost that two spellings of the same box (`box` vs `user@box`) are treated as +/// two hosts. This is a recognizability hint, not an identity — collisions are +/// expected once there are more hosts than palette colors. +/// +/// Assignment rule ("hash the host name to a color; on a collision take the next +/// color"): +/// 1. `destination` is hashed with a STABLE FNV-1a string hash (not Swift's +/// per-process randomized `Hasher`) to a starting palette index — so a host +/// that never collides lands on the same color across app launches too. +/// 2. Linear-probe forward from that start to the first slot not already held by a +/// different host — the "collision → next color" behavior. +/// 3. If every slot is taken (more hosts than palette colors), fall back to the +/// hashed start and let colors repeat. +/// 4. The chosen slot is cached per destination, so repeat lookups from any window +/// return the same color. +/// +/// Consistency guarantee: within one running session the cache gives a destination +/// one color in every window. Across restarts a lone host is stable (step 1), but +/// two hosts that collide on the same start can swap colors depending on which was +/// seen first. Assignments are in-memory and the cache never shrinks (stale hosts +/// keep reserving a slot); durable persistence and eviction are deliberate +/// follow-ups. +@MainActor +final class RemoteHostColorRegistry { + /// Process-wide registry used by the app. Tests construct their own instance + /// with an injected `slotCount` to exercise the probing deterministically. + static let shared = RemoteHostColorRegistry() + + /// Number of palette slots to assign over. Defaults to the built-in palette + /// count; the built-in palette is used for indexing (fixed size/order) so a + /// user editing custom palette entries can't reshuffle host colors. + let slotCount: Int + + /// destination → assigned palette slot (the stable per-host cache). + private(set) var slotByHost: [String: Int] = [:] + /// palette slot → destination that holds it (drives collision probing). + private var hostBySlot: [Int: String] = [:] + + init(slotCount: Int = WorkspaceTabColorSettings.defaultPalette.count) { + self.slotCount = max(0, slotCount) + } + + /// The palette slot for `destination`, assigning one on first sight (stable + /// hash start + linear probe over free slots) and caching it. `nil` only when + /// there are no slots. + @discardableResult + func slot(for destination: String) -> Int? { + guard slotCount > 0 else { return nil } + if let existing = slotByHost[destination] { return existing } + let start = Int(Self.stableHash(destination) % UInt64(slotCount)) + var chosen = start + for offset in 0 ..< slotCount { + let idx = (start + offset) % slotCount + if hostBySlot[idx] == nil { + chosen = idx + break + } + } + slotByHost[destination] = chosen + hostBySlot[chosen] = destination + return chosen + } + + /// The palette color hex for `destination`, resolving the assigned slot to the + /// palette entry's CURRENT hex (so user palette recolors are honored while the + /// slot itself stays stable). `nil` when the palette is empty. + func colorHex(for destination: String) -> String? { + guard let slot = slot(for: destination) else { return nil } + let palette = WorkspaceTabColorSettings.defaultPalette + guard slot < palette.count else { return nil } + let entry = palette[slot] + return WorkspaceTabColorSettings.currentColorHex(named: entry.name) ?? entry.hex + } + + /// Clears all assignments. For tests. + func reset() { + slotByHost.removeAll() + hostBySlot.removeAll() + } + + /// Stable FNV-1a/64 hash of a string — deterministic across processes (unlike + /// `Hasher`), so a host's starting color doesn't change between app launches. + static func stableHash(_ string: String) -> UInt64 { + var hash: UInt64 = 0xcbf2_9ce4_8422_2325 // FNV offset basis + for byte in string.utf8 { + hash ^= UInt64(byte) + hash = hash &* 0x0000_0100_0000_01b3 // FNV prime + } + return hash + } +} diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index 2f6302cf0e49..f9e6243f10ba 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -2612,6 +2612,8 @@ 791102010000000000000001 /* RemoteDisconnectPreparationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 791102020000000000000001 /* RemoteDisconnectPreparationService.swift */; }; E30780000000000000000016 /* RemoteDropUploadError+LocalizedError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E30780000000000000000015 /* RemoteDropUploadError+LocalizedError.swift */; }; CFSF00000000000000000007 /* RemoteFileExplorerProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFSR00000000000000000007 /* RemoteFileExplorerProvider.swift */; }; + EB6AD4FF8F735E03B4D232BB /* RemoteHostColorRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1587427C0041C5F99CA5858 /* RemoteHostColorRegistry.swift */; }; + C3004DE34CF0987FF3C4C4AE /* RemoteHostColorRegistryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0B62418BDA4E8CC349B91 /* RemoteHostColorRegistryTests.swift */; }; 835000000000000000000001 /* RemoteInitialCommandBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835000000000000000000003 /* RemoteInitialCommandBootstrap.swift */; }; 835000000000000000000002 /* RemoteInitialCommandBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835000000000000000000003 /* RemoteInitialCommandBootstrap.swift */; }; 835000000000000000000006 /* RemoteInitialCommandBootstrapFailureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835000000000000000000007 /* RemoteInitialCommandBootstrapFailureTests.swift */; }; @@ -6722,6 +6724,8 @@ 791102020000000000000001 /* RemoteDisconnectPreparationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteDisconnectPreparationService.swift; sourceTree = ""; }; E30780000000000000000015 /* RemoteDropUploadError+LocalizedError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RemoteDropUploadError+LocalizedError.swift"; sourceTree = ""; }; CFSR00000000000000000007 /* RemoteFileExplorerProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteFileExplorerProvider.swift; sourceTree = ""; }; + E1587427C0041C5F99CA5858 /* RemoteHostColorRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteHostColorRegistry.swift; sourceTree = ""; }; + 0BC0B62418BDA4E8CC349B91 /* RemoteHostColorRegistryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteHostColorRegistryTests.swift; sourceTree = ""; }; 835000000000000000000003 /* RemoteInitialCommandBootstrap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteInitialCommandBootstrap.swift; sourceTree = ""; }; 835000000000000000000007 /* RemoteInitialCommandBootstrapFailureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteInitialCommandBootstrapFailureTests.swift; sourceTree = ""; }; 835000000000000000000005 /* RemoteInitialCommandBootstrapTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteInitialCommandBootstrapTests.swift; sourceTree = ""; }; @@ -10811,6 +10815,7 @@ 541716FF0D90CB510EE3004A /* RemoteTmuxSession.swift */, 71D411EFBE33FE85901B9E6A /* RemoteTmuxCommandResult.swift */, 02B8A9858C9804AC9C37D7B4 /* RemoteTmuxHost.swift */, + E1587427C0041C5F99CA5858 /* RemoteHostColorRegistry.swift */, 0A17C0DE0A17C0DE0A17C001 /* RemoteTmuxAttachOutcome.swift */, 0A17C0DE0A17C0DE0A17C901 /* RemoteTmuxVersion.swift */, 92CA6F2F239631988B2FB0C8 /* WorkspaceRemoteTmuxNonInteractiveCloseRoute.swift */, @@ -12128,6 +12133,7 @@ F11ED7AB0002000200020002 /* RemoteTmuxMirrorNewTabPlacementTests.swift */, FA00C0DE0002BEEF0002CAFE /* RemoteTmuxWindowRegistryTests.swift */, 0A17C0DE0A17C0DE0A17C003 /* RemoteTmuxAuthTests.swift */, + 0BC0B62418BDA4E8CC349B91 /* RemoteHostColorRegistryTests.swift */, 7020C0DE7020C0DE7020A001 /* RemoteTmuxProxyTransportRetryTests.swift */, 6732BEEF6732BEEF6732B001 /* RemoteTmuxMasterReadinessTests.swift */, 7368BEEF7368BEEF7368B001 /* RemoteTmuxMissingTmuxTests.swift */, @@ -14690,6 +14696,7 @@ 791102010000000000000001 /* RemoteDisconnectPreparationService.swift in Sources */, E30780000000000000000016 /* RemoteDropUploadError+LocalizedError.swift in Sources */, CFSF00000000000000000007 /* RemoteFileExplorerProvider.swift in Sources */, + EB6AD4FF8F735E03B4D232BB /* RemoteHostColorRegistry.swift in Sources */, 835000000000000000000001 /* RemoteInitialCommandBootstrap.swift in Sources */, D7AB12048000000000000003 /* RemoteInteractiveShellBootstrapBuilder+WorkingDirectory.swift in Sources */, A5001643 /* RemoteInteractiveShellBootstrapBuilder.swift in Sources */, @@ -16900,6 +16907,7 @@ A6D1F0400000000000000002 /* ReleasingWindowControllerTests.swift in Sources */, 63A6792ED28244D28F5E9A83 /* RemoteClaudeTeamsRespawnRoutingTests.swift in Sources */, 791100030000000000000001 /* RemoteDisconnectLifecycleTests.swift in Sources */, + C3004DE34CF0987FF3C4C4AE /* RemoteHostColorRegistryTests.swift in Sources */, 835000000000000000000006 /* RemoteInitialCommandBootstrapFailureTests.swift in Sources */, 835000000000000000000004 /* RemoteInitialCommandBootstrapTests.swift in Sources */, B11049000000000000000003 /* RemoteRelayTmuxCompatAuthorizationTests.swift in Sources */, diff --git a/cmuxTests/RemoteHostColorRegistryTests.swift b/cmuxTests/RemoteHostColorRegistryTests.swift new file mode 100644 index 000000000000..7daa915a59b6 --- /dev/null +++ b/cmuxTests/RemoteHostColorRegistryTests.swift @@ -0,0 +1,95 @@ +import Testing + +#if canImport(cmux_DEV) +@testable import cmux_DEV +#elseif canImport(cmux) +@testable import cmux +#endif + +/// Coverage for the per-host origin-color assignment: a host hashes to a stable +/// palette slot, collisions linear-probe to the next free slot, and the same host +/// always resolves to the same slot (so a server shows one color in every window). +@MainActor +@Suite struct RemoteHostColorRegistryTests { + private func startSlot(_ destination: String, count: Int) -> Int { + Int(RemoteHostColorRegistry.stableHash(destination) % UInt64(count)) + } + + @Test func stableHashIsDeterministic() { + // Not Swift's per-process randomized Hasher: equal inputs → equal output, + // and it varies by input. + #expect(RemoteHostColorRegistry.stableHash("cmux-srvA") == RemoteHostColorRegistry.stableHash("cmux-srvA")) + #expect(RemoteHostColorRegistry.stableHash("cmux-srvA") != RemoteHostColorRegistry.stableHash("cmux-srvB")) + } + + @Test func sameHostAlwaysGetsTheSameSlot() { + let reg = RemoteHostColorRegistry(slotCount: 16) + let first = reg.slot(for: "user@example.com") + let second = reg.slot(for: "user@example.com") + #expect(first != nil) + #expect(first == second) + } + + @Test func firstHostLandsOnItsHashedStart() { + let count = 16 + let reg = RemoteHostColorRegistry(slotCount: count) + #expect(reg.slot(for: "cmux-srvA") == startSlot("cmux-srvA", count: count)) + } + + @Test func distinctHostsFillDistinctSlotsUntilFull() { + let count = 6 + let reg = RemoteHostColorRegistry(slotCount: count) + var slots: Set = [] + for i in 0 ..< count { + slots.insert(reg.slot(for: "host-\(i)")!) + } + // Probing guarantees the first `count` distinct hosts occupy every slot. + #expect(slots == Set(0 ..< count)) + } + + @Test func collisionProbesToADifferentSlot() { + let count = 8 + let reg = RemoteHostColorRegistry(slotCount: count) + // Find two destinations that hash to the SAME starting slot. + var seen: [Int: String] = [:] + var a = "", b = "" + for i in 0 ..< 10000 { + let name = "collide-\(i)" + let s = startSlot(name, count: count) + if let prev = seen[s] { a = prev; b = name; break } + seen[s] = name + } + #expect(!a.isEmpty && !b.isEmpty) + #expect(startSlot(a, count: count) == startSlot(b, count: count)) // genuine collision + let sa = reg.slot(for: a)! + let sb = reg.slot(for: b)! + #expect(sa == startSlot(a, count: count)) // first keeps the hashed start + #expect(sb != sa) // second probed to the next free slot + } + + @Test func exhaustionReusesSlotsWithoutCrashing() { + let count = 4 + let reg = RemoteHostColorRegistry(slotCount: count) + var all: [Int] = [] + for i in 0 ..< (count + 3) { + all.append(reg.slot(for: "many-\(i)")!) + } + // Every assignment is a valid slot; the first `count` are distinct, the rest reuse. + #expect(all.allSatisfy { (0 ..< count).contains($0) }) + #expect(Set(all.prefix(count)).count == count) + } + + @Test func emptyPaletteYieldsNoSlot() { + let reg = RemoteHostColorRegistry(slotCount: 0) + #expect(reg.slot(for: "anything") == nil) + } + + @Test func colorHexIsStablePerHost() { + // Uses the real built-in palette; a host resolves to a non-nil hex and the + // same hex every time. + let reg = RemoteHostColorRegistry() + let hex = reg.colorHex(for: "cmux-srvA") + #expect(hex != nil) + #expect(hex == reg.colorHex(for: "cmux-srvA")) + } +} From 5152360a553e2acdcf7d2c23797f4ab8ee0ad85d Mon Sep 17 00:00:00 2001 From: ejc3 Date: Thu, 2 Jul 2026 00:29:42 -0700 Subject: [PATCH 02/26] remote-tmux: add originColors beta flag + Settings toggle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New remoteTmux.originColors.beta.enabled flag (off by default) in the Beta Features catalog, with a "Remote host colors" toggle in Settings → Beta Features and en/ja localization. Gates the per-host coloring; while off, remote workspaces render with no origin tint. --- .../Keys/BetaFeaturesCatalogSection.swift | 12 +++++ .../Sections/BetaFeaturesSection.swift | 21 ++++++++ Resources/Localizable.xcstrings | 51 +++++++++++++++++++ 3 files changed, 84 insertions(+) diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift index 7f46ec337509..b9e0e990724d 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift @@ -99,5 +99,17 @@ public struct BetaFeaturesCatalogSection: SettingCatalogSection { userDefaultsKey: "terminal.beta.predictedEcho.enabled" ) + /// Remote host origin colors: tint each remote workspace's sidebar row and + /// tab with a stable per-host color (hashed from the host name into the + /// workspace palette, collisions taking the next color) so servers are easy + /// to tell apart and a given host shows the same color in every window. A + /// user's manual workspace color always wins. Defaults off; while off, remote + /// workspaces render with no origin tint. + public let remoteTmuxOriginColors = DefaultsKey( + id: "remoteTmux.originColors.beta.enabled", + defaultValue: false, + userDefaultsKey: "remoteTmux.originColors.beta.enabled" + ) + public init() {} } diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift index bd37ad1b9bd1..515f9543b140 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift @@ -12,6 +12,7 @@ public struct BetaFeaturesSection: View { @State private var customSidebars: DefaultsValueModel @State private var remoteTmux: DefaultsValueModel @State private var predictedEcho: DefaultsValueModel + @State private var remoteTmuxOriginColors: DefaultsValueModel @State private var workspaceTodoControls: DefaultsValueModel @State private var workspaceTodosChecklistStyle: DefaultsValueModel /// `DisableCloud` (MDM). The opt-in is meaningless while an administrator @@ -29,6 +30,7 @@ public struct BetaFeaturesSection: View { _customSidebars = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.customSidebars)) _remoteTmux = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.remoteTmux)) _predictedEcho = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.predictedEcho)) + _remoteTmuxOriginColors = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.remoteTmuxOriginColors)) _workspaceTodoControls = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.workspaceTodoControls)) _workspaceTodosChecklistStyle = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.workspaceTodosChecklistStyle)) } @@ -53,6 +55,8 @@ public struct BetaFeaturesSection: View { SettingsCardDivider() predictedEchoRow SettingsCardDivider() + remoteTmuxOriginColorsRow + SettingsCardDivider() workspaceTodoControlsRow SettingsCardDivider() workspaceTodosChecklistStyleRow @@ -76,6 +80,7 @@ public struct BetaFeaturesSection: View { customSidebars, remoteTmux, predictedEcho, + remoteTmuxOriginColors, workspaceTodoControls, workspaceTodosChecklistStyle, ] @@ -217,6 +222,22 @@ public struct BetaFeaturesSection: View { } } + @ViewBuilder + private var remoteTmuxOriginColorsRow: some View { + SettingsCardRow( + configurationReview: .settingsOnly, + searchAnchorID: "setting:betaFeatures:remoteTmuxOriginColors", + String(localized: "settings.betaFeatures.remoteTmuxOriginColors", defaultValue: "Remote host colors"), + subtitle: remoteTmuxOriginColors.current + ? String(localized: "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn", defaultValue: "Tints each remote workspace's sidebar row and tab with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins.") + : String(localized: "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff", defaultValue: "Leaves remote workspaces without an origin color until you enable it here.") + ) { + Toggle("", isOn: Binding(get: { remoteTmuxOriginColors.current }, set: { remoteTmuxOriginColors.set($0) })) + .labelsHidden() + .controlSize(.small) + .accessibilityIdentifier("SettingsBetaRemoteTmuxOriginColorsToggle") + } + } } /// Small warning callout with a yellow triangle, used at the top of diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 775151f9ac4a..04cd3f1bb3b3 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -579339,6 +579339,57 @@ } } } + }, + "settings.betaFeatures.remoteTmuxOriginColors": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host colors" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リモートホストの色" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Leaves remote workspaces without an origin color until you enable it here." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ここで有効にするまで、リモートワークスペースにオリジンカラーを表示しません。" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tints each remote workspace's sidebar row and tab with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "各リモートワークスペースのサイドバー行とタブを、ホストごとに固定された色で色付けし、サーバーを見分けやすくします。手動で設定したワークスペースの色が常に優先されます。" + } + } + } } }, "version": "1.0" From 6de8d9ca3d86411975b839b1e1b92af1995bcd00 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Thu, 2 Jul 2026 00:29:53 -0700 Subject: [PATCH 03/26] remote-tmux: tint remote workspace rows by host color MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the flag is on, a remote workspace's sidebar row and tab take its host's color (manual workspace color still wins). The color is resolved above the LazyVStack row boundary and passed into TabItemView as a plain value, and it's folded into the row snapshot's presentation key so toggling the flag — or a mirror host resolving after the row first appears — repaints immediately instead of showing a stale cached color. RemoteTmuxController.hostDestination(forWorkspaceId:) resolves a mirror workspace's host (mirror workspaces carry it only through the session mirror, not remoteConfiguration). A refresh-policy test pins that the effective color is part of the presentation key. --- Sources/ContentView.swift | 27 ++++++++++++++++++- Sources/RemoteTmuxController.swift | 8 ++++++ ...idebarWorkspaceSnapshotRefreshPolicy.swift | 3 +++ Sources/SidebarWorkspaceSnapshotBuilder.swift | 11 ++++++++ Sources/SidebarWorkspaceSnapshotFactory.swift | 21 ++++++++++++--- .../TabItemView+WorkspaceContextMenu.swift | 4 ++- ...rWorkspaceSnapshotRefreshPolicyTests.swift | 19 +++++++++++-- 7 files changed, 85 insertions(+), 8 deletions(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 61e6ad99ddd1..d1783aeb8a0b 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -11539,6 +11539,9 @@ struct VerticalTabsSidebar: View, Equatable { @LiveSetting(\.betaFeatures.customSidebars) private var customSidebarsExperimentalEnabled @LiveSetting(\.customSidebars.renderer) private var customSidebarRenderer @LiveSetting(\.shortcuts.showModifierHoldHints) private var showModifierHoldHints + // Per-host origin colors (beta). Read here so toggling the flag re-evaluates + // the sidebar and rebuilds each row's snapshot with the resolved color. + @LiveSetting(\.betaFeatures.remoteTmuxOriginColors) private var remoteTmuxOriginColorsEnabled #if DEBUG @Environment(\.minimalModeInvalidationProbe) private var minimalModeInvalidationProbe @Environment(\.sidebarLazyContractProbe) private var sidebarLazyContractProbe @@ -12192,6 +12195,13 @@ struct VerticalTabsSidebar: View, Equatable { refreshWorkspaceSnapshots() } } + .onChange(of: remoteTmuxOriginColorsEnabled) { _, _ in + // The origin color feeds the snapshot's effective color, so a flag + // toggle must repopulate the cache like any other presentation change; + // otherwise every row keeps missing the cache and rebuilds its + // snapshot on each evaluation. + refreshWorkspaceSnapshots() + } .onDisappear { workspaceSnapshotRefreshCoalescer.cancel() } @@ -13230,10 +13240,25 @@ struct VerticalTabsSidebar: View, Equatable { return SidebarWorkspaceSnapshotFactory( workspace: workspace, settings: settings, - showsAgentActivity: showsAgentActivity + showsAgentActivity: showsAgentActivity, + originColorHex: originColorHex(for: workspace) ).makeSnapshot() } + /// Per-host origin color (beta), resolved here — above the row boundary — to + /// a plain value. Mirror workspaces carry their host only through the session + /// mirror, so fall back to the controller lookup when there's no + /// remoteConfiguration. Nil when the flag is off or the workspace has no host. + private func originColorHex(for workspace: Workspace) -> String? { + guard remoteTmuxOriginColorsEnabled else { return nil } + let destination = workspace.remoteConfiguration?.destination + ?? (workspace.isRemoteTmuxMirror + ? AppDelegate.shared?.remoteTmuxController.hostDestination(forWorkspaceId: workspace.id) + : nil) + guard let destination, !destination.isEmpty else { return nil } + return RemoteHostColorRegistry.shared.colorHex(for: destination) + } + private func clearExtensionSidebarObservationPublishers() { extensionSidebarObservationWorkspaceIds = [] extensionSidebarObservationPublishersBuilt = false diff --git a/Sources/RemoteTmuxController.swift b/Sources/RemoteTmuxController.swift index 4ea5600acc54..40ca5b7d93c5 100644 --- a/Sources/RemoteTmuxController.swift +++ b/Sources/RemoteTmuxController.swift @@ -381,6 +381,14 @@ final class RemoteTmuxController { // MARK: - Create / destroy propagation (P5) + /// The destination (ssh alias / `user@host`) of the host whose mirror owns + /// `workspaceId`, or `nil` when no mirror maps to it. Drives the per-host + /// origin color: mirror workspaces carry their host only through the session + /// mirror (not `remoteConfiguration`), so the color resolver reads it here. + func hostDestination(forWorkspaceId workspaceId: UUID) -> String? { + sessionMirrors.values.first(where: { $0.mirroredWorkspaceId == workspaceId })?.host.destination + } + /// A mirrored workspace was renamed → `rename-session` on the remote so the /// tmux session name tracks the cmux workspace title. func handleMirrorWorkspaceRenamed(workspaceId: UUID, title: String?) { diff --git a/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift b/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift index f120de9f2115..949d542c0d3c 100644 --- a/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift +++ b/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift @@ -9,6 +9,7 @@ extension SidebarWorkspaceSnapshotBuilder.Snapshot { let cloudWorkspaceLabel: String? let deviceWorkspaceLabel: String? let customColorHex: String? + let hasManualCustomColor: Bool let finderDirectoryPath: String? let mediaActivity: BrowserMediaActivity let taskStatus: WorkspaceTaskStatus? @@ -32,6 +33,7 @@ extension SidebarWorkspaceSnapshotBuilder.Snapshot { cloudWorkspaceLabel: cloudWorkspaceLabel, deviceWorkspaceLabel: deviceWorkspaceLabel, customColorHex: customColorHex, + hasManualCustomColor: hasManualCustomColor, finderDirectoryPath: finderDirectoryPath, mediaActivity: mediaActivity, taskStatus: taskStatus, @@ -56,6 +58,7 @@ extension SidebarWorkspaceSnapshotBuilder.Snapshot { isPinned: snapshot.isPinned, isMuted: snapshot.isMuted, customColorHex: snapshot.customColorHex, + hasManualCustomColor: snapshot.hasManualCustomColor, cloudWorkspaceLabel: snapshot.cloudWorkspaceLabel, remoteWorkspaceSidebarText: remoteWorkspaceSidebarText, remoteConnectionStatusText: remoteConnectionStatusText, diff --git a/Sources/SidebarWorkspaceSnapshotBuilder.swift b/Sources/SidebarWorkspaceSnapshotBuilder.swift index f8a2182a4c08..03f4d1563dd7 100644 --- a/Sources/SidebarWorkspaceSnapshotBuilder.swift +++ b/Sources/SidebarWorkspaceSnapshotBuilder.swift @@ -13,6 +13,12 @@ struct SidebarWorkspaceSnapshotBuilder { var compactsAgentStatus = false var compactStatusIcons: [String: String] = [:] let visibleAuxiliaryDetails: SidebarWorkspaceAuxiliaryDetailVisibility + // Effective row color (manual color, else resolved origin color). Part of + // the key so the cached snapshot is rebuilt when the color changes — e.g. + // toggling the origin-colors flag or a mirror host resolving after appear, + // neither of which is a Workspace @Published change that would otherwise + // refresh the snapshot. + let customColorHex: String? } struct VerticalBranchDirectoryLine: Equatable { @@ -40,7 +46,12 @@ struct SidebarWorkspaceSnapshotBuilder { let isPinned: Bool /// Whether any workspace-scoped notification mute is active. let isMuted: Bool + // Effective row color: the manually chosen workspace color, else the + // per-host origin color when that beta flag is on. Rendering reads this; + // affordances that only make sense for a manual color (Clear Color) + // check `hasManualCustomColor` instead. let customColorHex: String? + let hasManualCustomColor: Bool /// Stable Cloud identity, independent of connection status and detail visibility. let cloudWorkspaceLabel: String? let remoteWorkspaceSidebarText: String? diff --git a/Sources/SidebarWorkspaceSnapshotFactory.swift b/Sources/SidebarWorkspaceSnapshotFactory.swift index 4f641c421eed..028590f51791 100644 --- a/Sources/SidebarWorkspaceSnapshotFactory.swift +++ b/Sources/SidebarWorkspaceSnapshotFactory.swift @@ -15,6 +15,10 @@ struct SidebarWorkspaceSnapshotFactory { let workspace: Workspace let settings: SidebarTabItemSettingsSnapshot let showsAgentActivity: Bool + /// Resolved per-host origin color (hex), or nil when the beta flag is off or + /// the workspace has no host. Resolved by the caller above the row boundary + /// and passed in as a plain value; a manual `workspace.customColor` still wins. + var originColorHex: String? = nil /// Creates the current immutable presentation snapshot for the workspace row. func makeSnapshot() -> SidebarWorkspaceSnapshotBuilder.Snapshot { @@ -106,7 +110,10 @@ struct SidebarWorkspaceSnapshotFactory { customDescription: settings.showsWorkspaceDescription ? visibleCustomDescription : nil, isPinned: workspace.isPinned, isMuted: workspace.isMuted, - customColorHex: workspace.customColor, + // A manual workspace color always wins; the per-host origin color + // (nil when the flag is off) is the fallback. + customColorHex: workspace.customColor ?? originColorHex, + hasManualCustomColor: workspace.customColor != nil, cloudWorkspaceLabel: cloud?.isDeviceWorkspace == true ? nil : cloud?.machineLabel, remoteWorkspaceSidebarText: remoteWorkspaceSidebarText, remoteConnectionStatusText: remoteConnectionStatusText, @@ -147,12 +154,17 @@ struct SidebarWorkspaceSnapshotFactory { } private var presentationKey: SidebarWorkspaceSnapshotBuilder.PresentationKey { - Self.presentationKey(settings: settings, showsAgentActivity: showsAgentActivity) + Self.presentationKey( + settings: settings, + showsAgentActivity: showsAgentActivity, + customColorHex: workspace.customColor ?? originColorHex + ) } static func presentationKey( settings: SidebarTabItemSettingsSnapshot, - showsAgentActivity: Bool + showsAgentActivity: Bool, + customColorHex: String? ) -> SidebarWorkspaceSnapshotBuilder.PresentationKey { SidebarWorkspaceSnapshotBuilder.PresentationKey( showsWorkspaceDescription: settings.showsWorkspaceDescription, @@ -162,7 +174,8 @@ struct SidebarWorkspaceSnapshotFactory { showsAgentActivity: showsAgentActivity, compactsAgentStatus: settings.compactsAgentStatus, compactStatusIcons: settings.compactStatusIcons, - visibleAuxiliaryDetails: settings.visibleAuxiliaryDetails + visibleAuxiliaryDetails: settings.visibleAuxiliaryDetails, + customColorHex: customColorHex ) } diff --git a/Sources/TabItemView+WorkspaceContextMenu.swift b/Sources/TabItemView+WorkspaceContextMenu.swift index 3219095d4d23..b8128e216f6c 100644 --- a/Sources/TabItemView+WorkspaceContextMenu.swift +++ b/Sources/TabItemView+WorkspaceContextMenu.swift @@ -159,7 +159,9 @@ extension TabItemView { WorkspaceTabColorSettings.normalizedHex($0) } - if workspaceSnapshot.customColorHex != nil { + // Gate on the MANUAL color, not the effective row color: an + // origin-tinted row with no manual color has nothing to clear. + if workspaceSnapshot.hasManualCustomColor { Button { applyTabColor(nil, targetIds: targetIds) } label: { diff --git a/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift b/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift index 99f4714ec004..fa4a0958fd01 100644 --- a/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift +++ b/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift @@ -224,6 +224,7 @@ import Testing isPinned: isPinned, isMuted: false, customColorHex: customColorHex, + hasManualCustomColor: customColorHex != nil, cloudWorkspaceLabel: nil, remoteWorkspaceSidebarText: nil, remoteConnectionStatusText: remoteConnectionStatusText, @@ -269,7 +270,8 @@ import Testing showsBranchDirectory: true, showsPullRequests: true, showsPorts: true - ) + ), + customColorHex: String? = nil ) -> SidebarWorkspaceSnapshotBuilder.PresentationKey { SidebarWorkspaceSnapshotBuilder.PresentationKey( showsWorkspaceDescription: showsWorkspaceDescription, @@ -277,9 +279,22 @@ import Testing showsGitBranch: showsGitBranch, usesViewportAwarePath: usesViewportAwarePath, showsAgentActivity: showsAgentActivity, - visibleAuxiliaryDetails: visibleAuxiliaryDetails + visibleAuxiliaryDetails: visibleAuxiliaryDetails, + customColorHex: customColorHex ) } + + /// The effective row color is part of the presentation key so the cached + /// sidebar snapshot is rebuilt when the color changes — e.g. toggling the + /// origin-colors flag or a mirror host resolving after the row first appears. + /// Without this, the row re-evaluates but renders the stale cached color. + @Test func presentationKeyDistinguishesEffectiveColor() { + let uncolored = Self.presentationKey(customColorHex: nil) + let tinted = Self.presentationKey(customColorHex: "#1565C0") + #expect(uncolored != tinted) + #expect(tinted == Self.presentationKey(customColorHex: "#1565C0")) + #expect(Self.presentationKey(customColorHex: "#922B21") != tinted) + } } @Suite struct SidebarSelectedWorkspaceScrollPolicyTests { From 1d85cf056719a896f255b079a7ec22b306983eec Mon Sep 17 00:00:00 2001 From: ejc3 Date: Fri, 17 Jul 2026 12:54:25 -0700 Subject: [PATCH 04/26] remote-tmux: make the Remote host colors toggle searchable in Settings Every other Beta Features toggle has a curated search entry; without one the new toggle can't be found or scrolled to from Settings search. Add the entry and list its explicit anchor in the resolution test. --- .../CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift | 1 + .../CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift | 1 + 2 files changed, 2 insertions(+) diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift index ce0734effa47..219aeabd1e25 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift @@ -404,6 +404,7 @@ extension Array where Element == CuratedSettingEntry { .init(section: .betaFeatures, id: "customSidebars", title: String(localized: "settings.betaFeatures.customSidebars", defaultValue: "Custom Sidebars"), synonyms: "Custom Sidebars custom sidebars swift json interpreted vibe beta unstable"), .init(section: .betaFeatures, id: "predictedEcho", title: String(localized: "settings.betaFeatures.predictedEcho", defaultValue: "Predictive local echo"), synonyms: "Predictive local echo typing latency lag ssh remote speculative mosh round trip beta unstable"), .init(section: .betaFeatures, id: "remoteTmux", title: String(localized: "settings.betaFeatures.remoteTmux", defaultValue: "Remote tmux"), synonyms: "Remote tmux remote tmux ssh control mode -CC mirror session window pane sidebar workspace beta unstable"), + .init(section: .betaFeatures, id: "remoteTmuxOriginColors", title: String(localized: "settings.betaFeatures.remoteTmuxOriginColors", defaultValue: "Remote host colors"), synonyms: "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable"), .init( section: .betaFeatures, id: "workspace-todo-controls", diff --git a/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift b/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift index e4074e3905d0..27c7ef175ad1 100644 --- a/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift +++ b/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift @@ -192,6 +192,7 @@ struct SettingsRowAnchorResolutionTests { "setting:betaFeatures:customSidebars", "setting:betaFeatures:remoteTmux", "setting:betaFeatures:predictedEcho", + "setting:betaFeatures:remoteTmuxOriginColors", "setting:customSidebars:enabled", "setting:computerUse:permissions", "setting:browser:history", From 92b3f07e8509b97cfb5e0863f66497003897613f Mon Sep 17 00:00:00 2001 From: ejc3 Date: Sun, 19 Jul 2026 00:06:04 -0700 Subject: [PATCH 05/26] remote-tmux: own the host color registry on the controller (no ambient singleton) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RemoteHostColorRegistry was a `static let shared` ambient global. Move ownership onto RemoteTmuxController (itself owned by AppDelegate at the app seam) and reach it through `AppDelegate.shared?.remoteTmuxController.hostColorRegistry` — the same seam the origin-color resolver already uses for `hostDestination`. No behavior change; assignments stay consistent process-wide without a second global owner. The registry's own tests already construct their own instances, so they're unaffected. --- Sources/ContentView.swift | 2 +- Sources/RemoteHostColorRegistry.swift | 8 ++++---- Sources/RemoteTmuxController.swift | 4 ++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index d1783aeb8a0b..2130822da398 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -13256,7 +13256,7 @@ struct VerticalTabsSidebar: View, Equatable { ? AppDelegate.shared?.remoteTmuxController.hostDestination(forWorkspaceId: workspace.id) : nil) guard let destination, !destination.isEmpty else { return nil } - return RemoteHostColorRegistry.shared.colorHex(for: destination) + return AppDelegate.shared?.remoteTmuxController.hostColorRegistry.colorHex(for: destination) } private func clearExtensionSidebarObservationPublishers() { diff --git a/Sources/RemoteHostColorRegistry.swift b/Sources/RemoteHostColorRegistry.swift index c9d4329c91ad..633cec6e19a9 100644 --- a/Sources/RemoteHostColorRegistry.swift +++ b/Sources/RemoteHostColorRegistry.swift @@ -30,12 +30,12 @@ import Foundation /// seen first. Assignments are in-memory and the cache never shrinks (stale hosts /// keep reserving a slot); durable persistence and eviction are deliberate /// follow-ups. +/// One instance is owned by ``RemoteTmuxController`` (itself owned by `AppDelegate` +/// at the app seam) and reached through it, so assignments stay consistent +/// process-wide without an ambient global. Tests construct their own instance with +/// an injected `slotCount` to exercise the probing deterministically. @MainActor final class RemoteHostColorRegistry { - /// Process-wide registry used by the app. Tests construct their own instance - /// with an injected `slotCount` to exercise the probing deterministically. - static let shared = RemoteHostColorRegistry() - /// Number of palette slots to assign over. Defaults to the built-in palette /// count; the built-in palette is used for indexing (fixed size/order) so a /// user editing custom palette entries can't reshuffle host colors. diff --git a/Sources/RemoteTmuxController.swift b/Sources/RemoteTmuxController.swift index 40ca5b7d93c5..af7976447b36 100644 --- a/Sources/RemoteTmuxController.swift +++ b/Sources/RemoteTmuxController.swift @@ -25,6 +25,10 @@ final class RemoteTmuxController { /// owned by ``RemoteTmuxController`` and delegated to for discovery + master teardown. let transportRegistry = RemoteTmuxTransportRegistry() + /// Per-host sidebar origin colors, owned here (not an ambient global) so every + /// window resolves a destination to the same palette slot for the app session. + let hostColorRegistry = RemoteHostColorRegistry() + /// Live `tmux -CC` control connections keyed by `connectionHash\u{1}session` /// (see ``connectionKey(host:sessionName:)``), so repeated attach requests for /// the same endpoint+session reuse the existing connection. From 38c0a15337173f1468b92d3838f9c512ef289ca3 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Sun, 19 Jul 2026 00:37:43 -0700 Subject: [PATCH 06/26] tests: pass origin-color snapshot params in SidebarAppKitRowCellTests The AppKit workspace-row-cell test (added on main after this feature branch was cut) builds a SidebarWorkspaceSnapshot and a presentationKey. Origin colors added `customColorHex` to `presentationKey(...)` and `hasManualCustomColor` to the Snapshot, both required, so on current main the test no longer compiles. Pass the defaults (nil / false) so the cmuxTests target builds. --- cmuxTests/SidebarAppKitRowCellTests.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmuxTests/SidebarAppKitRowCellTests.swift b/cmuxTests/SidebarAppKitRowCellTests.swift index fc267701583e..28df14c24379 100644 --- a/cmuxTests/SidebarAppKitRowCellTests.swift +++ b/cmuxTests/SidebarAppKitRowCellTests.swift @@ -22,13 +22,16 @@ struct SidebarAppKitRowCellTests { SidebarWorkspaceSnapshotBuilder.Snapshot( presentationKey: SidebarWorkspaceSnapshotFactory.presentationKey( settings: SidebarTabItemSettingsSnapshot(defaults: UserDefaults(suiteName: UUID().uuidString)!), - showsAgentActivity: false + showsAgentActivity: false, + customColorHex: nil ), title: title, customDescription: customDescription, isPinned: isPinned, isMuted: false, - customColorHex: nil, cloudWorkspaceLabel: nil, + customColorHex: nil, + hasManualCustomColor: false, + cloudWorkspaceLabel: nil, remoteWorkspaceSidebarText: nil, remoteConnectionStatusText: "", remoteStateHelpText: "", From 0363f337e7df8027fd9cec1cef28c1d01a4456b0 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Sun, 19 Jul 2026 16:34:54 -0700 Subject: [PATCH 07/26] remote-tmux: address origin-colors review findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Drop `RemoteHostColorRegistry.reset()`. It was a test-only seam in production source with no callers; the registry is constructable, so tests make their own. - Resolve origin colors from a destinations map walked once per sidebar refresh instead of re-scanning the session mirrors for every row, which made a batch refresh O(N²). The map is derived fresh each pass and carried on the render context (the same shape the context already uses for its other row lookups); it is not cached, because `mirroredWorkspaceId` follows a weak workspace reference and an index kept next to `sessionMirrors` would survive a workspace close without the dictionary changing. - Compare the stable hash through locals in the determinism test so SwiftLint stops flagging identical operands. --- Sources/ContentView.swift | 47 +++++++++++++++----- Sources/RemoteHostColorRegistry.swift | 6 --- Sources/RemoteTmuxController.swift | 16 +++++++ cmuxTests/RemoteHostColorRegistryTests.swift | 6 ++- 4 files changed, 55 insertions(+), 20 deletions(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 2130822da398..13707a8cc489 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -11834,6 +11834,9 @@ struct VerticalTabsSidebar: View, Equatable { let workspaceGroupMenuSnapshot: WorkspaceGroupMenuSnapshot let workspaceRenderItems: [SidebarWorkspaceRenderItem] let visibleWorkspaceRowIds: [UUID] + /// Mirror destinations for the origin-color resolve, walked once for this render + /// pass so a row doesn't rescan the session mirrors. Nil when origin colors are off. + let mirrorOriginDestinations: [UUID: String]? var workspaceIds: [UUID] { tabIds } } @@ -12021,7 +12024,8 @@ struct VerticalTabsSidebar: View, Equatable { memberWorkspaceIdsByGroupId: memberWorkspaceIdsByGroupId, workspaceGroupMenuSnapshot: workspaceGroupMenuSnapshot, workspaceRenderItems: workspaceRenderItems, - visibleWorkspaceRowIds: visibleWorkspaceRowIds + visibleWorkspaceRowIds: visibleWorkspaceRowIds, + mirrorOriginDestinations: mirrorDestinationsForOriginColors() ) let _ = SidebarProfilingSignposts.end(signpost) ZStack(alignment: .bottomLeading) { @@ -13224,7 +13228,8 @@ struct VerticalTabsSidebar: View, Equatable { return makeWorkspaceSnapshot( workspace: workspace, settings: settings, - showsAgentActivity: showsAgentActivity + showsAgentActivity: showsAgentActivity, + mirrorDestinations: mirrorDestinations ) } } @@ -13232,7 +13237,8 @@ struct VerticalTabsSidebar: View, Equatable { private func makeWorkspaceSnapshot( workspace: Workspace, settings: SidebarTabItemSettingsSnapshot, - showsAgentActivity: Bool + showsAgentActivity: Bool, + mirrorDestinations: [UUID: String]? ) -> SidebarWorkspaceSnapshotBuilder.Snapshot { #if DEBUG sidebarLazyContractProbe.workspaceSnapshotBuild?() @@ -13241,24 +13247,41 @@ struct VerticalTabsSidebar: View, Equatable { workspace: workspace, settings: settings, showsAgentActivity: showsAgentActivity, - originColorHex: originColorHex(for: workspace) + originColorHex: originColorHex(for: workspace, mirrorDestinations: mirrorDestinations) ).makeSnapshot() } /// Per-host origin color (beta), resolved here — above the row boundary — to - /// a plain value. Mirror workspaces carry their host only through the session - /// mirror, so fall back to the controller lookup when there's no - /// remoteConfiguration. Nil when the flag is off or the workspace has no host. - private func originColorHex(for workspace: Workspace) -> String? { + /// a plain value. Nil when the flag is off or the workspace has no host. + /// + /// Mirror workspaces carry their host only through the session mirror. A batch + /// refresh passes `mirrorDestinations` so the mirrors are walked once for the whole + /// batch instead of once per row; a single row passes nil and takes the direct lookup. + private func originColorHex( + for workspace: Workspace, + mirrorDestinations: [UUID: String]? + ) -> String? { guard remoteTmuxOriginColorsEnabled else { return nil } - let destination = workspace.remoteConfiguration?.destination - ?? (workspace.isRemoteTmuxMirror - ? AppDelegate.shared?.remoteTmuxController.hostDestination(forWorkspaceId: workspace.id) - : nil) + var destination = workspace.remoteConfiguration?.destination + if destination == nil, workspace.isRemoteTmuxMirror { + if let mirrorDestinations { + destination = mirrorDestinations[workspace.id] + } else { + destination = AppDelegate.shared?.remoteTmuxController + .hostDestination(forWorkspaceId: workspace.id) + } + } guard let destination, !destination.isEmpty else { return nil } return AppDelegate.shared?.remoteTmuxController.hostColorRegistry.colorHex(for: destination) } + /// The mirror destinations a batch snapshot refresh needs, or nil when origin colors + /// are off (then no row resolves a destination and the walk would be wasted). + private func mirrorDestinationsForOriginColors() -> [UUID: String]? { + guard remoteTmuxOriginColorsEnabled else { return nil } + return AppDelegate.shared?.remoteTmuxController.hostDestinationsByWorkspaceId() ?? [:] + } + private func clearExtensionSidebarObservationPublishers() { extensionSidebarObservationWorkspaceIds = [] extensionSidebarObservationPublishersBuilt = false diff --git a/Sources/RemoteHostColorRegistry.swift b/Sources/RemoteHostColorRegistry.swift index 633cec6e19a9..5f4284c5f987 100644 --- a/Sources/RemoteHostColorRegistry.swift +++ b/Sources/RemoteHostColorRegistry.swift @@ -82,12 +82,6 @@ final class RemoteHostColorRegistry { return WorkspaceTabColorSettings.currentColorHex(named: entry.name) ?? entry.hex } - /// Clears all assignments. For tests. - func reset() { - slotByHost.removeAll() - hostBySlot.removeAll() - } - /// Stable FNV-1a/64 hash of a string — deterministic across processes (unlike /// `Hasher`), so a host's starting color doesn't change between app launches. static func stableHash(_ string: String) -> UInt64 { diff --git a/Sources/RemoteTmuxController.swift b/Sources/RemoteTmuxController.swift index af7976447b36..000b92dd4021 100644 --- a/Sources/RemoteTmuxController.swift +++ b/Sources/RemoteTmuxController.swift @@ -393,6 +393,22 @@ final class RemoteTmuxController { sessionMirrors.values.first(where: { $0.mirroredWorkspaceId == workspaceId })?.host.destination } + /// Every mirrored workspace's destination, in one pass. A sidebar refresh resolves + /// colors for many rows at once; calling ``hostDestination(forWorkspaceId:)`` per row + /// re-scans the mirrors each time and makes the batch O(N²). Derived fresh per call + /// rather than cached: ``RemoteTmuxSessionMirror/mirroredWorkspaceId`` follows a weak + /// workspace reference, so an index kept alongside `sessionMirrors` would still be + /// stale after a workspace closes without the dictionary itself changing. + func hostDestinationsByWorkspaceId() -> [UUID: String] { + var destinations: [UUID: String] = [:] + destinations.reserveCapacity(sessionMirrors.count) + for mirror in sessionMirrors.values { + guard let workspaceId = mirror.mirroredWorkspaceId else { continue } + destinations[workspaceId] = mirror.host.destination + } + return destinations + } + /// A mirrored workspace was renamed → `rename-session` on the remote so the /// tmux session name tracks the cmux workspace title. func handleMirrorWorkspaceRenamed(workspaceId: UUID, title: String?) { diff --git a/cmuxTests/RemoteHostColorRegistryTests.swift b/cmuxTests/RemoteHostColorRegistryTests.swift index 7daa915a59b6..9fc57ea57ce5 100644 --- a/cmuxTests/RemoteHostColorRegistryTests.swift +++ b/cmuxTests/RemoteHostColorRegistryTests.swift @@ -18,8 +18,10 @@ import Testing @Test func stableHashIsDeterministic() { // Not Swift's per-process randomized Hasher: equal inputs → equal output, // and it varies by input. - #expect(RemoteHostColorRegistry.stableHash("cmux-srvA") == RemoteHostColorRegistry.stableHash("cmux-srvA")) - #expect(RemoteHostColorRegistry.stableHash("cmux-srvA") != RemoteHostColorRegistry.stableHash("cmux-srvB")) + let first = RemoteHostColorRegistry.stableHash("cmux-srvA") + let second = RemoteHostColorRegistry.stableHash("cmux-srvA") + #expect(first == second) + #expect(first != RemoteHostColorRegistry.stableHash("cmux-srvB")) } @Test func sameHostAlwaysGetsTheSameSlot() { From ffb345f088a718e2efd2537e5a4618958e270094 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Wed, 22 Jul 2026 00:09:48 -0700 Subject: [PATCH 08/26] remote-tmux: drop the origin-color lookup no caller can reach MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review flagged the else branch in originColorHex as dead, and it is. Every caller resolves mirrorDestinations from mirrorDestinationsForOriginColors(), which returns nil only when remoteTmuxOriginColorsEnabled is false — and originColorHex guards on that same flag before it ever reads the map. The three makeWorkspaceSnapshot call sites and the direct row lookup all pass that value, so by the time the branch could run, the map is never nil. The docstring claimed a single row passes nil and takes a direct hostDestination(forWorkspaceId:) lookup. No caller does that. Removed the branch and rewrote the comment to describe what actually happens. --- Sources/ContentView.swift | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 13707a8cc489..18613f3fd818 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -13254,9 +13254,11 @@ struct VerticalTabsSidebar: View, Equatable { /// Per-host origin color (beta), resolved here — above the row boundary — to /// a plain value. Nil when the flag is off or the workspace has no host. /// - /// Mirror workspaces carry their host only through the session mirror. A batch - /// refresh passes `mirrorDestinations` so the mirrors are walked once for the whole - /// batch instead of once per row; a single row passes nil and takes the direct lookup. + /// Mirror workspaces carry their host only through the session mirror, so callers + /// pass `mirrorDestinations` and the mirrors get walked once for a whole refresh + /// rather than once per row. That map comes from `mirrorDestinationsForOriginColors()`, + /// which returns nil only while the flag is off — the case the guard above already + /// answers — so a mirror with no entry here simply has no host yet. private func originColorHex( for workspace: Workspace, mirrorDestinations: [UUID: String]? @@ -13264,12 +13266,7 @@ struct VerticalTabsSidebar: View, Equatable { guard remoteTmuxOriginColorsEnabled else { return nil } var destination = workspace.remoteConfiguration?.destination if destination == nil, workspace.isRemoteTmuxMirror { - if let mirrorDestinations { - destination = mirrorDestinations[workspace.id] - } else { - destination = AppDelegate.shared?.remoteTmuxController - .hostDestination(forWorkspaceId: workspace.id) - } + destination = mirrorDestinations?[workspace.id] } guard let destination, !destination.isEmpty else { return nil } return AppDelegate.shared?.remoteTmuxController.hostColorRegistry.colorHex(for: destination) From a420d4c89de15b4f14af4230cc1373b315650d8f Mon Sep 17 00:00:00 2001 From: ejc3 Date: Sat, 25 Jul 2026 00:20:47 -0700 Subject: [PATCH 09/26] tests: pass the new row-color fields in the suspension fixture main added SidebarWorkspaceRowSuspensionTests after this branch last built; its fixture calls presentationKey and Snapshot without the origin-color fields this branch adds. nil/false keeps the fixture's behavior: no manual color and no origin tint. --- cmuxTests/SidebarWorkspaceRowSuspensionTests.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmuxTests/SidebarWorkspaceRowSuspensionTests.swift b/cmuxTests/SidebarWorkspaceRowSuspensionTests.swift index ffd196846e63..43103d368bb6 100644 --- a/cmuxTests/SidebarWorkspaceRowSuspensionTests.swift +++ b/cmuxTests/SidebarWorkspaceRowSuspensionTests.swift @@ -16,13 +16,16 @@ struct SidebarWorkspaceRowSuspensionTests { SidebarWorkspaceSnapshotBuilder.Snapshot( presentationKey: SidebarWorkspaceSnapshotFactory.presentationKey( settings: SidebarTabItemSettingsSnapshot(defaults: UserDefaults(suiteName: UUID().uuidString)!), - showsAgentActivity: false + showsAgentActivity: false, + customColorHex: nil ), title: "Workspace", customDescription: customDescription, isPinned: false, isMuted: false, - customColorHex: nil, cloudWorkspaceLabel: nil, + customColorHex: nil, + hasManualCustomColor: false, + cloudWorkspaceLabel: nil, remoteWorkspaceSidebarText: nil, remoteConnectionStatusText: "", remoteStateHelpText: "", From e1cae6a5f4b69c9bfd6789e1acc0a61d872fb3af Mon Sep 17 00:00:00 2001 From: ejc3 Date: Mon, 14 Sep 2026 12:54:03 -0700 Subject: [PATCH 10/26] localization: translate the remote host colors beta setting --- Resources/Localizable.xcstrings | 126 ++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 04cd3f1bb3b3..fc595d785b72 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -579343,51 +579343,177 @@ "settings.betaFeatures.remoteTmuxOriginColors": { "extractionState": "manual", "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "ألوان المضيفين البعيدين" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Farben für Remote-Hosts" + } + }, "en": { "stringUnit": { "state": "translated", "value": "Remote host colors" } }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Colores de hosts remotos" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleurs des hôtes distants" + } + }, "ja": { "stringUnit": { "state": "translated", "value": "リモートホストの色" } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "원격 호스트 색상" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "远程主机颜色" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "遠端主機顏色" + } } } }, "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff": { "extractionState": "manual", "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تبقى مساحات العمل البعيدة بلا لون للمصدر حتى تفعّل هذا الخيار هنا." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Arbeitsbereiche erhalten keine Herkunftsfarbe, bis du diese Option hier aktivierst." + } + }, "en": { "stringUnit": { "state": "translated", "value": "Leaves remote workspaces without an origin color until you enable it here." } }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Los espacios de trabajo remotos no tienen color de origen hasta que lo actives aquí." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les espaces de travail distants restent sans couleur d’origine tant que vous ne l’activez pas ici." + } + }, "ja": { "stringUnit": { "state": "translated", "value": "ここで有効にするまで、リモートワークスペースにオリジンカラーを表示しません。" } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "여기에서 활성화하기 전까지 원격 작업 공간에는 출처 색상이 표시되지 않습니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在此处启用之前,远程工作区不会显示来源颜色。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在此處啟用之前,遠端工作區不會顯示來源顏色。" + } } } }, "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn": { "extractionState": "manual", "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "يُلوّن صف كل مساحة عمل بعيدة في الشريط الجانبي وعلامة تبويبها بلون ثابت خاص بكل مضيف لتسهيل التمييز بين الخوادم. يبقى اللون الذي تختاره يدويًا لمساحة العمل هو المُعتمد دائمًا." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Färbt die Seitenleistenzeile und den Tab jedes Remote-Arbeitsbereichs mit einer festen Farbe pro Host, damit sich Server leicht unterscheiden lassen. Eine manuell gewählte Arbeitsbereichsfarbe hat immer Vorrang." + } + }, "en": { "stringUnit": { "state": "translated", "value": "Tints each remote workspace's sidebar row and tab with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." } }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Tiñe la fila de la barra lateral y la pestaña de cada espacio de trabajo remoto con un color estable por host para distinguir fácilmente los servidores. El color que asignes manualmente al espacio de trabajo siempre tiene prioridad." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Teinte la ligne de la barre latérale et l’onglet de chaque espace de travail distant avec une couleur stable par hôte, pour distinguer facilement les serveurs. La couleur choisie manuellement pour un espace de travail l’emporte toujours." + } + }, "ja": { "stringUnit": { "state": "translated", "value": "各リモートワークスペースのサイドバー行とタブを、ホストごとに固定された色で色付けし、サーバーを見分けやすくします。手動で設定したワークスペースの色が常に優先されます。" } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "각 원격 작업 공간의 사이드바 행과 탭에 호스트별 고정 색상을 입혀 서버를 쉽게 구분할 수 있습니다. 직접 지정한 작업 공간 색상이 항상 우선합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "为每个远程工作区的侧边栏行和标签页添加按主机固定的颜色,便于区分服务器。你手动设置的工作区颜色始终优先。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "為每個遠端工作區的側邊欄列和分頁加上依主機固定的顏色,方便區分伺服器。你手動設定的工作區顏色一律優先。" + } } } } From 4e89582865919598c1e18da9ecb852b264b60196 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Tue, 15 Sep 2026 20:31:28 -0700 Subject: [PATCH 11/26] remote-tmux: name the host after a workspace title another workspace shares (beta) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Connecting two servers that each have a tmux session named main gives two sidebar rows that both read "main", and nothing on the row says which server is which. With the new "Remote host names on duplicate titles" beta on, a row whose title another workspace shares shows its remote host after the title, for example "main · web1.us-east" beside "main · web2.eu-west". A group of same-titled workspaces gets hosts only when its members come from more than one place: two hosts, or a host and this Mac. The host drops any user@ and the trailing domain labels every host in the group shares, but never its first label, and the row truncates the end, so as much of the host shows as fits. IP addresses keep every label, a remote workspace beside a local one with the same title shows its whole host, and managed Cloud VMs, which share one gateway destination, show their VM id. Whether a title collides depends on every other title, so ContentView resolves the hosts once over the whole workspace list and hands each row its host as a plain value, like the origin color. The host is part of the row's presentation key, the context-menu refresh carries it with the title, and a single-workspace refresh also rebuilds any other row whose saved host no longer matches, since a rename can start or end a collision. Only the displayed title changes: renaming, checklist titles and the tmux session name keep using the real title. --- .../Keys/BetaFeaturesCatalogSection.swift | 9 + .../CuratedSettingEntry+Default.swift | 1 + .../Sections/BetaFeaturesSection.swift | 22 ++ .../SettingsRowAnchorResolutionTests.swift | 1 + Resources/Localizable.xcstrings | 236 ++++++++++++++++++ Sources/ContentView.swift | 65 +++-- Sources/RemoteHostTitleSuffixes.swift | 90 +++++++ .../Cells/SidebarWorkspaceRowCellView.swift | 2 +- ...idebarWorkspaceSnapshotRefreshPolicy.swift | 8 +- Sources/SidebarWorkspaceSnapshotBuilder.swift | 17 +- Sources/SidebarWorkspaceSnapshotFactory.swift | 15 +- cmux.xcodeproj/project.pbxproj | 8 + cmuxTests/RemoteHostTitleSuffixesTests.swift | 141 +++++++++++ scripts/localization-allowed-omissions.json | 4 + 14 files changed, 596 insertions(+), 23 deletions(-) create mode 100644 Sources/RemoteHostTitleSuffixes.swift create mode 100644 cmuxTests/RemoteHostTitleSuffixesTests.swift diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift index b9e0e990724d..2fffc1c3f2a1 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift @@ -111,5 +111,14 @@ public struct BetaFeaturesCatalogSection: SettingCatalogSection { userDefaultsKey: "remoteTmux.originColors.beta.enabled" ) + /// Remote host names on duplicate titles: when sidebar workspaces share a title and come from + /// different places, show each remote one's host after its title, leaving off the domain the + /// hosts share. Defaults off; while off, titles show as they are. + public let remoteTmuxOriginHostTitles = DefaultsKey( + id: "remoteTmux.originHostTitles.beta.enabled", + defaultValue: false, + userDefaultsKey: "remoteTmux.originHostTitles.beta.enabled" + ) + public init() {} } diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift index 219aeabd1e25..559e62d34e5e 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift @@ -405,6 +405,7 @@ extension Array where Element == CuratedSettingEntry { .init(section: .betaFeatures, id: "predictedEcho", title: String(localized: "settings.betaFeatures.predictedEcho", defaultValue: "Predictive local echo"), synonyms: "Predictive local echo typing latency lag ssh remote speculative mosh round trip beta unstable"), .init(section: .betaFeatures, id: "remoteTmux", title: String(localized: "settings.betaFeatures.remoteTmux", defaultValue: "Remote tmux"), synonyms: "Remote tmux remote tmux ssh control mode -CC mirror session window pane sidebar workspace beta unstable"), .init(section: .betaFeatures, id: "remoteTmuxOriginColors", title: String(localized: "settings.betaFeatures.remoteTmuxOriginColors", defaultValue: "Remote host colors"), synonyms: "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable"), + .init(section: .betaFeatures, id: "remoteTmuxOriginHostTitles", title: String(localized: "settings.betaFeatures.remoteTmuxOriginHostTitles", defaultValue: "Remote host names on duplicate titles"), synonyms: "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable"), .init( section: .betaFeatures, id: "workspace-todo-controls", diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift index 515f9543b140..0bafeeaea03c 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift @@ -13,6 +13,7 @@ public struct BetaFeaturesSection: View { @State private var remoteTmux: DefaultsValueModel @State private var predictedEcho: DefaultsValueModel @State private var remoteTmuxOriginColors: DefaultsValueModel + @State private var remoteTmuxOriginHostTitles: DefaultsValueModel @State private var workspaceTodoControls: DefaultsValueModel @State private var workspaceTodosChecklistStyle: DefaultsValueModel /// `DisableCloud` (MDM). The opt-in is meaningless while an administrator @@ -31,6 +32,7 @@ public struct BetaFeaturesSection: View { _remoteTmux = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.remoteTmux)) _predictedEcho = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.predictedEcho)) _remoteTmuxOriginColors = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.remoteTmuxOriginColors)) + _remoteTmuxOriginHostTitles = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.remoteTmuxOriginHostTitles)) _workspaceTodoControls = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.workspaceTodoControls)) _workspaceTodosChecklistStyle = State(initialValue: DefaultsValueModel(store: defaultsStore, key: catalog.betaFeatures.workspaceTodosChecklistStyle)) } @@ -57,6 +59,8 @@ public struct BetaFeaturesSection: View { SettingsCardDivider() remoteTmuxOriginColorsRow SettingsCardDivider() + remoteTmuxOriginHostTitlesRow + SettingsCardDivider() workspaceTodoControlsRow SettingsCardDivider() workspaceTodosChecklistStyleRow @@ -81,6 +85,7 @@ public struct BetaFeaturesSection: View { remoteTmux, predictedEcho, remoteTmuxOriginColors, + remoteTmuxOriginHostTitles, workspaceTodoControls, workspaceTodosChecklistStyle, ] @@ -238,6 +243,23 @@ public struct BetaFeaturesSection: View { .accessibilityIdentifier("SettingsBetaRemoteTmuxOriginColorsToggle") } } + + @ViewBuilder + private var remoteTmuxOriginHostTitlesRow: some View { + SettingsCardRow( + configurationReview: .settingsOnly, + searchAnchorID: "setting:betaFeatures:remoteTmuxOriginHostTitles", + String(localized: "settings.betaFeatures.remoteTmuxOriginHostTitles", defaultValue: "Remote host names on duplicate titles"), + subtitle: remoteTmuxOriginHostTitles.current + ? String(localized: "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOn", defaultValue: "When workspaces share a title, shows each remote one's host after the title, leaving off the domain the hosts share.") + : String(localized: "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOff", defaultValue: "Leaves duplicate workspace titles as they are until you enable it here.") + ) { + Toggle("", isOn: Binding(get: { remoteTmuxOriginHostTitles.current }, set: { remoteTmuxOriginHostTitles.set($0) })) + .labelsHidden() + .controlSize(.small) + .accessibilityIdentifier("SettingsBetaRemoteTmuxOriginHostTitlesToggle") + } + } } /// Small warning callout with a yellow triangle, used at the top of diff --git a/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift b/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift index 27c7ef175ad1..80cec4c8fec0 100644 --- a/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift +++ b/Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift @@ -193,6 +193,7 @@ struct SettingsRowAnchorResolutionTests { "setting:betaFeatures:remoteTmux", "setting:betaFeatures:predictedEcho", "setting:betaFeatures:remoteTmuxOriginColors", + "setting:betaFeatures:remoteTmuxOriginHostTitles", "setting:customSidebars:enabled", "setting:computerUse:permissions", "setting:browser:history", diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index fc595d785b72..f7e37e6a8e0e 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -579516,6 +579516,242 @@ } } } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "أسماء المضيفين البعيدين في العناوين المكررة" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Hostnamen bei doppelten Titeln" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host names on duplicate titles" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nombres de hosts remotos en títulos duplicados" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Noms des hôtes distants dans les titres en double" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "重複したタイトルにリモートホスト名を表示" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "중복된 제목에 원격 호스트 이름 표시" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在重复标题中显示远程主机名" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在重複標題中顯示遠端主機名稱" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOff": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تبقى عناوين مساحات العمل المكررة كما هي حتى تفعّل هذا الخيار هنا." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Doppelte Arbeitsbereichstitel bleiben unverändert, bis du diese Option hier aktivierst." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Leaves duplicate workspace titles as they are until you enable it here." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Los títulos duplicados de los espacios de trabajo se mantienen igual hasta que lo actives aquí." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les titres d’espaces de travail en double restent tels quels tant que vous ne l’activez pas ici." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ここで有効にするまで、重複したワークスペースのタイトルはそのまま表示されます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "여기에서 활성화하기 전까지 중복된 작업 공간 제목은 그대로 표시됩니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在此处启用之前,重复的工作区标题保持不变。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在此處啟用之前,重複的工作區標題維持不變。" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOn": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "عندما تتشارك مساحات العمل عنوانًا واحدًا، يُعرض اسم مضيف كل مساحة بعيدة بعد العنوان دون النطاق المشترك بين المضيفين." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Wenn Arbeitsbereiche denselben Titel haben, wird bei jedem Remote-Arbeitsbereich der Host nach dem Titel angezeigt, ohne die gemeinsame Domain der Hosts." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "When workspaces share a title, shows each remote one's host after the title, leaving off the domain the hosts share." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cuando varios espacios de trabajo comparten título, muestra el host de cada espacio remoto después del título, sin el dominio que comparten los hosts." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Lorsque des espaces de travail portent le même titre, affiche l’hôte de chaque espace distant après le titre, sans le domaine que les hôtes partagent." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースのタイトルが重複している場合、各リモートワークスペースのタイトルの後にホスト名を表示します。ホストに共通するドメインは省略します。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "작업 공간의 제목이 같으면 각 원격 작업 공간의 제목 뒤에 호스트 이름을 표시하며, 호스트에 공통된 도메인은 생략합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "当多个工作区标题相同时,在每个远程工作区的标题后显示主机名,并省略这些主机共有的域名。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "當多個工作區標題相同時,在每個遠端工作區的標題後顯示主機名稱,並省略這些主機共用的網域。" + } + } + } + }, + "sidebar.workspace.titleWithHost": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + } + } } }, "version": "1.0" diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 18613f3fd818..a8a2f951e6f4 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -11542,6 +11542,8 @@ struct VerticalTabsSidebar: View, Equatable { // Per-host origin colors (beta). Read here so toggling the flag re-evaluates // the sidebar and rebuilds each row's snapshot with the resolved color. @LiveSetting(\.betaFeatures.remoteTmuxOriginColors) private var remoteTmuxOriginColorsEnabled + // Names the remote host after a workspace title another workspace shares (beta). + @LiveSetting(\.betaFeatures.remoteTmuxOriginHostTitles) private var remoteTmuxOriginHostTitlesEnabled #if DEBUG @Environment(\.minimalModeInvalidationProbe) private var minimalModeInvalidationProbe @Environment(\.sidebarLazyContractProbe) private var sidebarLazyContractProbe @@ -11837,6 +11839,8 @@ struct VerticalTabsSidebar: View, Equatable { /// Mirror destinations for the origin-color resolve, walked once for this render /// pass so a row doesn't rescan the session mirrors. Nil when origin colors are off. let mirrorOriginDestinations: [UUID: String]? + /// Hosts named after colliding titles for this render pass (beta), keyed by workspace id. + let hostTitleSuffixes: [UUID: String] var workspaceIds: [UUID] { tabIds } } @@ -11999,6 +12003,7 @@ struct VerticalTabsSidebar: View, Equatable { displayAccessibility: sidebarDisplayAccessibility ) #endif + let mirrorOriginDestinations = mirrorDestinationsForOriginPresentation() let renderContext = WorkspaceListRenderContext( environment: tableEnvironment, tabs: tabs, @@ -12025,7 +12030,8 @@ struct VerticalTabsSidebar: View, Equatable { workspaceGroupMenuSnapshot: workspaceGroupMenuSnapshot, workspaceRenderItems: workspaceRenderItems, visibleWorkspaceRowIds: visibleWorkspaceRowIds, - mirrorOriginDestinations: mirrorDestinationsForOriginColors() + mirrorOriginDestinations: mirrorOriginDestinations, + hostTitleSuffixes: hostTitleSuffixes(tabs: tabs, mirrorDestinations: mirrorOriginDestinations) ) let _ = SidebarProfilingSignposts.end(signpost) ZStack(alignment: .bottomLeading) { @@ -12206,6 +12212,10 @@ struct VerticalTabsSidebar: View, Equatable { // snapshot on each evaluation. refreshWorkspaceSnapshots() } + .onChange(of: remoteTmuxOriginHostTitlesEnabled) { _, _ in + // The host after a colliding title is part of each snapshot's presentation key too. + refreshWorkspaceSnapshots() + } .onDisappear { workspaceSnapshotRefreshCoalescer.cancel() } @@ -13229,7 +13239,8 @@ struct VerticalTabsSidebar: View, Equatable { workspace: workspace, settings: settings, showsAgentActivity: showsAgentActivity, - mirrorDestinations: mirrorDestinations + mirrorDestinations: mirrorDestinations, + hostTitleSuffixes: hostTitleSuffixes ) } } @@ -13238,7 +13249,8 @@ struct VerticalTabsSidebar: View, Equatable { workspace: Workspace, settings: SidebarTabItemSettingsSnapshot, showsAgentActivity: Bool, - mirrorDestinations: [UUID: String]? + mirrorDestinations: [UUID: String]?, + hostTitleSuffixes: [UUID: String] ) -> SidebarWorkspaceSnapshotBuilder.Snapshot { #if DEBUG sidebarLazyContractProbe.workspaceSnapshotBuild?() @@ -13247,7 +13259,8 @@ struct VerticalTabsSidebar: View, Equatable { workspace: workspace, settings: settings, showsAgentActivity: showsAgentActivity, - originColorHex: originColorHex(for: workspace, mirrorDestinations: mirrorDestinations) + originColorHex: originColorHex(for: workspace, mirrorDestinations: mirrorDestinations), + hostTitleSuffix: hostTitleSuffixes[workspace.id] ).makeSnapshot() } @@ -13256,26 +13269,48 @@ struct VerticalTabsSidebar: View, Equatable { /// /// Mirror workspaces carry their host only through the session mirror, so callers /// pass `mirrorDestinations` and the mirrors get walked once for a whole refresh - /// rather than once per row. That map comes from `mirrorDestinationsForOriginColors()`, - /// which returns nil only while the flag is off — the case the guard above already - /// answers — so a mirror with no entry here simply has no host yet. + /// rather than once per row. That map comes from `mirrorDestinationsForOriginPresentation()`. private func originColorHex( for workspace: Workspace, mirrorDestinations: [UUID: String]? ) -> String? { - guard remoteTmuxOriginColorsEnabled else { return nil } + guard remoteTmuxOriginColorsEnabled, + let destination = originDestination(for: workspace, mirrorDestinations: mirrorDestinations) + else { return nil } + return AppDelegate.shared?.remoteTmuxController.hostColorRegistry.colorHex(for: destination) + } + + /// Hosts to name after colliding workspace titles (beta), over the whole workspace list because + /// whether a title collides depends on every other title. Empty while the flag is off. + private func hostTitleSuffixes(tabs: [Workspace], mirrorDestinations: [UUID: String]?) -> [UUID: String] { + guard remoteTmuxOriginHostTitlesEnabled else { return [:] } + return RemoteHostTitleSuffixes.suffixes(for: tabs.map { workspace in + RemoteHostTitleSuffixes.Entry( + id: workspace.id, + title: workspace.title, + destination: RemoteHostTitleSuffixes.origin( + destination: originDestination(for: workspace, mirrorDestinations: mirrorDestinations), + cloudVMID: workspace.cloudVMID + ) + ) + }) + } + + /// The remote destination a workspace comes from, or nil for a local workspace or a mirror whose + /// host has not resolved yet. + private func originDestination(for workspace: Workspace, mirrorDestinations: [UUID: String]?) -> String? { var destination = workspace.remoteConfiguration?.destination if destination == nil, workspace.isRemoteTmuxMirror { destination = mirrorDestinations?[workspace.id] } guard let destination, !destination.isEmpty else { return nil } - return AppDelegate.shared?.remoteTmuxController.hostColorRegistry.colorHex(for: destination) + return destination } - /// The mirror destinations a batch snapshot refresh needs, or nil when origin colors - /// are off (then no row resolves a destination and the walk would be wasted). - private func mirrorDestinationsForOriginColors() -> [UUID: String]? { - guard remoteTmuxOriginColorsEnabled else { return nil } + /// The mirror destinations a batch snapshot refresh needs, or nil when neither origin colors nor + /// host titles are on (then no row resolves a destination and the walk would be wasted). + private func mirrorDestinationsForOriginPresentation() -> [UUID: String]? { + guard remoteTmuxOriginColorsEnabled || remoteTmuxOriginHostTitlesEnabled else { return nil } return AppDelegate.shared?.remoteTmuxController.hostDestinationsByWorkspaceId() ?? [:] } @@ -16326,7 +16361,7 @@ struct TabItemView: View, Equatable { let titleLineLimit = settings.wrapsWorkspaceTitles && workspaceSnapshot.compactStatusGlyph == nil ? Self.maxWrappedTitleLines : 1 - let displayedTitle = workspaceSnapshot.title.sidebarBoundedDisplayString( + let displayedTitle = workspaceSnapshot.displayTitle.sidebarBoundedDisplayString( maxDisplayedLines: titleLineLimit, maxDisplayedCharacters: Self.maxDisplayedTitleCharacters ) @@ -16788,7 +16823,7 @@ struct TabItemView: View, Equatable { beginInlineRename() } ) - .safeHelp(workspaceSnapshot.title) + .safeHelp(workspaceSnapshot.displayTitle) .modifier(SidebarRowAccessibilityModifier( isEditing: isEditing, label: accessibilityTitle, diff --git a/Sources/RemoteHostTitleSuffixes.swift b/Sources/RemoteHostTitleSuffixes.swift new file mode 100644 index 000000000000..1ed617b53934 --- /dev/null +++ b/Sources/RemoteHostTitleSuffixes.swift @@ -0,0 +1,90 @@ +import Foundation + +/// When sidebar workspaces share a title, names the remote host after each remote one's title so the +/// rows can be told apart. Gated by the `remoteTmux.originHostTitles.beta` flag at the call sites. +enum RemoteHostTitleSuffixes { + struct Entry: Equatable { + let id: UUID + let title: String + /// The remote destination (`user@host` or an ssh alias), or nil for a workspace on this Mac. + let destination: String? + } + + /// The host to show after each colliding remote workspace's title, keyed by workspace id. + /// + /// Workspaces collide when their titles match after trimming whitespace. A colliding group gets + /// hosts only when its members come from more than one place: two hosts, or a host and this Mac. + /// Each host drops any `user@` and the trailing domain labels every host in the group shares, but + /// never its first label, so `main` on `web1.us-east.example.com` and on + /// `web2.eu-west.example.com` read `web1.us-east` and `web2.eu-west`. IP addresses are never + /// trimmed, and a lone remote host beside a local workspace keeps its whole name. The row + /// truncates the end, so as much of the host shows as fits. + static func suffixes(for entries: [Entry]) -> [UUID: String] { + var groups: [String: [Entry]] = [:] + var order: [String] = [] + for entry in entries { + let key = entry.title.trimmingCharacters(in: .whitespacesAndNewlines) + guard !key.isEmpty else { continue } + if groups[key] == nil { order.append(key) } + groups[key, default: []].append(entry) + } + var result: [UUID: String] = [:] + for key in order { + guard let group = groups[key], group.count > 1 else { continue } + let hosts = group.map { $0.destination.flatMap(hostName) } + // nil stands for this Mac, so a local workspace counts as its own origin. + guard Set(hosts).count > 1 else { continue } + let distinctHosts = Array(Set(hosts.compactMap { $0 })) + // Trailing octets of IP addresses are not a shared domain, so an address keeps every label. + let trims = distinctHosts.count > 1 && !distinctHosts.contains(where: isIPAddress) + let shared = trims ? sharedTrailingLabelCount(distinctHosts) : 0 + for (entry, host) in zip(group, hosts) { + guard let host else { continue } + result[entry.id] = dropping(trailingLabels: shared, from: host) + } + } + return result + } + + /// The place a workspace comes from, for naming after its title. A managed Cloud VM connects + /// through one shared gateway (`+cmux@`), so the VM id is what tells two VMs + /// apart; every other remote workspace uses its destination. + static func origin(destination: String?, cloudVMID: String?) -> String? { + if let cloudVMID, !cloudVMID.isEmpty { return cloudVMID } + return destination + } + + /// Whether a host is an IPv4 or IPv6 literal rather than a name. + static func isIPAddress(_ host: String) -> Bool { + if host.contains(":") { return true } + let labels = host.split(separator: ".", omittingEmptySubsequences: false) + return labels.count == 4 && labels.allSatisfy { !$0.isEmpty && $0.allSatisfy(\.isNumber) } + } + + /// The host part of a destination: everything after the last `@`, trimmed. + static func hostName(_ destination: String) -> String? { + var host = destination.trimmingCharacters(in: .whitespacesAndNewlines) + if let at = host.lastIndex(of: "@") { + host = String(host[host.index(after: at)...]) + } + return host.isEmpty ? nil : host + } + + /// How many trailing dot-separated labels every host shares, leaving each host at least one label. + static func sharedTrailingLabelCount(_ hosts: [String]) -> Int { + let labels = hosts.map { $0.split(separator: ".", omittingEmptySubsequences: false) } + guard let first = labels.first, let shortest = labels.map(\.count).min() else { return 0 } + var count = 0 + while count < shortest - 1 { + let label = first[first.count - 1 - count] + guard labels.allSatisfy({ $0[$0.count - 1 - count] == label }) else { break } + count += 1 + } + return count + } + + private static func dropping(trailingLabels count: Int, from host: String) -> String { + guard count > 0 else { return host } + return host.split(separator: ".", omittingEmptySubsequences: false).dropLast(count).joined(separator: ".") + } +} diff --git a/Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift b/Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift index 3bb94e350dc4..cd3c09481f94 100644 --- a/Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift +++ b/Sources/Sidebar/AppKitList/Cells/SidebarWorkspaceRowCellView.swift @@ -602,7 +602,7 @@ final class SidebarWorkspaceRowTableCellView: NSTableCellView { let titleLineLimit = settings.wrapsWorkspaceTitles && snapshot.compactStatusGlyph == nil ? 8 : 1 titleView.maximumNumberOfLines = titleLineLimit titleView.lineBreakMode = titleLineLimit == 1 ? .byTruncatingTail : .byWordWrapping - let boundedTitle = snapshot.title.sidebarBoundedDisplayString( + let boundedTitle = snapshot.displayTitle.sidebarBoundedDisplayString( maxDisplayedLines: titleLineLimit, maxDisplayedCharacters: 2048 ) diff --git a/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift b/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift index 949d542c0d3c..92ea32b13249 100644 --- a/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift +++ b/Sources/Sidebar/SidebarWorkspaceSnapshotRefreshPolicy.swift @@ -22,6 +22,7 @@ extension SidebarWorkspaceSnapshotBuilder.Snapshot { let activeCodingAgentCount: Int let compactStatusGlyph: SidebarCompactStatusGlyph? let taskStatusInput: SidebarWorkspaceTaskStatusSnapshot + let hostTitleSuffix: String? } var contextMenuImmediateFields: ContextMenuImmediateFields { @@ -45,7 +46,8 @@ extension SidebarWorkspaceSnapshotBuilder.Snapshot { checklistFirstUncheckedText: checklistFirstUncheckedText, activeCodingAgentCount: activeCodingAgentCount, compactStatusGlyph: compactStatusGlyph, - taskStatusInput: taskStatusInput + taskStatusInput: taskStatusInput, + hostTitleSuffix: hostTitleSuffix ) } @@ -98,7 +100,9 @@ extension SidebarWorkspaceSnapshotBuilder.Snapshot { deviceWorkspaceLabel: snapshot.deviceWorkspaceLabel, // The status glyph is resolved against the spinner state, so it // updates with the spinner while the menu is open. - compactStatusGlyph: snapshot.compactStatusGlyph + compactStatusGlyph: snapshot.compactStatusGlyph, + // The host after a colliding title is part of the title the row shows, so it updates with it. + hostTitleSuffix: snapshot.hostTitleSuffix ) } } diff --git a/Sources/SidebarWorkspaceSnapshotBuilder.swift b/Sources/SidebarWorkspaceSnapshotBuilder.swift index 03f4d1563dd7..7b04d6eb702e 100644 --- a/Sources/SidebarWorkspaceSnapshotBuilder.swift +++ b/Sources/SidebarWorkspaceSnapshotBuilder.swift @@ -19,6 +19,9 @@ struct SidebarWorkspaceSnapshotBuilder { // neither of which is a Workspace @Published change that would otherwise // refresh the snapshot. let customColorHex: String? + // Host named after a colliding title (beta). Part of the key because it depends on the other + // workspaces' titles, so a rename elsewhere must rebuild this row's cached snapshot. + var hostTitleSuffix: String? = nil } struct VerticalBranchDirectoryLine: Equatable { @@ -94,10 +97,22 @@ struct SidebarWorkspaceSnapshotBuilder { var remoteWorkspaceBadgeLabel: String? { deviceWorkspaceLabel ?? cloudWorkspaceLabel } var remoteWorkspaceBadgeSymbol: String { deviceWorkspaceLabel == nil ? "cloud" : "desktopcomputer" } + /// Remote host named after the title when another workspace shares it (beta), else nil. + var hostTitleSuffix: String? = nil + + /// The title as the row shows it. Renaming and other title affordances keep using `title`. + var displayTitle: String { + guard let hostTitleSuffix else { return title } + return String( + localized: "sidebar.workspace.titleWithHost", + defaultValue: "\(title) · \(hostTitleSuffix)" + ) + } + func accessibilityLabel(index: Int, workspaceCount: Int) -> String { let position = String( localized: "accessibility.workspacePosition", - defaultValue: "\(title), workspace \(index + 1) of \(workspaceCount)" + defaultValue: "\(displayTitle), workspace \(index + 1) of \(workspaceCount)" ) let cloudDirectory = cloudWorkspaceLabel == nil ? nil : (compactDirectoryCandidates.first ?? branchDirectoryLines.first?.directory) diff --git a/Sources/SidebarWorkspaceSnapshotFactory.swift b/Sources/SidebarWorkspaceSnapshotFactory.swift index 028590f51791..9eaf0fa21337 100644 --- a/Sources/SidebarWorkspaceSnapshotFactory.swift +++ b/Sources/SidebarWorkspaceSnapshotFactory.swift @@ -19,6 +19,9 @@ struct SidebarWorkspaceSnapshotFactory { /// the workspace has no host. Resolved by the caller above the row boundary /// and passed in as a plain value; a manual `workspace.customColor` still wins. var originColorHex: String? = nil + /// Remote host to name after the title because another workspace shares it (beta), else nil. + /// Resolved by the caller over the whole workspace list, since it depends on the other titles. + var hostTitleSuffix: String? = nil /// Creates the current immutable presentation snapshot for the workspace row. func makeSnapshot() -> SidebarWorkspaceSnapshotBuilder.Snapshot { @@ -149,7 +152,8 @@ struct SidebarWorkspaceSnapshotFactory { checklistFirstUncheckedText: checklistProgress.firstUncheckedText, taskStatusInput: taskStatusInput, deviceWorkspaceLabel: cloud?.deviceLabel, - compactStatusGlyph: compactStatusGlyph + compactStatusGlyph: compactStatusGlyph, + hostTitleSuffix: hostTitleSuffix ) } @@ -157,14 +161,16 @@ struct SidebarWorkspaceSnapshotFactory { Self.presentationKey( settings: settings, showsAgentActivity: showsAgentActivity, - customColorHex: workspace.customColor ?? originColorHex + customColorHex: workspace.customColor ?? originColorHex, + hostTitleSuffix: hostTitleSuffix ) } static func presentationKey( settings: SidebarTabItemSettingsSnapshot, showsAgentActivity: Bool, - customColorHex: String? + customColorHex: String?, + hostTitleSuffix: String? = nil ) -> SidebarWorkspaceSnapshotBuilder.PresentationKey { SidebarWorkspaceSnapshotBuilder.PresentationKey( showsWorkspaceDescription: settings.showsWorkspaceDescription, @@ -175,7 +181,8 @@ struct SidebarWorkspaceSnapshotFactory { compactsAgentStatus: settings.compactsAgentStatus, compactStatusIcons: settings.compactStatusIcons, visibleAuxiliaryDetails: settings.visibleAuxiliaryDetails, - customColorHex: customColorHex + customColorHex: customColorHex, + hostTitleSuffix: hostTitleSuffix ) } diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index f9e6243f10ba..e48684f58dac 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -2614,6 +2614,8 @@ CFSF00000000000000000007 /* RemoteFileExplorerProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFSR00000000000000000007 /* RemoteFileExplorerProvider.swift */; }; EB6AD4FF8F735E03B4D232BB /* RemoteHostColorRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1587427C0041C5F99CA5858 /* RemoteHostColorRegistry.swift */; }; C3004DE34CF0987FF3C4C4AE /* RemoteHostColorRegistryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0B62418BDA4E8CC349B91 /* RemoteHostColorRegistryTests.swift */; }; + 31F859C3ED241087545673E5 /* RemoteHostTitleSuffixes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B00D60543FED12E7E67E33 /* RemoteHostTitleSuffixes.swift */; }; + BF66BFF667A04A8A5F2A5A7B /* RemoteHostTitleSuffixesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDDD435A165BE812C44956E /* RemoteHostTitleSuffixesTests.swift */; }; 835000000000000000000001 /* RemoteInitialCommandBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835000000000000000000003 /* RemoteInitialCommandBootstrap.swift */; }; 835000000000000000000002 /* RemoteInitialCommandBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835000000000000000000003 /* RemoteInitialCommandBootstrap.swift */; }; 835000000000000000000006 /* RemoteInitialCommandBootstrapFailureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835000000000000000000007 /* RemoteInitialCommandBootstrapFailureTests.swift */; }; @@ -6726,6 +6728,8 @@ CFSR00000000000000000007 /* RemoteFileExplorerProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteFileExplorerProvider.swift; sourceTree = ""; }; E1587427C0041C5F99CA5858 /* RemoteHostColorRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteHostColorRegistry.swift; sourceTree = ""; }; 0BC0B62418BDA4E8CC349B91 /* RemoteHostColorRegistryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteHostColorRegistryTests.swift; sourceTree = ""; }; + 01B00D60543FED12E7E67E33 /* RemoteHostTitleSuffixes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteHostTitleSuffixes.swift; sourceTree = ""; }; + 9CDDD435A165BE812C44956E /* RemoteHostTitleSuffixesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteHostTitleSuffixesTests.swift; sourceTree = ""; }; 835000000000000000000003 /* RemoteInitialCommandBootstrap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteInitialCommandBootstrap.swift; sourceTree = ""; }; 835000000000000000000007 /* RemoteInitialCommandBootstrapFailureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteInitialCommandBootstrapFailureTests.swift; sourceTree = ""; }; 835000000000000000000005 /* RemoteInitialCommandBootstrapTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteInitialCommandBootstrapTests.swift; sourceTree = ""; }; @@ -10816,6 +10820,7 @@ 71D411EFBE33FE85901B9E6A /* RemoteTmuxCommandResult.swift */, 02B8A9858C9804AC9C37D7B4 /* RemoteTmuxHost.swift */, E1587427C0041C5F99CA5858 /* RemoteHostColorRegistry.swift */, + 01B00D60543FED12E7E67E33 /* RemoteHostTitleSuffixes.swift */, 0A17C0DE0A17C0DE0A17C001 /* RemoteTmuxAttachOutcome.swift */, 0A17C0DE0A17C0DE0A17C901 /* RemoteTmuxVersion.swift */, 92CA6F2F239631988B2FB0C8 /* WorkspaceRemoteTmuxNonInteractiveCloseRoute.swift */, @@ -12134,6 +12139,7 @@ FA00C0DE0002BEEF0002CAFE /* RemoteTmuxWindowRegistryTests.swift */, 0A17C0DE0A17C0DE0A17C003 /* RemoteTmuxAuthTests.swift */, 0BC0B62418BDA4E8CC349B91 /* RemoteHostColorRegistryTests.swift */, + 9CDDD435A165BE812C44956E /* RemoteHostTitleSuffixesTests.swift */, 7020C0DE7020C0DE7020A001 /* RemoteTmuxProxyTransportRetryTests.swift */, 6732BEEF6732BEEF6732B001 /* RemoteTmuxMasterReadinessTests.swift */, 7368BEEF7368BEEF7368B001 /* RemoteTmuxMissingTmuxTests.swift */, @@ -14697,6 +14703,7 @@ E30780000000000000000016 /* RemoteDropUploadError+LocalizedError.swift in Sources */, CFSF00000000000000000007 /* RemoteFileExplorerProvider.swift in Sources */, EB6AD4FF8F735E03B4D232BB /* RemoteHostColorRegistry.swift in Sources */, + 31F859C3ED241087545673E5 /* RemoteHostTitleSuffixes.swift in Sources */, 835000000000000000000001 /* RemoteInitialCommandBootstrap.swift in Sources */, D7AB12048000000000000003 /* RemoteInteractiveShellBootstrapBuilder+WorkingDirectory.swift in Sources */, A5001643 /* RemoteInteractiveShellBootstrapBuilder.swift in Sources */, @@ -16908,6 +16915,7 @@ 63A6792ED28244D28F5E9A83 /* RemoteClaudeTeamsRespawnRoutingTests.swift in Sources */, 791100030000000000000001 /* RemoteDisconnectLifecycleTests.swift in Sources */, C3004DE34CF0987FF3C4C4AE /* RemoteHostColorRegistryTests.swift in Sources */, + BF66BFF667A04A8A5F2A5A7B /* RemoteHostTitleSuffixesTests.swift in Sources */, 835000000000000000000006 /* RemoteInitialCommandBootstrapFailureTests.swift in Sources */, 835000000000000000000004 /* RemoteInitialCommandBootstrapTests.swift in Sources */, B11049000000000000000003 /* RemoteRelayTmuxCompatAuthorizationTests.swift in Sources */, diff --git a/cmuxTests/RemoteHostTitleSuffixesTests.swift b/cmuxTests/RemoteHostTitleSuffixesTests.swift new file mode 100644 index 000000000000..ed94ce1cd332 --- /dev/null +++ b/cmuxTests/RemoteHostTitleSuffixesTests.swift @@ -0,0 +1,141 @@ +import Foundation +import Testing + +#if canImport(cmux_DEV) +@testable import cmux_DEV +#elseif canImport(cmux) +@testable import cmux +#endif + +/// Coverage for naming the host after a colliding workspace title: which rows get a host, how much of +/// the host they show, and that the sidebar snapshot carries and displays it. +@MainActor +@Suite struct RemoteHostTitleSuffixesTests { + private func entry(_ title: String, _ destination: String?) -> RemoteHostTitleSuffixes.Entry { + RemoteHostTitleSuffixes.Entry(id: UUID(), title: title, destination: destination) + } + + @Test func twoHostsWithTheSameTitleShowWhatTellsThemApart() { + let a = entry("main", "user@web1.us-east.example.com") + let b = entry("main", "user@web2.eu-west.example.com") + let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + #expect(suffixes[a.id] == "web1.us-east") + #expect(suffixes[b.id] == "web2.eu-west") + } + + @Test func aRemoteWorkspaceBesideALocalOneShowsItsWholeHost() { + let local = entry("main", nil) + let remote = entry("main", "user@box.example.com") + let suffixes = RemoteHostTitleSuffixes.suffixes(for: [local, remote]) + #expect(suffixes[local.id] == nil) + #expect(suffixes[remote.id] == "box.example.com") + } + + @Test func titlesThatDoNotCollideGetNoHost() { + let a = entry("main", "a.example.com") + let b = entry("work", "b.example.com") + #expect(RemoteHostTitleSuffixes.suffixes(for: [a, b]).isEmpty) + } + + @Test func workspacesOnOneHostGetNoHost() { + // The host would not tell them apart, whichever user each one connects as. + let a = entry("main", "user@box.example.com") + let b = entry("main", "root@box.example.com") + #expect(RemoteHostTitleSuffixes.suffixes(for: [a, b]).isEmpty) + } + + @Test func aHostIsNeverTrimmedAway() { + // Every label of example.com also ends box.example.com, so only the keep-one-label rule + // stops the trim from emptying it. + let a = entry("main", "example.com") + let b = entry("main", "user@box.example.com") + let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + #expect(suffixes[a.id] == "example") + #expect(suffixes[b.id] == "box.example") + + let bare = entry("main", "com") + let named = entry("main", "box.example.com") + let short = RemoteHostTitleSuffixes.suffixes(for: [bare, named]) + #expect(short[bare.id] == "com") + #expect(short[named.id] == "box.example.com") + } + + @Test func ipAddressesKeepEveryLabel() { + let a = entry("main", "user@192.168.1.20") + let b = entry("main", "user@192.168.2.20") + let v4 = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + #expect(v4[a.id] == "192.168.1.20") + #expect(v4[b.id] == "192.168.2.20") + + let c = entry("main", "::ffff:192.168.1.10") + let d = entry("main", "::ffff:192.168.2.10") + let mapped = RemoteHostTitleSuffixes.suffixes(for: [c, d]) + #expect(mapped[c.id] == "::ffff:192.168.1.10") + #expect(mapped[d.id] == "::ffff:192.168.2.10") + } + + @Test func cloudVMsAreToldApartByTheirVMId() { + // Managed Cloud VMs share one gateway destination, so its host would name them all the same. + let gateway = "vm-a+cmux@vm-ssh.example.com" + #expect(RemoteHostTitleSuffixes.origin(destination: gateway, cloudVMID: "vm-a") == "vm-a") + #expect(RemoteHostTitleSuffixes.origin(destination: "user@box.example.com", cloudVMID: nil) == "user@box.example.com") + #expect(RemoteHostTitleSuffixes.origin(destination: nil, cloudVMID: nil) == nil) + let a = entry("main", RemoteHostTitleSuffixes.origin(destination: "vm-a+cmux@vm-ssh.example.com", cloudVMID: "vm-a")) + let b = entry("main", RemoteHostTitleSuffixes.origin(destination: "vm-b+cmux@vm-ssh.example.com", cloudVMID: "vm-b")) + let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + #expect(suffixes[a.id] == "vm-a") + #expect(suffixes[b.id] == "vm-b") + } + + @Test func hostsThatDifferInTheLastLabelKeepEveryLabel() { + let a = entry("main", "10.0.0.1") + let b = entry("main", "10.0.0.2") + let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + #expect(suffixes[a.id] == "10.0.0.1") + #expect(suffixes[b.id] == "10.0.0.2") + } + + @Test func aThreeWayCollisionTrimsOnlyWhatEveryHostShares() { + let a = entry("main", "web1.us.example.com") + let b = entry("main", "web2.us.example.com") + let c = entry("main", "web1.eu.example.com") + let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b, c]) + #expect(suffixes[a.id] == "web1.us") + #expect(suffixes[b.id] == "web2.us") + #expect(suffixes[c.id] == "web1.eu") + } + + @Test func surroundingWhitespaceDoesNotHideACollision() { + let a = entry("main", "a.example.com") + let b = entry("main ", "b.example.com") + #expect(RemoteHostTitleSuffixes.suffixes(for: [a, b]).count == 2) + } + + @Test func theRowDisplaysTheHostAfterTheTitle() { + var snapshot = SidebarWorkspaceSnapshotRefreshPolicyTests.snapshot(title: "main") + #expect(snapshot.displayTitle == "main") + snapshot.hostTitleSuffix = "web1.us-east" + #expect(snapshot.displayTitle == "main · web1.us-east") + #expect(snapshot.title == "main") + } + + @Test func aContextMenuRefreshKeepsTheHost() { + let displayed = SidebarWorkspaceSnapshotRefreshPolicyTests.snapshot(title: "main") + var next = SidebarWorkspaceSnapshotRefreshPolicyTests.snapshot(title: "main") + next.hostTitleSuffix = "web1.us-east" + let decision = SidebarWorkspaceSnapshotRefreshPolicy().decision( + current: displayed, + next: next, + force: false, + contextMenuVisible: true + ) + #expect(decision.workspaceSnapshotStorage?.hostTitleSuffix == "web1.us-east") + } + + @Test func thePresentationKeyChangesWithTheHost() { + let plain = SidebarWorkspaceSnapshotRefreshPolicyTests.presentationKey() + var hosted = plain + hosted.hostTitleSuffix = "web1.us-east" + #expect(plain != hosted) + } +} diff --git a/scripts/localization-allowed-omissions.json b/scripts/localization-allowed-omissions.json index 229fc1f66622..af77cff8ff62 100644 --- a/scripts/localization-allowed-omissions.json +++ b/scripts/localization-allowed-omissions.json @@ -2634,6 +2634,10 @@ "class": "technical", "source": "SSH" }, + "sidebar.workspace.titleWithHost": { + "class": "format", + "source": "%1$@ · %2$@" + }, "simulator.action.siri": { "class": "brand", "source": "Siri" From e1d3a12a6653d74208e48717c2df47e3aa4fe1e3 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Tue, 15 Sep 2026 20:32:11 -0700 Subject: [PATCH 12/26] cmuxTests: pin that host colors stay distinguishable on the sidebar rail Two servers showed rails in nearly the same red. The registry hashes a host into the workspace tab palette, and once the rail brightens those colors Magenta and Rose differ by 2.4 in OKLab (x100), with Red and Crimson close behind. hostColorsStayDistinguishableOnTheSidebarRail reads the color each slot resolves to through colorHex(for:), brightens it the way the rail draws it, and requires every pair to differ by at least 14, palette neighbors by at least 25 (a host bumped by a collision takes the next slot), and every color to differ from the selected row's blue by at least 12. --- cmuxTests/RemoteHostColorRegistryTests.swift | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/cmuxTests/RemoteHostColorRegistryTests.swift b/cmuxTests/RemoteHostColorRegistryTests.swift index 9fc57ea57ce5..6dda33cda5d1 100644 --- a/cmuxTests/RemoteHostColorRegistryTests.swift +++ b/cmuxTests/RemoteHostColorRegistryTests.swift @@ -1,3 +1,5 @@ +import AppKit +import SwiftUI import Testing #if canImport(cmux_DEV) @@ -86,6 +88,53 @@ import Testing #expect(reg.slot(for: "anything") == nil) } + /// The color each slot resolves to, in slot order, read through `colorHex(for:)` with a fresh + /// registry per host so no probing moves it. This checks the palette the registry really hands out. + private func paletteInSlotOrder() -> [String] { + let count = RemoteHostColorRegistry().slotCount + var bySlot: [Int: String] = [:] + var i = 0 + while bySlot.count < count, i < 100_000 { + let name = "slot-probe-\(i)" + i += 1 + let slot = startSlot(name, count: count) + guard bySlot[slot] == nil, let hex = RemoteHostColorRegistry().colorHex(for: name) else { continue } + bySlot[slot] = hex + } + return (0 ..< count).compactMap { bySlot[$0] } + } + + @Test func hostColorsStayDistinguishableOnTheSidebarRail() { + // The rail draws each color brightened. Two servers read as the same red when the + // workspace tab palette's Red and Crimson, or Magenta and Rose, came out that way: + // Magenta and Rose differ by 2.4 in OKLab (x100) on the rail. Every pair here must + // differ by at least 14, and palette neighbors by at least 25, because a host bumped + // by a collision takes the next slot. + let palette = paletteInSlotOrder() + #expect(palette.count == 16) + let rails = palette.map { hex -> (String, Self.RGB) in + let color = WorkspaceTabColorSettings.displayNSColor(hex: hex, colorScheme: .light, forceBright: true) + #expect(color != nil, "\(hex) does not parse") + return (hex, color.map(Self.srgb) ?? (0, 0, 0)) + } + for i in rails.indices { + for j in rails.indices where j > i { + let distance = Self.deltaE(rails[i].1, rails[j].1) + #expect(distance >= 14, "\(rails[i].0) and \(rails[j].0) differ by \(distance) on the rail") + } + let next = rails[(i + 1) % rails.count] + let neighbor = Self.deltaE(rails[i].1, next.1) + #expect(neighbor >= 25, "neighbors \(rails[i].0) and \(next.0) differ by \(neighbor)") + } + for scheme in [ColorScheme.light, .dark] { + let selection = Self.srgb(cmuxAccentNSColor(for: scheme)) + for (hex, rgb) in rails { + let distance = Self.deltaE(rgb, selection) + #expect(distance >= 12, "\(hex) differs from the \(scheme) selection by \(distance)") + } + } + } + @Test func colorHexIsStablePerHost() { // Uses the real built-in palette; a host resolves to a non-nil hex and the // same hex every time. @@ -94,4 +143,35 @@ import Testing #expect(hex != nil) #expect(hex == reg.colorHex(for: "cmux-srvA")) } + + // MARK: - Color measurement + + private typealias RGB = (r: Double, g: Double, b: Double) + + private static func srgb(_ color: NSColor) -> RGB { + let c = color.usingColorSpace(.sRGB) ?? color + return (Double(c.redComponent), Double(c.greenComponent), Double(c.blueComponent)) + } + + private static func linear(_ c: Double) -> Double { + c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4) + } + + private static func oklab(_ rgb: RGB) -> (Double, Double, Double) { + let r = linear(rgb.r), g = linear(rgb.g), b = linear(rgb.b) + let l = cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b) + let m = cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b) + let s = cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b) + return ( + 0.2104542553 * l + 0.7936177850 * m - 0.0040720468 * s, + 1.9779984951 * l - 2.4285922050 * m + 0.4505937099 * s, + 0.0259040371 * l + 0.7827717662 * m - 0.8086757660 * s + ) + } + + private static func deltaE(_ a: RGB, _ b: RGB) -> Double { + let x = oklab(a), y = oklab(b) + let dl = x.0 - y.0, da = x.1 - y.1, db = x.2 - y.2 + return 100 * (dl * dl + da * da + db * db).squareRoot() + } } From da3c9543dc8ef6f8c254d82b954d51214eacca0f Mon Sep 17 00:00:00 2001 From: ejc3 Date: Tue, 15 Sep 2026 20:48:04 -0700 Subject: [PATCH 13/26] remote-tmux: draw host colors from a palette picked to stay distinguishable Two servers drew nearly the same red rail. The registry hashed a host into the workspace tab palette, whose dark reds and magentas collapse into each other once the rail brightens them: Magenta and Rose differ by 2.4 in OKLab (x100), Red and Crimson by 4.6. Host colors now come from sixteen colors picked for this job. As the rail draws them, every pair differs by at least 14, colors that are neighbors in palette order differ by at least 29, and each differs from the selected row's blue by at least 12. A host still hashes to a start slot and a collision still takes the next free slot, so a bumped host always lands on a clearly different color. Host colors no longer follow edits to the workspace tab palette. --- .../Keys/BetaFeaturesCatalogSection.swift | 4 +- Sources/RemoteHostColorRegistry.swift | 51 +++++++++++++------ 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift index 2fffc1c3f2a1..79d99828d01b 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift @@ -100,8 +100,8 @@ public struct BetaFeaturesCatalogSection: SettingCatalogSection { ) /// Remote host origin colors: tint each remote workspace's sidebar row and - /// tab with a stable per-host color (hashed from the host name into the - /// workspace palette, collisions taking the next color) so servers are easy + /// tab with a stable per-host color (hashed from the host name into a palette + /// picked to stay distinguishable, collisions taking the next color) so servers are easy /// to tell apart and a given host shows the same color in every window. A /// user's manual workspace color always wins. Defaults off; while off, remote /// workspaces render with no origin tint. diff --git a/Sources/RemoteHostColorRegistry.swift b/Sources/RemoteHostColorRegistry.swift index 5f4284c5f987..0a1a131eaaed 100644 --- a/Sources/RemoteHostColorRegistry.swift +++ b/Sources/RemoteHostColorRegistry.swift @@ -1,8 +1,8 @@ import Foundation -/// Assigns each remote destination a color from the workspace color palette so -/// servers are easy to tell apart at a glance, and the same destination shows the -/// same color in every open window for the life of the app session. Gated by the +/// Assigns each remote destination a color from ``hostPalette`` so servers are easy +/// to tell apart at a glance, and the same destination shows the same color in every +/// open window for the life of the app session. Gated by the /// `remoteTmux.originColors.beta` flag at the call sites. /// /// Keyed by the host's `destination` STRING (the ssh alias or `user@host` — the @@ -36,9 +36,35 @@ import Foundation /// an injected `slotCount` to exercise the probing deterministically. @MainActor final class RemoteHostColorRegistry { - /// Number of palette slots to assign over. Defaults to the built-in palette - /// count; the built-in palette is used for indexing (fixed size/order) so a - /// user editing custom palette entries can't reshuffle host colors. + /// Sixteen colors picked for telling hosts apart, rather than borrowed from the + /// workspace tab palette, whose dark reds and magentas collapse into each other + /// once the sidebar rail brightens them (two pairs there differ by under 5). + /// Measured as the rail draws them, every pair differs by at least 14 in OKLab + /// (x100), and colors that are neighbors in this order differ by at least 29, so + /// a host bumped to the next slot by a collision lands on a clearly different + /// color. Each also differs from the selected row's blue by at least 12. + /// `RemoteHostColorRegistryTests` checks those floors. + static let hostPalette: [String] = [ + "#EF0133", // red + "#8C59FF", // violet + "#FFB100", // amber + "#9A5475", // mauve + "#17BEF9", // sky + "#FF59FF", // magenta + "#9D4C00", // brown + "#009E05", // green + "#FF8CBA", // pink + "#EFFD12", // yellow + "#9E7E07", // ochre + "#F9009D", // hot pink + "#04C7A3", // teal + "#FF7839", // orange + "#B324C2", // purple + "#99BC00", // lime + ] + + /// Number of palette slots to assign over. Defaults to ``hostPalette``'s count; + /// tests inject other counts to exercise the probing. let slotCount: Int /// destination → assigned palette slot (the stable per-host cache). @@ -46,7 +72,7 @@ final class RemoteHostColorRegistry { /// palette slot → destination that holds it (drives collision probing). private var hostBySlot: [Int: String] = [:] - init(slotCount: Int = WorkspaceTabColorSettings.defaultPalette.count) { + init(slotCount: Int = RemoteHostColorRegistry.hostPalette.count) { self.slotCount = max(0, slotCount) } @@ -71,15 +97,10 @@ final class RemoteHostColorRegistry { return chosen } - /// The palette color hex for `destination`, resolving the assigned slot to the - /// palette entry's CURRENT hex (so user palette recolors are honored while the - /// slot itself stays stable). `nil` when the palette is empty. + /// The color hex for `destination`'s assigned slot. `nil` when the palette is empty. func colorHex(for destination: String) -> String? { - guard let slot = slot(for: destination) else { return nil } - let palette = WorkspaceTabColorSettings.defaultPalette - guard slot < palette.count else { return nil } - let entry = palette[slot] - return WorkspaceTabColorSettings.currentColorHex(named: entry.name) ?? entry.hex + guard let slot = slot(for: destination), slot < Self.hostPalette.count else { return nil } + return Self.hostPalette[slot] } /// Stable FNV-1a/64 hash of a string — deterministic across processes (unlike From 0bfe477e8b6c8d3d920af19482325d4e1fe542e1 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Wed, 16 Sep 2026 09:34:42 -0700 Subject: [PATCH 14/26] remote-tmux: soften the host palette The sixteen host colors were bright enough to compete with the row titles. They are now soft tones, with the violet as the reference for how saturated a color may be. As the rail draws them, every pair differs by at least 11 in OKLab (x100), palette neighbors by at least 26, each color differs from the grey sidebar by at least 15, and from the selected row's blue by at least 12. The test gains the grey-sidebar floor and a lower pairwise floor to match. --- Sources/RemoteHostColorRegistry.swift | 47 ++++++++++---------- cmuxTests/RemoteHostColorRegistryTests.swift | 12 +++-- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/Sources/RemoteHostColorRegistry.swift b/Sources/RemoteHostColorRegistry.swift index 0a1a131eaaed..dd2517d0bded 100644 --- a/Sources/RemoteHostColorRegistry.swift +++ b/Sources/RemoteHostColorRegistry.swift @@ -36,31 +36,30 @@ import Foundation /// an injected `slotCount` to exercise the probing deterministically. @MainActor final class RemoteHostColorRegistry { - /// Sixteen colors picked for telling hosts apart, rather than borrowed from the - /// workspace tab palette, whose dark reds and magentas collapse into each other - /// once the sidebar rail brightens them (two pairs there differ by under 5). - /// Measured as the rail draws them, every pair differs by at least 14 in OKLab - /// (x100), and colors that are neighbors in this order differ by at least 29, so - /// a host bumped to the next slot by a collision lands on a clearly different - /// color. Each also differs from the selected row's blue by at least 12. - /// `RemoteHostColorRegistryTests` checks those floors. + /// Sixteen soft colors picked for telling hosts apart, rather than borrowed from the + /// workspace tab palette, whose dark reds and magentas collapse into each other once the + /// sidebar rail brightens them (two pairs there differ by under 5). As the rail draws them, + /// every pair differs by at least 11 in OKLab (x100), colors that are neighbors in this order + /// differ by at least 26, so a host bumped to the next slot by a collision lands on a clearly + /// different color, each differs from the grey sidebar (#A9A9A9) by at least 15, and from the + /// selected row's blue by at least 12. `RemoteHostColorRegistryTests` checks those floors. static let hostPalette: [String] = [ - "#EF0133", // red - "#8C59FF", // violet - "#FFB100", // amber - "#9A5475", // mauve - "#17BEF9", // sky - "#FF59FF", // magenta - "#9D4C00", // brown - "#009E05", // green - "#FF8CBA", // pink - "#EFFD12", // yellow - "#9E7E07", // ochre - "#F9009D", // hot pink - "#04C7A3", // teal - "#FF7839", // orange - "#B324C2", // purple - "#99BC00", // lime + "#B1A2FA", // violet + "#E7BB4E", // gold + "#9B577B", // mauve + "#75D1A3", // mint + "#77779E", // slate + "#FF945A", // tangerine + "#A8EAF6", // sky + "#F06C7F", // coral + "#DDE2BB", // butter + "#E18DCD", // pink + "#8A9E2D", // olive + "#A963C7", // purple + "#9B6F0D", // ochre + "#FFDAFF", // lilac + "#259E6A", // green + "#9E5131", // rust ] /// Number of palette slots to assign over. Defaults to ``hostPalette``'s count; diff --git a/cmuxTests/RemoteHostColorRegistryTests.swift b/cmuxTests/RemoteHostColorRegistryTests.swift index 6dda33cda5d1..c67bea3a09da 100644 --- a/cmuxTests/RemoteHostColorRegistryTests.swift +++ b/cmuxTests/RemoteHostColorRegistryTests.swift @@ -108,8 +108,8 @@ import Testing // The rail draws each color brightened. Two servers read as the same red when the // workspace tab palette's Red and Crimson, or Magenta and Rose, came out that way: // Magenta and Rose differ by 2.4 in OKLab (x100) on the rail. Every pair here must - // differ by at least 14, and palette neighbors by at least 25, because a host bumped - // by a collision takes the next slot. + // differ by at least 11, palette neighbors by at least 25 because a host bumped by a + // collision takes the next slot, and each color must stand out from the grey sidebar. let palette = paletteInSlotOrder() #expect(palette.count == 16) let rails = palette.map { hex -> (String, Self.RGB) in @@ -120,12 +120,18 @@ import Testing for i in rails.indices { for j in rails.indices where j > i { let distance = Self.deltaE(rails[i].1, rails[j].1) - #expect(distance >= 14, "\(rails[i].0) and \(rails[j].0) differ by \(distance) on the rail") + #expect(distance >= 11, "\(rails[i].0) and \(rails[j].0) differ by \(distance) on the rail") } let next = rails[(i + 1) % rails.count] let neighbor = Self.deltaE(rails[i].1, next.1) #expect(neighbor >= 25, "neighbors \(rails[i].0) and \(next.0) differ by \(neighbor)") } + // The sidebar material reads as mid grey behind the rail. + let sidebarGrey: Self.RGB = (169.0 / 255, 169.0 / 255, 169.0 / 255) + for (hex, rgb) in rails { + let distance = Self.deltaE(rgb, sidebarGrey) + #expect(distance >= 15, "\(hex) differs from the grey sidebar by \(distance)") + } for scheme in [ColorScheme.light, .dark] { let selection = Self.srgb(cmuxAccentNSColor(for: scheme)) for (hex, rgb) in rails { From afd5fc369d3bdd6796657ebe5d3382ef67013cd3 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Sat, 26 Sep 2026 13:39:45 -0700 Subject: [PATCH 15/26] sidebar: key each cached row snapshot by its own color and host title Main moved row snapshots into SidebarRowSnapshotCache, built outside rendering, and rows now only read from it. The origin color and the host after a colliding title differ per row, so the cache's reconcile takes a per-row presentation key: a row whose color or host suffix changed is rebuilt, and every other row keeps its snapshot. A targeted refresh also rebuilds rows whose host suffix went stale because another workspace was renamed. The render context no longer carries mirror destinations or host suffixes, since nothing reads them there. --- Sources/ContentView.swift | 45 +++++++++++++------ Sources/Sidebar/SidebarRowSnapshotCache.swift | 11 ++++- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index a8a2f951e6f4..6c972af45bed 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -11836,11 +11836,6 @@ struct VerticalTabsSidebar: View, Equatable { let workspaceGroupMenuSnapshot: WorkspaceGroupMenuSnapshot let workspaceRenderItems: [SidebarWorkspaceRenderItem] let visibleWorkspaceRowIds: [UUID] - /// Mirror destinations for the origin-color resolve, walked once for this render - /// pass so a row doesn't rescan the session mirrors. Nil when origin colors are off. - let mirrorOriginDestinations: [UUID: String]? - /// Hosts named after colliding titles for this render pass (beta), keyed by workspace id. - let hostTitleSuffixes: [UUID: String] var workspaceIds: [UUID] { tabIds } } @@ -12003,7 +11998,6 @@ struct VerticalTabsSidebar: View, Equatable { displayAccessibility: sidebarDisplayAccessibility ) #endif - let mirrorOriginDestinations = mirrorDestinationsForOriginPresentation() let renderContext = WorkspaceListRenderContext( environment: tableEnvironment, tabs: tabs, @@ -12029,9 +12023,7 @@ struct VerticalTabsSidebar: View, Equatable { memberWorkspaceIdsByGroupId: memberWorkspaceIdsByGroupId, workspaceGroupMenuSnapshot: workspaceGroupMenuSnapshot, workspaceRenderItems: workspaceRenderItems, - visibleWorkspaceRowIds: visibleWorkspaceRowIds, - mirrorOriginDestinations: mirrorOriginDestinations, - hostTitleSuffixes: hostTitleSuffixes(tabs: tabs, mirrorDestinations: mirrorOriginDestinations) + visibleWorkspaceRowIds: visibleWorkspaceRowIds ) let _ = SidebarProfilingSignposts.end(signpost) ZStack(alignment: .bottomLeading) { @@ -13214,10 +13206,23 @@ struct VerticalTabsSidebar: View, Equatable { let settings = tabItemSettingsStore.snapshot let showsAgentActivity = settings.details.showAgentActivity && CmuxFeatureFlags.shared.isSidebarWorkspaceAgentSpinnerEnabled - workspaceSnapshotCache.refresh(workspaceIds: workspaceIds) { workspaceId in + let mirrorDestinations = mirrorDestinationsForOriginPresentation() + let hostTitleSuffixes = hostTitleSuffixes(tabs: tabManager.tabs, mirrorDestinations: mirrorDestinations) + // A rename can start or end a title collision, which changes the host shown on OTHER rows. + // Rebuild every row whose saved snapshot carries a different host than it should now. + let staleHostIds = tabManager.tabs.compactMap { workspace -> UUID? in + guard let saved = workspaceSnapshotCache.snapshotsById[workspace.id], + saved.hostTitleSuffix != hostTitleSuffixes[workspace.id] else { return nil } + return workspace.id + } + workspaceSnapshotCache.refresh(workspaceIds: workspaceIds.union(staleHostIds)) { workspaceId in guard let workspace = workspaceById[workspaceId] else { return nil } return makeWorkspaceSnapshot( - workspace: workspace, settings: settings, showsAgentActivity: showsAgentActivity + workspace: workspace, + settings: settings, + showsAgentActivity: showsAgentActivity, + mirrorDestinations: mirrorDestinations, + hostTitleSuffixes: hostTitleSuffixes ) } } @@ -13228,11 +13233,23 @@ struct VerticalTabsSidebar: View, Equatable { let settings = tabItemSettingsStore.snapshot let showsAgentActivity = settings.details.showAgentActivity && CmuxFeatureFlags.shared.isSidebarWorkspaceAgentSpinnerEnabled + let mirrorDestinations = mirrorDestinationsForOriginPresentation() + let hostTitleSuffixes = hostTitleSuffixes(tabs: tabs, mirrorDestinations: mirrorDestinations) + // The origin color and the host after a colliding title differ per row, so each row's + // cached snapshot is reused only when its own key still matches. workspaceSnapshotCache.reconcile( workspaceIds: Set(workspaceById.keys), - presentationKey: SidebarWorkspaceSnapshotFactory.presentationKey( - settings: settings, showsAgentActivity: showsAgentActivity - ) + presentationKey: { workspaceId in + SidebarWorkspaceSnapshotFactory.presentationKey( + settings: settings, + showsAgentActivity: showsAgentActivity, + customColorHex: workspaceById[workspaceId].flatMap { workspace in + workspace.customColor + ?? originColorHex(for: workspace, mirrorDestinations: mirrorDestinations) + }, + hostTitleSuffix: hostTitleSuffixes[workspaceId] + ) + } ) { workspaceId in guard let workspace = workspaceById[workspaceId] else { return nil } return makeWorkspaceSnapshot( diff --git a/Sources/Sidebar/SidebarRowSnapshotCache.swift b/Sources/Sidebar/SidebarRowSnapshotCache.swift index 5975bf8e05ec..ca17d6031c42 100644 --- a/Sources/Sidebar/SidebarRowSnapshotCache.swift +++ b/Sources/Sidebar/SidebarRowSnapshotCache.swift @@ -23,11 +23,20 @@ final class SidebarRowSnapshotCache { workspaceIds: Set, presentationKey: SidebarWorkspaceSnapshotBuilder.PresentationKey, snapshot: (UUID) -> SidebarWorkspaceSnapshotBuilder.Snapshot? + ) { + reconcile(workspaceIds: workspaceIds, presentationKey: { _ in presentationKey }, snapshot: snapshot) + } + + /// Same, for a key that differs per row (a row's color is part of its key). + func reconcile( + workspaceIds: Set, + presentationKey: (UUID) -> SidebarWorkspaceSnapshotBuilder.PresentationKey, + snapshot: (UUID) -> SidebarWorkspaceSnapshotBuilder.Snapshot? ) { var next: [UUID: SidebarWorkspaceSnapshotBuilder.Snapshot] = [:] next.reserveCapacity(workspaceIds.count) for id in workspaceIds { - if let cached = snapshotsById[id], cached.presentationKey == presentationKey { + if let cached = snapshotsById[id], cached.presentationKey == presentationKey(id) { next[id] = cached } else { next[id] = snapshot(id) From eebfd6786bbec6e7fc0f41e4bf93505f1c6801b0 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Mon, 28 Sep 2026 10:09:28 -0700 Subject: [PATCH 16/26] remote-tmux: adapt two host-color tests to main's accent and sidebar key changes Main replaced the cmuxAccentNSColor function with CmuxAccentColor, so the palette test measures the rail colors against CmuxAccentColor(mode: .cmux), the colors the old function returned. The presentation key now carries each row's effective color, so the test main added for the compact-status setting passes nil for it. --- cmuxTests/RemoteHostColorRegistryTests.swift | 3 ++- cmuxTests/SidebarCompactAgentStatusTests.swift | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cmuxTests/RemoteHostColorRegistryTests.swift b/cmuxTests/RemoteHostColorRegistryTests.swift index c67bea3a09da..ad0354c80f56 100644 --- a/cmuxTests/RemoteHostColorRegistryTests.swift +++ b/cmuxTests/RemoteHostColorRegistryTests.swift @@ -1,4 +1,5 @@ import AppKit +import CmuxFoundation import SwiftUI import Testing @@ -133,7 +134,7 @@ import Testing #expect(distance >= 15, "\(hex) differs from the grey sidebar by \(distance)") } for scheme in [ColorScheme.light, .dark] { - let selection = Self.srgb(cmuxAccentNSColor(for: scheme)) + let selection = Self.srgb(CmuxAccentColor(mode: .cmux).nsColor(isDark: scheme == .dark)) for (hex, rgb) in rails { let distance = Self.deltaE(rgb, selection) #expect(distance >= 12, "\(hex) differs from the \(scheme) selection by \(distance)") diff --git a/cmuxTests/SidebarCompactAgentStatusTests.swift b/cmuxTests/SidebarCompactAgentStatusTests.swift index 8ecf40b04ce3..8efa2ddeb192 100644 --- a/cmuxTests/SidebarCompactAgentStatusTests.swift +++ b/cmuxTests/SidebarCompactAgentStatusTests.swift @@ -414,8 +414,8 @@ struct SidebarCompactAgentStatusTests { #expect(on.compactsAgentStatus) #expect( - SidebarWorkspaceSnapshotFactory.presentationKey(settings: off, showsAgentActivity: true) - != SidebarWorkspaceSnapshotFactory.presentationKey(settings: on, showsAgentActivity: true) + SidebarWorkspaceSnapshotFactory.presentationKey(settings: off, showsAgentActivity: true, customColorHex: nil) + != SidebarWorkspaceSnapshotFactory.presentationKey(settings: on, showsAgentActivity: true, customColorHex: nil) ) } From 31b60f1aa8a4daa8556ae79cfd7b4beb5c85e76f Mon Sep 17 00:00:00 2001 From: ejc3 Date: Tue, 29 Sep 2026 12:59:43 -0700 Subject: [PATCH 17/26] remote-tmux: say the host color tints the sidebar row, which is all it does The setting's description promised the row and the tab, but the origin color only reaches the sidebar row snapshot. --- .../Sections/BetaFeaturesSection.swift | 2 +- Resources/Localizable.xcstrings | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift index 0bafeeaea03c..8f2de6427e87 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift @@ -234,7 +234,7 @@ public struct BetaFeaturesSection: View { searchAnchorID: "setting:betaFeatures:remoteTmuxOriginColors", String(localized: "settings.betaFeatures.remoteTmuxOriginColors", defaultValue: "Remote host colors"), subtitle: remoteTmuxOriginColors.current - ? String(localized: "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn", defaultValue: "Tints each remote workspace's sidebar row and tab with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins.") + ? String(localized: "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn", defaultValue: "Tints each remote workspace's sidebar row with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins.") : String(localized: "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff", defaultValue: "Leaves remote workspaces without an origin color until you enable it here.") ) { Toggle("", isOn: Binding(get: { remoteTmuxOriginColors.current }, set: { remoteTmuxOriginColors.set($0) })) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index f7e37e6a8e0e..687783141bb6 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -579464,55 +579464,55 @@ "ar": { "stringUnit": { "state": "translated", - "value": "يُلوّن صف كل مساحة عمل بعيدة في الشريط الجانبي وعلامة تبويبها بلون ثابت خاص بكل مضيف لتسهيل التمييز بين الخوادم. يبقى اللون الذي تختاره يدويًا لمساحة العمل هو المُعتمد دائمًا." + "value": "يُلوّن صف كل مساحة عمل بعيدة في الشريط الجانبي بلون ثابت خاص بكل مضيف لتسهيل التمييز بين الخوادم. يبقى اللون الذي تختاره يدويًا لمساحة العمل هو المُعتمد دائمًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "Färbt die Seitenleistenzeile und den Tab jedes Remote-Arbeitsbereichs mit einer festen Farbe pro Host, damit sich Server leicht unterscheiden lassen. Eine manuell gewählte Arbeitsbereichsfarbe hat immer Vorrang." + "value": "Färbt die Seitenleistenzeile jedes Remote-Arbeitsbereichs mit einer festen Farbe pro Host, damit sich Server leicht unterscheiden lassen. Eine manuell gewählte Arbeitsbereichsfarbe hat immer Vorrang." } }, "en": { "stringUnit": { "state": "translated", - "value": "Tints each remote workspace's sidebar row and tab with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." + "value": "Tints each remote workspace's sidebar row with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." } }, "es": { "stringUnit": { "state": "translated", - "value": "Tiñe la fila de la barra lateral y la pestaña de cada espacio de trabajo remoto con un color estable por host para distinguir fácilmente los servidores. El color que asignes manualmente al espacio de trabajo siempre tiene prioridad." + "value": "Tiñe la fila de la barra lateral de cada espacio de trabajo remoto con un color estable por host para distinguir fácilmente los servidores. El color que asignes manualmente al espacio de trabajo siempre tiene prioridad." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Teinte la ligne de la barre latérale et l’onglet de chaque espace de travail distant avec une couleur stable par hôte, pour distinguer facilement les serveurs. La couleur choisie manuellement pour un espace de travail l’emporte toujours." + "value": "Teinte la ligne de la barre latérale de chaque espace de travail distant avec une couleur stable par hôte, pour distinguer facilement les serveurs. La couleur choisie manuellement pour un espace de travail l’emporte toujours." } }, "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": "為每個遠端工作區的側邊欄列加上依主機固定的顏色,方便區分伺服器。你手動設定的工作區顏色一律優先。" } } } From fbab2e11792cb049140492bba8746d461ab71816 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Thu, 1 Oct 2026 18:35:24 -0700 Subject: [PATCH 18/26] test(sidebar): catch stale manual-color state after clearing a host tint Co-Authored-By: Claude Opus 5.5 --- cmuxTests/SidebarRowSnapshotCacheTests.swift | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/cmuxTests/SidebarRowSnapshotCacheTests.swift b/cmuxTests/SidebarRowSnapshotCacheTests.swift index 2b75b4ee0a25..b905e05cb484 100644 --- a/cmuxTests/SidebarRowSnapshotCacheTests.swift +++ b/cmuxTests/SidebarRowSnapshotCacheTests.swift @@ -24,6 +24,36 @@ struct SidebarRowSnapshotCacheTests { #expect(cache.value(for: replacementID) == snapshot) } + @Test func clearingManualColorMatchingOriginRefreshesClearColorState() throws { + let suiteName = "SidebarRowSnapshotCacheTests.\(UUID().uuidString)" + let defaults = try #require(UserDefaults(suiteName: suiteName)) + defer { defaults.removePersistentDomain(forName: suiteName) } + let workspace = Workspace(title: "Color provenance", initialSurface: .cloudVMLoading) + defer { workspace.teardownAllPanels() } + let originColor = "#B1A2FA" + let factory = SidebarWorkspaceSnapshotFactory( + workspace: workspace, + settings: SidebarTabItemSettingsSnapshot(defaults: defaults), + showsAgentActivity: false, + originColorHex: originColor + ) + let cache = SidebarRowSnapshotCache() + workspace.customColor = originColor + let manualSnapshot = factory.makeSnapshot() + cache.reconcile(workspaceIds: [workspace.id], presentationKey: manualSnapshot.presentationKey) { _ in + manualSnapshot + } + #expect(cache.value(for: workspace.id)?.hasManualCustomColor == true) + + workspace.customColor = nil + let originSnapshot = factory.makeSnapshot() + cache.reconcile(workspaceIds: [workspace.id], presentationKey: originSnapshot.presentationKey) { _ in + originSnapshot + } + #expect(cache.value(for: workspace.id)?.customColorHex == originColor) + #expect(cache.value(for: workspace.id)?.hasManualCustomColor == false) + } + @Test func repeatedWorkspaceReplacementDoesNotRetainHistoricalSnapshots() { let cache = SidebarRowSnapshotCache() let snapshot = SidebarWorkspaceRowSuspensionTests.makeModel().snapshot From d36d581930acccfbaf6b11d66d0f9d306a4c64dd Mon Sep 17 00:00:00 2001 From: Leo Li Date: Thu, 1 Oct 2026 19:08:14 -0700 Subject: [PATCH 19/26] fix(sidebar): unblock origin presentation checks and add boundary regressions Co-Authored-By: Claude Opus 5.5 --- .../Keys/BetaFeaturesCatalogSection.swift | 8 +- .../CuratedSettingEntry+Default.swift | 4 +- Resources/Localizable.xcstrings | 118 ++++++++++++++++++ Sources/ContentView.swift | 4 +- Sources/RemoteHostColorRegistry.swift | 12 +- Sources/RemoteHostTitleSuffixes.swift | 17 +-- cmuxTests/RemoteHostColorRegistryTests.swift | 17 ++- cmuxTests/RemoteHostTitleSuffixesTests.swift | 42 ++++--- ...rWorkspaceSnapshotRefreshPolicyTests.swift | 3 +- tests/test_cmux_schema_parity.py | 3 + 10 files changed, 187 insertions(+), 41 deletions(-) diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift index 038a16537537..be189f727854 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift @@ -101,18 +101,18 @@ public struct BetaFeaturesCatalogSection: SettingCatalogSection { /// user's manual workspace color always wins. Defaults off; while off, remote /// workspaces render with no origin tint. public let remoteTmuxOriginColors = DefaultsKey( - id: "remoteTmux.originColors.beta.enabled", + id: "remoteTmux.beta.originColors.enabled", defaultValue: false, - userDefaultsKey: "remoteTmux.originColors.beta.enabled" + userDefaultsKey: "remoteTmux.beta.originColors.enabled" ) /// Remote host names on duplicate titles: when sidebar workspaces share a title and come from /// different places, show each remote one's host after its title, leaving off the domain the /// hosts share. Defaults off; while off, titles show as they are. public let remoteTmuxOriginHostTitles = DefaultsKey( - id: "remoteTmux.originHostTitles.beta.enabled", + id: "remoteTmux.beta.originHostTitles.enabled", defaultValue: false, - userDefaultsKey: "remoteTmux.originHostTitles.beta.enabled" + userDefaultsKey: "remoteTmux.beta.originHostTitles.enabled" ) public init() {} diff --git a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift index 5c12d19b4f15..5617fcf47049 100644 --- a/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift +++ b/Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift @@ -460,8 +460,8 @@ extension Array where Element == CuratedSettingEntry { ), .init(section: .betaFeatures, id: "customSidebars", title: String(localized: "settings.betaFeatures.customSidebars", defaultValue: "Custom Sidebars"), synonyms: "Custom Sidebars custom sidebars swift json interpreted vibe beta unstable"), .init(section: .betaFeatures, id: "remoteTmux", title: String(localized: "settings.betaFeatures.remoteTmux", defaultValue: "Remote tmux"), synonyms: "Remote tmux remote tmux ssh control mode -CC mirror session window pane sidebar workspace beta unstable"), - .init(section: .betaFeatures, id: "remoteTmuxOriginColors", title: String(localized: "settings.betaFeatures.remoteTmuxOriginColors", defaultValue: "Remote host colors"), synonyms: "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable"), - .init(section: .betaFeatures, id: "remoteTmuxOriginHostTitles", title: String(localized: "settings.betaFeatures.remoteTmuxOriginHostTitles", defaultValue: "Remote host names on duplicate titles"), synonyms: "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable"), + .init(section: .betaFeatures, id: "remoteTmuxOriginColors", title: String(localized: "settings.betaFeatures.remoteTmuxOriginColors", defaultValue: "Remote host colors"), synonyms: String(localized: "settings.search.alias.setting.betaFeatures.remote-tmux-origin-colors", defaultValue: "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable")), + .init(section: .betaFeatures, id: "remoteTmuxOriginHostTitles", title: String(localized: "settings.betaFeatures.remoteTmuxOriginHostTitles", defaultValue: "Remote host names on duplicate titles"), synonyms: String(localized: "settings.search.alias.setting.betaFeatures.remote-tmux-origin-host-titles", defaultValue: "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable")), .init( section: .betaFeatures, id: "workspace-todo-controls", diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index fddc316d60c1..aa65a680f59a 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -353363,6 +353363,124 @@ } } }, + "settings.search.alias.setting.betaFeatures.remote-tmux-origin-colors": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リモートホストの色 接続元 カラー 色合い ホストごと サーバー ワークスペース サイドバー 行 タブ ベータ 不安定" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Host-Farben Herkunft Farbe Tönung pro Host Server Arbeitsbereich Seitenleiste Zeile Tab Beta instabil" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleurs des hôtes distants origine couleur teinte par hôte serveur espace de travail barre latérale ligne onglet bêta instable" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "ألوان المضيف البعيد الأصل لون تلوين لكل مضيف خادم مساحة عمل شريط جانبي صف علامة تبويب تجريبي غير مستقر" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Colores de hosts remotos origen color tinte por host servidor espacio de trabajo barra lateral fila pestaña beta inestable" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "遠端主機顏色 來源 色彩 著色 每台主機 伺服器 工作區 側邊欄 列 分頁 測試版 不穩定" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "远程主机颜色 来源 色彩 着色 每台主机 服务器 工作区 侧边栏 行 标签页 测试版 不稳定" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "원격 호스트 색상 출처 색 색조 호스트별 서버 작업 공간 사이드바 행 탭 베타 불안정" + } + } + } + }, + "settings.search.alias.setting.betaFeatures.remote-tmux-origin-host-titles": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "重複タイトルにリモートホスト名を表示 ホスト名 サーバー 重複 同じタイトル 衝突 ワークスペース サイドバー 行 ベータ 不安定" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Host-Namen bei gleichen Titeln Hostname Server doppelt gleicher Titel Kollision Arbeitsbereich Seitenleiste Zeile Beta instabil" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Noms des hôtes distants pour les titres identiques nom hôte serveur doublon même titre conflit espace de travail barre latérale ligne bêta instable" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "أسماء المضيف البعيد للعناوين المكررة اسم المضيف خادم مكرر نفس العنوان تعارض مساحة عمل شريط جانبي صف تجريبي غير مستقر" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nombres de hosts remotos en títulos duplicados nombre host servidor duplicado mismo título colisión espacio de trabajo barra lateral fila beta inestable" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "重複標題顯示遠端主機名稱 主機名稱 伺服器 重複 相同標題 衝突 工作區 側邊欄 列 測試版 不穩定" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重复标题显示远程主机名称 主机名 服务器 重复 相同标题 冲突 工作区 侧边栏 行 测试版 不稳定" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "중복 제목의 원격 호스트 이름 호스트명 서버 중복 같은 제목 충돌 작업 공간 사이드바 행 베타 불안정" + } + } + } + }, "settings.search.alias.setting.betaFeatures.workspace-todo-controls": { "extractionState": "manual", "localizations": { diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 9c23da12a82a..e4eed8bc07bf 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -13046,11 +13046,11 @@ struct VerticalTabsSidebar: View, Equatable { /// whether a title collides depends on every other title. Empty while the flag is off. private func hostTitleSuffixes(tabs: [Workspace], mirrorDestinations: [UUID: String]?) -> [UUID: String] { guard remoteTmuxOriginHostTitlesEnabled else { return [:] } - return RemoteHostTitleSuffixes.suffixes(for: tabs.map { workspace in + return RemoteHostTitleSuffixes().suffixes(for: tabs.map { workspace in RemoteHostTitleSuffixes.Entry( id: workspace.id, title: workspace.title, - destination: RemoteHostTitleSuffixes.origin( + destination: RemoteHostTitleSuffixes().origin( destination: originDestination(for: workspace, mirrorDestinations: mirrorDestinations), cloudVMID: workspace.cloudVMID ) diff --git a/Sources/RemoteHostColorRegistry.swift b/Sources/RemoteHostColorRegistry.swift index dd2517d0bded..12ec2a340c93 100644 --- a/Sources/RemoteHostColorRegistry.swift +++ b/Sources/RemoteHostColorRegistry.swift @@ -3,7 +3,7 @@ import Foundation /// Assigns each remote destination a color from ``hostPalette`` so servers are easy /// to tell apart at a glance, and the same destination shows the same color in every /// open window for the life of the app session. Gated by the -/// `remoteTmux.originColors.beta` flag at the call sites. +/// `remoteTmux.beta.originColors.enabled` flag at the call sites. /// /// Keyed by the host's `destination` STRING (the ssh alias or `user@host` — the /// "host name" the user typed), NOT the port/identity-specific ``connectionHash``. @@ -41,8 +41,10 @@ final class RemoteHostColorRegistry { /// sidebar rail brightens them (two pairs there differ by under 5). As the rail draws them, /// every pair differs by at least 11 in OKLab (x100), colors that are neighbors in this order /// differ by at least 26, so a host bumped to the next slot by a collision lands on a clearly - /// different color, each differs from the grey sidebar (#A9A9A9) by at least 15, and from the - /// selected row's blue by at least 12. `RemoteHostColorRegistryTests` checks those floors. + /// different color, each differs from the grey sidebar (#A9A9A9) by at least 15, and from + /// cmux's built-in blue accent by at least 12. Custom accents are user-controlled and may + /// intentionally match a palette color, so no universal contrast guarantee is possible for + /// arbitrary custom accents. `RemoteHostColorRegistryTests` checks those floors. static let hostPalette: [String] = [ "#B1A2FA", // violet "#E7BB4E", // gold @@ -71,8 +73,8 @@ final class RemoteHostColorRegistry { /// palette slot → destination that holds it (drives collision probing). private var hostBySlot: [Int: String] = [:] - init(slotCount: Int = RemoteHostColorRegistry.hostPalette.count) { - self.slotCount = max(0, slotCount) + init(slotCount: Int? = nil) { + self.slotCount = max(0, slotCount ?? Self.hostPalette.count) } /// The palette slot for `destination`, assigning one on first sight (stable diff --git a/Sources/RemoteHostTitleSuffixes.swift b/Sources/RemoteHostTitleSuffixes.swift index 1ed617b53934..05ac6d97f4d3 100644 --- a/Sources/RemoteHostTitleSuffixes.swift +++ b/Sources/RemoteHostTitleSuffixes.swift @@ -1,8 +1,9 @@ import Foundation +import Darwin /// When sidebar workspaces share a title, names the remote host after each remote one's title so the -/// rows can be told apart. Gated by the `remoteTmux.originHostTitles.beta` flag at the call sites. -enum RemoteHostTitleSuffixes { +/// rows can be told apart. Gated by the `remoteTmux.beta.originHostTitles.enabled` flag at the call sites. +struct RemoteHostTitleSuffixes { struct Entry: Equatable { let id: UUID let title: String @@ -19,7 +20,7 @@ enum RemoteHostTitleSuffixes { /// `web2.eu-west.example.com` read `web1.us-east` and `web2.eu-west`. IP addresses are never /// trimmed, and a lone remote host beside a local workspace keeps its whole name. The row /// truncates the end, so as much of the host shows as fits. - static func suffixes(for entries: [Entry]) -> [UUID: String] { + func suffixes(for entries: [Entry]) -> [UUID: String] { var groups: [String: [Entry]] = [:] var order: [String] = [] for entry in entries { @@ -49,20 +50,20 @@ enum RemoteHostTitleSuffixes { /// The place a workspace comes from, for naming after its title. A managed Cloud VM connects /// through one shared gateway (`+cmux@`), so the VM id is what tells two VMs /// apart; every other remote workspace uses its destination. - static func origin(destination: String?, cloudVMID: String?) -> String? { + func origin(destination: String?, cloudVMID: String?) -> String? { if let cloudVMID, !cloudVMID.isEmpty { return cloudVMID } return destination } /// Whether a host is an IPv4 or IPv6 literal rather than a name. - static func isIPAddress(_ host: String) -> Bool { + func isIPAddress(_ host: String) -> Bool { if host.contains(":") { return true } let labels = host.split(separator: ".", omittingEmptySubsequences: false) return labels.count == 4 && labels.allSatisfy { !$0.isEmpty && $0.allSatisfy(\.isNumber) } } /// The host part of a destination: everything after the last `@`, trimmed. - static func hostName(_ destination: String) -> String? { + func hostName(_ destination: String) -> String? { var host = destination.trimmingCharacters(in: .whitespacesAndNewlines) if let at = host.lastIndex(of: "@") { host = String(host[host.index(after: at)...]) @@ -71,7 +72,7 @@ enum RemoteHostTitleSuffixes { } /// How many trailing dot-separated labels every host shares, leaving each host at least one label. - static func sharedTrailingLabelCount(_ hosts: [String]) -> Int { + func sharedTrailingLabelCount(_ hosts: [String]) -> Int { let labels = hosts.map { $0.split(separator: ".", omittingEmptySubsequences: false) } guard let first = labels.first, let shortest = labels.map(\.count).min() else { return 0 } var count = 0 @@ -83,7 +84,7 @@ enum RemoteHostTitleSuffixes { return count } - private static func dropping(trailingLabels count: Int, from host: String) -> String { + private func dropping(trailingLabels count: Int, from host: String) -> String { guard count > 0 else { return host } return host.split(separator: ".", omittingEmptySubsequences: false).dropLast(count).joined(separator: ".") } diff --git a/cmuxTests/RemoteHostColorRegistryTests.swift b/cmuxTests/RemoteHostColorRegistryTests.swift index ad0354c80f56..dcd38d18c9a2 100644 --- a/cmuxTests/RemoteHostColorRegistryTests.swift +++ b/cmuxTests/RemoteHostColorRegistryTests.swift @@ -89,6 +89,14 @@ import Testing #expect(reg.slot(for: "anything") == nil) } + @Test func injectedSlotCountCannotExceedPalette() { + let reg = RemoteHostColorRegistry(slotCount: RemoteHostColorRegistry.hostPalette.count + 10) + #expect(reg.slotCount == RemoteHostColorRegistry.hostPalette.count) + for i in 0 ..< (RemoteHostColorRegistry.hostPalette.count + 3) { + #expect(reg.colorHex(for: "oversized-\(i)") != nil) + } + } + /// The color each slot resolves to, in slot order, read through `colorHex(for:)` with a fresh /// registry per host so no probing moves it. This checks the palette the registry really hands out. private func paletteInSlotOrder() -> [String] { @@ -113,11 +121,13 @@ import Testing // collision takes the next slot, and each color must stand out from the grey sidebar. let palette = paletteInSlotOrder() #expect(palette.count == 16) - let rails = palette.map { hex -> (String, Self.RGB) in + let rails = palette.compactMap { hex -> (String, Self.RGB)? in let color = WorkspaceTabColorSettings.displayNSColor(hex: hex, colorScheme: .light, forceBright: true) #expect(color != nil, "\(hex) does not parse") - return (hex, color.map(Self.srgb) ?? (0, 0, 0)) + guard let color else { return nil } + return (hex, Self.srgb(color)) } + guard rails.count == palette.count else { return } for i in rails.indices { for j in rails.indices where j > i { let distance = Self.deltaE(rails[i].1, rails[j].1) @@ -133,6 +143,9 @@ import Testing let distance = Self.deltaE(rgb, sidebarGrey) #expect(distance >= 15, "\(hex) differs from the grey sidebar by \(distance)") } + // This floor is for cmux's built-in blue accent. A custom accent is + // user-controlled and may intentionally match a palette color, so no + // universal contrast guarantee is possible for arbitrary custom accents. for scheme in [ColorScheme.light, .dark] { let selection = Self.srgb(CmuxAccentColor(mode: .cmux).nsColor(isDark: scheme == .dark)) for (hex, rgb) in rails { diff --git a/cmuxTests/RemoteHostTitleSuffixesTests.swift b/cmuxTests/RemoteHostTitleSuffixesTests.swift index ed94ce1cd332..d15d75d5151b 100644 --- a/cmuxTests/RemoteHostTitleSuffixesTests.swift +++ b/cmuxTests/RemoteHostTitleSuffixesTests.swift @@ -11,6 +11,8 @@ import Testing /// the host they show, and that the sidebar snapshot carries and displays it. @MainActor @Suite struct RemoteHostTitleSuffixesTests { + private let helper = RemoteHostTitleSuffixes() + private func entry(_ title: String, _ destination: String?) -> RemoteHostTitleSuffixes.Entry { RemoteHostTitleSuffixes.Entry(id: UUID(), title: title, destination: destination) } @@ -18,7 +20,7 @@ import Testing @Test func twoHostsWithTheSameTitleShowWhatTellsThemApart() { let a = entry("main", "user@web1.us-east.example.com") let b = entry("main", "user@web2.eu-west.example.com") - let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + let suffixes = helper.suffixes(for: [a, b]) #expect(suffixes[a.id] == "web1.us-east") #expect(suffixes[b.id] == "web2.eu-west") } @@ -26,7 +28,7 @@ import Testing @Test func aRemoteWorkspaceBesideALocalOneShowsItsWholeHost() { let local = entry("main", nil) let remote = entry("main", "user@box.example.com") - let suffixes = RemoteHostTitleSuffixes.suffixes(for: [local, remote]) + let suffixes = helper.suffixes(for: [local, remote]) #expect(suffixes[local.id] == nil) #expect(suffixes[remote.id] == "box.example.com") } @@ -34,14 +36,14 @@ import Testing @Test func titlesThatDoNotCollideGetNoHost() { let a = entry("main", "a.example.com") let b = entry("work", "b.example.com") - #expect(RemoteHostTitleSuffixes.suffixes(for: [a, b]).isEmpty) + #expect(helper.suffixes(for: [a, b]).isEmpty) } @Test func workspacesOnOneHostGetNoHost() { // The host would not tell them apart, whichever user each one connects as. let a = entry("main", "user@box.example.com") let b = entry("main", "root@box.example.com") - #expect(RemoteHostTitleSuffixes.suffixes(for: [a, b]).isEmpty) + #expect(helper.suffixes(for: [a, b]).isEmpty) } @Test func aHostIsNeverTrimmedAway() { @@ -49,13 +51,13 @@ import Testing // stops the trim from emptying it. let a = entry("main", "example.com") let b = entry("main", "user@box.example.com") - let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + let suffixes = helper.suffixes(for: [a, b]) #expect(suffixes[a.id] == "example") #expect(suffixes[b.id] == "box.example") let bare = entry("main", "com") let named = entry("main", "box.example.com") - let short = RemoteHostTitleSuffixes.suffixes(for: [bare, named]) + let short = helper.suffixes(for: [bare, named]) #expect(short[bare.id] == "com") #expect(short[named.id] == "box.example.com") } @@ -63,13 +65,13 @@ import Testing @Test func ipAddressesKeepEveryLabel() { let a = entry("main", "user@192.168.1.20") let b = entry("main", "user@192.168.2.20") - let v4 = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + let v4 = helper.suffixes(for: [a, b]) #expect(v4[a.id] == "192.168.1.20") #expect(v4[b.id] == "192.168.2.20") let c = entry("main", "::ffff:192.168.1.10") let d = entry("main", "::ffff:192.168.2.10") - let mapped = RemoteHostTitleSuffixes.suffixes(for: [c, d]) + let mapped = helper.suffixes(for: [c, d]) #expect(mapped[c.id] == "::ffff:192.168.1.10") #expect(mapped[d.id] == "::ffff:192.168.2.10") } @@ -77,12 +79,12 @@ import Testing @Test func cloudVMsAreToldApartByTheirVMId() { // Managed Cloud VMs share one gateway destination, so its host would name them all the same. let gateway = "vm-a+cmux@vm-ssh.example.com" - #expect(RemoteHostTitleSuffixes.origin(destination: gateway, cloudVMID: "vm-a") == "vm-a") - #expect(RemoteHostTitleSuffixes.origin(destination: "user@box.example.com", cloudVMID: nil) == "user@box.example.com") - #expect(RemoteHostTitleSuffixes.origin(destination: nil, cloudVMID: nil) == nil) - let a = entry("main", RemoteHostTitleSuffixes.origin(destination: "vm-a+cmux@vm-ssh.example.com", cloudVMID: "vm-a")) - let b = entry("main", RemoteHostTitleSuffixes.origin(destination: "vm-b+cmux@vm-ssh.example.com", cloudVMID: "vm-b")) - let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + #expect(helper.origin(destination: gateway, cloudVMID: "vm-a") == "vm-a") + #expect(helper.origin(destination: "user@box.example.com", cloudVMID: nil) == "user@box.example.com") + #expect(helper.origin(destination: nil, cloudVMID: nil) == nil) + let a = entry("main", helper.origin(destination: "vm-a+cmux@vm-ssh.example.com", cloudVMID: "vm-a")) + let b = entry("main", helper.origin(destination: "vm-b+cmux@vm-ssh.example.com", cloudVMID: "vm-b")) + let suffixes = helper.suffixes(for: [a, b]) #expect(suffixes[a.id] == "vm-a") #expect(suffixes[b.id] == "vm-b") } @@ -90,16 +92,22 @@ import Testing @Test func hostsThatDifferInTheLastLabelKeepEveryLabel() { let a = entry("main", "10.0.0.1") let b = entry("main", "10.0.0.2") - let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b]) + let suffixes = helper.suffixes(for: [a, b]) #expect(suffixes[a.id] == "10.0.0.1") #expect(suffixes[b.id] == "10.0.0.2") } + @Test func hostPortAndOutOfRangeIPv4AreNotIPAddressLiterals() { + #expect(!helper.isIPAddress("web.example.com:22")) + #expect(!helper.isIPAddress("999.999.1.1")) + #expect(helper.isIPAddress("[2001:db8::1]")) + } + @Test func aThreeWayCollisionTrimsOnlyWhatEveryHostShares() { let a = entry("main", "web1.us.example.com") let b = entry("main", "web2.us.example.com") let c = entry("main", "web1.eu.example.com") - let suffixes = RemoteHostTitleSuffixes.suffixes(for: [a, b, c]) + let suffixes = helper.suffixes(for: [a, b, c]) #expect(suffixes[a.id] == "web1.us") #expect(suffixes[b.id] == "web2.us") #expect(suffixes[c.id] == "web1.eu") @@ -108,7 +116,7 @@ import Testing @Test func surroundingWhitespaceDoesNotHideACollision() { let a = entry("main", "a.example.com") let b = entry("main ", "b.example.com") - #expect(RemoteHostTitleSuffixes.suffixes(for: [a, b]).count == 2) + #expect(helper.suffixes(for: [a, b]).count == 2) } @Test func theRowDisplaysTheHostAfterTheTitle() { diff --git a/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift b/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift index fa4a0958fd01..701b959bf244 100644 --- a/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift +++ b/cmuxTests/SidebarWorkspaceSnapshotRefreshPolicyTests.swift @@ -209,6 +209,7 @@ import Testing customDescription: String? = nil, isPinned: Bool = false, customColorHex: String? = nil, + hasManualCustomColor: Bool? = nil, remoteConnectionStatusText: String = "Disconnected", latestConversationMessage: String? = nil, listeningPorts: [Int] = [], @@ -224,7 +225,7 @@ import Testing isPinned: isPinned, isMuted: false, customColorHex: customColorHex, - hasManualCustomColor: customColorHex != nil, + hasManualCustomColor: hasManualCustomColor ?? (customColorHex != nil), cloudWorkspaceLabel: nil, remoteWorkspaceSidebarText: nil, remoteConnectionStatusText: remoteConnectionStatusText, diff --git a/tests/test_cmux_schema_parity.py b/tests/test_cmux_schema_parity.py index 1acdf6ddccf4..ec83be5a9089 100644 --- a/tests/test_cmux_schema_parity.py +++ b/tests/test_cmux_schema_parity.py @@ -76,6 +76,9 @@ "customSidebars.beta.enabled", "extensions.beta.enabled", "remoteTmux.beta.enabled", + # Origin presentation remains a Settings-only beta preference. + "remoteTmux.beta.originColors.enabled", + "remoteTmux.beta.originHostTitles.enabled", "rightSidebar.beta.feed.enabled", # Device discovery and pairing state. "devices.discovery.enabled", From 48901f42260effa028b4c5299e78540bdec754a0 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Thu, 1 Oct 2026 20:44:51 -0700 Subject: [PATCH 20/26] fix: refresh manual color state and validate remote host inputs Co-Authored-By: Claude Opus 5.5 --- Sources/ContentView.swift | 1 + Sources/RemoteHostColorRegistry.swift | 2 +- Sources/RemoteHostTitleSuffixes.swift | 15 ++++++++++++--- Sources/SidebarWorkspaceSnapshotBuilder.swift | 2 ++ Sources/SidebarWorkspaceSnapshotFactory.swift | 3 +++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index ca0af291f87b..f84f4867af19 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -13022,6 +13022,7 @@ struct VerticalTabsSidebar: View, Equatable { workspace.customColor ?? originColorHex(for: workspace, mirrorDestinations: mirrorDestinations) }, + hasManualCustomColor: workspaceById[workspaceId]?.customColor != nil, hostTitleSuffix: hostTitleSuffixes[workspaceId] ) } diff --git a/Sources/RemoteHostColorRegistry.swift b/Sources/RemoteHostColorRegistry.swift index 12ec2a340c93..1b48010789ba 100644 --- a/Sources/RemoteHostColorRegistry.swift +++ b/Sources/RemoteHostColorRegistry.swift @@ -74,7 +74,7 @@ final class RemoteHostColorRegistry { private var hostBySlot: [Int: String] = [:] init(slotCount: Int? = nil) { - self.slotCount = max(0, slotCount ?? Self.hostPalette.count) + self.slotCount = min(max(0, slotCount ?? Self.hostPalette.count), Self.hostPalette.count) } /// The palette slot for `destination`, assigning one on first sight (stable diff --git a/Sources/RemoteHostTitleSuffixes.swift b/Sources/RemoteHostTitleSuffixes.swift index 05ac6d97f4d3..8a057950758e 100644 --- a/Sources/RemoteHostTitleSuffixes.swift +++ b/Sources/RemoteHostTitleSuffixes.swift @@ -57,9 +57,18 @@ struct RemoteHostTitleSuffixes { /// Whether a host is an IPv4 or IPv6 literal rather than a name. func isIPAddress(_ host: String) -> Bool { - if host.contains(":") { return true } - let labels = host.split(separator: ".", omittingEmptySubsequences: false) - return labels.count == 4 && labels.allSatisfy { !$0.isEmpty && $0.allSatisfy(\.isNumber) } + let candidate: String + if host.hasPrefix("[") && host.hasSuffix("]") { + candidate = String(host.dropFirst().dropLast()) + } else { + candidate = host + } + var ipv4 = in_addr() + if candidate.withCString({ inet_pton(AF_INET, $0, &ipv4) }) == 1 { + return true + } + var ipv6 = in6_addr() + return candidate.withCString({ inet_pton(AF_INET6, $0, &ipv6) }) == 1 } /// The host part of a destination: everything after the last `@`, trimmed. diff --git a/Sources/SidebarWorkspaceSnapshotBuilder.swift b/Sources/SidebarWorkspaceSnapshotBuilder.swift index 7b04d6eb702e..239d2c70764c 100644 --- a/Sources/SidebarWorkspaceSnapshotBuilder.swift +++ b/Sources/SidebarWorkspaceSnapshotBuilder.swift @@ -19,6 +19,8 @@ struct SidebarWorkspaceSnapshotBuilder { // neither of which is a Workspace @Published change that would otherwise // refresh the snapshot. let customColorHex: String? + // Clear Color availability can change without changing the rendered color. + var hasManualCustomColor = false // Host named after a colliding title (beta). Part of the key because it depends on the other // workspaces' titles, so a rename elsewhere must rebuild this row's cached snapshot. var hostTitleSuffix: String? = nil diff --git a/Sources/SidebarWorkspaceSnapshotFactory.swift b/Sources/SidebarWorkspaceSnapshotFactory.swift index 071a8b848b60..57a5efde6e95 100644 --- a/Sources/SidebarWorkspaceSnapshotFactory.swift +++ b/Sources/SidebarWorkspaceSnapshotFactory.swift @@ -175,6 +175,7 @@ struct SidebarWorkspaceSnapshotFactory { settings: settings, showsAgentActivity: showsAgentActivity, customColorHex: workspace.customColor ?? originColorHex, + hasManualCustomColor: workspace.customColor != nil, hostTitleSuffix: hostTitleSuffix ) } @@ -183,6 +184,7 @@ struct SidebarWorkspaceSnapshotFactory { settings: SidebarTabItemSettingsSnapshot, showsAgentActivity: Bool, customColorHex: String?, + hasManualCustomColor: Bool = false, hostTitleSuffix: String? = nil ) -> SidebarWorkspaceSnapshotBuilder.PresentationKey { SidebarWorkspaceSnapshotBuilder.PresentationKey( @@ -195,6 +197,7 @@ struct SidebarWorkspaceSnapshotFactory { compactStatusIcons: settings.compactStatusIcons, visibleAuxiliaryDetails: settings.visibleAuxiliaryDetails, customColorHex: customColorHex, + hasManualCustomColor: hasManualCustomColor, hostTitleSuffix: hostTitleSuffix ) } From 1305970bd28fbf23dc2dcdef4015cda5d6059517 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Thu, 1 Oct 2026 20:50:10 -0700 Subject: [PATCH 21/26] chore: keep remote-origin translations in a minimal catalog diff Co-Authored-By: Claude Opus 5.5 --- Resources/Localizable.xcstrings | 14904 +++++++++++++++--------------- 1 file changed, 7432 insertions(+), 7472 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 4cf56c11b5f3..cd59496b1979 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -2750,6 +2750,131 @@ } } }, + "cloudPane.attachment.reason.staleDaemon": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "this Cloud machine is running an older terminal runtime; upgrade it, then retry" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "auf dieser Cloud-Maschine läuft eine ältere Terminal-Laufzeit; aktualisiere sie und versuche es erneut" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "cette machine Cloud utilise une ancienne version du moteur de terminal ; mettez-la à jour, puis réessayez" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يعمل على جهاز Cloud هذا إصدار أقدم من تشغيل الطرفية؛ حدّث الجهاز ثم أعد المحاولة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "esta máquina de Cloud usa un runtime de terminal antiguo; actualízala y vuelve a intentarlo" + } + }, + "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": "ova Cloud mašina koristi starije izvršno okruženje terminala; nadogradite je pa pokušajte ponovo" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "denne Cloud-maskine kører en ældre terminalruntime; opgrader den, og prøv igen" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "questa macchina Cloud esegue un runtime del terminale meno recente; aggiornala e riprova" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ម៉ាស៊ីន Cloud នេះកំពុងដំណើរការ runtime ស្ថានីយចាស់ជាងនេះ; ធ្វើបច្ចុប្បន្នភាព រួចព្យាយាមម្ដងទៀត" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "denne Cloud-maskinen kjører en eldre terminalruntime; oppgrader den og prøv igjen" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "ta maszyna Cloud korzysta ze starszego środowiska uruchomieniowego terminala; zaktualizuj ją i spróbuj ponownie" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "esta máquina Cloud está executando um runtime de terminal antigo; atualize-a e tente novamente" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "на этой Cloud-машине используется старая среда выполнения терминала; обновите её и повторите попытку" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "เครื่อง Cloud นี้กำลังใช้รันไทม์เทอร์มินัลรุ่นเก่า โปรดอัปเกรดแล้วลองอีกครั้ง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "bu Cloud makinesi daha eski bir terminal çalışma zamanı kullanıyor; yükseltip tekrar deneyin" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "на цій Cloud-машині працює старіше середовище термінала; оновіть її та повторіть спробу" + } + } + } + }, "cloudTree.error.terminalAttachTimedOut": { "extractionState": "manual", "localizations": { @@ -115600,65 +115725,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": { @@ -261380,6 +261446,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": { @@ -353429,124 +353870,6 @@ } } }, - "settings.search.alias.setting.betaFeatures.remote-tmux-origin-colors": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リモートホストの色 接続元 カラー 色合い ホストごと サーバー ワークスペース サイドバー 行 タブ ベータ 不安定" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Remote-Host-Farben Herkunft Farbe Tönung pro Host Server Arbeitsbereich Seitenleiste Zeile Tab Beta instabil" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleurs des hôtes distants origine couleur teinte par hôte serveur espace de travail barre latérale ligne onglet bêta instable" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "ألوان المضيف البعيد الأصل لون تلوين لكل مضيف خادم مساحة عمل شريط جانبي صف علامة تبويب تجريبي غير مستقر" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Colores de hosts remotos origen color tinte por host servidor espacio de trabajo barra lateral fila pestaña beta inestable" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "遠端主機顏色 來源 色彩 著色 每台主機 伺服器 工作區 側邊欄 列 分頁 測試版 不穩定" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "远程主机颜色 来源 色彩 着色 每台主机 服务器 工作区 侧边栏 行 标签页 测试版 不稳定" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "원격 호스트 색상 출처 색 색조 호스트별 서버 작업 공간 사이드바 행 탭 베타 불안정" - } - } - } - }, - "settings.search.alias.setting.betaFeatures.remote-tmux-origin-host-titles": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "重複タイトルにリモートホスト名を表示 ホスト名 サーバー 重複 同じタイトル 衝突 ワークスペース サイドバー 行 ベータ 不安定" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Remote-Host-Namen bei gleichen Titeln Hostname Server doppelt gleicher Titel Kollision Arbeitsbereich Seitenleiste Zeile Beta instabil" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Noms des hôtes distants pour les titres identiques nom hôte serveur doublon même titre conflit espace de travail barre latérale ligne bêta instable" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "أسماء المضيف البعيد للعناوين المكررة اسم المضيف خادم مكرر نفس العنوان تعارض مساحة عمل شريط جانبي صف تجريبي غير مستقر" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombres de hosts remotos en títulos duplicados nombre host servidor duplicado mismo título colisión espacio de trabajo barra lateral fila beta inestable" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "重複標題顯示遠端主機名稱 主機名稱 伺服器 重複 相同標題 衝突 工作區 側邊欄 列 測試版 不穩定" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "重复标题显示远程主机名称 主机名 服务器 重复 相同标题 冲突 工作区 侧边栏 行 测试版 不稳定" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "중복 제목의 원격 호스트 이름 호스트명 서버 중복 같은 제목 충돌 작업 공간 사이드바 행 베타 불안정" - } - } - } - }, "settings.search.alias.setting.betaFeatures.workspace-todo-controls": { "extractionState": "manual", "localizations": { @@ -402627,65 +402950,6 @@ } } }, - "sidebar.workspace.titleWithHost": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" - } - } - } - }, "simulator.accessibility.nextPage": { "extractionState": "manual", "localizations": { @@ -451702,65 +451966,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": { @@ -550238,54 +550443,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": { @@ -556667,360 +556832,6 @@ } } }, - "settings.betaFeatures.remoteTmuxOriginColors": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "ألوان المضيفين البعيدين" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Farben für Remote-Hosts" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Remote host colors" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Colores de hosts remotos" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleurs des hôtes distants" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リモートホストの色" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "원격 호스트 색상" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "远程主机颜色" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "遠端主機顏色" - } - } - } - }, - "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "تبقى مساحات العمل البعيدة بلا لون للمصدر حتى تفعّل هذا الخيار هنا." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Remote-Arbeitsbereiche erhalten keine Herkunftsfarbe, bis du diese Option hier aktivierst." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Leaves remote workspaces without an origin color until you enable it here." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Los espacios de trabajo remotos no tienen color de origen hasta que lo actives aquí." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Les espaces de travail distants restent sans couleur d’origine tant que vous ne l’activez pas ici." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ここで有効にするまで、リモートワークスペースにオリジンカラーを表示しません。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여기에서 활성화하기 전까지 원격 작업 공간에는 출처 색상이 표시되지 않습니다." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "在此处启用之前,远程工作区不会显示来源颜色。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "在此處啟用之前,遠端工作區不會顯示來源顏色。" - } - } - } - }, - "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "يُلوّن صف كل مساحة عمل بعيدة في الشريط الجانبي بلون ثابت خاص بكل مضيف لتسهيل التمييز بين الخوادم. يبقى اللون الذي تختاره يدويًا لمساحة العمل هو المُعتمد دائمًا." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Färbt die Seitenleistenzeile jedes Remote-Arbeitsbereichs mit einer festen Farbe pro Host, damit sich Server leicht unterscheiden lassen. Eine manuell gewählte Arbeitsbereichsfarbe hat immer Vorrang." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Tints each remote workspace's sidebar row with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tiñe la fila de la barra lateral de cada espacio de trabajo remoto con un color estable por host para distinguir fácilmente los servidores. El color que asignes manualmente al espacio de trabajo siempre tiene prioridad." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Teinte la ligne de la barre latérale de chaque espace de travail distant avec une couleur stable par hôte, pour distinguer facilement les serveurs. La couleur choisie manuellement pour un espace de travail l’emporte toujours." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "各リモートワークスペースのサイドバー行を、ホストごとに固定された色で色付けし、サーバーを見分けやすくします。手動で設定したワークスペースの色が常に優先されます。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "각 원격 작업 공간의 사이드바 행에 호스트별 고정 색상을 입혀 서버를 쉽게 구분할 수 있습니다. 직접 지정한 작업 공간 색상이 항상 우선합니다." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "为每个远程工作区的侧边栏行添加按主机固定的颜色,便于区分服务器。你手动设置的工作区颜色始终优先。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "為每個遠端工作區的側邊欄列加上依主機固定的顏色,方便區分伺服器。你手動設定的工作區顏色一律優先。" - } - } - } - }, - "settings.betaFeatures.remoteTmuxOriginHostTitles": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "أسماء المضيفين البعيدين في العناوين المكررة" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Remote-Hostnamen bei doppelten Titeln" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Remote host names on duplicate titles" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombres de hosts remotos en títulos duplicados" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Noms des hôtes distants dans les titres en double" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "重複したタイトルにリモートホスト名を表示" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "중복된 제목에 원격 호스트 이름 표시" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "在重复标题中显示远程主机名" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "在重複標題中顯示遠端主機名稱" - } - } - } - }, - "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOff": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "تبقى عناوين مساحات العمل المكررة كما هي حتى تفعّل هذا الخيار هنا." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Doppelte Arbeitsbereichstitel bleiben unverändert, bis du diese Option hier aktivierst." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Leaves duplicate workspace titles as they are until you enable it here." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Los títulos duplicados de los espacios de trabajo se mantienen igual hasta que lo actives aquí." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Les titres d’espaces de travail en double restent tels quels tant que vous ne l’activez pas ici." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ここで有効にするまで、重複したワークスペースのタイトルはそのまま表示されます。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여기에서 활성화하기 전까지 중복된 작업 공간 제목은 그대로 표시됩니다." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "在此处启用之前,重复的工作区标题保持不变。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "在此處啟用之前,重複的工作區標題維持不變。" - } - } - } - }, - "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOn": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "عندما تتشارك مساحات العمل عنوانًا واحدًا، يُعرض اسم مضيف كل مساحة بعيدة بعد العنوان دون النطاق المشترك بين المضيفين." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Wenn Arbeitsbereiche denselben Titel haben, wird bei jedem Remote-Arbeitsbereich der Host nach dem Titel angezeigt, ohne die gemeinsame Domain der Hosts." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "When workspaces share a title, shows each remote one's host after the title, leaving off the domain the hosts share." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cuando varios espacios de trabajo comparten título, muestra el host de cada espacio remoto después del título, sin el dominio que comparten los hosts." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Lorsque des espaces de travail portent le même titre, affiche l’hôte de chaque espace distant après le titre, sans le domaine que les hôtes partagent." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースのタイトルが重複している場合、各リモートワークスペースのタイトルの後にホスト名を表示します。ホストに共通するドメインは省略します。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "작업 공간의 제목이 같으면 각 원격 작업 공간의 제목 뒤에 호스트 이름을 표시하며, 호스트에 공통된 도메인은 생략합니다." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "当多个工作区标题相同时,在每个远程工作区的标题后显示主机名,并省略这些主机共有的域名。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "當多個工作區標題相同時,在每個遠端工作區的標題後顯示主機名稱,並省略這些主機共用的網域。" - } - } - } - }, "settings.betaFeatures.workspaceTodoControls.subtitle": { "extractionState": "manual", "localizations": { @@ -565759,131 +565570,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": { @@ -567654,6 +567340,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": { @@ -568404,626 +568215,126 @@ } } }, - "devices.link.error.notDiscoverable": { + "command.newPaneAutoLayout.title": { "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」。" + "value": "لوحة جديدة (تخطيط تلقائي)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovaj Mac nije vidljiv. Na tom Macu uključite „Učini ovaj Mac vidljivim” u Postavke › Uređaji." + "value": "Novi panel (automatski raspored)" } }, "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": " 团队: 未加载" + "value": "Nyt panel (automatisk layout)" } }, "de": { "stringUnit": { "state": "translated", - "value": " Team: nicht geladen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": " équipe: non chargée" + "value": "Neuer Bereich (automatisches Layout)" } }, - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": " الفريق: لم يتم تحميله" + "value": "New Pane (Auto Layout)" } }, "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" + "value": "Nuevo panel (diseño automático)" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": " team: ikke indlæst" + "value": "Nouveau panneau (disposition automatique)" } }, "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)" + "value": "Nuovo pannello (layout automatico)" } }, "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": " 團隊: 未載入(重試中)" + "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": " ក្រុម៖ មិនទាន់បានផ្ទុក (កំពុងព្យាយាមម្ដងទៀត)" + "value": "새 패널 (자동 레이아웃)" } }, "nb": { "stringUnit": { "state": "translated", - "value": " team: ikke lastet (prøver igjen)" + "value": "Nytt panel (automatisk oppsett)" } }, "pl": { "stringUnit": { "state": "translated", - "value": " zespół: nie załadowano (ponawianie próby)" + "value": "Nowy panel (układ automatyczny)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": " equipe: não carregada (tentando novamente)" + "value": "Novo Painel (Layout Automático)" } }, "ru": { "stringUnit": { "state": "translated", - "value": " команда: не загружена (повторная попытка)" + "value": "Новая панель (автоматическая раскладка)" } }, "th": { "stringUnit": { "state": "translated", - "value": " ทีม: ยังไม่ได้โหลด (กำลังลองอีกครั้ง)" + "value": "บานหน้าต่างใหม่ (จัดวางอัตโนมัติ)" } }, "tr": { "stringUnit": { "state": "translated", - "value": " ekip: yüklenmedi (yeniden deneniyor)" + "value": "Yeni Bölme (Otomatik Düzen)" } }, "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 チームを読み込めませんでした。インターネット接続を確認してから、もう一度お試しください。" + "value": "Нова панель (автоматичне розташування)" } }, "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." + "value": "新建窗格(自动布局)" } }, "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. Перевірте підключення до інтернету й спробуйте ще раз." + "value": "新增窗格(自動佈局)" } } } }, - "command.newPaneAutoLayout.title": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لوحة جديدة (تخطيط تلقائي)" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Novi panel (automatski raspored)" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Nyt panel (automatisk layout)" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Neuer Bereich (automatisches Layout)" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "New Pane (Auto Layout)" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nuevo panel (diseño automático)" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nouveau panneau (disposition automatique)" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Nuovo pannello (layout automatico)" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "新しいペイン(自動レイアウト)" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "새 패널 (자동 레이아웃)" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Nytt panel (automatisk oppsett)" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Nowy panel (układ automatyczny)" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Novo Painel (Layout Automático)" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Новая панель (автоматическая раскладка)" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "บานหน้าต่างใหม่ (จัดวางอัตโนมัติ)" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Yeni Bölme (Otomatik Düzen)" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Нова панель (автоматичне розташування)" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "新建窗格(自动布局)" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "新增窗格(自動佈局)" - } - } - } - }, - "shortcut.newPaneAutoLayout.label": { + "shortcut.newPaneAutoLayout.label": { "extractionState": "manual", "localizations": { "ar": { @@ -569199,70 +568510,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 ще відновлює термінал після повторного відкриття та перевіряє, який сеанс агента відновити. Спробуйте ще раз за кілька секунд." } } } @@ -569324,70 +568635,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" : "Термінал закривається, і його не можна прочитати." } } } @@ -569449,70 +568760,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 призупинив неактивного агента, щоб заощадити пам’ять. Розбудіть його, показавши термінал (його вікно перейде на передній план), і спробуйте ще раз: %@" } } } @@ -569574,70 +568885,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, щоб розбудити його, і спробуйте ще раз." } } } @@ -569699,70 +569010,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" : "Термінал ще не запущено. Спробуйте ще раз за кілька секунд." } } } @@ -570593,242 +569904,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": { @@ -571655,6 +570730,541 @@ } } }, + "cli.restore.notice.routedLauncherUnavailable": { + "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." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" + } + }, + "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." + } + }, + "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." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." + } + }, + "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." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." + } + } + } + }, + "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": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" + } + } + } + }, "agent.claude.stopFailure.body.generic": { "extractionState": "manual", "localizations": { @@ -572245,14330 +571855,13736 @@ } } }, - "settings.app.reorderOnNotification.mode.agentActivity": { + "sidebar.extensions.action.noSpaceForPane": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "نشاط الوكيل" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Aktivnost agenata" + "value": "No space for new pane" } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "لا توجد مساحة للوحة جديدة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agentenaktivität" + "value": "Kein Platz für einen neuen Bereich" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Agent Activity" + "value": "No hay espacio para un panel nuevo" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Actividad de agentes" + "value": "Pas de place pour un nouveau panneau" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Activité des agents" + "value": "新しいペインを置く場所がありません" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Attività degli agenti" + "value": "새 창을 위한 공간이 없습니다" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "エージェントのアクティビティ" + "value": "没有空间容纳新窗格" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "에이전트 활동" + "value": "沒有空間容納新窗格" } - }, - "nb": { + } + } + }, + "cli.focus.defaultHelp": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "Default: focus when run interactively, stay in the background when run by an agent or script." } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Aktywność agentów" + "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Atividade dos agentes" + "value": "Standard: bei interaktiver Ausführung fokussieren, bei Ausführung durch einen Agenten oder ein Skript im Hintergrund bleiben." } }, - "ru": { + "fr": { "stringUnit": { "state": "translated", - "value": "Активность агентов" + "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." } }, - "th": { + "ar": { "stringUnit": { "state": "translated", - "value": "กิจกรรมของเอเจนต์" + "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." } }, - "tr": { + "es": { "stringUnit": { "state": "translated", - "value": "Ajan etkinliği" + "value": "Predeterminado: enfoca al ejecutarse de forma interactiva y se queda en segundo plano cuando lo ejecuta un agente o un script." } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Активність агентів" + "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "代理活动" + "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "代理活動" + "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." } } } }, - "settings.app.reorderOnNotification.mode.notifications": { + "cli.help.openFocusFlags": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "الإشعارات" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Obavještenja" + "value": "Focus:\n --focus Switch to the new workspace\n --no-focus Open it in the background" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Notifikationer" + "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen" + "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Notifications" + "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Notificaciones" + "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Sur notification" + "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" } }, - "it": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Notifiche" + "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림" + "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" } - }, - "nb": { + } + } + }, + "settings.app.compactAgentStatus": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Varsler" + "value": "Compact Agent Status" } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Powiadomienia" + "value": "حالة الوكيل المختصرة" } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Notificações" + "value": "Kompakter Agentenstatus" } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Уведомления" + "value": "Estado de agente compacto" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "การแจ้งเตือน" + "value": "Statut d’agent compact" } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Bildirimler" + "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.off": { + "settings.app.compactAgentStatus.subtitle": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "إيقاف" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Isključeno" + "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." } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fra" + "value": "إظهار حالة الوكيل والعناصر غير المقروءة وطلب السحب لمساحة العمل كأيقونة ملونة واحدة قبل العنوان بدلاً من صفوف منفصلة. مرّر المؤشر فوق الأيقونة لعرض التفاصيل." } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus" + "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." } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Off" + "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." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Desactivado" + "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." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Disattivato" + "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "끔" + "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" } - }, - "nb": { + } + } + }, + "settings.search.alias.setting.app.compact-agent-status": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Av" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex مختصر وكيل حالة أيقونة سطر العنوان" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Wyłączone" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex kompakt Agent Status Symbol Titelzeile" } }, - "pt-BR": { + "en": { "stringUnit": { "state": "translated", - "value": "Desativado" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Выкл." + "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" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compact agent statut icône ligne de titre" } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Kapalı" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Вимкнено" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" } }, "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.modeSubtitle": { + "sidebar.agentStatus.glyph.tooltip": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "ينقل مساحات العمل إلى الأعلى عندما تتلقى إشعارًا. مع نشاط الوكيل، ينقلها أيضًا عندما ترسل مطالبة أو ينهي وكيل دورة أو يحتاج إلى إدخال أو يفشل، لكن ليس أبدًا أثناء وجود المؤشر فوق الشريط الجانبي. الإيقاف يحافظ على ثبات مواضع الاختصارات." - } - }, - "bs": { + "en": { "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": "%1$@: %2$@" } }, - "da": { + "ar": { "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": "%1$@: %2$@" } }, "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." + "value": "%1$@: %2$@" } }, - "en": { + "es": { "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": "%1$@: %2$@" } }, - "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": "%1$@ : %2$@" } }, - "fr": { + "ja": { "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": "%1$@:%2$@" } }, - "it": { + "ko": { "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": "%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": "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": "Profile" } }, - "pl": { + "ar": { "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": { + "de": { "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": "Profil" } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Перемещает рабочие области наверх, когда они получают уведомление. «Активность агентов» также перемещает их, когда вы отправляете запрос или агент завершает ход, ждёт ввода или завершается с ошибкой, но никогда, пока указатель находится над боковой панелью. «Выкл.» сохраняет позиции сочетаний клавиш." + "value": "Perfil" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "ย้ายเวิร์กสเปซขึ้นด้านบนเมื่อได้รับการแจ้งเตือน กิจกรรมของเอเจนต์จะย้ายเมื่อคุณส่งพรอมต์หรือเอเจนต์จบรอบ ต้องการข้อมูล หรือล้มเหลวด้วย แต่จะไม่ย้ายขณะที่ตัวชี้อยู่เหนือแถบด้านข้าง ปิดจะคงตำแหน่งของทางลัดไว้" + "value": "Profil" } }, - "tr": { + "ja": { "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": { + "ko": { "stringUnit": { "state": "translated", - "value": "Переміщує робочі області вгору, коли вони отримують сповіщення. «Активність агентів» також переміщує їх, коли ви надсилаєте запит або агент завершує хід, чекає на введення або завершується з помилкою, але ніколи, поки вказівник над бічною панеллю. «Вимкнено» зберігає позиції скорочень." + "value": "프로필" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区收到通知时移到顶部。选择“代理活动”时,你发送提示词或代理完成一轮、需要输入或失败时也会移动,但指针停在侧边栏上时绝不移动。关闭可让快捷键位置保持不变。" + "value": "配置文件" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" + "value": "設定檔" } } } }, - "cli.restore.notice.routedLauncherUnavailable": { + "shortcut.sizeTerminalToMyWindow.label": { "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": "Size Terminal to My Window" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" + "value": "ضبط حجم الطرفية على نافذتي" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" + "value": "Terminal an mein Fenster anpassen" } }, - "de": { + "es": { "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": "Ajustar la terminal a mi ventana" } }, "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": "Adapter le terminal à ma fenêtre" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." + "value": "ターミナルを自分のウィンドウに合わせる" } }, - "es": { + "ko": { "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": "터미널을 내 창 크기에 맞추기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" + "value": "让终端适配我的窗口" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." + "value": "讓終端機符合我的視窗大小" } } } }, - "sidebar.extensions.action.noSpaceForPane": { + "command.terminalDisconnectOtherClients.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No space for new pane" + "value": "Disconnect Other Terminal Clients…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد مساحة للوحة جديدة" + "value": "قطع اتصال عملاء الطرفية الآخرين…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Platz für einen neuen Bereich" + "value": "Andere Terminal-Clients trennen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay espacio para un panel nuevo" + "value": "Desconectar otros clientes de la terminal…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pas de place pour un nouveau panneau" + "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": "中斷其他終端機用戶端的連線…" } } } }, - "cli.focus.defaultHelp": { + "command.terminalShowSizePanel.title": { "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": "Show Terminal Size Panel" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" + "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": "Terminalgrößen-Bereich anzeigen" } }, - "fr": { + "es": { "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": "Mostrar el panel de tamaño de la terminal" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." + "value": "Afficher le panneau de taille du terminal" } }, - "es": { + "ja": { "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": "ターミナルサイズパネルを表示" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" + "value": "터미널 크기 패널 보기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" + "value": "显示终端大小面板" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." + "value": "顯示終端機大小面板" } } } }, - "cli.help.openFocusFlags": { + "command.terminalSizeToMyWindow.title": { "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": "Size Terminal to My Window" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" + "value": "ضبط حجم الطرفية على نافذتي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" + "value": "Terminal an mein Fenster anpassen" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" + "value": "Ajustar la terminal a mi ventana" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" + "value": "Adapter le terminal à ma fenêtre" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" + "value": "ターミナルを自分のウィンドウに合わせる" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" + "value": "터미널을 내 창 크기에 맞추기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" + "value": "让终端适配我的窗口" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" + "value": "讓終端機符合我的視窗大小" } } } }, - "settings.app.compactAgentStatus": { + "terminalSharing.detached.hostShutdown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Compact Agent Status" + "value": "The terminal host shut down at %@." } }, "ar": { "stringUnit": { "state": "translated", - "value": "حالة الوكيل المختصرة" + "value": "توقف مضيف الطرفية في %@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Kompakter Agentenstatus" + "value": "Der Terminal-Host wurde um %@ beendet." } }, "es": { "stringUnit": { "state": "translated", - "value": "Estado de agente compacto" + "value": "El host de la terminal se detuvo a las %@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Statut d’agent compact" + "value": "L’hôte du terminal s’est arrêté à %@." } }, "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": { + "terminalSharing.detached.network": { "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": "The network dropped." } }, "ar": { "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": "Die Netzwerkverbindung wurde unterbrochen." } }, "es": { "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": "Se perdió la conexión de red." } }, "fr": { "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": "La connexion réseau a été interrompue." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" + "value": "ネットワーク接続が切れました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." + "value": "네트워크 연결이 끊어졌습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" + "value": "网络连接已中断。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" + "value": "網路連線中斷。" } } } }, - "settings.search.alias.setting.app.compact-agent-status": { + "terminalSharing.detached.reattach": { "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": "Reattach" } }, - "de": { + "ar": { "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": "إعادة الإرفاق" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" + "value": "Erneut verbinden" } }, "es": { "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": "Volver a conectar" } }, "fr": { "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": "Se reconnecter" } }, "ja": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" + "value": "再接続" } }, "ko": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" + "value": "다시 연결" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" + "value": "重新连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精簡 代理 狀態 圖示 標題列" + "value": "重新連接" } } } }, - "sidebar.agentStatus.glyph.tooltip": { + "terminalSharing.detached.reattachAsViewer": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Reattach as Viewer" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "إعادة الإرفاق كمشاهد" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Als Zuschauer erneut verbinden" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Volver a conectar como espectador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : %2$@" + "value": "Se reconnecter en lecture seule" } }, "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": { + "terminalSharing.detached.reattachAsViewer.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Profile" + "value": "Reattach without changing the terminal size" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الملف الشخصي" + "value": "إعادة الإرفاق دون تغيير حجم الطرفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" } }, "es": { "stringUnit": { "state": "translated", - "value": "Perfil" + "value": "Volver a conectar sin cambiar el tamaño de la terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "Se reconnecter sans modifier la taille 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": { + "terminalSharing.detached.someone": { "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": "Someone" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "コマンドの開始後 10 秒以内に cmux が応答しなかったため、結果は不明です。再試行する前に効果を確認してください。" + "value": "شخص ما" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "命令开始后 10 秒内 cmux 没有响应,因此结果未知。请先确认效果再重试。" + "value": "Jemand" } }, - "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": "Alguien" } }, "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": "Quelqu’un" } }, - "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": { + "terminalSharing.detached.superseded": { "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": "Another window of this Mac replaced this one at %@." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux が 10 秒以内に応答しなかったため、コマンドは実行されませんでした。しばらくしてから再試行してください。" + "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒内没有响应,因此未运行该命令。请稍后重试。" + "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." } }, - "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": "Otra ventana de este Mac reemplazó a esta a las %@." } }, "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": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يستجب cmux خلال 10 ثوانٍ، لذا لم يتم تنفيذ الأمر. أعد المحاولة بعد لحظات." + "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" } }, - "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": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒內沒有回應,因此未執行該命令。請稍後重試。" + "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 10초 안에 응답하지 않아 명령이 실행되지 않았습니다. 잠시 후 다시 시도하세요." + "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" } } } }, - "socket.overloaded.message": { + "terminalSharing.participant.personDevice": { "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": "%1$@ · %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux は現在、制御ソケットの要求を処理しきれないため、この要求は実行されませんでした。しばらくしてから再試行してください。" + "value": "%1$@ · %2$@" + } + } + } + }, + "terminalSharing.device.browser": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Browser" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux 当前正在处理过多的控制套接字请求,因此未运行此请求。请稍后重试。" + "value": "المتصفح" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux verarbeitet gerade zu viele Control-Socket-Anfragen, diese wurde daher nicht ausgeführt. Versuche es gleich noch einmal." + "value": "Browser" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Navegador" } }, "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": "Navigateur" } }, - "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.device.ipad": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request was cancelled" + "value": "iPad" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リクエストはキャンセルされました" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "请求已取消" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die Anfrage wurde abgebrochen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "La requête a été annulée" + "value": "iPad" } - }, - "ar": { + } + } + }, + "terminalSharing.device.iphone": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "تم إلغاء الطلب" + "value": "iPhone" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Se canceló la solicitud" + "value": "iPhone" } - }, - "zh-Hant": { + } + } + }, + "terminalSharing.device.mac": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "請求已取消" + "value": "Mac" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "요청이 취소되었습니다" + "value": "Mac" } } } }, - "socket.request.failedBeforeResult": { + "terminalSharing.device.tui": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request failed before returning a result" + "value": "Terminal client" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "結果を返す前にリクエストが失敗しました" + "value": "عميل طرفية" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "请求在返回结果之前失败" + "value": "Terminal-Client" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Anfrage ist fehlgeschlagen, bevor ein Ergebnis zurückgegeben wurde" + "value": "Cliente de terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La requête a échoué avant de renvoyer un résultat" + "value": "Client terminal" } }, - "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.device.unknown": { "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": "Device" } }, - "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": "Gerät" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux no pudo identificar la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." + "value": "Dispositivo" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 無法識別新的分支工作階段。請從父窗格重新開始分支。" + "value": "Appareil" } }, - "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.owner.held": { + "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": "Held 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": "Beibehaltene Größe" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł zidentyfikować nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "value": "Tamaño conservado" } }, - "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": "Taille conservée" } }, - "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.owner.largest": { "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": "Largest window" } }, - "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." - } - }, - "fr": { - "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." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذر على cmux ربط جلسة التفريع الجديدة بأمان. أعد بدء التفريع من الجزء الأصلي." + "value": "Größtes Fenster" } }, "es": { "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": "Ventana más grande" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 無法安全繫結新的分支工作階段。請從父窗格重新開始分支。" + "value": "Plus grande fenêtre" } }, - "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 sigurno povezati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." + "value": "最大的窗口" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke binde den nye forgreningssession sikkert. Start forgreningen igen fra forældreruden." + "value": "最大的視窗" } - }, - "it": { + } + } + }, + "terminalSharing.owner.shared": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux non ha potuto associare in sicurezza la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." + "value": "Shared size" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux មិនអាចភ្ជាប់សម័យ fork ថ្មីដោយសុវត្ថិភាពបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" + "value": "حجم مشترك" } }, - "nb": { + "de": { "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": "Gemeinsame Größe" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł bezpiecznie powiązać nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "value": "Tamaño compartido" } }, - "pt-BR": { + "fr": { "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": "Taille partagée" } }, - "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 güvenli bir şekilde bağlayamadı. Fork'u üst panelden yeniden başlatın." + "value": "共享大小" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux не вдалося безпечно прив’язати новий сеанс форка. Запустіть форк ще раз із батьківської панелі." + "value": "共用大小" } } } }, - "agent.codex.fork.notice.subtitle": { + "terminalSharing.owner.smallest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork unavailable" + "value": "Fits everyone" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "フォークを利用できません" + "value": "يناسب الجميع" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fork nicht verfügbar" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Fork indisponible" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "التفريع غير متاح" + "value": "Passt für alle" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fork no disponible" + "value": "Se ajusta a todos" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "無法使用分支" + "value": "Convient à tous" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "分支不可用" + "value": "全員に合わせる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포크를 사용할 수 없음" + "value": "모두에게 맞춤" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Račvanje nije dostupno" + "value": "适合所有人" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Fork ikke tilgængelig" + "value": "符合所有人" } - }, - "it": { + } + } + }, + "terminalSharing.participant.thisMac": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Fork non disponibile" + "value": "This Mac" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "មិនអាចប្រើការបំបែកបាន" + "value": "جهاز Mac هذا" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Fork utilgjengelig" + "value": "Dieser Mac" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork niedostępny" + "value": "Este Mac" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Fork indisponível" + "value": "Ce Mac" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Форк недоступен" + "value": "このMac" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ไม่สามารถใช้การแยกสาขาได้" + "value": "이 Mac" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Fork kullanılamıyor" + "value": "这台 Mac" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Форк недоступний" + "value": "這台 Mac" } } } }, - "agent.codex.fork.notice.title": { + "terminalSharing.owner.possessiveDevice": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent fork" + "value": "%1$@'s %2$@" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "エージェントフォーク" + "value": "%1$@ · %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent-Fork" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Fork d’agent" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تفريع الوكيل" + "value": "%1$@ · %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fork del agente" + "value": "%1$@ · %2$@" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "代理程式分支" + "value": "%1$@ · %2$@" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "代理分支" + "value": "%1$@の%2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트 포크" + "value": "%1$@의 %2$@" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Račvanje agenta" + "value": "%1$@的%2$@" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Agentfork" + "value": "%1$@的%2$@" } - }, - "it": { + } + } + }, + "terminalSharing.owner.fixedShort": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Fork dell'agente" + "value": "Fixed" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ការបំបែកភ្នាក់ងារ" + "value": "ثابت" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Agentforgrening" + "value": "Fest" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork agenta" + "value": "Fijo" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Fork do agente" + "value": "Fixe" } }, - "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.tab.tooltip": { "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": "Size set by %1$@ · %2$@" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" + "value": "الحجم يحدده %1$@ · %2$@" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" + "value": "Größe festgelegt von %1$@ · %2$@" } }, - "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": "Tamaño definido por %1$@ · %2$@" } }, "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": "Taille définie par %1$@ · %2$@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." + "value": "%1$@がサイズを設定 · %2$@" } }, - "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": "크기 설정: %1$@ · %2$@" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" + "value": "尺寸由%1$@设定 · %2$@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." + "value": "尺寸由%1$@設定 · %2$@" } } } }, - "cli.browser.inputFiles.error.usage": { + "terminalSharing.panel.sizeLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files requires --selector and either --file (repeatable) or --clear" + "value": "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": "Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere --selector y --file (repetible) o --clear" + "value": "Tamaño" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite --selector et soit --file (répétable), soit --clear" + "value": "Taille" } }, "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.sizeMode.latest": { "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": "Follow Latest" } }, "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": "Letzter Eingabe folgen" } }, "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": "Seguir la última entrada" } }, "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": "Suivre la dernière saisie" } }, "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.sizeMode.smallest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The selector must match a file input without directory selection" + "value": "Fit Everyone" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" + "value": "ملاءمة الجميع" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" + "value": "Allen anpassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" + "value": "Ajustar a todos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" + "value": "Adapter à tous" } }, "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.multipleRequired": { + "terminalSharing.sizeMode.largest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This file input does not allow multiple files" + "value": "Largest Window" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يسمح حقل إدخال الملفات هذا باختيار عدة ملفات" + "value": "أكبر نافذة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" + "value": "Größtes Fenster" } }, "es": { "stringUnit": { "state": "translated", - "value": "Este campo de archivos no permite seleccionar varios archivos" + "value": "Ventana más grande" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" + "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": "最大視窗" } } } }, - "browser.inputFiles.error.cancelled": { + "terminalSharing.sizeMode.priority": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "File upload preparation was cancelled" + "value": "Priority" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم إلغاء تجهيز الملفات للرفع" + "value": "الأولوية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" + "value": "Priorität" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se canceló la preparación de los archivos para subir" + "value": "Prioridad" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La préparation des fichiers à envoyer a été annulée" + "value": "Priorité" } }, "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.sizeMode.fixed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files requires a selector and a files array of absolute paths" + "value": "Fixed" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" + "value": "ثابت" } }, "de": { "stringUnit": { "state": "translated", - "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" + "value": "Fest" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" + "value": "Fijo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" + "value": "Fixe" } }, "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" + "value": "固定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" + "value": "고정" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" + "value": "固定" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" + "value": "固定" } } } }, - "browser.inputFiles.error.invalidSelection": { + "terminalSharing.panel.setsSize": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Select at most 128 files using absolute paths" + "value": "sets 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": "legt Größe fest" } }, "es": { "stringUnit": { "state": "translated", - "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" + "value": "define el tamaño" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" + "value": "définit la 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.panel.notCounted": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Timed out preparing files for upload" + "value": "not counted" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتهت مهلة تجهيز الملفات للرفع" + "value": "غير محتسب" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" + "value": "nicht gezählt" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se agotó el tiempo de preparación de los archivos para subir" + "value": "no cuenta" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le délai de préparation des fichiers à envoyer a été dépassé" + "value": "non compté" } }, "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.panel.rowOptions": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The combined upload must be no larger than 32 MiB" + "value": "Options for %@" } }, "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": "Optionen für %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" + "value": "Opciones de %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" + "value": "Options pour %@" } }, "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.panel.disconnectOthersButton": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Every upload path must be a readable regular file" + "value": "Disconnect Others" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يشير كل مسار للرفع إلى ملف عادي قابل للقراءة" + "value": "قطع اتصال الآخرين" } }, "de": { "stringUnit": { "state": "translated", - "value": "Jeder Upload-Pfad muss auf eine lesbare reguläre Datei verweisen" + "value": "Andere trennen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cada ruta de subida debe apuntar a un archivo normal que se pueda leer" + "value": "Desconectar a los demás" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Chaque chemin à envoyer doit désigner un fichier ordinaire lisible" + "value": "Déconnecter les autres" } }, "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.detached.titleShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "iOS Browser Reaches Other Hosts" + "value": "Detached" } }, - "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": "Getrennt" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "متصفح iOS يصل إلى مضيفين آخرين" + "value": "Desconectado" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El navegador de iOS accede a otros hosts" + "value": "Détaché" } }, - "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.detached.byMessageShort": { "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": "%1$@ disconnected this Mac at %2$@." } }, - "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": "قطع %1$@ اتصال هذا الـMac في %2$@." } }, - "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": "%1$@ hat diesen Mac um %2$@ getrennt." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." + "value": "%1$@ desconectó este Mac a las %2$@." } }, - "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": "%1$@ a déconnecté ce Mac à %2$@." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器可透過這台 Mac 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" + "value": "%1$@が%2$@にこのMacを切断しました。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" + "value": "%1$@이(가) %2$@에 이 Mac의 연결을 끊었습니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저가 이 Mac을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." + "value": "%1$@于%2$@断开了这台Mac的连接。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOSブラウザはこのMac経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" + "value": "%1$@於%2$@中斷了這台Mac的連線。" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { + "terminalSharing.chip.hiddenColumns": { "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." + "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": { - "stringUnit": { - "state": "translated", - "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." + "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": "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": "Cancel" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." + "value": "إلغاء" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Abbrechen" } }, "es": { "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": "Cancelar" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" + "value": "Annuler" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" + "value": "キャンセル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." + "value": "취소" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" + "value": "取消" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "取消" } } } }, - "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { + "terminalSharing.panel.disconnectOthers.confirm": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" + "value": "Disconnect all other clients?" } }, - "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": "Alle anderen Clients trennen?" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" + "value": "¿Desconectar todos los demás clientes?" } }, - "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": "Déconnecter tous les autres clients ?" } }, - "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.disconnectOthers.confirmButton": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%1$d/%2$d" + "value": "Disconnect" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "قطع الاتصال" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Trennen" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Desconectar" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Déconnecter" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "切断" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$d/%2$d" + "value": "연결 끊기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "断开连接" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "中斷連線" } - }, - "it": { + } + } + }, + "terminalSharing.panel.fixedColumns": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Columns" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "الأعمدة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Spalten" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Columnas" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Colonnes" } }, - "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.panel.fixedRows": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Next Hunk" + "value": "Rows" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 次のハンク" + "value": "الصفوف" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "差异查看器:下一个块" + "value": "Zeilen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Nächster Hunk" + "value": "Filas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc suivant" + "value": "Lignes" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: المقطع التالي" + "value": "行" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Siguiente bloque" + "value": "행" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "差異檢視器:下一個區塊" + "value": "行数" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "비교 뷰어: 다음 헝크" + "value": "列數" } } } }, - "shortcut.diffViewerPreviousHunk.label": { + "terminalSharing.panel.unavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Previous Hunk" + "value": "This terminal is not shared." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 前のハンク" + "value": "هذه الطرفية غير مشتركة." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "差异查看器:上一个块" + "value": "Dieses Terminal wird nicht geteilt." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Vorheriger Hunk" + "value": "Esta terminal no está compartida." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc précédent" + "value": "Ce terminal n’est pas partagé." } }, - "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.counts": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Deny" + "value": "Counts toward size" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رفض" + "value": "يُحتسب في الحجم" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ablehnen" + "value": "Zählt für die Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "Denegar" + "value": "Cuenta para el tamaño" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Refuser" + "value": "Compte pour la taille" } }, "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": "拒絕" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Odbij" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Afvis" + "value": "計入大小" } - }, - "it": { + } + } + }, + "terminalSharing.panel.disconnect": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Nega" + "value": "Disconnect" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "បដិសេធ" + "value": "قطع الاتصال" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Avslå" + "value": "Trennen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Odmów" + "value": "Desconectar" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Negar" + "value": "Déconnecter" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Запретить" + "value": "切断" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ปฏิเสธ" + "value": "연결 끊기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Reddet" + "value": "断开连接" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Заборонити" + "value": "中斷連線" } } } }, - "terminal.clipboardReadConfirmation.message": { + "cli.sshPtyAttach.launchAcknowledgementTimeoutRetry": { "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": "[cmux] cmux did not acknowledge the SSH launch; retrying %s in %ss." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يريد برنامج في هذه الطرفية قراءة الحافظة. اسمح بذلك فقط إذا كنت تثق بالبرنامج." + "value": "[cmux] cmux hat den SSH-Start nicht bestätigt; neuer Versuch %s in %ss." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ein Programm in diesem Terminal möchte deine Zwischenablage lesen. Erlaube es nur, wenn du dem Programm vertraust." + "value": "[cmux] cmux n’a pas confirmé le démarrage SSH ; nouvelle tentative %s dans %ss." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Un programa de esta terminal quiere leer tu portapapeles. Permítelo solo si confías en el programa." + "value": "[cmux] لم يؤكد cmux بدء SSH؛ ستتم إعادة المحاولة %s خلال %s ث." } }, - "fr": { + "es": { "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": "[cmux] cmux no confirmó el inicio de SSH; reintentando %s en %ss." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このターミナルのプログラムがクリップボードを読み取ろうとしています。信頼できるプログラムの場合にのみ許可してください。" + "value": "[cmux] cmux 未確認 SSH 啟動;將在第 %s 次於 %s 秒後重試。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 터미널의 프로그램이 클립보드를 읽으려고 합니다. 프로그램을 신뢰할 수 있을 때만 허용하세요." + "value": "[cmux] cmux 未确认 SSH 启动;将在第 %s 次于 %s 秒后重试。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "此终端中的程序想要读取你的剪贴板。只有在你信任该程序时才允许。" + "value": "[cmux] cmux가 SSH 시작을 확인하지 못했습니다. %s번째로 %s초 후 다시 시도합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此終端機中的程式想要讀取你的剪貼簿。只有在你信任該程式時才允許。" + "value": "[cmux] cmux が SSH の起動を確認できないため、%s 回目を %s 秒後に再試行します。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Program u ovom terminalu želi čitati vaš međuspremnik. Dozvolite samo ako vjerujete programu." + "value": "[cmux] cmux nije potvrdio SSH pokretanje; ponovni pokušaj %s za %ss." } }, "da": { "stringUnit": { "state": "translated", - "value": "Et program i denne terminal vil læse din udklipsholder. Tillad det kun, hvis du har tillid til programmet." + "value": "[cmux] cmux bekræftede ikke SSH-starten; prøver igen %s om %ss." } }, "it": { "stringUnit": { "state": "translated", - "value": "Un programma in questo terminale vuole leggere gli appunti. Consentilo solo se ti fidi del programma." + "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": "Et program i denne terminalen vil lese utklippstavlen din. Tillat det bare hvis du stoler på programmet." + "value": "[cmux] cmux bekreftet ikke SSH-oppstarten; prøver på nytt %s om %ss." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Program w tym terminalu chce odczytać schowek. Zezwól tylko, jeśli ufasz temu programowi." + "value": "[cmux] cmux nie potwierdził uruchomienia SSH; ponawianie próby %s za %ss." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Um programa neste terminal quer ler sua área de transferência. Permita somente se você confiar no programa." + "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": "Bu terminaldeki bir program panonuzu okumak istiyor. Yalnızca programa güveniyorsanız izin verin." + "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 с." } } } }, - "terminal.clipboardReadConfirmation.title": { + "machines.requiresPro.upgrade.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Allow Clipboard Access?" + "value": "Upgrade" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السماح بالوصول إلى الحافظة؟" + "value": "ترقية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zugriff auf die Zwischenablage erlauben?" + "value": "Upgraden" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Permitir el acceso al portapapeles?" + "value": "Actualizar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Autoriser l’accès au presse-papiers ?" + "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": "允許存取剪貼簿?" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Dozvoliti pristup međuspremniku?" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Tillad adgang til udklipsholderen?" + "value": "升級" } - }, - "it": { + } + } + }, + "machines.sessionRejected.signInAgain.short": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Consentire l'accesso agli appunti?" + "value": "Sign In" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "អនុញ្ញាតឱ្យចូលប្រើក្ដារតម្បៀតខ្ទាស់?" + "value": "تسجيل الدخول" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Tillat tilgang til utklippstavlen?" + "value": "Anmelden" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Zezwolić na dostęp do schowka?" + "value": "Iniciar sesión" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Permitir acesso à área de transferência?" + "value": "Se reconnecter" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Разрешить доступ к буферу обмена?" + "value": "再サインイン" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "อนุญาตให้เข้าถึงคลิปบอร์ดหรือไม่?" + "value": "다시 로그인" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Panoya erişime izin verilsin mi?" + "value": "重新登录" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Дозволити доступ до буфера обміну?" + "value": "重新登入" } } } }, - "notification.remoteRelay.hostFallback": { + "machines.requiresPro.stale": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Remote host" + "value": "Cloud machines need cmux Pro — showing last known" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مضيف بعيد" + "value": "تتطلب الأجهزة السحابية إصدار cmux Pro — يتم عرض آخر حالة معروفة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Remote-Host" + "value": "Cloud-Maschinen erfordern cmux Pro – zeige letzten bekannten Stand" } }, "es": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Las máquinas en la nube requieren cmux Pro — se muestra el último estado conocido" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Hôte distant" + "value": "Les machines Cloud nécessitent cmux Pro — affichage des dernières informations connues" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リモートホスト" + "value": "Cloud マシンには 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 — 顯示上次已知的狀態" } - }, - "bs": { + } + } + }, + "machines.sessionRejected.stale": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Udaljeni host" + "value": "Sign-in needs a refresh — showing last known" } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fjernvært" + "value": "يحتاج تسجيل الدخول إلى تحديث — يتم عرض آخر حالة معروفة" } }, - "it": { + "de": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Anmeldung muss aktualisiert werden – zeige letzten bekannten Stand" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ម៉ាស៊ីនពីចម្ងាយ" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Ekstern vert" - } - }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Zdalny host" + "value": "Es necesario actualizar el inicio de sesión — se muestra el último estado conocido" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "La connexion doit être actualisée — affichage des dernières informations connues" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Удалённый хост" + "value": "再サインインが必要です — 最後の状態を表示中" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "โฮสต์ระยะไกล" + "value": "로그인 갱신 필요 — 마지막으로 확인된 상태 표시 중" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Uzak ana bilgisayar" + "value": "登录状态需要刷新 —— 显示的是最后已知状态" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Віддалений хост" + "value": "登入狀態需要重新整理 — 顯示上次已知的狀態" } } } }, - "notification.remoteRelay.title": { + "terminal.clipboardReadConfirmation.deny": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Deny" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "رفض" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Ablehnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Denegar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Refuser" } }, "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": "拒絕" } }, "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" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-VPN-Einrichtung ist nicht verfügbar" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "La configuration du VPN Cloud est indisponible" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La configuración de VPN de Cloud no está disponible" + "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": "Cloud VPN設定は利用できません" + "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 设置不可用" + "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "無法使用 Cloud VPN 設定" + "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." } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 설정을 사용할 수 없습니다" + "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": "إعداد VPN الخاص بـ Cloud غير متاح" + "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Podešavanje Cloud VPN-a nije dostupno" + "value": "El cambio de equipo se aplicó, pero cmux no informó el estado actualizado en 10 segundos. Ejecuta `cmux auth status` para confirmarlo." } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-opsætning er ikke tilgængelig" + "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "La configurazione VPN Cloud non è disponibile" + "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." + } + } + } + }, + "settings.mobile.browserTunnel.allowOtherHosts": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "iOS Browser Reaches Other Hosts" } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "ការរៀបចំ Cloud VPN មិនអាចប្រើបាន" + "value": "iOS-Browser erreicht andere Hosts" } }, - "nb": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-oppsett er ikke tilgjengelig" + "value": "Le navigateur iOS accède aux autres hôtes" } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Konfiguracja Cloud VPN jest niedostępna" + "value": "متصفح iOS يصل إلى مضيفين آخرين" } }, - "pt-BR": { + "es": { "stringUnit": { "state": "translated", - "value": "A configuração do Cloud VPN não está disponível" + "value": "El navegador de iOS accede a otros hosts" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Настройка Cloud VPN недоступна" + "value": "iOS 瀏覽器可連線至其他主機" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "การตั้งค่า Cloud VPN ไม่พร้อมใช้งาน" + "value": "iOS 浏览器可访问其他主机" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN kurulumu kullanılamıyor" + "value": "iOS 브라우저의 다른 호스트 접근" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Налаштування Cloud VPN недоступне" + "value": "iOSブラウザから他のホストに接続" } } } }, - "cloud.vpn.setup.permission.body": { + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOn": { "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 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." } }, "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 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." } }, "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": "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." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "VPNソフトウェアはcmuxに含まれています。別のアプリは不要です。承認時にmacOSがパスワードまたはTouch IDを求めることがあります。" + "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux 已包含 VPN 软件,无需其他应用。批准时,macOS 可能要求您输入密码或使用触控 ID。" + "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." } }, "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 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "برنامج VPN مضمن في cmux. لا تحتاج إلى تطبيق آخر. قد يطلب macOS كلمة المرور أو Touch ID أثناء الموافقة." + "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" } }, - "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을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." } }, - "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経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" } - }, - "it": { + } + } + }, + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { + "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": "The iOS browser reaches only this Mac's localhost through this Mac. Other sites load over the phone's own network." } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "កម្មវិធី VPN មាននៅក្នុង cmux។ អ្នកមិនត្រូវការកម្មវិធីផ្សេងទៀតទេ។ macOS អាចស្នើពាក្យសម្ងាត់ ឬ Touch ID ក្នុងពេលអនុម័ត។" + "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." } }, - "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": "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." } }, - "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": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." } }, - "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": "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." } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "VPN-программа уже входит в cmux. Другие приложения не нужны. Во время подтверждения macOS может запросить пароль или Touch ID." + "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ซอฟต์แวร์ VPN รวมอยู่ใน cmux แล้ว ไม่ต้องใช้แอปอื่น macOS อาจขอรหัสผ่านหรือ Touch ID ระหว่างการอนุมัติ" + "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" } }, - "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": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Програмне забезпечення VPN входить до cmux. Інша програма не потрібна. Під час схвалення macOS може попросити пароль або Touch ID." + "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" } } } }, - "cloud.vpn.setup.status.title": { + "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private network status" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" } }, "de": { "stringUnit": { "state": "translated", - "value": "Status des privaten Netzwerks" + "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" } }, "fr": { "stringUnit": { "state": "translated", - "value": "État du réseau privé" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Estado de la red privada" + "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é" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "プライベートネットワークの状態" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "私有网络状态" + "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" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "私有網路狀態" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "비공개 네트워크 상태" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 行動裝置 瀏覽器 通道 代理 區域網路 主機 網路 安全性" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "حالة الشبكة الخاصة" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 移动 浏览器 隧道 代理 局域网 主机 网络 安全" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Status privatne mreže" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 모바일 브라우저 터널 프록시 로컬 네트워크 호스트 네트워크 보안" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Status for privat netværk" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security モバイル ブラウザ トンネル プロキシ ローカルネットワーク ホスト ネットワーク セキュリティ" } - }, - "it": { + } + } + }, + "cli.browser.inputFiles.error.usage": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Stato della rete privata" + "value": "set-input-files requires --selector and either --file (repeatable) or --clear" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ស្ថានភាពបណ្តាញឯកជន" + "value": "يتطلب set-input-files الخيار --selector مع --file (يمكن تكراره) أو --clear" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Status for privat nettverk" + "value": "set-input-files benötigt --selector und entweder --file (wiederholbar) oder --clear" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Stan sieci prywatnej" + "value": "set-input-files requiere --selector y --file (repetible) o --clear" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Status da rede privada" + "value": "set-input-files nécessite --selector et soit --file (répétable), soit --clear" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Состояние частной сети" + "value": "set-input-files には --selector と、--file (複数指定可)または --clear が必要です" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "สถานะเครือข่ายส่วนตัว" + "value": "set-input-files에는 --selector 와 --file (반복 가능) 또는 --clear가 필요합니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Özel ağ durumu" + "value": "set-input-files 需要 --selector ,以及 --file (可重复)或 --clear" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Стан приватної мережі" + "value": "set-input-files 需要 --selector ,以及 --file (可重複)或 --clear" } } } }, - "cloud.vpn.setup.title": { + "cli.browser.inputFiles.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "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." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n اختر ملفات محلية (حتى 128 ملفًا بإجمالي 32 MiB) أو امسح الاختيار. رفع المجلدات غير مدعوم." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "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." } }, "es": { "stringUnit": { "state": "translated", - "value": "VPN de Cloud" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "クラウドVPN" + "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." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "云端 VPN" + "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." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "雲端 VPN" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n ローカルファイルを選択(最大128個、合計32 MiB)するか、選択を解除します。ディレクトリのアップロードには対応していません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 VPN" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شبكة Cloud الخاصة" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 로컬 파일을 선택하거나(최대 128개, 총 32 MiB) 선택을 지웁니다. 디렉터리 업로드는 지원되지 않습니다." } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 选择本地文件(最多 128 个文件,总计 32 MiB)或清除选择。不支持上传目录。" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "set-input-files --selector (--file ... | --clear) [--snapshot-after]\n 選取本機檔案(最多 128 個檔案,總計 32 MiB)或清除選取。不支援上傳目錄。" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.invalidTarget": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "value": "The selector must match a file input without directory selection" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" } }, - "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.multipleRequired": { "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": "This file input does not allow multiple files" } }, - "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": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" } }, "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": "Este campo de archivos no permite seleccionar varios archivos" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "此 cmux 副本未包含已签名的 VPN 扩展。请使用支持 Cloud VPN 的 cmux 版本。Cloud 终端、端口和桌面无需 VPN 仍可使用。" + "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" } }, - "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.cancelled": { + "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": "File upload preparation was cancelled" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux ច្បាប់នេះមិនមានផ្នែកបន្ថែម VPN ដែលបានចុះហត្ថលេខាទេ។ ប្រើកំណែ cmux ដែលគាំទ្រ Cloud VPN។ Terminal, Ports និង Desktop របស់ Cloud នៅតែប្រើបានដោយគ្មាន VPN។" + "value": "تم إلغاء تجهيز الملفات للرفع" } }, - "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": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" } }, - "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": "Se canceló la preparación de los archivos para subir" } }, - "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": "La préparation des fichiers à envoyer a été annulée" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "В этой копии cmux нет подписанного VPN-расширения. Используйте выпуск cmux с поддержкой Cloud VPN. Cloud-терминалы, порты и рабочий стол доступны без VPN." + "value": "ファイルのアップロード準備がキャンセルされました" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux รุ่นนี้ไม่มีส่วนขยาย VPN ที่ลงนามแล้ว ใช้รุ่น cmux ที่รองรับ Cloud VPN เทอร์มินัล Cloud พอร์ต และเดสก์ท็อปยังใช้ได้โดยไม่ต้องมี VPN" + "value": "파일 업로드 준비가 취소되었습니다" } }, - "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": "已取消准备上传文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ця копія cmux не містить підписаного VPN-розширення. Використовуйте випуск cmux із підтримкою Cloud VPN. Cloud-термінали, порти й робочий стіл доступні без VPN." + "value": "已取消準備上傳檔案" } } } }, - "cloud.vpn.setup.waiting": { + "browser.inputFiles.error.invalidParameters": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "set-input-files requires a selector and a files array of absolute paths" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "En attente" + "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" } }, "es": { "stringUnit": { "state": "translated", - "value": "En espera" + "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" } }, "ja": { "stringUnit": { "state": "translated", - "value": "待機中" + "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" } - }, - "ko": { + } + } + }, + "browser.inputFiles.error.invalidSelection": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "대기 중" + "value": "Select at most 128 files using absolute paths" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قيد الانتظار" + "value": "اختر ما يصل إلى 128 ملفًا باستخدام مسارات مطلقة" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Čekanje" + "value": "Wählen Sie höchstens 128 Dateien mit absoluten Pfaden aus" } }, - "da": { + "es": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" } }, - "it": { + "fr": { "stringUnit": { "state": "translated", - "value": "In attesa" + "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "កំពុងរង់ចាំ" + "value": "絶対パスで最大128個のファイルを選択してください" } }, - "nb": { + "ko": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "절대 경로를 사용하여 최대 128개의 파일을 선택하세요" } }, - "pl": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Oczekiwanie" + "value": "请使用绝对路径选择最多 128 个文件" } }, - "pt-BR": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Aguardando" + "value": "請使用絕對路徑選取最多 128 個檔案" + } + } + } + }, + "browser.inputFiles.error.timeout": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Timed out preparing files for upload" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ожидание" + "value": "انتهت مهلة تجهيز الملفات للرفع" } }, - "th": { + "de": { "stringUnit": { "state": "translated", - "value": "กำลังรอ" + "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" } }, - "tr": { + "es": { "stringUnit": { "state": "translated", - "value": "Bekliyor" + "value": "Se agotó el tiempo de preparación de los archivos para subir" } }, - "uk": { + "fr": { "stringUnit": { "state": "translated", - "value": "Очікування" + "value": "Le délai de préparation des fichiers à envoyer a été dépassé" } - } - } - }, - "cloudTree.ports.action.wake": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ja": { "stringUnit": { "state": "translated", - "value": "Wake Machine" + "value": "アップロードするファイルの準備がタイムアウトしました" } }, - "de": { + "ko": { "stringUnit": { "state": "translated", - "value": "Maschine aktivieren" + "value": "업로드할 파일 준비 시간이 초과되었습니다" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Réveiller la machine" + "value": "准备上传文件超时" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "إيقاظ الجهاز" + "value": "準備上傳檔案逾時" + } + } + } + }, + "browser.inputFiles.error.tooLarge": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The combined upload must be no larger than 32 MiB" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Activar máquina" + "value": "يجب ألا يتجاوز الحجم الإجمالي للملفات المرفوعة 32 MiB" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "喚醒機器" + "value": "Die Uploads dürfen insgesamt nicht größer als 32 MiB sein" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "唤醒机器" + "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "머신 깨우기" + "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マシンを起動" + "value": "アップロードするファイルの合計サイズは32 MiB以下にしてください" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Probudi mašinu" + "value": "전체 업로드 크기는 32 MiB를 초과할 수 없습니다" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Væk maskine" + "value": "上传文件的总大小不得超过 32 MiB" } }, - "it": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Riattiva macchina" + "value": "上傳檔案的總大小不得超過 32 MiB" + } + } + } + }, + "browser.inputFiles.error.unreadableFile": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "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…" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جارٍ تبديل الفريق…" + "value": "Use Cloud machines from any app" } }, "de": { "stringUnit": { "state": "translated", - "value": "Team wird gewechselt…" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cambiando de equipo…" + "value": "Cloud-Maschinen aus jeder App verwenden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Changement d’équipe…" + "value": "Utiliser les machines Cloud depuis toute app" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "チームを切り替え中…" + "value": "Usar máquinas Cloud desde cualquier app" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "팀 전환 중…" + "value": "ほかのアプリからCloudマシンを使う" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在切换团队…" + "value": "从任何应用使用 Cloud 机器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在切換團隊…" + "value": "從任何 App 使用 Cloud 機器" } - } - } - }, - "cloud.teamPicker.creating": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Creating team…" + "value": "모든 앱에서 Cloud 머신 사용" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جارٍ إنشاء الفريق…" + "value": "استخدام أجهزة Cloud من أي تطبيق" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Team wird erstellt…" + "value": "Koristite Cloud mašine iz bilo koje aplikacije" } }, - "es": { + "da": { "stringUnit": { "state": "translated", - "value": "Creando equipo…" + "value": "Brug Cloud-maskiner fra alle apps" } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "Création de l’équipe…" + "value": "Usa le macchine Cloud da qualsiasi app" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "チームを作成中…" + "value": "ប្រើម៉ាស៊ីន Cloud ពីកម្មវិធីណាមួយ" } }, - "ko": { + "nb": { "stringUnit": { "state": "translated", - "value": "팀 만드는 중…" + "value": "Bruk Cloud-maskiner fra alle apper" } }, - "zh-Hans": { + "pl": { "stringUnit": { "state": "translated", - "value": "正在创建团队…" + "value": "Używaj maszyn Cloud z dowolnej aplikacji" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "正在建立團隊…" - } - } - } - }, - "socket.authTeam.busy": { - "extractionState": "manual", - "localizations": { - "en": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Another team change is in progress. Try again when it finishes." + "value": "Use máquinas Cloud em qualquer app" } }, - "ar": { + "ru": { "stringUnit": { "state": "translated", - "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." + "value": "Используйте Cloud-машины из любого приложения" } }, - "de": { + "th": { "stringUnit": { "state": "translated", - "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." + "value": "ใช้เครื่อง Cloud จากทุกแอป" } }, - "es": { + "tr": { "stringUnit": { "state": "translated", - "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." + "value": "Cloud makinelerini her uygulamadan kullanın" } }, - "fr": { + "uk": { "stringUnit": { "state": "translated", - "value": "Une autre modification d’équipe est en cours. Réessayez une fois terminée." + "value": "Використовуйте Cloud-машини з будь-якої програми" } - }, - "ja": { + } + } + }, + "cloud.vpn.setup.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "別のチーム変更を処理中です。完了してからもう一度お試しください。" + "value": "Optional access to each VM's private address and original ports, such as 10.40.0.10:3000." } }, - "ko": { + "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." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "另一项团队更改正在进行中,请在完成后重试。" + "value": "Accès facultatif à chaque adresse privée et aux ports d’origine des VM, comme 10.40.0.10:3000." } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "另一項團隊變更正在進行中,請在完成後再試一次。" - } - } - } - }, - "cloud.teamPicker.createSheet.message": { - "extractionState": "manual", - "localizations": { - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "The new team becomes your active team." + "value": "Acceso opcional a la dirección privada y los puertos originales de cada VM, como 10.40.0.10:3000." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يصبح الفريق الجديد فريقك النشط." + "value": "各VMのプライベートアドレスと元のポート(例:10.40.0.10:3000)にアクセスするための任意の設定です。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Das neue Team wird Ihr aktives Team." + "value": "可选设置,用于访问每台 VM 的私有地址和原始端口,例如 10.40.0.10:3000。" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "El nuevo equipo pasa a ser su equipo activo." + "value": "選用設定,可存取每台 VM 的私有位址和原始連接埠,例如 10.40.0.10:3000。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "La nouvelle équipe devient votre équipe active." + "value": "각 VM의 비공개 주소와 원래 포트(예: 10.40.0.10:3000)에 접근하기 위한 선택 설정입니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "新しいチームがアクティブなチームになります。" + "value": "وصول اختياري إلى العنوان الخاص والمنافذ الأصلية لكل جهاز افتراضي، مثل 10.40.0.10:3000." } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "새 팀이 활성 팀이 됩니다." + "value": "Opcionalni pristup privatnoj adresi i izvornim portovima svake VM, na primjer 10.40.0.10:3000." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "新团队将成为你的当前团队。" + "value": "Valgfri adgang til hver VM’s private adresse og oprindelige porte, f.eks. 10.40.0.10:3000." } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "新團隊會成為你使用中的團隊。" - } - } - } - }, - "settings.terminal.textEditingCommandMovesByWord": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Command Moves by Word" + "value": "Accesso facoltativo all’indirizzo privato e alle porte originali di ogni VM, ad esempio 10.40.0.10:3000." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "Command ينقل حسب الكلمة" + "value": "ចូលប្រើអាសយដ្ឋានឯកជន និងច្រកដើមរបស់ VM នីមួយៗ ដូចជា 10.40.0.10:3000 ជាជម្រើស។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Befehlstaste bewegt wortweise" + "value": "Valgfri tilgang til hver VMs private adresse og opprinnelige porter, som 10.40.0.10:3000." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Comando mueve por palabra" + "value": "Opcjonalny dostęp do prywatnego adresu i oryginalnych portów każdej maszyny VM, na przykład 10.40.0.10:3000." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Commande déplace par mot" + "value": "Acesso opcional ao endereço privado e às portas originais de cada VM, como 10.40.0.10:3000." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "Command で単語単位に移動" + "value": "Необязательный доступ к частному адресу и исходным портам каждой VM, например 10.40.0.10:3000." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "Command로 단어 단위 이동" + "value": "การเข้าถึงที่ไม่บังคับไปยังที่อยู่ส่วนตัวและพอร์ตเดิมของ VM แต่ละเครื่อง เช่น 10.40.0.10:3000" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "Command 按词移动" + "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." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "Command 依字移動" + "value": "Необов’язковий доступ до приватної адреси та початкових портів кожної VM, наприклад 10.40.0.10:3000." } } } }, - "settings.terminal.textEditingCommandMovesByWord.subtitleOn": { + "cloud.vpn.setup.howItWorks.title": { "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": "How it works" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب الكلمة، مثل Option. وينقل Control مع السهمين الأيسر والأيمن إلى بداية السطر ونهايته." + "value": "So funktioniert es" } }, - "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": "Fonctionnement" } }, "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": "Cómo funciona" } }, - "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": "仕組み" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Command と矢印キー・削除キーで、Option と同じく単語単位に移動・削除します。Control と左右矢印キーで行頭・行末に移動します。" + "value": "工作原理" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "運作方式" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Command 화살표 및 삭제 키가 Option처럼 단어 단위로 이동하고 삭제합니다. Control 왼쪽 및 오른쪽 화살표는 줄의 시작과 끝으로 이동합니다." + "value": "작동 방식" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "Command 加方向键和删除键按词移动和删除,与 Option 相同。Control 加左右方向键移到行首和行尾。" + "value": "طريقة العمل" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "Command 加方向鍵與刪除鍵會依字移動與刪除,與 Option 相同。Control 加左右方向鍵會移到行首與行尾。" + "value": "Kako radi" } - } - } - }, - "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": "Sådan fungerer det" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب السطر، كما في حقول النص في macOS." + "value": "Come funziona" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht zeilenweise, wie in macOS-Textfeldern." + "value": "របៀបដំណើរការ" } }, - "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": "Slik fungerer det" } }, - "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": "Jak to działa" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Command と矢印キー・削除キーで、macOS のテキストフィールドと同じく行単位に移動・削除します。" + "value": "Como funciona" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "Command 화살표 및 삭제 키가 macOS 텍스트 필드처럼 줄 단위로 이동하고 삭제합니다." + "value": "Как это работает" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "Command 加方向键和删除键按行移动和删除,与 macOS 文本框相同。" + "value": "วิธีการทำงาน" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "Command 加方向鍵與刪除鍵會依行移動與刪除,與 macOS 文字欄位相同。" + "value": "Nasıl çalışır" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Як це працює" } } } }, - "settings.terminal.textEditingGesturesInFullScreenApps": { + "cloud.vpn.setup.status.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Text Editing Gestures in Full-Screen Apps" + "value": "Off. Your Cloud panes continue to work through cmux's built-in route." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إيماءات تحرير النص في التطبيقات بملء الشاشة" + "value": "Aus. Ihre Cloud-Bereiche funktionieren weiterhin über die integrierte Verbindung von cmux." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Textbearbeitungsgesten in Vollbild-Apps" + "value": "Désactivé. Vos volets Cloud continuent de fonctionner via la connexion intégrée de cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Gestos de edición de texto en apps a pantalla completa" + "value": "Desactivada. Tus paneles Cloud siguen funcionando mediante la conexión integrada de cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Gestes d’édition de texte dans les apps plein écran" + "value": "オフ。Cloudペインは引き続きcmux内蔵の接続経路で動作します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "フルスクリーンアプリでのテキスト編集ジェスチャー" + "value": "已关闭。Cloud 面板仍通过 cmux 内置连接工作。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "已關閉。Cloud 面板仍透過 cmux 內建連線運作。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전체 화면 앱에서 텍스트 편집 제스처" + "value": "꺼짐. Cloud 패널은 cmux의 내장 연결을 통해 계속 작동합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "全屏应用中的文本编辑手势" + "value": "متوقف. تستمر لوحات Cloud في العمل عبر اتصال cmux المضمن." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "全螢幕 App 中的文字編輯手勢" + "value": "Isključeno. Cloud paneli i dalje rade preko ugrađene cmux veze." } - } - } - }, - "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": "Fra. Dine Cloud-paneler fungerer stadig via cmux’ indbyggede forbindelse." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "تنطبق الإيماءات أيضًا أثناء تشغيل تطبيق بملء الشاشة مثل vim أو less أو tmux، فتظل تعمل في الصدفة داخل tmux أو screen أو zellij." + "value": "Disattivata. I pannelli Cloud continuano a funzionare tramite la connessione integrata di cmux." } }, - "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": "បិទ។ ផ្ទាំង Cloud របស់អ្នកនៅតែដំណើរការតាមការភ្ជាប់ដែលមានស្រាប់របស់ cmux។" } }, - "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": "Av. Cloud-panelene dine fortsetter å fungere gjennom cmux sin innebygde forbindelse." } }, - "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": "Wyłączona. Panele Cloud nadal działają przez wbudowane połączenie cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "vim、less、tmux などのフルスクリーンアプリの実行中もジェスチャーが有効になるため、tmux、screen、zellij 内のシェルでも引き続き使えます。" + "value": "Desativada. Seus painéis Cloud continuam funcionando pela conexão integrada do cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "vim, less, tmux 같은 전체 화면 앱이 실행 중일 때도 제스처가 적용되므로 tmux, screen, zellij 안의 셸에서도 계속 작동합니다." + "value": "Выключено. Панели Cloud продолжают работать через встроенное соединение cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "在 vim、less 或 tmux 等全屏应用运行时手势也会生效,因此在 tmux、screen 或 zellij 中的 shell 里仍可使用。" + "value": "ปิดอยู่ แผง Cloud ยังคงทำงานผ่านการเชื่อมต่อในตัวของ cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "在 vim、less 或 tmux 等全螢幕 App 執行時手勢也會生效,因此在 tmux、screen 或 zellij 中的 shell 裡仍可使用。" + "value": "Kapalı. Cloud panelleriniz cmux’un yerleşik bağlantısıyla çalışmaya devam eder." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Вимкнено. Панелі Cloud продовжують працювати через вбудоване з’єднання cmux." } } } }, - "cloudTree.action.newCloudMachine": { + "cloud.vpn.setup.steps.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "New Cloud Machine" + "value": "First-time setup" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جهاز سحابي جديد" + "value": "Ersteinrichtung" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Neue Cloud-Maschine" + "value": "Première configuration" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva máquina en la nube" + "value": "Configuración inicial" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Nouvelle machine cloud" + "value": "初回設定" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新しいクラウドマシン" + "value": "首次设置" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "새 클라우드 머신" + "value": "首次設定" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "新建云主机" + "value": "최초 설정" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "新增雲端機器" + "value": "الإعداد الأولي" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nova cloud mašina" + "value": "Prvo podešavanje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny cloud-maskine" + "value": "Første opsætning" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova macchina cloud" + "value": "Prima configurazione" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីន Cloud ថ្មី" + "value": "ការរៀបចំលើកដំបូង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny sky-maskin" + "value": "Førstegangsoppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa maszyna w chmurze" + "value": "Pierwsza konfiguracja" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova máquina na nuvem" + "value": "Primeira configuração" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая облачная машина" + "value": "Первая настройка" } }, "th": { "stringUnit": { "state": "translated", - "value": "เครื่องคลาวด์ใหม่" + "value": "การตั้งค่าครั้งแรก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni bulut makinesi" + "value": "İlk kurulum" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова хмарна машина" + "value": "Перше налаштування" } } } }, - "shortcut.sizeTerminalToMyWindow.label": { + "cloud.vpn.setup.steps.extension": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "1. Click Connect Cloud VPN. When macOS asks, allow the cmux network extension in System Settings." } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "1. Klicken Sie auf Cloud-VPN verbinden. Erlauben Sie auf Aufforderung von macOS die cmux-Netzwerkerweiterung in den Systemeinstellungen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "1. Cliquez sur Connecter le VPN Cloud. Lorsque macOS le demande, autorisez l’extension réseau cmux dans Réglages Système." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "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." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "1. 「Cloud VPNに接続」をクリックします。macOSに求められたら、システム設定でcmuxのネットワーク機能拡張を許可します。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "1. 点击“连接 Cloud VPN”。macOS 提示时,在系统设置中允许 cmux 网络扩展。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" - } - } - } - }, - "command.terminalDisconnectOtherClients.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Disconnect Other Terminal Clients…" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قطع اتصال عملاء الطرفية الآخرين…" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Andere Terminal-Clients trennen…" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Desconectar otros clientes de la terminal…" + "value": "1. 按一下「連接 Cloud VPN」。macOS 提示時,請在系統設定中允許 cmux 網路延伸功能。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres clients du terminal…" + "value": "1. Cloud VPN 연결을 클릭합니다. macOS에서 요청하면 시스템 설정에서 cmux 네트워크 확장을 허용합니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "他のターミナルクライアントを切断…" + "value": "1. انقر على توصيل VPN الخاص بـ Cloud. عندما يطلب macOS ذلك، اسمح بامتداد شبكة cmux في إعدادات النظام." } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "다른 터미널 클라이언트 연결 끊기…" + "value": "1. Kliknite Poveži Cloud VPN. Kada macOS zatraži, dozvolite cmux mrežni dodatak u Postavkama sistema." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "断开其他终端客户端…" + "value": "1. Klik på Forbind Cloud VPN. Når macOS spørger, skal du tillade cmux-netværksudvidelsen i Systemindstillinger." } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "中斷其他終端機用戶端的連線…" - } - } - } - }, - "command.terminalShowSizePanel.title": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Show Terminal Size Panel" + "value": "1. Fai clic su Connetti VPN Cloud. Quando macOS lo richiede, consenti l’estensione di rete cmux nelle Impostazioni di Sistema." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "إظهار لوحة حجم الطرفية" + "value": "1. ចុច ភ្ជាប់ Cloud VPN។ ពេល macOS ស្នើ សូមអនុញ្ញាតផ្នែកបន្ថែមបណ្តាញ cmux ក្នុងការកំណត់ប្រព័ន្ធ។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Terminalgrößen-Bereich anzeigen" + "value": "1. Klikk Koble til Cloud VPN. Når macOS spør, tillat cmux-nettverksutvidelsen i Systeminnstillinger." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Mostrar el panel de tamaño de la terminal" + "value": "1. Kliknij Połącz z Cloud VPN. Gdy macOS poprosi, zezwól na rozszerzenie sieci cmux w Ustawieniach systemowych." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Afficher le panneau de taille du terminal" + "value": "1. Clique em Conectar Cloud VPN. Quando o macOS pedir, permita a extensão de rede do cmux nos Ajustes do Sistema." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズパネルを表示" + "value": "1. Нажмите Подключить Cloud VPN. Когда macOS попросит, разрешите сетевое расширение cmux в системных настройках." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "터미널 크기 패널 보기" + "value": "1. คลิก เชื่อมต่อ Cloud VPN เมื่อ macOS ขอ ให้อนุญาตส่วนขยายเครือข่าย cmux ในการตั้งค่าระบบ" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "显示终端大小面板" + "value": "1. Cloud VPN’e bağlan’a tıklayın. macOS istediğinde Sistem Ayarları’nda cmux ağ uzantısına izin verin." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "顯示終端機大小面板" + "value": "1. Натисніть Підключити Cloud VPN. Коли macOS попросить, дозвольте мережеве розширення cmux у Системних параметрах." } } } }, - "command.terminalSizeToMyWindow.title": { + "cloud.vpn.setup.steps.settings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "Open General > Login Items & Extensions > Network Extensions, then enable cmux." } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "Öffnen Sie Allgemein > Anmeldeobjekte & Erweiterungen > Netzwerkerweiterungen und aktivieren Sie cmux." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "Ouvrez Général > Ouverture et extensions > Extensions réseau, puis activez cmux." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "value": "Abre General > Ítems de inicio y extensiones > Extensiones de red y activa cmux." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "「一般」>「ログイン項目と機能拡張」>「ネットワーク機能拡張」を開き、cmuxを有効にします。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "打开“通用”>“登录项与扩展”>“网络扩展”,然后启用 cmux。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" - } - } - } - }, - "terminalSharing.detached.hostShutdown": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The terminal host shut down at %@." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "توقف مضيف الطرفية في %@." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Der Terminal-Host wurde um %@ beendet." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El host de la terminal se detuvo a las %@." + "value": "打開「一般」>「登入項目與延伸功能」>「網路延伸功能」,然後啟用 cmux。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "L’hôte du terminal s’est arrêté à %@." + "value": "일반 > 로그인 항목 및 확장 프로그램 > 네트워크 확장을 열고 cmux를 활성화합니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ターミナルホストが %@ に終了しました。" + "value": "افتح عام > عناصر الدخول والامتدادات > امتدادات الشبكة، ثم فعّل cmux." } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "터미널 호스트가 %@에 종료되었습니다." + "value": "Otvorite Opšte > Stavke za prijavu i dodaci > Mrežni dodaci, pa omogućite cmux." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "终端主机已于 %@ 关闭。" + "value": "Åbn Generelt > Loginemner og udvidelser > Netværksudvidelser, og aktivér cmux." } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "終端機主機已於 %@ 關閉。" - } - } - } - }, - "terminalSharing.detached.network": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "The network dropped." + "value": "Apri Generali > Elementi login ed estensioni > Estensioni di rete, quindi abilita cmux." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "انقطع اتصال الشبكة." + "value": "បើក ទូទៅ > ធាតុចូល និងផ្នែកបន្ថែម > ផ្នែកបន្ថែមបណ្តាញ ហើយបើក cmux។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Die Netzwerkverbindung wurde unterbrochen." + "value": "Åpne Generelt > Påloggingselementer og utvidelser > Nettverksutvidelser, og aktiver cmux." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Se perdió la conexión de red." + "value": "Otwórz Ogólne > Elementy logowania i rozszerzenia > Rozszerzenia sieciowe, a następnie włącz cmux." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "La connexion réseau a été interrompue." + "value": "Abra Geral > Itens de Início e Extensões > Extensões de Rede e ative o cmux." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ネットワーク接続が切れました。" + "value": "Откройте Основные > Объекты входа и расширения > Сетевые расширения и включите cmux." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "네트워크 연결이 끊어졌습니다." + "value": "เปิด ทั่วไป > รายการเข้าสู่ระบบและส่วนขยาย > ส่วนขยายเครือข่าย แล้วเปิดใช้ cmux" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "网络连接已中断。" + "value": "Genel > Giriş Öğeleri ve Uzantılar > Ağ Uzantıları’nı açın ve cmux’u etkinleştirin." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "網路連線中斷。" + "value": "Відкрийте Загальні > Об’єкти входу та розширення > Мережеві розширення й увімкніть cmux." } } } }, - "terminalSharing.detached.reattach": { + "cloud.vpn.setup.steps.settingsLegacy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reattach" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إعادة الإرفاق" + "value": "Open Privacy & Security and allow the cmux extension." } }, "de": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Volver a conectar" + "value": "Öffnen Sie Datenschutz & Sicherheit und erlauben Sie die cmux-Erweiterung." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Se reconnecter" + "value": "Ouvrez Confidentialité et sécurité et autorisez l’extension cmux." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "再接続" + "value": "Abre Privacidad y seguridad y permite la extensión de cmux." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "다시 연결" + "value": "「プライバシーとセキュリティ」を開き、cmuxの機能拡張を許可します。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重新连接" + "value": "打开“隐私与安全性”,然后允许 cmux 扩展。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新連接" - } - } - } - }, - "terminalSharing.detached.reattachAsViewer": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reattach as Viewer" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إعادة الإرفاق كمشاهد" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Als Zuschauer erneut verbinden" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Volver a conectar como espectador" + "value": "打開「隱私權與安全性」,然後允許 cmux 延伸功能。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Se reconnecter en lecture seule" + "value": "개인정보 보호 및 보안을 열고 cmux 확장을 허용합니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "閲覧者として再接続" + "value": "افتح الخصوصية والأمان واسمح بامتداد cmux." } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "보기 전용으로 다시 연결" + "value": "Otvorite Privatnost i sigurnost i dozvolite cmux dodatak." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "以查看者身份重新连接" + "value": "Åbn Anonymitet og sikkerhed, og tillad cmux-udvidelsen." } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "以檢視者身分重新連接" - } - } - } - }, - "terminalSharing.detached.reattachAsViewer.help": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Reattach without changing the terminal size" + "value": "Apri Privacy e sicurezza e consenti l’estensione cmux." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق دون تغيير حجم الطرفية" + "value": "បើក ឯកជនភាព និងសុវត្ថិភាព ហើយអនុញ្ញាតផ្នែកបន្ថែម cmux។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" + "value": "Åpne Personvern og sikkerhet og tillat cmux-utvidelsen." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Volver a conectar sin cambiar el tamaño de la terminal" + "value": "Otwórz Prywatność i ochrona i zezwól na rozszerzenie cmux." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Se reconnecter sans modifier la taille du terminal" + "value": "Abra Privacidade e Segurança e permita a extensão do cmux." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズを変えずに再接続" + "value": "Откройте Конфиденциальность и безопасность и разрешите расширение cmux." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "터미널 크기를 바꾸지 않고 다시 연결" + "value": "เปิด ความเป็นส่วนตัวและความปลอดภัย แล้วอนุญาตส่วนขยาย cmux" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "重新连接但不更改终端大小" + "value": "Gizlilik ve Güvenlik’i açın ve cmux uzantısına izin verin." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "重新連接但不變更終端機大小" + "value": "Відкрийте Конфіденційність і безпека та дозвольте розширення cmux." } } } }, - "terminalSharing.detached.someone": { + "cloud.vpn.setup.steps.configuration": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Someone" + "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": "Jemand" + "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": "Alguien" + "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": "Quelqu’un" + "value": "2. cmux Cloudという名前のVPN構成の追加を許可します。これは別のmacOS権限です。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "誰か" + "value": "2. 允许 cmux 添加名为 cmux Cloud 的 VPN 配置。这是单独的 macOS 权限。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "누군가" + "value": "2. 允許 cmux 加入名為 cmux Cloud 的 VPN 設定。這是另一項 macOS 權限。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "2. cmux가 cmux Cloud라는 VPN 구성을 추가하도록 허용합니다. 이는 별도의 macOS 권한입니다." } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "2. اسمح لـ cmux بإضافة إعداد VPN باسم cmux Cloud. هذا إذن منفصل في macOS." } - } - } - }, - "terminalSharing.detached.superseded": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Another window of this Mac replaced this one at %@." + "value": "2. Dozvolite cmux-u da doda VPN konfiguraciju pod imenom cmux Cloud. Ovo je posebna macOS dozvola." } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." + "value": "2. Tillad cmux at tilføje en VPN-konfiguration med navnet cmux Cloud. Dette er en separat macOS-tilladelse." } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." + "value": "2. Consenti a cmux di aggiungere una configurazione VPN chiamata cmux Cloud. È un’autorizzazione macOS separata." } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Otra ventana de este Mac reemplazó a esta a las %@." + "value": "2. អនុញ្ញាតឱ្យ cmux បន្ថែមការកំណត់ VPN ឈ្មោះ cmux Cloud។ នេះជាសិទ្ធិ macOS ផ្សេងមួយ។" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." + "value": "2. Tillat cmux å legge til en VPN-konfigurasjon kalt cmux Cloud. Dette er en separat macOS-tillatelse." } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" + "value": "2. Zezwól cmux dodać konfigurację VPN o nazwie cmux Cloud. To osobne uprawnienie macOS." } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." + "value": "2. Permita que o cmux adicione uma configuração VPN chamada cmux Cloud. Esta é uma permissão separada do macOS." } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" + "value": "2. Разрешите cmux добавить VPN-конфигурацию с именем cmux Cloud. Это отдельное разрешение macOS." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" + "value": "2. อนุญาตให้ cmux เพิ่มการกำหนดค่า VPN ชื่อ cmux Cloud นี่เป็นสิทธิ์ macOS แยกต่างหาก" } - } - } - }, - "terminalSharing.participant.personDevice": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "2. cmux’un cmux Cloud adlı bir VPN yapılandırması eklemesine izin verin. Bu ayrı bir macOS iznidir." } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "2. Дозвольте cmux додати конфігурацію VPN з назвою cmux Cloud. Це окремий дозвіл macOS." } } } }, - "terminalSharing.device.browser": { + "cloud.vpn.setup.steps.return": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Browser" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "المتصفح" + "value": "3. Return to this pane. The connection continues automatically after approval. Disconnect here when finished. Quitting cmux or signing out also disconnects it." } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Navegador" + "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." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navigateur" + "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." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "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." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "브라우저" + "value": "3. このペインに戻ります。承認後、接続は自動的に続行されます。使い終わったらここで切断してください。cmuxの終了やサインアウトでも切断されます。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "浏览器" + "value": "3. 返回此面板。批准后连接会自动继续。完成后可在此断开连接。退出 cmux 或退出登录也会断开连接。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瀏覽器" - } - } - } - }, - "terminalSharing.device.ipad": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "iPad" + "value": "3. 返回此面板。核准後連線會自動繼續。完成後可在此中斷連線。結束 cmux 或登出也會中斷連線。" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "iPad" - } - } - } - }, - "terminalSharing.device.iphone": { - "extractionState": "manual", - "localizations": { - "en": { + "ko": { "stringUnit": { "state": "translated", - "value": "iPhone" + "value": "3. 이 패널로 돌아옵니다. 승인 후 연결이 자동으로 계속됩니다. 사용을 마치면 여기에서 연결을 해제하세요. cmux를 종료하거나 로그아웃해도 연결이 해제됩니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "iPhone" + "value": "3. ارجع إلى هذه اللوحة. يستمر الاتصال تلقائيًا بعد الموافقة. اقطع الاتصال هنا عند الانتهاء. يؤدي إنهاء cmux أو تسجيل الخروج أيضًا إلى قطع الاتصال." } - } - } - }, - "terminalSharing.device.mac": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Mac" + "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." } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "Mac" + "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å." } - } - } - }, - "terminalSharing.device.tui": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Terminal client" + "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." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "عميل طرفية" + "value": "3. ត្រឡប់ទៅផ្ទាំងនេះ។ ការភ្ជាប់នឹងបន្តដោយស្វ័យប្រវត្តិបន្ទាប់ពីអនុម័ត។ ផ្តាច់នៅទីនេះពេលបញ្ចប់។ ការបិទ cmux ឬចាកចេញក៏ផ្តាច់ការភ្ជាប់ដែរ។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Terminal-Client" + "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." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Cliente de terminal" + "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." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Client terminal" + "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." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ターミナルクライアント" + "value": "3. Вернитесь в эту панель. После подтверждения соединение продолжится автоматически. Завершив работу, отключите его здесь. Выход из cmux или системы также отключает соединение." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "터미널 클라이언트" + "value": "3. กลับมาที่แผงนี้ การเชื่อมต่อจะดำเนินต่อโดยอัตโนมัติหลังการอนุมัติ ตัดการเชื่อมต่อที่นี่เมื่อเสร็จแล้ว การออกจาก cmux หรือออกจากระบบจะตัดการเชื่อมต่อด้วย" } }, - "zh-Hans": { + "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." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "終端機用戶端" + "value": "3. Поверніться до цієї панелі. Після схвалення з’єднання продовжиться автоматично. Завершивши роботу, від’єднайте його тут. Вихід із cmux або системи також від’єднає з’єднання." } } } }, - "terminalSharing.device.unknown": { + "cloud.vpn.setup.address.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Device" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جهاز" + "value": "Private addresses" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gerät" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Dispositivo" + "value": "Private Adressen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appareil" + "value": "Adresses privées" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "デバイス" + "value": "Direcciones privadas" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "기기" + "value": "プライベートアドレス" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设备" + "value": "私有地址" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "裝置" - } - } - } - }, - "terminalSharing.owner.held": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Held size" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "حجم محتفظ به" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Beibehaltene Größe" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tamaño conservado" + "value": "私有位址" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Taille conservée" + "value": "비공개 주소" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "保持されたサイズ" + "value": "العناوين الخاصة" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "유지된 크기" + "value": "Privatne adrese" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "保留的大小" + "value": "Private adresser" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "保留的大小" - } - } - } - }, - "terminalSharing.owner.largest": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Largest window" + "value": "Indirizzi privati" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "أكبر نافذة" + "value": "អាសយដ្ឋានឯកជន" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Größtes Fenster" + "value": "Private adresser" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Ventana más grande" + "value": "Prywatne adresy" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Plus grande fenêtre" + "value": "Endereços privados" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "最大のウィンドウ" + "value": "Частные адреса" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "가장 큰 창" + "value": "ที่อยู่ส่วนตัว" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "最大的窗口" + "value": "Özel adresler" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "最大的視窗" + "value": "Приватні адреси" } } } }, - "terminalSharing.owner.shared": { + "cloud.vpn.setup.openSettings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shared size" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "حجم مشترك" + "value": "Open System Settings" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gemeinsame Größe" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tamaño compartido" + "value": "Systemeinstellungen öffnen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille partagée" + "value": "Ouvrir Réglages Système" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "共有サイズ" + "value": "Abrir Ajustes del Sistema" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "공유 크기" + "value": "システム設定を開く" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "共享大小" + "value": "打开系统设置" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "共用大小" - } - } - } - }, - "terminalSharing.owner.smallest": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Fits everyone" + "value": "打開系統設定" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "يناسب الجميع" + "value": "시스템 설정 열기" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Passt für alle" + "value": "فتح إعدادات النظام" } }, - "es": { + "bs": { "stringUnit": { "state": "translated", - "value": "Se ajusta a todos" + "value": "Otvori Postavke sistema" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "Convient à tous" + "value": "Åbn Systemindstillinger" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "全員に合わせる" + "value": "Apri Impostazioni di Sistema" } }, - "ko": { + "km": { "stringUnit": { "state": "translated", - "value": "모두에게 맞춤" + "value": "បើកការកំណត់ប្រព័ន្ធ" } }, - "zh-Hans": { + "nb": { "stringUnit": { "state": "translated", - "value": "适合所有人" + "value": "Åpne Systeminnstillinger" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "符合所有人" - } - } - } - }, - "terminalSharing.participant.thisMac": { - "extractionState": "manual", - "localizations": { - "en": { + "pl": { "stringUnit": { "state": "translated", - "value": "This Mac" + "value": "Otwórz Ustawienia systemowe" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "جهاز Mac هذا" + "value": "Abrir Ajustes do Sistema" } }, - "de": { + "ru": { "stringUnit": { "state": "translated", - "value": "Dieser Mac" + "value": "Открыть системные настройки" } }, - "es": { + "th": { "stringUnit": { "state": "translated", - "value": "Este Mac" + "value": "เปิดการตั้งค่าระบบ" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "Ce Mac" + "value": "Sistem Ayarlarını aç" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "このMac" + "value": "Відкрити Системні параметри" } - }, - "ko": { + } + } + }, + "settings.app.accentColor.custom": { + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "이 Mac" + "value": "مخصص" } }, - "zh-Hans": { + "bs": { "stringUnit": { "state": "translated", - "value": "这台 Mac" + "value": "Prilagođeno" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "這台 Mac" - } - } - } - }, - "terminalSharing.owner.possessiveDevice": { - "extractionState": "manual", - "localizations": { - "en": { + "da": { "stringUnit": { "state": "translated", - "value": "%1$@'s %2$@" + "value": "Tilpasset" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Benutzerdefiniert" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Custom" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Personalizado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Personnalisée" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "%1$@の%2$@" + "value": "Personalizzato" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@의 %2$@" + "value": "カスタム" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@的%2$@" + "value": "사용자 지정" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "%1$@的%2$@" - } - } - } - }, - "terminalSharing.owner.fixedShort": { - "extractionState": "manual", - "localizations": { - "en": { + "nb": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "Egendefinert" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "Niestandardowy" } }, - "de": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "Personalizado" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "Пользовательский" } }, - "fr": { + "th": { "stringUnit": { "state": "translated", - "value": "Fixe" + "value": "กำหนดเอง" } }, - "ja": { + "tr": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "Özel" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "고정" + "value": "Власний" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "自定义" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "自訂" } } } }, - "terminalSharing.tab.tooltip": { + "devices.incoming.confirm.enable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size set by %1$@ · %2$@" + "value": "Make Discoverable" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحجم يحدده %1$@ · %2$@" + "value": "جعل الجهاز قابلاً للاكتشاف" } }, "de": { "stringUnit": { "state": "translated", - "value": "Größe festgelegt von %1$@ · %2$@" + "value": "Auffindbar machen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño definido por %1$@ · %2$@" + "value": "Hacer detectable" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille définie par %1$@ · %2$@" + "value": "Rendre détectable" } }, "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$@" - } - } - } - }, - "terminalSharing.panel.sizeLabel": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Size" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الحجم" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Größe" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tamaño" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Taille" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "サイズ" + "value": "允許探索" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "크기" + "value": "Učini dostupnim" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "尺寸" + "value": "Gør synlig" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "尺寸" - } - } - } - }, - "terminalSharing.sizeMode.latest": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Follow Latest" + "value": "Rendi individuabile" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "اتباع الأحدث" + "value": "ធ្វើឲ្យអាចរកឃើញ" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Letzter Eingabe folgen" + "value": "Gjør denne Mac-en synlig" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Seguir la última entrada" + "value": "Włącz wykrywanie" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Suivre la dernière saisie" + "value": "Tornar detectável" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "最新の入力に合わせる" + "value": "Сделать доступным для обнаружения" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "최근 입력 따르기" + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "跟随最新输入" + "value": "Keşfedilebilir yap" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "跟隨最新輸入" + "value": "Зробити цей Mac видимим" } } } }, - "terminalSharing.sizeMode.smallest": { + "devices.incoming.confirm.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fit Everyone" + "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": "Allen anpassen" + "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": "Ajustar a todos" + "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": "Adapter à tous" + "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": "適合所有人" - } - } - } - }, - "terminalSharing.sizeMode.largest": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Largest Window" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "أكبر نافذة" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Größtes Fenster" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ventana más grande" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Plus grande fenêtre" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "最大のウインドウ" + "value": "登入您 cmux 帳戶的其他 Mac 可能會探索此 Mac 並連線至其工作區。要繼續嗎?" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "가장 큰 윈도우" + "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?" } }, - "zh-Hans": { + "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?" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "最大視窗" - } - } - } - }, - "terminalSharing.sizeMode.priority": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Priority" + "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?" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "الأولوية" + "value": "Mac ផ្សេងទៀតដែលបានចូលគណនី cmux របស់អ្នក អាចរកឃើញ Mac នេះ និងភ្ជាប់ទៅកាន់ workspace របស់វា។ តើអ្នកចង់បន្តឬទេ?" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Priorität" + "value": "Andre Mac-maskiner som er logget på cmux-kontoen din, kan finne denne Mac-en og koble til arbeidsområdene. Vil du fortsette?" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Prioridad" + "value": "Inne Maki zalogowane na Twoje konto cmux mogą wykryć tego Maca i połączyć się z jego obszarami roboczymi. Czy chcesz kontynuować?" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Priorité" + "value": "Outros Macs conectados à sua conta cmux poderão descobrir este Mac e se conectar aos seus espaços de trabalho. Deseja continuar?" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "優先順位" + "value": "Другие Mac, вошедшие в вашу учётную запись cmux, могут обнаружить этот Mac и подключиться к его рабочим пространствам. Продолжить?" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "우선순위" + "value": "Mac เครื่องอื่นที่ลงชื่อเข้าใช้บัญชี cmux ของคุณอาจค้นพบ Mac เครื่องนี้และเชื่อมต่อกับพื้นที่ทำงานของเครื่องนี้ คุณต้องการดำเนินการต่อหรือไม่" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "优先级" + "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.sizeMode.fixed": { + "devices.incoming.confirm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "Make this Mac discoverable?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "هل تريد جعل جهاز Mac هذا قابلاً للاكتشاف؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "Diesen Mac auffindbar machen?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "¿Hacer que este Mac sea detectable?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fixe" + "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": "固定" - } - } - } - }, - "terminalSharing.panel.setsSize": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "sets size" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يحدد الحجم" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "legt Größe fest" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "define el tamaño" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "définit la taille" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "サイズを設定" + "value": "要允許探索此 Mac 嗎?" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "크기 설정" + "value": "Učiniti ovaj Mac dostupnim?" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "设定尺寸" + "value": "Gør denne Mac synlig?" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "設定尺寸" - } - } - } - }, - "terminalSharing.panel.notCounted": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "not counted" + "value": "Rendere individuabile questo Mac?" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "غير محتسب" + "value": "ធ្វើឲ្យ Mac នេះអាចរកឃើញ?" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "nicht gezählt" + "value": "Gjøre denne Mac-en synlig?" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "no cuenta" + "value": "Uwidocznić tego Maca?" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "non compté" + "value": "Tornar este Mac detectável?" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "カウント対象外" + "value": "Сделать этот Mac доступным для обнаружения?" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "계산 안 됨" + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้หรือไม่" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "不计入" + "value": "Bu Mac keşfedilebilir yapılsın mı?" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "不計入" + "value": "Зробити цей Mac доступним для виявлення?" } } } }, - "terminalSharing.panel.rowOptions": { + "cloudTree.device.status.connecting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Options for %@" + "value": "Connecting…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "خيارات %@" + "value": "جارٍ الاتصال…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Optionen für %@" + "value": "Wird verbunden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Opciones de %@" + "value": "Conectando…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Options pour %@" + "value": "Connexion…" } }, "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.disconnectOthersButton": { + "cloud.teamPicker.createSheet.create": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect Others" + "value": "Create" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع اتصال الآخرين" + "value": "إنشاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Andere trennen" + "value": "Erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar a los demás" + "value": "Crear" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres" + "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.detached.titleShort": { + "cloud.teamPicker.createSheet.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Detached" + "value": "Create Team" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم الفصل" + "value": "إنشاء فريق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Getrennt" + "value": "Team erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectado" + "value": "Crear equipo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Détaché" + "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.detached.byMessageShort": { + "cloud.teamPicker.createTeam": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ disconnected this Mac at %2$@." + "value": "Create Team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع %1$@ اتصال هذا الـMac في %2$@." + "value": "إنشاء فريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ hat diesen Mac um %2$@ getrennt." + "value": "Team erstellen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ desconectó este Mac a las %2$@." + "value": "Crear equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ a déconnecté ce Mac à %2$@." + "value": "Créer une équipe…" } }, "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的連線。" - } - } - } - }, - "terminalSharing.chip.hiddenColumns": { - "extractionState": "manual", - "localizations": { - "en": { - "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 欄" - } - } - } + "value": "建立團隊…" } } } }, - "terminalSharing.panel.cancel": { + "cloud.teamPicker.switching": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Switching teams…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "جارٍ تبديل الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Team wird gewechselt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Cambiando de equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "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.panel.disconnectOthers.confirm": { + "cloud.teamPicker.creating": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect all other clients?" + "value": "Creating team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد قطع اتصال جميع العملاء الآخرين؟" + "value": "جارٍ إنشاء الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Alle anderen Clients trennen?" + "value": "Team wird erstellt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Desconectar todos los demás clientes?" + "value": "Creando equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter tous les autres clients ?" + "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.panel.disconnectOthers.confirmButton": { + "socket.authTeam.busy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "Another team change is in progress. Try again when it finishes." } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." } }, "de": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "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.panel.fixedColumns": { + "cloud.teamPicker.createSheet.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Columns" + "value": "The new team becomes your active team." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأعمدة" + "value": "يصبح الفريق الجديد فريقك النشط." } }, "de": { "stringUnit": { "state": "translated", - "value": "Spalten" + "value": "Das neue Team wird Ihr aktives Team." } }, "es": { "stringUnit": { "state": "translated", - "value": "Columnas" + "value": "El nuevo equipo pasa a ser su equipo activo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Colonnes" + "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.panel.fixedRows": { + "settings.search.alias.section.themes": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rows" + "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": "Zeilen" + "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": "Filas" + "value": "theme themes color scheme colors palette ghostty light dark mode accent سمة سمات ألوان لوحة فاتح داكن تمييز" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Lignes" + "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.unavailable": { + "settings.section.themes": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This terminal is not shared." + "value": "Themes" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هذه الطرفية غير مشتركة." + "value": "السمات" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Terminal wird nicht geteilt." + "value": "Designs" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta terminal no está compartida." + "value": "Temas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce terminal n’est pas partagé." + "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.counts": { + "settings.terminal.theme": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Counts toward size" + "value": "Terminal Theme" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يُحتسب في الحجم" + "value": "سمة الطرفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zählt für die Größe" + "value": "Terminal-Design" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cuenta para el tamaño" + "value": "Tema del terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Compte pour la taille" + "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.disconnect": { + "shortcut.diffViewerNextHunk.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قطع الاتصال" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Trennen" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Desconectar" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Déconnecter" + "value": "Diff Viewer: Next Hunk" } }, "ja": { "stringUnit": { "state": "translated", - "value": "切断" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "연결 끊기" + "value": "差分ビューア: 次のハンク" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开连接" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "中斷連線" - } - } - } - }, - "settings.search.alias.section.themes": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent" + "value": "差异查看器:下一个块" } }, "de": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent design designs farbschema farben palette hell dunkel akzent" + "value": "Diff-Viewer: Nächster Hunk" } }, "fr": { "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": "Visionneuse de diff : Bloc suivant" } }, "ar": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent سمة سمات ألوان لوحة فاتح داكن تمييز" + "value": "عارض الفروق: المقطع التالي" } }, "es": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent tema temas colores paleta claro oscuro acento" + "value": "Visor de diff: Siguiente bloque" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 主題 配色 顏色 調色盤 淺色 深色 強調色" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 主题 配色 颜色 调色板 浅色 深色 强调色" + "value": "差異檢視器:下一個區塊" } }, "ko": { "stringUnit": { "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 테마 색상 팔레트 라이트 다크 강조색" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent テーマ 配色 カラー パレット ライト ダーク アクセント" + "value": "비교 뷰어: 다음 헝크" } } } }, - "settings.section.themes": { + "shortcut.diffViewerPreviousHunk.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Themes" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "السمات" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Designs" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Temas" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Thèmes" + "value": "Diff Viewer: Previous Hunk" } }, "ja": { "stringUnit": { "state": "translated", - "value": "テーマ" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "테마" + "value": "差分ビューア: 前のハンク" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "主题" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "主題" - } - } - } - }, - "settings.terminal.theme": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Terminal Theme" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "سمة الطرفية" + "value": "差异查看器:上一个块" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal-Design" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tema del terminal" + "value": "Diff-Viewer: Vorheriger Hunk" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Thème du terminal" + "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": "비교 뷰어: 이전 헝크" } } } @@ -588048,6 +587064,131 @@ } } }, + "cloudTree.action.newCloudMachine": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "New Cloud Machine" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "جهاز سحابي جديد" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Neue Cloud-Maschine" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nueva máquina en la nube" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Nouvelle machine cloud" + } + }, + "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": "Nova cloud mašina" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Ny cloud-maskine" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Nuova macchina cloud" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ម៉ាស៊ីន Cloud ថ្មី" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Ny sky-maskin" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Nowa maszyna w chmurze" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Nova máquina na nuvem" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новая облачная машина" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "เครื่องคลาวด์ใหม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Yeni bulut makinesi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Нова хмарна машина" + } + } + } + }, "terminalContextMenu.copyLink": { "extractionState": "manual", "localizations": { @@ -588284,6 +587425,301 @@ } } }, + "settings.terminal.textEditingCommandMovesByWord": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Command Moves by Word" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "Command ينقل حسب الكلمة" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Befehlstaste bewegt wortweise" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Comando mueve por palabra" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Commande déplace par mot" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Command で単語単位に移動" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Command로 단어 단위 이동" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Command 按词移动" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Command 依字移動" + } + } + } + }, + "settings.terminal.textEditingCommandMovesByWord.subtitleOn": { + "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." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب الكلمة، مثل Option. وينقل Control مع السهمين الأيسر والأيمن إلى بداية السطر ونهايته." + } + }, + "de": { + "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." + } + }, + "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." + } + }, + "fr": { + "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." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Command と矢印キー・削除キーで、Option と同じく単語単位に移動・削除します。Control と左右矢印キーで行頭・行末に移動します。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Command 화살표 및 삭제 키가 Option처럼 단어 단위로 이동하고 삭제합니다. Control 왼쪽 및 오른쪽 화살표는 줄의 시작과 끝으로 이동합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向键和删除键按词移动和删除,与 Option 相同。Control 加左右方向键移到行首和行尾。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向鍵與刪除鍵會依字移動與刪除,與 Option 相同。Control 加左右方向鍵會移到行首與行尾。" + } + } + } + }, + "settings.terminal.textEditingCommandMovesByWord.subtitleOff": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Command arrow and delete keys move and delete by line, as in macOS text fields." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب السطر، كما في حقول النص في macOS." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht zeilenweise, wie in macOS-Textfeldern." + } + }, + "es": { + "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." + } + }, + "fr": { + "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." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Command と矢印キー・削除キーで、macOS のテキストフィールドと同じく行単位に移動・削除します。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Command 화살표 및 삭제 키가 macOS 텍스트 필드처럼 줄 단위로 이동하고 삭제합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向键和删除键按行移动和删除,与 macOS 文本框相同。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向鍵與刪除鍵會依行移動與刪除,與 macOS 文字欄位相同。" + } + } + } + }, + "settings.terminal.textEditingGesturesInFullScreenApps": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Text Editing Gestures in Full-Screen Apps" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "إيماءات تحرير النص في التطبيقات بملء الشاشة" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Textbearbeitungsgesten in Vollbild-Apps" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Gestos de edición de texto en apps a pantalla completa" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Gestes d’édition de texte dans les apps plein écran" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "フルスクリーンアプリでのテキスト編集ジェスチャー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "전체 화면 앱에서 텍스트 편집 제스처" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "全屏应用中的文本编辑手势" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "全螢幕 App 中的文字編輯手勢" + } + } + } + }, + "settings.terminal.textEditingGesturesInFullScreenApps.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "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." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تنطبق الإيماءات أيضًا أثناء تشغيل تطبيق بملء الشاشة مثل vim أو less أو tmux، فتظل تعمل في الصدفة داخل tmux أو screen أو zellij." + } + }, + "de": { + "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." + } + }, + "es": { + "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." + } + }, + "fr": { + "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." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "vim、less、tmux などのフルスクリーンアプリの実行中もジェスチャーが有効になるため、tmux、screen、zellij 内のシェルでも引き続き使えます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "vim, less, tmux 같은 전체 화면 앱이 실행 중일 때도 제스처가 적용되므로 tmux, screen, zellij 안의 셸에서도 계속 작동합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在 vim、less 或 tmux 等全屏应用运行时手势也会生效,因此在 tmux、screen 或 zellij 中的 shell 里仍可使用。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在 vim、less 或 tmux 等全螢幕 App 執行時手勢也會生效,因此在 tmux、screen 或 zellij 中的 shell 裡仍可使用。" + } + } + } + }, "command.copyWorkingDirectory.title": { "extractionState": "manual", "localizations": { @@ -588641,4054 +588077,4172 @@ } } }, - "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": "작업 유형: %@" + "value": "차이 뷰어: 확인함 전환" } - }, - "nb": { + } + } + }, + "diffViewer.viewed": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Handlingstype: %@" + "value": "Viewed" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Typ działania: %@" + "value": "確認済み" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Tipo de ação: %@" + "value": "已查看" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Тип действия: %@" + "value": "已檢視" } }, - "th": { + "de": { "stringUnit": { "state": "translated", - "value": "ประเภทการดำเนินการ: %@" + "value": "Angesehen" } }, - "tr": { + "fr": { "stringUnit": { "state": "translated", - "value": "Eylem türü: %@" + "value": "Vu" } }, - "uk": { + "ar": { "stringUnit": { "state": "translated", - "value": "Тип дії: %@" + "value": "تمت المشاهدة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "操作类型:%@" + "value": "Visto" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "動作類型:%@" + "value": "확인함" } } } }, - "actions.discovery.shortcutDetail": { + "diffViewer.markViewed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shortcut: %@" + "value": "Mark as 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": "Als angesehen markieren" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Raccourci : %@" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Scorciatoia: %@" + "value": "Marquer comme vu" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ショートカット:%@" + "value": "وضع علامة تمت المشاهدة" } }, - "km": { + "es": { "stringUnit": { "state": "translated", - "value": "ផ្លូវកាត់៖ %@" + "value": "Marcar como visto" } }, "ko": { "stringUnit": { "state": "translated", - "value": "단축키: %@" + "value": "확인함으로 표시" } - }, - "nb": { + } + } + }, + "diffViewer.markNotViewed": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Snarvei: %@" + "value": "Mark as not viewed" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Skrót: %@" + "value": "未確認にする" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Atalho: %@" + "value": "标记为未查看" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Сочетание клавиш: %@" + "value": "標記為未檢視" } }, - "th": { + "de": { "stringUnit": { "state": "translated", - "value": "แป้นพิมพ์ลัด: %@" + "value": "Als nicht angesehen markieren" } }, - "tr": { + "fr": { "stringUnit": { "state": "translated", - "value": "Klavye kısayolu: %@" + "value": "Marquer comme non vu" } }, - "uk": { + "ar": { "stringUnit": { "state": "translated", - "value": "Сполучення клавіш: %@" + "value": "إزالة علامة تمت المشاهدة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "快捷键:%@" + "value": "Marcar como no visto" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "快速鍵:%@" + "value": "확인 안 함으로 표시" } } } }, - "actions.discovery.menuTitle": { + "diffViewer.changedSinceViewed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Actions · cmux.json…" + "value": "Changed since viewed" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "الإجراءات · cmux.json…" + "value": "確認後に変更あり" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Aktionen · cmux.json…" + "value": "查看后已更改" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Acciones · cmux.json…" + "value": "檢視後已變更" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Opérations · cmux.json…" + "value": "Seit dem Ansehen geändert" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "アクション · cmux.json…" + "value": "Modifié depuis la consultation" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "작업 · cmux.json…" + "value": "تغيّر منذ المشاهدة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "操作 · cmux.json…" + "value": "Cambiado desde que se vio" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "動作 · cmux.json…" + "value": "확인 후 변경됨" } } } }, - "actions.discovery.dialogTitle": { + "diffViewer.filesViewedProgress": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Actions · cmux.json" + "value": "{viewed} of {total} files viewed" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "الإجراءات · cmux.json" + "value": "{total} 件中 {viewed} 件のファイルを確認済み" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Aktionen · cmux.json" + "value": "已查看 {viewed}/{total} 个文件" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Acciones · cmux.json" + "value": "已檢視 {viewed}/{total} 個檔案" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Opérations · cmux.json" + "value": "{viewed} von {total} Dateien angesehen" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "アクション · cmux.json" + "value": "{viewed} fichiers sur {total} vus" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "작업 · cmux.json" + "value": "تمت مشاهدة {viewed} من {total} ملفات" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "操作 · cmux.json" + "value": "{viewed} de {total} archivos vistos" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "動作 · cmux.json" + "value": "{total}개 중 {viewed}개 파일 확인함" } } } }, - "actions.discovery.empty": { + "diffViewer.filterFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No configured actions." + "value": "Filter files" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لا توجد إجراءات مُعدّة." + "value": "ファイルを絞り込む" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Nema konfigurisanih radnji." + "value": "筛选文件" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ingen konfigurerede handlinger." + "value": "篩選檔案" } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine konfigurierten Aktionen." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No hay acciones configuradas." + "value": "Dateien filtern" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune action configurée." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Nessuna azione configurata." + "value": "Filtrer les fichiers" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "設定済みのアクションはありません。" + "value": "تصفية الملفات" } }, - "km": { + "es": { "stringUnit": { "state": "translated", - "value": "មិនមានសកម្មភាពដែលបានកំណត់រចនាសម្ព័ន្ធទេ។" + "value": "Filtrar archivos" } }, "ko": { "stringUnit": { "state": "translated", - "value": "구성된 작업이 없습니다." + "value": "파일 필터" } - }, - "nb": { + } + } + }, + "diffViewer.filterAddedFiles": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Ingen konfigurerte handlinger." + "value": "Added" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Brak skonfigurowanych działań." + "value": "追加" } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Nenhuma ação configurada." + "value": "新增" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Нет настроенных действий." + "value": "新增" } }, - "th": { + "de": { "stringUnit": { "state": "translated", - "value": "ไม่มีการดำเนินการที่กำหนดค่าไว้" + "value": "Hinzugefügt" } }, - "tr": { + "fr": { "stringUnit": { "state": "translated", - "value": "Yapılandırılmış eylem yok." + "value": "Ajoutés" } }, - "uk": { + "ar": { "stringUnit": { "state": "translated", - "value": "Немає налаштованих дій." + "value": "مضافة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "没有已配置的操作。" + "value": "Añadidos" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "沒有已設定的動作。" + "value": "추가됨" } } } }, - "agentWake.banner.close": { + "diffViewer.filterModifiedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Close" + "value": "Modified" } }, "ja": { "stringUnit": { "state": "translated", - "value": "閉じる" + "value": "変更" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Schließen" + "value": "已修改" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Fermer" + "value": "已修改" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إغلاق" + "value": "Geändert" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cerrar" + "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.banner.copy": { + "diffViewer.filterDeletedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy" + "value": "Deleted" } }, "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": "Gelöscht" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Copiar" + "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.banner.hideCommand": { + "diffViewer.filterRenamedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hide command" + "value": "Renamed" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コマンドを隠す" + "value": "名前変更" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Befehl ausblenden" + "value": "已重命名" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Masquer la commande" + "value": "已重新命名" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إخفاء الأمر" + "value": "Umbenannt" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ocultar comando" + "value": "Renommés" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "隱藏指令" + "value": "معاد تسميتها" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "隐藏命令" + "value": "Renombrados" } }, "ko": { "stringUnit": { "state": "translated", - "value": "명령 숨기기" + "value": "이름 변경됨" } } } }, - "agentWake.banner.message": { + "diffViewer.hideViewedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ didn't resume after waking." + "value": "Hide viewed 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": "Angesehene Dateien ausblenden" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ no se reanudó después de despertar." + "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.banner.retry": { + "diffViewer.showViewedFiles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Retry" + "value": "Show viewed files" } }, "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": "Angesehene Dateien anzeigen" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Reintentar" + "value": "Afficher les fichiers vus" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "重試" + "value": "إظهار الملفات التي تمت مشاهدتها" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "重试" + "value": "Mostrar archivos vistos" } }, "ko": { "stringUnit": { "state": "translated", - "value": "재시도" + "value": "확인한 파일 표시" } } } }, - "agentWake.banner.showCommand": { + "diffViewer.noFilesMatchFilter": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show command" + "value": "No files match the filter." } }, "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": "Keine Dateien entsprechen dem Filter." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mostrar comando" + "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": "필터와 일치하는 파일이 없습니다." } } } }, - "agentWake.notification.title": { + "diffViewer.generatedFile": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ didn't resume" + "value": "Generated file" } }, "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": "Generierte Datei" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ no se reanudó" + "value": "Fichier généré" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ 未能恢復" + "value": "ملف مُولَّد" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ 未能恢复" + "value": "Archivo generado" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@이(가) 다시 시작되지 않았습니다" + "value": "생성된 파일" } } } }, - "agentWake.reason.didNotStart": { + "diffViewer.largeDiff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "It did not start within 90 seconds." + "value": "Large diff" } }, "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": "Großer Diff" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "No se inició en 90 segundos." + "value": "Diff volumineux" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "未在 90 秒內啟動。" + "value": "فرق كبير" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "未在 90 秒内启动。" + "value": "Diff grande" } }, "ko": { "stringUnit": { "state": "translated", - "value": "90초 안에 시작되지 않았습니다." + "value": "큰 변경 사항" } } } }, - "agentWake.reason.exitedBeforeStart": { + "diffViewer.loadDiff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Its resume command exited." + "value": "Load diff" } }, "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": "Diff laden" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Su comando de reanudación terminó." + "value": "Charger le diff" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "其恢復指令已結束。" + "value": "تحميل الفرق" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "其恢复命令已退出。" + "value": "Cargar diff" } }, "ko": { "stringUnit": { "state": "translated", - "value": "재개 명령이 종료되었습니다." + "value": "변경 사항 불러오기" } } } }, - "agentWake.status.multiple": { + "diffViewer.clearFileFilter": { "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": "Clear filter" } }, "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": "Filter zurücksetzen" } }, - "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": "Effacer le filtre" } }, - "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": "Borrar filtro" } }, "ko": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "에이전트 %ld개가 다시 시작되지 않았습니다" - } - } - } + "stringUnit": { + "state": "translated", + "value": "필터 지우기" } } } }, - "agentWake.status.single": { + "socket.sidebar.closeSurface.confirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent didn't resume" + "value": "Surface has a running process; retry with --force" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "エージェントが再開しませんでした" + "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent wurde nicht fortgesetzt" + "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "L’agent n’a pas repris" + "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con --force" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "لم يُستأنف الوكيل" + "value": "La surface a un processus en cours d’exécution ; réessayez avec --force" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "El agente no se reanudó" + "value": "サーフェスでプロセスが実行中です。--force を指定して再試行してください" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "代理程式未能恢復" + "value": "표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "代理未能恢复" + "value": "此表面有正在运行的进程;请使用 --force 重试" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "에이전트가 다시 시작되지 않았습니다" + "value": "此表面有正在執行的程序;請使用 --force 重試" } } } }, - "cli.help.record": { + "socket.sidebar.closeSurface.failed": { "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": "Failed to close surface" } }, "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\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": { "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": "Die Oberfläche konnte nicht geschlossen werden" } }, "es": { "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": "No se pudo cerrar la superficie" } }, "fr": { "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": "Échec de la fermeture de la surface" } }, "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\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": "サーフェスを閉じられませんでした" } }, "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로\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": { "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": "无法关闭此表面" } }, "zh-Hant": { "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": { + "socket.surface.close.confirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record start: --gif conflicts with --format" + "value": "Surface has a running process; retry with force=true" } }, "ar": { "stringUnit": { "state": "translated", - "value": "record start: لا يمكن دمج --gif مع --format" + "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" } }, "de": { "stringUnit": { "state": "translated", - "value": "record start: --gif kann nicht mit --format kombiniert werden" + "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "record start: --gif no se puede combinar con --format" + "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con force=true" } }, "fr": { "stringUnit": { "state": "translated", - "value": "record start: --gif ne peut pas être combiné avec --format" + "value": "La surface a un processus en cours d’exécution ; réessayez avec force=true" } }, "ja": { "stringUnit": { "state": "translated", - "value": "record start: --gif は --format と併用できません" + "value": "サーフェスでプロセスが実行中です。force=true を指定して再試行してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record start: --gif은 --format과 함께 사용할 수 없습니다" + "value": "표면에서 실행 중인 프로세스가 있습니다. force=true로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record start: --gif 不能与 --format 同用" + "value": "此表面有正在运行的进程;请使用 force=true 重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record start: --gif 無法與 --format 同時使用" + "value": "此表面有正在執行的程序;請使用 force=true 重試" } } } }, - "cli.record.error.noteText": { + "socket.surface.close.failed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record note: text is required" + "value": "Failed to close surface" } }, "ar": { "stringUnit": { "state": "translated", - "value": "record note: النص مطلوب" + "value": "تعذر إغلاق السطح" } }, "de": { "stringUnit": { "state": "translated", - "value": "record note: Text ist erforderlich" + "value": "Die Oberfläche konnte nicht geschlossen werden" } }, "es": { "stringUnit": { "state": "translated", - "value": "record note: se requiere el texto" + "value": "No se pudo cerrar la superficie" } }, "fr": { "stringUnit": { "state": "translated", - "value": "record note : le texte est requis" + "value": "Échec de la fermeture de la surface" } }, "ja": { "stringUnit": { "state": "translated", - "value": "record note: テキストが必要です" + "value": "サーフェスを閉じられませんでした" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record note: 텍스트가 필요합니다" + "value": "표면을 닫지 못했습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record note: 必须提供文本" + "value": "无法关闭此表面" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record note: 必須提供文字" + "value": "無法關閉表面" } } } }, - "cli.record.error.unexpectedArguments": { + "socket.tabAction.close.confirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record %@: unexpected arguments: %@" + "value": "One or more surfaces have a running process; retry with force=true" } }, "ar": { "stringUnit": { "state": "translated", - "value": "record %@: وسائط غير متوقعة: %@" + "value": "سطح واحد أو أكثر يحتوي على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" } }, "de": { "stringUnit": { "state": "translated", - "value": "record %@: unerwartete Argumente: %@" + "value": "Mindestens eine Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "record %@: argumentos inesperados: %@" + "value": "Una o más superficies tienen un proceso en ejecución; vuelve a intentarlo con force=true" } }, "fr": { "stringUnit": { "state": "translated", - "value": "record %@ : arguments inattendus : %@" + "value": "Une ou plusieurs surfaces ont un processus en cours d’exécution ; réessayez avec force=true" } }, "ja": { "stringUnit": { "state": "translated", - "value": "record %@: 予期しない引数: %@" + "value": "1 つ以上のサーフェスでプロセスが実行中です。force=true を指定して再試行してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record %@: 예기치 않은 인수: %@" + "value": "하나 이상의 표면에서 프로세스가 실행 중입니다. force=true로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record %@: 多余的参数: %@" + "value": "一个或多个表面有正在运行的进程;请使用 force=true 重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record %@: 未預期的引數: %@" + "value": "一個或多個表面有正在執行的程序;請使用 force=true 重試" } } } }, - "cli.record.error.unknownSubcommand": { + "cli.socket.error.workspaceCloseConfirmationRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "record: unknown subcommand '%@' (start, stop, status, note, list)" + "value": "Workspace has a running process; retry with --force" } }, "ar": { "stringUnit": { "state": "translated", - "value": "record: أمر فرعي غير معروف '%@' (start، stop، status، note، list)" + "value": "تحتوي مساحة العمل على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" } }, "de": { "stringUnit": { "state": "translated", - "value": "record: unbekannter Unterbefehl „%@“ (start, stop, status, note, list)" + "value": "Arbeitsbereich mit laufendem Prozess; erneut mit --force versuchen" } }, "es": { "stringUnit": { "state": "translated", - "value": "record: subcomando desconocido '%@' (start, stop, status, note, list)" + "value": "El espacio de trabajo tiene un proceso en ejecución; vuelve a intentarlo con --force" } }, "fr": { "stringUnit": { "state": "translated", - "value": "record : sous-commande inconnue '%@' (start, stop, status, note, list)" + "value": "L’espace de travail a un processus en cours d’exécution ; réessayez avec --force" } }, "ja": { "stringUnit": { "state": "translated", - "value": "record: 不明なサブコマンド '%@' です(start、stop、status、note、list)" + "value": "ワークスペースでプロセスが実行中です。--force を指定して再試行してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "record: 알 수 없는 하위 명령 '%@' (start, stop, status, note, list)" + "value": "워크스페이스에서 프로세스가 실행 중입니다. --force로 다시 시도하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" + "value": "此工作区有正在运行的进程;请使用 --force 重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "record: 未知的子命令 '%@'(start、stop、status、note、list)" + "value": "此工作區有正在執行的程序;請使用 --force 重試" } } } }, - "cli.usage.record": { + "cli.socket.error.windowCloseConfirmationRequired": { "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": "One or more workspaces or Dock surfaces have a running process; retry with --force" } }, - "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": "تحتوي مساحة عمل واحدة أو أكثر أو أسطح Dock على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" } }, - "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": "Mindestens ein Workspace oder eine Dock-Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" } }, "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": "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": "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": "Un ou plusieurs espaces de travail ou surfaces du Dock ont un processus en cours d’exécution ; réessayez avec --force" } }, "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": "1 つ以上のワークスペースまたは Dock サーフェスでプロセスが実行中です。--force を指定して再試行してください" } }, "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": "하나 이상의 워크스페이스 또는 Dock 표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" } }, "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": "一个或多个工作区或 Dock 表面有正在运行的进程;请使用 --force 重试" } }, "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": "一個或多個工作區或 Dock 表面有正在執行的程序;請使用 --force 重試" } } } }, - "cli.help.shot": { + "agent.generic.status.runningSubagents": { "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": "Running subagents" } }, "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": "Subagenten werden ausgeführt" } }, "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": "Ejecutando subagentes" } }, "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": "Sous-agents en cours d’exécution" } }, "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": { + "agent.generic.status.waiting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "shot: --jpg conflicts with --format" + "value": "Waiting" } }, "ar": { "stringUnit": { "state": "translated", - "value": "shot: لا يمكن دمج --jpg مع --format" + "value": "في الانتظار" } }, "de": { "stringUnit": { "state": "translated", - "value": "shot: --jpg kann nicht mit --format kombiniert werden" + "value": "Warten" } }, "es": { "stringUnit": { "state": "translated", - "value": "shot: --jpg no se puede combinar con --format" + "value": "Esperando" } }, "fr": { "stringUnit": { "state": "translated", - "value": "shot : --jpg ne peut pas être combiné avec --format" + "value": "En attente" } }, "ja": { "stringUnit": { "state": "translated", - "value": "shot: --jpg は --format と併用できません" + "value": "待機中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "shot: --jpg은 --format과 함께 사용할 수 없습니다" + "value": "대기 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "shot: --jpg 不能与 --format 同用" + "value": "等待中" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "shot: --jpg 無法與 --format 同時使用" + "value": "等待中" } } } }, - "cli.shot.error.unexpectedArguments": { + "cloud.overlay.accessLost.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "shot: unexpected arguments: %@" + "value": "You no longer have access to this machine." } }, "ar": { "stringUnit": { "state": "translated", - "value": "shot: وسائط غير متوقعة: %@" + "value": "لم يعد لديك حق الوصول إلى هذا الجهاز." } }, "de": { "stringUnit": { "state": "translated", - "value": "shot: unerwartete Argumente: %@" + "value": "Sie haben keinen Zugriff mehr auf diese Maschine." } }, "es": { "stringUnit": { "state": "translated", - "value": "shot: argumentos inesperados: %@" + "value": "Ya no tienes acceso a esta máquina." } }, "fr": { "stringUnit": { "state": "translated", - "value": "shot : arguments inattendus : %@" + "value": "Vous n’avez plus accès à cette machine." } }, "ja": { "stringUnit": { "state": "translated", - "value": "shot: 予期しない引数: %@" + "value": "このマシンへのアクセス権がなくなりました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "shot: 예기치 않은 인수: %@" + "value": "더 이상 이 머신에 접근할 수 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "shot: 多余的参数: %@" + "value": "你已无法再访问这台机器。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "shot: 未預期的引數: %@" + "value": "你已無法再存取這台機器。" } } } }, - "cli.usage.shot": { + "cloud.overlay.accessLost.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" + "value": "Cloud machine unavailable" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "جهاز Cloud غير متاح" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud-Maschine nicht verfügbar" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Máquina de Cloud no disponible" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Machine Cloud indisponible" } }, "ja": { "stringUnit": { "state": "translated", - "value": "shot [--format png|jpg] [--jpg] [--scale ] [--max-width ] [--quality ] [--region ] [--out ] [--label ] [--caption ] [--window ]" + "value": "Cloud マシンを利用できません" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud 머신을 사용할 수 없습니다" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cloud 机器不可用" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Cloud 機器無法使用" } } } }, - "socket.sidebar.closeSurface.confirmationRequired": { + "cloud.overlay.signedOut.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Surface has a running process; retry with --force" + "value": "Sign in to cmux to reconnect this terminal." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" + "value": "سجّل الدخول إلى cmux لإعادة توصيل هذه الطرفية." } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" + "value": "Melden Sie sich bei cmux an, um dieses Terminal erneut zu verbinden." } }, "es": { "stringUnit": { "state": "translated", - "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con --force" + "value": "Inicia sesión en cmux para volver a conectar este terminal." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La surface a un processus en cours d’exécution ; réessayez avec --force" + "value": "Connectez-vous à cmux pour reconnecter ce terminal." } }, "ja": { "stringUnit": { "state": "translated", - "value": "サーフェスでプロセスが実行中です。--force を指定して再試行してください" + "value": "このターミナルに再接続するには cmux にサインインしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" + "value": "이 터미널을 다시 연결하려면 cmux에 로그인하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此表面有正在运行的进程;请使用 --force 重试" + "value": "登录 cmux 以重新连接此终端。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此表面有正在執行的程序;請使用 --force 重試" + "value": "登入 cmux 以重新連線此終端機。" } } } }, - "socket.sidebar.closeSurface.failed": { + "cloud.overlay.signedOut.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Failed to close surface" + "value": "Cloud session ended" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذر إغلاق السطح" + "value": "انتهت جلسة Cloud" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche konnte nicht geschlossen werden" + "value": "Cloud-Sitzung beendet" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo cerrar la superficie" + "value": "Sesión de Cloud finalizada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Échec de la fermeture de la surface" + "value": "Session Cloud terminée" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サーフェスを閉じられませんでした" + "value": "Cloud セッションが終了しました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "표면을 닫지 못했습니다" + "value": "Cloud 세션이 종료되었습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法关闭此表面" + "value": "Cloud 会话已结束" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法關閉表面" + "value": "Cloud 工作階段已結束" } } } }, - "socket.surface.close.confirmationRequired": { + "settingAction.confirm.apply": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Surface has a running process; retry with force=true" + "value": "Change" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تحتوي السطح على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" + "value": "Ändern" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" + "value": "Modifier" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "La superficie tiene un proceso en ejecución; vuelve a intentarlo con force=true" + "value": "تغيير" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "La surface a un processus en cours d’exécution ; réessayez avec force=true" + "value": "Cambiar" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サーフェスでプロセスが実行中です。force=true を指定して再試行してください" + "value": "變更" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "표면에서 실행 중인 프로세스가 있습니다. force=true로 다시 시도하세요" + "value": "更改" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "此表面有正在运行的进程;请使用 force=true 重试" + "value": "변경" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此表面有正在執行的程序;請使用 force=true 重試" + "value": "変更" } } } }, - "socket.surface.close.failed": { + "settingAction.confirm.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Failed to close surface" + "value": "This action edits your cmux.json:\n\n%@" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذر إغلاق السطح" + "value": "Diese Aktion bearbeitet deine cmux.json:\n\n%@" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Oberfläche konnte nicht geschlossen werden" + "value": "Cette action modifie votre cmux.json :\n\n%@" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "No se pudo cerrar la superficie" + "value": "يعدّل هذا الإجراء ملف cmux.json:\n\n%@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Échec de la fermeture de la surface" + "value": "Esta acción edita tu cmux.json:\n\n%@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サーフェスを閉じられませんでした" + "value": "此動作會編輯你的 cmux.json:\n\n%@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "표면을 닫지 못했습니다" + "value": "此操作会编辑你的 cmux.json:\n\n%@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "无法关闭此表面" + "value": "이 작업은 cmux.json을 편집합니다:\n\n%@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無法關閉表面" + "value": "このアクションは cmux.json を編集します:\n\n%@" } } } }, - "socket.tabAction.close.confirmationRequired": { + "settingAction.confirm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "One or more surfaces have a running process; retry with force=true" + "value": "Change Setting?" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "سطح واحد أو أكثر يحتوي على عملية قيد التشغيل؛ أعد المحاولة باستخدام force=true" + "value": "Einstellung ändern?" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mindestens eine Oberfläche hat einen laufenden Prozess; erneut mit force=true versuchen" + "value": "Modifier le réglage ?" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Una o más superficies tienen un proceso en ejecución; vuelve a intentarlo con force=true" + "value": "هل تريد تغيير الإعداد؟" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Une ou plusieurs surfaces ont un processus en cours d’exécution ; réessayez avec force=true" + "value": "¿Cambiar el ajuste?" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "1 つ以上のサーフェスでプロセスが実行中です。force=true を指定して再試行してください" + "value": "要變更設定嗎?" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "하나 이상의 표면에서 프로세스가 실행 중입니다. force=true로 다시 시도하세요" + "value": "要更改设置吗?" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "一个或多个表面有正在运行的进程;请使用 force=true 重试" + "value": "설정을 변경할까요?" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "一個或多個表面有正在執行的程序;請使用 force=true 重試" + "value": "設定を変更しますか?" } } } }, - "cli.socket.error.workspaceCloseConfirmationRequired": { + "settingAction.failed.unreadable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Workspace has a running process; retry with --force" + "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" + "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": "Arbeitsbereich mit laufendem Prozess; erneut mit --force 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": "El espacio de trabajo tiene un proceso en ejecución; vuelve a intentarlo con --force" + "value": "تعذّر على cmux قراءة ~/.config/cmux/cmux.json أو حفظه. تحقّق من عدم وجود خطأ في الصياغة، ثم حاول مرة أخرى." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "L’espace de travail a un processus en cours d’exécution ; réessayez avec --force" + "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": "ワークスペースでプロセスが実行中です。--force を指定して再試行してください" + "value": "cmux 無法讀取或儲存 ~/.config/cmux/cmux.json。請檢查是否有語法錯誤,然後再試一次。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "워크스페이스에서 프로세스가 실행 중입니다. --force로 다시 시도하세요" + "value": "cmux 无法读取或保存 ~/.config/cmux/cmux.json。请检查是否有语法错误,然后重试。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "此工作区有正在运行的进程;请使用 --force 重试" + "value": "cmux가 ~/.config/cmux/cmux.json을 읽거나 저장하지 못했습니다. 구문 오류가 있는지 확인한 뒤 다시 시도하세요." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此工作區有正在執行的程序;請使用 --force 重試" + "value": "cmux は ~/.config/cmux/cmux.json を読み込むか保存できませんでした。構文エラーがないか確認してから、もう一度お試しください。" } } } }, - "cli.socket.error.windowCloseConfirmationRequired": { + "settingAction.failed.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "One or more workspaces or Dock surfaces have a running process; retry with --force" + "value": "Couldn't Change Setting" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحتوي مساحة عمل واحدة أو أكثر أو أسطح Dock على عملية قيد التشغيل؛ أعد المحاولة باستخدام --force" + "value": "تعذّر تغيير الإعداد" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mindestens ein Workspace oder eine Dock-Oberfläche hat einen laufenden Prozess; erneut mit --force versuchen" + "value": "Einstellung konnte nicht geändert werden" } }, "es": { "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": "No se pudo cambiar el ajuste" } }, "fr": { "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": "Impossible de modifier le réglage" } }, "ja": { "stringUnit": { "state": "translated", - "value": "1 つ以上のワークスペースまたは Dock サーフェスでプロセスが実行中です。--force を指定して再試行してください" + "value": "設定を変更できませんでした" } }, "ko": { "stringUnit": { "state": "translated", - "value": "하나 이상의 워크스페이스 또는 Dock 표면에서 실행 중인 프로세스가 있습니다. --force로 다시 시도하세요" + "value": "설정을 변경할 수 없음" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "一个或多个工作区或 Dock 表面有正在运行的进程;请使用 --force 重试" + "value": "无法更改设置" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "一個或多個工作區或 Dock 表面有正在執行的程序;請使用 --force 重試" + "value": "無法更改設定" } } } }, - "shortcut.diffViewerToggleViewed.label": { + "settings.terminal.predictiveLocalEcho": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Toggle Viewed" + "value": "Predictive Local Echo" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 確認済みを切り替え" + "value": "Vorausschauendes lokales Echo" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "差异查看器:切换已查看" + "value": "Écho local prédictif" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "差異檢視器:切換已檢視" + "value": "الصدى المحلي التنبؤي" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Angesehen umschalten" + "value": "Eco local predictivo" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Basculer « vu »" + "value": "預測性本機回顯" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: تبديل حالة المشاهدة" + "value": "预测性本地回显" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Alternar visto" + "value": "예측 로컬 에코" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "차이 뷰어: 확인함 전환" + "value": "予測ローカルエコー" } } } }, - "diffViewer.viewed": { + "settings.search.alias.setting.terminal.predictive-local-echo": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "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": "Angesehen" + "value": "terminal.predictiveLocalEcho eco local predictivo escritura latencia retraso ssh remoto especulativo mosh ida y vuelta subrayado" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Vu" + "value": "terminal.predictiveLocalEcho 預測性本機回顯 輸入 延遲 卡頓 ssh 遠端 推測 mosh 往返 底線" } }, - "ar": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "تمت المشاهدة" + "value": "terminal.predictiveLocalEcho 预测性本地回显 输入 延迟 卡顿 ssh 远程 推测 mosh 往返 下划线" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Visto" + "value": "terminal.predictiveLocalEcho 예측 로컬 에코 입력 지연 랙 ssh 원격 추측 mosh 왕복 밑줄" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "확인함" + "value": "terminal.predictiveLocalEcho 予測ローカルエコー 入力 遅延 ラグ ssh リモート 投機的 mosh 往復 下線" } } } }, - "diffViewer.markViewed": { + "cli.vm.run.createMissingMachineID": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mark as 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": "Als angesehen markieren" + "value": "vm run: لم يُرجع الإنشاء معرّف جهاز" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Marquer comme 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": "Marcar como visto" + "value": "vm run:建立未回傳機器 ID" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인함으로 표시" + "value": "vm run: 생성 결과에 머신 ID가 없습니다" } } } }, - "diffViewer.markNotViewed": { + "terminalContextMenu.pasteAsOneLine": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Mark as not 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 nicht angesehen markieren" + "value": "Coller sur une seule ligne" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Marquer comme non vu" + "value": "1行にしてペースト" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "إزالة علامة تمت المشاهدة" + "value": "한 줄로 붙여넣기" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Marcar como no visto" + "value": "粘贴为单行" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "확인 안 함으로 표시" + "value": "貼上為單行" } } } }, - "diffViewer.changedSinceViewed": { + "actions.discovery.typeDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Changed since 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": "Seit dem Ansehen geändert" + "value": "Aktionstyp: %@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Tipo de acción: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Modifié depuis la consultation" + "value": "Type d’action : %@" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "تغيّر منذ المشاهدة" + "value": "Tipo di azione: %@" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cambiado desde que se vio" + "value": "アクションの種類:%@" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ប្រភេទសកម្មភាព៖ %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인 후 변경됨" + "value": "작업 유형: %@" } - } - } - }, - "diffViewer.filesViewedProgress": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "{viewed} of {total} files viewed" + "value": "Handlingstype: %@" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "{total} 件中 {viewed} 件のファイルを確認済み" + "value": "Typ działania: %@" } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "已查看 {viewed}/{total} 个文件" + "value": "Tipo de ação: %@" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "已檢視 {viewed}/{total} 個檔案" + "value": "Тип действия: %@" } }, - "de": { + "th": { "stringUnit": { "state": "translated", - "value": "{viewed} von {total} Dateien angesehen" + "value": "ประเภทการดำเนินการ: %@" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "{viewed} fichiers sur {total} vus" + "value": "Eylem türü: %@" } }, - "ar": { + "uk": { "stringUnit": { "state": "translated", - "value": "تمت مشاهدة {viewed} من {total} ملفات" + "value": "Тип дії: %@" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "{viewed} de {total} archivos vistos" + "value": "操作类型:%@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "{total}개 중 {viewed}개 파일 확인함" + "value": "動作類型:%@" } } } }, - "diffViewer.filterFiles": { + "actions.discovery.shortcutDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Filter files" + "value": "Shortcut: %@" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ファイルを絞り込む" + "value": "اختصار لوحة المفاتيح: %@" } }, - "zh-Hans": { + "bs": { "stringUnit": { "state": "translated", - "value": "筛选文件" + "value": "Prečica: %@" } }, - "zh-Hant": { + "da": { "stringUnit": { "state": "translated", - "value": "篩選檔案" + "value": "Genvej: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dateien filtern" + "value": "Tastenkürzel: %@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Atajo: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Filtrer les fichiers" + "value": "Raccourci : %@" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "تصفية الملفات" + "value": "Scorciatoia: %@" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Filtrar archivos" + "value": "ショートカット:%@" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ផ្លូវកាត់៖ %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파일 필터" + "value": "단축키: %@" } - } - } - }, - "diffViewer.filterAddedFiles": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "Added" + "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": "Hinzugefügt" + "value": "แป้นพิมพ์ลัด: %@" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "Ajoutés" + "value": "Klavye kısayolu: %@" } }, - "ar": { + "uk": { "stringUnit": { "state": "translated", - "value": "مضافة" + "value": "Сполучення клавіш: %@" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Añadidos" + "value": "快捷键:%@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "추가됨" + "value": "快速鍵:%@" } } } }, - "diffViewer.filterModifiedFiles": { + "actions.discovery.menuTitle": { "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.dialogTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Deleted" + "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": "Gelöscht" + "value": "Opérations · cmux.json" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Supprimés" + "value": "アクション · cmux.json" } }, - "ar": { + "ko": { "stringUnit": { "state": "translated", - "value": "محذوفة" + "value": "작업 · cmux.json" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Eliminados" + "value": "操作 · cmux.json" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "삭제됨" + "value": "動作 · cmux.json" } } } }, - "diffViewer.filterRenamedFiles": { + "actions.discovery.empty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Renamed" + "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": "Umbenannt" + "value": "Keine konfigurierten Aktionen." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No hay acciones configuradas." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommés" + "value": "Aucune action configurée." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "معاد تسميتها" + "value": "Nessuna azione configurata." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Renombrados" + "value": "設定済みのアクションはありません。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនមានសកម្មភាពដែលបានកំណត់រចនាសម្ព័ន្ធទេ។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이름 변경됨" + "value": "구성된 작업이 없습니다." } - } - } - }, - "diffViewer.hideViewedFiles": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "Hide viewed files" + "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": "Angesehene Dateien ausblenden" + "value": "ไม่มีการดำเนินการที่กำหนดค่าไว้" } }, - "fr": { + "tr": { "stringUnit": { "state": "translated", - "value": "Masquer les fichiers vus" + "value": "Yapılandırılmış eylem yok." } }, - "ar": { + "uk": { "stringUnit": { "state": "translated", - "value": "إخفاء الملفات التي تمت مشاهدتها" + "value": "Немає налаштованих дій." } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ocultar archivos vistos" + "value": "没有已配置的操作。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "확인한 파일 숨기기" + "value": "沒有已設定的動作。" } } } }, - "diffViewer.showViewedFiles": { + "agentWake.banner.close": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show 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 anzeigen" + "value": "إغلاق" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Afficher les fichiers vus" + "value": "Cerrar" } }, - "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.copy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No files match the filter." + "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": "Keine Dateien entsprechen dem Filter." + "value": "نسخ" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Aucun fichier ne correspond au filtre." + "value": "Copiar" } }, - "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.hideCommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Generated file" + "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": "Generierte Datei" + "value": "إخفاء الأمر" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fichier généré" + "value": "Ocultar comando" } }, - "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.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Large diff" + "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": "Großer Diff" + "value": "لم يُستأنف %@ بعد الإيقاظ." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff volumineux" + "value": "%@ no se reanudó después de despertar." } }, - "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.retry": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Load 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": "Diff laden" + "value": "إعادة المحاولة" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Charger le diff" + "value": "Reintentar" } }, - "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.banner.showCommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Clear filter" + "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": "Filter zurücksetzen" + "value": "إظهار الأمر" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Effacer le filtre" + "value": "Mostrar comando" } }, - "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.notification.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Running subagents" + "value": "%@ didn't resume" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تشغيل الوكلاء الفرعيين" + "value": "%@ が再開しませんでした" } }, "de": { "stringUnit": { "state": "translated", - "value": "Subagenten werden ausgeführt" + "value": "%@ wurde nicht fortgesetzt" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ejecutando subagentes" + "value": "%@ n’a pas repris" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sous-agents en cours d’exécution" + "value": "لم يُستأنف %@" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "サブエージェントを実行中" + "value": "%@ no se reanudó" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "하위 에이전트 실행 중" + "value": "%@ 未能恢復" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在运行子代理" + "value": "%@ 未能恢复" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "執行子代理程式中" + "value": "%@이(가) 다시 시작되지 않았습니다" } } } }, - "agent.generic.status.waiting": { + "agentWake.reason.didNotStart": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "It did not start within 90 seconds." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "في الانتظار" + "value": "90 秒以内に起動しませんでした。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "Es wurde nicht innerhalb von 90 Sekunden gestartet." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esperando" + "value": "Il n’a pas démarré dans les 90 secondes." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "En attente" + "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초 안에 시작되지 않았습니다." } } } }, - "cloud.overlay.accessLost.detail": { + "agentWake.reason.exitedBeforeStart": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "You no longer have access to this machine." + "value": "Its resume command exited." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يعد لديك حق الوصول إلى هذا الجهاز." + "value": "再開コマンドが終了しました。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Sie haben keinen Zugriff mehr auf diese Maschine." + "value": "Sein Fortsetzungsbefehl wurde beendet." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ya no tienes acceso a esta máquina." + "value": "Sa commande de reprise s’est terminée." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Vous n’avez plus accès à cette machine." + "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.title": { + "agentWake.status.multiple": { + "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" + } + } + } + } + }, + "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 個のエージェントが再開しませんでした" + } + } + } + } + }, + "de": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld Agent wurde nicht fortgesetzt" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld Agenten wurden nicht fortgesetzt" + } + } + } + } + }, + "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" + } + } + } + } + }, + "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 وكيل" + } + } + } + } + }, + "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" + } + } + } + } + }, + "zh-Hant": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 個代理程式未能恢復" + } + } + } + } + }, + "zh-Hans": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld 个代理未能恢复" + } + } + } + } + }, + "ko": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "에이전트 %ld개가 다시 시작되지 않았습니다" + } + } + } + } + } + } + }, + "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 ]" } } } @@ -607022,6 +606576,256 @@ } } }, + "socket.notification.effectsInvalid": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Missing or invalid effects" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "effects が指定されていないか無効です" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "effects 缺失或无效" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Fehlende oder ungültige effects" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "effects manquant ou invalide" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "قيمة effects مفقودة أو غير صالحة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "effects faltante o no válido" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "遺失或無效的 effects" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "effects가 없거나 잘못되었습니다" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Nedostaje ili je nevažeći effects" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Manglende eller ugyldig effects" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "effects mancante o non valido" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "effects បាត់ ឬមិនត្រឹមត្រូវ" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Manglende eller ugyldig effects" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Brak lub nieprawidłowa wartość effects" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "effects ausente ou inválido" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отсутствует или недопустимое значение effects" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "effects หายไปหรือไม่ถูกต้อง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "effects eksik veya geçersiz" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відсутнє або недійсне значення effects" + } + } + } + }, + "cli.error.notifyDesktopValue": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "--desktop must be true|false" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يجب أن يكون --desktop إما true|false" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "--desktop muss true|false sein" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "--desktop debe ser true|false" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "--desktop doit être true|false" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "--desktop には true|false を指定してください" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "--desktop는 true|false여야 합니다" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "--desktop 必须是 true|false" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "--desktop 必須是 true|false" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "--desktop mora biti true|false" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "--desktop skal være true|false" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "--desktop deve essere true|false" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "--desktop ត្រូវតែជា true|false" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "--desktop må være true|false" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "--desktop musi mieć wartość true|false" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "--desktop deve ser true|false" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "--desktop должен быть true|false" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "--desktop ต้องเป็น true|false" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "--desktop true|false olmalıdır" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "--desktop має бути true|false" + } + } + } + }, "settings.app.showAgentUsage": { "extractionState": "manual", "localizations": { @@ -607766,6 +607570,131 @@ } } }, + "cloud.teamPicker.switchAccount": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Switch Account…" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تبديل الحساب…" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Konto wechseln…" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cambiar de cuenta…" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Changer de compte…" + } + }, + "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": "Promijeni račun…" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Skift konto…" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Cambia account…" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ប្ដូរគណនី…" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Bytt konto…" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Przełącz konto…" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Trocar de conta…" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сменить аккаунт…" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "สลับบัญชี…" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Hesap değiştir…" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Змінити обліковий запис…" + } + } + } + }, "settings.search.alias.setting.terminal.jump-to-bottom-button": { "extractionState": "manual", "localizations": { @@ -608568,502 +608497,533 @@ } } }, - "cloudPane.attachment.reason.staleDaemon": { + "settings.betaFeatures.remoteTmuxOriginColors": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "this Cloud machine is running an older terminal runtime; upgrade it, then retry" + "value": "ألوان المضيفين البعيدين" } }, "de": { "stringUnit": { "state": "translated", - "value": "auf dieser Cloud-Maschine läuft eine ältere Terminal-Laufzeit; aktualisiere sie und versuche es erneut" + "value": "Farben für Remote-Hosts" } }, - "fr": { + "en": { "stringUnit": { "state": "translated", - "value": "cette machine Cloud utilise une ancienne version du moteur de terminal ; mettez-la à jour, puis réessayez" + "value": "Remote host colors" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعمل على جهاز Cloud هذا إصدار أقدم من تشغيل الطرفية؛ حدّث الجهاز ثم أعد المحاولة" + "value": "Colores de hosts remotos" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "esta máquina de Cloud usa un runtime de terminal antiguo; actualízala y vuelve a intentarlo" + "value": "Couleurs des hôtes distants" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "這台 Cloud 機器執行較舊的終端機執行環境;請先升級,再重試" + "value": "リモートホストの色" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "这台 Cloud 机器运行较旧的终端运行时;请先升级,再重试" + "value": "원격 호스트 색상" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 Cloud 머신은 이전 터미널 런타임을 실행 중입니다. 업그레이드한 후 다시 시도하세요" + "value": "远程主机颜色" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "この Cloud マシンでは古いターミナルランタイムが実行されています。アップグレードしてから再試行してください" + "value": "遠端主機顏色" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تبقى مساحات العمل البعيدة بلا لون للمصدر حتى تفعّل هذا الخيار هنا." } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "ova Cloud mašina koristi starije izvršno okruženje terminala; nadogradite je pa pokušajte ponovo" + "value": "Remote-Arbeitsbereiche erhalten keine Herkunftsfarbe, bis du diese Option hier aktivierst." } }, - "da": { + "en": { "stringUnit": { "state": "translated", - "value": "denne Cloud-maskine kører en ældre terminalruntime; opgrader den, og prøv igen" + "value": "Leaves remote workspaces without an origin color until you enable it here." } }, - "it": { + "es": { "stringUnit": { "state": "translated", - "value": "questa macchina Cloud esegue un runtime del terminale meno recente; aggiornala e riprova" + "value": "Los espacios de trabajo remotos no tienen color de origen hasta que lo actives aquí." } }, - "km": { + "fr": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីន Cloud នេះកំពុងដំណើរការ runtime ស្ថានីយចាស់ជាងនេះ; ធ្វើបច្ចុប្បន្នភាព រួចព្យាយាមម្ដងទៀត" + "value": "Les espaces de travail distants restent sans couleur d’origine tant que vous ne l’activez pas ici." } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "denne Cloud-maskinen kjører en eldre terminalruntime; oppgrader den og prøv igjen" + "value": "ここで有効にするまで、リモートワークスペースにオリジンカラーを表示しません。" } }, - "pl": { + "ko": { "stringUnit": { "state": "translated", - "value": "ta maszyna Cloud korzysta ze starszego środowiska uruchomieniowego terminala; zaktualizuj ją i spróbuj ponownie" + "value": "여기에서 활성화하기 전까지 원격 작업 공간에는 출처 색상이 표시되지 않습니다." } }, - "pt-BR": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "esta máquina Cloud está executando um runtime de terminal antigo; atualize-a e tente novamente" + "value": "在此处启用之前,远程工作区不会显示来源颜色。" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "на этой Cloud-машине используется старая среда выполнения терминала; обновите её и повторите попытку" + "value": "在此處啟用之前,遠端工作區不會顯示來源顏色。" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "يُلوّن صف كل مساحة عمل بعيدة في الشريط الجانبي بلون ثابت خاص بكل مضيف لتسهيل التمييز بين الخوادم. يبقى اللون الذي تختاره يدويًا لمساحة العمل هو المُعتمد دائمًا." } }, - "th": { + "de": { "stringUnit": { "state": "translated", - "value": "เครื่อง Cloud นี้กำลังใช้รันไทม์เทอร์มินัลรุ่นเก่า โปรดอัปเกรดแล้วลองอีกครั้ง" + "value": "Färbt die Seitenleistenzeile jedes Remote-Arbeitsbereichs mit einer festen Farbe pro Host, damit sich Server leicht unterscheiden lassen. Eine manuell gewählte Arbeitsbereichsfarbe hat immer Vorrang." } }, - "tr": { + "en": { "stringUnit": { "state": "translated", - "value": "bu Cloud makinesi daha eski bir terminal çalışma zamanı kullanıyor; yükseltip tekrar deneyin" + "value": "Tints each remote workspace's sidebar row with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." } }, - "uk": { + "es": { "stringUnit": { "state": "translated", - "value": "на цій Cloud-машині працює старіше середовище термінала; оновіть її та повторіть спробу" + "value": "Tiñe la fila de la barra lateral de cada espacio de trabajo remoto con un color estable por host para distinguir fácilmente los servidores. El color que asignes manualmente al espacio de trabajo siempre tiene prioridad." } - } - } - }, - "socket.notification.effectsInvalid": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Missing or invalid effects" + "value": "Teinte la ligne de la barre latérale de chaque espace de travail distant avec une couleur stable par hôte, pour distinguer facilement les serveurs. La couleur choisie manuellement pour un espace de travail l’emporte toujours." } }, "ja": { "stringUnit": { "state": "translated", - "value": "effects が指定されていないか無効です" + "value": "各リモートワークスペースのサイドバー行を、ホストごとに固定された色で色付けし、サーバーを見分けやすくします。手動で設定したワークスペースの色が常に優先されます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "각 원격 작업 공간의 사이드바 행에 호스트별 고정 색상을 입혀 서버를 쉽게 구분할 수 있습니다. 직접 지정한 작업 공간 색상이 항상 우선합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "effects 缺失或无效" + "value": "为每个远程工作区的侧边栏行添加按主机固定的颜色,便于区分服务器。你手动设置的工作区颜色始终优先。" } }, - "de": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Fehlende oder ungültige effects" + "value": "為每個遠端工作區的側邊欄列加上依主機固定的顏色,方便區分伺服器。你手動設定的工作區顏色一律優先。" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "أسماء المضيفين البعيدين في العناوين المكررة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "effects manquant ou invalide" + "value": "Remote-Hostnamen bei doppelten Titeln" } }, - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "قيمة effects مفقودة أو غير صالحة" + "value": "Remote host names on duplicate titles" } }, "es": { "stringUnit": { "state": "translated", - "value": "effects faltante o no válido" + "value": "Nombres de hosts remotos en títulos duplicados" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "遺失或無效的 effects" + "value": "Noms des hôtes distants dans les titres en double" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "effects가 없거나 잘못되었습니다" + "value": "重複したタイトルにリモートホスト名を表示" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Nedostaje ili je nevažeći effects" + "value": "중복된 제목에 원격 호스트 이름 표시" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Manglende eller ugyldig effects" + "value": "在重复标题中显示远程主机名" } }, - "it": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "effects mancante o non valido" + "value": "在重複標題中顯示遠端主機名稱" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOff": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تبقى عناوين مساحات العمل المكررة كما هي حتى تفعّل هذا الخيار هنا." } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "effects បាត់ ឬមិនត្រឹមត្រូវ" + "value": "Doppelte Arbeitsbereichstitel bleiben unverändert, bis du diese Option hier aktivierst." } }, - "nb": { + "en": { "stringUnit": { "state": "translated", - "value": "Manglende eller ugyldig effects" + "value": "Leaves duplicate workspace titles as they are until you enable it here." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Brak lub nieprawidłowa wartość effects" + "value": "Los títulos duplicados de los espacios de trabajo se mantienen igual hasta que lo actives aquí." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "effects ausente ou inválido" + "value": "Les titres d’espaces de travail en double restent tels quels tant que vous ne l’activez pas ici." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Отсутствует или недопустимое значение effects" + "value": "ここで有効にするまで、重複したワークスペースのタイトルはそのまま表示されます。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "effects หายไปหรือไม่ถูกต้อง" + "value": "여기에서 활성화하기 전까지 중복된 작업 공간 제목은 그대로 표시됩니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "effects eksik veya geçersiz" + "value": "在此处启用之前,重复的工作区标题保持不变。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Відсутнє або недійсне значення effects" + "value": "在此處啟用之前,重複的工作區標題維持不變。" } } } }, - "cli.error.notifyDesktopValue": { + "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOn": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "--desktop must be true|false" + "value": "عندما تتشارك مساحات العمل عنوانًا واحدًا، يُعرض اسم مضيف كل مساحة بعيدة بعد العنوان دون النطاق المشترك بين المضيفين." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يجب أن يكون --desktop إما true|false" + "value": "Wenn Arbeitsbereiche denselben Titel haben, wird bei jedem Remote-Arbeitsbereich der Host nach dem Titel angezeigt, ohne die gemeinsame Domain der Hosts." } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "--desktop muss true|false sein" + "value": "When workspaces share a title, shows each remote one's host after the title, leaving off the domain the hosts share." } }, "es": { "stringUnit": { "state": "translated", - "value": "--desktop debe ser true|false" + "value": "Cuando varios espacios de trabajo comparten título, muestra el host de cada espacio remoto después del título, sin el dominio que comparten los hosts." } }, "fr": { "stringUnit": { "state": "translated", - "value": "--desktop doit être true|false" + "value": "Lorsque des espaces de travail portent le même titre, affiche l’hôte de chaque espace distant après le titre, sans le domaine que les hôtes partagent." } }, "ja": { "stringUnit": { "state": "translated", - "value": "--desktop には true|false を指定してください" + "value": "ワークスペースのタイトルが重複している場合、各リモートワークスペースのタイトルの後にホスト名を表示します。ホストに共通するドメインは省略します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "--desktop는 true|false여야 합니다" + "value": "작업 공간의 제목이 같으면 각 원격 작업 공간의 제목 뒤에 호스트 이름을 표시하며, 호스트에 공통된 도메인은 생략합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "--desktop 必须是 true|false" + "value": "当多个工作区标题相同时,在每个远程工作区的标题后显示主机名,并省略这些主机共有的域名。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "--desktop 必須是 true|false" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "--desktop mora biti true|false" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "--desktop skal være true|false" + "value": "當多個工作區標題相同時,在每個遠端工作區的標題後顯示主機名稱,並省略這些主機共用的網域。" } - }, - "it": { + } + } + }, + "settings.search.alias.setting.betaFeatures.remote-tmux-origin-colors": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "--desktop deve essere true|false" + "value": "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "--desktop ត្រូវតែជា true|false" + "value": "リモートホストの色 接続元 カラー 色合い ホストごと サーバー ワークスペース サイドバー 行 タブ ベータ 不安定" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "--desktop må være true|false" + "value": "Remote-Host-Farben Herkunft Farbe Tönung pro Host Server Arbeitsbereich Seitenleiste Zeile Tab Beta instabil" } }, - "pl": { + "fr": { "stringUnit": { "state": "translated", - "value": "--desktop musi mieć wartość true|false" + "value": "Couleurs des hôtes distants origine couleur teinte par hôte serveur espace de travail barre latérale ligne onglet bêta instable" } }, - "pt-BR": { + "ar": { "stringUnit": { "state": "translated", - "value": "--desktop deve ser true|false" + "value": "ألوان المضيف البعيد الأصل لون تلوين لكل مضيف خادم مساحة عمل شريط جانبي صف علامة تبويب تجريبي غير مستقر" } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "--desktop должен быть true|false" + "value": "Colores de hosts remotos origen color tinte por host servidor espacio de trabajo barra lateral fila pestaña beta inestable" } }, - "th": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "--desktop ต้องเป็น true|false" + "value": "遠端主機顏色 來源 色彩 著色 每台主機 伺服器 工作區 側邊欄 列 分頁 測試版 不穩定" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "--desktop true|false olmalıdır" + "value": "远程主机颜色 来源 色彩 着色 每台主机 服务器 工作区 侧边栏 行 标签页 测试版 不稳定" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "--desktop має бути true|false" + "value": "원격 호스트 색상 출처 색 색조 호스트별 서버 작업 공간 사이드바 행 탭 베타 불안정" } } } }, - "cloud.teamPicker.switchAccount": { + "settings.search.alias.setting.betaFeatures.remote-tmux-origin-host-titles": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch Account…" + "value": "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تبديل الحساب…" + "value": "重複タイトルにリモートホスト名を表示 ホスト名 サーバー 重複 同じタイトル 衝突 ワークスペース サイドバー 行 ベータ 不安定" } }, "de": { "stringUnit": { "state": "translated", - "value": "Konto wechseln…" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cambiar de cuenta…" + "value": "Remote-Host-Namen bei gleichen Titeln Hostname Server doppelt gleicher Titel Kollision Arbeitsbereich Seitenleiste Zeile Beta instabil" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Changer de compte…" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アカウントを切り替え…" + "value": "Noms des hôtes distants pour les titres identiques nom hôte serveur doublon même titre conflit espace de travail barre latérale ligne bêta instable" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "계정 전환…" + "value": "أسماء المضيف البعيد للعناوين المكررة اسم المضيف خادم مكرر نفس العنوان تعارض مساحة عمل شريط جانبي صف تجريبي غير مستقر" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "切换账户…" + "value": "Nombres de hosts remotos en títulos duplicados nombre host servidor duplicado mismo título colisión espacio de trabajo barra lateral fila beta inestable" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切換帳號…" + "value": "重複標題顯示遠端主機名稱 主機名稱 伺服器 重複 相同標題 衝突 工作區 側邊欄 列 測試版 不穩定" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Promijeni račun…" + "value": "重复标题显示远程主机名称 主机名 服务器 重复 相同标题 冲突 工作区 侧边栏 行 测试版 不稳定" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Skift konto…" + "value": "중복 제목의 원격 호스트 이름 호스트명 서버 중복 같은 제목 충돌 작업 공간 사이드바 행 베타 불안정" } - }, - "it": { + } + } + }, + "sidebar.workspace.titleWithHost": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cambia account…" + "value": "%1$@ · %2$@" } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "ប្ដូរគណនី…" + "value": "%1$@ · %2$@" } }, - "nb": { + "en": { "stringUnit": { "state": "translated", - "value": "Bytt konto…" + "value": "%1$@ · %2$@" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Przełącz konto…" + "value": "%1$@ · %2$@" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Trocar de conta…" + "value": "%1$@ · %2$@" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Сменить аккаунт…" + "value": "%1$@ · %2$@" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "สลับบัญชี…" + "value": "%1$@ · %2$@" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Hesap değiştir…" + "value": "%1$@ · %2$@" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Змінити обліковий запис…" + "value": "%1$@ · %2$@" } } } From d33b775ef6e45e29531b7178303826db6e568a00 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Sat, 3 Oct 2026 17:00:27 -0700 Subject: [PATCH 22/26] Keep the string catalog as main's text plus this change's entries --- Resources/Localizable.xcstrings | 3676 ++++++++++++++++--------------- 1 file changed, 1858 insertions(+), 1818 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index a0a5d35d15b8..294cadca7979 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -60,6 +60,183 @@ } } }, + "cli.remotes.error.invalidArguments": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@: invalid arguments." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "%@: وسيطات غير صالحة." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "%@: ungültige Argumente." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "%@: argumentos no válidos." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "%@ : arguments non valides." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@:引数が無効です。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "%@: 잘못된 인수입니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%@:无效的参数。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "%@:無效的引數。" + } + } + } + }, + "cli.remotes.error.unexpectedArgument": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@: unexpected argument '%2$@'." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "%1$@: وسيطة غير متوقعة '%2$@'." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "%1$@: unerwartetes Argument '%2$@'." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "%1$@: argumento inesperado '%2$@'." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "%1$@ : argument inattendu '%2$@'." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%1$@:予期しない引数 '%2$@' です。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "%1$@: 예상하지 못한 인수 '%2$@'입니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%1$@:意外的参数 '%2$@'。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "%1$@:非預期的引數 '%2$@'。" + } + } + } + }, + "cli.remotes.error.unknownFlag": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@: unknown flag '%2$@'." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "%1$@: خيار غير معروف '%2$@'." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "%1$@: unbekannte Option '%2$@'." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "%1$@: opción desconocida '%2$@'." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "%1$@ : option inconnue '%2$@'." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%1$@:不明なオプション '%2$@' です。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "%1$@: 알 수 없는 옵션 '%2$@'입니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%1$@:未知的选项 '%2$@'。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "%1$@:未知的選項 '%2$@'。" + } + } + } + }, "projectPanel.reload": { "extractionState": "manual", "localizations": { @@ -235604,6 +235781,381 @@ } } }, + "machines.new.plan.loading": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Loading your Cloud machine plan…" + } + } + } + }, + "machines.new.plan.retry": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + } + } + }, + "machines.new.plan.error": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Cloud plan details are still loading. Retry in a moment." + } + } + } + }, "machines.new": { "extractionState": "manual", "localizations": { @@ -261697,130 +262249,130 @@ } }, "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." + "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. Перевірте підключення до інтернету й спробуйте ще раз." + } + } } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Не вдалося завантажити вашу команду cmux. Перевірте підключення до інтернету й спробуйте ще раз." - } - } - } -}, "mobile.pairing.error.noTicket": { "extractionState": "manual", "localizations": { @@ -353948,6 +354500,124 @@ } } }, + "settings.search.alias.setting.betaFeatures.remote-tmux-origin-colors": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リモートホストの色 接続元 カラー 色合い ホストごと サーバー ワークスペース サイドバー 行 タブ ベータ 不安定" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Host-Farben Herkunft Farbe Tönung pro Host Server Arbeitsbereich Seitenleiste Zeile Tab Beta instabil" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleurs des hôtes distants origine couleur teinte par hôte serveur espace de travail barre latérale ligne onglet bêta instable" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "ألوان المضيف البعيد الأصل لون تلوين لكل مضيف خادم مساحة عمل شريط جانبي صف علامة تبويب تجريبي غير مستقر" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Colores de hosts remotos origen color tinte por host servidor espacio de trabajo barra lateral fila pestaña beta inestable" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "遠端主機顏色 來源 色彩 著色 每台主機 伺服器 工作區 側邊欄 列 分頁 測試版 不穩定" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "远程主机颜色 来源 色彩 着色 每台主机 服务器 工作区 侧边栏 行 标签页 测试版 不稳定" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "원격 호스트 색상 출처 색 색조 호스트별 서버 작업 공간 사이드바 행 탭 베타 불안정" + } + } + } + }, + "settings.search.alias.setting.betaFeatures.remote-tmux-origin-host-titles": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "重複タイトルにリモートホスト名を表示 ホスト名 サーバー 重複 同じタイトル 衝突 ワークスペース サイドバー 行 ベータ 不安定" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Host-Namen bei gleichen Titeln Hostname Server doppelt gleicher Titel Kollision Arbeitsbereich Seitenleiste Zeile Beta instabil" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Noms des hôtes distants pour les titres identiques nom hôte serveur doublon même titre conflit espace de travail barre latérale ligne bêta instable" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "أسماء المضيف البعيد للعناوين المكررة اسم المضيف خادم مكرر نفس العنوان تعارض مساحة عمل شريط جانبي صف تجريبي غير مستقر" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nombres de hosts remotos en títulos duplicados nombre host servidor duplicado mismo título colisión espacio de trabajo barra lateral fila beta inestable" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "重複標題顯示遠端主機名稱 主機名稱 伺服器 重複 相同標題 衝突 工作區 側邊欄 列 測試版 不穩定" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "重复标题显示远程主机名称 主机名 服务器 重复 相同标题 冲突 工作区 侧边栏 行 测试版 不稳定" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "중복 제목의 원격 호스트 이름 호스트명 서버 중복 같은 제목 충돌 작업 공간 사이드바 행 베타 불안정" + } + } + } + }, "settings.search.alias.setting.betaFeatures.workspace-todo-controls": { "extractionState": "manual", "localizations": { @@ -403028,6 +403698,65 @@ } } }, + "sidebar.workspace.titleWithHost": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" + } + } + } + }, "simulator.accessibility.nextPage": { "extractionState": "manual", "localizations": { @@ -550521,14 +551250,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": { @@ -556910,6 +557679,360 @@ } } }, + "settings.betaFeatures.remoteTmuxOriginColors": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "ألوان المضيفين البعيدين" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Farben für Remote-Hosts" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host colors" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Colores de hosts remotos" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Couleurs des hôtes distants" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リモートホストの色" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "원격 호스트 색상" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "远程主机颜色" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "遠端主機顏色" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تبقى مساحات العمل البعيدة بلا لون للمصدر حتى تفعّل هذا الخيار هنا." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Arbeitsbereiche erhalten keine Herkunftsfarbe, bis du diese Option hier aktivierst." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Leaves remote workspaces without an origin color until you enable it here." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Los espacios de trabajo remotos no tienen color de origen hasta que lo actives aquí." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les espaces de travail distants restent sans couleur d’origine tant que vous ne l’activez pas ici." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ここで有効にするまで、リモートワークスペースにオリジンカラーを表示しません。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "여기에서 활성화하기 전까지 원격 작업 공간에는 출처 색상이 표시되지 않습니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在此处启用之前,远程工作区不会显示来源颜色。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在此處啟用之前,遠端工作區不會顯示來源顏色。" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "يُلوّن صف كل مساحة عمل بعيدة في الشريط الجانبي بلون ثابت خاص بكل مضيف لتسهيل التمييز بين الخوادم. يبقى اللون الذي تختاره يدويًا لمساحة العمل هو المُعتمد دائمًا." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Färbt die Seitenleistenzeile jedes Remote-Arbeitsbereichs mit einer festen Farbe pro Host, damit sich Server leicht unterscheiden lassen. Eine manuell gewählte Arbeitsbereichsfarbe hat immer Vorrang." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Tints each remote workspace's sidebar row with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Tiñe la fila de la barra lateral de cada espacio de trabajo remoto con un color estable por host para distinguir fácilmente los servidores. El color que asignes manualmente al espacio de trabajo siempre tiene prioridad." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Teinte la ligne de la barre latérale de chaque espace de travail distant avec une couleur stable par hôte, pour distinguer facilement les serveurs. La couleur choisie manuellement pour un espace de travail l’emporte toujours." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "各リモートワークスペースのサイドバー行を、ホストごとに固定された色で色付けし、サーバーを見分けやすくします。手動で設定したワークスペースの色が常に優先されます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "각 원격 작업 공간의 사이드바 행에 호스트별 고정 색상을 입혀 서버를 쉽게 구분할 수 있습니다. 직접 지정한 작업 공간 색상이 항상 우선합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "为每个远程工作区的侧边栏行添加按主机固定的颜色,便于区分服务器。你手动设置的工作区颜色始终优先。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "為每個遠端工作區的側邊欄列加上依主機固定的顏色,方便區分伺服器。你手動設定的工作區顏色一律優先。" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "أسماء المضيفين البعيدين في العناوين المكررة" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Remote-Hostnamen bei doppelten Titeln" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Remote host names on duplicate titles" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nombres de hosts remotos en títulos duplicados" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Noms des hôtes distants dans les titres en double" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "重複したタイトルにリモートホスト名を表示" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "중복된 제목에 원격 호스트 이름 표시" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在重复标题中显示远程主机名" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在重複標題中顯示遠端主機名稱" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOff": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تبقى عناوين مساحات العمل المكررة كما هي حتى تفعّل هذا الخيار هنا." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Doppelte Arbeitsbereichstitel bleiben unverändert, bis du diese Option hier aktivierst." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Leaves duplicate workspace titles as they are until you enable it here." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Los títulos duplicados de los espacios de trabajo se mantienen igual hasta que lo actives aquí." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les titres d’espaces de travail en double restent tels quels tant que vous ne l’activez pas ici." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ここで有効にするまで、重複したワークスペースのタイトルはそのまま表示されます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "여기에서 활성화하기 전까지 중복된 작업 공간 제목은 그대로 표시됩니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在此处启用之前,重复的工作区标题保持不变。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在此處啟用之前,重複的工作區標題維持不變。" + } + } + } + }, + "settings.betaFeatures.remoteTmuxOriginHostTitles.subtitleOn": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "عندما تتشارك مساحات العمل عنوانًا واحدًا، يُعرض اسم مضيف كل مساحة بعيدة بعد العنوان دون النطاق المشترك بين المضيفين." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Wenn Arbeitsbereiche denselben Titel haben, wird bei jedem Remote-Arbeitsbereich der Host nach dem Titel angezeigt, ohne die gemeinsame Domain der Hosts." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "When workspaces share a title, shows each remote one's host after the title, leaving off the domain the hosts share." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cuando varios espacios de trabajo comparten título, muestra el host de cada espacio remoto después del título, sin el dominio que comparten los hosts." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Lorsque des espaces de travail portent le même titre, affiche l’hôte de chaque espace distant après le titre, sans le domaine que les hôtes partagent." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースのタイトルが重複している場合、各リモートワークスペースのタイトルの後にホスト名を表示します。ホストに共通するドメインは省略します。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "작업 공간의 제목이 같으면 각 원격 작업 공간의 제목 뒤에 호스트 이름을 표시하며, 호스트에 공통된 도메인은 생략합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "当多个工作区标题相同时,在每个远程工作区的标题后显示主机名,并省略这些主机共有的域名。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "當多個工作區標題相同時,在每個遠端工作區的標題後顯示主機名稱,並省略這些主機共用的網域。" + } + } + } + }, "settings.betaFeatures.workspaceTodoControls.subtitle": { "extractionState": "manual", "localizations": { @@ -568588,70 +569711,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 ще відновлює термінал після повторного відкриття та перевіряє, який сеанс агента відновити. Спробуйте ще раз за кілька секунд." } } } @@ -568713,70 +569836,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": "Термінал закривається, і його не можна прочитати." } } } @@ -568838,70 +569961,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 призупинив неактивного агента, щоб заощадити пам’ять. Розбудіть його, показавши термінал (його вікно перейде на передній план), і спробуйте ще раз: %@" } } } @@ -568963,70 +570086,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, щоб розбудити його, і спробуйте ще раз." } } } @@ -569088,70 +570211,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": "Термінал ще не запущено. Спробуйте ще раз за кілька секунд." } } } @@ -607891,2654 +609014,1571 @@ } } }, - "command.cloudVM.availabilityInfo.alertMessage": { + "cli.agentMessages.globalOff": { "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 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-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 VM Cloud peuvent être indisponibles ici." + "value": "Agent messages are turned off for all of cmux (agentMessages.enabled is false)." } }, "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. Es posible que los comandos de VM de Cloud no estén disponibles aquí." + "value": "رسائل الوكلاء متوقفة في cmux بالكامل (قيمة agentMessages.enabled هي false)." } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "選取本機工作區後,即可使用資料夾、模擬器、本機瀏覽器建立、目錄搜尋和差異檢視指令。Cloud VM 指令可能無法在此使用。" + "value": "Agent-Nachrichten sind für ganz cmux ausgeschaltet (agentMessages.enabled ist false)." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "选择本地工作区后即可使用文件夹、模拟器、本地浏览器创建、目录搜索和差异查看命令。Cloud VM 命令可能无法在此使用。" + "value": "Los mensajes de agentes están desactivados en todo cmux (agentMessages.enabled es false)." } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "로컬 작업 공간을 선택하면 폴더, 시뮬레이터, 로컬 브라우저 생성, 디렉터리 검색 및 diff 명령을 사용할 수 있습니다. Cloud VM 명령은 여기서 사용하지 못할 수 있습니다." + "value": "Les messages d'agents sont désactivés pour tout cmux (agentMessages.enabled vaut false)." } }, "ja": { "stringUnit": { "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 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 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 VM Cloud potrebbero non essere 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 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 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 de VM do Cloud podem não estar disponíveis aqui." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Команды для папок, симулятора, создания локального браузера, поиска в каталогах и сравнения доступны после выбора локального рабочего пространства. Команды Cloud VM могут быть недоступны здесь." + "value": "cmux 全体でエージェントメッセージがオフです(agentMessages.enabled が false)。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "คำสั่งโฟลเดอร์ โปรแกรมจำลอง การสร้างเบราว์เซอร์ภายในเครื่อง การค้นหาไดเรกทอรี และการเปรียบเทียบ จะใช้งานได้หลังจากเลือกพื้นที่ทำงานภายในเครื่อง คำสั่ง Cloud VM อาจไม่พร้อมใช้งานที่นี่" + "value": "cmux 전체에서 에이전트 메시지가 꺼져 있습니다(agentMessages.enabled가 false)." } }, - "tr": { + "zh-Hans": { "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. Cloud VM komutları burada kullanılamayabilir." + "value": "整个 cmux 的代理消息都已关闭(agentMessages.enabled 为 false)。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Команди для папок, симулятора, створення локального браузера, пошуку в каталогах і порівняння доступні після вибору локального робочого простору. Команди Cloud VM можуть бути тут недоступні." + "value": "整個 cmux 的代理訊息都已關閉(agentMessages.enabled 為 false)。" } } } }, - "command.cloudVM.availabilityInfo.alertTitle": { + "cli.agentMessages.workspaceOff": { "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" + "value": "Its workspace has messages off, so it receives none." } }, "ar": { "stringUnit": { "state": "translated", - "value": "بعض الأوامر محلية فقط" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Algunos comandos solo están disponibles localmente" + "value": "الرسائل متوقفة في مساحة العمل التي يتبع لها، لذا لا يتلقى أي رسالة." } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "部分指令僅限本機使用" + "value": "In seinem Workspace sind Nachrichten ausgeschaltet, daher erhält es keine." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "部分命令仅限本地使用" + "value": "Su espacio de trabajo tiene los mensajes desactivados, así que no recibe ninguno." } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "일부 명령어는 로컬에서만 사용 가능" + "value": "Les messages sont désactivés pour son espace de travail, il n'en reçoit donc aucun." } }, "ja": { "stringUnit": { "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": "Некоторые команды доступны только локально" + "value": "所属するワークスペースでメッセージがオフのため、メッセージは届きません。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "คำสั่งบางรายการใช้ได้เฉพาะในเครื่อง" + "value": "속한 워크스페이스의 메시지가 꺼져 있어 메시지를 받지 않습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bazı komutlar yalnızca yereldir" + "value": "它所在的工作区已关闭消息,因此不会收到任何消息。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Деякі команди доступні лише локально" + "value": "它所在的工作區已關閉訊息,因此不會收到任何訊息。" } } } }, - "command.cloudVM.availabilityInfo.keywords": { + "cli.agentMessages.off": { "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" + "value": "Messages to %@ are off." } }, "ar": { "stringUnit": { "state": "translated", - "value": "السحابة, مساحة العمل, التوفر, محلي, غير متاح, إجراءات" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cloud, espacio de trabajo, disponibilidad, local, no disponible, acciones" + "value": "الرسائل إلى %@ متوقفة." } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud, 工作區, 可用性, 本機, 無法使用, 動作" + "value": "Nachrichten an %@ sind aus." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud, 工作区, 可用性, 本地, 不可用, 操作" + "value": "Los mensajes a %@ están desactivados." } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud, 작업 공간, 사용 가능 여부, 로컬, 사용할 수 없음, 동작" + "value": "Les messages vers %@ sont désactivés." } }, "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, рабочее пространство, доступность, локальный, недоступно, действия" + "value": "%@ へのメッセージはオフです。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud, พื้นที่ทำงาน, ความพร้อมใช้งาน, ในเครื่อง, ไม่พร้อมใช้งาน, การทำงาน" + "value": "%@에 대한 메시지가 꺼져 있습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud, çalışma alanı, kullanılabilirlik, yerel, kullanılamıyor, işlemler" + "value": "发给 %@ 的消息已关闭。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud, робочий простір, доступність, локальний, недоступно, дії" + "value": "傳給 %@ 的訊息已關閉。" } } } }, - "command.cloudVM.availabilityInfo.subtitle": { + "cli.agentMessages.on": { "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" + "value": "Messages to %@ are on." } }, "ar": { "stringUnit": { "state": "translated", - "value": "مساحة عمل سحابية" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Espacio de trabajo de Cloud" + "value": "الرسائل إلى %@ مفعّلة." } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud 工作區" + "value": "Nachrichten an %@ sind an." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud 工作区" + "value": "Los mensajes a %@ están activados." } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud 작업 공간" + "value": "Les messages vers %@ sont activés." } }, "ja": { "stringUnit": { "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" + "value": "%@ へのメッセージはオンです。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "พื้นที่ทำงาน Cloud" + "value": "%@에 대한 메시지가 켜져 있습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud çalışma alanı" + "value": "发给 %@ 的消息已开启。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Робочий простір Cloud" + "value": "傳給 %@ 的訊息已開啟。" } } } }, - "command.cloudVM.availabilityInfo.title": { + "cli.help.agentMessages": { "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 コマンドの利用状況を表示" - } - }, - "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" + "value": "Usage: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nTurn agent messages off or on for one agent, or show whether it gets\nthem. Turning messages off for an agent refuses new messages to it and\nmarks the ones already queued for it as failed.\n\n is resolved like cmux agent message: a workspace or surface id\nor ref, or a workspace title. Without one, the command applies to the\nsurface it runs in. --workspace applies to every surface in the\nworkspace instead.\n\nWithout --workspace, a workspace target means the one agent surface it\nresolves to now. That surface stays off even if a different surface\nbecomes the workspace's agent later.\n\nTo turn agent messages off everywhere, set agentMessages.enabled to\nfalse in ~/.config/cmux/cmux.json or turn off Settings > Automation >\nAgent Messages.\n\nExamples:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Показати доступність команд Cloud" - } - } - } - }, - "settings.betaFeatures.remoteTmuxOriginColors": { - "extractionState": "manual", - "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "ألوان المضيفين البعيدين" + "value": "الاستخدام: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nيوقف رسائل الوكلاء أو يفعّلها لوكيل واحد، أو يعرض ما إذا كان يستقبلها.\nإيقافها يرفض الرسائل الجديدة إليه ويضع علامة فشل على الرسائل\nالمنتظرة له.\n\nيُحلّ كما في cmux agent message: معرّف\nمساحة عمل أو سطح أو مرجعه، أو عنوان مساحة عمل.\nبدونه يُطبَّق الأمر على السطح الذي يعمل فيه.\nيُطبَّق --workspace بدلًا من ذلك على كل الأسطح في مساحة العمل.\n\nبدون --workspace، يعني هدف مساحة العمل سطح الوكيل الوحيد الذي\nيُحلّ إليه الآن. يبقى هذا السطح موقوفًا حتى لو صار سطح آخر\nوكيل مساحة العمل لاحقًا.\n\nلإيقاف رسائل الوكلاء في كل مكان، اضبط\nagentMessages.enabled على false في\n~/.config/cmux/cmux.json أو أوقف الإعدادات > الأتمتة > رسائل الوكلاء.\n\nأمثلة:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, "de": { "stringUnit": { "state": "translated", - "value": "Farben für Remote-Hosts" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Remote host colors" + "value": "Verwendung: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nSchaltet Agent-Nachrichten für einen Agenten aus oder ein oder zeigt, ob er sie\nerhält. Ausschalten weist neue Nachrichten an ihn ab und markiert die bereits\nfür ihn eingereihten als fehlgeschlagen.\n\n wird wie bei cmux agent message aufgelöst: eine Workspace- oder\nOberflächen-ID bzw. -Referenz oder ein Workspace-Titel. Ohne Angabe gilt der\nBefehl für die Oberfläche, in der er läuft. --workspace gilt stattdessen für\nalle Oberflächen im Workspace.\n\nOhne --workspace meint ein Workspace-Ziel die eine Agent-Oberfläche, zu der\nes jetzt aufgelöst wird. Diese bleibt aus, auch wenn später eine andere\nOberfläche der Agent des Workspace wird.\n\nUm Agent-Nachrichten überall auszuschalten, setze agentMessages.enabled in\n~/.config/cmux/cmux.json auf false oder schalte Einstellungen > Automatisierung >\nAgent-Nachrichten aus.\n\nBeispiele:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, "es": { "stringUnit": { "state": "translated", - "value": "Colores de hosts remotos" + "value": "Uso: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nDesactiva o activa los mensajes de agentes para un agente, o muestra si los\nrecibe. Desactivarlos rechaza los mensajes nuevos para él y marca como\nfallidos los que ya estaban en cola.\n\n se resuelve como en cmux agent message: un ID o referencia de espacio\nde trabajo o superficie, o un título de espacio de trabajo. Sin él, el comando\nse aplica a la superficie donde se ejecuta. --workspace se aplica en cambio a\ntodas las superficies del espacio de trabajo.\n\nSin --workspace, un destino de espacio de trabajo indica la única superficie\nde agente a la que se resuelve ahora. Esa superficie sigue desactivada aunque\notra superficie pase después a ser el agente del espacio de trabajo.\n\nPara desactivar los mensajes de agentes en todas partes, establece\nagentMessages.enabled en false en ~/.config/cmux/cmux.json o desactiva\nAjustes > Automatización > Mensajes de agentes.\n\nEjemplos:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Couleurs des hôtes distants" + "value": "Utilisation : cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nDésactive ou active les messages d'agents pour un agent, ou indique s'il les\nreçoit. Les désactiver refuse les nouveaux messages qui lui sont destinés et\nmarque comme échoués ceux déjà en file d'attente.\n\n est résolu comme pour cmux agent message : un ID ou une référence\nd'espace de travail ou de surface, ou un titre d'espace de travail. Sans cible,\nla commande s'applique à la surface où elle s'exécute. --workspace s'applique\nà la place à toutes les surfaces de l'espace de travail.\n\nSans --workspace, une cible d'espace de travail désigne la seule surface\nd'agent vers laquelle elle se résout maintenant. Cette surface reste désactivée\nmême si une autre surface devient plus tard l'agent de l'espace de travail.\n\nPour désactiver les messages d'agents partout, définissez agentMessages.enabled\nsur false dans ~/.config/cmux/cmux.json ou désactivez Réglages > Automatisation >\nMessages d'agents.\n\nExemples :\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リモートホストの色" + "value": "使い方: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n1 つのエージェントへのエージェントメッセージをオフまたはオンにするか、受け取るか\nどうかを表示します。オフにすると、そのエージェントへの新しいメッセージを拒否し、\nすでにキューにあるメッセージを失敗にします。\n\n は cmux agent message と同じように解決されます: ワークスペースか\nサーフェスの ID または参照、またはワークスペースのタイトル。省略すると、\nコマンドを実行したサーフェスに適用されます。--workspace を付けると、\nワークスペース内のすべてのサーフェスに適用されます。\n\n--workspace を付けない場合、ワークスペースの指定は、いま解決される 1 つの\nエージェントサーフェスを指します。後で別のサーフェスがワークスペースの\nエージェントになっても、そのサーフェスはオフのままです。\n\nエージェントメッセージをすべてオフにするには、~/.config/cmux/cmux.json で\nagentMessages.enabled を false にするか、設定 > 自動化 > エージェントメッセージを\nオフにしてください。\n\n例:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, "ko": { "stringUnit": { "state": "translated", - "value": "원격 호스트 색상" + "value": "사용법: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n에이전트 하나의 에이전트 메시지를 끄거나 켜고, 메시지를 받는지 보여 줍니다.\n끄면 그 에이전트에게 오는 새 메시지를 거부하고 이미 대기 중인 메시지를\n실패로 표시합니다.\n\n은 cmux agent message와 같은\n방식으로 해석됩니다: 워크스페이스나 표면의 ID 또는 참조, 또는\n워크스페이스 제목. 지정하지 않으면 명령이 실행되는 표면에\n적용됩니다. --workspace는 대신 워크스페이스의 모든 표면에 적용됩니다.\n\n--workspace 없이 워크스페이스를 지정하면 지금 해석되는 에이전트 표면\n하나에만 적용됩니다. 나중에 다른 표면이 워크스페이스의 에이전트가 되어도\n그 표면은 꺼진 상태로 남습니다.\n\n모든 곳에서 에이전트 메시지를 끄려면 ~/.config/cmux/cmux.json에서\nagentMessages.enabled를 false로 설정하거나 설정 > 자동화 > 에이전트 메시지를\n끄세요.\n\n예시:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "远程主机颜色" + "value": "用法: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n为单个代理关闭或开启代理消息,或显示它\n是否会收到消息。关闭后会拒绝发给它的新\n消息,并将已排队给它的消息标记为失败。\n\n 的解析方式与 cmux agent\nmessage 相同:工作区或表面的 ID 或引用,\n或工作区标题。未指定时,命令作用于它运行所在的表面。--workspace\n则改为 作用于工作区中的所有表面。\n\n不加 --workspace 时,工作区目标指的是它当前解析到的\n那一个代理表面。即使之后另一个表面成为该工作区的代理,\n这个表面仍保持关闭。\n\n若要在所有地方关闭代理消息,请在\n~/.config/cmux/cmux.json 中将\nagentMessages.enabled 设为 false,或关闭“设置 > 自动化 > 代理消息”。\n\n示例:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "遠端主機顏色" + "value": "用法: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n為單一代理關閉或開啟代理訊息,或顯示它\n是否會收到訊息。關閉後會拒絕傳給它的新\n訊息,並將已排隊給它的訊息標為失敗。\n\n 的解析方式與 cmux agent\nmessage 相同:工作區或表面的 ID 或參照,\n或工作區標題。未指定時,指令套用到它執行所在的表面。--workspace\n則改為 套用到工作區中的所有表面。\n\n不加 --workspace 時,工作區目標指的是它目前解析到的\n那一個代理表面。即使之後另一個表面成為該工作區的代理,\n這個表面仍保持關閉。\n\n若要在所有地方關閉代理訊息,請在\n~/.config/cmux/cmux.json 中將\nagentMessages.enabled 設為 false,或關閉「設定 > 自動化 > 代理訊息」。\n\n範例:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" } } } }, - "settings.betaFeatures.remoteTmuxOriginColors.subtitleOff": { + "cli.help.agents.messages": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "تبقى مساحات العمل البعيدة بلا لون للمصدر حتى تفعّل هذا الخيار هنا." + "value": "agent messages [on|off|status] [] [--workspace]" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Remote-Arbeitsbereiche erhalten keine Herkunftsfarbe, bis du diese Option hier aktivierst." + "value": "agent messages [on|off|status] [] [--workspace]" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Leaves remote workspaces without an origin color until you enable it here." + "value": "agent messages [on|off|status] [] [--workspace]" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los espacios de trabajo remotos no tienen color de origen hasta que lo actives aquí." + "value": "agent messages [on|off|status] [] [--workspace]" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les espaces de travail distants restent sans couleur d’origine tant que vous ne l’activez pas ici." + "value": "agent messages [on|off|status] [] [--workspace]" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ここで有効にするまで、リモートワークスペースにオリジンカラーを表示しません。" + "value": "agent messages [on|off|status] [] [--workspace]" } }, "ko": { "stringUnit": { "state": "translated", - "value": "여기에서 활성화하기 전까지 원격 작업 공간에는 출처 색상이 표시되지 않습니다." + "value": "agent messages [on|off|status] [] [--workspace]" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在此处启用之前,远程工作区不会显示来源颜色。" + "value": "agent messages [on|off|status] [] [--workspace]" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在此處啟用之前,遠端工作區不會顯示來源顏色。" + "value": "agent messages [on|off|status] [] [--workspace]" } } } }, - "settings.betaFeatures.remoteTmuxOriginColors.subtitleOn": { + "settings.automation.agentMessages": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "يُلوّن صف كل مساحة عمل بعيدة في الشريط الجانبي بلون ثابت خاص بكل مضيف لتسهيل التمييز بين الخوادم. يبقى اللون الذي تختاره يدويًا لمساحة العمل هو المُعتمد دائمًا." + "value": "Agent Messages" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Färbt die Seitenleistenzeile jedes Remote-Arbeitsbereichs mit einer festen Farbe pro Host, damit sich Server leicht unterscheiden lassen. Eine manuell gewählte Arbeitsbereichsfarbe hat immer Vorrang." + "value": "رسائل الوكلاء" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Tints each remote workspace's sidebar row with a stable per-host color so servers are easy to tell apart. Your manual workspace color always wins." + "value": "Agent-Nachrichten" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tiñe la fila de la barra lateral de cada espacio de trabajo remoto con un color estable por host para distinguir fácilmente los servidores. El color que asignes manualmente al espacio de trabajo siempre tiene prioridad." + "value": "Mensajes de agentes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Teinte la ligne de la barre latérale de chaque espace de travail distant avec une couleur stable par hôte, pour distinguer facilement les serveurs. La couleur choisie manuellement pour un espace de travail l’emporte toujours." + "value": "Messages d'agents" } }, "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.betaFeatures.remoteTmuxOriginHostTitles": { + "agentInbox.state.failed": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "أسماء المضيفين البعيدين في العناوين المكررة" + "value": "Not delivered" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Remote-Hostnamen bei doppelten Titeln" + "value": "لم تُسلَّم" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Remote host names on duplicate titles" + "value": "Nicht zugestellt" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nombres de hosts remotos en títulos duplicados" + "value": "No entregado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Noms des hôtes distants dans les titres en double" + "value": "Non remis" } }, "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.betaFeatures.remoteTmuxOriginHostTitles.subtitleOff": { + "command.agentMessagesOff.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "تبقى عناوين مساحات العمل المكررة كما هي حتى تفعّل هذا الخيار هنا." + "value": "Turn Off Agent Messages for This Tab" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Doppelte Arbeitsbereichstitel bleiben unverändert, bis du diese Option hier aktivierst." + "value": "إيقاف رسائل الوكلاء لهذه العلامة" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "Leaves duplicate workspace titles as they are until you enable it here." + "value": "Agent-Nachrichten für diesen Tab ausschalten" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los títulos duplicados de los espacios de trabajo se mantienen igual hasta que lo actives aquí." + "value": "Desactivar mensajes de agentes en esta pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les titres d’espaces de travail en double restent tels quels tant que vous ne l’activez pas ici." + "value": "Désactiver les messages d'agents pour cet onglet" } }, "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.betaFeatures.remoteTmuxOriginHostTitles.subtitleOn": { + "command.agentMessagesOn.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "عندما تتشارك مساحات العمل عنوانًا واحدًا، يُعرض اسم مضيف كل مساحة بعيدة بعد العنوان دون النطاق المشترك بين المضيفين." + "value": "Turn On Agent Messages for This Tab" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wenn Arbeitsbereiche denselben Titel haben, wird bei jedem Remote-Arbeitsbereich der Host nach dem Titel angezeigt, ohne die gemeinsame Domain der Hosts." + "value": "تفعيل رسائل الوكلاء لهذه العلامة" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "When workspaces share a title, shows each remote one's host after the title, leaving off the domain the hosts share." + "value": "Agent-Nachrichten für diesen Tab einschalten" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cuando varios espacios de trabajo comparten título, muestra el host de cada espacio remoto después del título, sin el dominio que comparten los hosts." + "value": "Activar mensajes de agentes en esta pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Lorsque des espaces de travail portent le même titre, affiche l’hôte de chaque espace distant après le titre, sans le domaine que les hôtes partagent." + "value": "Activer les messages d'agents pour cet onglet" } }, "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.setting.betaFeatures.remote-tmux-origin-colors": { + "agentMessage.error.messagesDisabled": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Remote host colors remote host colors origin color tint per-host server workspace sidebar row tab beta unstable" + "value": "Agent messages are turned off (agentMessages.enabled is false)." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "リモートホストの色 接続元 カラー 色合い ホストごと サーバー ワークスペース サイドバー 行 タブ ベータ 不安定" + "value": "رسائل الوكلاء متوقفة (قيمة agentMessages.enabled هي false)." } }, "de": { "stringUnit": { "state": "translated", - "value": "Remote-Host-Farben Herkunft Farbe Tönung pro Host Server Arbeitsbereich Seitenleiste Zeile Tab Beta instabil" + "value": "Agent-Nachrichten sind ausgeschaltet (agentMessages.enabled ist false)." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Couleurs des hôtes distants origine couleur teinte par hôte serveur espace de travail barre latérale ligne onglet bêta instable" + "value": "Los mensajes de agentes están desactivados (agentMessages.enabled es false)." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "ألوان المضيف البعيد الأصل لون تلوين لكل مضيف خادم مساحة عمل شريط جانبي صف علامة تبويب تجريبي غير مستقر" + "value": "Les messages d'agents sont désactivés (agentMessages.enabled vaut false)." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Colores de hosts remotos origen color tinte por host servidor espacio de trabajo barra lateral fila pestaña beta inestable" + "value": "エージェントメッセージはオフです(agentMessages.enabled が false)。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "遠端主機顏色 來源 色彩 著色 每台主機 伺服器 工作區 側邊欄 列 分頁 測試版 不穩定" + "value": "에이전트 메시지가 꺼져 있습니다(agentMessages.enabled가 false)." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "远程主机颜色 来源 色彩 着色 每台主机 服务器 工作区 侧边栏 行 标签页 测试版 不稳定" + "value": "代理消息已关闭(agentMessages.enabled 为 false)。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "원격 호스트 색상 출처 색 색조 호스트별 서버 작업 공간 사이드바 행 탭 베타 불안정" + "value": "代理訊息已關閉(agentMessages.enabled 為 false)。" } } } }, - "settings.search.alias.setting.betaFeatures.remote-tmux-origin-host-titles": { + "agentMessage.error.recipientDisabled": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Remote host names on duplicate titles hostname server duplicate same title collision workspace sidebar row beta unstable" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "重複タイトルにリモートホスト名を表示 ホスト名 サーバー 重複 同じタイトル 衝突 ワークスペース サイドバー 行 ベータ 不安定" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Remote-Host-Namen bei gleichen Titeln Hostname Server doppelt gleicher Titel Kollision Arbeitsbereich Seitenleiste Zeile Beta instabil" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Noms des hôtes distants pour les titres identiques nom hôte serveur doublon même titre conflit espace de travail barre latérale ligne bêta instable" + "value": "Recipient %@ has messages disabled." } }, "ar": { "stringUnit": { "state": "translated", - "value": "أسماء المضيف البعيد للعناوين المكررة اسم المضيف خادم مكرر نفس العنوان تعارض مساحة عمل شريط جانبي صف تجريبي غير مستقر" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombres de hosts remotos en títulos duplicados nombre host servidor duplicado mismo título colisión espacio de trabajo barra lateral fila beta inestable" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "重複標題顯示遠端主機名稱 主機名稱 伺服器 重複 相同標題 衝突 工作區 側邊欄 列 測試版 不穩定" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "重复标题显示远程主机名称 主机名 服务器 重复 相同标题 冲突 工作区 侧边栏 行 测试版 不稳定" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "중복 제목의 원격 호스트 이름 호스트명 서버 중복 같은 제목 충돌 작업 공간 사이드바 행 베타 불안정" - } - } - } - }, - "sidebar.workspace.titleWithHost": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" + "value": "المستلم %@ أوقف الرسائل." } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@" + "value": "Empfänger %@ hat Nachrichten deaktiviert." } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "El destinatario %@ tiene los mensajes desactivados." } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Le destinataire %@ a désactivé les messages." } }, "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": "收件者 %@ 已停用訊息。" } } } }, - "cli.remotes.error.invalidArguments": { + "agentMessage.error.workspaceDisabled": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@: invalid arguments." + "value": "Recipient workspace %@ has messages disabled." } }, "ar": { "stringUnit": { "state": "translated", - "value": "%@: وسيطات غير صالحة." + "value": "مساحة العمل المستلمة %@ أوقفت الرسائل." } }, "de": { "stringUnit": { "state": "translated", - "value": "%@: ungültige Argumente." + "value": "Empfänger-Workspace %@ hat Nachrichten deaktiviert." } }, "es": { "stringUnit": { "state": "translated", - "value": "%@: argumentos no válidos." + "value": "El espacio de trabajo destinatario %@ tiene los mensajes desactivados." } }, "fr": { "stringUnit": { "state": "translated", - "value": "%@ : arguments non valides." + "value": "L'espace de travail destinataire %@ a désactivé les messages." } }, "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.remotes.error.unexpectedArgument": { + "socket.agentMessage.error.invalidScope": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: unexpected argument '%2$@'." + "value": "Scope must be surface or workspace." } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: وسيطة غير متوقعة '%2$@'." + "value": "يجب أن يكون النطاق surface أو workspace." } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: unerwartetes Argument '%2$@'." + "value": "Der Bereich muss surface oder workspace sein." } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: argumento inesperado '%2$@'." + "value": "El ámbito debe ser surface o workspace." } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : argument inattendu '%2$@'." + "value": "La portée doit être surface ou workspace." } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@:予期しない引数 '%2$@' です。" + "value": "スコープは surface または workspace にしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: 예상하지 못한 인수 '%2$@'입니다." + "value": "범위는 surface 또는 workspace여야 합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@:意外的参数 '%2$@'。" + "value": "范围必须是 surface 或 workspace。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@:非預期的引數 '%2$@'。" + "value": "範圍必須是 surface 或 workspace。" } } } }, - "cli.remotes.error.unknownFlag": { + "socket.agentMessage.error.missingSettingsTarget": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: unknown flag '%2$@'." + "value": "Give a target workspace or surface, or run this inside a cmux surface." } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: خيار غير معروف '%2$@'." + "value": "حدّد مساحة عمل أو سطحًا هدفًا، أو شغّل هذا داخل سطح cmux." } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: unbekannte Option '%2$@'." + "value": "Gib einen Ziel-Workspace oder eine Zieloberfläche an oder führe dies in einer cmux-Oberfläche aus." } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: opción desconocida '%2$@'." + "value": "Indica un espacio de trabajo o una superficie de destino, o ejecuta esto dentro de una superficie de cmux." } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : option inconnue '%2$@'." + "value": "Indiquez un espace de travail ou une surface cible, ou exécutez ceci dans une surface cmux." } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@:不明なオプション '%2$@' です。" + "value": "対象のワークスペースかサーフェスを指定するか、cmux のサーフェス内で実行してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: 알 수 없는 옵션 '%2$@'입니다." + "value": "대상 워크스페이스나 표면을 지정하거나 cmux 표면 안에서 실행하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@:未知的选项 '%2$@'。" + "value": "请指定目标工作区或表面,或在 cmux 表面中运行此命令。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@:未知的選項 '%2$@'。" + "value": "請指定目標工作區或表面,或在 cmux 表面中執行此指令。" } } } }, - "machines.new.plan.loading": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "Loading your Cloud machine plan…" - } - } - } - }, - "machines.new.plan.retry": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "Retry" - } - } - } - }, - "machines.new.plan.error": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "Cloud plan details are still loading. Retry in a moment." - } - } - } - }, - "cli.agentMessages.globalOff": { + "socket.agentMessage.error.settingNotSaved": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent messages are turned off for all of cmux (agentMessages.enabled is false)." + "value": "The setting was not changed: cmux could not save it to the message journal." } }, "ar": { "stringUnit": { "state": "translated", - "value": "رسائل الوكلاء متوقفة في cmux بالكامل (قيمة agentMessages.enabled هي false)." + "value": "لم يتغير الإعداد: تعذّر على cmux حفظه في سجل الرسائل." } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent-Nachrichten sind für ganz cmux ausgeschaltet (agentMessages.enabled ist false)." + "value": "Die Einstellung wurde nicht geändert: cmux konnte sie nicht im Nachrichtenjournal speichern." } }, "es": { "stringUnit": { "state": "translated", - "value": "Los mensajes de agentes están desactivados en todo cmux (agentMessages.enabled es false)." + "value": "El ajuste no se cambió: cmux no pudo guardarlo en el registro de mensajes." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les messages d'agents sont désactivés pour tout cmux (agentMessages.enabled vaut false)." + "value": "Le réglage n'a pas été modifié : cmux n'a pas pu l'enregistrer dans le journal des messages." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux 全体でエージェントメッセージがオフです(agentMessages.enabled が false)。" + "value": "設定は変更されませんでした: cmux がメッセージジャーナルに保存できませんでした。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux 전체에서 에이전트 메시지가 꺼져 있습니다(agentMessages.enabled가 false)." + "value": "설정이 바뀌지 않았습니다: cmux가 메시지 저널에 저장하지 못했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "整个 cmux 的代理消息都已关闭(agentMessages.enabled 为 false)。" + "value": "设置未更改:cmux 无法将它保存到消息日志。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "整個 cmux 的代理訊息都已關閉(agentMessages.enabled 為 false)。" + "value": "設定未變更:cmux 無法將它儲存到訊息日誌。" } } } }, - "cli.agentMessages.workspaceOff": { + "command.cloudVM.availabilityInfo.alertMessage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Its workspace has messages off, so it receives none." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الرسائل متوقفة في مساحة العمل التي يتبع لها، لذا لا يتلقى أي رسالة." + "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": "In seinem Workspace sind Nachrichten ausgeschaltet, daher erhält es keine." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Su espacio de trabajo tiene los mensajes desactivados, así que no recibe ninguno." + "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 messages sont désactivés pour son espace de travail, il n'en reçoit donc aucun." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "所属するワークスペースでメッセージがオフのため、メッセージは届きません。" + "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." } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "속한 워크스페이스의 메시지가 꺼져 있어 메시지를 받지 않습니다." + "value": "تتوفر أوامر المجلد والمحاكي وإنشاء المتصفح المحلي والبحث في الدليل والمقارنة بعد اختيار مساحة عمل محلية. قد لا تتوفر أوامر أجهزة Cloud الافتراضية هنا." } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "它所在的工作区已关闭消息,因此不会收到任何消息。" + "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": "它所在的工作區已關閉訊息,因此不會收到任何訊息。" - } - } - } - }, - "cli.agentMessages.off": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Messages to %@ are off." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الرسائل إلى %@ متوقفة." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Nachrichten an %@ sind aus." + "value": "選取本機工作區後,即可使用資料夾、模擬器、本機瀏覽器建立、目錄搜尋和差異檢視指令。Cloud VM 指令可能無法在此使用。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Los mensajes a %@ están desactivados." + "value": "选择本地工作区后即可使用文件夹、模拟器、本地浏览器创建、目录搜索和差异查看命令。Cloud VM 命令可能无法在此使用。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Les messages vers %@ sont désactivés." + "value": "로컬 작업 공간을 선택하면 폴더, 시뮬레이터, 로컬 브라우저 생성, 디렉터리 검색 및 diff 명령을 사용할 수 있습니다. Cloud VM 명령은 여기서 사용하지 못할 수 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ へのメッセージはオフです。" + "value": "ローカルワークスペースを選択すると、フォルダ、シミュレータ、ローカルブラウザの作成、ディレクトリ検索、差分表示のコマンドを利用できます。Cloud VM コマンドはここでは利用できない場合があります。" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "%@에 대한 메시지가 꺼져 있습니다." + "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." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "发给 %@ 的消息已关闭。" + "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." } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "傳給 %@ 的訊息已關閉。" - } - } - } - }, - "cli.agentMessages.on": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Messages to %@ are on." + "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." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "الرسائل إلى %@ مفعّلة." + "value": "ការបញ្ជាថត ស៊ីម្យូឡាទ័រ ការបង្កើតកម្មវិធីរុករកមូលដ្ឋាន ការស្វែងរកថត និងការប្រៀបធៀប នឹងអាចប្រើបានបន្ទាប់ពីជ្រើសរើសកន្លែងធ្វើការមូលដ្ឋាន។ ការបញ្ជា Cloud VM អាចមិនអាចប្រើបាននៅទីនេះ។" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Nachrichten an %@ sind an." + "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." } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Los mensajes a %@ están activados." + "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." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Les messages vers %@ sont activés." + "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." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "%@ へのメッセージはオンです。" + "value": "Команды для папок, симулятора, создания локального браузера, поиска в каталогах и сравнения доступны после выбора локального рабочего пространства. Команды Cloud VM могут быть недоступны здесь." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "%@에 대한 메시지가 켜져 있습니다." + "value": "คำสั่งโฟลเดอร์ โปรแกรมจำลอง การสร้างเบราว์เซอร์ภายในเครื่อง การค้นหาไดเรกทอรี และการเปรียบเทียบ จะใช้งานได้หลังจากเลือกพื้นที่ทำงานภายในเครื่อง คำสั่ง Cloud VM อาจไม่พร้อมใช้งานที่นี่" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "发给 %@ 的消息已开启。" + "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." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "傳給 %@ 的訊息已開啟。" + "value": "Команди для папок, симулятора, створення локального браузера, пошуку в каталогах і порівняння доступні після вибору локального робочого простору. Команди Cloud VM можуть бути тут недоступні." } } } }, - "cli.help.agentMessages": { + "command.cloudVM.availabilityInfo.alertTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nTurn agent messages off or on for one agent, or show whether it gets\nthem. Turning messages off for an agent refuses new messages to it and\nmarks the ones already queued for it as failed.\n\n is resolved like cmux agent message: a workspace or surface id\nor ref, or a workspace title. Without one, the command applies to the\nsurface it runs in. --workspace applies to every surface in the\nworkspace instead.\n\nWithout --workspace, a workspace target means the one agent surface it\nresolves to now. That surface stays off even if a different surface\nbecomes the workspace's agent later.\n\nTo turn agent messages off everywhere, set agentMessages.enabled to\nfalse in ~/.config/cmux/cmux.json or turn off Settings > Automation >\nAgent Messages.\n\nExamples:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الاستخدام: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nيوقف رسائل الوكلاء أو يفعّلها لوكيل واحد، أو يعرض ما إذا كان يستقبلها.\nإيقافها يرفض الرسائل الجديدة إليه ويضع علامة فشل على الرسائل\nالمنتظرة له.\n\nيُحلّ كما في cmux agent message: معرّف\nمساحة عمل أو سطح أو مرجعه، أو عنوان مساحة عمل.\nبدونه يُطبَّق الأمر على السطح الذي يعمل فيه.\nيُطبَّق --workspace بدلًا من ذلك على كل الأسطح في مساحة العمل.\n\nبدون --workspace، يعني هدف مساحة العمل سطح الوكيل الوحيد الذي\nيُحلّ إليه الآن. يبقى هذا السطح موقوفًا حتى لو صار سطح آخر\nوكيل مساحة العمل لاحقًا.\n\nلإيقاف رسائل الوكلاء في كل مكان، اضبط\nagentMessages.enabled على false في\n~/.config/cmux/cmux.json أو أوقف الإعدادات > الأتمتة > رسائل الوكلاء.\n\nأمثلة:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" + "value": "Some commands are local-only" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nSchaltet Agent-Nachrichten für einen Agenten aus oder ein oder zeigt, ob er sie\nerhält. Ausschalten weist neue Nachrichten an ihn ab und markiert die bereits\nfür ihn eingereihten als fehlgeschlagen.\n\n wird wie bei cmux agent message aufgelöst: eine Workspace- oder\nOberflächen-ID bzw. -Referenz oder ein Workspace-Titel. Ohne Angabe gilt der\nBefehl für die Oberfläche, in der er läuft. --workspace gilt stattdessen für\nalle Oberflächen im Workspace.\n\nOhne --workspace meint ein Workspace-Ziel die eine Agent-Oberfläche, zu der\nes jetzt aufgelöst wird. Diese bleibt aus, auch wenn später eine andere\nOberfläche der Agent des Workspace wird.\n\nUm Agent-Nachrichten überall auszuschalten, setze agentMessages.enabled in\n~/.config/cmux/cmux.json auf false oder schalte Einstellungen > Automatisierung >\nAgent-Nachrichten aus.\n\nBeispiele:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Uso: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nDesactiva o activa los mensajes de agentes para un agente, o muestra si los\nrecibe. Desactivarlos rechaza los mensajes nuevos para él y marca como\nfallidos los que ya estaban en cola.\n\n se resuelve como en cmux agent message: un ID o referencia de espacio\nde trabajo o superficie, o un título de espacio de trabajo. Sin él, el comando\nse aplica a la superficie donde se ejecuta. --workspace se aplica en cambio a\ntodas las superficies del espacio de trabajo.\n\nSin --workspace, un destino de espacio de trabajo indica la única superficie\nde agente a la que se resuelve ahora. Esa superficie sigue desactivada aunque\notra superficie pase después a ser el agente del espacio de trabajo.\n\nPara desactivar los mensajes de agentes en todas partes, establece\nagentMessages.enabled en false en ~/.config/cmux/cmux.json o desactiva\nAjustes > Automatización > Mensajes de agentes.\n\nEjemplos:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" + "value": "Einige Befehle sind nur lokal verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux agent messages [on|off|status] [] [--workspace] [--json]\n\nDésactive ou active les messages d'agents pour un agent, ou indique s'il les\nreçoit. Les désactiver refuse les nouveaux messages qui lui sont destinés et\nmarque comme échoués ceux déjà en file d'attente.\n\n est résolu comme pour cmux agent message : un ID ou une référence\nd'espace de travail ou de surface, ou un titre d'espace de travail. Sans cible,\nla commande s'applique à la surface où elle s'exécute. --workspace s'applique\nà la place à toutes les surfaces de l'espace de travail.\n\nSans --workspace, une cible d'espace de travail désigne la seule surface\nd'agent vers laquelle elle se résout maintenant. Cette surface reste désactivée\nmême si une autre surface devient plus tard l'agent de l'espace de travail.\n\nPour désactiver les messages d'agents partout, définissez agentMessages.enabled\nsur false dans ~/.config/cmux/cmux.json ou désactivez Réglages > Automatisation >\nMessages d'agents.\n\nExemples :\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "使い方: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n1 つのエージェントへのエージェントメッセージをオフまたはオンにするか、受け取るか\nどうかを表示します。オフにすると、そのエージェントへの新しいメッセージを拒否し、\nすでにキューにあるメッセージを失敗にします。\n\n は cmux agent message と同じように解決されます: ワークスペースか\nサーフェスの ID または参照、またはワークスペースのタイトル。省略すると、\nコマンドを実行したサーフェスに適用されます。--workspace を付けると、\nワークスペース内のすべてのサーフェスに適用されます。\n\n--workspace を付けない場合、ワークスペースの指定は、いま解決される 1 つの\nエージェントサーフェスを指します。後で別のサーフェスがワークスペースの\nエージェントになっても、そのサーフェスはオフのままです。\n\nエージェントメッセージをすべてオフにするには、~/.config/cmux/cmux.json で\nagentMessages.enabled を false にするか、設定 > 自動化 > エージェントメッセージを\nオフにしてください。\n\n例:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" + "value": "Certaines commandes sont uniquement locales" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "사용법: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n에이전트 하나의 에이전트 메시지를 끄거나 켜고, 메시지를 받는지 보여 줍니다.\n끄면 그 에이전트에게 오는 새 메시지를 거부하고 이미 대기 중인 메시지를\n실패로 표시합니다.\n\n은 cmux agent message와 같은\n방식으로 해석됩니다: 워크스페이스나 표면의 ID 또는 참조, 또는\n워크스페이스 제목. 지정하지 않으면 명령이 실행되는 표면에\n적용됩니다. --workspace는 대신 워크스페이스의 모든 표면에 적용됩니다.\n\n--workspace 없이 워크스페이스를 지정하면 지금 해석되는 에이전트 표면\n하나에만 적용됩니다. 나중에 다른 표면이 워크스페이스의 에이전트가 되어도\n그 표면은 꺼진 상태로 남습니다.\n\n모든 곳에서 에이전트 메시지를 끄려면 ~/.config/cmux/cmux.json에서\nagentMessages.enabled를 false로 설정하거나 설정 > 자동화 > 에이전트 메시지를\n끄세요.\n\n예시:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" + "value": "بعض الأوامر محلية فقط" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n为单个代理关闭或开启代理消息,或显示它\n是否会收到消息。关闭后会拒绝发给它的新\n消息,并将已排队给它的消息标记为失败。\n\n 的解析方式与 cmux agent\nmessage 相同:工作区或表面的 ID 或引用,\n或工作区标题。未指定时,命令作用于它运行所在的表面。--workspace\n则改为 作用于工作区中的所有表面。\n\n不加 --workspace 时,工作区目标指的是它当前解析到的\n那一个代理表面。即使之后另一个表面成为该工作区的代理,\n这个表面仍保持关闭。\n\n若要在所有地方关闭代理消息,请在\n~/.config/cmux/cmux.json 中将\nagentMessages.enabled 设为 false,或关闭“设置 > 自动化 > 代理消息”。\n\n示例:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" + "value": "Algunos comandos solo están disponibles localmente" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法: cmux agent messages [on|off|status] [] [--workspace] [--json]\n\n為單一代理關閉或開啟代理訊息,或顯示它\n是否會收到訊息。關閉後會拒絕傳給它的新\n訊息,並將已排隊給它的訊息標為失敗。\n\n 的解析方式與 cmux agent\nmessage 相同:工作區或表面的 ID 或參照,\n或工作區標題。未指定時,指令套用到它執行所在的表面。--workspace\n則改為 套用到工作區中的所有表面。\n\n不加 --workspace 時,工作區目標指的是它目前解析到的\n那一個代理表面。即使之後另一個表面成為該工作區的代理,\n這個表面仍保持關閉。\n\n若要在所有地方關閉代理訊息,請在\n~/.config/cmux/cmux.json 中將\nagentMessages.enabled 設為 false,或關閉「設定 > 自動化 > 代理訊息」。\n\n範例:\n cmux agent messages off\n cmux agent messages on workspace:3\n cmux agent messages off --workspace cmux-remote-status" - } - } - } - }, - "cli.help.agents.messages": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" + "value": "部分指令僅限本機使用" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" + "value": "部分命令仅限本地使用" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" + "value": "일부 명령어는 로컬에서만 사용 가능" } }, "ja": { "stringUnit": { "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" + "value": "一部のコマンドはローカル専用です" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" + "value": "Neke naredbe su dostupne samo lokalno" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" + "value": "Nogle kommandoer er kun lokale" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "agent messages [on|off|status] [] [--workspace]" - } - } - } - }, - "settings.automation.agentMessages": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Agent Messages" + "value": "Alcuni comandi sono solo locali" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "رسائل الوكلاء" + "value": "ការបញ្ជាមួយចំនួនមានសម្រាប់មូលដ្ឋានប៉ុណ្ណោះ" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Agent-Nachrichten" + "value": "Noen kommandoer er bare lokale" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Mensajes de agentes" + "value": "Niektóre polecenia są dostępne tylko lokalnie" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Messages d'agents" + "value": "Alguns comandos são apenas locais" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "エージェントメッセージ" + "value": "Некоторые команды доступны только локально" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "에이전트 메시지" + "value": "คำสั่งบางรายการใช้ได้เฉพาะในเครื่อง" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "代理消息" + "value": "Bazı komutlar yalnızca yereldir" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "代理訊息" + "value": "Деякі команди доступні лише локально" } } } }, - "agentInbox.state.failed": { + "command.cloudVM.availabilityInfo.keywords": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Not delivered" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لم تُسلَّم" + "value": "cloud, workspace, availability, local, unavailable, actions" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nicht zugestellt" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No entregado" + "value": "Cloud, Arbeitsbereich, Verfügbarkeit, lokal, nicht verfügbar, Aktionen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Non remis" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未配信" + "value": "Cloud, espace de travail, disponibilité, local, indisponible, actions" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "전달 안 됨" + "value": "السحابة, مساحة العمل, التوفر, محلي, غير متاح, إجراءات" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "未投递" + "value": "Cloud, espacio de trabajo, disponibilidad, local, no disponible, acciones" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "未遞送" - } - } - } - }, - "command.agentMessagesOff.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Turn Off Agent Messages for This Tab" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إيقاف رسائل الوكلاء لهذه العلامة" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Agent-Nachrichten für diesen Tab ausschalten" + "value": "Cloud, 工作區, 可用性, 本機, 無法使用, 動作" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Desactivar mensajes de agentes en esta pestaña" + "value": "Cloud, 工作区, 可用性, 本地, 不可用, 操作" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Désactiver les messages d'agents pour cet onglet" + "value": "Cloud, 작업 공간, 사용 가능 여부, 로컬, 사용할 수 없음, 동작" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このタブのエージェントメッセージをオフにする" + "value": "Cloud, ワークスペース, 利用可能性, ローカル, 利用不可, アクション" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "이 탭의 에이전트 메시지 끄기" + "value": "Cloud, radni prostor, dostupnost, lokalno, nedostupno, radnje" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "关闭此标签页的代理消息" + "value": "Cloud, arbejdsområde, tilgængelighed, lokal, utilgængelig, handlinger" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "關閉此分頁的代理訊息" - } - } - } - }, - "command.agentMessagesOn.title": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Turn On Agent Messages for This Tab" + "value": "Cloud, spazio di lavoro, disponibilità, locale, non disponibile, azioni" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "تفعيل رسائل الوكلاء لهذه العلامة" + "value": "Cloud, កន្លែងធ្វើការ, ភាពអាចប្រើបាន, មូលដ្ឋាន, មិនអាចប្រើបាន, សកម្មភាព" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Agent-Nachrichten für diesen Tab einschalten" + "value": "Cloud, arbeidsområde, tilgjengelighet, lokal, utilgjengelig, handlinger" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "Activar mensajes de agentes en esta pestaña" + "value": "Cloud, obszar roboczy, dostępność, lokalne, niedostępne, działania" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Activer les messages d'agents pour cet onglet" + "value": "Cloud, espaço de trabalho, disponibilidade, local, indisponível, ações" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "このタブのエージェントメッセージをオンにする" + "value": "Cloud, рабочее пространство, доступность, локальный, недоступно, действия" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "이 탭의 에이전트 메시지 켜기" + "value": "Cloud, พื้นที่ทำงาน, ความพร้อมใช้งาน, ในเครื่อง, ไม่พร้อมใช้งาน, การทำงาน" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "开启此标签页的代理消息" + "value": "Cloud, çalışma alanı, kullanılabilirlik, yerel, kullanılamıyor, işlemler" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "開啟此分頁的代理訊息" + "value": "Cloud, робочий простір, доступність, локальний, недоступно, дії" } } } }, - "agentMessage.error.messagesDisabled": { + "command.cloudVM.availabilityInfo.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent messages are turned off (agentMessages.enabled is false)." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "رسائل الوكلاء متوقفة (قيمة agentMessages.enabled هي false)." + "value": "Cloud workspace" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent-Nachrichten sind ausgeschaltet (agentMessages.enabled ist false)." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Los mensajes de agentes están desactivados (agentMessages.enabled es false)." + "value": "Cloud-Arbeitsbereich" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les messages d'agents sont désactivés (agentMessages.enabled vaut false)." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "エージェントメッセージはオフです(agentMessages.enabled が false)。" + "value": "Espace de travail Cloud" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "에이전트 메시지가 꺼져 있습니다(agentMessages.enabled가 false)." + "value": "مساحة عمل سحابية" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "代理消息已关闭(agentMessages.enabled 为 false)。" + "value": "Espacio de trabajo de Cloud" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "代理訊息已關閉(agentMessages.enabled 為 false)。" - } - } - } - }, - "agentMessage.error.recipientDisabled": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recipient %@ has messages disabled." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "المستلم %@ أوقف الرسائل." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Empfänger %@ hat Nachrichten deaktiviert." + "value": "Cloud 工作區" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "El destinatario %@ tiene los mensajes desactivados." + "value": "Cloud 工作区" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Le destinataire %@ a désactivé les messages." + "value": "Cloud 작업 공간" } }, "ja": { "stringUnit": { "state": "translated", - "value": "受信者 %@ はメッセージを無効にしています。" + "value": "Cloud ワークスペース" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "수신자 %@의 메시지가 꺼져 있습니다." + "value": "Cloud radni prostor" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "收件方 %@ 已停用消息。" + "value": "Cloud-arbejdsområde" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "收件者 %@ 已停用訊息。" - } - } - } - }, - "agentMessage.error.workspaceDisabled": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "Recipient workspace %@ has messages disabled." + "value": "Spazio di lavoro Cloud" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "مساحة العمل المستلمة %@ أوقفت الرسائل." + "value": "កន្លែងធ្វើការ Cloud" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Empfänger-Workspace %@ hat Nachrichten deaktiviert." + "value": "Cloud-arbeidsområde" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "El espacio de trabajo destinatario %@ tiene los mensajes desactivados." + "value": "Obszar roboczy Cloud" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "L'espace de travail destinataire %@ a désactivé les messages." + "value": "Espaço de trabalho Cloud" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "受信先ワークスペース %@ はメッセージを無効にしています。" + "value": "Рабочее пространство Cloud" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "수신 워크스페이스 %@의 메시지가 꺼져 있습니다." + "value": "พื้นที่ทำงาน Cloud" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "收件工作区 %@ 已停用消息。" + "value": "Cloud çalışma alanı" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "收件工作區 %@ 已停用訊息。" + "value": "Робочий простір Cloud" } } } }, - "socket.agentMessage.error.invalidScope": { + "command.cloudVM.availabilityInfo.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Scope must be surface or workspace." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يجب أن يكون النطاق surface أو workspace." + "value": "Show Cloud command availability" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Bereich muss surface oder workspace sein." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El ámbito debe ser surface o workspace." + "value": "Verfügbarkeit von Cloud-Befehlen anzeigen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La portée doit être surface ou workspace." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "スコープは surface または workspace にしてください。" + "value": "Afficher la disponibilité des commandes Cloud" } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "범위는 surface 또는 workspace여야 합니다." + "value": "إظهار مدى توفر أوامر السحابة" } }, - "zh-Hans": { + "es": { "stringUnit": { "state": "translated", - "value": "范围必须是 surface 或 workspace。" + "value": "Mostrar disponibilidad de comandos de Cloud" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "範圍必須是 surface 或 workspace。" - } - } - } - }, - "socket.agentMessage.error.missingSettingsTarget": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Give a target workspace or surface, or run this inside a cmux surface." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "حدّد مساحة عمل أو سطحًا هدفًا، أو شغّل هذا داخل سطح cmux." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib einen Ziel-Workspace oder eine Zieloberfläche an oder führe dies in einer cmux-Oberfläche aus." + "value": "顯示 Cloud 指令可用性" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Indica un espacio de trabajo o una superficie de destino, o ejecuta esto dentro de una superficie de cmux." + "value": "显示 Cloud 命令可用性" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Indiquez un espace de travail ou une surface cible, ou exécutez ceci dans une surface cmux." + "value": "Cloud 명령어 사용 가능 여부 보기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "対象のワークスペースかサーフェスを指定するか、cmux のサーフェス内で実行してください。" + "value": "Cloud コマンドの利用状況を表示" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "대상 워크스페이스나 표면을 지정하거나 cmux 표면 안에서 실행하세요." + "value": "Prikaži dostupnost Cloud naredbi" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "请指定目标工作区或表面,或在 cmux 表面中运行此命令。" + "value": "Vis tilgængelighed af Cloud-kommandoer" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "請指定目標工作區或表面,或在 cmux 表面中執行此指令。" - } - } - } - }, - "socket.agentMessage.error.settingNotSaved": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "The setting was not changed: cmux could not save it to the message journal." + "value": "Mostra disponibilità dei comandi Cloud" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "لم يتغير الإعداد: تعذّر على cmux حفظه في سجل الرسائل." + "value": "បង្ហាញភាពអាចប្រើបាននៃការបញ្ជា Cloud" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Die Einstellung wurde nicht geändert: cmux konnte sie nicht im Nachrichtenjournal speichern." + "value": "Vis tilgjengelighet for Cloud-kommandoer" } }, - "es": { + "pl": { "stringUnit": { "state": "translated", - "value": "El ajuste no se cambió: cmux no pudo guardarlo en el registro de mensajes." + "value": "Pokaż dostępność poleceń Cloud" } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Le réglage n'a pas été modifié : cmux n'a pas pu l'enregistrer dans le journal des messages." + "value": "Mostrar disponibilidade dos comandos Cloud" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "設定は変更されませんでした: cmux がメッセージジャーナルに保存できませんでした。" + "value": "Показать доступность команд Cloud" } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "설정이 바뀌지 않았습니다: cmux가 메시지 저널에 저장하지 못했습니다." + "value": "แสดงความพร้อมใช้งานของคำสั่ง Cloud" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "设置未更改:cmux 无法将它保存到消息日志。" + "value": "Cloud komutlarının kullanılabilirliğini göster" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "設定未變更:cmux 無法將它儲存到訊息日誌。" + "value": "Показати доступність команд Cloud" } } } From 1ed57ef32ba1d0539c9f83a6c09afba4c4cfde29 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Sun, 4 Oct 2026 08:47:21 -0700 Subject: [PATCH 23/26] Keep the string catalog as main's text plus this change's entries --- Resources/Localizable.xcstrings | 3574 +++++++++++++++---------------- 1 file changed, 1787 insertions(+), 1787 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 7aba726a7bcb..5e1de289e3df 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -232456,6 +232456,881 @@ } } }, + "cloudVM.error.resourcePool.action": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "Pauzirajte ili izbrišite VM, ili pređite na Max." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Sæt en VM på pause eller slet den, eller opgrader til Max." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Metti in pausa o elimina una VM, oppure passa a Max." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ផ្អាក ឬលុប VM មួយ ឬដំឡើងទៅ Max។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Sett en VM på pause eller slett den, eller oppgrader til Max." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Wstrzymaj lub usuń VM albo przejdź na Max." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Pause ou exclua uma VM, ou faça upgrade para o Max." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Приостановите или удалите VM либо перейдите на Max." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "หยุด VM ชั่วคราวหรือลบ VM หรืออัปเกรดเป็น Max" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bir VM'yi duraklatın veya silin ya da Max'e yükseltin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Призупиніть або видаліть VM чи перейдіть на Max." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Pause or delete a VM, or upgrade to Max." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Pausiere oder lösche eine VM, oder führe ein Upgrade auf Max durch." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Mettez en pause ou supprimez une VM, ou passez à Max." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "أوقف جهازًا افتراضيًا مؤقتًا أو احذفه، أو قم بالترقية إلى Max." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Pausa o elimina una VM, o actualiza a Max." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "請暫停或刪除一台虛擬機,或升級至 Max。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "请暂停或删除一台虚拟机,或升级到 Max。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "VM을 일시 중지하거나 삭제하거나 Max로 업그레이드하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "VM を一時停止するか削除する、または Max にアップグレードしてください。" + } + } + } + }, + "cloudVM.error.resourcePool.maxAction": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "Pauzirajte ili izbrišite VM." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Sæt en VM på pause eller slet den." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Metti in pausa o elimina una VM." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ផ្អាក ឬលុប VM មួយ។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Sett en VM på pause eller slett den." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Wstrzymaj lub usuń VM." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Pause ou exclua uma VM." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Приостановите или удалите VM." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "หยุด VM ชั่วคราวหรือลบ VM" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bir VM'yi duraklatın veya silin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Призупиніть або видаліть VM." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Pause or delete a VM." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Pausiere oder lösche eine VM." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Mettez en pause ou supprimez une VM." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "أوقف جهازًا افتراضيًا مؤقتًا أو احذفه." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Pausa o elimina una VM." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "請暫停或刪除一台虛擬機。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "请暂停或删除一台虚拟机。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "VM을 일시 중지하거나 삭제하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "VM を一時停止するか削除してください。" + } + } + } + }, + "cloud.machines.pool.usage": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "%1$lld od %2$lld vCPU-a · %3$lld od %4$lld GB RAM-a u upotrebi" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "%1$lld af %2$lld vCPU'er · %3$lld af %4$lld GB RAM i brug" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "%1$lld di %2$lld vCPU · %3$lld di %4$lld GB di RAM in uso" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "កំពុងប្រើ vCPU %1$lld ក្នុងចំណោម %2$lld · RAM %3$lld ក្នុងចំណោម %4$lld GB" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "%1$lld av %2$lld vCPU-er · %3$lld av %4$lld GB RAM i bruk" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "W użyciu: %1$lld z %2$lld vCPU · %3$lld z %4$lld GB RAM" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "%1$lld de %2$lld vCPUs · %3$lld de %4$lld GB de RAM em uso" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Используется %1$lld из %2$lld vCPU · %3$lld из %4$lld ГБ RAM" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ใช้อยู่ %1$lld จาก %2$lld vCPU · RAM %3$lld จาก %4$lld GB" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "%2$lld vCPU'nun %1$lld tanesi · %4$lld GB RAM'in %3$lld GB'ı kullanımda" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Використано %1$lld з %2$lld vCPU · %3$lld з %4$lld ГБ RAM" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$lld of %2$lld vCPUs · %3$lld of %4$lld GB RAM in use" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "%1$lld von %2$lld vCPUs · %3$lld von %4$lld GB RAM belegt" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "%1$lld vCPU sur %2$lld · %3$lld Go de RAM sur %4$lld utilisés" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "قيد الاستخدام: %1$lld من %2$lld وحدة معالجة مركزية افتراضية · %3$lld من %4$lld جيجابايت من الذاكرة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "%1$lld de %2$lld vCPU · %3$lld de %4$lld GB de RAM en uso" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "已使用 %1$lld / %2$lld 個虛擬 CPU · %3$lld / %4$lld GB 記憶體" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "已使用 %1$lld / %2$lld 个虚拟 CPU · %3$lld / %4$lld GB 内存" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "사용 중: vCPU %1$lld/%2$lld개 · RAM %3$lld/%4$lld GB" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "使用中: %1$lld / %2$lld vCPU · %3$lld / %4$lld GB RAM" + } + } + } + }, + "cloud.newMachine.pool.doesNotFit": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "Ova veličina treba %1$lld GB RAM-a, ali je od vašeg skupa od %3$lld GB slobodno samo %2$lld GB. Pauzirajte ili izbrišite VM, ili pređite na Max." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelse kræver %1$lld GB RAM, men kun %2$lld GB af din pulje på %3$lld GB er ledig. Sæt en VM på pause eller slet den, eller opgrader til Max." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Questa dimensione richiede %1$lld GB di RAM, ma del tuo pool da %3$lld GB sono liberi solo %2$lld GB. Metti in pausa o elimina una VM, oppure passa a Max." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ទំហំនេះត្រូវការ RAM %1$lld GB ប៉ុន្តែក្នុងបណ្តុំ %3$lld GB របស់អ្នក នៅទំនេរតែ %2$lld GB ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ ឬដំឡើងទៅ Max។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelsen trenger %1$lld GB RAM, men bare %2$lld GB av ressurspoolen din på %3$lld GB er ledig. Sett en VM på pause eller slett den, eller oppgrader til Max." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Ten rozmiar wymaga %1$lld GB RAM, ale z Twojej puli %3$lld GB wolne jest tylko %2$lld GB. Wstrzymaj lub usuń VM albo przejdź na Max." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Este tamanho precisa de %1$lld GB de RAM, mas só %2$lld GB do seu pool de %3$lld GB estão livres. Pause ou exclua uma VM, ou faça upgrade para o Max." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Для этого размера нужно %1$lld ГБ RAM, но в вашем пуле на %3$lld ГБ свободно только %2$lld ГБ. Приостановите или удалите VM либо перейдите на Max." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ขนาดนี้ต้องใช้ RAM %1$lld GB แต่พูล %3$lld GB ของคุณว่างอยู่เพียง %2$lld GB หยุด VM ชั่วคราวหรือลบ VM หรืออัปเกรดเป็น Max" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu boyut %1$lld GB RAM gerektiriyor, ancak %3$lld GB'lık havuzunuzun yalnızca %2$lld GB'ı boş. Bir VM'yi duraklatın veya silin ya da Max'e yükseltin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Для цього розміру потрібно %1$lld ГБ RAM, але у вашому пулі на %3$lld ГБ вільно лише %2$lld ГБ. Призупиніть або видаліть VM чи перейдіть на Max." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "This size needs %1$lld GB RAM, but only %2$lld GB of your %3$lld GB pool is free. Pause or delete a VM, or upgrade to Max." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diese Größe benötigt %1$lld GB RAM, aber von deinem %3$lld-GB-Pool sind nur %2$lld GB frei. Pausiere oder lösche eine VM, oder führe ein Upgrade auf Max durch." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cette taille nécessite %1$lld Go de RAM, mais seuls %2$lld Go de votre réserve de %3$lld Go sont libres. Mettez en pause ou supprimez une VM, ou passez à Max." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يحتاج هذا الحجم إلى %1$lld جيجابايت من الذاكرة، لكن المتاح من مجموعتك البالغة %3$lld جيجابايت هو %2$lld جيجابايت فقط. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه، أو قم بالترقية إلى Max." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Este tamaño necesita %1$lld GB de RAM, pero solo quedan libres %2$lld GB de tu grupo de %3$lld GB. Pausa o elimina una VM, o actualiza a Max." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "此規格需要 %1$lld GB 記憶體,但你的 %3$lld GB 資源池只剩 %2$lld GB 可用。請暫停或刪除一台虛擬機,或升級至 Max。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此规格需要 %1$lld GB 内存,但你的 %3$lld GB 资源池只剩 %2$lld GB 可用。请暂停或删除一台虚拟机,或升级到 Max。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 크기에는 RAM %1$lld GB가 필요하지만 %3$lld GB 풀 중 %2$lld GB만 남아 있습니다. VM을 일시 중지하거나 삭제하거나 Max로 업그레이드하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このサイズには %1$lld GB RAM が必要ですが、%3$lld GB のプールのうち空きは %2$lld GB だけです。VM を一時停止するか削除する、または Max にアップグレードしてください。" + } + } + } + }, + "cloud.newMachine.pool.doesNotFitMax": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "Ova veličina treba %1$lld GB RAM-a, ali je od vašeg skupa od %3$lld GB slobodno samo %2$lld GB. Pauzirajte ili izbrišite VM." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelse kræver %1$lld GB RAM, men kun %2$lld GB af din pulje på %3$lld GB er ledig. Sæt en VM på pause eller slet den." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Questa dimensione richiede %1$lld GB di RAM, ma del tuo pool da %3$lld GB sono liberi solo %2$lld GB. Metti in pausa o elimina una VM." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ទំហំនេះត្រូវការ RAM %1$lld GB ប៉ុន្តែក្នុងបណ្តុំ %3$lld GB របស់អ្នក នៅទំនេរតែ %2$lld GB ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelsen trenger %1$lld GB RAM, men bare %2$lld GB av ressurspoolen din på %3$lld GB er ledig. Sett en VM på pause eller slett den." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Ten rozmiar wymaga %1$lld GB RAM, ale z Twojej puli %3$lld GB wolne jest tylko %2$lld GB. Wstrzymaj lub usuń VM." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Este tamanho precisa de %1$lld GB de RAM, mas só %2$lld GB do seu pool de %3$lld GB estão livres. Pause ou exclua uma VM." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Для этого размера нужно %1$lld ГБ RAM, но в вашем пуле на %3$lld ГБ свободно только %2$lld ГБ. Приостановите или удалите VM." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ขนาดนี้ต้องใช้ RAM %1$lld GB แต่พูล %3$lld GB ของคุณว่างอยู่เพียง %2$lld GB หยุด VM ชั่วคราวหรือลบ VM" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu boyut %1$lld GB RAM gerektiriyor, ancak %3$lld GB'lık havuzunuzun yalnızca %2$lld GB'ı boş. Bir VM'yi duraklatın veya silin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Для цього розміру потрібно %1$lld ГБ RAM, але у вашому пулі на %3$lld ГБ вільно лише %2$lld ГБ. Призупиніть або видаліть VM." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "This size needs %1$lld GB RAM, but only %2$lld GB of your %3$lld GB pool is free. Pause or delete a VM." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diese Größe benötigt %1$lld GB RAM, aber von deinem %3$lld-GB-Pool sind nur %2$lld GB frei. Pausiere oder lösche eine VM." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cette taille nécessite %1$lld Go de RAM, mais seuls %2$lld Go de votre réserve de %3$lld Go sont libres. Mettez en pause ou supprimez une VM." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يحتاج هذا الحجم إلى %1$lld جيجابايت من الذاكرة، لكن المتاح من مجموعتك البالغة %3$lld جيجابايت هو %2$lld جيجابايت فقط. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Este tamaño necesita %1$lld GB de RAM, pero solo quedan libres %2$lld GB de tu grupo de %3$lld GB. Pausa o elimina una VM." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "此規格需要 %1$lld GB 記憶體,但你的 %3$lld GB 資源池只剩 %2$lld GB 可用。請暫停或刪除一台虛擬機。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此规格需要 %1$lld GB 内存,但你的 %3$lld GB 资源池只剩 %2$lld GB 可用。请暂停或删除一台虚拟机。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 크기에는 RAM %1$lld GB가 필요하지만 %3$lld GB 풀 중 %2$lld GB만 남아 있습니다. VM을 일시 중지하거나 삭제하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このサイズには %1$lld GB RAM が必要ですが、%3$lld GB のプールのうち空きは %2$lld GB だけです。VM を一時停止するか削除してください。" + } + } + } + }, + "cloud.newMachine.pool.doesNotFitVcpus": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "Ova veličina treba %1$lld vCPU-a, ali je od vaših %3$lld vCPU-a slobodno samo %2$lld. Pauzirajte ili izbrišite VM, ili pređite na Max." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelse kræver %1$lld vCPU'er, men kun %2$lld af dine %3$lld vCPU'er er ledige. Sæt en VM på pause eller slet den, eller opgrader til Max." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Questa dimensione richiede %1$lld vCPU, ma delle tue %3$lld vCPU ne sono libere solo %2$lld. Metti in pausa o elimina una VM, oppure passa a Max." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ទំហំនេះត្រូវការ vCPU %1$lld ប៉ុន្តែក្នុងចំណោម vCPU %3$lld របស់អ្នក នៅទំនេរតែ %2$lld ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ ឬដំឡើងទៅ Max។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelsen trenger %1$lld vCPU-er, men bare %2$lld av dine %3$lld vCPU-er er ledige. Sett en VM på pause eller slett den, eller oppgrader til Max." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Ten rozmiar wymaga %1$lld vCPU, ale z Twoich %3$lld vCPU wolne jest tylko %2$lld. Wstrzymaj lub usuń VM albo przejdź na Max." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Este tamanho precisa de %1$lld vCPUs, mas só %2$lld das suas %3$lld vCPUs estão livres. Pause ou exclua uma VM, ou faça upgrade para o Max." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Для этого размера нужно %1$lld vCPU, но из ваших %3$lld vCPU свободно только %2$lld. Приостановите или удалите VM либо перейдите на Max." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ขนาดนี้ต้องใช้ %1$lld vCPU แต่จาก %3$lld vCPU ของคุณว่างอยู่เพียง %2$lld หยุด VM ชั่วคราวหรือลบ VM หรืออัปเกรดเป็น Max" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu boyut %1$lld vCPU gerektiriyor, ancak %3$lld vCPU'nuzun yalnızca %2$lld tanesi boş. Bir VM'yi duraklatın veya silin ya da Max'e yükseltin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Для цього розміру потрібно %1$lld vCPU, але з ваших %3$lld vCPU вільно лише %2$lld. Призупиніть або видаліть VM чи перейдіть на Max." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "This size needs %1$lld vCPUs, but only %2$lld of your %3$lld vCPUs are free. Pause or delete a VM, or upgrade to Max." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diese Größe benötigt %1$lld vCPUs, aber von deinen %3$lld vCPUs sind nur %2$lld frei. Pausiere oder lösche eine VM, oder führe ein Upgrade auf Max durch." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cette taille nécessite %1$lld vCPU, mais seuls %2$lld de vos %3$lld vCPU sont libres. Mettez en pause ou supprimez une VM, ou passez à Max." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يحتاج هذا الحجم إلى %1$lld من وحدات المعالجة المركزية الافتراضية، لكن المتاح منها %2$lld فقط من أصل %3$lld. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه، أو قم بالترقية إلى Max." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Este tamaño necesita %1$lld vCPU, pero solo quedan libres %2$lld de tus %3$lld vCPU. Pausa o elimina una VM, o actualiza a Max." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "此規格需要 %1$lld 個虛擬 CPU,但你的 %3$lld 個虛擬 CPU 中只剩 %2$lld 個可用。請暫停或刪除一台虛擬機,或升級至 Max。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此规格需要 %1$lld 个虚拟 CPU,但你的 %3$lld 个虚拟 CPU 中只剩 %2$lld 个可用。请暂停或删除一台虚拟机,或升级到 Max。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 크기에는 vCPU %1$lld개가 필요하지만 vCPU %3$lld개 중 %2$lld개만 남아 있습니다. VM을 일시 중지하거나 삭제하거나 Max로 업그레이드하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このサイズには %1$lld vCPU が必要ですが、%3$lld vCPU のうち空きは %2$lld vCPU だけです。VM を一時停止するか削除する、または Max にアップグレードしてください。" + } + } + } + }, + "cloud.newMachine.pool.doesNotFitVcpusMax": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "Ova veličina treba %1$lld vCPU-a, ali je od vaših %3$lld vCPU-a slobodno samo %2$lld. Pauzirajte ili izbrišite VM." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelse kræver %1$lld vCPU'er, men kun %2$lld af dine %3$lld vCPU'er er ledige. Sæt en VM på pause eller slet den." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Questa dimensione richiede %1$lld vCPU, ma delle tue %3$lld vCPU ne sono libere solo %2$lld. Metti in pausa o elimina una VM." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ទំហំនេះត្រូវការ vCPU %1$lld ប៉ុន្តែក្នុងចំណោម vCPU %3$lld របស់អ្នក នៅទំនេរតែ %2$lld ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Denne størrelsen trenger %1$lld vCPU-er, men bare %2$lld av dine %3$lld vCPU-er er ledige. Sett en VM på pause eller slett den." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Ten rozmiar wymaga %1$lld vCPU, ale z Twoich %3$lld vCPU wolne jest tylko %2$lld. Wstrzymaj lub usuń VM." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Este tamanho precisa de %1$lld vCPUs, mas só %2$lld das suas %3$lld vCPUs estão livres. Pause ou exclua uma VM." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Для этого размера нужно %1$lld vCPU, но из ваших %3$lld vCPU свободно только %2$lld. Приостановите или удалите VM." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ขนาดนี้ต้องใช้ %1$lld vCPU แต่จาก %3$lld vCPU ของคุณว่างอยู่เพียง %2$lld หยุด VM ชั่วคราวหรือลบ VM" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu boyut %1$lld vCPU gerektiriyor, ancak %3$lld vCPU'nuzun yalnızca %2$lld tanesi boş. Bir VM'yi duraklatın veya silin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Для цього розміру потрібно %1$lld vCPU, але з ваших %3$lld vCPU вільно лише %2$lld. Призупиніть або видаліть VM." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "This size needs %1$lld vCPUs, but only %2$lld of your %3$lld vCPUs are free. Pause or delete a VM." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diese Größe benötigt %1$lld vCPUs, aber von deinen %3$lld vCPUs sind nur %2$lld frei. Pausiere oder lösche eine VM." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cette taille nécessite %1$lld vCPU, mais seuls %2$lld de vos %3$lld vCPU sont libres. Mettez en pause ou supprimez une VM." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يحتاج هذا الحجم إلى %1$lld من وحدات المعالجة المركزية الافتراضية، لكن المتاح منها %2$lld فقط من أصل %3$lld. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Este tamaño necesita %1$lld vCPU, pero solo quedan libres %2$lld de tus %3$lld vCPU. Pausa o elimina una VM." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "此規格需要 %1$lld 個虛擬 CPU,但你的 %3$lld 個虛擬 CPU 中只剩 %2$lld 個可用。請暫停或刪除一台虛擬機。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此规格需要 %1$lld 个虚拟 CPU,但你的 %3$lld 个虚拟 CPU 中只剩 %2$lld 个可用。请暂停或删除一台虚拟机。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 크기에는 vCPU %1$lld개가 필요하지만 vCPU %3$lld개 중 %2$lld개만 남아 있습니다. VM을 일시 중지하거나 삭제하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このサイズには %1$lld vCPU が必要ですが、%3$lld vCPU のうち空きは %2$lld vCPU だけです。VM を一時停止するか削除してください。" + } + } + } + }, "machines.empty.upgrade": { "extractionState": "manual", "localizations": { @@ -359110,6 +359985,131 @@ } } }, + "settings.search.alias.setting.terminal.copy-confirmation": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse تأكيد نسخ حافظة تحديد" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse potvrda kopirano međuspremnik odabir" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse bekræftelse kopieret udklipsholder markering" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse Bestätigung kopiert Zwischenablage Auswahl" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse confirmación copiado portapapeles selección" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse confirmation copié presse-papiers sélection" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse conferma copiato appunti selezione" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 確認 コピー クリップボード 選択" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse បញ្ជាក់ ចម្លង ក្ដារតម្រៀប ជ្រើស" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 확인 복사됨 클립보드 선택" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse bekreftelse kopiert utklippstavle markering" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse potwierdzenie skopiowano schowek zaznaczenie" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse confirmação copiado área de transferência seleção" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse подтверждение скопировано буфер обмена выделение" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse ยืนยัน คัดลอก คลิปบอร์ด เลือก" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse onay kopyalandı pano seçim" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse підтвердження скопійовано буфер обміну виділення" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 确认 已复制 剪贴板 选择" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 確認 已複製 剪貼簿 選取" + } + } + } + }, "settings.search.alias.setting.terminal.reflow-hard-wrap-on-copy": { "extractionState": "manual", "localizations": { @@ -366617,6 +367617,256 @@ } } }, + "settings.terminal.showCopyConfirmation": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "إظهار تأكيد النسخ" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Prikaži potvrdu kopiranja" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Vis kopieringsbekræftelse" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Kopierbestätigung anzeigen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Show Copy Confirmation" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Mostrar confirmación de copia" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Afficher la confirmation de copie" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Mostra conferma di copia" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "コピーの確認を表示" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បង្ហាញការបញ្ជាក់ការចម្លង" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "복사 확인 표시" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Vis kopieringsbekreftelse" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Pokazuj potwierdzenie kopiowania" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Mostrar confirmação de cópia" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Показывать подтверждение копирования" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "แสดงการยืนยันการคัดลอก" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Kopyalama onayını göster" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Показувати підтвердження копіювання" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示复制确认" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "顯示複製確認" + } + } + } + }, + "settings.terminal.showCopyConfirmation.subtitle": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "يعرض «تم النسخ إلى الحافظة» لفترة وجيزة أسفل الطرفية عندما يؤدي تحديد النص إلى نسخه." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Kratko prikazuje „Kopirano u međuspremnik“ na dnu terminala kada se odabrani tekst kopira." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Viser kortvarigt „Kopieret til udklipsholder“ nederst i en terminal, når markering af tekst kopierer den." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Zeigt unten im Terminal kurz „In die Zwischenablage kopiert“ an, wenn durch Auswählen von Text kopiert wird." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Briefly shows “Copied to clipboard” at the bottom of a terminal when selecting text copies it." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Muestra brevemente «Copiado al portapapeles» en la parte inferior de una terminal cuando al seleccionar texto se copia." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Affiche brièvement « Copié dans le presse-papiers » en bas d’un terminal lorsque la sélection de texte le copie." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Mostra brevemente «Copiato negli appunti» in fondo a un terminale quando la selezione del testo lo copia." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "テキストを選択してコピーしたときに、ターミナルの下部に「クリップボードにコピーしました」を短く表示します。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បង្ហាញ «បានចម្លងទៅក្ដារតម្រៀប» មួយភ្លែតនៅខាងក្រោម terminal នៅពេលការជ្រើសអត្ថបទចម្លងវា។" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "텍스트를 선택해 복사하면 터미널 하단에 “클립보드에 복사됨”을 잠시 표시합니다." + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Viser kort «Kopiert til utklippstavlen» nederst i en terminal når markering av tekst kopierer den." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Na chwilę wyświetla „Skopiowano do schowka” u dołu terminala, gdy zaznaczenie tekstu go kopiuje." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Mostra brevemente “Copiado para a área de transferência” na parte inferior do terminal quando selecionar texto o copia." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ненадолго показывает «Скопировано в буфер обмена» внизу терминала, когда выделение текста копирует его." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "แสดง “คัดลอกไปยังคลิปบอร์ดแล้ว” ชั่วครู่ที่ด้านล่างของเทอร์มินัลเมื่อการเลือกข้อความคัดลอกข้อความนั้น" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Metin seçimi onu kopyaladığında terminalin altında kısa süreliğine “Panoya kopyalandı” gösterir." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Ненадовго показує «Скопійовано в буфер обміну» внизу термінала, коли виділення тексту копіює його." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "选择文本并复制时,在终端底部短暂显示“已复制到剪贴板”。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "選取文字並複製時,在終端機底部短暫顯示「已複製到剪貼簿」。" + } + } + } + }, "settings.terminal.reflowHardWrapOnCopy": { "extractionState": "manual", "localizations": { @@ -523724,6 +524974,506 @@ } } }, + "pricing.native.compare.resources": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "Resursi Cloud VM-ova" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM-ressourcer" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Risorse delle Cloud VM" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ធនធាន Cloud VM" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM-ressurser" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Zasoby Cloud VM" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Recursos das Cloud VMs" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ресурсы Cloud VM" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ทรัพยากร Cloud VM" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM kaynakları" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Ресурси Cloud VM" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM resources" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud-VM-Ressourcen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Ressources de VM cloud" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "موارد الجهاز الافتراضي السحابي" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Recursos de VM en la nube" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "雲端虛擬機資源" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM 资源" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM 리소스" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM のリソース" + } + } + } + }, + "pricing.native.compare.resources.standard": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU-a i 40 GB RAM-a, zajednički" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU'er og 40 GB RAM, delt" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU e 40 GB di RAM, condivisi" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "vCPU 20 និង RAM 40 GB ប្រើរួមគ្នា" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU-er og 40 GB RAM, delt" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU i 40 GB RAM, współdzielone" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "20 vCPUs e 40 GB de RAM, compartilhados" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU и 40 ГБ RAM, общие" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU และ RAM 40 GB ใช้ร่วมกัน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU ve 40 GB RAM, paylaşımlı" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU і 40 ГБ RAM, спільні" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "20 vCPUs and 40 GB RAM, shared" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "20 vCPUs und 40 GB RAM, gemeinsam genutzt" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU et 40 Go de RAM partagés" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "20 وحدة معالجة مركزية افتراضية و40 جيجابايت من الذاكرة مشتركة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU y 40 GB de RAM compartidos" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "共用 20 個虛擬 CPU 與 40 GB 記憶體" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "共享 20 个虚拟 CPU 和 40 GB 内存" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "vCPU 20개와 RAM 40 GB 공유" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU と 40 GB RAM を共有" + } + } + } + }, + "pricing.native.compare.resources.team": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU-a i 40 GB RAM-a po plaćenom mjestu, zajednički za cijeli tim" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU'er og 40 GB RAM pr. betalt plads, delt på tværs af teamet" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU e 40 GB di RAM per postazione a pagamento, condivisi da tutto il team" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "vCPU 20 និង RAM 40 GB ក្នុងមួយកៅអីបង់ប្រាក់ ដែលក្រុមទាំងមូលប្រើរួមគ្នា" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU-er og 40 GB RAM per betalt plass, delt på tvers av teamet" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU i 40 GB RAM na płatne miejsce, współdzielone w całym zespole" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "20 vCPUs e 40 GB de RAM por assento pago, compartilhados por toda a equipe" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU и 40 ГБ RAM на оплаченное место, общие для всей команды" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU และ RAM 40 GB ต่อที่นั่งแบบชำระเงิน ใช้ร่วมกันทั้งทีม" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Ücretli koltuk başına 20 vCPU ve 40 GB RAM, tüm ekipçe paylaşılır" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU і 40 ГБ RAM на оплачене місце, спільні для всієї команди" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "20 vCPUs and 40 GB RAM per paid seat, shared across the team" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "20 vCPUs und 40 GB RAM pro bezahltem Platz, im ganzen Team gemeinsam genutzt" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU et 40 Go de RAM par siège payant, partagés dans toute l’équipe" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "20 وحدة معالجة مركزية افتراضية و40 جيجابايت من الذاكرة لكل مقعد مدفوع، مشتركة على مستوى الفريق" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "20 vCPU y 40 GB de RAM por puesto de pago, compartidos en todo el equipo" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "每個付費席位 20 個虛擬 CPU 與 40 GB 記憶體,由整個團隊共用" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "每个付费席位 20 个虚拟 CPU 和 40 GB 内存,由整个团队共享" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "유료 시트당 vCPU 20개와 RAM 40 GB, 팀 전체가 공유" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "有料シートごとに 20 vCPU と 40 GB RAM(チーム全体で共有)" + } + } + } + }, + "pricing.native.compare.resources.max": { + "extractionState": "manual", + "localizations": { + "bs": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU-a i 160 GB RAM-a, zajednički" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU'er og 160 GB RAM, delt" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU e 160 GB di RAM, condivisi" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "vCPU 80 និង RAM 160 GB ប្រើរួមគ្នា" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU-er og 160 GB RAM, delt" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU i 160 GB RAM, współdzielone" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "80 vCPUs e 160 GB de RAM, compartilhados" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU и 160 ГБ RAM, общие" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU และ RAM 160 GB ใช้ร่วมกัน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU ve 160 GB RAM, paylaşımlı" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU і 160 ГБ RAM, спільні" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "80 vCPUs and 160 GB RAM, shared" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "80 vCPUs und 160 GB RAM, gemeinsam genutzt" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU et 160 Go de RAM partagés" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "80 وحدة معالجة مركزية افتراضية و160 جيجابايت من الذاكرة مشتركة" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU y 160 GB de RAM compartidos" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "共用 80 個虛擬 CPU 與 160 GB 記憶體" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "共享 80 个虚拟 CPU 和 160 GB 内存" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "vCPU 80개와 RAM 160 GB 공유" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "80 vCPU と 160 GB RAM を共有" + } + } + } + }, "machines.new.max.checkout": { "extractionState": "manual", "localizations": { @@ -619972,558 +621722,6 @@ } } }, - "cli.hooks.setup.error.agentRequiresValue": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "--agent requires a value. Usage: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يتطلب --agent قيمة. الاستخدام: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "--agent erfordert einen Wert. Verwendung: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "--agent requiere un valor. Uso: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "--agent nécessite une valeur. Utilisation : cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "--agent には値が必要です。使い方: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "--agent에는 값이 필요합니다. 사용법: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "--agent 需要一个值。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "--agent 需要一個值。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - } - } - }, - "cli.hooks.setup.error.unknownOption": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Unknown option %@. Usage: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "خيار غير معروف %@. الاستخدام: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Unbekannte Option %@. Verwendung: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Opción desconocida %@. Uso: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Option inconnue %@. Utilisation : cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "不明なオプション %@。使い方: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알 수 없는 옵션 %@. 사용법: cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "未知选项 %@。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "未知的選項 %@。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" - } - } - } - }, - "cli.hooks.setup.error.conflictingAgent": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "--agent was given more than once with different values. Specify one agent." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تم تمرير --agent أكثر من مرة بقيم مختلفة. حدد وكيلًا واحدًا." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "--agent wurde mehrmals mit unterschiedlichen Werten angegeben. Gib einen Agenten an." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "--agent se indicó más de una vez con valores distintos. Indica un solo agente." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "--agent a été indiqué plusieurs fois avec des valeurs différentes. Indiquez un seul agent." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "--agent が異なる値で複数回指定されました。エージェントを 1 つだけ指定してください。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "--agent가 서로 다른 값으로 여러 번 지정되었습니다. 에이전트를 하나만 지정하세요." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "--agent 被多次指定且值不同。请只指定一个代理。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "--agent 被多次指定且值不同。請只指定一個代理程式。" - } - } - } - }, - "settings.search.alias.setting.terminal.copy-confirmation": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse تأكيد نسخ حافظة تحديد" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse potvrda kopirano međuspremnik odabir" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse bekræftelse kopieret udklipsholder markering" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse Bestätigung kopiert Zwischenablage Auswahl" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse confirmación copiado portapapeles selección" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse confirmation copié presse-papiers sélection" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse conferma copiato appunti selezione" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 確認 コピー クリップボード 選択" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse បញ្ជាក់ ចម្លង ក្ដារតម្រៀប ជ្រើស" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 확인 복사됨 클립보드 선택" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse bekreftelse kopiert utklippstavle markering" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse potwierdzenie skopiowano schowek zaznaczenie" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse confirmação copiado área de transferência seleção" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse подтверждение скопировано буфер обмена выделение" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse ยืนยัน คัดลอก คลิปบอร์ด เลือก" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse onay kopyalandı pano seçim" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse підтвердження скопійовано буфер обміну виділення" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 确认 已复制 剪贴板 选择" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "terminal.showCopyConfirmation copy confirmation copied clipboard feedback indicator toast popup copy on selection select mouse 確認 已複製 剪貼簿 選取" - } - } - } - }, - "settings.terminal.showCopyConfirmation": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "إظهار تأكيد النسخ" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Prikaži potvrdu kopiranja" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Vis kopieringsbekræftelse" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Kopierbestätigung anzeigen" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Show Copy Confirmation" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Mostrar confirmación de copia" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Afficher la confirmation de copie" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Mostra conferma di copia" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "コピーの確認を表示" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "បង្ហាញការបញ្ជាក់ការចម្លង" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "복사 확인 표시" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Vis kopieringsbekreftelse" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Pokazuj potwierdzenie kopiowania" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Mostrar confirmação de cópia" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Показывать подтверждение копирования" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "แสดงการยืนยันการคัดลอก" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Kopyalama onayını göster" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Показувати підтвердження копіювання" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "显示复制确认" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "顯示複製確認" - } - } - } - }, - "settings.terminal.showCopyConfirmation.subtitle": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "يعرض «تم النسخ إلى الحافظة» لفترة وجيزة أسفل الطرفية عندما يؤدي تحديد النص إلى نسخه." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Kratko prikazuje „Kopirano u međuspremnik“ na dnu terminala kada se odabrani tekst kopira." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Viser kortvarigt „Kopieret til udklipsholder“ nederst i en terminal, når markering af tekst kopierer den." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Zeigt unten im Terminal kurz „In die Zwischenablage kopiert“ an, wenn durch Auswählen von Text kopiert wird." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Briefly shows “Copied to clipboard” at the bottom of a terminal when selecting text copies it." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Muestra brevemente «Copiado al portapapeles» en la parte inferior de una terminal cuando al seleccionar texto se copia." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Affiche brièvement « Copié dans le presse-papiers » en bas d’un terminal lorsque la sélection de texte le copie." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Mostra brevemente «Copiato negli appunti» in fondo a un terminale quando la selezione del testo lo copia." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "テキストを選択してコピーしたときに、ターミナルの下部に「クリップボードにコピーしました」を短く表示します。" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "បង្ហាញ «បានចម្លងទៅក្ដារតម្រៀប» មួយភ្លែតនៅខាងក្រោម terminal នៅពេលការជ្រើសអត្ថបទចម្លងវា។" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "텍스트를 선택해 복사하면 터미널 하단에 “클립보드에 복사됨”을 잠시 표시합니다." - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Viser kort «Kopiert til utklippstavlen» nederst i en terminal når markering av tekst kopierer den." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Na chwilę wyświetla „Skopiowano do schowka” u dołu terminala, gdy zaznaczenie tekstu go kopiuje." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Mostra brevemente “Copiado para a área de transferência” na parte inferior do terminal quando selecionar texto o copia." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Ненадолго показывает «Скопировано в буфер обмена» внизу терминала, когда выделение текста копирует его." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "แสดง “คัดลอกไปยังคลิปบอร์ดแล้ว” ชั่วครู่ที่ด้านล่างของเทอร์มินัลเมื่อการเลือกข้อความคัดลอกข้อความนั้น" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Metin seçimi onu kopyaladığında terminalin altında kısa süreliğine “Panoya kopyalandı” gösterir." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Ненадовго показує «Скопійовано в буфер обміну» внизу термінала, коли виділення тексту копіює його." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "选择文本并复制时,在终端底部短暂显示“已复制到剪贴板”。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "選取文字並複製時,在終端機底部短暫顯示「已複製到剪貼簿」。" - } - } - } - }, "terminal.copyConfirmation.title": { "extractionState": "manual", "localizations": { @@ -620649,1377 +621847,179 @@ } } }, - "cloudVM.error.resourcePool.action": { + "cli.hooks.setup.error.agentRequiresValue": { "extractionState": "manual", "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "Pauzirajte ili izbrišite VM, ili pređite na Max." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Sæt en VM på pause eller slet den, eller opgrader til Max." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Metti in pausa o elimina una VM, oppure passa a Max." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ផ្អាក ឬលុប VM មួយ ឬដំឡើងទៅ Max។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Sett en VM på pause eller slett den, eller oppgrader til Max." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Wstrzymaj lub usuń VM albo przejdź na Max." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Pause ou exclua uma VM, ou faça upgrade para o Max." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Приостановите или удалите VM либо перейдите на Max." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "หยุด VM ชั่วคราวหรือลบ VM หรืออัปเกรดเป็น Max" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bir VM'yi duraklatın veya silin ya da Max'e yükseltin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Призупиніть або видаліть VM чи перейдіть на Max." - } - }, "en": { "stringUnit": { "state": "translated", - "value": "Pause or delete a VM, or upgrade to Max." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Pausiere oder lösche eine VM, oder führe ein Upgrade auf Max durch." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Mettez en pause ou supprimez une VM, ou passez à Max." + "value": "--agent requires a value. Usage: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أوقف جهازًا افتراضيًا مؤقتًا أو احذفه، أو قم بالترقية إلى Max." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Pausa o elimina una VM, o actualiza a Max." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "請暫停或刪除一台虛擬機,或升級至 Max。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "请暂停或删除一台虚拟机,或升级到 Max。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VM을 일시 중지하거나 삭제하거나 Max로 업그레이드하세요." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VM を一時停止するか削除する、または Max にアップグレードしてください。" - } - } - } - }, - "cloudVM.error.resourcePool.maxAction": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "Pauzirajte ili izbrišite VM." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Sæt en VM på pause eller slet den." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Metti in pausa o elimina una VM." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ផ្អាក ឬលុប VM មួយ។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Sett en VM på pause eller slett den." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Wstrzymaj lub usuń VM." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Pause ou exclua uma VM." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Приостановите или удалите VM." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "หยุด VM ชั่วคราวหรือลบ VM" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bir VM'yi duraklatın veya silin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Призупиніть або видаліть VM." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Pause or delete a VM." + "value": "يتطلب --agent قيمة. الاستخدام: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "de": { "stringUnit": { "state": "translated", - "value": "Pausiere oder lösche eine VM." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Mettez en pause ou supprimez une VM." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "أوقف جهازًا افتراضيًا مؤقتًا أو احذفه." + "value": "--agent erfordert einen Wert. Verwendung: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pausa o elimina una VM." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "請暫停或刪除一台虛擬機。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "请暂停或删除一台虚拟机。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VM을 일시 중지하거나 삭제하세요." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VM を一時停止するか削除してください。" - } - } - } - }, - "cloud.machines.pool.usage": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "%1$lld od %2$lld vCPU-a · %3$lld od %4$lld GB RAM-a u upotrebi" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "%1$lld af %2$lld vCPU'er · %3$lld af %4$lld GB RAM i brug" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "%1$lld di %2$lld vCPU · %3$lld di %4$lld GB di RAM in uso" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "កំពុងប្រើ vCPU %1$lld ក្នុងចំណោម %2$lld · RAM %3$lld ក្នុងចំណោម %4$lld GB" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "%1$lld av %2$lld vCPU-er · %3$lld av %4$lld GB RAM i bruk" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "W użyciu: %1$lld z %2$lld vCPU · %3$lld z %4$lld GB RAM" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "%1$lld de %2$lld vCPUs · %3$lld de %4$lld GB de RAM em uso" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Используется %1$lld из %2$lld vCPU · %3$lld из %4$lld ГБ RAM" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ใช้อยู่ %1$lld จาก %2$lld vCPU · RAM %3$lld จาก %4$lld GB" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "%2$lld vCPU'nun %1$lld tanesi · %4$lld GB RAM'in %3$lld GB'ı kullanımda" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Використано %1$lld з %2$lld vCPU · %3$lld з %4$lld ГБ RAM" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld of %2$lld vCPUs · %3$lld of %4$lld GB RAM in use" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%1$lld von %2$lld vCPUs · %3$lld von %4$lld GB RAM belegt" + "value": "--agent requiere un valor. Uso: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$lld vCPU sur %2$lld · %3$lld Go de RAM sur %4$lld utilisés" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "قيد الاستخدام: %1$lld من %2$lld وحدة معالجة مركزية افتراضية · %3$lld من %4$lld جيجابايت من الذاكرة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "%1$lld de %2$lld vCPU · %3$lld de %4$lld GB de RAM en uso" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "已使用 %1$lld / %2$lld 個虛擬 CPU · %3$lld / %4$lld GB 記憶體" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "已使用 %1$lld / %2$lld 个虚拟 CPU · %3$lld / %4$lld GB 内存" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용 중: vCPU %1$lld/%2$lld개 · RAM %3$lld/%4$lld GB" + "value": "--agent nécessite une valeur. Utilisation : cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用中: %1$lld / %2$lld vCPU · %3$lld / %4$lld GB RAM" - } - } - } - }, - "cloud.newMachine.pool.doesNotFit": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "Ova veličina treba %1$lld GB RAM-a, ali je od vašeg skupa od %3$lld GB slobodno samo %2$lld GB. Pauzirajte ili izbrišite VM, ili pređite na Max." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelse kræver %1$lld GB RAM, men kun %2$lld GB af din pulje på %3$lld GB er ledig. Sæt en VM på pause eller slet den, eller opgrader til Max." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Questa dimensione richiede %1$lld GB di RAM, ma del tuo pool da %3$lld GB sono liberi solo %2$lld GB. Metti in pausa o elimina una VM, oppure passa a Max." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទំហំនេះត្រូវការ RAM %1$lld GB ប៉ុន្តែក្នុងបណ្តុំ %3$lld GB របស់អ្នក នៅទំនេរតែ %2$lld GB ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ ឬដំឡើងទៅ Max។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelsen trenger %1$lld GB RAM, men bare %2$lld GB av ressurspoolen din på %3$lld GB er ledig. Sett en VM på pause eller slett den, eller oppgrader til Max." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Ten rozmiar wymaga %1$lld GB RAM, ale z Twojej puli %3$lld GB wolne jest tylko %2$lld GB. Wstrzymaj lub usuń VM albo przejdź na Max." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Este tamanho precisa de %1$lld GB de RAM, mas só %2$lld GB do seu pool de %3$lld GB estão livres. Pause ou exclua uma VM, ou faça upgrade para o Max." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Для этого размера нужно %1$lld ГБ RAM, но в вашем пуле на %3$lld ГБ свободно только %2$lld ГБ. Приостановите или удалите VM либо перейдите на Max." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ขนาดนี้ต้องใช้ RAM %1$lld GB แต่พูล %3$lld GB ของคุณว่างอยู่เพียง %2$lld GB หยุด VM ชั่วคราวหรือลบ VM หรืออัปเกรดเป็น Max" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bu boyut %1$lld GB RAM gerektiriyor, ancak %3$lld GB'lık havuzunuzun yalnızca %2$lld GB'ı boş. Bir VM'yi duraklatın veya silin ya da Max'e yükseltin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Для цього розміру потрібно %1$lld ГБ RAM, але у вашому пулі на %3$lld ГБ вільно лише %2$lld ГБ. Призупиніть або видаліть VM чи перейдіть на Max." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This size needs %1$lld GB RAM, but only %2$lld GB of your %3$lld GB pool is free. Pause or delete a VM, or upgrade to Max." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Größe benötigt %1$lld GB RAM, aber von deinem %3$lld-GB-Pool sind nur %2$lld GB frei. Pausiere oder lösche eine VM, oder führe ein Upgrade auf Max durch." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette taille nécessite %1$lld Go de RAM, mais seuls %2$lld Go de votre réserve de %3$lld Go sont libres. Mettez en pause ou supprimez une VM, ou passez à Max." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يحتاج هذا الحجم إلى %1$lld جيجابايت من الذاكرة، لكن المتاح من مجموعتك البالغة %3$lld جيجابايت هو %2$lld جيجابايت فقط. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه، أو قم بالترقية إلى Max." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Este tamaño necesita %1$lld GB de RAM, pero solo quedan libres %2$lld GB de tu grupo de %3$lld GB. Pausa o elimina una VM, o actualiza a Max." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "此規格需要 %1$lld GB 記憶體,但你的 %3$lld GB 資源池只剩 %2$lld GB 可用。請暫停或刪除一台虛擬機,或升級至 Max。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "此规格需要 %1$lld GB 内存,但你的 %3$lld GB 资源池只剩 %2$lld GB 可用。请暂停或删除一台虚拟机,或升级到 Max。" + "value": "--agent には値が必要です。使い方: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 크기에는 RAM %1$lld GB가 필요하지만 %3$lld GB 풀 중 %2$lld GB만 남아 있습니다. VM을 일시 중지하거나 삭제하거나 Max로 업그레이드하세요." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このサイズには %1$lld GB RAM が必要ですが、%3$lld GB のプールのうち空きは %2$lld GB だけです。VM を一時停止するか削除する、または Max にアップグレードしてください。" - } - } - } - }, - "cloud.newMachine.pool.doesNotFitMax": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "Ova veličina treba %1$lld GB RAM-a, ali je od vašeg skupa od %3$lld GB slobodno samo %2$lld GB. Pauzirajte ili izbrišite VM." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelse kræver %1$lld GB RAM, men kun %2$lld GB af din pulje på %3$lld GB er ledig. Sæt en VM på pause eller slet den." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Questa dimensione richiede %1$lld GB di RAM, ma del tuo pool da %3$lld GB sono liberi solo %2$lld GB. Metti in pausa o elimina una VM." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទំហំនេះត្រូវការ RAM %1$lld GB ប៉ុន្តែក្នុងបណ្តុំ %3$lld GB របស់អ្នក នៅទំនេរតែ %2$lld GB ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelsen trenger %1$lld GB RAM, men bare %2$lld GB av ressurspoolen din på %3$lld GB er ledig. Sett en VM på pause eller slett den." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Ten rozmiar wymaga %1$lld GB RAM, ale z Twojej puli %3$lld GB wolne jest tylko %2$lld GB. Wstrzymaj lub usuń VM." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Este tamanho precisa de %1$lld GB de RAM, mas só %2$lld GB do seu pool de %3$lld GB estão livres. Pause ou exclua uma VM." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Для этого размера нужно %1$lld ГБ RAM, но в вашем пуле на %3$lld ГБ свободно только %2$lld ГБ. Приостановите или удалите VM." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ขนาดนี้ต้องใช้ RAM %1$lld GB แต่พูล %3$lld GB ของคุณว่างอยู่เพียง %2$lld GB หยุด VM ชั่วคราวหรือลบ VM" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bu boyut %1$lld GB RAM gerektiriyor, ancak %3$lld GB'lık havuzunuzun yalnızca %2$lld GB'ı boş. Bir VM'yi duraklatın veya silin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Для цього розміру потрібно %1$lld ГБ RAM, але у вашому пулі на %3$lld ГБ вільно лише %2$lld ГБ. Призупиніть або видаліть VM." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This size needs %1$lld GB RAM, but only %2$lld GB of your %3$lld GB pool is free. Pause or delete a VM." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Größe benötigt %1$lld GB RAM, aber von deinem %3$lld-GB-Pool sind nur %2$lld GB frei. Pausiere oder lösche eine VM." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette taille nécessite %1$lld Go de RAM, mais seuls %2$lld Go de votre réserve de %3$lld Go sont libres. Mettez en pause ou supprimez une VM." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يحتاج هذا الحجم إلى %1$lld جيجابايت من الذاكرة، لكن المتاح من مجموعتك البالغة %3$lld جيجابايت هو %2$lld جيجابايت فقط. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Este tamaño necesita %1$lld GB de RAM, pero solo quedan libres %2$lld GB de tu grupo de %3$lld GB. Pausa o elimina una VM." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "此規格需要 %1$lld GB 記憶體,但你的 %3$lld GB 資源池只剩 %2$lld GB 可用。請暫停或刪除一台虛擬機。" + "value": "--agent에는 값이 필요합니다. 사용법: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此规格需要 %1$lld GB 内存,但你的 %3$lld GB 资源池只剩 %2$lld GB 可用。请暂停或删除一台虚拟机。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 크기에는 RAM %1$lld GB가 필요하지만 %3$lld GB 풀 중 %2$lld GB만 남아 있습니다. VM을 일시 중지하거나 삭제하세요." + "value": "--agent 需要一个值。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このサイズには %1$lld GB RAM が必要ですが、%3$lld GB のプールのうち空きは %2$lld GB だけです。VM を一時停止するか削除してください。" + "value": "--agent 需要一個值。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" } } } }, - "cloud.newMachine.pool.doesNotFitVcpus": { + "cli.hooks.setup.error.unknownOption": { "extractionState": "manual", "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "Ova veličina treba %1$lld vCPU-a, ali je od vaših %3$lld vCPU-a slobodno samo %2$lld. Pauzirajte ili izbrišite VM, ili pređite na Max." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelse kræver %1$lld vCPU'er, men kun %2$lld af dine %3$lld vCPU'er er ledige. Sæt en VM på pause eller slet den, eller opgrader til Max." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Questa dimensione richiede %1$lld vCPU, ma delle tue %3$lld vCPU ne sono libere solo %2$lld. Metti in pausa o elimina una VM, oppure passa a Max." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទំហំនេះត្រូវការ vCPU %1$lld ប៉ុន្តែក្នុងចំណោម vCPU %3$lld របស់អ្នក នៅទំនេរតែ %2$lld ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ ឬដំឡើងទៅ Max។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelsen trenger %1$lld vCPU-er, men bare %2$lld av dine %3$lld vCPU-er er ledige. Sett en VM på pause eller slett den, eller oppgrader til Max." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Ten rozmiar wymaga %1$lld vCPU, ale z Twoich %3$lld vCPU wolne jest tylko %2$lld. Wstrzymaj lub usuń VM albo przejdź na Max." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Este tamanho precisa de %1$lld vCPUs, mas só %2$lld das suas %3$lld vCPUs estão livres. Pause ou exclua uma VM, ou faça upgrade para o Max." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Для этого размера нужно %1$lld vCPU, но из ваших %3$lld vCPU свободно только %2$lld. Приостановите или удалите VM либо перейдите на Max." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ขนาดนี้ต้องใช้ %1$lld vCPU แต่จาก %3$lld vCPU ของคุณว่างอยู่เพียง %2$lld หยุด VM ชั่วคราวหรือลบ VM หรืออัปเกรดเป็น Max" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bu boyut %1$lld vCPU gerektiriyor, ancak %3$lld vCPU'nuzun yalnızca %2$lld tanesi boş. Bir VM'yi duraklatın veya silin ya da Max'e yükseltin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Для цього розміру потрібно %1$lld vCPU, але з ваших %3$lld vCPU вільно лише %2$lld. Призупиніть або видаліть VM чи перейдіть на Max." - } - }, "en": { "stringUnit": { "state": "translated", - "value": "This size needs %1$lld vCPUs, but only %2$lld of your %3$lld vCPUs are free. Pause or delete a VM, or upgrade to Max." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Größe benötigt %1$lld vCPUs, aber von deinen %3$lld vCPUs sind nur %2$lld frei. Pausiere oder lösche eine VM, oder führe ein Upgrade auf Max durch." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette taille nécessite %1$lld vCPU, mais seuls %2$lld de vos %3$lld vCPU sont libres. Mettez en pause ou supprimez une VM, ou passez à Max." + "value": "Unknown option %@. Usage: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يحتاج هذا الحجم إلى %1$lld من وحدات المعالجة المركزية الافتراضية، لكن المتاح منها %2$lld فقط من أصل %3$lld. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه، أو قم بالترقية إلى Max." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Este tamaño necesita %1$lld vCPU, pero solo quedan libres %2$lld de tus %3$lld vCPU. Pausa o elimina una VM, o actualiza a Max." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "此規格需要 %1$lld 個虛擬 CPU,但你的 %3$lld 個虛擬 CPU 中只剩 %2$lld 個可用。請暫停或刪除一台虛擬機,或升級至 Max。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "此规格需要 %1$lld 个虚拟 CPU,但你的 %3$lld 个虚拟 CPU 中只剩 %2$lld 个可用。请暂停或删除一台虚拟机,或升级到 Max。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 크기에는 vCPU %1$lld개가 필요하지만 vCPU %3$lld개 중 %2$lld개만 남아 있습니다. VM을 일시 중지하거나 삭제하거나 Max로 업그레이드하세요." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このサイズには %1$lld vCPU が必要ですが、%3$lld vCPU のうち空きは %2$lld vCPU だけです。VM を一時停止するか削除する、または Max にアップグレードしてください。" - } - } - } - }, - "cloud.newMachine.pool.doesNotFitVcpusMax": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "Ova veličina treba %1$lld vCPU-a, ali je od vaših %3$lld vCPU-a slobodno samo %2$lld. Pauzirajte ili izbrišite VM." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelse kræver %1$lld vCPU'er, men kun %2$lld af dine %3$lld vCPU'er er ledige. Sæt en VM på pause eller slet den." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Questa dimensione richiede %1$lld vCPU, ma delle tue %3$lld vCPU ne sono libere solo %2$lld. Metti in pausa o elimina una VM." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទំហំនេះត្រូវការ vCPU %1$lld ប៉ុន្តែក្នុងចំណោម vCPU %3$lld របស់អ្នក នៅទំនេរតែ %2$lld ប៉ុណ្ណោះ។ ផ្អាក ឬលុប VM មួយ។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Denne størrelsen trenger %1$lld vCPU-er, men bare %2$lld av dine %3$lld vCPU-er er ledige. Sett en VM på pause eller slett den." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Ten rozmiar wymaga %1$lld vCPU, ale z Twoich %3$lld vCPU wolne jest tylko %2$lld. Wstrzymaj lub usuń VM." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Este tamanho precisa de %1$lld vCPUs, mas só %2$lld das suas %3$lld vCPUs estão livres. Pause ou exclua uma VM." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Для этого размера нужно %1$lld vCPU, но из ваших %3$lld vCPU свободно только %2$lld. Приостановите или удалите VM." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ขนาดนี้ต้องใช้ %1$lld vCPU แต่จาก %3$lld vCPU ของคุณว่างอยู่เพียง %2$lld หยุด VM ชั่วคราวหรือลบ VM" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Bu boyut %1$lld vCPU gerektiriyor, ancak %3$lld vCPU'nuzun yalnızca %2$lld tanesi boş. Bir VM'yi duraklatın veya silin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Для цього розміру потрібно %1$lld vCPU, але з ваших %3$lld vCPU вільно лише %2$lld. Призупиніть або видаліть VM." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This size needs %1$lld vCPUs, but only %2$lld of your %3$lld vCPUs are free. Pause or delete a VM." + "value": "خيار غير معروف %@. الاستخدام: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diese Größe benötigt %1$lld vCPUs, aber von deinen %3$lld vCPUs sind nur %2$lld frei. Pausiere oder lösche eine VM." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette taille nécessite %1$lld vCPU, mais seuls %2$lld de vos %3$lld vCPU sont libres. Mettez en pause ou supprimez une VM." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "يحتاج هذا الحجم إلى %1$lld من وحدات المعالجة المركزية الافتراضية، لكن المتاح منها %2$lld فقط من أصل %3$lld. أوقف جهازًا افتراضيًا مؤقتًا أو احذفه." + "value": "Unbekannte Option %@. Verwendung: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "es": { "stringUnit": { "state": "translated", - "value": "Este tamaño necesita %1$lld vCPU, pero solo quedan libres %2$lld de tus %3$lld vCPU. Pausa o elimina una VM." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "此規格需要 %1$lld 個虛擬 CPU,但你的 %3$lld 個虛擬 CPU 中只剩 %2$lld 個可用。請暫停或刪除一台虛擬機。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "此规格需要 %1$lld 个虚拟 CPU,但你的 %3$lld 个虚拟 CPU 中只剩 %2$lld 个可用。请暂停或删除一台虚拟机。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 크기에는 vCPU %1$lld개가 필요하지만 vCPU %3$lld개 중 %2$lld개만 남아 있습니다. VM을 일시 중지하거나 삭제하세요." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このサイズには %1$lld vCPU が必要ですが、%3$lld vCPU のうち空きは %2$lld vCPU だけです。VM を一時停止するか削除してください。" - } - } - } - }, - "pricing.native.compare.resources": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "Resursi Cloud VM-ova" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM-ressourcer" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Risorse delle Cloud VM" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ធនធាន Cloud VM" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM-ressurser" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Zasoby Cloud VM" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Recursos das Cloud VMs" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Ресурсы Cloud VM" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ทรัพยากร Cloud VM" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM kaynakları" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Ресурси Cloud VM" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM resources" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-VM-Ressourcen" + "value": "Opción desconocida %@. Uso: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ressources de VM cloud" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "موارد الجهاز الافتراضي السحابي" + "value": "Option inconnue %@. Utilisation : cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Recursos de VM en la nube" + "value": "不明なオプション %@。使い方: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "雲端虛擬機資源" + "value": "알 수 없는 옵션 %@. 사용법: cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VM 资源" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM 리소스" + "value": "未知选项 %@。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VM のリソース" + "value": "未知的選項 %@。用法:cmux hooks setup [agent] [--agent ] [--yes|-y]" } } } }, - "pricing.native.compare.resources.standard": { + "cli.hooks.setup.error.conflictingAgent": { "extractionState": "manual", "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU-a i 40 GB RAM-a, zajednički" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU'er og 40 GB RAM, delt" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU e 40 GB di RAM, condivisi" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "vCPU 20 និង RAM 40 GB ប្រើរួមគ្នា" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU-er og 40 GB RAM, delt" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU i 40 GB RAM, współdzielone" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "20 vCPUs e 40 GB de RAM, compartilhados" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU и 40 ГБ RAM, общие" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU และ RAM 40 GB ใช้ร่วมกัน" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU ve 40 GB RAM, paylaşımlı" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU і 40 ГБ RAM, спільні" - } - }, "en": { "stringUnit": { "state": "translated", - "value": "20 vCPUs and 40 GB RAM, shared" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "20 vCPUs und 40 GB RAM, gemeinsam genutzt" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU et 40 Go de RAM partagés" + "value": "--agent was given more than once with different values. Specify one agent." } }, "ar": { "stringUnit": { "state": "translated", - "value": "20 وحدة معالجة مركزية افتراضية و40 جيجابايت من الذاكرة مشتركة" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU y 40 GB de RAM compartidos" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "共用 20 個虛擬 CPU 與 40 GB 記憶體" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "共享 20 个虚拟 CPU 和 40 GB 内存" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "vCPU 20개와 RAM 40 GB 공유" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU と 40 GB RAM を共有" - } - } - } - }, - "pricing.native.compare.resources.team": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU-a i 40 GB RAM-a po plaćenom mjestu, zajednički za cijeli tim" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU'er og 40 GB RAM pr. betalt plads, delt på tværs af teamet" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU e 40 GB di RAM per postazione a pagamento, condivisi da tutto il team" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "vCPU 20 និង RAM 40 GB ក្នុងមួយកៅអីបង់ប្រាក់ ដែលក្រុមទាំងមូលប្រើរួមគ្នា" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU-er og 40 GB RAM per betalt plass, delt på tvers av teamet" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU i 40 GB RAM na płatne miejsce, współdzielone w całym zespole" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "20 vCPUs e 40 GB de RAM por assento pago, compartilhados por toda a equipe" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU и 40 ГБ RAM на оплаченное место, общие для всей команды" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU และ RAM 40 GB ต่อที่นั่งแบบชำระเงิน ใช้ร่วมกันทั้งทีม" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Ücretli koltuk başına 20 vCPU ve 40 GB RAM, tüm ekipçe paylaşılır" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU і 40 ГБ RAM на оплачене місце, спільні для всієї команди" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "20 vCPUs and 40 GB RAM per paid seat, shared across the team" + "value": "تم تمرير --agent أكثر من مرة بقيم مختلفة. حدد وكيلًا واحدًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "20 vCPUs und 40 GB RAM pro bezahltem Platz, im ganzen Team gemeinsam genutzt" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "20 vCPU et 40 Go de RAM par siège payant, partagés dans toute l’équipe" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "20 وحدة معالجة مركزية افتراضية و40 جيجابايت من الذاكرة لكل مقعد مدفوع، مشتركة على مستوى الفريق" + "value": "--agent wurde mehrmals mit unterschiedlichen Werten angegeben. Gib einen Agenten an." } }, "es": { "stringUnit": { "state": "translated", - "value": "20 vCPU y 40 GB de RAM por puesto de pago, compartidos en todo el equipo" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "每個付費席位 20 個虛擬 CPU 與 40 GB 記憶體,由整個團隊共用" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "每个付费席位 20 个虚拟 CPU 和 40 GB 内存,由整个团队共享" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "유료 시트당 vCPU 20개와 RAM 40 GB, 팀 전체가 공유" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "有料シートごとに 20 vCPU と 40 GB RAM(チーム全体で共有)" - } - } - } - }, - "pricing.native.compare.resources.max": { - "extractionState": "manual", - "localizations": { - "bs": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU-a i 160 GB RAM-a, zajednički" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU'er og 160 GB RAM, delt" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU e 160 GB di RAM, condivisi" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "vCPU 80 និង RAM 160 GB ប្រើរួមគ្នា" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU-er og 160 GB RAM, delt" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU i 160 GB RAM, współdzielone" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "80 vCPUs e 160 GB de RAM, compartilhados" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU и 160 ГБ RAM, общие" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU และ RAM 160 GB ใช้ร่วมกัน" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU ve 160 GB RAM, paylaşımlı" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "80 vCPU і 160 ГБ RAM, спільні" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "80 vCPUs and 160 GB RAM, shared" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "80 vCPUs und 160 GB RAM, gemeinsam genutzt" + "value": "--agent se indicó más de una vez con valores distintos. Indica un solo agente." } }, "fr": { "stringUnit": { "state": "translated", - "value": "80 vCPU et 160 Go de RAM partagés" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "80 وحدة معالجة مركزية افتراضية و160 جيجابايت من الذاكرة مشتركة" + "value": "--agent a été indiqué plusieurs fois avec des valeurs différentes. Indiquez un seul agent." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "80 vCPU y 160 GB de RAM compartidos" + "value": "--agent が異なる値で複数回指定されました。エージェントを 1 つだけ指定してください。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "共用 80 個虛擬 CPU 與 160 GB 記憶體" + "value": "--agent가 서로 다른 값으로 여러 번 지정되었습니다. 에이전트를 하나만 지정하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "共享 80 个虚拟 CPU 和 160 GB 内存" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "vCPU 80개와 RAM 160 GB 공유" + "value": "--agent 被多次指定且值不同。请只指定一个代理。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "80 vCPU と 160 GB RAM を共有" + "value": "--agent 被多次指定且值不同。請只指定一個代理程式。" } } } From cd15bcc8b21295d7d78e4d511339ed169dfbb505 Mon Sep 17 00:00:00 2001 From: ejc3 Date: Mon, 5 Oct 2026 21:13:51 -0700 Subject: [PATCH 24/26] Keep the string catalog as main's text plus this change's entries --- Resources/Localizable.xcstrings | 690 ++++++++++++++++---------------- 1 file changed, 345 insertions(+), 345 deletions(-) diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 84cf2b210677..99134a81f925 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -622951,1439 +622951,1439 @@ } } }, - "cli.browser.help.replDescription": { + "settings.browser.showLinkHoverURL": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Run Playwright-style JavaScript against this workspace's browser panes; see `browser repl guide`" + "value": "Show Link URLs on Hover" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تشغيل JavaScript بأسلوب Playwright على أجزاء المتصفح في مساحة العمل هذه؛ راجع `browser repl guide`" + "value": "إظهار عنوان الرابط عند التمرير فوقه" } }, "de": { "stringUnit": { "state": "translated", - "value": "Playwright-artiges JavaScript für die Browser-Bereiche dieses Arbeitsbereichs ausführen; siehe `browser repl guide`" + "value": "Link-URLs beim Überfahren anzeigen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ejecuta JavaScript al estilo de Playwright en los paneles de navegador de este espacio de trabajo; consulta `browser repl guide`" + "value": "Mostrar la URL de los enlaces al pasar el puntero" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Exécuter du JavaScript de style Playwright sur les volets de navigateur de cet espace de travail ; voir `browser repl guide`" + "value": "Afficher l’URL des liens au survol" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このワークスペースのブラウザペインに対して Playwright 形式の JavaScript を実行します。`browser repl guide` を参照してください" + "value": "リンクにポインタを置いたときに URL を表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 워크스페이스의 브라우저 패널에서 Playwright 스타일 JavaScript를 실행합니다. `browser repl guide`를 참고하세요" + "value": "링크에 포인터를 올리면 URL 표시" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "对此工作区的浏览器窗格运行 Playwright 风格的 JavaScript;请参阅 `browser repl guide`" + "value": "悬停时显示链接网址" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "對此工作區的瀏覽器窗格執行 Playwright 風格的 JavaScript;請參閱 `browser repl guide`" + "value": "滑鼠懸停時顯示連結網址" } - } - } - }, - "cli.browser.help.replMCPDescription": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Serve the REPL as an MCP server on stdio (tools: eval, snapshot, screenshot, tabs, reset; its own session unless --session names one)" + "value": "Prikaži URL linka pri prelasku pokazivačem" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "تشغيل REPL كخادم MCP عبر stdio (الأدوات: eval وsnapshot وscreenshot وtabs وreset؛ جلسة خاصة به ما لم يُحدِّد --session جلسة)" + "value": "Vis linkets URL, når markøren holdes over" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Den REPL als MCP-Server über stdio bereitstellen (Werkzeuge: eval, snapshot, screenshot, tabs, reset; eigene Sitzung, sofern --session keine benennt)" + "value": "Mostra l’URL dei link al passaggio del puntatore" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Sirve el REPL como servidor MCP por stdio (herramientas: eval, snapshot, screenshot, tabs, reset; una sesión propia salvo que --session indique una)" + "value": "បង្ហាញ URL របស់តំណនៅពេលដាក់ទស្សន៍ទ្រនិចលើ" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Exposer le REPL comme serveur MCP sur stdio (outils : eval, snapshot, screenshot, tabs, reset ; sa propre session sauf si --session en nomme une)" + "value": "Vis lenkens URL når pekeren holdes over" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "REPL を stdio 上の MCP サーバーとして提供します(ツール: eval、snapshot、screenshot、tabs、reset。--session で指定しない限りサーバー専用のセッション)" + "value": "Pokazuj adres URL linku po najechaniu" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "REPL을 stdio의 MCP 서버로 제공합니다(도구: eval, snapshot, screenshot, tabs, reset, --session으로 지정하지 않으면 서버 전용 세션)" + "value": "Mostrar URL do link ao passar o cursor" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "将 REPL 作为 stdio 上的 MCP 服务器提供(工具:eval、snapshot、screenshot、tabs、reset;未用 --session 指定时使用专属会话)" + "value": "Показывать URL ссылки при наведении" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "將 REPL 作為 stdio 上的 MCP 伺服器提供(工具:eval、snapshot、screenshot、tabs、reset;未用 --session 指定時使用專屬工作階段)" + "value": "แสดง URL ของลิงก์เมื่อวางเมาส์เหนือลิงก์" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Üzerine gelindiğinde bağlantı URL’sini göster" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Показувати URL посилання при наведенні" } } } }, - "cli.browser.repl.error.inputEncoding": { + "settings.browser.showLinkHoverURL.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "REPL input is not valid UTF-8" + "value": "Shows a link's destination at the bottom of a browser pane while the pointer is over it or it has keyboard focus." } }, "ar": { "stringUnit": { "state": "translated", - "value": "مدخلات REPL ليست UTF-8 صالحة" + "value": "يعرض وجهة الرابط أسفل لوحة المتصفح عندما يكون المؤشر فوقه أو عندما يكون التركيز عليه من لوحة المفاتيح." } }, "de": { "stringUnit": { "state": "translated", - "value": "Die REPL-Eingabe ist kein gültiges UTF-8" + "value": "Zeigt das Ziel eines Links unten im Browserbereich an, solange sich der Zeiger darüber befindet oder der Link den Tastaturfokus hat." } }, "es": { "stringUnit": { "state": "translated", - "value": "La entrada del REPL no es UTF-8 válido" + "value": "Muestra el destino de un enlace en la parte inferior del panel del navegador mientras el puntero está sobre él o cuando el enlace recibe el foco del teclado." } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’entrée du REPL n’est pas de l’UTF-8 valide" + "value": "Affiche la destination d’un lien en bas du panneau du navigateur lorsque le pointeur le survole ou que le lien a le focus clavier." } }, "ja": { "stringUnit": { "state": "translated", - "value": "REPL の入力が有効な UTF-8 ではありません" + "value": "ポインタがリンク上にある間、またはリンクにキーボードフォーカスがある間、ブラウザペインの下部にリンク先を表示します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "REPL 입력이 올바른 UTF-8이 아닙니다" + "value": "포인터가 링크 위에 있거나 링크에 키보드 포커스가 있는 동안 브라우저 패널 하단에 링크의 대상 주소를 표시합니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "REPL 输入不是有效的 UTF-8" + "value": "指针停留在链接上或链接获得键盘焦点时,在浏览器面板底部显示链接的目标地址。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "REPL 輸入不是有效的 UTF-8" + "value": "指標停留在連結上或連結取得鍵盤焦點時,在瀏覽器面板底部顯示連結的目的地。" } - } - } - }, - "cli.browser.repl.error.inputTooLarge": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "REPL input is too large" + "value": "Prikazuje odredište linka na dnu panela preglednika dok je pokazivač iznad njega ili dok link ima fokus tastature." } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "مدخلات REPL كبيرة جدًا" + "value": "Viser linkets destination nederst i browserpanelet, mens markøren er over det, eller mens linket har tastaturfokus." } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Die REPL-Eingabe ist zu groß" + "value": "Mostra la destinazione di un link nella parte inferiore del pannello del browser mentre il puntatore è sopra di esso o quando il link ha il focus della tastiera." } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "La entrada del REPL es demasiado grande" + "value": "បង្ហាញទិសដៅរបស់តំណនៅផ្នែកខាងក្រោមនៃផ្ទាំងកម្មវិធីរុករក ខណៈពេលដែលទស្សន៍ទ្រនិចស្ថិតនៅលើវា ឬនៅពេលតំណទទួលបានការផ្ដោតពីក្ដារចុច។" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "L’entrée du REPL est trop volumineuse" + "value": "Viser lenkens mål nederst i nettleserpanelet mens pekeren er over den, eller mens lenken har tastaturfokus." } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "REPL の入力が大きすぎます" + "value": "Pokazuje adres docelowy linku u dołu panelu przeglądarki, gdy wskaźnik znajduje się nad nim lub gdy link ma fokus klawiatury." } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "REPL 입력이 너무 큽니다" + "value": "Mostra o destino de um link na parte inferior do painel do navegador enquanto o cursor está sobre ele ou quando o link tem o foco do teclado." } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "REPL 输入过大" + "value": "Показывает адрес ссылки в нижней части панели браузера, пока указатель находится над ней или пока ссылка находится в фокусе клавиатуры." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "REPL 輸入過大" + "value": "แสดงปลายทางของลิงก์ที่ด้านล่างของแผงเบราว์เซอร์ขณะที่ตัวชี้อยู่เหนือลิงก์หรือเมื่อลิงก์ได้รับโฟกัสจากแป้นพิมพ์" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "İmleç bir bağlantının üzerindeyken veya bağlantı klavye odağındayken bağlantının hedefini tarayıcı panelinin altında gösterir." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Показує адресу посилання в нижній частині панелі браузера, поки вказівник знаходиться над ним або поки посилання має фокус клавіатури." } } } }, - "cli.browser.repl.error.sessionRequired": { + "settings.search.alias.setting.browser.link-hover-url": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A session name is required" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اسم الجلسة مطلوب" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview رابط تمرير وجهة عنوان شريط الحالة معاينة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Sitzungsname ist erforderlich" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview link überfahren ziel adresse statusleiste vorschau" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se requiere un nombre de sesión" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview enlace pasar puntero destino dirección barra de estado vista previa" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un nom de session est requis" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview lien survol destination adresse barre d’état aperçu" } }, "ja": { "stringUnit": { "state": "translated", - "value": "セッション名が必要です" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview リンク ホバー URL リンク先 ステータスバー プレビュー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "세션 이름이 필요합니다" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview 링크 호버 주소 대상 상태 표시줄 미리보기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "需要会话名称" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview 链接 悬停 网址 目标 状态栏 预览" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "需要工作階段名稱" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview 連結 懸停 網址 目的地 狀態列 預覽" } - } - } - }, - "cli.browser.repl.error.timeout": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "--timeout must be a positive number of milliseconds" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview link prelazak pokazivačem odredište adresa statusna traka pregled" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "يجب أن تكون قيمة --timeout عددًا موجبًا من أجزاء الثانية" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview link markør over destination adresse statuslinje forhåndsvisning" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "--timeout muss eine positive Anzahl von Millisekunden sein" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview link passaggio puntatore destinazione indirizzo barra di stato anteprima" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "--timeout debe ser un número positivo de milisegundos" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview តំណ ទស្សន៍ទ្រនិច ទិសដៅ អាសយដ្ឋាន របារស្ថានភាព មើលជាមុន" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "--timeout doit être un nombre positif de millisecondes" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview lenke peker over mål adresse statuslinje forhåndsvisning" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "--timeout には正のミリ秒数を指定してください" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview link najechanie adres docelowy pasek stanu podgląd" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "--timeout은 양수 밀리초 값이어야 합니다" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview link passar cursor destino endereço barra de status pré-visualização" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "--timeout 必须是正数的毫秒数" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview ссылка наведение адрес назначение строка состояния предпросмотр" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "--timeout 必須是正數的毫秒數" + "value": "browser.showLinkHoverURL link hover url destination address status bar preview ลิงก์ วางเมาส์ ปลายทาง ที่อยู่ แถบสถานะ ดูตัวอย่าง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "browser.showLinkHoverURL link hover url destination address status bar preview bağlantı üzerine gelme hedef adres durum çubuğu önizleme" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "browser.showLinkHoverURL link hover url destination address status bar preview посилання наведення адреса призначення рядок стану попередній перегляд" } } } }, - "cli.browser.repl.error.codeRequired": { + "cli.browser.help.replDescription": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No code to evaluate" + "value": "Run Playwright-style JavaScript against this workspace's browser panes; see `browser repl guide`" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد شيفرة لتقييمها" + "value": "تشغيل JavaScript بأسلوب Playwright على أجزاء المتصفح في مساحة العمل هذه؛ راجع `browser repl guide`" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Code zum Auswerten" + "value": "Playwright-artiges JavaScript für die Browser-Bereiche dieses Arbeitsbereichs ausführen; siehe `browser repl guide`" } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay código para evaluar" + "value": "Ejecuta JavaScript al estilo de Playwright en los paneles de navegador de este espacio de trabajo; consulta `browser repl guide`" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucun code à évaluer" + "value": "Exécuter du JavaScript de style Playwright sur les volets de navigateur de cet espace de travail ; voir `browser repl guide`" } }, "ja": { "stringUnit": { "state": "translated", - "value": "評価するコードがありません" + "value": "このワークスペースのブラウザペインに対して Playwright 形式の JavaScript を実行します。`browser repl guide` を参照してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "평가할 코드가 없습니다" + "value": "이 워크스페이스의 브라우저 패널에서 Playwright 스타일 JavaScript를 실행합니다. `browser repl guide`를 참고하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有要求值的代码" + "value": "对此工作区的浏览器窗格运行 Playwright 风格的 JavaScript;请参阅 `browser repl guide`" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有要評估的程式碼" + "value": "對此工作區的瀏覽器窗格執行 Playwright 風格的 JavaScript;請參閱 `browser repl guide`" } } } }, - "cli.browser.repl.error.workspace": { + "cli.browser.help.replMCPDescription": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No workspace to bind the REPL session to" + "value": "Serve the REPL as an MCP server on stdio (tools: eval, snapshot, screenshot, tabs, reset; its own session unless --session names one)" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد مساحة عمل لربط جلسة REPL بها" + "value": "تشغيل REPL كخادم MCP عبر stdio (الأدوات: eval وsnapshot وscreenshot وtabs وreset؛ جلسة خاصة به ما لم يُحدِّد --session جلسة)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Arbeitsbereich, an den die REPL-Sitzung gebunden werden kann" + "value": "Den REPL als MCP-Server über stdio bereitstellen (Werkzeuge: eval, snapshot, screenshot, tabs, reset; eigene Sitzung, sofern --session keine benennt)" } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay ningún espacio de trabajo al que vincular la sesión REPL" + "value": "Sirve el REPL como servidor MCP por stdio (herramientas: eval, snapshot, screenshot, tabs, reset; una sesión propia salvo que --session indique una)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucun espace de travail auquel lier la session REPL" + "value": "Exposer le REPL comme serveur MCP sur stdio (outils : eval, snapshot, screenshot, tabs, reset ; sa propre session sauf si --session en nomme une)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "REPL セッションを関連付けるワークスペースがありません" + "value": "REPL を stdio 上の MCP サーバーとして提供します(ツール: eval、snapshot、screenshot、tabs、reset。--session で指定しない限りサーバー専用のセッション)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "REPL 세션을 연결할 워크스페이스가 없습니다" + "value": "REPL을 stdio의 MCP 서버로 제공합니다(도구: eval, snapshot, screenshot, tabs, reset, --session으로 지정하지 않으면 서버 전용 세션)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有可绑定 REPL 会话的工作区" + "value": "将 REPL 作为 stdio 上的 MCP 服务器提供(工具:eval、snapshot、screenshot、tabs、reset;未用 --session 指定时使用专属会话)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有可綁定 REPL 工作階段的工作區" + "value": "將 REPL 作為 stdio 上的 MCP 伺服器提供(工具:eval、snapshot、screenshot、tabs、reset;未用 --session 指定時使用專屬工作階段)" } } } }, - "cli.browser.repl.error.unknownOption": { + "cli.browser.repl.error.inputEncoding": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "browser repl does not support this option" + "value": "REPL input is not valid UTF-8" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يدعم browser repl هذا الخيار" + "value": "مدخلات REPL ليست UTF-8 صالحة" } }, "de": { "stringUnit": { "state": "translated", - "value": "browser repl unterstützt diese Option nicht" + "value": "Die REPL-Eingabe ist kein gültiges UTF-8" } }, "es": { "stringUnit": { "state": "translated", - "value": "browser repl no admite esta opción" + "value": "La entrada del REPL no es UTF-8 válido" } }, "fr": { "stringUnit": { "state": "translated", - "value": "browser repl ne prend pas en charge cette option" + "value": "L’entrée du REPL n’est pas de l’UTF-8 valide" } }, "ja": { "stringUnit": { "state": "translated", - "value": "browser repl はこのオプションに対応していません" + "value": "REPL の入力が有効な UTF-8 ではありません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "browser repl은 이 옵션을 지원하지 않습니다" + "value": "REPL 입력이 올바른 UTF-8이 아닙니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "browser repl 不支持此选项" + "value": "REPL 输入不是有效的 UTF-8" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "browser repl 不支援此選項" + "value": "REPL 輸入不是有效的 UTF-8" } } } }, - "cli.browser.repl.error.workspaceNotFound": { + "cli.browser.repl.error.inputTooLarge": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Workspace not found" + "value": "REPL input is too large" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم يتم العثور على مساحة العمل" + "value": "مدخلات REPL كبيرة جدًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich nicht gefunden" + "value": "Die REPL-Eingabe ist zu groß" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se encontró el espacio de trabajo" + "value": "La entrada del REPL es demasiado grande" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail introuvable" + "value": "L’entrée du REPL est trop volumineuse" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースが見つかりません" + "value": "REPL の入力が大きすぎます" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스를 찾을 수 없습니다" + "value": "REPL 입력이 너무 큽니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未找到工作区" + "value": "REPL 输入过大" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "找不到工作區" + "value": "REPL 輸入過大" } } } }, - "browser.repl.sessionTabTitle": { + "cli.browser.repl.error.sessionRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "A session name is required" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "اسم الجلسة مطلوب" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Ein Sitzungsname ist erforderlich" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Se requiere un nombre de sesión" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Un nom de session est requis" } }, "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": "需要工作階段名稱" } } } }, - "cli.browser.repl.error.maxOutput": { + "cli.browser.repl.error.timeout": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "--max-output must be a number of characters, or 0 for no limit" + "value": "--timeout must be a positive number of milliseconds" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن تكون قيمة --max-output عددًا من الأحرف، أو 0 لعدم وجود حد" + "value": "يجب أن تكون قيمة --timeout عددًا موجبًا من أجزاء الثانية" } }, "de": { "stringUnit": { "state": "translated", - "value": "--max-output muss eine Anzahl von Zeichen sein, oder 0 für keine Begrenzung" + "value": "--timeout muss eine positive Anzahl von Millisekunden sein" } }, "es": { "stringUnit": { "state": "translated", - "value": "--max-output debe ser un número de caracteres, o 0 para no tener límite" + "value": "--timeout debe ser un número positivo de milisegundos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "--max-output doit être un nombre de caractères, ou 0 pour aucune limite" + "value": "--timeout doit être un nombre positif de millisecondes" } }, "ja": { "stringUnit": { "state": "translated", - "value": "--max-output には文字数を指定してください(0 で無制限)" + "value": "--timeout には正のミリ秒数を指定してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "--max-output은 문자 수이거나, 제한이 없으면 0이어야 합니다" + "value": "--timeout은 양수 밀리초 값이어야 합니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "--max-output 必须是字符数,或 0 表示不设限制" + "value": "--timeout 必须是正数的毫秒数" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "--max-output 必須是字元數,或 0 表示不設限制" + "value": "--timeout 必須是正數的毫秒數" } } } }, - "browser.repl.auth.cancel": { + "cli.browser.repl.error.codeRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "No code to evaluate" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "لا توجد شيفرة لتقييمها" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Kein Code zum Auswerten" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "No hay código para evaluar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Aucun code à évaluer" } }, "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.repl.auth.fill": { + "cli.browser.repl.error.workspace": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fill" + "value": "No workspace to bind the REPL session to" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعبئة" + "value": "لا توجد مساحة عمل لربط جلسة REPL بها" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ausfüllen" + "value": "Kein Arbeitsbereich, an den die REPL-Sitzung gebunden werden kann" } }, "es": { "stringUnit": { "state": "translated", - "value": "Rellenar" + "value": "No hay ningún espacio de trabajo al que vincular la sesión REPL" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Remplir" + "value": "Aucun espace de travail auquel lier la session REPL" } }, "ja": { "stringUnit": { "state": "translated", - "value": "入力" + "value": "REPL セッションを関連付けるワークスペースがありません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "채우기" + "value": "REPL 세션을 연결할 워크스페이스가 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "填入" + "value": "没有可绑定 REPL 会话的工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "填入" + "value": "沒有可綁定 REPL 工作階段的工作區" } } } }, - "browser.repl.auth.embedded": { + "cli.browser.repl.error.unknownOption": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This form is in a frame from %1$@, inside a page from %2$@." + "value": "browser repl does not support this option" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هذا النموذج داخل إطار من %1$@، ضمن صفحة من %2$@." + "value": "لا يدعم browser repl هذا الخيار" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Formular ist in einem Frame von %1$@, innerhalb einer Seite von %2$@." + "value": "browser repl unterstützt diese Option nicht" } }, "es": { "stringUnit": { "state": "translated", - "value": "Este formulario está en un marco de %1$@, dentro de una página de %2$@." + "value": "browser repl no admite esta opción" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce formulaire se trouve dans un cadre de %1$@, à l’intérieur d’une page de %2$@." + "value": "browser repl ne prend pas en charge cette option" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このフォームは %2$@ のページ内にある %1$@ のフレームにあります。" + "value": "browser repl はこのオプションに対応していません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 양식은 %2$@ 페이지 안에 있는 %1$@ 프레임에 있습니다." + "value": "browser repl은 이 옵션을 지원하지 않습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此表单位于来自 %2$@ 的网页中、来自 %1$@ 的框架内。" + "value": "browser repl 不支持此选项" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此表單位於來自 %2$@ 的網頁中、來自 %1$@ 的框架內。" + "value": "browser repl 不支援此選項" } } } }, - "browser.repl.auth.notice": { + "cli.browser.repl.error.workspaceNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "An agent asked cmux to fill this sign-in form. The agent does not receive what you type, but scripts on the page, and code the agent runs in the page, can read the filled fields." + "value": "Workspace not found" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طلب وكيل من cmux تعبئة نموذج تسجيل الدخول هذا. لا يتلقى الوكيل ما تكتبه، لكن البرامج النصية في الصفحة، والتعليمات البرمجية التي يشغلها الوكيل في الصفحة، يمكنها قراءة الحقول المعبأة." + "value": "لم يتم العثور على مساحة العمل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Agent hat cmux gebeten, dieses Anmeldeformular auszufüllen. Der Agent erhält nicht, was du eingibst, aber Skripte der Seite und Code, den der Agent in der Seite ausführt, können die ausgefüllten Felder lesen." + "value": "Arbeitsbereich nicht gefunden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Un agente pidió a cmux que rellene este formulario de inicio de sesión. El agente no recibe lo que escribes, pero los scripts de la página y el código que el agente ejecuta en la página pueden leer los campos rellenados." + "value": "No se encontró el espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un agent a demandé à cmux de remplir ce formulaire de connexion. L’agent ne reçoit pas ce que vous saisissez, mais les scripts de la page, et le code que l’agent exécute dans la page, peuvent lire les champs remplis." + "value": "Espace de travail introuvable" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントが cmux にこのサインインフォームへの入力を依頼しました。入力した内容はエージェントには送られませんが、ページのスクリプトや、エージェントがページ内で実行するコードは入力済みのフィールドを読み取れます。" + "value": "ワークスペースが見つかりません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트가 cmux에 이 로그인 양식을 채우도록 요청했습니다. 에이전트는 입력한 내용을 받지 않지만, 페이지의 스크립트와 에이전트가 페이지에서 실행하는 코드는 채워진 필드를 읽을 수 있습니다." + "value": "워크스페이스를 찾을 수 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "有智能体请求 cmux 填写此登录表单。智能体不会收到你输入的内容,但网页上的脚本以及智能体在网页中运行的代码可以读取已填写的字段。" + "value": "未找到工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "有代理程式要求 cmux 填寫此登入表單。代理程式不會收到你輸入的內容,但網頁上的指令碼,以及代理程式在網頁中執行的程式碼,可以讀取已填寫的欄位。" + "value": "找不到工作區" } } } }, - "browser.repl.auth.requester": { + "browser.repl.sessionTabTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Asked by an agent working in the tab “%1$@” of the workspace “%2$@”." + "value": "%1$@ · %2$@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طلبه وكيل يعمل في علامة التبويب ”%1$@“ في مساحة العمل ”%2$@“." + "value": "%1$@ · %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Angefragt von einem Agenten im Tab „%1$@“ des Arbeitsbereichs „%2$@“." + "value": "%1$@ · %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Lo pide un agente que trabaja en la pestaña «%1$@» del espacio de trabajo «%2$@»." + "value": "%1$@ · %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Demandé par un agent qui travaille dans l’onglet « %1$@ » de l’espace de travail « %2$@ »." + "value": "%1$@ · %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース「%2$@」のタブ「%1$@」で作業中のエージェントからの要求です。" + "value": "%1$@ · %2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 “%2$@”의 탭 “%1$@”에서 작업 중인 에이전트가 요청했습니다." + "value": "%1$@ · %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "由在工作区“%2$@”的标签页“%1$@”中工作的代理请求。" + "value": "%1$@ · %2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "由在工作區「%2$@」的分頁「%1$@」中工作的代理請求。" + "value": "%1$@ · %2$@" } } } }, - "browser.repl.auth.title": { + "cli.browser.repl.error.maxOutput": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign in to %@" + "value": "--max-output must be a number of characters, or 0 for no limit" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسجيل الدخول إلى %@" + "value": "يجب أن تكون قيمة --max-output عددًا من الأحرف، أو 0 لعدم وجود حد" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bei %@ anmelden" + "value": "--max-output muss eine Anzahl von Zeichen sein, oder 0 für keine Begrenzung" } }, "es": { "stringUnit": { "state": "translated", - "value": "Iniciar sesión en %@" + "value": "--max-output debe ser un número de caracteres, o 0 para no tener límite" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Se connecter à %@" + "value": "--max-output doit être un nombre de caractères, ou 0 pour aucune limite" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ にサインイン" + "value": "--max-output には文字数を指定してください(0 で無制限)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@에 로그인" + "value": "--max-output은 문자 수이거나, 제한이 없으면 0이어야 합니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "登录 %@" + "value": "--max-output 必须是字符数,或 0 表示不设限制" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "登入 %@" + "value": "--max-output 必須是字元數,或 0 表示不設限制" } } } }, - "settings.browser.showLinkHoverURL": { + "browser.repl.auth.cancel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Link URLs on Hover" + "value": "Cancel" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار عنوان الرابط عند التمرير فوقه" + "value": "إلغاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Link-URLs beim Überfahren anzeigen" + "value": "Abbrechen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar la URL de los enlaces al pasar el puntero" + "value": "Cancelar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher l’URL des liens au survol" + "value": "Annuler" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リンクにポインタを置いたときに URL を表示" + "value": "キャンセル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "링크에 포인터를 올리면 URL 표시" + "value": "취소" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "悬停时显示链接网址" + "value": "取消" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "滑鼠懸停時顯示連結網址" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Prikaži URL linka pri prelasku pokazivačem" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Vis linkets URL, når markøren holdes over" + "value": "取消" } - }, - "it": { + } + } + }, + "browser.repl.auth.fill": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Mostra l’URL dei link al passaggio del puntatore" + "value": "Fill" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "បង្ហាញ URL របស់តំណនៅពេលដាក់ទស្សន៍ទ្រនិចលើ" + "value": "تعبئة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Vis lenkens URL når pekeren holdes over" + "value": "Ausfüllen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Pokazuj adres URL linku po najechaniu" + "value": "Rellenar" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mostrar URL do link ao passar o cursor" + "value": "Remplir" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Показывать URL ссылки при наведении" + "value": "入力" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "แสดง URL ของลิงก์เมื่อวางเมาส์เหนือลิงก์" + "value": "채우기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Üzerine gelindiğinde bağlantı URL’sini göster" + "value": "填入" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Показувати URL посилання при наведенні" + "value": "填入" } } } }, - "settings.browser.showLinkHoverURL.subtitle": { + "browser.repl.auth.embedded": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows a link's destination at the bottom of a browser pane while the pointer is over it or it has keyboard focus." + "value": "This form is in a frame from %1$@, inside a page from %2$@." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يعرض وجهة الرابط أسفل لوحة المتصفح عندما يكون المؤشر فوقه أو عندما يكون التركيز عليه من لوحة المفاتيح." + "value": "هذا النموذج داخل إطار من %1$@، ضمن صفحة من %2$@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeigt das Ziel eines Links unten im Browserbereich an, solange sich der Zeiger darüber befindet oder der Link den Tastaturfokus hat." + "value": "Dieses Formular ist in einem Frame von %1$@, innerhalb einer Seite von %2$@." } }, "es": { "stringUnit": { "state": "translated", - "value": "Muestra el destino de un enlace en la parte inferior del panel del navegador mientras el puntero está sobre él o cuando el enlace recibe el foco del teclado." + "value": "Este formulario está en un marco de %1$@, dentro de una página de %2$@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Affiche la destination d’un lien en bas du panneau du navigateur lorsque le pointeur le survole ou que le lien a le focus clavier." + "value": "Ce formulaire se trouve dans un cadre de %1$@, à l’intérieur d’une page de %2$@." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ポインタがリンク上にある間、またはリンクにキーボードフォーカスがある間、ブラウザペインの下部にリンク先を表示します。" + "value": "このフォームは %2$@ のページ内にある %1$@ のフレームにあります。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포인터가 링크 위에 있거나 링크에 키보드 포커스가 있는 동안 브라우저 패널 하단에 링크의 대상 주소를 표시합니다." + "value": "이 양식은 %2$@ 페이지 안에 있는 %1$@ 프레임에 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "指针停留在链接上或链接获得键盘焦点时,在浏览器面板底部显示链接的目标地址。" + "value": "此表单位于来自 %2$@ 的网页中、来自 %1$@ 的框架内。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "指標停留在連結上或連結取得鍵盤焦點時,在瀏覽器面板底部顯示連結的目的地。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Prikazuje odredište linka na dnu panela preglednika dok je pokazivač iznad njega ili dok link ima fokus tastature." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Viser linkets destination nederst i browserpanelet, mens markøren er over det, eller mens linket har tastaturfokus." + "value": "此表單位於來自 %2$@ 的網頁中、來自 %1$@ 的框架內。" } - }, - "it": { + } + } + }, + "browser.repl.auth.notice": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Mostra la destinazione di un link nella parte inferiore del pannello del browser mentre il puntatore è sopra di esso o quando il link ha il focus della tastiera." + "value": "An agent asked cmux to fill this sign-in form. The agent does not receive what you type, but scripts on the page, and code the agent runs in the page, can read the filled fields." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "បង្ហាញទិសដៅរបស់តំណនៅផ្នែកខាងក្រោមនៃផ្ទាំងកម្មវិធីរុករក ខណៈពេលដែលទស្សន៍ទ្រនិចស្ថិតនៅលើវា ឬនៅពេលតំណទទួលបានការផ្ដោតពីក្ដារចុច។" + "value": "طلب وكيل من cmux تعبئة نموذج تسجيل الدخول هذا. لا يتلقى الوكيل ما تكتبه، لكن البرامج النصية في الصفحة، والتعليمات البرمجية التي يشغلها الوكيل في الصفحة، يمكنها قراءة الحقول المعبأة." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Viser lenkens mål nederst i nettleserpanelet mens pekeren er over den, eller mens lenken har tastaturfokus." + "value": "Ein Agent hat cmux gebeten, dieses Anmeldeformular auszufüllen. Der Agent erhält nicht, was du eingibst, aber Skripte der Seite und Code, den der Agent in der Seite ausführt, können die ausgefüllten Felder lesen." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Pokazuje adres docelowy linku u dołu panelu przeglądarki, gdy wskaźnik znajduje się nad nim lub gdy link ma fokus klawiatury." + "value": "Un agente pidió a cmux que rellene este formulario de inicio de sesión. El agente no recibe lo que escribes, pero los scripts de la página y el código que el agente ejecuta en la página pueden leer los campos rellenados." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mostra o destino de um link na parte inferior do painel do navegador enquanto o cursor está sobre ele ou quando o link tem o foco do teclado." + "value": "Un agent a demandé à cmux de remplir ce formulaire de connexion. L’agent ne reçoit pas ce que vous saisissez, mais les scripts de la page, et le code que l’agent exécute dans la page, peuvent lire les champs remplis." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Показывает адрес ссылки в нижней части панели браузера, пока указатель находится над ней или пока ссылка находится в фокусе клавиатуры." + "value": "エージェントが cmux にこのサインインフォームへの入力を依頼しました。入力した内容はエージェントには送られませんが、ページのスクリプトや、エージェントがページ内で実行するコードは入力済みのフィールドを読み取れます。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "แสดงปลายทางของลิงก์ที่ด้านล่างของแผงเบราว์เซอร์ขณะที่ตัวชี้อยู่เหนือลิงก์หรือเมื่อลิงก์ได้รับโฟกัสจากแป้นพิมพ์" + "value": "에이전트가 cmux에 이 로그인 양식을 채우도록 요청했습니다. 에이전트는 입력한 내용을 받지 않지만, 페이지의 스크립트와 에이전트가 페이지에서 실행하는 코드는 채워진 필드를 읽을 수 있습니다." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "İmleç bir bağlantının üzerindeyken veya bağlantı klavye odağındayken bağlantının hedefini tarayıcı panelinin altında gösterir." + "value": "有智能体请求 cmux 填写此登录表单。智能体不会收到你输入的内容,但网页上的脚本以及智能体在网页中运行的代码可以读取已填写的字段。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Показує адресу посилання в нижній частині панелі браузера, поки вказівник знаходиться над ним або поки посилання має фокус клавіатури." + "value": "有代理程式要求 cmux 填寫此登入表單。代理程式不會收到你輸入的內容,但網頁上的指令碼,以及代理程式在網頁中執行的程式碼,可以讀取已填寫的欄位。" } } } }, - "settings.search.alias.setting.browser.link-hover-url": { + "browser.repl.auth.requester": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview" + "value": "Asked by an agent working in the tab “%1$@” of the workspace “%2$@”." } }, "ar": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview رابط تمرير وجهة عنوان شريط الحالة معاينة" + "value": "طلبه وكيل يعمل في علامة التبويب ”%1$@“ في مساحة العمل ”%2$@“." } }, "de": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview link überfahren ziel adresse statusleiste vorschau" + "value": "Angefragt von einem Agenten im Tab „%1$@“ des Arbeitsbereichs „%2$@“." } }, "es": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview enlace pasar puntero destino dirección barra de estado vista previa" + "value": "Lo pide un agente que trabaja en la pestaña «%1$@» del espacio de trabajo «%2$@»." } }, "fr": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview lien survol destination adresse barre d’état aperçu" + "value": "Demandé par un agent qui travaille dans l’onglet « %1$@ » de l’espace de travail « %2$@ »." } }, "ja": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview リンク ホバー URL リンク先 ステータスバー プレビュー" + "value": "ワークスペース「%2$@」のタブ「%1$@」で作業中のエージェントからの要求です。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview 링크 호버 주소 대상 상태 표시줄 미리보기" + "value": "작업 공간 “%2$@”의 탭 “%1$@”에서 작업 중인 에이전트가 요청했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview 链接 悬停 网址 目标 状态栏 预览" + "value": "由在工作区“%2$@”的标签页“%1$@”中工作的代理请求。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview 連結 懸停 網址 目的地 狀態列 預覽" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview link prelazak pokazivačem odredište adresa statusna traka pregled" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview link markør over destination adresse statuslinje forhåndsvisning" + "value": "由在工作區「%2$@」的分頁「%1$@」中工作的代理請求。" } - }, - "it": { + } + } + }, + "browser.repl.auth.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview link passaggio puntatore destinazione indirizzo barra di stato anteprima" + "value": "Sign in to %@" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview តំណ ទស្សន៍ទ្រនិច ទិសដៅ អាសយដ្ឋាន របារស្ថានភាព មើលជាមុន" + "value": "تسجيل الدخول إلى %@" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview lenke peker over mål adresse statuslinje forhåndsvisning" + "value": "Bei %@ anmelden" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview link najechanie adres docelowy pasek stanu podgląd" + "value": "Iniciar sesión en %@" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview link passar cursor destino endereço barra de status pré-visualização" + "value": "Se connecter à %@" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview ссылка наведение адрес назначение строка состояния предпросмотр" + "value": "%@ にサインイン" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview ลิงก์ วางเมาส์ ปลายทาง ที่อยู่ แถบสถานะ ดูตัวอย่าง" + "value": "%@에 로그인" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview bağlantı üzerine gelme hedef adres durum çubuğu önizleme" + "value": "登录 %@" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "browser.showLinkHoverURL link hover url destination address status bar preview посилання наведення адреса призначення рядок стану попередній перегляд" + "value": "登入 %@" } } } From 0e8be72af04e2bbece9234a69aa5cc4ab243ad6d Mon Sep 17 00:00:00 2001 From: ejc3 Date: Mon, 5 Oct 2026 22:28:13 -0700 Subject: [PATCH 25/26] remote-tmux: the two origin toggles can be set from cmux.json Every beta toggle now has a cmux.json path, with a schema entry, a supported path and a parser call. The host-color and host-title toggles get the same, and stop being listed as Settings-only. --- .../CmuxConfigSchema.generated.swift | 16 ++++++- ...CmuxSettingsFileStore+SupportedPaths.swift | 2 + ...tcutSettingsFileStore+SectionParsers.swift | 14 ++++++ ...onContentWidthSettingsFileStoreTests.swift | 46 +++++++++++++++++++ tests/test_cmux_schema_parity.py | 3 -- web/data/cmux.schema.json | 16 ++++++- 6 files changed, 92 insertions(+), 5 deletions(-) diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift index 89c230b86e94..40b44efd9495 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift @@ -222,7 +222,21 @@ enum CmuxEmbeddedConfigSchema { "type": "object", "additionalProperties": false, "properties": { - "enabled": { "type": "boolean", "default": false, "description": "Enable remote tmux mirroring." } + "enabled": { "type": "boolean", "default": false, "description": "Enable remote tmux mirroring." }, + "originColors": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { "type": "boolean", "default": false, "description": "Tint each remote workspace's sidebar row with a stable per-host color." } + } + }, + "originHostTitles": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { "type": "boolean", "default": false, "description": "Show a remote workspace's host after its title when another workspace has the same title." } + } + } } } } diff --git a/Sources/CmuxSettingsFileStore+SupportedPaths.swift b/Sources/CmuxSettingsFileStore+SupportedPaths.swift index 651f3976bea1..53dc96430436 100644 --- a/Sources/CmuxSettingsFileStore+SupportedPaths.swift +++ b/Sources/CmuxSettingsFileStore+SupportedPaths.swift @@ -233,5 +233,7 @@ extension CmuxSettingsFileStore { "customSidebars.beta.enabled", "cloud.beta.machines.enabled", "remoteTmux.beta.enabled", + "remoteTmux.beta.originHostTitles.enabled", + "remoteTmux.beta.originColors.enabled", ] } diff --git a/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift b/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift index 52b5aabada56..a5edf21d7cce 100644 --- a/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift +++ b/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift @@ -51,6 +51,20 @@ extension CmuxSettingsFileStore { sourcePath: sourcePath, snapshot: &snapshot ) + parseBetaToggle( + root["remoteTmux"] as? [String: Any], + nestedPath: ["beta", "originHostTitles", "enabled"], + setting: SettingCatalog().betaFeatures.remoteTmuxOriginHostTitles, + sourcePath: sourcePath, + snapshot: &snapshot + ) + parseBetaToggle( + root["remoteTmux"] as? [String: Any], + nestedPath: ["beta", "originColors", "enabled"], + setting: SettingCatalog().betaFeatures.remoteTmuxOriginColors, + sourcePath: sourcePath, + snapshot: &snapshot + ) } private func parseIntegrationsSection( diff --git a/cmuxTests/SessionContentWidthSettingsFileStoreTests.swift b/cmuxTests/SessionContentWidthSettingsFileStoreTests.swift index 3e759b0869b2..cc20c757731c 100644 --- a/cmuxTests/SessionContentWidthSettingsFileStoreTests.swift +++ b/cmuxTests/SessionContentWidthSettingsFileStoreTests.swift @@ -106,6 +106,52 @@ struct SessionContentWidthSettingsFileStoreTests { } } + /// `remoteTmux.beta.originColors.enabled` in cmux.json reaches the same stored value the Settings toggle writes. + @Test + func settingsFileStoreAppliesRemoteTmuxOriginColors() throws { + let defaults = UserDefaults.standard + let key = SettingCatalog().betaFeatures.remoteTmuxOriginColors + #expect(key.defaultValue == false) + try preservingDefaults(keys: [key.userDefaultsKey, settingsFileBackupsDefaultsKey, importedManagedDefaultsKey]) { + let directoryURL = try makeTemporaryDirectory() + defer { try? FileManager.default.removeItem(at: directoryURL) } + let settingsFileURL = directoryURL.appendingPathComponent("cmux.json", isDirectory: false) + try #"{"remoteTmux":{"beta":{"originColors":{"enabled":true}}}}"#.write(to: settingsFileURL, atomically: true, encoding: .utf8) + + _ = KeyboardShortcutSettingsFileStore( + primaryPath: settingsFileURL.path, + fallbackPath: nil, + additionalFallbackPaths: [], + startWatching: false + ) + + #expect(defaults.object(forKey: key.userDefaultsKey) as? Bool == true) + } + } + + /// `remoteTmux.beta.originHostTitles.enabled` in cmux.json reaches the same stored value the Settings toggle writes. + @Test + func settingsFileStoreAppliesRemoteTmuxOriginHostTitles() throws { + let defaults = UserDefaults.standard + let key = SettingCatalog().betaFeatures.remoteTmuxOriginHostTitles + #expect(key.defaultValue == false) + try preservingDefaults(keys: [key.userDefaultsKey, settingsFileBackupsDefaultsKey, importedManagedDefaultsKey]) { + let directoryURL = try makeTemporaryDirectory() + defer { try? FileManager.default.removeItem(at: directoryURL) } + let settingsFileURL = directoryURL.appendingPathComponent("cmux.json", isDirectory: false) + try #"{"remoteTmux":{"beta":{"originHostTitles":{"enabled":true}}}}"#.write(to: settingsFileURL, atomically: true, encoding: .utf8) + + _ = KeyboardShortcutSettingsFileStore( + primaryPath: settingsFileURL.path, + fallbackPath: nil, + additionalFallbackPaths: [], + startWatching: false + ) + + #expect(defaults.object(forKey: key.userDefaultsKey) as? Bool == true) + } + } + @Test(.timeLimit(.minutes(1))) @MainActor func canonicalSidebarAndIntegrationEditsApplyThroughWatcher() async throws { diff --git a/tests/test_cmux_schema_parity.py b/tests/test_cmux_schema_parity.py index df3bd4a22996..94644528a68d 100644 --- a/tests/test_cmux_schema_parity.py +++ b/tests/test_cmux_schema_parity.py @@ -70,9 +70,6 @@ "browser.disabled", "browser.importHintDismissed", "browser.importHintVariant", - # Remote tmux preferences that stay Settings-only. - "remoteTmux.beta.originColors.enabled", - "remoteTmux.beta.originHostTitles.enabled", # Device discovery and pairing state. "devices.discovery.enabled", "devices.incomingAccess.enabled", diff --git a/web/data/cmux.schema.json b/web/data/cmux.schema.json index 0bd359a5bb67..280655ddb217 100644 --- a/web/data/cmux.schema.json +++ b/web/data/cmux.schema.json @@ -212,7 +212,21 @@ "type": "object", "additionalProperties": false, "properties": { - "enabled": { "type": "boolean", "default": false, "description": "Enable remote tmux mirroring." } + "enabled": { "type": "boolean", "default": false, "description": "Enable remote tmux mirroring." }, + "originColors": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { "type": "boolean", "default": false, "description": "Tint each remote workspace's sidebar row with a stable per-host color." } + } + }, + "originHostTitles": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { "type": "boolean", "default": false, "description": "Show a remote workspace's host after its title when another workspace has the same title." } + } + } } } } From a3471fdacd71e8a20c91010d9430f0a276e5e85d Mon Sep 17 00:00:00 2001 From: ejc3 Date: Mon, 5 Oct 2026 22:55:16 -0700 Subject: [PATCH 26/26] settings: build the beta section once when reading cmux.json parseClassicCatalogSections built a whole SettingCatalog for each beta toggle it read. In a debug build every one of those temporaries has its own slot in the function's frame, and with one more toggle the frame no longer fit a worker thread's stack: the settings-file tests died with 'Thread stack size exceeded' in SettingCatalog.init. It now builds the beta section once and reads every toggle from it. --- ...ortcutSettingsFileStore+SectionParsers.swift | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift b/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift index a5edf21d7cce..fd8911cd1e8e 100644 --- a/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift +++ b/Sources/KeyboardShortcutSettingsFileStore+SectionParsers.swift @@ -10,6 +10,9 @@ extension CmuxSettingsFileStore { sourcePath: String, snapshot: inout ResolvedSettingsSnapshot ) { + // One section value for every toggle below. A `SettingCatalog()` per call is a whole + // catalog per stack slot in a debug build, which is enough to overflow a worker thread. + let betaFeatures = BetaFeaturesCatalogSection() if let integrations = root["integrations"] as? [String: Any] { parseIntegrationsSection(integrations, sourcePath: sourcePath, snapshot: &snapshot) } else if root.keys.contains("integrations") { @@ -19,49 +22,49 @@ extension CmuxSettingsFileStore { parseBetaToggle( root["rightSidebar"] as? [String: Any], nestedPath: ["beta", "feed", "enabled"], - setting: SettingCatalog().betaFeatures.rightSidebarFeed, + setting: betaFeatures.rightSidebarFeed, sourcePath: sourcePath, snapshot: &snapshot ) parseBetaToggle( root["extensions"] as? [String: Any], nestedPath: ["beta", "enabled"], - setting: SettingCatalog().betaFeatures.extensions, + setting: betaFeatures.extensions, sourcePath: sourcePath, snapshot: &snapshot ) parseBetaToggle( root["customSidebars"] as? [String: Any], nestedPath: ["beta", "enabled"], - setting: SettingCatalog().betaFeatures.customSidebars, + setting: betaFeatures.customSidebars, sourcePath: sourcePath, snapshot: &snapshot ) parseBetaToggle( root["cloud"] as? [String: Any], nestedPath: ["beta", "machines", "enabled"], - setting: SettingCatalog().betaFeatures.cloudMachines, + setting: betaFeatures.cloudMachines, sourcePath: sourcePath, snapshot: &snapshot ) parseBetaToggle( root["remoteTmux"] as? [String: Any], nestedPath: ["beta", "enabled"], - setting: SettingCatalog().betaFeatures.remoteTmux, + setting: betaFeatures.remoteTmux, sourcePath: sourcePath, snapshot: &snapshot ) parseBetaToggle( root["remoteTmux"] as? [String: Any], nestedPath: ["beta", "originHostTitles", "enabled"], - setting: SettingCatalog().betaFeatures.remoteTmuxOriginHostTitles, + setting: betaFeatures.remoteTmuxOriginHostTitles, sourcePath: sourcePath, snapshot: &snapshot ) parseBetaToggle( root["remoteTmux"] as? [String: Any], nestedPath: ["beta", "originColors", "enabled"], - setting: SettingCatalog().betaFeatures.remoteTmuxOriginColors, + setting: betaFeatures.remoteTmuxOriginColors, sourcePath: sourcePath, snapshot: &snapshot )