From 3980296703fe02bada62cd39586bf570f382ffe0 Mon Sep 17 00:00:00 2001 From: austinywang Date: Tue, 14 Jul 2026 12:51:37 -0700 Subject: [PATCH 01/16] test: cover parameterized workspace layouts --- .../CmuxTemplateTests.swift | 67 +++++++++++++++ cmuxTests/SavedLayoutDefinitionTests.swift | 83 +++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift diff --git a/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift new file mode 100644 index 000000000000..276ffbaa5e4a --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift @@ -0,0 +1,67 @@ +import Testing +@testable import CmuxFoundation + +@Suite struct CmuxTemplateTests { + @Test func parsesPriorArtPlaceholderGrammarInFirstOccurrenceOrder() { + let template = CmuxTemplate("{{ticket}} {{apiPort=8080}} {{ticket=ignored}} {{bad.name}}") + + #expect(template.variables == [ + CmuxTemplateVariable(name: "ticket", defaultValue: nil), + CmuxTemplateVariable(name: "apiPort", defaultValue: "8080"), + ]) + } + + @Test func substitutesLiteralValuesAndUnescapesLiteralPlaceholders() throws { + let template = CmuxTemplate(#"https://example.test/{{ticket}}/\{{upstream}}?q={{query}}"#) + let resolver = CmuxTemplateResolver( + explicitValues: ["ticket": "BERKS-87", "query": "a/b & c"] + ) + + #expect(try resolver.resolve(template) == "https://example.test/BERKS-87/{{upstream}}?q=a/b & c") + } + + @Test func resolvesWithDocumentedPrecedence() throws { + let templates = [ + CmuxTemplate("{{explicit}} {{definition}} {{workspaceEnv}} {{processEnv}} {{inline=inline-default}}"), + ] + let resolver = CmuxTemplateResolver( + explicitValues: [ + "explicit": "explicit-value", + "definition": "explicit-wins", + ], + definitionValues: [ + "definition": "definition-value", + "workspaceEnv": "definition-wins", + ], + workspaceEnvironment: [ + "workspaceEnv": "workspace-value", + "processEnv": "workspace-wins", + ], + processEnvironment: [ + "processEnv": "process-value", + "inline": "process-wins", + ] + ) + + #expect(try resolver.resolve(templates[0]) + == "explicit-value explicit-wins definition-wins workspace-wins process-wins") + } + + @Test func reportsAllMissingVariablesOnceInTraversalOrder() { + let resolver = CmuxTemplateResolver(processEnvironment: [:]) + + #expect(throws: CmuxTemplateResolutionError.missingVariables(["ticket", "apiPort", "vitePort"])) { + try resolver.resolve([ + CmuxTemplate("{{ticket}} {{apiPort}}"), + CmuxTemplate("{{ticket}} {{vitePort}}"), + ]) + } + } + + @Test func ignoresInvalidAndEscapedPlaceholderFormsWhenCheckingMissingValues() throws { + let resolver = CmuxTemplateResolver(processEnvironment: [:]) + + #expect(try resolver.resolve(CmuxTemplate(#"{{bad.name}} {{1port}} \{{literal}}"#)) + == "{{bad.name}} {{1port}} {{literal}}") + } +} diff --git a/cmuxTests/SavedLayoutDefinitionTests.swift b/cmuxTests/SavedLayoutDefinitionTests.swift index c16f0660dc69..d9c6c62f264f 100644 --- a/cmuxTests/SavedLayoutDefinitionTests.swift +++ b/cmuxTests/SavedLayoutDefinitionTests.swift @@ -1,4 +1,5 @@ import Foundation +import CmuxFoundation import Testing #if canImport(cmux_DEV) @@ -74,6 +75,88 @@ import Testing _ = try JSONDecoder().decode(CmuxLayoutNode.self, from: layoutData) } + @Test func parameterizedTicketLayoutResolvesEveryLaunchStringLeaf() throws { + let definition = CmuxWorkspaceDefinition( + name: "{{ticket}} Dev", + cwd: "~/code/app/wt/{{ticket}}", + env: [ + "API_PORT": "{{apiPort}}", + "TICKET": "{{ticket}}", + "VITE_PORT": "{{vitePort}}", + ], + setup: "echo preparing {{ticket}}", + params: ["vitePort": "5100"], + layout: .split(CmuxSplitDefinition( + direction: .horizontal, + children: [ + .pane(CmuxPaneDefinition(surfaces: [ + CmuxSurfaceDefinition( + type: .terminal, + name: "API {{ticket}}", + command: "uvicorn app:api --port {{apiPort}}", + cwd: "services/{{ticket}}", + env: ["SERVICE_PORT": "{{apiPort}}"], + url: nil, + focus: true + ), + ])), + .pane(CmuxPaneDefinition(surfaces: [ + CmuxSurfaceDefinition( + type: .browser, + name: "Vite {{ticket}}", + command: nil, + cwd: nil, + env: nil, + url: "http://localhost:{{vitePort}}/browse/{{ticket}}/", + focus: nil + ), + ])), + ] + )) + ) + + let resolved = try definition.resolvingTemplateParameters( + ["ticket": "BERKS-87", "apiPort": "8087"], + processEnvironment: [:] + ) + + #expect(resolved.name == "BERKS-87 Dev") + #expect(resolved.cwd == "~/code/app/wt/BERKS-87") + #expect(resolved.env == [ + "API_PORT": "8087", + "TICKET": "BERKS-87", + "VITE_PORT": "5100", + ]) + #expect(resolved.setup == "echo preparing BERKS-87") + #expect(resolved.params == nil) + guard case .split(let split) = try #require(resolved.layout), + case .pane(let terminalPane) = split.children[0], + case .pane(let browserPane) = split.children[1] else { + Issue.record("Expected resolved split layout") + return + } + #expect(terminalPane.surfaces[0].name == "API BERKS-87") + #expect(terminalPane.surfaces[0].command == "uvicorn app:api --port 8087") + #expect(terminalPane.surfaces[0].cwd == "services/BERKS-87") + #expect(terminalPane.surfaces[0].env == ["SERVICE_PORT": "8087"]) + #expect(browserPane.surfaces[0].name == "Vite BERKS-87") + #expect(browserPane.surfaces[0].url == "http://localhost:5100/browse/BERKS-87/") + } + + @Test func parameterizedWorkspaceReportsEveryMissingVariableBeforeLaunch() { + let definition = CmuxWorkspaceDefinition( + name: "{{ticket}}", + env: ["API_PORT": "{{apiPort}}"], + layout: .pane(CmuxPaneDefinition(surfaces: [ + CmuxSurfaceDefinition(type: .browser, url: "http://localhost:{{vitePort}}"), + ])) + ) + + #expect(throws: CmuxTemplateResolutionError.missingVariables(["ticket", "apiPort", "vitePort"])) { + try definition.resolvingTemplateParameters([:], processEnvironment: [:]) + } + } + private static var nestedLayout: CmuxLayoutNode { .split( CmuxSplitDefinition( From c3950a04495bc2b25df18c0324460b523501dd88 Mon Sep 17 00:00:00 2001 From: austinywang Date: Tue, 14 Jul 2026 13:21:07 -0700 Subject: [PATCH 02/16] feat: parameterize workspace layouts --- CLI/CMUXCLI+WorkspaceTemplateParameters.swift | 180 ++++++++++++++++++ CLI/cmux.swift | 57 +++--- CLI/cmux_layout.swift | 27 ++- .../ControlCommandCoordinator+Layout.swift | 25 +++ .../Layout/ControlLayoutContext.swift | 3 + ...ControlCommandCoordinatorLayoutTests.swift | 112 +++++++++++ .../ControlLayoutContextTestStubs.swift | 1 + .../ConfigValues/Template/CmuxTemplate.swift | 146 ++++++++++++++ .../CmuxTemplateResolutionError.swift | 6 + .../Template/CmuxTemplateResolver.swift | 92 +++++++++ .../Template/CmuxTemplateVariable.swift | 39 ++++ Resources/Localizable.xcstrings | 178 ++++++++++++++++- Sources/AppDelegate+SavedLayoutMenu.swift | 11 +- ...igExecutor+WorkspaceParameterization.swift | 28 +++ Sources/CmuxConfigExecutor.swift | 14 +- ...WorkspaceDefinition+Parameterization.swift | 106 +++++++++++ Sources/CmuxWorkspaceDefinition.swift | 5 + Sources/ContentView+SavedLayoutCommands.swift | 9 +- Sources/TabManager+SavedLayouts.swift | 34 +++- ...minalController+ControlLayoutContext.swift | 13 +- .../TerminalController+WorkspaceCreate.swift | 74 +++++-- ...ntroller+WorkspaceTemplateParameters.swift | 19 ++ Sources/WorkspaceTemplateErrorPresenter.swift | 38 ++++ cmux.xcodeproj/project.pbxproj | 24 +++ .../CLIWorkspaceTemplateParameterTests.swift | 177 +++++++++++++++++ 25 files changed, 1346 insertions(+), 72 deletions(-) create mode 100644 CLI/CMUXCLI+WorkspaceTemplateParameters.swift create mode 100644 Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift create mode 100644 Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift create mode 100644 Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolutionError.swift create mode 100644 Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift create mode 100644 Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateVariable.swift create mode 100644 Sources/CmuxConfigExecutor+WorkspaceParameterization.swift create mode 100644 Sources/CmuxWorkspaceDefinition+Parameterization.swift create mode 100644 Sources/TerminalController+WorkspaceTemplateParameters.swift create mode 100644 Sources/WorkspaceTemplateErrorPresenter.swift create mode 100644 cmuxTests/CLIWorkspaceTemplateParameterTests.swift diff --git a/CLI/CMUXCLI+WorkspaceTemplateParameters.swift b/CLI/CMUXCLI+WorkspaceTemplateParameters.swift new file mode 100644 index 000000000000..c63c2bdd070c --- /dev/null +++ b/CLI/CMUXCLI+WorkspaceTemplateParameters.swift @@ -0,0 +1,180 @@ +import CmuxFoundation +import Foundation + +extension CMUXCLI { + static let workspaceCreateHelpText = String( + localized: "cli.workspace.create.help", + defaultValue: """ + Usage: cmux new-workspace [--name ] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>] + + Create a new workspace in the caller's window. + + Flags: + --name <title> Set a custom name for the new workspace + --description <text> Set a custom description for the new workspace + --cwd <path> Set the working directory for the new workspace + --command <text> Send text+Enter to the new workspace after creation + --env KEY=VALUE Set a workspace environment variable. Repeatable. + Reserved CMUX_* variables cannot be overridden. + --env-file <path> Load KEY=VALUE lines from a file. Repeatable. + --param KEY=VALUE Set a {{variable}} used by workspace strings. Repeatable. + --param KEY Import KEY from the invoking shell environment. + --layout <json> Create workspace with a predefined split layout. + Layout surfaces define their own commands. + --window <id|ref|index> Target window (default: caller's window) + --focus <true|false> Focus the new workspace (default: false) + --group <id|ref> Add the new workspace to a workspace group + --group-placement afterCurrent|top|end Placement within --group (default: top) + --group-reference <workspace> Reference workspace for afterCurrent placement + + Examples: + cmux new-workspace + cmux new-workspace --name "Build Server" + cmux new-workspace --cwd . --command "npm test" + cmux new-workspace --name "Dev {{ticket}}" --param ticket=BERKS-87 + """ + ) + + struct WorkspaceTemplateParameterOptions { + let values: [String: String] + let remaining: [String] + } + + /// Parses repeatable `--param KEY=VALUE`, `--param=KEY=VALUE`, and + /// `--param KEY` arguments. The last value wins; the value-less form imports + /// that key from the invoking CLI process environment. + func parseWorkspaceTemplateParameterOptions( + _ args: [String], + commandName: String, + environment: [String: String] = ProcessInfo.processInfo.environment + ) throws -> WorkspaceTemplateParameterOptions { + var values: [String: String] = [:] + var remaining: [String] = [] + var index = 0 + var pastTerminator = false + + while index < args.count { + let argument = args[index] + if argument == "--" { + pastTerminator = true + remaining.append(argument) + index += 1 + continue + } + guard !pastTerminator else { + remaining.append(argument) + index += 1 + continue + } + + let rawParameter: String? + if argument == "--param" { + guard index + 1 < args.count else { + throw CLIError(message: String( + format: String( + localized: "cli.workspace.templateParameter.error.requiresValue", + defaultValue: "%@: --param requires KEY=VALUE or KEY" + ), + locale: .current, + commandName + )) + } + rawParameter = args[index + 1] + index += 2 + } else if argument.hasPrefix("--param=") { + rawParameter = String(argument.dropFirst("--param=".count)) + index += 1 + } else { + rawParameter = nil + } + + guard let rawParameter else { + remaining.append(argument) + index += 1 + continue + } + let parameter = try parseWorkspaceTemplateParameter( + rawParameter, + commandName: commandName, + environment: environment + ) + values[parameter.key] = parameter.value + } + return WorkspaceTemplateParameterOptions(values: values, remaining: remaining) + } + + func resolveWorkspaceCommandTemplate( + _ command: String, + templateParameters: [String: String], + workspaceEnvironment: [String: String], + commandName: String, + processEnvironment: [String: String] = ProcessInfo.processInfo.environment + ) throws -> String { + let literalWorkspaceEnvironment = workspaceEnvironment.filter { _, value in + !CmuxTemplate(value).containsVariables + } + do { + return try CmuxTemplateResolver( + explicitValues: templateParameters, + workspaceEnvironment: literalWorkspaceEnvironment, + processEnvironment: processEnvironment + ).resolve(CmuxTemplate(command)) + } catch CmuxTemplateResolutionError.missingVariables(let names) { + throw CLIError( + message: String( + format: String( + localized: "cli.workspace.templateParameter.error.missing", + defaultValue: "%@: missing workspace template parameters: %@" + ), + locale: .current, + commandName, + names.joined(separator: ", ") + ), + v2Code: "missing_parameters" + ) + } + } + + private func parseWorkspaceTemplateParameter( + _ raw: String, + commandName: String, + environment: [String: String] + ) throws -> (key: String, value: String) { + let key: String + let explicitValue: String? + if let equals = raw.firstIndex(of: "=") { + key = String(raw[..<equals]).trimmingCharacters(in: .whitespaces) + explicitValue = String(raw[raw.index(after: equals)...]) + } else { + key = raw.trimmingCharacters(in: .whitespaces) + explicitValue = nil + } + + guard CmuxTemplateVariable.isValidName(key) else { + throw CLIError(message: String( + format: String( + localized: "cli.workspace.templateParameter.error.invalidName", + defaultValue: "%@: invalid template parameter name '%@'" + ), + locale: .current, + commandName, + key + )) + } + if let explicitValue { + return (key, explicitValue) + } + guard let environmentValue = environment[key] else { + throw CLIError(message: String( + format: String( + localized: "cli.workspace.templateParameter.error.environmentMissing", + defaultValue: "%@: --param %@ could not import an unset environment variable" + ), + locale: .current, + commandName, + key + )) + } + return (key, environmentValue) + } +} diff --git a/CLI/cmux.swift b/CLI/cmux.swift index dd65f18d3aa6..b9637f58b08e 100644 --- a/CLI/cmux.swift +++ b/CLI/cmux.swift @@ -7440,7 +7440,12 @@ struct CMUXCLI { let (groupOpt, rem7) = parseOption(rem6, name: "--group") let (groupPlacementOpt, rem8) = parseOption(rem7, name: "--group-placement") let (groupReferenceOpt, rem9) = parseOption(rem8, name: "--group-reference") - let (envFiles, envPairs, remaining) = parseWorkspaceEnvOptions(rem9) + let (envFiles, envPairs, remainingWithParams) = parseWorkspaceEnvOptions(rem9) + let templateParameterOptions = try parseWorkspaceTemplateParameterOptions( + remainingWithParams, + commandName: commandName + ) + let remaining = templateParameterOptions.remaining if remaining.last == "--env" { throw CLIError(message: String( format: String( @@ -7465,7 +7470,7 @@ struct CMUXCLI { throw CLIError(message: String( format: String( localized: "cli.workspace.create.error.unknownFlag", - defaultValue: "%@: unknown flag '%@'. Known flags: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + defaultValue: "%@: unknown flag '%@'. Known flags: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" ), locale: .current, commandName, @@ -7486,6 +7491,20 @@ struct CMUXCLI { if !workspaceEnv.isEmpty { params["workspace_env"] = workspaceEnv } + if !templateParameterOptions.values.isEmpty { + params["template_params"] = templateParameterOptions.values + } + let resolvedCommand: String? + if layoutOpt == nil, let commandOpt { + resolvedCommand = try resolveWorkspaceCommandTemplate( + commandOpt, + templateParameters: templateParameterOptions.values, + workspaceEnvironment: workspaceEnv, + commandName: commandName + ) + } else { + resolvedCommand = nil + } if let layoutOpt { guard let layoutData = layoutOpt.data(using: .utf8), let layoutObj = try? JSONSerialization.jsonObject(with: layoutData) as? [String: Any] else { @@ -7501,7 +7520,7 @@ struct CMUXCLI { } else { print("OK \(wsId)") } - if layoutOpt == nil, let commandText = commandOpt, !wsId.isEmpty { + if layoutOpt == nil, let commandText = resolvedCommand, !wsId.isEmpty { let text = unescapeSendText(commandText + "\\n") let sendParams: [String: Any] = [ "text": text, @@ -15747,35 +15766,7 @@ struct CMUXCLI { cmux rename-tab --workspace workspace:2 --surface surface:5 --title "agent run" """ case "new-workspace": - return """ - Usage: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>] - - Create a new workspace in the caller's window. - - Flags: - --name <title> Set a custom name for the new workspace - --description <text> Set a custom description for the new workspace - --cwd <path> Set the working directory for the new workspace - --command <text> Send text+Enter to the new workspace after creation - --env KEY=VALUE Set a workspace environment variable. Repeatable. - Reserved CMUX_* variables cannot be overridden. - --env-file <path> Load KEY=VALUE lines from a file. Repeatable. - --layout <json> Create workspace with a predefined split layout. - Layout surfaces define their own commands. - --window <id|ref|index> Target window (default: caller's window) - --focus <true|false> Focus the new workspace (default: false) - --group <id|ref> Add the new workspace to a workspace group - --group-placement afterCurrent|top|end Placement within --group (default: top) - --group-reference <workspace> Reference workspace for afterCurrent placement - - Example: - cmux new-workspace - cmux new-workspace --name "Build Server" - cmux new-workspace --name "Launch" --description "Ship checklist" - cmux new-workspace --cwd ~/projects/myapp - cmux new-workspace --cwd . --command "npm test" - cmux new-workspace --name "Dev" --layout '{"direction":"horizontal","split":0.5,"children":[{"pane":{"surfaces":[{"type":"terminal","command":"vim"}]}},{"pane":{"surfaces":[{"type":"terminal","command":"npm run start"}]}}]}' - """ + return Self.workspaceCreateHelpText case "list-workspaces": return """ Usage: cmux list-workspaces [--window <id|ref|index>] @@ -35235,7 +35226,7 @@ export default CMUXSessionRestore; todo <add|list|check|uncheck|start|rm|clear> [args] [--workspace <id|ref|index>] [--window <id|ref|index>] move-tab-to-new-workspace [--tab <id|ref|index>] [--surface <id|ref|index>] [--workspace <id|ref|index>] [--window <id|ref|index>] [--title <text>] [--focus <true|false>] list-workspaces [--window <id|ref|index>] - new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>] + new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>] ssh <destination> [--name <title>] [--port <n>] [--identity <path>] [-A|--forward-agent] [-a|--no-forward-agent] [--ssh-option <opt>] [--window <id|ref|index>] [--no-focus] [-- <remote-command-args>] ssh-tmux <destination> [--port <n>] [--identity <path>] [--no-focus] [--new-window] ssh-session-list [--workspace <id|ref|index> | --all-workspaces] diff --git a/CLI/cmux_layout.swift b/CLI/cmux_layout.swift index c601a860d1b8..d1f28ecae535 100644 --- a/CLI/cmux_layout.swift +++ b/CLI/cmux_layout.swift @@ -2,7 +2,7 @@ import Foundation extension CMUXCLI { static func layoutHelpText() -> String { - """ + String(localized: "cli.layout.help", defaultValue: """ Usage: cmux layout <subcommand> [flags] Save, list, export, open, and delete named workspace layouts. @@ -11,15 +11,15 @@ extension CMUXCLI { save <name> [--workspace <ref>] [--overwrite] [--description <text>] list [--json] get <name> - open <name> [--cwd <dir>] [--focus <true|false>] + open <name> [--cwd <dir>] [--param KEY=VALUE]... [--focus <true|false>] delete <name> Examples: cmux layout save dev --overwrite cmux layout list cmux layout get dev - cmux layout open dev --cwd ~/projects/myapp - """ + cmux layout open dev --cwd ~/projects/myapp --param port=4100 + """) } func runLayoutNamespace( @@ -136,9 +136,21 @@ extension CMUXCLI { ) throws { let (cwdOpt, rem0) = parseOption(commandArgs, name: "--cwd") let (focusOpt, rem1) = parseOption(rem0, name: "--focus") - let (windowOpt, remaining) = parseOption(rem1, name: "--window") + let (windowOpt, rem2) = parseOption(rem1, name: "--window") + let templateParameterOptions = try parseWorkspaceTemplateParameterOptions( + rem2, + commandName: "layout open" + ) + let remaining = templateParameterOptions.remaining if let unknown = remaining.first(where: { $0.hasPrefix("--") }) { - throw CLIError(message: "layout open: unknown flag '\(unknown)'") + throw CLIError(message: String( + format: String( + localized: "cli.layout.open.error.unknownFlag", + defaultValue: "layout open: unknown flag '%@'" + ), + locale: .current, + unknown + )) } guard let name = remaining.first?.trimmingCharacters(in: .whitespacesAndNewlines), !name.isEmpty else { throw CLIError(message: "layout open requires <name>") @@ -147,6 +159,9 @@ extension CMUXCLI { var params: [String: Any] = ["name": name] if let windowHandle { params["window_id"] = windowHandle } if let cwdOpt { params["cwd"] = resolvePath(cwdOpt) } + if !templateParameterOptions.values.isEmpty { + params["template_params"] = templateParameterOptions.values + } try applyFocusOption(focusOpt, defaultValue: false, to: ¶ms) let payload = try client.sendV2(method: "layout.open", params: params) printV2Payload(payload, jsonOutput: jsonOutput, idFormat: idFormat, fallbackText: v2CreationSummary(payload, idFormat: idFormat, kinds: ["workspace"])) diff --git a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift index 8b8825cd993a..53d59486d2e1 100644 --- a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift +++ b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift @@ -102,10 +102,29 @@ extension ControlCommandCoordinator { guard let name = string(params, "name") else { return .err(code: "invalid_params", message: "Missing or blank name", data: nil) } + let templateParameters: [String: String] + if hasNonNull(params, "template_params") { + guard case .object(let raw)? = params["template_params"], + raw.values.allSatisfy({ value in + if case .string = value { return true } + return false + }), + let parsed = stringMap(params, "template_params") else { + return .err( + code: "invalid_params", + message: "template_params must be an object with string values", + data: nil + ) + } + templateParameters = parsed + } else { + templateParameters = [:] + } let resolution = context?.controlLayoutOpen( routing: routingSelectors(params), name: name, cwd: optionalTrimmedRawString(params, "cwd"), + templateParameters: templateParameters, focusRequested: bool(params, "focus") ?? false ) ?? .tabManagerUnavailable switch resolution { @@ -115,6 +134,12 @@ extension ControlCommandCoordinator { return .err(code: "unavailable", message: "TabManager not available", data: nil) case .corruptFile(let description): return .err(code: "invalid_state", message: "layouts.json is corrupt", data: .object(["description": .string(description)])) + case .missingParameters(let names): + return .err( + code: "missing_parameters", + message: "Missing workspace template parameters: \(names.joined(separator: ", "))", + data: .object(["missing_parameters": .array(names.map(JSONValue.string))]) + ) case .opened(let workspaceID): return .ok(.object([ "workspace_id": .string(workspaceID.uuidString), diff --git a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift index a7b9f0866f3a..ad47e2f241c2 100644 --- a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift +++ b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift @@ -64,6 +64,8 @@ public enum ControlLayoutOpenResolution: Sendable { case tabManagerUnavailable /// The store file could not be decoded. case corruptFile(String) + /// Required workspace template parameters were not supplied. + case missingParameters([String]) /// The workspace was opened. case opened(workspaceID: UUID) /// An unexpected store error occurred. @@ -105,6 +107,7 @@ public protocol ControlLayoutContext: AnyObject { routing: ControlRoutingSelectors, name: String, cwd: String?, + templateParameters: [String: String], focusRequested: Bool ) -> ControlLayoutOpenResolution diff --git a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift new file mode 100644 index 000000000000..09690113f7fc --- /dev/null +++ b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift @@ -0,0 +1,112 @@ +import Foundation +import Testing +@testable import CmuxControlSocket + +@MainActor +private final class FakeLayoutControlCommandContext: ControlCommandContext { + struct OpenInvocation: Equatable { + let name: String + let cwd: String? + let templateParameters: [String: String] + let focusRequested: Bool + } + + var openResolution: ControlLayoutOpenResolution = .tabManagerUnavailable + var openInvocation: OpenInvocation? + + func controlLayoutOpen( + routing: ControlRoutingSelectors, + name: String, + cwd: String?, + templateParameters: [String: String], + focusRequested: Bool + ) -> ControlLayoutOpenResolution { + openInvocation = OpenInvocation( + name: name, + cwd: cwd, + templateParameters: templateParameters, + focusRequested: focusRequested + ) + return openResolution + } +} + +@MainActor +@Suite("ControlCommandCoordinator layout domain") +struct ControlCommandCoordinatorLayoutTests { + @Test func layoutOpenForwardsTemplateParameters() { + let context = FakeLayoutControlCommandContext() + let workspaceID = UUID() + context.openResolution = .opened(workspaceID: workspaceID) + let coordinator = ControlCommandCoordinator(context: context) + + let result = coordinator.handle(ControlRequest( + id: .int(1), + method: "layout.open", + params: [ + "name": .string("Ticket Dev"), + "cwd": .string("/tmp/{{ticket}}"), + "focus": .bool(false), + "template_params": .object([ + "ticket": .string("BERKS-87"), + "vitePort": .string("5174"), + ]), + ] + )) + + #expect(context.openInvocation == .init( + name: "Ticket Dev", + cwd: "/tmp/{{ticket}}", + templateParameters: ["ticket": "BERKS-87", "vitePort": "5174"], + focusRequested: false + )) + #expect(result == .ok(.object([ + "workspace_id": .string(workspaceID.uuidString), + "workspace_ref": .string("workspace:1"), + ]))) + } + + @Test func layoutOpenRejectsNonStringTemplateParameterValue() { + let context = FakeLayoutControlCommandContext() + let coordinator = ControlCommandCoordinator(context: context) + + let result = coordinator.handle(ControlRequest( + id: .int(1), + method: "layout.open", + params: [ + "name": .string("Ticket Dev"), + "template_params": .object([ + "ticket": .string("BERKS-87"), + "vitePort": .int(5174), + ]), + ] + )) + + #expect(result == .err( + code: "invalid_params", + message: "template_params must be an object with string values", + data: nil + )) + #expect(context.openInvocation == nil) + } + + @Test func layoutOpenReturnsStructuredMissingParameters() { + let context = FakeLayoutControlCommandContext() + context.openResolution = .missingParameters(["ticket", "vitePort"]) + let coordinator = ControlCommandCoordinator(context: context) + + let result = coordinator.handle(ControlRequest( + id: .int(1), + method: "layout.open", + params: ["name": .string("Ticket Dev")] + )) + + #expect(result == .err( + code: "missing_parameters", + message: "Missing workspace template parameters: ticket, vitePort", + data: .object([ + "missing_parameters": .array([.string("ticket"), .string("vitePort")]), + ]) + )) + } +} diff --git a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift index 964d76cc9ecf..47c6f41d258e 100644 --- a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift +++ b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift @@ -18,6 +18,7 @@ extension ControlLayoutContext { routing: ControlRoutingSelectors, name: String, cwd: String?, + templateParameters: [String: String], focusRequested: Bool ) -> ControlLayoutOpenResolution { .tabManagerUnavailable } diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift new file mode 100644 index 000000000000..372180cafbf9 --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift @@ -0,0 +1,146 @@ +import Foundation + +/// Literal text that may contain cmux `{{variable}}` placeholders. +/// +/// The grammar intentionally matches custom-command variables from #6898: +/// `{{name}}` and `{{name=default}}`, with a letter-or-underscore-leading name +/// containing letters, digits, `_`, or `-`. Invalid template expressions are +/// preserved. Prefixing a recognized placeholder with `\` keeps it literal and +/// removes that escaping backslash. +public struct CmuxTemplate: Sendable { + /// The unresolved source text. + public let rawValue: String + + /// Creates a template from unresolved source text. + /// + /// - Parameter rawValue: Text that may contain cmux placeholders. + public init(_ rawValue: String) { + self.rawValue = rawValue + } + + /// Variables in first-occurrence order, de-duplicated by name. + /// + /// When a name occurs more than once, the first occurrence's inline default + /// wins, matching the custom-command behavior from #6898. + public var variables: [CmuxTemplateVariable] { + var seen = Set<String>() + return matches.compactMap { match in + guard let variable = match.variable, + seen.insert(variable.name).inserted else { + return nil + } + return variable + } + } + + /// Whether the text contains a recognized, unescaped cmux placeholder. + public var containsVariables: Bool { + matches.contains { $0.variable != nil } + } + + /// Replaces recognized placeholders found in `values` and preserves any + /// unresolved placeholders verbatim. + /// + /// Substitution is literal because workspace values also fill paths, URLs, + /// titles, and environment values. Shell-command callers that accept + /// interactive, untrusted values should quote those values before passing + /// them here, as #6898 does for custom commands. + /// + /// - Parameter values: Values keyed by placeholder name. + /// - Returns: The substituted text. + public func substituting(_ values: [String: String]) -> String { + let matches = matches + guard !matches.isEmpty else { return rawValue } + + let characters = Array(rawValue) + var result = "" + result.reserveCapacity(characters.count) + var cursor = 0 + for match in matches { + result.append(contentsOf: characters[cursor..<match.range.lowerBound]) + if match.isEscaped { + result.append(contentsOf: characters[(match.range.lowerBound + 1)..<match.range.upperBound]) + } else if let variable = match.variable, let value = values[variable.name] { + result.append(value) + } else { + result.append(contentsOf: characters[match.range]) + } + cursor = match.range.upperBound + } + result.append(contentsOf: characters[cursor...]) + return result + } + + private struct Match { + let variable: CmuxTemplateVariable? + let range: Range<Int> + let isEscaped: Bool + } + + private var matches: [Match] { + guard rawValue.contains("{{") else { return [] } + let characters = Array(rawValue) + var result: [Match] = [] + var index = 0 + + while index + 1 < characters.count { + let isEscaped = characters[index] == "\\" + && index + 2 < characters.count + && characters[index + 1] == "{" + && characters[index + 2] == "{" + let openingIndex = isEscaped ? index + 1 : index + guard characters[openingIndex] == "{", + openingIndex + 1 < characters.count, + characters[openingIndex + 1] == "{" else { + index += 1 + continue + } + + let innerStart = openingIndex + 2 + guard let close = Self.closeBraces(in: characters, from: innerStart) else { + break + } + let inner = characters[innerStart..<close] + let hasIllegalCharacter = inner.contains { character in + character == "{" || character == "}" || character == "\n" || character == "\r" + } + if !hasIllegalCharacter, let variable = Self.parseVariable(String(inner)) { + result.append(Match( + variable: isEscaped ? nil : variable, + range: index..<(close + 2), + isEscaped: isEscaped + )) + } + // Skip the entire candidate. This keeps malformed input linear + // instead of repeatedly rescanning overlapping suffixes. + index = close + 2 + } + return result + } + + private static func closeBraces(in characters: [Character], from start: Int) -> Int? { + var index = start + while index + 1 < characters.count { + if characters[index] == "}", characters[index + 1] == "}" { + return index + } + index += 1 + } + return nil + } + + private static func parseVariable(_ inner: String) -> CmuxTemplateVariable? { + let name: String + let defaultValue: String? + if let equals = inner.firstIndex(of: "=") { + name = inner[..<equals].trimmingCharacters(in: .whitespaces) + defaultValue = inner[inner.index(after: equals)...] + .trimmingCharacters(in: .whitespaces) + } else { + name = inner.trimmingCharacters(in: .whitespaces) + defaultValue = nil + } + guard CmuxTemplateVariable.isValidName(name) else { return nil } + return CmuxTemplateVariable(name: name, defaultValue: defaultValue) + } +} diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolutionError.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolutionError.swift new file mode 100644 index 000000000000..e3b8efe8153d --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolutionError.swift @@ -0,0 +1,6 @@ +/// An error produced while resolving one or more cmux templates. +public enum CmuxTemplateResolutionError: Error, Equatable, Sendable { + /// Variables without an explicit value, definition value, environment + /// value, or inline default, in first-occurrence order. + case missingVariables([String]) +} diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift new file mode 100644 index 000000000000..85220b6e1441 --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift @@ -0,0 +1,92 @@ +/// Resolves cmux templates through one documented parameter-precedence model. +/// +/// Resolution precedence is explicit invocation values, definition defaults, +/// literal workspace-level environment values, process environment values, and +/// finally inline `{{name=default}}` values. +public struct CmuxTemplateResolver: Sendable { + /// Values supplied explicitly by the invocation surface. + public let explicitValues: [String: String] + + /// Defaults declared by the containing definition's `params` block. + public let definitionValues: [String: String] + + /// Literal values from the workspace-level environment. + public let workspaceEnvironment: [String: String] + + /// Values inherited from the launching process environment. + public let processEnvironment: [String: String] + + /// Creates a resolver with explicit dependency values. + /// + /// - Parameters: + /// - explicitValues: Invocation values, such as CLI `--param` entries. + /// - definitionValues: Defaults from a workspace `params` block. + /// - workspaceEnvironment: Literal workspace-level environment values. + /// - processEnvironment: The launcher's environment. Callers inject this + /// explicitly so tests never depend on global process state. + public init( + explicitValues: [String: String] = [:], + definitionValues: [String: String] = [:], + workspaceEnvironment: [String: String] = [:], + processEnvironment: [String: String] = [:] + ) { + self.explicitValues = explicitValues + self.definitionValues = definitionValues + self.workspaceEnvironment = workspaceEnvironment + self.processEnvironment = processEnvironment + } + + /// Resolves one template or throws with every missing variable it contains. + /// + /// - Parameter template: The template to resolve. + /// - Returns: Concrete text with recognized placeholders substituted. + /// - Throws: ``CmuxTemplateResolutionError/missingVariables(_:)`` when a + /// required variable has no value. + public func resolve(_ template: CmuxTemplate) throws -> String { + let values = try resolvedValues(for: [template]) + return template.substituting(values) + } + + /// Resolves a batch atomically after preflighting every required variable. + /// + /// - Parameter templates: Templates in deterministic traversal order. + /// - Returns: Concrete strings in the same order. + /// - Throws: ``CmuxTemplateResolutionError/missingVariables(_:)`` listing + /// every missing name once, in first-occurrence order. + public func resolve(_ templates: [CmuxTemplate]) throws -> [String] { + let values = try resolvedValues(for: templates) + return templates.map { $0.substituting(values) } + } + + /// Computes the single value map used to render a batch of templates. + /// + /// - Parameter templates: Templates in deterministic traversal order. + /// - Returns: Values for every recognized variable. + /// - Throws: ``CmuxTemplateResolutionError/missingVariables(_:)`` listing + /// every missing name once, in first-occurrence order. + public func resolvedValues(for templates: [CmuxTemplate]) throws -> [String: String] { + var values: [String: String] = [:] + var missing: [String] = [] + var seen = Set<String>() + + for variable in templates.flatMap(\.variables) where seen.insert(variable.name).inserted { + if let value = value(for: variable) { + values[variable.name] = value + } else { + missing.append(variable.name) + } + } + guard missing.isEmpty else { + throw CmuxTemplateResolutionError.missingVariables(missing) + } + return values + } + + private func value(for variable: CmuxTemplateVariable) -> String? { + explicitValues[variable.name] + ?? definitionValues[variable.name] + ?? workspaceEnvironment[variable.name] + ?? processEnvironment[variable.name] + ?? variable.defaultValue + } +} diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateVariable.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateVariable.swift new file mode 100644 index 000000000000..3de98490ef27 --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateVariable.swift @@ -0,0 +1,39 @@ +import Foundation + +/// A named `{{variable}}` placeholder and its optional inline default value. +public struct CmuxTemplateVariable: Equatable, Sendable { + /// The placeholder name. + public let name: String + + /// The value after `=` in `{{name=default}}`, or `nil` when none was declared. + public let defaultValue: String? + + /// Creates a parsed template variable. + /// + /// - Parameters: + /// - name: The placeholder name. + /// - defaultValue: The optional inline default value. + public init(name: String, defaultValue: String?) { + self.name = name + self.defaultValue = defaultValue + } + + /// Returns whether a name is valid in a cmux template placeholder. + /// + /// Names start with a letter or `_` and continue with letters, digits, `_`, + /// or `-`, matching the custom-command variable grammar from #6898. + /// + /// - Parameter name: The candidate placeholder name. + /// - Returns: `true` when the name follows the cmux template grammar. + public static func isValidName(_ name: String) -> Bool { + guard let first = name.unicodeScalars.first, + CharacterSet.letters.contains(first) || first == "_" else { + return false + } + return name.unicodeScalars.allSatisfy { trailingNameCharacters.contains($0) } + } + + private static let trailingNameCharacters = CharacterSet.letters + .union(.decimalDigits) + .union(CharacterSet(charactersIn: "_-")) +} diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 9a13395d3799..750dca13df14 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -43793,6 +43793,40 @@ } } }, + "cli.layout.help": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Usage: cmux layout <subcommand> [flags]\n\nSave, list, export, open, and delete named workspace layouts.\n\nSubcommands:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY=VALUE]... [--focus <true|false>]\n delete <name>\n\nExamples:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "使い方: cmux layout <サブコマンド> [フラグ]\n\n名前付きワークスペースレイアウトを保存、一覧表示、取得、開く、削除します。\n\nサブコマンド:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY=VALUE]... [--focus <true|false>]\n delete <name>\n\n例:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" + } + } + } + }, + "cli.layout.open.error.unknownFlag": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "layout open: unknown flag '%@'" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "layout open: 不明なフラグ '%@'" + } + } + } + }, "cli.workspace.create.error.envFileRequiresValue": { "extractionState": "manual", "localizations": { @@ -43857,25 +43891,110 @@ "en": { "stringUnit": { "state": "translated", - "value": "%@: unknown flag '%@'. Known flags: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "%@: unknown flag '%@'. Known flags: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@: 不明なフラグ '%@'。利用可能なフラグ: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "%@: 不明なフラグ '%@'。利用可能なフラグ: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@: 알 수 없는 플래그 '%@'. 사용 가능한 플래그: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "%@: 알 수 없는 플래그 '%@'. 사용 가능한 플래그: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, "uk": { "stringUnit": { "state": "translated", - "value": "%@: невідомий прапорець '%@'. Доступні прапорці: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "%@: невідомий прапорець '%@'. Доступні прапорці: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + } + } + } + }, + "cli.workspace.create.help": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Usage: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nCreate a new workspace in the caller's window.\n\nFlags:\n --name <title> Set a custom name for the new workspace\n --description <text> Set a custom description for the new workspace\n --cwd <path> Set the working directory for the new workspace\n --command <text> Send text+Enter to the new workspace after creation\n --env KEY=VALUE Set a workspace environment variable. Repeatable.\n Reserved CMUX_* variables cannot be overridden.\n --env-file <path> Load KEY=VALUE lines from a file. Repeatable.\n --param KEY=VALUE Set a {{variable}} used by workspace strings. Repeatable.\n --param KEY Import KEY from the invoking shell environment.\n --layout <json> Create workspace with a predefined split layout.\n Layout surfaces define their own commands.\n --window <id|ref|index> Target window (default: caller's window)\n --focus <true|false> Focus the new workspace (default: false)\n --group <id|ref> Add the new workspace to a workspace group\n --group-placement afterCurrent|top|end Placement within --group (default: top)\n --group-reference <workspace> Reference workspace for afterCurrent placement\n\nExamples:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "使い方: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\n呼び出し元のウィンドウに新しいワークスペースを作成します。\n\nフラグ:\n --name <title> 新しいワークスペースの名前を設定\n --description <text> 新しいワークスペースの説明を設定\n --cwd <path> 新しいワークスペースの作業ディレクトリを設定\n --command <text> 作成後、新しいワークスペースへテキストと Enter を送信\n --env KEY=VALUE ワークスペース環境変数を設定。繰り返し指定可能。\n 予約済みの CMUX_* 変数は上書きできません。\n --env-file <path> ファイルから KEY=VALUE 行を読み込み。繰り返し指定可能。\n --param KEY=VALUE ワークスペース文字列の {{variable}} を設定。繰り返し指定可能。\n --param KEY 呼び出し元シェルの環境変数 KEY を取り込み。\n --layout <json> 定義済みの分割レイアウトでワークスペースを作成。\n レイアウトのサーフェスが各コマンドを定義します。\n --window <id|ref|index> 対象ウィンドウ (既定: 呼び出し元のウィンドウ)\n --focus <true|false> 新しいワークスペースをフォーカス (既定: false)\n --group <id|ref> 新しいワークスペースをグループへ追加\n --group-placement afterCurrent|top|end --group 内の位置 (既定: top)\n --group-reference <workspace> afterCurrent の基準ワークスペース\n\n例:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" + } + } + } + }, + "cli.workspace.templateParameter.error.environmentMissing": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@: --param %@ could not import an unset environment variable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@: --param %@ は未設定の環境変数を取り込めません" + } + } + } + }, + "cli.workspace.templateParameter.error.invalidName": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@: invalid template parameter name '%@'" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@: テンプレートパラメータ名 '%@' は無効です" + } + } + } + }, + "cli.workspace.templateParameter.error.missing": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@: missing workspace template parameters: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@: ワークスペーステンプレートパラメータがありません: %@" + } + } + } + }, + "cli.workspace.templateParameter.error.requiresValue": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@: --param requires KEY=VALUE or KEY" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@: --param には KEY=VALUE または KEY が必要です" } } } @@ -81950,6 +82069,57 @@ } } }, + "dialog.workspaceTemplate.failed.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The workspace template could not be resolved." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペーステンプレートを解決できませんでした。" + } + } + } + }, + "dialog.workspaceTemplate.missingParameters.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Missing values for: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "次の値がありません: %@" + } + } + } + }, + "dialog.workspaceTemplate.missingParameters.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Workspace Parameters Required" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースパラメータが必要です" + } + } + } + }, "dialog.sshURL.blocked.ok": { "extractionState": "manual", "localizations": { diff --git a/Sources/AppDelegate+SavedLayoutMenu.swift b/Sources/AppDelegate+SavedLayoutMenu.swift index 5dfea833e2ba..eaba82e2e8d5 100644 --- a/Sources/AppDelegate+SavedLayoutMenu.swift +++ b/Sources/AppDelegate+SavedLayoutMenu.swift @@ -1,4 +1,5 @@ import AppKit +import CmuxFoundation import Foundation @MainActor @@ -63,9 +64,13 @@ extension AppDelegate { NSSound.beep() return } - if context.tabManager.openWorkspace(fromSavedLayout: layout, cwdOverride: nil, focus: true) == nil { - NSSound.beep() - } + _ = try context.tabManager.openWorkspace( + fromSavedLayout: layout, + cwdOverride: nil, + focus: true + ) + } catch let error as CmuxTemplateResolutionError { + WorkspaceTemplateErrorPresenter(presentingWindow: nil).present(error) } catch { NSSound.beep() } diff --git a/Sources/CmuxConfigExecutor+WorkspaceParameterization.swift b/Sources/CmuxConfigExecutor+WorkspaceParameterization.swift new file mode 100644 index 000000000000..96ee036cbc5b --- /dev/null +++ b/Sources/CmuxConfigExecutor+WorkspaceParameterization.swift @@ -0,0 +1,28 @@ +import AppKit +import CmuxFoundation +import Foundation + +extension CmuxConfigExecutor { + static func resolvedWorkspaceCommandForLaunch( + _ command: CmuxCommandDefinition, + presentingWindow: NSWindow? + ) -> CmuxCommandDefinition? { + guard let workspace = command.workspace else { return command } + do { + var resolved = command + resolved.workspace = try workspace.resolvingTemplateParameters( + [:], + processEnvironment: ProcessInfo.processInfo.environment + ) + return resolved + } catch CmuxTemplateResolutionError.missingVariables(let names) { + WorkspaceTemplateErrorPresenter(presentingWindow: presentingWindow).present( + CmuxTemplateResolutionError.missingVariables(names) + ) + return nil + } catch { + WorkspaceTemplateErrorPresenter(presentingWindow: presentingWindow).present(error) + return nil + } + } +} diff --git a/Sources/CmuxConfigExecutor.swift b/Sources/CmuxConfigExecutor.swift index 7d10ed6a1995..b9a8609669ed 100644 --- a/Sources/CmuxConfigExecutor.swift +++ b/Sources/CmuxConfigExecutor.swift @@ -18,7 +18,13 @@ struct CmuxConfigExecutor { presentingWindow: NSWindow? = nil, onExecuted: (() -> Void)? = nil ) -> Bool { - if let workspace = command.workspace { + if command.workspace != nil { + guard let resolvedCommand = resolvedWorkspaceCommandForLaunch( + command, + presentingWindow: presentingWindow + ), let resolvedWorkspace = resolvedCommand.workspace else { + return false + } return authorizeProjectActionIfNeeded( descriptor: workspaceTrustDescriptor( command: command, @@ -31,13 +37,13 @@ struct CmuxConfigExecutor { confirm: command.confirm ?? false, configSourcePath: configSourcePath, globalConfigPath: globalConfigPath, - displayCommand: workspaceShellDisclosure(command), + displayCommand: workspaceShellDisclosure(resolvedCommand), displayTitle: displayTitle ?? command.name, presentingWindow: presentingWindow ) { guard executeWorkspaceCommand( - command: command, - workspace: workspace, + command: resolvedCommand, + workspace: resolvedWorkspace, tabManager: tabManager, baseCwd: baseCwd ) else { return } diff --git a/Sources/CmuxWorkspaceDefinition+Parameterization.swift b/Sources/CmuxWorkspaceDefinition+Parameterization.swift new file mode 100644 index 000000000000..90b5bc0ef67e --- /dev/null +++ b/Sources/CmuxWorkspaceDefinition+Parameterization.swift @@ -0,0 +1,106 @@ +import CmuxFoundation +import Foundation + +extension CmuxWorkspaceDefinition { + /// Resolves every launch-time string leaf before workspace state is mutated. + func resolvingTemplateParameters( + _ explicitParameters: [String: String], + processEnvironment: [String: String] + ) throws -> CmuxWorkspaceDefinition { + let resolver = templateResolver( + explicitParameters: explicitParameters, + processEnvironment: processEnvironment + ) + let values = try resolver.resolvedValues(for: templateStrings) + return substitutingTemplateValues(values) + } + + func templateResolver( + explicitParameters: [String: String], + processEnvironment: [String: String] + ) -> CmuxTemplateResolver { + let workspaceEnvironment = (env ?? [:]).filter { _, value in + !CmuxTemplate(value).containsVariables + } + return CmuxTemplateResolver( + explicitValues: explicitParameters, + definitionValues: params ?? [:], + workspaceEnvironment: workspaceEnvironment, + processEnvironment: processEnvironment + ) + } + + func substitutingTemplateValues(_ values: [String: String]) -> CmuxWorkspaceDefinition { + return CmuxWorkspaceDefinition( + name: name.map { CmuxTemplate($0).substituting(values) }, + cwd: cwd.map { CmuxTemplate($0).substituting(values) }, + color: color, + env: env?.mapValues { CmuxTemplate($0).substituting(values) }, + setup: setup.map { CmuxTemplate($0).substituting(values) }, + params: nil, + layout: layout?.substitutingTemplateValues(values) + ) + } + + var templateStrings: [CmuxTemplate] { + var templates = [name, cwd, setup].compactMap { $0 }.map(CmuxTemplate.init) + templates.append(contentsOf: (env ?? [:]).keys.sorted().compactMap { key in + env?[key].map(CmuxTemplate.init) + }) + if let layout { + templates.append(contentsOf: layout.templateStrings) + } + return templates + } +} + +private extension CmuxLayoutNode { + var templateStrings: [CmuxTemplate] { + switch self { + case .pane(let pane): + return pane.surfaces.flatMap(\.templateStrings) + case .split(let split): + return split.children.flatMap(\.templateStrings) + } + } + + func substitutingTemplateValues(_ values: [String: String]) -> CmuxLayoutNode { + switch self { + case .pane(let pane): + return .pane(CmuxPaneDefinition( + surfaces: pane.surfaces.map { $0.substitutingTemplateValues(values) } + )) + case .split(let split): + return .split(CmuxSplitDefinition( + direction: split.direction, + split: split.split, + children: split.children.map { $0.substitutingTemplateValues(values) } + )) + } + } +} + +private extension CmuxSurfaceDefinition { + var templateStrings: [CmuxTemplate] { + var templates = [name, command, cwd].compactMap { $0 }.map(CmuxTemplate.init) + templates.append(contentsOf: (env ?? [:]).keys.sorted().compactMap { key in + env?[key].map(CmuxTemplate.init) + }) + if let url { + templates.append(CmuxTemplate(url)) + } + return templates + } + + func substitutingTemplateValues(_ values: [String: String]) -> CmuxSurfaceDefinition { + CmuxSurfaceDefinition( + type: type, + name: name.map { CmuxTemplate($0).substituting(values) }, + command: command.map { CmuxTemplate($0).substituting(values) }, + cwd: cwd.map { CmuxTemplate($0).substituting(values) }, + env: env?.mapValues { CmuxTemplate($0).substituting(values) }, + url: url.map { CmuxTemplate($0).substituting(values) }, + focus: focus + ) + } +} diff --git a/Sources/CmuxWorkspaceDefinition.swift b/Sources/CmuxWorkspaceDefinition.swift index cb317b50d708..b0797f0ca37b 100644 --- a/Sources/CmuxWorkspaceDefinition.swift +++ b/Sources/CmuxWorkspaceDefinition.swift @@ -10,6 +10,8 @@ struct CmuxWorkspaceDefinition: Codable, Sendable, Hashable { /// Bootstrap command sent to the workspace's first terminal before that /// terminal's own surface `command`. Other panes do not wait for it. var setup: String? + /// Definition-level defaults for `{{variable}}` placeholders. + var params: [String: String]? var layout: CmuxLayoutNode? init( @@ -18,6 +20,7 @@ struct CmuxWorkspaceDefinition: Codable, Sendable, Hashable { color: String? = nil, env: [String: String]? = nil, setup: String? = nil, + params: [String: String]? = nil, layout: CmuxLayoutNode? = nil ) { self.name = name @@ -25,6 +28,7 @@ struct CmuxWorkspaceDefinition: Codable, Sendable, Hashable { self.color = color self.env = env self.setup = setup + self.params = params self.layout = layout } @@ -39,6 +43,7 @@ struct CmuxWorkspaceDefinition: Codable, Sendable, Hashable { } else { setup = nil } + params = try container.decodeIfPresent([String: String].self, forKey: .params) layout = try container.decodeIfPresent(CmuxLayoutNode.self, forKey: .layout) if let rawColor = try container.decodeIfPresent(String.self, forKey: .color) { diff --git a/Sources/ContentView+SavedLayoutCommands.swift b/Sources/ContentView+SavedLayoutCommands.swift index b2138fb7cb8f..a36d4369456e 100644 --- a/Sources/ContentView+SavedLayoutCommands.swift +++ b/Sources/ContentView+SavedLayoutCommands.swift @@ -1,4 +1,5 @@ import AppKit +import CmuxFoundation import CmuxCommandPalette import Foundation @@ -57,7 +58,13 @@ extension ContentView { NSSound.beep() return } - _ = tabManager.openWorkspace(fromSavedLayout: resolvedLayout, cwdOverride: nil, focus: true) + _ = try tabManager.openWorkspace( + fromSavedLayout: resolvedLayout, + cwdOverride: nil, + focus: true + ) + } catch let error as CmuxTemplateResolutionError { + WorkspaceTemplateErrorPresenter(presentingWindow: nil).present(error) } catch { NSSound.beep() } diff --git a/Sources/TabManager+SavedLayouts.swift b/Sources/TabManager+SavedLayouts.swift index b9d2d31423a5..6ccc3e692412 100644 --- a/Sources/TabManager+SavedLayouts.swift +++ b/Sources/TabManager+SavedLayouts.swift @@ -2,21 +2,41 @@ import Foundation extension TabManager { @discardableResult - func openWorkspace(fromSavedLayout layout: CmuxSavedLayout, cwdOverride: String?, focus: Bool) -> Workspace? { + func openWorkspace( + fromSavedLayout layout: CmuxSavedLayout, + cwdOverride: String?, + templateParameters: [String: String] = [:], + processEnvironment: [String: String] = ProcessInfo.processInfo.environment, + focus: Bool + ) throws -> Workspace { let baseCwd = FileManager.default.homeDirectoryForCurrentUser.path - let resolvedCwd = CmuxConfigStore.resolveCwd(cwdOverride ?? layout.workspace.cwd, relativeTo: baseCwd) + var template = layout.workspace + if let cwdOverride { + template.cwd = cwdOverride + } + let definition = try template.resolvingTemplateParameters( + templateParameters, + processEnvironment: processEnvironment + ) + let resolvedCwd = CmuxConfigStore.resolveCwd(definition.cwd, relativeTo: baseCwd) let workspace = addWorkspace( - title: layout.workspace.name ?? layout.name, + title: definition.name ?? layout.name, workingDirectory: resolvedCwd, - workspaceEnvironment: layout.workspace.env ?? [:], + workspaceEnvironment: definition.env ?? [:], inheritWorkingDirectory: false, select: focus ) - if let color = layout.workspace.color { + if let color = definition.color { workspace.setCustomColor(color) } - if let layoutNode = layout.workspace.layout { - workspace.applyCustomLayout(layoutNode, baseCwd: resolvedCwd) + if let layoutNode = definition.layout { + workspace.applyCustomLayout( + layoutNode, + baseCwd: resolvedCwd, + setupCommand: definition.setup + ) + } else if let setup = definition.setup { + workspace.sendConfigSetupCommand(setup) } return workspace } diff --git a/Sources/TerminalController+ControlLayoutContext.swift b/Sources/TerminalController+ControlLayoutContext.swift index 9a3501736796..10b850073155 100644 --- a/Sources/TerminalController+ControlLayoutContext.swift +++ b/Sources/TerminalController+ControlLayoutContext.swift @@ -1,4 +1,5 @@ import CmuxControlSocket +import CmuxFoundation import Foundation extension TerminalController: ControlLayoutContext { @@ -81,6 +82,7 @@ extension TerminalController: ControlLayoutContext { routing: ControlRoutingSelectors, name: String, cwd: String?, + templateParameters: [String: String], focusRequested: Bool ) -> ControlLayoutOpenResolution { v2MainSync { @@ -93,10 +95,15 @@ extension TerminalController: ControlLayoutContext { return .tabManagerUnavailable } let focus = v2FocusAllowed(requested: focusRequested) - guard let workspace = tabManager.openWorkspace(fromSavedLayout: layout, cwdOverride: cwd, focus: focus) else { - return .failed("Failed to open saved layout") - } + let workspace = try tabManager.openWorkspace( + fromSavedLayout: layout, + cwdOverride: cwd, + templateParameters: templateParameters, + focus: focus + ) return .opened(workspaceID: workspace.id) + } catch CmuxTemplateResolutionError.missingVariables(let names) { + return .missingParameters(names) } catch let error as SavedLayoutStoreError { return controlLayoutOpenError(error) } catch { diff --git a/Sources/TerminalController+WorkspaceCreate.swift b/Sources/TerminalController+WorkspaceCreate.swift index 657e96581100..0d5777bf79b9 100644 --- a/Sources/TerminalController+WorkspaceCreate.swift +++ b/Sources/TerminalController+WorkspaceCreate.swift @@ -1,3 +1,4 @@ +import CmuxFoundation import CmuxSettings import Foundation @@ -17,10 +18,10 @@ extension TerminalController { let workingDirectory = (requestedWorkingDirectory?.isEmpty == false) ? requestedWorkingDirectory : nil let requestedInitialCommand = v2RawString(params, "initial_command")?.trimmingCharacters(in: .whitespacesAndNewlines) - let initialCommand = (requestedInitialCommand?.isEmpty == false) ? requestedInitialCommand : nil + let initialCommandTemplate = (requestedInitialCommand?.isEmpty == false) ? requestedInitialCommand : nil let rawInitialEnv = v2StringMap(params, "initial_env") ?? [:] - let initialEnv = rawInitialEnv.reduce(into: [String: String]()) { result, pair in + let initialEnvTemplate = rawInitialEnv.reduce(into: [String: String]()) { result, pair in let key = pair.key.trimmingCharacters(in: .whitespacesAndNewlines) guard !key.isEmpty else { return } result[key] = pair.value @@ -28,24 +29,38 @@ extension TerminalController { // Persistent per-workspace environment (issue #5995): applied to the // initial shell and every later pane/surface/split, then round-tripped // through session restore. - let workspaceEnv = Workspace.sanitizedWorkspaceEnvironment( - v2StringMap(params, "workspace_env") ?? [:] - ) - let cwd: String? + let workspaceEnvTemplate = v2StringMap(params, "workspace_env") ?? [:] + let cwdTemplate: String? if let workingDirectory { - cwd = workingDirectory + cwdTemplate = workingDirectory } else if let raw = params["cwd"] { guard let str = raw as? String else { return .err(code: "invalid_params", message: "cwd must be a string", data: nil) } - cwd = str + cwdTemplate = str } else { - cwd = nil + cwdTemplate = nil } let requestedTitle = v2RawString(params, "title")?.trimmingCharacters(in: .whitespacesAndNewlines) - let title = (requestedTitle?.isEmpty == false) ? requestedTitle : nil - let description = v2RawString(params, "description") + let titleTemplate = (requestedTitle?.isEmpty == false) ? requestedTitle : nil + let descriptionTemplate = v2RawString(params, "description") + + let templateParameters: [String: String] + if v2HasNonNullParam(params, "template_params") { + guard let raw = params["template_params"] as? [String: Any], + raw.values.allSatisfy({ $0 is String }), + let parsed = v2StringMap(params, "template_params") else { + return .err( + code: "invalid_params", + message: "template_params must be an object with string values", + data: nil + ) + } + templateParameters = parsed + } else { + templateParameters = [:] + } let groupId = v2UUID(params, "group_id") if v2HasNonNullParam(params, "group_id"), groupId == nil { @@ -100,6 +115,43 @@ extension TerminalController { } } + let templateDefinition = CmuxWorkspaceDefinition( + name: titleTemplate, + cwd: cwdTemplate, + env: workspaceEnvTemplate, + layout: layoutNode + ) + let resolver = templateDefinition.templateResolver( + explicitParameters: templateParameters, + processEnvironment: ProcessInfo.processInfo.environment + ) + var additionalTemplates = [initialCommandTemplate, descriptionTemplate] + .compactMap { $0 } + .map(CmuxTemplate.init) + additionalTemplates.append(contentsOf: initialEnvTemplate.keys.sorted().compactMap { key in + initialEnvTemplate[key].map(CmuxTemplate.init) + }) + + let resolvedDefinition: CmuxWorkspaceDefinition + let initialCommand: String? + let initialEnv: [String: String] + let description: String? + do { + let values = try resolver.resolvedValues( + for: templateDefinition.templateStrings + additionalTemplates + ) + resolvedDefinition = templateDefinition.substitutingTemplateValues(values) + initialCommand = initialCommandTemplate.map { CmuxTemplate($0).substituting(values) } + initialEnv = initialEnvTemplate.mapValues { CmuxTemplate($0).substituting(values) } + description = descriptionTemplate.map { CmuxTemplate($0).substituting(values) } + } catch { + return workspaceTemplateResolutionFailure(error) + } + let title = resolvedDefinition.name + let cwd = resolvedDefinition.cwd + let workspaceEnv = Workspace.sanitizedWorkspaceEnvironment(resolvedDefinition.env ?? [:]) + layoutNode = resolvedDefinition.layout + var newId: UUID? var initialSurfaceId: UUID? let shouldFocus = v2FocusAllowed(requested: v2Bool(params, "focus") ?? false) diff --git a/Sources/TerminalController+WorkspaceTemplateParameters.swift b/Sources/TerminalController+WorkspaceTemplateParameters.swift new file mode 100644 index 000000000000..ae887a430413 --- /dev/null +++ b/Sources/TerminalController+WorkspaceTemplateParameters.swift @@ -0,0 +1,19 @@ +import CmuxFoundation +import Foundation + +extension TerminalController { + func workspaceTemplateResolutionFailure(_ error: Error) -> V2CallResult { + if case CmuxTemplateResolutionError.missingVariables(let names) = error { + return .err( + code: "missing_parameters", + message: "Missing workspace template parameters: \(names.joined(separator: ", "))", + data: ["missing_parameters": names] + ) + } + return .err( + code: "invalid_params", + message: "Workspace template parameters could not be resolved", + data: nil + ) + } +} diff --git a/Sources/WorkspaceTemplateErrorPresenter.swift b/Sources/WorkspaceTemplateErrorPresenter.swift new file mode 100644 index 000000000000..c1cc1b8846e1 --- /dev/null +++ b/Sources/WorkspaceTemplateErrorPresenter.swift @@ -0,0 +1,38 @@ +import AppKit +import CmuxFoundation +import Foundation + +@MainActor +struct WorkspaceTemplateErrorPresenter { + let presentingWindow: NSWindow? + + func present(_ error: Error) { + let message: String + if case CmuxTemplateResolutionError.missingVariables(let names) = error { + let format = String( + localized: "dialog.workspaceTemplate.missingParameters.message", + defaultValue: "Missing values for: %@" + ) + message = String.localizedStringWithFormat(format, names.joined(separator: ", ")) + } else { + message = String( + localized: "dialog.workspaceTemplate.failed.message", + defaultValue: "The workspace template could not be resolved." + ) + } + + let alert = NSAlert() + alert.alertStyle = .warning + alert.messageText = String( + localized: "dialog.workspaceTemplate.missingParameters.title", + defaultValue: "Workspace Parameters Required" + ) + alert.informativeText = message + alert.addButton(withTitle: String(localized: "common.ok", defaultValue: "OK")) + if let presentingWindow { + alert.beginSheetModal(for: presentingWindow) + } else { + _ = alert.runModal() + } + } +} diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index ea449a5a39f1..cdf0ff6168e7 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -401,6 +401,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources 7837E0057837E0057837E005 /* CLITmuxCompatResizePaneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7837E0067837E0067837E006 /* CLITmuxCompatResizePaneTests.swift */; }; 773600000000000000000001 /* CLIWindowCommandMockServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 773600000000000000000002 /* CLIWindowCommandMockServer.swift */; }; 773600000000000000000003 /* CLIWindowHandleRoutingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 773600000000000000000004 /* CLIWindowHandleRoutingTests.swift */; }; + 80590000000000000000000B /* CLIWorkspaceTemplateParameterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80590000000000000000000C /* CLIWorkspaceTemplateParameterTests.swift */; }; C10D51700000000000000002 /* ClosedItemHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10D51700000000000000001 /* ClosedItemHistory.swift */; }; 7375A0037375A0037375A003 /* ClosedMainWindowRoutingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7375A0047375A0047375A004 /* ClosedMainWindowRoutingTests.swift */; }; B9000025A1B2C3D4E5F60719 /* CloseWindowConfirmDialogUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9000026A1B2C3D4E5F60719 /* CloseWindowConfirmDialogUITests.swift */; }; @@ -492,6 +493,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources 7837A0017837A0017837A001 /* CMUXCLI+TmuxCompatResizePane.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7837A0027837A0027837A002 /* CMUXCLI+TmuxCompatResizePane.swift */; }; B9000044A1B2C3D4E5F60719 /* CMUXCLI+TmuxCompatSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9000045A1B2C3D4E5F60719 /* CMUXCLI+TmuxCompatSupport.swift */; }; B9000033A1B2C3D4E5F60719 /* CMUXCLI+TopRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9000032A1B2C3D4E5F60719 /* CMUXCLI+TopRendering.swift */; }; + 805900000000000000000009 /* CMUXCLI+WorkspaceTemplateParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80590000000000000000000A /* CMUXCLI+WorkspaceTemplateParameters.swift */; }; 06CC2F6C1340C7424D1C7E0A /* CMUXCLI+WorkspaceTodo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E5D35CC62B0F252F9EC2AD1 /* CMUXCLI+WorkspaceTodo.swift */; }; C0DE31390000000000000105 /* CMUXCLIErrorOutputRegressionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE31390000000000000106 /* CMUXCLIErrorOutputRegressionTests.swift */; }; A72C9F4179B54DF38E99A021 /* CmuxCLIPathInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4FE96C3F394FC6A6D4B018 /* CmuxCLIPathInstaller.swift */; }; @@ -510,6 +512,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources A5FB1305 /* CmuxConfigActionSaverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FB1306 /* CmuxConfigActionSaverTests.swift */; }; C0DEF0A40000000000000001 /* CmuxConfigContextMenuTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DEF0A40000000000000002 /* CmuxConfigContextMenuTests.swift */; }; A5FB120B /* CmuxConfigExecutor+WorkspaceLaunch.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FB120C /* CmuxConfigExecutor+WorkspaceLaunch.swift */; }; + 805900000000000000000001 /* CmuxConfigExecutor+WorkspaceParameterization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000002 /* CmuxConfigExecutor+WorkspaceParameterization.swift */; }; A5001652 /* CmuxConfigExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5001653 /* CmuxConfigExecutor.swift */; }; E30750000000000000000006 /* CmuxConfigNamedColorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E30750000000000000000005 /* CmuxConfigNamedColorTests.swift */; }; A5FB130C /* CmuxConfigNewWorkspaceDefaultLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FB130D /* CmuxConfigNewWorkspaceDefaultLayoutTests.swift */; }; @@ -618,6 +621,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources A28B087F0000000000000007 /* CmuxWebViewSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = A28B087F0000000000000008 /* CmuxWebViewSupport.swift */; }; 5E55200000000000000000B3 /* CmuxWindowing in Frameworks */ = {isa = PBXBuildFile; productRef = 5E55200000000000000000B2 /* CmuxWindowing */; }; 730600040000000000000001 /* CmuxWindowing in Frameworks */ = {isa = PBXBuildFile; productRef = 5E55200000000000000000B2 /* CmuxWindowing */; }; + 805900000000000000000003 /* CmuxWorkspaceDefinition+Parameterization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000004 /* CmuxWorkspaceDefinition+Parameterization.swift */; }; E30750000000000000000004 /* CmuxWorkspaceDefinition.swift in Sources */ = {isa = PBXBuildFile; fileRef = E30750000000000000000003 /* CmuxWorkspaceDefinition.swift */; }; A6AC72080000000000000001 /* CMUXWorkspaceLoadingCLIRegressionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6AC72080000000000000002 /* CMUXWorkspaceLoadingCLIRegressionTests.swift */; }; E3B7A3000000000000000103 /* CmuxWorkspaces in Frameworks */ = {isa = PBXBuildFile; productRef = E3B7A3000000000000000102 /* CmuxWorkspaces */; }; @@ -1579,6 +1583,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources C0DE00000000000000000C84 /* TerminalController+WorkspaceCreate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE00000000000000000C83 /* TerminalController+WorkspaceCreate.swift */; }; C0DE00000000000000000C8B /* TerminalController+WorkspaceGroupAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE00000000000000000C8A /* TerminalController+WorkspaceGroupAction.swift */; }; C0DE00000000000000000C89 /* TerminalController+WorkspaceMove.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE00000000000000000C88 /* TerminalController+WorkspaceMove.swift */; }; + 805900000000000000000005 /* TerminalController+WorkspaceTemplateParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000006 /* TerminalController+WorkspaceTemplateParameters.swift */; }; A5001007 /* TerminalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5001019 /* TerminalController.swift */; }; C0DE00000000000000000C32 /* TerminalControllerControlCommandContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE00000000000000000C31 /* TerminalControllerControlCommandContext.swift */; }; C7A50A000000000000000002 /* TerminalControllerPaneResizeSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7A50A000000000000000001 /* TerminalControllerPaneResizeSupport.swift */; }; @@ -1835,6 +1840,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources E3B7A4000000000000000003 /* WorkspaceTabColorEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B7A4000000000000000004 /* WorkspaceTabColorEntry.swift */; }; E30750000000000000000002 /* WorkspaceTabColorResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = E30750000000000000000001 /* WorkspaceTabColorResolution.swift */; }; E3B7A4000000000000000001 /* WorkspaceTabColorSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */; }; + 805900000000000000000007 /* WorkspaceTemplateErrorPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */; }; 6342F0C10000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */; }; 6047C0DE6047C0DE60470001 /* WorkspaceTerminalTabWorkingDirectoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */; }; 634AA6233A5BBF781FE83E89 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */; }; @@ -2314,6 +2320,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 7837E0067837E0067837E006 /* CLITmuxCompatResizePaneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CLITmuxCompatResizePaneTests.swift; sourceTree = "<group>"; }; 773600000000000000000002 /* CLIWindowCommandMockServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CLIWindowCommandMockServer.swift; sourceTree = "<group>"; }; 773600000000000000000004 /* CLIWindowHandleRoutingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CLIWindowHandleRoutingTests.swift; sourceTree = "<group>"; }; + 80590000000000000000000C /* CLIWorkspaceTemplateParameterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CLIWorkspaceTemplateParameterTests.swift; sourceTree = "<group>"; }; C10D51700000000000000001 /* ClosedItemHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClosedItemHistory.swift; sourceTree = "<group>"; }; 7375A0047375A0047375A004 /* ClosedMainWindowRoutingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClosedMainWindowRoutingTests.swift; sourceTree = "<group>"; }; B9000026A1B2C3D4E5F60719 /* CloseWindowConfirmDialogUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloseWindowConfirmDialogUITests.swift; sourceTree = "<group>"; }; @@ -2393,6 +2400,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 7837A0027837A0027837A002 /* CMUXCLI+TmuxCompatResizePane.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CMUXCLI+TmuxCompatResizePane.swift"; sourceTree = "<group>"; }; B9000045A1B2C3D4E5F60719 /* CMUXCLI+TmuxCompatSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CMUXCLI+TmuxCompatSupport.swift"; sourceTree = "<group>"; }; B9000032A1B2C3D4E5F60719 /* CMUXCLI+TopRendering.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CMUXCLI+TopRendering.swift"; sourceTree = "<group>"; }; + 80590000000000000000000A /* CMUXCLI+WorkspaceTemplateParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CMUXCLI+WorkspaceTemplateParameters.swift"; sourceTree = "<group>"; }; 7E5D35CC62B0F252F9EC2AD1 /* CMUXCLI+WorkspaceTodo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CMUXCLI+WorkspaceTodo.swift"; sourceTree = "<group>"; }; C0DE31390000000000000106 /* CMUXCLIErrorOutputRegressionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CMUXCLIErrorOutputRegressionTests.swift; sourceTree = "<group>"; }; 8A4FE96C3F394FC6A6D4B018 /* CmuxCLIPathInstaller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App/CmuxCLIPathInstaller.swift; sourceTree = "<group>"; }; @@ -2409,6 +2417,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = A5FB1306 /* CmuxConfigActionSaverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigActionSaverTests.swift; sourceTree = "<group>"; }; C0DEF0A40000000000000002 /* CmuxConfigContextMenuTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigContextMenuTests.swift; sourceTree = "<group>"; }; A5FB120C /* CmuxConfigExecutor+WorkspaceLaunch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxConfigExecutor+WorkspaceLaunch.swift"; sourceTree = "<group>"; }; + 805900000000000000000002 /* CmuxConfigExecutor+WorkspaceParameterization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxConfigExecutor+WorkspaceParameterization.swift"; sourceTree = "<group>"; }; A5001653 /* CmuxConfigExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigExecutor.swift; sourceTree = "<group>"; }; E30750000000000000000005 /* CmuxConfigNamedColorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigNamedColorTests.swift; sourceTree = "<group>"; }; A5FB130D /* CmuxConfigNewWorkspaceDefaultLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigNewWorkspaceDefaultLayoutTests.swift; sourceTree = "<group>"; }; @@ -2479,6 +2488,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = C0DE58990000000000000002 /* CmuxWebViewKeyDownReentryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxWebViewKeyDownReentryTests.swift; sourceTree = "<group>"; }; 43F90FAF3FD44F11BF547BE9 /* CmuxWebViewMouseNavigationButtonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxWebViewMouseNavigationButtonTests.swift; sourceTree = "<group>"; }; A28B087F0000000000000008 /* CmuxWebViewSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Panels/CmuxWebViewSupport.swift; sourceTree = "<group>"; }; + 805900000000000000000004 /* CmuxWorkspaceDefinition+Parameterization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxWorkspaceDefinition+Parameterization.swift"; sourceTree = "<group>"; }; E30750000000000000000003 /* CmuxWorkspaceDefinition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxWorkspaceDefinition.swift; sourceTree = "<group>"; }; A6AC72080000000000000002 /* CMUXWorkspaceLoadingCLIRegressionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CMUXWorkspaceLoadingCLIRegressionTests.swift; sourceTree = "<group>"; }; C0A1E5CE01C0A1E5CE01A002 /* CoalesceLatestPublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoalesceLatestPublisher.swift; sourceTree = "<group>"; }; @@ -3419,6 +3429,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = C0DE00000000000000000C83 /* TerminalController+WorkspaceCreate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TerminalController+WorkspaceCreate.swift"; sourceTree = "<group>"; }; C0DE00000000000000000C8A /* TerminalController+WorkspaceGroupAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TerminalController+WorkspaceGroupAction.swift"; sourceTree = "<group>"; }; C0DE00000000000000000C88 /* TerminalController+WorkspaceMove.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TerminalController+WorkspaceMove.swift"; sourceTree = "<group>"; }; + 805900000000000000000006 /* TerminalController+WorkspaceTemplateParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TerminalController+WorkspaceTemplateParameters.swift"; sourceTree = "<group>"; }; A5001019 /* TerminalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalController.swift; sourceTree = "<group>"; }; C0DE00000000000000000C31 /* TerminalControllerControlCommandContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalControllerControlCommandContext.swift; sourceTree = "<group>"; }; C7A50A000000000000000001 /* TerminalControllerPaneResizeSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalControllerPaneResizeSupport.swift; sourceTree = "<group>"; }; @@ -3675,6 +3686,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E3B7A4000000000000000004 /* WorkspaceTabColorEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorEntry.swift; sourceTree = "<group>"; }; E30750000000000000000001 /* WorkspaceTabColorResolution.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorResolution.swift; sourceTree = "<group>"; }; E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorSettings.swift; sourceTree = "<group>"; }; + 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateErrorPresenter.swift; sourceTree = "<group>"; }; 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalFocusRecoveryTests.swift; sourceTree = "<group>"; }; 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalTabWorkingDirectoryTests.swift; sourceTree = "<group>"; }; 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalWorkingDirectoryFallbackTests.swift; sourceTree = "<group>"; }; @@ -3979,6 +3991,10 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = A5001041 /* Sources */ = { isa = PBXGroup; children = ( + 805900000000000000000002 /* CmuxConfigExecutor+WorkspaceParameterization.swift */, + 805900000000000000000004 /* CmuxWorkspaceDefinition+Parameterization.swift */, + 805900000000000000000006 /* TerminalController+WorkspaceTemplateParameters.swift */, + 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */, 3023B1003023B1003023B100 /* ConfigSource.swift */, 3023B1013023B1013023B101 /* ConfigSettingsView.swift */, A11EAB000000000000000001 /* AppearanceSettings.swift */, @@ -5090,6 +5106,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = B9000003A1B2C3D4E5F60719 /* CLI */ = { isa = PBXGroup; children = ( + 80590000000000000000000A /* CMUXCLI+WorkspaceTemplateParameters.swift */, B9000001A1B2C3D4E5F60719 /* cmux.swift */, REE0CA0000000000000000C1 /* CMUXCLI+Remotes.swift */, C77070000000000000000001 /* SSHPTYAttachExitCode.swift */, @@ -5171,6 +5188,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = F1000003A1B2C3D4E5F60718 /* cmuxTests */ = { isa = PBXGroup; children = ( + 80590000000000000000000C /* CLIWorkspaceTemplateParameterTests.swift */, F2000001A1B2C3D4E5F60718 /* UpdatePillReleaseVisibilityTests.swift */, F3000001A1B2C3D4E5F60718 /* CJKIMEInputTests.swift */, D3571003A1B2C3D4E5F60718 /* CJKIMEMarkedSelectionTests.swift */, @@ -6350,6 +6368,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = A5FB1209 /* CmuxConfigActionDefinition.swift in Sources */, A5FB1201 /* CmuxConfigActionSaver.swift in Sources */, A5FB120B /* CmuxConfigExecutor+WorkspaceLaunch.swift in Sources */, + 805900000000000000000001 /* CmuxConfigExecutor+WorkspaceParameterization.swift in Sources */, A5001652 /* CmuxConfigExecutor.swift in Sources */, C5D0DEC0CF00000000000A1 /* CmuxConfigStore+ConfigStoreReloading.swift in Sources */, C0DEF0A10000000000000001 /* CmuxConfigUI.swift in Sources */, @@ -6395,6 +6414,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = C67540030000000000000001 /* CmuxWebView+SubframeDownloadIntentScript.swift in Sources */, A5001500 /* CmuxWebView.swift in Sources */, A28B087F0000000000000007 /* CmuxWebViewSupport.swift in Sources */, + 805900000000000000000003 /* CmuxWorkspaceDefinition+Parameterization.swift in Sources */, E30750000000000000000004 /* CmuxWorkspaceDefinition.swift in Sources */, C0A1E5CE01C0A1E5CE01A001 /* CoalesceLatestPublisher.swift in Sources */, A9F200000000000000000016 /* CodexAppServerQueuedInput.swift in Sources */, @@ -7035,6 +7055,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = C0DE00000000000000000C84 /* TerminalController+WorkspaceCreate.swift in Sources */, C0DE00000000000000000C8B /* TerminalController+WorkspaceGroupAction.swift in Sources */, C0DE00000000000000000C89 /* TerminalController+WorkspaceMove.swift in Sources */, + 805900000000000000000005 /* TerminalController+WorkspaceTemplateParameters.swift in Sources */, A5001007 /* TerminalController.swift in Sources */, C0DE00000000000000000C32 /* TerminalControllerControlCommandContext.swift in Sources */, C7A50A000000000000000002 /* TerminalControllerPaneResizeSupport.swift in Sources */, @@ -7223,6 +7244,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E3B7A4000000000000000003 /* WorkspaceTabColorEntry.swift in Sources */, E30750000000000000000002 /* WorkspaceTabColorResolution.swift in Sources */, E3B7A4000000000000000001 /* WorkspaceTabColorSettings.swift in Sources */, + 805900000000000000000007 /* WorkspaceTemplateErrorPresenter.swift in Sources */, 5732A0075732A0075732A007 /* WorkspaceTitlebarModeLayer.swift in Sources */, 7D7D087CAACD917D8163F844 /* WorkspaceTodoFeature.swift in Sources */, 249969F7EAC03A99E20C753B /* WorkspaceTodoPanel.swift in Sources */, @@ -7298,6 +7320,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 7837A0017837A0017837A001 /* CMUXCLI+TmuxCompatResizePane.swift in Sources */, B9000044A1B2C3D4E5F60719 /* CMUXCLI+TmuxCompatSupport.swift in Sources */, B9000033A1B2C3D4E5F60719 /* CMUXCLI+TopRendering.swift in Sources */, + 805900000000000000000009 /* CMUXCLI+WorkspaceTemplateParameters.swift in Sources */, 06CC2F6C1340C7424D1C7E0A /* CMUXCLI+WorkspaceTodo.swift in Sources */, C0DECAFE0000000000000001 /* CodexTeamsApprovalBridge.swift in Sources */, FEEDC1A50000000000000001 /* FeedEventClassifier.swift in Sources */, @@ -7510,6 +7533,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 7837E0057837E0057837E005 /* CLITmuxCompatResizePaneTests.swift in Sources */, 773600000000000000000001 /* CLIWindowCommandMockServer.swift in Sources */, 773600000000000000000003 /* CLIWindowHandleRoutingTests.swift in Sources */, + 80590000000000000000000B /* CLIWorkspaceTemplateParameterTests.swift in Sources */, 7375A0037375A0037375A003 /* ClosedMainWindowRoutingTests.swift in Sources */, C75740010000000000000001 /* CloudVMMenuItemMetricsTests.swift in Sources */, C0DE43000000000000000009 /* CmuxAgentChatConfigTests.swift in Sources */, diff --git a/cmuxTests/CLIWorkspaceTemplateParameterTests.swift b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift new file mode 100644 index 000000000000..1142d96a2dbc --- /dev/null +++ b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift @@ -0,0 +1,177 @@ +import Darwin +import Foundation +import XCTest + +extension CLINotifyProcessIntegrationRegressionTests { + func testWorkspaceCreateForwardsRepeatableTemplateParametersAndResolvesCommand() throws { + let socketPath = makeSocketPath("workspace-template") + let listenerFD = try bindUnixSocket(at: socketPath) + defer { + Darwin.close(listenerFD) + unlink(socketPath) + } + let state = MockSocketServerState() + let handled = startMockServer( + listenerFD: listenerFD, + state: state, + fulfillWhen: { line in + self.jsonObject(line)?["method"] as? String == "surface.send_text" + } + ) { line in + guard let request = self.jsonObject(line), + let id = request["id"] as? String, + let method = request["method"] as? String else { + return "OK" + } + switch method { + case "workspace.create": + return self.v2Response( + id: id, + ok: true, + result: ["workspace_ref": "workspace:9"] + ) + case "surface.send_text": + return self.v2Response(id: id, ok: true, result: [:]) + default: + return self.v2Response( + id: id, + ok: false, + error: ["code": "unexpected_method", "message": method] + ) + } + } + + var environment = workspaceTemplateCLIEnvironment(socketPath: socketPath) + environment["apiPort"] = "4100" + let result = runProcess( + executablePath: try bundledCLIPath(), + arguments: [ + "workspace", "create", + "--name", "Dev {{ticket}}", + "--command", "api --ticket {{ticket}} --port {{apiPort}}", + "--param", "ticket=FIRST", + "--param=ticket=BERKS-87", + "--param", "apiPort", + "--focus", "false", + ], + environment: environment, + timeout: 5 + ) + + wait(for: [handled], timeout: processTimeout(5)) + XCTAssertFalse(result.timedOut, result.stderr) + XCTAssertEqual(result.status, 0, result.stderr) + + let requests = state.snapshot().compactMap(jsonObject) + let create = try XCTUnwrap(requests.first { $0["method"] as? String == "workspace.create" }) + let createParams = try XCTUnwrap(create["params"] as? [String: Any]) + XCTAssertEqual(createParams["title"] as? String, "Dev {{ticket}}") + XCTAssertEqual(createParams["focus"] as? Bool, false) + XCTAssertEqual( + createParams["template_params"] as? [String: String], + ["ticket": "BERKS-87", "apiPort": "4100"] + ) + + let send = try XCTUnwrap(requests.first { $0["method"] as? String == "surface.send_text" }) + let sendParams = try XCTUnwrap(send["params"] as? [String: Any]) + XCTAssertEqual(sendParams["workspace_id"] as? String, "workspace:9") + XCTAssertEqual(sendParams["text"] as? String, "api --ticket BERKS-87 --port 4100\r") + } + + func testLayoutOpenForwardsTemplateParametersWithoutFocus() throws { + let socketPath = makeSocketPath("layout-template") + let listenerFD = try bindUnixSocket(at: socketPath) + defer { + Darwin.close(listenerFD) + unlink(socketPath) + } + let state = MockSocketServerState() + let handled = startMockServer(listenerFD: listenerFD, state: state) { line in + guard let request = self.jsonObject(line), + let id = request["id"] as? String, + let method = request["method"] as? String else { + return "OK" + } + guard method == "layout.open" else { + return self.v2Response( + id: id, + ok: false, + error: ["code": "unexpected_method", "message": method] + ) + } + return self.v2Response( + id: id, + ok: true, + result: ["workspace_ref": "workspace:4"] + ) + } + + let result = runProcess( + executablePath: try bundledCLIPath(), + arguments: [ + "layout", "open", "Ticket Dev", + "--param", "ticket=BERKS-87", + "--param", "vitePort=5174", + "--focus", "false", + ], + environment: workspaceTemplateCLIEnvironment(socketPath: socketPath), + timeout: 5 + ) + + wait(for: [handled], timeout: processTimeout(5)) + XCTAssertFalse(result.timedOut, result.stderr) + XCTAssertEqual(result.status, 0, result.stderr) + + let request = try XCTUnwrap(state.snapshot().compactMap(jsonObject).first) + XCTAssertEqual(request["method"] as? String, "layout.open") + let params = try XCTUnwrap(request["params"] as? [String: Any]) + XCTAssertEqual(params["focus"] as? Bool, false) + XCTAssertEqual( + params["template_params"] as? [String: String], + ["ticket": "BERKS-87", "vitePort": "5174"] + ) + } + + func testWorkspaceTemplateParameterRejectsInvalidNameBeforeSocketMutation() throws { + let socketPath = makeSocketPath("invalid-template") + let result = runProcess( + executablePath: try bundledCLIPath(), + arguments: ["workspace", "create", "--param", "bad.name=value"], + environment: workspaceTemplateCLIEnvironment(socketPath: socketPath), + timeout: 5 + ) + + XCTAssertFalse(result.timedOut, result.stderr) + XCTAssertEqual(result.status, 1, result.stderr) + XCTAssertTrue(result.stderr.contains("invalid template parameter name 'bad.name'"), result.stderr) + XCTAssertFalse(FileManager.default.fileExists(atPath: socketPath)) + } + + func testWorkspaceTemplateParameterImportsMustExist() throws { + let socketPath = makeSocketPath("missing-template") + var environment = workspaceTemplateCLIEnvironment(socketPath: socketPath) + environment.removeValue(forKey: "CMUX_PARAMETER_THAT_IS_NOT_SET") + let result = runProcess( + executablePath: try bundledCLIPath(), + arguments: ["workspace", "create", "--param", "CMUX_PARAMETER_THAT_IS_NOT_SET"], + environment: environment, + timeout: 5 + ) + + XCTAssertFalse(result.timedOut, result.stderr) + XCTAssertEqual(result.status, 1, result.stderr) + XCTAssertTrue(result.stderr.contains("could not import an unset environment variable"), result.stderr) + XCTAssertFalse(FileManager.default.fileExists(atPath: socketPath)) + } + + private func workspaceTemplateCLIEnvironment(socketPath: String) -> [String: String] { + var environment = ProcessInfo.processInfo.environment + for key in Array(environment.keys) where key.hasPrefix("CMUX_") { + environment.removeValue(forKey: key) + } + environment["CMUX_SOCKET_PATH"] = socketPath + environment["CMUX_CLI_SENTRY_DISABLED"] = "1" + environment["CMUXTERM_CLI_RESPONSE_TIMEOUT_SEC"] = "2" + return environment + } +} From 55431fc3fa3e072d48d4e6d6edd9ac844cef23b7 Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Tue, 14 Jul 2026 13:21:21 -0700 Subject: [PATCH 03/16] docs: describe workspace template parameters --- docs/cli-contract.md | 90 ++++++++++- .../(landing)/docs/custom-commands/page.tsx | 73 +++++++++ web/data/cmux.schema.json | 152 +++++++++++++++++- web/messages/ar.json | 5 + web/messages/bs.json | 5 + web/messages/da.json | 5 + web/messages/de.json | 5 + web/messages/en.json | 5 + web/messages/es.json | 5 + web/messages/fr.json | 5 + web/messages/it.json | 5 + web/messages/ja.json | 5 + web/messages/km.json | 5 + web/messages/ko.json | 5 + web/messages/no.json | 5 + web/messages/pl.json | 5 + web/messages/pt-BR.json | 5 + web/messages/ru.json | 5 + web/messages/th.json | 5 + web/messages/tr.json | 5 + web/messages/uk.json | 5 + web/messages/zh-CN.json | 5 + web/messages/zh-TW.json | 5 + 23 files changed, 410 insertions(+), 5 deletions(-) diff --git a/docs/cli-contract.md b/docs/cli-contract.md index 025bd430f41a..b0f4a5cc0d63 100644 --- a/docs/cli-contract.md +++ b/docs/cli-contract.md @@ -100,10 +100,11 @@ Environment: | `reorder-workspaces` | Atomically reorder workspaces inside pinned and unpinned groups. | | `workspace-action` | Run workspace context-menu actions from the CLI. | | `workspace` | Namespace for workspace verbs: `list`, `create`, `env`, `close`, `rename`, `select`, `status`, `reconnect`, `disconnect`, `group`. `workspace status` prints the workspace's todo lifecycle status (effective, inferred, override); `workspace status set <todo\|working\|needs-attention\|review\|done\|auto>` pins a manual lane (`auto` clears it; a pinned lane auto-clears once the inferred lane changes). `workspace env` prints a workspace's configured environment variables (see [Workspace environment variables](#workspace-environment-variables)); pass `--mask` to redact the values. `workspace reconnect` manually reconnects a remote (SSH) workspace — including one whose automatic reconnect suspended because the host was unreachable — and `workspace disconnect` stops its remote connection. `env`, `reconnect`, and `disconnect` accept a positional workspace handle or `--workspace <id\|ref\|index>`, defaulting to the caller's workspace, then the selected one. | +| `layout` | Save, list, inspect, open, and delete named workspace layouts. `layout open <name>` accepts repeatable `--param KEY=VALUE` or `--param KEY` template values and defaults to `--focus false`. | | `todo` | Per-workspace checklist namespace: `add "text" [--state <pending\|in-progress\|completed>] [--origin <user\|agent>]`, `list`, `check <index\|id>`, `uncheck <index\|id>`, `start <index\|id>` (in-progress), `edit <index\|id> "text"`, `rm <index\|id>`, `clear`, `set ['<json>']` (atomic replace from a JSON item array, inline or piped on stdin), `open` (open or focus the workspace's todo pane). Targets the caller's workspace by default with `--workspace <id\|ref\|index>` override; `<index>` is the 1-based number printed by `todo list`. Items cap at 50 per workspace. See [Workspace todos](#workspace-todos). | | `move-tab-to-new-workspace` | Move a tab or surface into a newly created workspace. | | `list-workspaces` | List workspaces. | -| `new-workspace` | Create a workspace, optionally with cwd, command, description, layout, and per-workspace environment variables (`--env KEY=VALUE` repeatable, `--env-file <path>`). See [Workspace environment variables](#workspace-environment-variables). | +| `new-workspace` | Create a workspace, optionally with cwd, command, description, layout, per-workspace environment variables (`--env KEY=VALUE` repeatable, `--env-file <path>`), and repeatable workspace template values (`--param KEY=VALUE` or `--param KEY`). See [Parameterized workspace layouts](#parameterized-workspace-layouts) and [Workspace environment variables](#workspace-environment-variables). | | `ssh` | Open an SSH-backed workspace. Preserves the caller's live `SSH_AUTH_SOCK` for app-launched OpenSSH processes so `ForwardAgent yes` from ssh_config works normally. Supports `-A` / `--forward-agent` to request forwarding and `-a` / `--no-forward-agent` to disable forwarding for a workspace. Agent forwarding remains opt-in because forwarded agents can be used by processes on the remote host while the SSH session is active. | | `remote-daemon-status` | Print bundled remote daemon version, asset, checksum, and cache status. | | `ssh-session-list` | List persisted SSH PTY sessions for one remote workspace or all remote workspaces. Supports `--json`. | @@ -226,6 +227,93 @@ Workspace and tab action names: | `workspace-action` | `pin`, `unpin`, `rename`, `clear-name`, `set-description`, `clear-description`, `move-up`, `move-down`, `move-top`, `close-others`, `close-above`, `close-below`, `mark-read`, `mark-unread`, `set-color`, `clear-color` | | `tab-action` | `rename`, `clear-name`, `close-left`, `close-right`, `close-others`, `new-terminal-right`, `new-browser-right`, `reload`, `duplicate`, `pin`, `unpin`, `mark-unread` | +### Parameterized workspace layouts + +Workspace definitions in `cmux.json` and `~/.config/cmux/layouts.json`, plus +layouts sent to `workspace.create`, may use `{{name}}` placeholders in launch +strings. `{{name=default}}` supplies an inline fallback, and `\{{name}}` emits a +literal `{{name}}`. Names use the same grammar as custom-command parameters: +they start with a letter or `_` and continue with letters, digits, `_`, or `-`. + +Parameterization covers the workspace `name`, `cwd`, `setup`, and `env` values; +surface `name`, `command`, `cwd`, `env` values, and `url`; and the corresponding +title, description, initial command, and initial environment fields on +`workspace.create`. Structural values (`type`, `direction`, numeric `split`, +`focus`, and `color`) remain typed and are not templates. Substitution is +literal because the same value can appear in a path, URL, title, environment +value, or command fragment. Callers must quote or validate values as appropriate +when inserting them into shell commands. + +Every launch uses one precedence order, highest first: + +1. Explicit invocation values (`--param` or socket `template_params`). +2. The workspace definition's `params` defaults. +3. Literal workspace-level `env` values with the same key. +4. The launching cmux app process environment. +5. The placeholder's inline `{{name=default}}` value. + +Values are not recursively expanded. Before creating any workspace, pane, or +browser surface, cmux preflights the entire definition. If required values are +still missing, the launch fails atomically with error code `missing_parameters` +and a `missing_parameters` array listing every missing name in first-occurrence +order. + +CLI invocation: + +```bash +cmux workspace create \ + --name 'Dev {{ticket}}' \ + --cwd '~/code/app/wt/{{ticket}}' \ + --param ticket=BERKS-87 \ + --focus false + +cmux layout open 'Ticket Dev' \ + --param ticket=BERKS-87 \ + --param apiPort=8087 \ + --param vitePort=5187 \ + --focus false +``` + +`--param KEY=VALUE` is repeatable and the last occurrence wins. `--param KEY` +copies that variable from the invoking shell environment into the explicit +parameter map; it fails locally if the variable is unset. This explicit import +keeps the CLI/App boundary predictable instead of forwarding the entire shell +environment over the control socket. + +The v2 socket forms use an object of string values: + +```json +{ + "method": "workspace.create", + "params": { + "layout": { "pane": { "surfaces": [{ "type": "browser", "url": "http://localhost:{{vitePort}}" }] } }, + "template_params": { "vitePort": "5187" }, + "focus": false + } +} +``` + +```json +{ + "method": "layout.open", + "params": { + "name": "Ticket Dev", + "template_params": { + "ticket": "BERKS-87", + "apiPort": "8087", + "vitePort": "5187" + }, + "focus": false + } +} +``` + +For example, one saved `Ticket Dev` layout can use +`~/code/app/wt/{{ticket}}`, set `API_PORT={{apiPort}}` and +`VITE_PORT={{vitePort}}`, run commands containing those ports, and open +`http://localhost:{{vitePort}}`. The second command above launches a concrete +per-ticket workspace without generating a replacement layout with `jq`. + ### Workspace environment variables A workspace can carry a set of user-defined environment variables that every diff --git a/web/app/[locale]/(landing)/docs/custom-commands/page.tsx b/web/app/[locale]/(landing)/docs/custom-commands/page.tsx index ee6f607934b9..457417ba1b11 100644 --- a/web/app/[locale]/(landing)/docs/custom-commands/page.tsx +++ b/web/app/[locale]/(landing)/docs/custom-commands/page.tsx @@ -461,9 +461,82 @@ export default function CustomCommandsPage() { <li><code>color</code>: {t("wsFieldColor")}</li> <li><code>env</code>: {t("wsFieldEnv")}</li> <li><code>setup</code>: {t("wsFieldSetup")}</li> + <li><code>params</code>: {t("wsFieldParams")}</li> <li><code>layout</code>: {t("wsFieldLayout")}</li> </ul> + <DocsHeading level={3} id="parameterized-workspace-layouts">{t("parameterizedLayouts")}</DocsHeading> + <p> + {t.rich("parameterizedLayoutsDesc", { + variableSyntax: "{{name}}", + defaultSyntax: "{{name=default}}", + escapedSyntax: "\\{{name}}", + variable: (chunks) => <code>{chunks}</code>, + defaultValue: (chunks) => <code>{chunks}</code>, + escaped: (chunks) => <code>{chunks}</code>, + params: (chunks) => <code>{chunks}</code>, + })} + </p> + <p> + {t.rich("parameterizedLayoutsPrecedence", { + explicit: (chunks) => <strong>{chunks}</strong>, + params: (chunks) => <code>{chunks}</code>, + env: (chunks) => <code>{chunks}</code>, + process: (chunks) => <strong>{chunks}</strong>, + inline: (chunks) => <strong>{chunks}</strong>, + })} + </p> + <CodeBlock title="cmux.json" lang="json">{`{ + "commands": [ + { + "name": "Ticket Dev", + "workspace": { + "name": "{{ticket}} Dev", + "cwd": "~/code/app/wt/{{ticket}}", + "params": { "apiPort": "8080", "vitePort": "5173" }, + "env": { + "TICKET": "{{ticket}}", + "API_PORT": "{{apiPort}}", + "VITE_PORT": "{{vitePort}}" + }, + "layout": { + "direction": "horizontal", + "split": 0.5, + "children": [ + { + "pane": { + "surfaces": [{ + "type": "terminal", + "name": "API {{ticket}}", + "command": "npm run api -- --port {{apiPort}}" + }] + } + }, + { + "pane": { + "surfaces": [{ + "type": "browser", + "name": "Vite {{ticket}}", + "url": "http://localhost:{{vitePort}}" + }] + } + } + ] + } + } + } + ] +}`}</CodeBlock> + <p> + {t.rich("parameterizedLayoutsCLI", { + paramValue: (chunks) => <code>{chunks}</code>, + paramEnv: (chunks) => <code>{chunks}</code>, + workspaceCreate: (chunks) => <code>{chunks}</code>, + layoutOpen: (chunks) => <code>{chunks}</code>, + missing: (chunks) => <code>{chunks}</code>, + })} + </p> + <DocsHeading level={3} id="restart-behavior">{t("restartBehavior")}</DocsHeading> <p>{t("restartBehaviorDesc")}</p> <ul> diff --git a/web/data/cmux.schema.json b/web/data/cmux.schema.json index 0e9938aabfbc..f1685df91820 100644 --- a/web/data/cmux.schema.json +++ b/web/data/cmux.schema.json @@ -32,9 +32,17 @@ }, "actions": { "title": "actions", - "description": "Action registry used by the surface tab bar, Command Palette, shortcuts, and plus-button menu. Each entry supports type \"builtin\", \"command\", \"agent\" (any CLI agent name, e.g. claude, codex, opencode, or a custom binary, with optional args), \"workspaceCommand\", or \"workspace\" (inline workspace with name/cwd/color/env/setup/layout, plus optional restart). Inline workspace entries are auto-offered in the new-workspace plus-button menu; set newWorkspaceMenu true/false on any action to override. \"Save Workspace as Layout\" in the plus-button menu writes entries here.", + "description": "Action registry used by the surface tab bar, Command Palette, shortcuts, and plus-button menu. Each entry supports type \"builtin\", \"command\", \"agent\" (any CLI agent name, e.g. claude, codex, opencode, or a custom binary, with optional args), \"workspaceCommand\", or \"workspace\" (inline workspace with name/cwd/color/env/setup/params/layout, plus optional restart). Inline workspace entries are auto-offered in the new-workspace plus-button menu; set newWorkspaceMenu true/false on any action to override. \"Save Workspace as Layout\" in the plus-button menu writes entries here.", "type": "object", - "additionalProperties": true + "additionalProperties": { + "type": "object", + "additionalProperties": true, + "properties": { + "workspace": { + "$ref": "#/$defs/workspaceDefinition" + } + } + } }, "ui": { "title": "ui", @@ -58,11 +66,16 @@ }, "commands": { "title": "commands", - "description": "Custom shell commands and workspace layout definitions. Workspace definitions support name, cwd, color, env, layout, and setup (a bootstrap command sent to the first terminal before its own command).", + "description": "Custom shell commands and workspace layout definitions. Workspace definitions support name, cwd, color, env, layout, setup, and params defaults for launch-time {{variable}} placeholders.", "type": "array", "items": { "type": "object", - "additionalProperties": true + "additionalProperties": true, + "properties": { + "workspace": { + "$ref": "#/$defs/workspaceDefinition" + } + } } }, "agentChat": { @@ -1720,6 +1733,137 @@ } }, "$defs": { + "workspaceDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Workspace title. Supports {{name}} and {{name=default}} placeholders resolved at launch." + }, + "cwd": { + "type": "string", + "description": "Workspace working directory. Supports {{name}} and {{name=default}} placeholders resolved at launch." + }, + "color": { + "type": "string", + "description": "Workspace color name or 6-digit hex value. This structural value is not parameterized." + }, + "env": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Workspace environment value. Supports {{name}} and {{name=default}} placeholders resolved at launch." + }, + "description": "Environment inherited by every shell in the workspace. Literal values can also supply same-named template variables." + }, + "setup": { + "type": "string", + "description": "Bootstrap command sent to the first terminal. Supports {{name}} and {{name=default}} placeholders resolved literally at launch." + }, + "params": { + "$ref": "#/$defs/workspaceTemplateParams" + }, + "layout": { + "$ref": "#/$defs/workspaceLayoutNode" + } + } + }, + "workspaceTemplateParams": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Default values for workspace {{variable}} placeholders. Explicit invocation template_params/--param values take precedence." + }, + "workspaceLayoutNode": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "required": ["pane"], + "properties": { + "pane": { + "type": "object", + "additionalProperties": false, + "required": ["surfaces"], + "properties": { + "surfaces": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/workspaceSurfaceDefinition" + } + } + } + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": ["direction", "children"], + "properties": { + "direction": { + "type": "string", + "enum": ["horizontal", "vertical"] + }, + "split": { + "type": "number", + "minimum": 0.1, + "maximum": 0.9, + "description": "Divider position. Structural numeric values are not parameterized." + }, + "children": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "$ref": "#/$defs/workspaceLayoutNode" + } + } + } + } + ] + }, + "workspaceSurfaceDefinition": { + "type": "object", + "additionalProperties": false, + "required": ["type"], + "properties": { + "type": { + "type": "string", + "enum": ["terminal", "browser", "project"], + "description": "Structural surface kind; not parameterized." + }, + "name": { + "type": "string", + "description": "Surface title. Supports {{name}} and {{name=default}} placeholders." + }, + "command": { + "type": "string", + "description": "Terminal command. Supports literal {{name}} and {{name=default}} substitution at launch." + }, + "cwd": { + "type": "string", + "description": "Surface working directory. Supports {{name}} and {{name=default}} placeholders." + }, + "env": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Surface environment value. Supports {{name}} and {{name=default}} placeholders." + } + }, + "url": { + "type": "string", + "description": "Browser URL. Supports {{name}} and {{name=default}} placeholders." + }, + "focus": { + "type": "boolean" + } + } + }, "colorHex": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$", diff --git a/web/messages/ar.json b/web/messages/ar.json index 26cd8dd2a38f..a25de9e1d05a 100644 --- a/web/messages/ar.json +++ b/web/messages/ar.json @@ -1064,6 +1064,11 @@ "absolutePath": "مسار مطلق", "cwdAbsolute": "يُستخدم كما هو", "fullExample": "مثال كامل", + "wsFieldParams": "القيم الافتراضية لمتغيرات قالب مساحة العمل", + "parameterizedLayouts": "تخطيطات مساحة عمل ذات معلمات", + "parameterizedLayoutsDesc": "استخدم <variable>{variableSyntax}</variable> أو <defaultValue>{defaultSyntax}</defaultValue> في العناوين والمسارات وقيم البيئة وأوامر الإعداد والطرفية وروابط المتصفح. أضف <escaped>{escapedSyntax}</escaped> لإبقاء العنصر النائب حرفياً. يوفر كائن <params>params</params> قيماً افتراضية قابلة لإعادة الاستخدام.", + "parameterizedLayoutsPrecedence": "ترتيب الحل هو <explicit>قيم الاستدعاء الصريحة</explicit>، ثم افتراضيات <params>params</params>، ثم <env>env</env> الحرفية لمساحة العمل، ثم <process>بيئة عملية cmux</process>، وأخيراً <inline>الافتراضي المضمّن</inline>. تؤدي القيم المطلوبة المفقودة إلى إلغاء التشغيل كله قبل إنشاء أي مساحة عمل.", + "parameterizedLayoutsCLI": "استخدم <paramValue>--param KEY=VALUE</paramValue> أو <paramEnv>--param KEY</paramEnv> مع <workspaceCreate>cmux workspace create</workspaceCreate> و <layoutOpen>cmux layout open</layoutOpen>. يستورد النموذج بلا قيمة متغير الصدفة المستدعية. ترسل عملاء المقبس template_params، وتعيد القيم المفقودة <missing>missing_parameters</missing>.", "restartNew": "إنشاء مساحة عمل جديدة (الافتراضي)" }, "keyboardShortcuts": { diff --git a/web/messages/bs.json b/web/messages/bs.json index a69f12724440..1b4d7f237a55 100644 --- a/web/messages/bs.json +++ b/web/messages/bs.json @@ -1064,6 +1064,11 @@ "absolutePath": "Apsolutna putanja", "cwdAbsolute": "koristi se kao takvo", "fullExample": "Potpuni primjer", + "wsFieldParams": "Zadane vrijednosti varijabli predloška radnog prostora", + "parameterizedLayouts": "Parametrizirani rasporedi radnog prostora", + "parameterizedLayoutsDesc": "Koristite <variable>{variableSyntax}</variable> ili <defaultValue>{defaultSyntax}</defaultValue> u naslovima, putanjama, vrijednostima okruženja, naredbama za postavljanje, terminalskim naredbama i URL-ovima preglednika. Dodajte <escaped>{escapedSyntax}</escaped> da rezervirano mjesto ostane doslovno. Objekt <params>params</params> daje ponovo upotrebljive zadane vrijednosti.", + "parameterizedLayoutsPrecedence": "Redoslijed razrješavanja je <explicit>izričite vrijednosti poziva</explicit>, zadane vrijednosti <params>params</params>, doslovni <env>env</env> radnog prostora, <process>okruženje cmux procesa</process>, pa <inline>ugrađena zadana vrijednost</inline>. Nedostajuće obavezne vrijednosti prekidaju cijelo pokretanje prije stvaranja radnog prostora.", + "parameterizedLayoutsCLI": "Koristite <paramValue>--param KEY=VALUE</paramValue> ili <paramEnv>--param KEY</paramEnv> uz <workspaceCreate>cmux workspace create</workspaceCreate> i <layoutOpen>cmux layout open</layoutOpen>. Oblik bez vrijednosti uvozi varijablu pozivajuće ljuske. Socket klijenti šalju template_params; nedostajuće vrijednosti vraćaju <missing>missing_parameters</missing>.", "restartNew": "Kreiraj novi radni prostor (zadano)" }, "keyboardShortcuts": { diff --git a/web/messages/da.json b/web/messages/da.json index 8239d879f795..ee832ac0c73b 100644 --- a/web/messages/da.json +++ b/web/messages/da.json @@ -1064,6 +1064,11 @@ "absolutePath": "Absolut sti", "cwdAbsolute": "bruges som den er", "fullExample": "Fuldt eksempel", + "wsFieldParams": "Standardværdier for workspace-skabelonvariabler", + "parameterizedLayouts": "Parameteriserede workspace-layouts", + "parameterizedLayoutsDesc": "Brug <variable>{variableSyntax}</variable> eller <defaultValue>{defaultSyntax}</defaultValue> i titler, stier, miljøværdier, opsætningskommandoer, terminalkommandoer og browser-URL'er. Sæt <escaped>{escapedSyntax}</escaped> foran for at bevare en pladsholder bogstaveligt. Objektet <params>params</params> angiver genanvendelige standarder.", + "parameterizedLayoutsPrecedence": "Rækkefølgen er <explicit>eksplicitte kaldværdier</explicit>, standarder i <params>params</params>, bogstaveligt workspace-<env>env</env>, <process>cmux-processens miljø</process> og til sidst <inline>inline-standarden</inline>. Manglende obligatoriske værdier afbryder hele starten, før et workspace oprettes.", + "parameterizedLayoutsCLI": "Brug <paramValue>--param KEY=VALUE</paramValue> eller <paramEnv>--param KEY</paramEnv> med <workspaceCreate>cmux workspace create</workspaceCreate> og <layoutOpen>cmux layout open</layoutOpen>. Formen uden værdi importerer variablen fra den kaldende shell. Socketklienter sender template_params; manglende værdier returnerer <missing>missing_parameters</missing>.", "restartNew": "Opret et nyt workspace (standard)" }, "keyboardShortcuts": { diff --git a/web/messages/de.json b/web/messages/de.json index 948e18031d00..828538fbcad5 100644 --- a/web/messages/de.json +++ b/web/messages/de.json @@ -1064,6 +1064,11 @@ "absolutePath": "Absoluter Pfad", "cwdAbsolute": "wird unverändert verwendet", "fullExample": "Vollständiges Beispiel", + "wsFieldParams": "Standardwerte für Workspace-Vorlagenvariablen", + "parameterizedLayouts": "Parametrisierte Workspace-Layouts", + "parameterizedLayoutsDesc": "Verwende <variable>{variableSyntax}</variable> oder <defaultValue>{defaultSyntax}</defaultValue> in Titeln, Pfaden, Umgebungswerten, Setup-Befehlen, Terminalbefehlen und Browser-URLs. Mit <escaped>{escapedSyntax}</escaped> bleibt ein Platzhalter wörtlich erhalten. Das Objekt <params>params</params> liefert wiederverwendbare Standardwerte.", + "parameterizedLayoutsPrecedence": "Die Auflösungsreihenfolge ist <explicit>explizite Aufrufwerte</explicit>, Vorgaben aus <params>params</params>, wörtliches Workspace-<env>env</env>, die <process>Umgebung des cmux-Prozesses</process> und zuletzt der <inline>Inline-Standardwert</inline>. Fehlende Pflichtwerte brechen den gesamten Start ab, bevor ein Workspace erstellt wird.", + "parameterizedLayoutsCLI": "Verwende <paramValue>--param KEY=VALUE</paramValue> oder <paramEnv>--param KEY</paramEnv> mit <workspaceCreate>cmux workspace create</workspaceCreate> und <layoutOpen>cmux layout open</layoutOpen>. Die Form ohne Wert importiert die Variable der aufrufenden Shell. Socket-Clients senden template_params; fehlende Werte liefern <missing>missing_parameters</missing>.", "restartNew": "Neuen Workspace erstellen (Standard)" }, "keyboardShortcuts": { diff --git a/web/messages/en.json b/web/messages/en.json index 484dc86b3897..2f17b67b4550 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -1885,6 +1885,11 @@ "absolutePath": "Absolute path", "cwdAbsolute": "used as-is", "fullExample": "Full example", + "wsFieldParams": "Default values for workspace template variables", + "parameterizedLayouts": "Parameterized workspace layouts", + "parameterizedLayoutsDesc": "Use <variable>{variableSyntax}</variable> or <defaultValue>{defaultSyntax}</defaultValue> in workspace and surface titles, paths, environment values, setup commands, terminal commands, and browser URLs. Prefix <escaped>{escapedSyntax}</escaped> to keep a placeholder literal. The <params>params</params> object supplies reusable defaults.", + "parameterizedLayoutsPrecedence": "Resolution order is <explicit>explicit invocation values</explicit>, <params>params</params> defaults, literal workspace <env>env</env>, the <process>cmux process environment</process>, then the <inline>inline default</inline>. Missing required values abort the whole launch before any workspace is created.", + "parameterizedLayoutsCLI": "Use <paramValue>--param KEY=VALUE</paramValue> or <paramEnv>--param KEY</paramEnv> with <workspaceCreate>cmux workspace create</workspaceCreate> and <layoutOpen>cmux layout open</layoutOpen>. The value-less form imports the invoking shell variable. Socket clients send template_params; missing values return <missing>missing_parameters</missing>.", "restartNew": "Create a new workspace (default)", "workspaceActionsDefaultTitle": "Default for new workspaces", "workspaceActionsDefaultDesc": "Use the <defaultMenu>Default for New Workspace</defaultMenu> submenu to pick which saved workspace layout plain New Workspace should run, or choose None to return to a blank terminal. The save dialog also has a <checkbox>Use as default for new workspaces</checkbox> checkbox. The setting is <action>ui.newWorkspace.action</action>; a project-local <localConfig>.cmux/cmux.json</localConfig> value wins over <globalConfig>~/.config/cmux/cmux.json</globalConfig>." diff --git a/web/messages/es.json b/web/messages/es.json index 7d63e22a8112..2860b80f197a 100644 --- a/web/messages/es.json +++ b/web/messages/es.json @@ -1064,6 +1064,11 @@ "absolutePath": "Ruta absoluta", "cwdAbsolute": "se usa tal cual", "fullExample": "Ejemplo completo", + "wsFieldParams": "Valores predeterminados para variables de plantilla del workspace", + "parameterizedLayouts": "Layouts de workspace parametrizados", + "parameterizedLayoutsDesc": "Usa <variable>{variableSyntax}</variable> o <defaultValue>{defaultSyntax}</defaultValue> en títulos, rutas, valores de entorno, comandos de preparación, comandos de terminal y URL del navegador. Anteponer <escaped>{escapedSyntax}</escaped> conserva un marcador literalmente. El objeto <params>params</params> proporciona valores predeterminados reutilizables.", + "parameterizedLayoutsPrecedence": "El orden de resolución es <explicit>valores explícitos de la invocación</explicit>, valores de <params>params</params>, <env>env</env> literal del workspace, el <process>entorno del proceso cmux</process> y el <inline>valor predeterminado en línea</inline>. Si falta un valor obligatorio, se cancela todo el lanzamiento antes de crear el workspace.", + "parameterizedLayoutsCLI": "Usa <paramValue>--param KEY=VALUE</paramValue> o <paramEnv>--param KEY</paramEnv> con <workspaceCreate>cmux workspace create</workspaceCreate> y <layoutOpen>cmux layout open</layoutOpen>. La forma sin valor importa la variable del shell invocador. Los clientes de socket envían template_params; los valores ausentes devuelven <missing>missing_parameters</missing>.", "restartNew": "Crear un workspace nuevo (por defecto)" }, "keyboardShortcuts": { diff --git a/web/messages/fr.json b/web/messages/fr.json index cd8095982eea..2cb6220f7fac 100644 --- a/web/messages/fr.json +++ b/web/messages/fr.json @@ -1065,6 +1065,11 @@ "absolutePath": "Chemin absolu", "cwdAbsolute": "utilisé tel quel", "fullExample": "Exemple complet", + "wsFieldParams": "Valeurs par défaut des variables de modèle du workspace", + "parameterizedLayouts": "Layouts de workspace paramétrés", + "parameterizedLayoutsDesc": "Utilisez <variable>{variableSyntax}</variable> ou <defaultValue>{defaultSyntax}</defaultValue> dans les titres, chemins, valeurs d'environnement, commandes de préparation, commandes de terminal et URL du navigateur. Préfixez par <escaped>{escapedSyntax}</escaped> pour conserver un paramètre littéral. L'objet <params>params</params> fournit des valeurs par défaut réutilisables.", + "parameterizedLayoutsPrecedence": "L'ordre de résolution est : <explicit>valeurs d'appel explicites</explicit>, valeurs de <params>params</params>, <env>env</env> littéral du workspace, <process>environnement du processus cmux</process>, puis <inline>valeur par défaut intégrée</inline>. Toute valeur obligatoire manquante annule le lancement avant la création du workspace.", + "parameterizedLayoutsCLI": "Utilisez <paramValue>--param KEY=VALUE</paramValue> ou <paramEnv>--param KEY</paramEnv> avec <workspaceCreate>cmux workspace create</workspaceCreate> et <layoutOpen>cmux layout open</layoutOpen>. La forme sans valeur importe la variable du shell appelant. Les clients socket envoient template_params ; les valeurs manquantes renvoient <missing>missing_parameters</missing>.", "restartNew": "Créer un nouveau workspace (par défaut)" }, "keyboardShortcuts": { diff --git a/web/messages/it.json b/web/messages/it.json index a08aa09e2628..428ef06210dc 100644 --- a/web/messages/it.json +++ b/web/messages/it.json @@ -1064,6 +1064,11 @@ "absolutePath": "Percorso assoluto", "cwdAbsolute": "usato così com'è", "fullExample": "Esempio completo", + "wsFieldParams": "Valori predefiniti per le variabili del modello workspace", + "parameterizedLayouts": "Layout workspace parametrizzati", + "parameterizedLayoutsDesc": "Usa <variable>{variableSyntax}</variable> o <defaultValue>{defaultSyntax}</defaultValue> in titoli, percorsi, valori di ambiente, comandi di configurazione, comandi del terminale e URL del browser. Anteponi <escaped>{escapedSyntax}</escaped> per mantenere letterale un segnaposto. L'oggetto <params>params</params> fornisce valori predefiniti riutilizzabili.", + "parameterizedLayoutsPrecedence": "L'ordine di risoluzione è <explicit>valori espliciti di invocazione</explicit>, valori di <params>params</params>, <env>env</env> letterale del workspace, <process>ambiente del processo cmux</process> e infine <inline>valore predefinito inline</inline>. I valori obbligatori mancanti annullano l'intero avvio prima della creazione del workspace.", + "parameterizedLayoutsCLI": "Usa <paramValue>--param KEY=VALUE</paramValue> o <paramEnv>--param KEY</paramEnv> con <workspaceCreate>cmux workspace create</workspaceCreate> e <layoutOpen>cmux layout open</layoutOpen>. La forma senza valore importa la variabile della shell chiamante. I client socket inviano template_params; i valori mancanti restituiscono <missing>missing_parameters</missing>.", "restartNew": "Crea un nuovo workspace (predefinito)" }, "keyboardShortcuts": { diff --git a/web/messages/ja.json b/web/messages/ja.json index 42f0aed0004b..fae31fa3e2ca 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -1808,6 +1808,11 @@ "absolutePath": "絶対パス", "cwdAbsolute": "そのまま使用", "fullExample": "完全な例", + "wsFieldParams": "ワークスペーステンプレート変数の既定値", + "parameterizedLayouts": "パラメータ化されたワークスペースレイアウト", + "parameterizedLayoutsDesc": "ワークスペースやサーフェスのタイトル、パス、環境変数値、セットアップコマンド、ターミナルコマンド、ブラウザ URL では <variable>{variableSyntax}</variable> または <defaultValue>{defaultSyntax}</defaultValue> を使えます。プレースホルダーを文字どおり残すには <escaped>{escapedSyntax}</escaped> を付けます。<params>params</params> オブジェクトで再利用可能な既定値を指定します。", + "parameterizedLayoutsPrecedence": "解決順序は <explicit>呼び出し時の明示値</explicit>、<params>params</params> の既定値、ワークスペースのリテラル <env>env</env>、<process>cmux プロセス環境</process>、<inline>インライン既定値</inline>です。必須値がない場合、ワークスペースを作成する前に起動全体が中止されます。", + "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> と <layoutOpen>cmux layout open</layoutOpen> では <paramValue>--param KEY=VALUE</paramValue> または <paramEnv>--param KEY</paramEnv> を使います。値なし形式は呼び出し元シェルの変数を取り込みます。ソケットクライアントは template_params を送り、値がない場合は <missing>missing_parameters</missing> が返ります。", "restartNew": "新しいワークスペースを作成する (デフォルト)", "workspaceActionsDefaultTitle": "新規ワークスペースのデフォルト", "workspaceActionsDefaultDesc": "<defaultMenu>新規ワークスペースのデフォルト</defaultMenu> サブメニューで、通常の新規ワークスペース作成時に実行する保存済みワークスペースレイアウトを選べます。「なし」を選ぶと空のターミナルに戻ります。保存ダイアログにも <checkbox>新規ワークスペースのデフォルトとして使用</checkbox> チェックボックスがあります。設定キーは <action>ui.newWorkspace.action</action> です。プロジェクトローカルの <localConfig>.cmux/cmux.json</localConfig> の値は <globalConfig>~/.config/cmux/cmux.json</globalConfig> より優先されます。" diff --git a/web/messages/km.json b/web/messages/km.json index 733b681f407c..4643bbd70639 100644 --- a/web/messages/km.json +++ b/web/messages/km.json @@ -1064,6 +1064,11 @@ "absolutePath": "ផ្លូវដាច់ខាត", "cwdAbsolute": "ប្រើដូចដែលមាន", "fullExample": "ឧទាហរណ៍ពេញលេញ", + "wsFieldParams": "តម្លៃលំនាំដើមសម្រាប់អថេរគំរូ workspace", + "parameterizedLayouts": "ប្លង់ workspace ដែលមានប៉ារ៉ាម៉ែត្រ", + "parameterizedLayoutsDesc": "ប្រើ <variable>{variableSyntax}</variable> ឬ <defaultValue>{defaultSyntax}</defaultValue> ក្នុងចំណងជើង ផ្លូវ តម្លៃបរិស្ថាន ពាក្យបញ្ជារៀបចំ ពាក្យបញ្ជា terminal និង URL browser។ ដាក់ <escaped>{escapedSyntax}</escaped> ខាងមុខ ដើម្បីរក្សាកន្លែងជំនួសជាអក្សរដើម។ វត្ថុ <params>params</params> ផ្តល់តម្លៃលំនាំដើមដែលអាចប្រើឡើងវិញ។", + "parameterizedLayoutsPrecedence": "លំដាប់ដោះស្រាយគឺ <explicit>តម្លៃហៅច្បាស់លាស់</explicit> បន្ទាប់មកលំនាំដើម <params>params</params>, <env>env</env> workspace ជាក់ស្តែង, <process>បរិស្ថានដំណើរការ cmux</process> និង <inline>លំនាំដើមក្នុង placeholder</inline>។ បើខ្វះតម្លៃចាំបាច់ ការបើកទាំងមូលត្រូវបោះបង់មុនបង្កើត workspace។", + "parameterizedLayoutsCLI": "ប្រើ <paramValue>--param KEY=VALUE</paramValue> ឬ <paramEnv>--param KEY</paramEnv> ជាមួយ <workspaceCreate>cmux workspace create</workspaceCreate> និង <layoutOpen>cmux layout open</layoutOpen>។ ទម្រង់គ្មានតម្លៃនាំចូលអថេរពី shell ដែលហៅ។ Socket client ផ្ញើ template_params; តម្លៃខ្វះត្រឡប់ <missing>missing_parameters</missing>។", "restartNew": "បង្កើត workspace ថ្មី (លំនាំដើម)" }, "keyboardShortcuts": { diff --git a/web/messages/ko.json b/web/messages/ko.json index 77e4697d0bfe..175584aa38a0 100644 --- a/web/messages/ko.json +++ b/web/messages/ko.json @@ -1064,6 +1064,11 @@ "absolutePath": "절대 경로", "cwdAbsolute": "있는 그대로 사용", "fullExample": "전체 예시", + "wsFieldParams": "워크스페이스 템플릿 변수의 기본값", + "parameterizedLayouts": "매개변수화된 워크스페이스 레이아웃", + "parameterizedLayoutsDesc": "워크스페이스 및 서피스 제목, 경로, 환경 값, 설정 명령, 터미널 명령, 브라우저 URL에서 <variable>{variableSyntax}</variable> 또는 <defaultValue>{defaultSyntax}</defaultValue>를 사용합니다. <escaped>{escapedSyntax}</escaped>를 앞에 붙이면 자리표시자를 문자 그대로 유지합니다. <params>params</params> 객체는 재사용 가능한 기본값을 제공합니다.", + "parameterizedLayoutsPrecedence": "해결 순서는 <explicit>명시적 호출 값</explicit>, <params>params</params> 기본값, 워크스페이스의 리터럴 <env>env</env>, <process>cmux 프로세스 환경</process>, <inline>인라인 기본값</inline>입니다. 필수 값이 없으면 워크스페이스를 만들기 전에 전체 실행을 중단합니다.", + "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> 및 <layoutOpen>cmux layout open</layoutOpen>에서 <paramValue>--param KEY=VALUE</paramValue> 또는 <paramEnv>--param KEY</paramEnv>를 사용합니다. 값 없는 형식은 호출 셸 변수를 가져옵니다. 소켓 클라이언트는 template_params를 보내며, 값이 없으면 <missing>missing_parameters</missing>를 반환합니다.", "restartNew": "새 워크스페이스 만들기 (기본값)" }, "keyboardShortcuts": { diff --git a/web/messages/no.json b/web/messages/no.json index 1b0b589df12c..60f6aae75efd 100644 --- a/web/messages/no.json +++ b/web/messages/no.json @@ -1064,6 +1064,11 @@ "absolutePath": "Absolutt sti", "cwdAbsolute": "brukes som den er", "fullExample": "Fullstendig eksempel", + "wsFieldParams": "Standardverdier for workspace-malvariabler", + "parameterizedLayouts": "Parameteriserte workspace-oppsett", + "parameterizedLayoutsDesc": "Bruk <variable>{variableSyntax}</variable> eller <defaultValue>{defaultSyntax}</defaultValue> i titler, stier, miljøverdier, oppsettskommandoer, terminalkommandoer og nettleser-URL-er. Sett <escaped>{escapedSyntax}</escaped> foran for å beholde en plassholder bokstavelig. Objektet <params>params</params> gir gjenbrukbare standardverdier.", + "parameterizedLayoutsPrecedence": "Rekkefølgen er <explicit>eksplisitte kallverdier</explicit>, standarder i <params>params</params>, bokstavelig workspace-<env>env</env>, <process>miljøet til cmux-prosessen</process> og til slutt <inline>innebygd standardverdi</inline>. Manglende påkrevde verdier avbryter hele oppstarten før et workspace opprettes.", + "parameterizedLayoutsCLI": "Bruk <paramValue>--param KEY=VALUE</paramValue> eller <paramEnv>--param KEY</paramEnv> med <workspaceCreate>cmux workspace create</workspaceCreate> og <layoutOpen>cmux layout open</layoutOpen>. Formen uten verdi importerer variabelen fra skallet som kaller. Socket-klienter sender template_params; manglende verdier gir <missing>missing_parameters</missing>.", "restartNew": "Opprett et nytt workspace (standard)" }, "keyboardShortcuts": { diff --git a/web/messages/pl.json b/web/messages/pl.json index f2adf6e34994..90e3c2432242 100644 --- a/web/messages/pl.json +++ b/web/messages/pl.json @@ -1065,6 +1065,11 @@ "absolutePath": "Ścieżka bezwzględna", "cwdAbsolute": "używana bez zmian", "fullExample": "Pełny przykład", + "wsFieldParams": "Domyślne wartości zmiennych szablonu workspace", + "parameterizedLayouts": "Parametryzowane układy workspace", + "parameterizedLayoutsDesc": "Użyj <variable>{variableSyntax}</variable> lub <defaultValue>{defaultSyntax}</defaultValue> w tytułach, ścieżkach, wartościach środowiska, poleceniach konfiguracji, poleceniach terminala i adresach URL przeglądarki. Prefiks <escaped>{escapedSyntax}</escaped> zachowuje symbol zastępczy dosłownie. Obiekt <params>params</params> dostarcza domyślnych wartości wielokrotnego użytku.", + "parameterizedLayoutsPrecedence": "Kolejność rozwiązywania to <explicit>jawne wartości wywołania</explicit>, wartości <params>params</params>, dosłowne <env>env</env> workspace, <process>środowisko procesu cmux</process>, a następnie <inline>wartość domyślna w symbolu</inline>. Brak wymaganej wartości przerywa całe uruchomienie przed utworzeniem workspace.", + "parameterizedLayoutsCLI": "Użyj <paramValue>--param KEY=VALUE</paramValue> lub <paramEnv>--param KEY</paramEnv> z <workspaceCreate>cmux workspace create</workspaceCreate> i <layoutOpen>cmux layout open</layoutOpen>. Forma bez wartości importuje zmienną powłoki wywołującej. Klienci gniazda wysyłają template_params; brakujące wartości zwracają <missing>missing_parameters</missing>.", "restartNew": "Utwórz nowy workspace (domyślnie)" }, "keyboardShortcuts": { diff --git a/web/messages/pt-BR.json b/web/messages/pt-BR.json index 657caa864117..ecebbaa02298 100644 --- a/web/messages/pt-BR.json +++ b/web/messages/pt-BR.json @@ -1064,6 +1064,11 @@ "absolutePath": "Caminho absoluto", "cwdAbsolute": "usado como está", "fullExample": "Exemplo completo", + "wsFieldParams": "Valores padrão para variáveis de modelo do workspace", + "parameterizedLayouts": "Layouts de workspace parametrizados", + "parameterizedLayoutsDesc": "Use <variable>{variableSyntax}</variable> ou <defaultValue>{defaultSyntax}</defaultValue> em títulos, caminhos, valores de ambiente, comandos de preparação, comandos do terminal e URLs do navegador. Prefixe com <escaped>{escapedSyntax}</escaped> para manter um marcador literal. O objeto <params>params</params> fornece valores padrão reutilizáveis.", + "parameterizedLayoutsPrecedence": "A ordem de resolução é <explicit>valores explícitos da invocação</explicit>, padrões de <params>params</params>, <env>env</env> literal do workspace, o <process>ambiente do processo cmux</process> e o <inline>padrão embutido</inline>. Valores obrigatórios ausentes cancelam todo o lançamento antes da criação do workspace.", + "parameterizedLayoutsCLI": "Use <paramValue>--param KEY=VALUE</paramValue> ou <paramEnv>--param KEY</paramEnv> com <workspaceCreate>cmux workspace create</workspaceCreate> e <layoutOpen>cmux layout open</layoutOpen>. A forma sem valor importa a variável do shell chamador. Clientes de socket enviam template_params; valores ausentes retornam <missing>missing_parameters</missing>.", "restartNew": "Criar um novo workspace (padrão)" }, "keyboardShortcuts": { diff --git a/web/messages/ru.json b/web/messages/ru.json index f790ee7c2da6..554172ef6496 100644 --- a/web/messages/ru.json +++ b/web/messages/ru.json @@ -1064,6 +1064,11 @@ "absolutePath": "Абсолютный путь", "cwdAbsolute": "используется как есть", "fullExample": "Полный пример", + "wsFieldParams": "Значения по умолчанию для переменных шаблона workspace", + "parameterizedLayouts": "Параметризованные макеты workspace", + "parameterizedLayoutsDesc": "Используйте <variable>{variableSyntax}</variable> или <defaultValue>{defaultSyntax}</defaultValue> в заголовках, путях, значениях окружения, командах настройки, командах терминала и URL браузера. Префикс <escaped>{escapedSyntax}</escaped> сохраняет заполнитель буквально. Объект <params>params</params> задаёт повторно используемые значения по умолчанию.", + "parameterizedLayoutsPrecedence": "Порядок разрешения: <explicit>явные значения вызова</explicit>, значения <params>params</params>, буквальный <env>env</env> workspace, <process>окружение процесса cmux</process>, затем <inline>встроенное значение по умолчанию</inline>. Отсутствие обязательного значения отменяет весь запуск до создания workspace.", + "parameterizedLayoutsCLI": "Используйте <paramValue>--param KEY=VALUE</paramValue> или <paramEnv>--param KEY</paramEnv> с <workspaceCreate>cmux workspace create</workspaceCreate> и <layoutOpen>cmux layout open</layoutOpen>. Форма без значения импортирует переменную вызывающей оболочки. Клиенты сокета отправляют template_params; отсутствие значений возвращает <missing>missing_parameters</missing>.", "restartNew": "Создать новый workspace (по умолчанию)" }, "keyboardShortcuts": { diff --git a/web/messages/th.json b/web/messages/th.json index a23e9eeb66b6..b090d1f11a10 100644 --- a/web/messages/th.json +++ b/web/messages/th.json @@ -1066,6 +1066,11 @@ "absolutePath": "พาธสัมบูรณ์", "cwdAbsolute": "ใช้ตามที่เป็น", "fullExample": "ตัวอย่างเต็ม", + "wsFieldParams": "ค่าเริ่มต้นสำหรับตัวแปรเทมเพลต workspace", + "parameterizedLayouts": "เลย์เอาต์ workspace แบบกำหนดพารามิเตอร์", + "parameterizedLayoutsDesc": "ใช้ <variable>{variableSyntax}</variable> หรือ <defaultValue>{defaultSyntax}</defaultValue> ในชื่อ พาธ ค่าสภาพแวดล้อม คำสั่งตั้งค่า คำสั่งเทอร์มินัล และ URL เบราว์เซอร์ เติม <escaped>{escapedSyntax}</escaped> ด้านหน้าเพื่อคง placeholder ไว้ตามตัวอักษร อ็อบเจ็กต์ <params>params</params> ให้ค่าเริ่มต้นที่นำกลับมาใช้ได้", + "parameterizedLayoutsPrecedence": "ลำดับการแก้ค่าคือ <explicit>ค่าที่ระบุตอนเรียก</explicit>, ค่าเริ่มต้น <params>params</params>, <env>env</env> แบบตรงตัวของ workspace, <process>สภาพแวดล้อมของโปรเซส cmux</process> แล้วจึง <inline>ค่าเริ่มต้นใน placeholder</inline> หากขาดค่าที่จำเป็น การเปิดทั้งหมดจะถูกยกเลิกก่อนสร้าง workspace", + "parameterizedLayoutsCLI": "ใช้ <paramValue>--param KEY=VALUE</paramValue> หรือ <paramEnv>--param KEY</paramEnv> กับ <workspaceCreate>cmux workspace create</workspaceCreate> และ <layoutOpen>cmux layout open</layoutOpen> รูปแบบไม่มีค่าจะนำเข้าตัวแปรจาก shell ที่เรียก Socket client ส่ง template_params; ค่าที่ขาดจะคืน <missing>missing_parameters</missing>", "restartNew": "สร้าง workspace ใหม่ (ค่าเริ่มต้น)" }, "keyboardShortcuts": { diff --git a/web/messages/tr.json b/web/messages/tr.json index 9e771c6e604b..33538dd0236f 100644 --- a/web/messages/tr.json +++ b/web/messages/tr.json @@ -1064,6 +1064,11 @@ "absolutePath": "Mutlak yol", "cwdAbsolute": "olduğu gibi kullanılır", "fullExample": "Tam örnek", + "wsFieldParams": "Workspace şablon değişkenleri için varsayılan değerler", + "parameterizedLayouts": "Parametreli workspace düzenleri", + "parameterizedLayoutsDesc": "Başlıklarda, yollarda, ortam değerlerinde, kurulum komutlarında, terminal komutlarında ve tarayıcı URL'lerinde <variable>{variableSyntax}</variable> veya <defaultValue>{defaultSyntax}</defaultValue> kullanın. Bir yer tutucuyu değişmeden bırakmak için önüne <escaped>{escapedSyntax}</escaped> ekleyin. <params>params</params> nesnesi yeniden kullanılabilir varsayılanlar sağlar.", + "parameterizedLayoutsPrecedence": "Çözüm sırası <explicit>açık çağrı değerleri</explicit>, <params>params</params> varsayılanları, gerçek workspace <env>env</env> değerleri, <process>cmux süreç ortamı</process> ve son olarak <inline>satır içi varsayılan</inline> şeklindedir. Eksik zorunlu değerler workspace oluşturulmadan önce tüm başlatmayı iptal eder.", + "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> ve <layoutOpen>cmux layout open</layoutOpen> ile <paramValue>--param KEY=VALUE</paramValue> veya <paramEnv>--param KEY</paramEnv> kullanın. Değersiz biçim çağıran kabuk değişkenini içe aktarır. Socket istemcileri template_params gönderir; eksik değerler <missing>missing_parameters</missing> döndürür.", "restartNew": "Yeni bir workspace oluştur (varsayılan)" }, "keyboardShortcuts": { diff --git a/web/messages/uk.json b/web/messages/uk.json index cdafca92185f..2d6ea1f834e4 100644 --- a/web/messages/uk.json +++ b/web/messages/uk.json @@ -1064,6 +1064,11 @@ "absolutePath": "Абсолютний шлях", "cwdAbsolute": "використовується як є", "fullExample": "Повний приклад", + "wsFieldParams": "Типові значення змінних шаблону workspace", + "parameterizedLayouts": "Параметризовані макети workspace", + "parameterizedLayoutsDesc": "Використовуйте <variable>{variableSyntax}</variable> або <defaultValue>{defaultSyntax}</defaultValue> у заголовках, шляхах, значеннях середовища, командах налаштування, командах термінала й URL браузера. Префікс <escaped>{escapedSyntax}</escaped> зберігає заповнювач буквально. Об'єкт <params>params</params> задає повторно використовувані типові значення.", + "parameterizedLayoutsPrecedence": "Порядок розв'язання: <explicit>явні значення виклику</explicit>, типові значення <params>params</params>, буквальний <env>env</env> workspace, <process>середовище процесу cmux</process>, потім <inline>вбудоване типове значення</inline>. Відсутність обов'язкового значення скасовує весь запуск до створення workspace.", + "parameterizedLayoutsCLI": "Використовуйте <paramValue>--param KEY=VALUE</paramValue> або <paramEnv>--param KEY</paramEnv> з <workspaceCreate>cmux workspace create</workspaceCreate> і <layoutOpen>cmux layout open</layoutOpen>. Форма без значення імпортує змінну оболонки виклику. Клієнти сокета надсилають template_params; відсутні значення повертають <missing>missing_parameters</missing>.", "restartNew": "Створити новий workspace (за замовчуванням)" }, "keyboardShortcuts": { diff --git a/web/messages/zh-CN.json b/web/messages/zh-CN.json index 85060e5c8630..8419b7cfcb01 100644 --- a/web/messages/zh-CN.json +++ b/web/messages/zh-CN.json @@ -1064,6 +1064,11 @@ "absolutePath": "绝对路径", "cwdAbsolute": "按原样使用", "fullExample": "完整示例", + "wsFieldParams": "workspace 模板变量的默认值", + "parameterizedLayouts": "参数化 workspace 布局", + "parameterizedLayoutsDesc": "可在 workspace 和 surface 的标题、路径、环境值、设置命令、终端命令及浏览器 URL 中使用 <variable>{variableSyntax}</variable> 或 <defaultValue>{defaultSyntax}</defaultValue>。添加 <escaped>{escapedSyntax}</escaped> 前缀可保留字面占位符。<params>params</params> 对象提供可复用的默认值。", + "parameterizedLayoutsPrecedence": "解析顺序为:<explicit>显式调用值</explicit>、<params>params</params> 默认值、workspace 的字面 <env>env</env>、<process>cmux 进程环境</process>,最后是<inline>内联默认值</inline>。缺少必需值时,会在创建任何 workspace 前中止整个启动。", + "parameterizedLayoutsCLI": "在 <workspaceCreate>cmux workspace create</workspaceCreate> 和 <layoutOpen>cmux layout open</layoutOpen> 中使用 <paramValue>--param KEY=VALUE</paramValue> 或 <paramEnv>--param KEY</paramEnv>。无值形式会导入调用 shell 的变量。Socket 客户端发送 template_params;缺少值时返回 <missing>missing_parameters</missing>。", "restartNew": "创建新的 workspace(默认)" }, "keyboardShortcuts": { diff --git a/web/messages/zh-TW.json b/web/messages/zh-TW.json index f17f0a1ec071..3a34700ed30e 100644 --- a/web/messages/zh-TW.json +++ b/web/messages/zh-TW.json @@ -1064,6 +1064,11 @@ "absolutePath": "絕對路徑", "cwdAbsolute": "按原樣使用", "fullExample": "完整範例", + "wsFieldParams": "workspace 範本變數的預設值", + "parameterizedLayouts": "參數化 workspace 版面配置", + "parameterizedLayoutsDesc": "可在 workspace 與 surface 的標題、路徑、環境值、設定命令、終端命令及瀏覽器 URL 中使用 <variable>{variableSyntax}</variable> 或 <defaultValue>{defaultSyntax}</defaultValue>。加上 <escaped>{escapedSyntax}</escaped> 前綴可保留字面預留位置。<params>params</params> 物件提供可重複使用的預設值。", + "parameterizedLayoutsPrecedence": "解析順序為:<explicit>明確呼叫值</explicit>、<params>params</params> 預設值、workspace 的字面 <env>env</env>、<process>cmux 程序環境</process>,最後是<inline>內嵌預設值</inline>。缺少必要值時,會在建立任何 workspace 前中止整個啟動。", + "parameterizedLayoutsCLI": "在 <workspaceCreate>cmux workspace create</workspaceCreate> 與 <layoutOpen>cmux layout open</layoutOpen> 中使用 <paramValue>--param KEY=VALUE</paramValue> 或 <paramEnv>--param KEY</paramEnv>。無值形式會匯入呼叫 shell 的變數。Socket 用戶端傳送 template_params;缺少值時回傳 <missing>missing_parameters</missing>。", "restartNew": "建立新的 workspace(預設)" }, "keyboardShortcuts": { From b8e7a2a315bec71878d748a8f73c3301cb008cc0 Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Tue, 14 Jul 2026 15:45:09 -0700 Subject: [PATCH 04/16] Address workspace parameter review feedback --- CLI/cmux_layout.swift | 4 ++-- Resources/Localizable.xcstrings | 4 ++-- Sources/AppDelegate+SavedLayoutMenu.swift | 4 ++-- Sources/CmuxConfigExecutor.swift | 2 +- web/messages/en.json | 2 +- web/messages/ja.json | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CLI/cmux_layout.swift b/CLI/cmux_layout.swift index d1f28ecae535..0a52b7f43959 100644 --- a/CLI/cmux_layout.swift +++ b/CLI/cmux_layout.swift @@ -5,13 +5,13 @@ extension CMUXCLI { String(localized: "cli.layout.help", defaultValue: """ Usage: cmux layout <subcommand> [flags] - Save, list, export, open, and delete named workspace layouts. + Save, list, inspect, open, and delete named workspace layouts. Subcommands: save <name> [--workspace <ref>] [--overwrite] [--description <text>] list [--json] get <name> - open <name> [--cwd <dir>] [--param KEY=VALUE]... [--focus <true|false>] + open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>] delete <name> Examples: diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 750dca13df14..b8f8b4fda0c4 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -43799,13 +43799,13 @@ "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux layout <subcommand> [flags]\n\nSave, list, export, open, and delete named workspace layouts.\n\nSubcommands:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY=VALUE]... [--focus <true|false>]\n delete <name>\n\nExamples:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" + "value": "Usage: cmux layout <subcommand> [flags]\n\nSave, list, inspect, open, and delete named workspace layouts.\n\nSubcommands:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nExamples:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使い方: cmux layout <サブコマンド> [フラグ]\n\n名前付きワークスペースレイアウトを保存、一覧表示、取得、開く、削除します。\n\nサブコマンド:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY=VALUE]... [--focus <true|false>]\n delete <name>\n\n例:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" + "value": "使い方: cmux layout <サブコマンド> [フラグ]\n\n名前付きワークスペースレイアウトを保存、一覧表示、取得、開く、削除します。\n\nサブコマンド:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\n例:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } } } diff --git a/Sources/AppDelegate+SavedLayoutMenu.swift b/Sources/AppDelegate+SavedLayoutMenu.swift index eaba82e2e8d5..01874f987f12 100644 --- a/Sources/AppDelegate+SavedLayoutMenu.swift +++ b/Sources/AppDelegate+SavedLayoutMenu.swift @@ -54,7 +54,7 @@ extension AppDelegate { @objc private func performSavedLayoutContextMenuItem(_ sender: NSMenuItem) { guard let box = sender.representedObject as? SavedLayoutContextMenuActionBox, let context = mainWindowContexts.values.first(where: { $0.windowId == box.windowId }), - resolvedWindow(for: context) != nil else { + let window = resolvedWindow(for: context) else { NSSound.beep() return } @@ -70,7 +70,7 @@ extension AppDelegate { focus: true ) } catch let error as CmuxTemplateResolutionError { - WorkspaceTemplateErrorPresenter(presentingWindow: nil).present(error) + WorkspaceTemplateErrorPresenter(presentingWindow: window).present(error) } catch { NSSound.beep() } diff --git a/Sources/CmuxConfigExecutor.swift b/Sources/CmuxConfigExecutor.swift index b9a8609669ed..039812bd8c31 100644 --- a/Sources/CmuxConfigExecutor.swift +++ b/Sources/CmuxConfigExecutor.swift @@ -27,7 +27,7 @@ struct CmuxConfigExecutor { } return authorizeProjectActionIfNeeded( descriptor: workspaceTrustDescriptor( - command: command, + command: resolvedCommand, actionID: actionID ?? command.id, configSourcePath: configSourcePath, icon: icon, diff --git a/web/messages/en.json b/web/messages/en.json index 2f17b67b4550..1d610a214fa5 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -1889,7 +1889,7 @@ "parameterizedLayouts": "Parameterized workspace layouts", "parameterizedLayoutsDesc": "Use <variable>{variableSyntax}</variable> or <defaultValue>{defaultSyntax}</defaultValue> in workspace and surface titles, paths, environment values, setup commands, terminal commands, and browser URLs. Prefix <escaped>{escapedSyntax}</escaped> to keep a placeholder literal. The <params>params</params> object supplies reusable defaults.", "parameterizedLayoutsPrecedence": "Resolution order is <explicit>explicit invocation values</explicit>, <params>params</params> defaults, literal workspace <env>env</env>, the <process>cmux process environment</process>, then the <inline>inline default</inline>. Missing required values abort the whole launch before any workspace is created.", - "parameterizedLayoutsCLI": "Use <paramValue>--param KEY=VALUE</paramValue> or <paramEnv>--param KEY</paramEnv> with <workspaceCreate>cmux workspace create</workspaceCreate> and <layoutOpen>cmux layout open</layoutOpen>. The value-less form imports the invoking shell variable. Socket clients send template_params; missing values return <missing>missing_parameters</missing>.", + "parameterizedLayoutsCLI": "Use <paramValue>--param KEY=VALUE</paramValue> or <paramEnv>--param KEY</paramEnv> with <workspaceCreate>cmux workspace create</workspaceCreate> and <layoutOpen>cmux layout open</layoutOpen>. The value-less form imports an exported environment variable from the invoking shell. Socket clients send template_params; missing values return <missing>missing_parameters</missing>.", "restartNew": "Create a new workspace (default)", "workspaceActionsDefaultTitle": "Default for new workspaces", "workspaceActionsDefaultDesc": "Use the <defaultMenu>Default for New Workspace</defaultMenu> submenu to pick which saved workspace layout plain New Workspace should run, or choose None to return to a blank terminal. The save dialog also has a <checkbox>Use as default for new workspaces</checkbox> checkbox. The setting is <action>ui.newWorkspace.action</action>; a project-local <localConfig>.cmux/cmux.json</localConfig> value wins over <globalConfig>~/.config/cmux/cmux.json</globalConfig>." diff --git a/web/messages/ja.json b/web/messages/ja.json index fae31fa3e2ca..f01f1baab820 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -1812,7 +1812,7 @@ "parameterizedLayouts": "パラメータ化されたワークスペースレイアウト", "parameterizedLayoutsDesc": "ワークスペースやサーフェスのタイトル、パス、環境変数値、セットアップコマンド、ターミナルコマンド、ブラウザ URL では <variable>{variableSyntax}</variable> または <defaultValue>{defaultSyntax}</defaultValue> を使えます。プレースホルダーを文字どおり残すには <escaped>{escapedSyntax}</escaped> を付けます。<params>params</params> オブジェクトで再利用可能な既定値を指定します。", "parameterizedLayoutsPrecedence": "解決順序は <explicit>呼び出し時の明示値</explicit>、<params>params</params> の既定値、ワークスペースのリテラル <env>env</env>、<process>cmux プロセス環境</process>、<inline>インライン既定値</inline>です。必須値がない場合、ワークスペースを作成する前に起動全体が中止されます。", - "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> と <layoutOpen>cmux layout open</layoutOpen> では <paramValue>--param KEY=VALUE</paramValue> または <paramEnv>--param KEY</paramEnv> を使います。値なし形式は呼び出し元シェルの変数を取り込みます。ソケットクライアントは template_params を送り、値がない場合は <missing>missing_parameters</missing> が返ります。", + "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> と <layoutOpen>cmux layout open</layoutOpen> では <paramValue>--param KEY=VALUE</paramValue> または <paramEnv>--param KEY</paramEnv> を使います。値なし形式は呼び出し元シェルでエクスポートされた環境変数を取り込みます。ソケットクライアントは template_params を送り、値がない場合は <missing>missing_parameters</missing> が返ります。", "restartNew": "新しいワークスペースを作成する (デフォルト)", "workspaceActionsDefaultTitle": "新規ワークスペースのデフォルト", "workspaceActionsDefaultDesc": "<defaultMenu>新規ワークスペースのデフォルト</defaultMenu> サブメニューで、通常の新規ワークスペース作成時に実行する保存済みワークスペースレイアウトを選べます。「なし」を選ぶと空のターミナルに戻ります。保存ダイアログにも <checkbox>新規ワークスペースのデフォルトとして使用</checkbox> チェックボックスがあります。設定キーは <action>ui.newWorkspace.action</action> です。プロジェクトローカルの <localConfig>.cmux/cmux.json</localConfig> の値は <globalConfig>~/.config/cmux/cmux.json</globalConfig> より優先されます。" From dd6d71929f3a343a844fe2a44e262d2f7ad3aacd Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Tue, 14 Jul 2026 23:37:44 -0700 Subject: [PATCH 05/16] Add failing workspace parameter UI contract tests --- .../CmuxTemplateTests.swift | 19 ++++++++++++++++ cmuxTests/SavedLayoutDefinitionTests.swift | 22 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift index 276ffbaa5e4a..18848d4ef77a 100644 --- a/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift +++ b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift @@ -64,4 +64,23 @@ import Testing #expect(try resolver.resolve(CmuxTemplate(#"{{bad.name}} {{1port}} \{{literal}}"#)) == "{{bad.name}} {{1port}} {{literal}}") } + + @Test func parameterInputsPreserveOrderAndExposeEditableSuggestedValues() { + let resolver = CmuxTemplateResolver( + definitionValues: ["ticket": "CMUX-8059"], + workspaceEnvironment: ["region": "workspace-region"], + processEnvironment: ["owner": "austin"] + ) + + #expect(resolver.parameterInputs(for: [ + CmuxTemplate("{{ticket}} {{missing}}"), + CmuxTemplate("{{region}} {{owner}} {{port=4100}} {{ticket=ignored}}"), + ]) == [ + CmuxTemplateParameterInput(name: "ticket", suggestedValue: "CMUX-8059"), + CmuxTemplateParameterInput(name: "missing", suggestedValue: nil), + CmuxTemplateParameterInput(name: "region", suggestedValue: "workspace-region"), + CmuxTemplateParameterInput(name: "owner", suggestedValue: "austin"), + CmuxTemplateParameterInput(name: "port", suggestedValue: "4100"), + ]) + } } diff --git a/cmuxTests/SavedLayoutDefinitionTests.swift b/cmuxTests/SavedLayoutDefinitionTests.swift index d9c6c62f264f..a460eb7cc935 100644 --- a/cmuxTests/SavedLayoutDefinitionTests.swift +++ b/cmuxTests/SavedLayoutDefinitionTests.swift @@ -147,6 +147,7 @@ import Testing let definition = CmuxWorkspaceDefinition( name: "{{ticket}}", env: ["API_PORT": "{{apiPort}}"], + params: [:], layout: .pane(CmuxPaneDefinition(surfaces: [ CmuxSurfaceDefinition(type: .browser, url: "http://localhost:{{vitePort}}"), ])) @@ -157,6 +158,27 @@ import Testing } } + @Test func launchResolutionPreservesLiteralPlaceholdersUntilParameterizationIsEnabled() throws { + let literal = CmuxWorkspaceDefinition(name: "Literal {{upstream}}") + let enabled = CmuxWorkspaceDefinition( + name: "Ticket {{ticket}}", + params: ["ticket": "CMUX-8059"] + ) + + let preserved = try literal.resolvingTemplateParametersForLaunch( + [:], + processEnvironment: [:] + ) + let resolved = try enabled.resolvingTemplateParametersForLaunch( + [:], + processEnvironment: [:] + ) + + #expect(preserved.name == "Literal {{upstream}}") + #expect(resolved.name == "Ticket CMUX-8059") + #expect(resolved.params == nil) + } + private static var nestedLayout: CmuxLayoutNode { .split( CmuxSplitDefinition( From 0b6ed04763f2cada94e9fff67b91084086f8e45d Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Tue, 14 Jul 2026 23:47:02 -0700 Subject: [PATCH 06/16] Prompt for workspace layout parameters in the UI --- .../Template/CmuxTemplateParameterInput.swift | 15 +++ .../Template/CmuxTemplateResolver.swift | 16 +++ Resources/Localizable.xcstrings | 68 +++++++++++ Sources/AppDelegate+SavedLayoutMenu.swift | 10 +- ...igExecutor+WorkspaceParameterization.swift | 27 ++--- Sources/CmuxConfigExecutor.swift | 56 ++++++++- ...WorkspaceDefinition+Parameterization.swift | 32 +++++ Sources/ContentView+SavedLayoutCommands.swift | 10 +- Sources/TabManager+SavedLayouts.swift | 39 +++++- .../WorkspaceTemplateParameterPrompt.swift | 111 ++++++++++++++++++ cmux.xcodeproj/project.pbxproj | 4 + 11 files changed, 354 insertions(+), 34 deletions(-) create mode 100644 Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift create mode 100644 Sources/WorkspaceTemplateParameterPrompt.swift diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift new file mode 100644 index 000000000000..100ce72374ba --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift @@ -0,0 +1,15 @@ +/// One editable value requested by a cmux template launch surface. +public struct CmuxTemplateParameterInput: Equatable, Sendable { + /// The placeholder name shown to the user. + public let name: String + + /// The value supplied by definition, environment, or inline-default + /// precedence before the user edits it. + public let suggestedValue: String? + + /// Creates an editable template parameter description. + public init(name: String, suggestedValue: String?) { + self.name = name + self.suggestedValue = suggestedValue + } +} diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift index 85220b6e1441..3ad463df1fe8 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift @@ -82,6 +82,22 @@ public struct CmuxTemplateResolver: Sendable { return values } + /// Describes the editable values needed by a launch UI. + /// + /// Inputs preserve first-occurrence order and use the same precedence as + /// final resolution, so a prompt can prefill the value that would otherwise + /// be selected automatically. + public func parameterInputs(for templates: [CmuxTemplate]) -> [CmuxTemplateParameterInput] { + var seen = Set<String>() + return templates.flatMap(\.variables).compactMap { variable in + guard seen.insert(variable.name).inserted else { return nil } + return CmuxTemplateParameterInput( + name: variable.name, + suggestedValue: value(for: variable) + ) + } + } + private func value(for variable: CmuxTemplateVariable) -> String? { explicitValues[variable.name] ?? definitionValues[variable.name] diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index 19b15e9d03e8..de7359569981 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -82779,6 +82779,74 @@ } } }, + "dialog.workspaceTemplate.configure.confirm": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create Workspace" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースを作成" + } + } + } + }, + "dialog.workspaceTemplate.configure.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Set values for “%@” before creating the workspace." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースを作成する前に「%@」の値を設定してください。" + } + } + } + }, + "dialog.workspaceTemplate.configure.placeholder": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Enter a value" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "値を入力" + } + } + } + }, + "dialog.workspaceTemplate.configure.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Configure Workspace Parameters" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースパラメータを設定" + } + } + } + }, "dialog.workspaceTemplate.failed.message": { "extractionState": "manual", "localizations": { diff --git a/Sources/AppDelegate+SavedLayoutMenu.swift b/Sources/AppDelegate+SavedLayoutMenu.swift index 01874f987f12..4fac9f166401 100644 --- a/Sources/AppDelegate+SavedLayoutMenu.swift +++ b/Sources/AppDelegate+SavedLayoutMenu.swift @@ -64,13 +64,13 @@ extension AppDelegate { NSSound.beep() return } - _ = try context.tabManager.openWorkspace( - fromSavedLayout: layout, + _ = SavedLayoutLauncher.open( + layout, + tabManager: context.tabManager, cwdOverride: nil, - focus: true + focus: true, + presentingWindow: window ) - } catch let error as CmuxTemplateResolutionError { - WorkspaceTemplateErrorPresenter(presentingWindow: window).present(error) } catch { NSSound.beep() } diff --git a/Sources/CmuxConfigExecutor+WorkspaceParameterization.swift b/Sources/CmuxConfigExecutor+WorkspaceParameterization.swift index 96ee036cbc5b..819dd5a51a68 100644 --- a/Sources/CmuxConfigExecutor+WorkspaceParameterization.swift +++ b/Sources/CmuxConfigExecutor+WorkspaceParameterization.swift @@ -5,24 +5,15 @@ import Foundation extension CmuxConfigExecutor { static func resolvedWorkspaceCommandForLaunch( _ command: CmuxCommandDefinition, - presentingWindow: NSWindow? - ) -> CmuxCommandDefinition? { + templateParameters: [String: String] = [:], + processEnvironment: [String: String] = ProcessInfo.processInfo.environment + ) throws -> CmuxCommandDefinition { guard let workspace = command.workspace else { return command } - do { - var resolved = command - resolved.workspace = try workspace.resolvingTemplateParameters( - [:], - processEnvironment: ProcessInfo.processInfo.environment - ) - return resolved - } catch CmuxTemplateResolutionError.missingVariables(let names) { - WorkspaceTemplateErrorPresenter(presentingWindow: presentingWindow).present( - CmuxTemplateResolutionError.missingVariables(names) - ) - return nil - } catch { - WorkspaceTemplateErrorPresenter(presentingWindow: presentingWindow).present(error) - return nil - } + var resolved = command + resolved.workspace = try workspace.resolvingTemplateParametersForLaunch( + templateParameters, + processEnvironment: processEnvironment + ) + return resolved } } diff --git a/Sources/CmuxConfigExecutor.swift b/Sources/CmuxConfigExecutor.swift index 039812bd8c31..5326c6c42b45 100644 --- a/Sources/CmuxConfigExecutor.swift +++ b/Sources/CmuxConfigExecutor.swift @@ -18,13 +18,59 @@ struct CmuxConfigExecutor { presentingWindow: NSWindow? = nil, onExecuted: (() -> Void)? = nil ) -> Bool { - if command.workspace != nil { - guard let resolvedCommand = resolvedWorkspaceCommandForLaunch( - command, - presentingWindow: presentingWindow - ), let resolvedWorkspace = resolvedCommand.workspace else { + if let workspace = command.workspace { + let processEnvironment = ProcessInfo.processInfo.environment + let parameterInputs = workspace.templateParameterInputs( + processEnvironment: processEnvironment + ) + if !parameterInputs.isEmpty { + return WorkspaceTemplateParameterPrompt.requestParameters( + for: workspace, + displayName: displayTitle ?? command.name, + presentingWindow: presentingWindow, + processEnvironment: processEnvironment + ) { parameters in + guard let parameters else { return } + do { + let resolvedCommand = try resolvedWorkspaceCommandForLaunch( + command, + templateParameters: parameters, + processEnvironment: processEnvironment + ) + _ = execute( + command: resolvedCommand, + tabManager: tabManager, + baseCwd: baseCwd, + configSourcePath: configSourcePath, + globalConfigPath: globalConfigPath, + displayTitle: displayTitle, + actionID: actionID, + icon: icon, + iconSourcePath: iconSourcePath, + presentingWindow: presentingWindow, + onExecuted: onExecuted + ) + } catch { + WorkspaceTemplateErrorPresenter( + presentingWindow: presentingWindow + ).present(error) + } + } + } + + let resolvedCommand: CmuxCommandDefinition + do { + resolvedCommand = try resolvedWorkspaceCommandForLaunch( + command, + processEnvironment: processEnvironment + ) + } catch { + WorkspaceTemplateErrorPresenter( + presentingWindow: presentingWindow + ).present(error) return false } + guard let resolvedWorkspace = resolvedCommand.workspace else { return false } return authorizeProjectActionIfNeeded( descriptor: workspaceTrustDescriptor( command: resolvedCommand, diff --git a/Sources/CmuxWorkspaceDefinition+Parameterization.swift b/Sources/CmuxWorkspaceDefinition+Parameterization.swift index 90b5bc0ef67e..564b9f511f62 100644 --- a/Sources/CmuxWorkspaceDefinition+Parameterization.swift +++ b/Sources/CmuxWorkspaceDefinition+Parameterization.swift @@ -2,6 +2,38 @@ import CmuxFoundation import Foundation extension CmuxWorkspaceDefinition { + /// Whether this definition explicitly opted into `{{parameter}}` handling. + var isTemplateParameterizationEnabled: Bool { + params != nil + } + + /// Editable launch inputs in deterministic first-occurrence order. + func templateParameterInputs( + processEnvironment: [String: String] + ) -> [CmuxTemplateParameterInput] { + guard isTemplateParameterizationEnabled else { return [] } + return templateResolver( + explicitParameters: [:], + processEnvironment: processEnvironment + ).parameterInputs(for: templateStrings) + } + + /// Resolves an opted-in definition while preserving literal braces in + /// legacy definitions that have neither a `params` block nor invocation + /// parameters. + func resolvingTemplateParametersForLaunch( + _ explicitParameters: [String: String], + processEnvironment: [String: String] + ) throws -> CmuxWorkspaceDefinition { + guard isTemplateParameterizationEnabled || !explicitParameters.isEmpty else { + return self + } + return try resolvingTemplateParameters( + explicitParameters, + processEnvironment: processEnvironment + ) + } + /// Resolves every launch-time string leaf before workspace state is mutated. func resolvingTemplateParameters( _ explicitParameters: [String: String], diff --git a/Sources/ContentView+SavedLayoutCommands.swift b/Sources/ContentView+SavedLayoutCommands.swift index a36d4369456e..75bac3654f93 100644 --- a/Sources/ContentView+SavedLayoutCommands.swift +++ b/Sources/ContentView+SavedLayoutCommands.swift @@ -58,13 +58,13 @@ extension ContentView { NSSound.beep() return } - _ = try tabManager.openWorkspace( - fromSavedLayout: resolvedLayout, + _ = SavedLayoutLauncher.open( + resolvedLayout, + tabManager: tabManager, cwdOverride: nil, - focus: true + focus: true, + presentingWindow: NSApp.keyWindow ?? NSApp.mainWindow ) - } catch let error as CmuxTemplateResolutionError { - WorkspaceTemplateErrorPresenter(presentingWindow: nil).present(error) } catch { NSSound.beep() } diff --git a/Sources/TabManager+SavedLayouts.swift b/Sources/TabManager+SavedLayouts.swift index 6ccc3e692412..7546fee723d5 100644 --- a/Sources/TabManager+SavedLayouts.swift +++ b/Sources/TabManager+SavedLayouts.swift @@ -1,3 +1,4 @@ +import AppKit import Foundation extension TabManager { @@ -14,7 +15,7 @@ extension TabManager { if let cwdOverride { template.cwd = cwdOverride } - let definition = try template.resolvingTemplateParameters( + let definition = try template.resolvingTemplateParametersForLaunch( templateParameters, processEnvironment: processEnvironment ) @@ -41,3 +42,39 @@ extension TabManager { return workspace } } + +/// Shared interactive launch path for saved layouts from menus and commands. +@MainActor +enum SavedLayoutLauncher { + @discardableResult + static func open( + _ layout: CmuxSavedLayout, + tabManager: TabManager, + cwdOverride: String?, + focus: Bool, + presentingWindow: NSWindow? + ) -> Bool { + let processEnvironment = ProcessInfo.processInfo.environment + return WorkspaceTemplateParameterPrompt.requestParameters( + for: layout.workspace, + displayName: layout.name, + presentingWindow: presentingWindow, + processEnvironment: processEnvironment + ) { parameters in + guard let parameters else { return } + do { + _ = try tabManager.openWorkspace( + fromSavedLayout: layout, + cwdOverride: cwdOverride, + templateParameters: parameters, + processEnvironment: processEnvironment, + focus: focus + ) + } catch { + WorkspaceTemplateErrorPresenter( + presentingWindow: presentingWindow + ).present(error) + } + } + } +} diff --git a/Sources/WorkspaceTemplateParameterPrompt.swift b/Sources/WorkspaceTemplateParameterPrompt.swift new file mode 100644 index 000000000000..269de2ea5dcb --- /dev/null +++ b/Sources/WorkspaceTemplateParameterPrompt.swift @@ -0,0 +1,111 @@ +import AppKit +import CmuxFoundation +import Foundation + +/// Shared parameter collection for every interactive workspace-template launch. +@MainActor +enum WorkspaceTemplateParameterPrompt { + /// Requests editable values when a definition explicitly enables templates. + /// The completion receives `nil` when the user cancels. + @discardableResult + static func requestParameters( + for definition: CmuxWorkspaceDefinition, + displayName: String, + presentingWindow: NSWindow?, + processEnvironment: [String: String] = ProcessInfo.processInfo.environment, + completion: @escaping ([String: String]?) -> Void + ) -> Bool { + let inputs = definition.templateParameterInputs( + processEnvironment: processEnvironment + ) + guard !inputs.isEmpty else { + completion([:]) + return true + } + + let alert = NSAlert() + alert.messageText = String( + localized: "dialog.workspaceTemplate.configure.title", + defaultValue: "Configure Workspace Parameters" + ) + let messageFormat = String( + localized: "dialog.workspaceTemplate.configure.message", + defaultValue: "Set values for “%@” before creating the workspace." + ) + alert.informativeText = String.localizedStringWithFormat( + messageFormat, + displayName + ) + alert.addButton(withTitle: String( + localized: "dialog.workspaceTemplate.configure.confirm", + defaultValue: "Create Workspace" + )) + alert.addButton(withTitle: String( + localized: "common.cancel", + defaultValue: "Cancel" + )) + + let fields = makeFields(inputs) + alert.accessoryView = makeAccessoryView(inputs: inputs, fields: fields) + alert.window.initialFirstResponder = inputs.firstIndex(where: { + $0.suggestedValue == nil + }).flatMap { fields[inputs[$0].name] } ?? fields[inputs[0].name] + + let finish: (NSApplication.ModalResponse) -> Void = { response in + guard response == .alertFirstButtonReturn else { + completion(nil) + return + } + completion(Dictionary(uniqueKeysWithValues: inputs.compactMap { input in + fields[input.name].map { (input.name, $0.stringValue) } + })) + } + + if let window = presentingWindow ?? NSApp.keyWindow ?? NSApp.mainWindow { + alert.beginSheetModal(for: window, completionHandler: finish) + } else { + finish(runCmuxModalAlert(alert)) + } + return true + } + + private static func makeFields( + _ inputs: [CmuxTemplateParameterInput] + ) -> [String: NSTextField] { + Dictionary(uniqueKeysWithValues: inputs.map { input in + let field = NSTextField(string: input.suggestedValue ?? "") + field.placeholderString = input.suggestedValue == nil + ? String( + localized: "dialog.workspaceTemplate.configure.placeholder", + defaultValue: "Enter a value" + ) + : nil + field.identifier = NSUserInterfaceItemIdentifier( + "workspaceTemplate.parameter.\(input.name)" + ) + field.setAccessibilityLabel(input.name) + field.widthAnchor.constraint(equalToConstant: 300).isActive = true + return (input.name, field) + }) + } + + private static func makeAccessoryView( + inputs: [CmuxTemplateParameterInput], + fields: [String: NSTextField] + ) -> NSView { + let rows: [[NSView]] = inputs.compactMap { input in + guard let field = fields[input.name] else { return nil } + let label = NSTextField(labelWithString: input.name) + label.alignment = .right + label.setContentHuggingPriority(.required, for: .horizontal) + return [label, field] + } + let grid = NSGridView(views: rows) + grid.columnSpacing = 12 + grid.rowSpacing = 8 + grid.column(at: 0).xPlacement = .trailing + grid.column(at: 1).xPlacement = .fill + grid.setContentHuggingPriority(.required, for: .vertical) + return grid + } +} diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index 826a9107b83d..cc9f309b23d5 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -1905,6 +1905,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources E30750000000000000000002 /* WorkspaceTabColorResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = E30750000000000000000001 /* WorkspaceTabColorResolution.swift */; }; E3B7A4000000000000000001 /* WorkspaceTabColorSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */; }; 805900000000000000000007 /* WorkspaceTemplateErrorPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */; }; + 80590000000000000000000D /* WorkspaceTemplateParameterPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */; }; 6342F0C10000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */; }; 6047C0DE6047C0DE60470001 /* WorkspaceTerminalTabWorkingDirectoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */; }; 634AA6233A5BBF781FE83E89 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */; }; @@ -3809,6 +3810,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E30750000000000000000001 /* WorkspaceTabColorResolution.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorResolution.swift; sourceTree = "<group>"; }; E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorSettings.swift; sourceTree = "<group>"; }; 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateErrorPresenter.swift; sourceTree = "<group>"; }; + 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateParameterPrompt.swift; sourceTree = "<group>"; }; 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalFocusRecoveryTests.swift; sourceTree = "<group>"; }; 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalTabWorkingDirectoryTests.swift; sourceTree = "<group>"; }; 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalWorkingDirectoryFallbackTests.swift; sourceTree = "<group>"; }; @@ -4138,6 +4140,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 805900000000000000000004 /* CmuxWorkspaceDefinition+Parameterization.swift */, 805900000000000000000006 /* TerminalController+WorkspaceTemplateParameters.swift */, 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */, + 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */, 3023B1003023B1003023B100 /* ConfigSource.swift */, 3023B1013023B1013023B101 /* ConfigSettingsView.swift */, A11EAB000000000000000001 /* AppearanceSettings.swift */, @@ -7483,6 +7486,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E30750000000000000000002 /* WorkspaceTabColorResolution.swift in Sources */, E3B7A4000000000000000001 /* WorkspaceTabColorSettings.swift in Sources */, 805900000000000000000007 /* WorkspaceTemplateErrorPresenter.swift in Sources */, + 80590000000000000000000D /* WorkspaceTemplateParameterPrompt.swift in Sources */, 5732A0075732A0075732A007 /* WorkspaceTitlebarModeLayer.swift in Sources */, 7D7D087CAACD917D8163F844 /* WorkspaceTodoFeature.swift in Sources */, 249969F7EAC03A99E20C753B /* WorkspaceTodoPanel.swift in Sources */, From dc3d8eb2c8dbcbb87e5e99bcacb6dae37d1b7c72 Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Tue, 14 Jul 2026 23:47:39 -0700 Subject: [PATCH 07/16] Add failing server-side template resolution tests --- .../CLIWorkspaceTemplateParameterTests.swift | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/cmuxTests/CLIWorkspaceTemplateParameterTests.swift b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift index 1142d96a2dbc..19831b9afdf9 100644 --- a/cmuxTests/CLIWorkspaceTemplateParameterTests.swift +++ b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift @@ -15,7 +15,7 @@ extension CLINotifyProcessIntegrationRegressionTests { listenerFD: listenerFD, state: state, fulfillWhen: { line in - self.jsonObject(line)?["method"] as? String == "surface.send_text" + self.jsonObject(line)?["method"] as? String == "workspace.create" } ) { line in guard let request = self.jsonObject(line), @@ -48,10 +48,12 @@ extension CLINotifyProcessIntegrationRegressionTests { arguments: [ "workspace", "create", "--name", "Dev {{ticket}}", + "--cwd", "{{root}}", "--command", "api --ticket {{ticket}} --port {{apiPort}}", "--param", "ticket=FIRST", "--param=ticket=BERKS-87", "--param", "apiPort", + "--param", "root=/tmp/cmux-template-root", "--focus", "false", ], environment: environment, @@ -66,16 +68,25 @@ extension CLINotifyProcessIntegrationRegressionTests { let create = try XCTUnwrap(requests.first { $0["method"] as? String == "workspace.create" }) let createParams = try XCTUnwrap(create["params"] as? [String: Any]) XCTAssertEqual(createParams["title"] as? String, "Dev {{ticket}}") + XCTAssertEqual(createParams["cwd"] as? String, "{{root}}") + XCTAssertEqual( + createParams["caller_cwd"] as? String, + FileManager.default.currentDirectoryPath + ) + XCTAssertEqual( + createParams["initial_command"] as? String, + "api --ticket {{ticket}} --port {{apiPort}}" + ) XCTAssertEqual(createParams["focus"] as? Bool, false) XCTAssertEqual( createParams["template_params"] as? [String: String], - ["ticket": "BERKS-87", "apiPort": "4100"] + [ + "ticket": "BERKS-87", + "apiPort": "4100", + "root": "/tmp/cmux-template-root", + ] ) - - let send = try XCTUnwrap(requests.first { $0["method"] as? String == "surface.send_text" }) - let sendParams = try XCTUnwrap(send["params"] as? [String: Any]) - XCTAssertEqual(sendParams["workspace_id"] as? String, "workspace:9") - XCTAssertEqual(sendParams["text"] as? String, "api --ticket BERKS-87 --port 4100\r") + XCTAssertFalse(requests.contains { $0["method"] as? String == "surface.send_text" }) } func testLayoutOpenForwardsTemplateParametersWithoutFocus() throws { @@ -110,8 +121,10 @@ extension CLINotifyProcessIntegrationRegressionTests { executablePath: try bundledCLIPath(), arguments: [ "layout", "open", "Ticket Dev", + "--cwd", "{{root}}", "--param", "ticket=BERKS-87", "--param", "vitePort=5174", + "--param", "root=/tmp/cmux-layout-root", "--focus", "false", ], environment: workspaceTemplateCLIEnvironment(socketPath: socketPath), @@ -126,9 +139,18 @@ extension CLINotifyProcessIntegrationRegressionTests { XCTAssertEqual(request["method"] as? String, "layout.open") let params = try XCTUnwrap(request["params"] as? [String: Any]) XCTAssertEqual(params["focus"] as? Bool, false) + XCTAssertEqual(params["cwd"] as? String, "{{root}}") + XCTAssertEqual( + params["caller_cwd"] as? String, + FileManager.default.currentDirectoryPath + ) XCTAssertEqual( params["template_params"] as? [String: String], - ["ticket": "BERKS-87", "vitePort": "5174"] + [ + "ticket": "BERKS-87", + "vitePort": "5174", + "root": "/tmp/cmux-layout-root", + ] ) } From 2ff7ee7fcab5c65690b9e803e68ad66df3081ac8 Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Tue, 14 Jul 2026 23:52:31 -0700 Subject: [PATCH 08/16] Resolve workspace templates once in the app --- CLI/CMUXCLI+WorkspaceTemplateParameters.swift | 32 ---------------- CLI/cmux.swift | 21 ++-------- CLI/cmux_layout.swift | 5 ++- .../ControlCommandCoordinator+Layout.swift | 1 + .../Layout/ControlLayoutContext.swift | 1 + ...ControlCommandCoordinatorLayoutTests.swift | 5 +++ .../ControlLayoutContextTestStubs.swift | 1 + Sources/TabManager+SavedLayouts.swift | 9 ++++- ...minalController+ControlLayoutContext.swift | 2 + .../TerminalController+WorkspaceCreate.swift | 38 +++++++++++++------ docs/cli-contract.md | 8 ++++ web/data/cmux.schema.json | 2 +- web/messages/en.json | 4 +- web/messages/ja.json | 4 +- 14 files changed, 64 insertions(+), 69 deletions(-) diff --git a/CLI/CMUXCLI+WorkspaceTemplateParameters.swift b/CLI/CMUXCLI+WorkspaceTemplateParameters.swift index c63c2bdd070c..13ae2bb9a0ae 100644 --- a/CLI/CMUXCLI+WorkspaceTemplateParameters.swift +++ b/CLI/CMUXCLI+WorkspaceTemplateParameters.swift @@ -103,38 +103,6 @@ extension CMUXCLI { return WorkspaceTemplateParameterOptions(values: values, remaining: remaining) } - func resolveWorkspaceCommandTemplate( - _ command: String, - templateParameters: [String: String], - workspaceEnvironment: [String: String], - commandName: String, - processEnvironment: [String: String] = ProcessInfo.processInfo.environment - ) throws -> String { - let literalWorkspaceEnvironment = workspaceEnvironment.filter { _, value in - !CmuxTemplate(value).containsVariables - } - do { - return try CmuxTemplateResolver( - explicitValues: templateParameters, - workspaceEnvironment: literalWorkspaceEnvironment, - processEnvironment: processEnvironment - ).resolve(CmuxTemplate(command)) - } catch CmuxTemplateResolutionError.missingVariables(let names) { - throw CLIError( - message: String( - format: String( - localized: "cli.workspace.templateParameter.error.missing", - defaultValue: "%@: missing workspace template parameters: %@" - ), - locale: .current, - commandName, - names.joined(separator: ", ") - ), - v2Code: "missing_parameters" - ) - } - } - private func parseWorkspaceTemplateParameter( _ raw: String, commandName: String, diff --git a/CLI/cmux.swift b/CLI/cmux.swift index 90a3ffbf9b30..eb65910251a6 100644 --- a/CLI/cmux.swift +++ b/CLI/cmux.swift @@ -7480,7 +7480,8 @@ struct CMUXCLI { var params: [String: Any] = [:] try applyWindowOrCallerContext(to: ¶ms, client: client, windowRaw: windowOpt ?? windowOverride) if let cwdOpt { - params["cwd"] = resolvePath(cwdOpt) + params["cwd"] = cwdOpt + params["caller_cwd"] = FileManager.default.currentDirectoryPath } if let nameOpt { params["title"] = nameOpt } if let descriptionOpt { params["description"] = descriptionOpt } @@ -7494,16 +7495,8 @@ struct CMUXCLI { if !templateParameterOptions.values.isEmpty { params["template_params"] = templateParameterOptions.values } - let resolvedCommand: String? if layoutOpt == nil, let commandOpt { - resolvedCommand = try resolveWorkspaceCommandTemplate( - commandOpt, - templateParameters: templateParameterOptions.values, - workspaceEnvironment: workspaceEnv, - commandName: commandName - ) - } else { - resolvedCommand = nil + params["initial_command"] = commandOpt } if let layoutOpt { guard let layoutData = layoutOpt.data(using: .utf8), @@ -7520,14 +7513,6 @@ struct CMUXCLI { } else { print("OK \(wsId)") } - if layoutOpt == nil, let commandText = resolvedCommand, !wsId.isEmpty { - let text = unescapeSendText(commandText + "\\n") - let sendParams: [String: Any] = [ - "text": text, - "workspace_id": wsId - ] - _ = try client.sendV2(method: "surface.send_text", params: sendParams) - } } /// Parses repeatable `--env KEY=VALUE` / `--env=KEY=VALUE` and diff --git a/CLI/cmux_layout.swift b/CLI/cmux_layout.swift index 0a52b7f43959..e1675db9daed 100644 --- a/CLI/cmux_layout.swift +++ b/CLI/cmux_layout.swift @@ -158,7 +158,10 @@ extension CMUXCLI { let windowHandle = try normalizeWindowHandle(windowOpt ?? windowOverride, client: client) var params: [String: Any] = ["name": name] if let windowHandle { params["window_id"] = windowHandle } - if let cwdOpt { params["cwd"] = resolvePath(cwdOpt) } + if let cwdOpt { + params["cwd"] = cwdOpt + params["caller_cwd"] = FileManager.default.currentDirectoryPath + } if !templateParameterOptions.values.isEmpty { params["template_params"] = templateParameterOptions.values } diff --git a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift index 53d59486d2e1..732f9db8270e 100644 --- a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift +++ b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlCommandCoordinator+Layout.swift @@ -124,6 +124,7 @@ extension ControlCommandCoordinator { routing: routingSelectors(params), name: name, cwd: optionalTrimmedRawString(params, "cwd"), + callerCwd: optionalTrimmedRawString(params, "caller_cwd"), templateParameters: templateParameters, focusRequested: bool(params, "focus") ?? false ) ?? .tabManagerUnavailable diff --git a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift index ad47e2f241c2..978d9a330099 100644 --- a/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift +++ b/Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Layout/ControlLayoutContext.swift @@ -107,6 +107,7 @@ public protocol ControlLayoutContext: AnyObject { routing: ControlRoutingSelectors, name: String, cwd: String?, + callerCwd: String?, templateParameters: [String: String], focusRequested: Bool ) -> ControlLayoutOpenResolution diff --git a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift index 09690113f7fc..9fe5a687e5c3 100644 --- a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift +++ b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorLayoutTests.swift @@ -7,6 +7,7 @@ private final class FakeLayoutControlCommandContext: ControlCommandContext { struct OpenInvocation: Equatable { let name: String let cwd: String? + let callerCwd: String? let templateParameters: [String: String] let focusRequested: Bool } @@ -18,12 +19,14 @@ private final class FakeLayoutControlCommandContext: ControlCommandContext { routing: ControlRoutingSelectors, name: String, cwd: String?, + callerCwd: String?, templateParameters: [String: String], focusRequested: Bool ) -> ControlLayoutOpenResolution { openInvocation = OpenInvocation( name: name, cwd: cwd, + callerCwd: callerCwd, templateParameters: templateParameters, focusRequested: focusRequested ) @@ -46,6 +49,7 @@ struct ControlCommandCoordinatorLayoutTests { params: [ "name": .string("Ticket Dev"), "cwd": .string("/tmp/{{ticket}}"), + "caller_cwd": .string("/Users/tester/project"), "focus": .bool(false), "template_params": .object([ "ticket": .string("BERKS-87"), @@ -57,6 +61,7 @@ struct ControlCommandCoordinatorLayoutTests { #expect(context.openInvocation == .init( name: "Ticket Dev", cwd: "/tmp/{{ticket}}", + callerCwd: "/Users/tester/project", templateParameters: ["ticket": "BERKS-87", "vitePort": "5174"], focusRequested: false )) diff --git a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift index 47c6f41d258e..ea305ebf0ed6 100644 --- a/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift +++ b/Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlLayoutContextTestStubs.swift @@ -18,6 +18,7 @@ extension ControlLayoutContext { routing: ControlRoutingSelectors, name: String, cwd: String?, + callerCwd: String?, templateParameters: [String: String], focusRequested: Bool ) -> ControlLayoutOpenResolution { .tabManagerUnavailable } diff --git a/Sources/TabManager+SavedLayouts.swift b/Sources/TabManager+SavedLayouts.swift index 7546fee723d5..9a3994ae925c 100644 --- a/Sources/TabManager+SavedLayouts.swift +++ b/Sources/TabManager+SavedLayouts.swift @@ -8,9 +8,11 @@ extension TabManager { cwdOverride: String?, templateParameters: [String: String] = [:], processEnvironment: [String: String] = ProcessInfo.processInfo.environment, + baseCwd: String? = nil, focus: Bool ) throws -> Workspace { - let baseCwd = FileManager.default.homeDirectoryForCurrentUser.path + let resolvedBaseCwd = baseCwd + ?? FileManager.default.homeDirectoryForCurrentUser.path var template = layout.workspace if let cwdOverride { template.cwd = cwdOverride @@ -19,7 +21,10 @@ extension TabManager { templateParameters, processEnvironment: processEnvironment ) - let resolvedCwd = CmuxConfigStore.resolveCwd(definition.cwd, relativeTo: baseCwd) + let resolvedCwd = CmuxConfigStore.resolveCwd( + definition.cwd, + relativeTo: resolvedBaseCwd + ) let workspace = addWorkspace( title: definition.name ?? layout.name, workingDirectory: resolvedCwd, diff --git a/Sources/TerminalController+ControlLayoutContext.swift b/Sources/TerminalController+ControlLayoutContext.swift index 10b850073155..a2210664d54a 100644 --- a/Sources/TerminalController+ControlLayoutContext.swift +++ b/Sources/TerminalController+ControlLayoutContext.swift @@ -82,6 +82,7 @@ extension TerminalController: ControlLayoutContext { routing: ControlRoutingSelectors, name: String, cwd: String?, + callerCwd: String?, templateParameters: [String: String], focusRequested: Bool ) -> ControlLayoutOpenResolution { @@ -99,6 +100,7 @@ extension TerminalController: ControlLayoutContext { fromSavedLayout: layout, cwdOverride: cwd, templateParameters: templateParameters, + baseCwd: callerCwd, focus: focus ) return .opened(workspaceID: workspace.id) diff --git a/Sources/TerminalController+WorkspaceCreate.swift b/Sources/TerminalController+WorkspaceCreate.swift index 0d5777bf79b9..ad33427b603d 100644 --- a/Sources/TerminalController+WorkspaceCreate.swift +++ b/Sources/TerminalController+WorkspaceCreate.swift @@ -136,19 +136,35 @@ extension TerminalController { let initialCommand: String? let initialEnv: [String: String] let description: String? - do { - let values = try resolver.resolvedValues( - for: templateDefinition.templateStrings + additionalTemplates - ) - resolvedDefinition = templateDefinition.substitutingTemplateValues(values) - initialCommand = initialCommandTemplate.map { CmuxTemplate($0).substituting(values) } - initialEnv = initialEnvTemplate.mapValues { CmuxTemplate($0).substituting(values) } - description = descriptionTemplate.map { CmuxTemplate($0).substituting(values) } - } catch { - return workspaceTemplateResolutionFailure(error) + if templateParameters.isEmpty { + resolvedDefinition = templateDefinition + initialCommand = initialCommandTemplate + initialEnv = initialEnvTemplate + description = descriptionTemplate + } else { + do { + let values = try resolver.resolvedValues( + for: templateDefinition.templateStrings + additionalTemplates + ) + resolvedDefinition = templateDefinition.substitutingTemplateValues(values) + initialCommand = initialCommandTemplate.map { CmuxTemplate($0).substituting(values) } + initialEnv = initialEnvTemplate.mapValues { CmuxTemplate($0).substituting(values) } + description = descriptionTemplate.map { CmuxTemplate($0).substituting(values) } + } catch { + return workspaceTemplateResolutionFailure(error) + } } let title = resolvedDefinition.name - let cwd = resolvedDefinition.cwd + let callerCwd = v2RawString(params, "caller_cwd")? + .trimmingCharacters(in: .whitespacesAndNewlines) + let cwdBase = (callerCwd?.isEmpty == false ? callerCwd : nil) + ?? FileManager.default.homeDirectoryForCurrentUser.path + let cwd = resolvedDefinition.cwd.map { value in + CmuxConfigStore.resolveCwd( + value, + relativeTo: cwdBase + ) + } let workspaceEnv = Workspace.sanitizedWorkspaceEnvironment(resolvedDefinition.env ?? [:]) layoutNode = resolvedDefinition.layout diff --git a/docs/cli-contract.md b/docs/cli-contract.md index 5ddd2f11c353..93ba0d47f242 100644 --- a/docs/cli-contract.md +++ b/docs/cli-contract.md @@ -235,6 +235,14 @@ strings. `{{name=default}}` supplies an inline fallback, and `\{{name}}` emits a literal `{{name}}`. Names use the same grammar as custom-command parameters: they start with a letter or `_` and continue with letters, digits, `_`, or `-`. +File-backed workspace definitions opt into placeholder handling by declaring a +`params` object; use `"params": {}` when every value should be entered at +launch. Selecting an opted-in configured layout or saved layout in the cmux UI +opens a parameter sheet with one editable field per placeholder, prefilled from +the precedence rules below. Definitions without `params` preserve existing +`{{...}}` text literally. Socket `workspace.create` requests opt in by supplying +at least one `template_params` value. + Parameterization covers the workspace `name`, `cwd`, `setup`, and `env` values; surface `name`, `command`, `cwd`, `env` values, and `url`; and the corresponding title, description, initial command, and initial environment fields on diff --git a/web/data/cmux.schema.json b/web/data/cmux.schema.json index c28b00f93972..a24b7c6ea4c1 100644 --- a/web/data/cmux.schema.json +++ b/web/data/cmux.schema.json @@ -1778,7 +1778,7 @@ "additionalProperties": { "type": "string" }, - "description": "Default values for workspace {{variable}} placeholders. Explicit invocation template_params/--param values take precedence." + "description": "Opts the workspace into {{variable}} placeholder handling and supplies default values. Use an empty object to request every value in the launch UI. Explicit invocation template_params/--param values take precedence." }, "workspaceLayoutNode": { "oneOf": [ diff --git a/web/messages/en.json b/web/messages/en.json index 1d610a214fa5..ea862a7ae7fe 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -1885,9 +1885,9 @@ "absolutePath": "Absolute path", "cwdAbsolute": "used as-is", "fullExample": "Full example", - "wsFieldParams": "Default values for workspace template variables", + "wsFieldParams": "Enable workspace template variables and provide their default values", "parameterizedLayouts": "Parameterized workspace layouts", - "parameterizedLayoutsDesc": "Use <variable>{variableSyntax}</variable> or <defaultValue>{defaultSyntax}</defaultValue> in workspace and surface titles, paths, environment values, setup commands, terminal commands, and browser URLs. Prefix <escaped>{escapedSyntax}</escaped> to keep a placeholder literal. The <params>params</params> object supplies reusable defaults.", + "parameterizedLayoutsDesc": "Add a <params>params</params> object to enable workspace parameters, then use <variable>{variableSyntax}</variable> or <defaultValue>{defaultSyntax}</defaultValue> in workspace and surface titles, paths, environment values, setup commands, terminal commands, and browser URLs. Selecting the layout in cmux opens an editable parameter sheet prefilled from reusable defaults. Prefix <escaped>{escapedSyntax}</escaped> to keep a placeholder literal.", "parameterizedLayoutsPrecedence": "Resolution order is <explicit>explicit invocation values</explicit>, <params>params</params> defaults, literal workspace <env>env</env>, the <process>cmux process environment</process>, then the <inline>inline default</inline>. Missing required values abort the whole launch before any workspace is created.", "parameterizedLayoutsCLI": "Use <paramValue>--param KEY=VALUE</paramValue> or <paramEnv>--param KEY</paramEnv> with <workspaceCreate>cmux workspace create</workspaceCreate> and <layoutOpen>cmux layout open</layoutOpen>. The value-less form imports an exported environment variable from the invoking shell. Socket clients send template_params; missing values return <missing>missing_parameters</missing>.", "restartNew": "Create a new workspace (default)", diff --git a/web/messages/ja.json b/web/messages/ja.json index f01f1baab820..ae9a676cf03d 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -1808,9 +1808,9 @@ "absolutePath": "絶対パス", "cwdAbsolute": "そのまま使用", "fullExample": "完全な例", - "wsFieldParams": "ワークスペーステンプレート変数の既定値", + "wsFieldParams": "ワークスペーステンプレート変数を有効にして既定値を指定", "parameterizedLayouts": "パラメータ化されたワークスペースレイアウト", - "parameterizedLayoutsDesc": "ワークスペースやサーフェスのタイトル、パス、環境変数値、セットアップコマンド、ターミナルコマンド、ブラウザ URL では <variable>{variableSyntax}</variable> または <defaultValue>{defaultSyntax}</defaultValue> を使えます。プレースホルダーを文字どおり残すには <escaped>{escapedSyntax}</escaped> を付けます。<params>params</params> オブジェクトで再利用可能な既定値を指定します。", + "parameterizedLayoutsDesc": "<params>params</params> オブジェクトを追加してワークスペースパラメータを有効にすると、ワークスペースやサーフェスのタイトル、パス、環境変数値、セットアップコマンド、ターミナルコマンド、ブラウザ URL で <variable>{variableSyntax}</variable> または <defaultValue>{defaultSyntax}</defaultValue> を使えます。cmux でレイアウトを選択すると、再利用可能な既定値が入力された編集可能なパラメータシートが開きます。プレースホルダーを文字どおり残すには <escaped>{escapedSyntax}</escaped> を付けます。", "parameterizedLayoutsPrecedence": "解決順序は <explicit>呼び出し時の明示値</explicit>、<params>params</params> の既定値、ワークスペースのリテラル <env>env</env>、<process>cmux プロセス環境</process>、<inline>インライン既定値</inline>です。必須値がない場合、ワークスペースを作成する前に起動全体が中止されます。", "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> と <layoutOpen>cmux layout open</layoutOpen> では <paramValue>--param KEY=VALUE</paramValue> または <paramEnv>--param KEY</paramEnv> を使います。値なし形式は呼び出し元シェルでエクスポートされた環境変数を取り込みます。ソケットクライアントは template_params を送り、値がない場合は <missing>missing_parameters</missing> が返ります。", "restartNew": "新しいワークスペースを作成する (デフォルト)", From dcc30e184c352b9cb820ddb6c80f522df0ff653c Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 01:26:43 -0700 Subject: [PATCH 09/16] Align workspace parameter UI with shared action architecture --- Sources/AppDelegate+SavedLayoutMenu.swift | 3 +-- Sources/CmuxConfigExecutor.swift | 7 ++++--- Sources/ContentView+SavedLayoutCommands.swift | 3 +-- Sources/TabManager+SavedLayouts.swift | 17 +++++++---------- Sources/WorkspaceTemplateParameterPrompt.swift | 15 ++++++++++----- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Sources/AppDelegate+SavedLayoutMenu.swift b/Sources/AppDelegate+SavedLayoutMenu.swift index 4fac9f166401..9dc812feb576 100644 --- a/Sources/AppDelegate+SavedLayoutMenu.swift +++ b/Sources/AppDelegate+SavedLayoutMenu.swift @@ -64,9 +64,8 @@ extension AppDelegate { NSSound.beep() return } - _ = SavedLayoutLauncher.open( + _ = context.tabManager.openSavedLayoutInteractively( layout, - tabManager: context.tabManager, cwdOverride: nil, focus: true, presentingWindow: window diff --git a/Sources/CmuxConfigExecutor.swift b/Sources/CmuxConfigExecutor.swift index 5326c6c42b45..78614ca40516 100644 --- a/Sources/CmuxConfigExecutor.swift +++ b/Sources/CmuxConfigExecutor.swift @@ -24,11 +24,12 @@ struct CmuxConfigExecutor { processEnvironment: processEnvironment ) if !parameterInputs.isEmpty { - return WorkspaceTemplateParameterPrompt.requestParameters( + return WorkspaceTemplateParameterPrompt( + processEnvironment: processEnvironment + ).requestParameters( for: workspace, displayName: displayTitle ?? command.name, - presentingWindow: presentingWindow, - processEnvironment: processEnvironment + presentingWindow: presentingWindow ) { parameters in guard let parameters else { return } do { diff --git a/Sources/ContentView+SavedLayoutCommands.swift b/Sources/ContentView+SavedLayoutCommands.swift index 75bac3654f93..776a97b90c33 100644 --- a/Sources/ContentView+SavedLayoutCommands.swift +++ b/Sources/ContentView+SavedLayoutCommands.swift @@ -58,9 +58,8 @@ extension ContentView { NSSound.beep() return } - _ = SavedLayoutLauncher.open( + _ = tabManager.openSavedLayoutInteractively( resolvedLayout, - tabManager: tabManager, cwdOverride: nil, focus: true, presentingWindow: NSApp.keyWindow ?? NSApp.mainWindow diff --git a/Sources/TabManager+SavedLayouts.swift b/Sources/TabManager+SavedLayouts.swift index 9a3994ae925c..b0ae908396b7 100644 --- a/Sources/TabManager+SavedLayouts.swift +++ b/Sources/TabManager+SavedLayouts.swift @@ -46,29 +46,26 @@ extension TabManager { } return workspace } -} -/// Shared interactive launch path for saved layouts from menus and commands. -@MainActor -enum SavedLayoutLauncher { + /// Shared interactive launch path for saved layouts from menus and commands. @discardableResult - static func open( + func openSavedLayoutInteractively( _ layout: CmuxSavedLayout, - tabManager: TabManager, cwdOverride: String?, focus: Bool, presentingWindow: NSWindow? ) -> Bool { let processEnvironment = ProcessInfo.processInfo.environment - return WorkspaceTemplateParameterPrompt.requestParameters( + return WorkspaceTemplateParameterPrompt( + processEnvironment: processEnvironment + ).requestParameters( for: layout.workspace, displayName: layout.name, - presentingWindow: presentingWindow, - processEnvironment: processEnvironment + presentingWindow: presentingWindow ) { parameters in guard let parameters else { return } do { - _ = try tabManager.openWorkspace( + _ = try self.openWorkspace( fromSavedLayout: layout, cwdOverride: cwdOverride, templateParameters: parameters, diff --git a/Sources/WorkspaceTemplateParameterPrompt.swift b/Sources/WorkspaceTemplateParameterPrompt.swift index 269de2ea5dcb..28711ae2fab1 100644 --- a/Sources/WorkspaceTemplateParameterPrompt.swift +++ b/Sources/WorkspaceTemplateParameterPrompt.swift @@ -4,15 +4,20 @@ import Foundation /// Shared parameter collection for every interactive workspace-template launch. @MainActor -enum WorkspaceTemplateParameterPrompt { +struct WorkspaceTemplateParameterPrompt { + private let processEnvironment: [String: String] + + init(processEnvironment: [String: String]) { + self.processEnvironment = processEnvironment + } + /// Requests editable values when a definition explicitly enables templates. /// The completion receives `nil` when the user cancels. @discardableResult - static func requestParameters( + func requestParameters( for definition: CmuxWorkspaceDefinition, displayName: String, presentingWindow: NSWindow?, - processEnvironment: [String: String] = ProcessInfo.processInfo.environment, completion: @escaping ([String: String]?) -> Void ) -> Bool { let inputs = definition.templateParameterInputs( @@ -69,7 +74,7 @@ enum WorkspaceTemplateParameterPrompt { return true } - private static func makeFields( + private func makeFields( _ inputs: [CmuxTemplateParameterInput] ) -> [String: NSTextField] { Dictionary(uniqueKeysWithValues: inputs.map { input in @@ -89,7 +94,7 @@ enum WorkspaceTemplateParameterPrompt { }) } - private static func makeAccessoryView( + private func makeAccessoryView( inputs: [CmuxTemplateParameterInput], fields: [String: NSTextField] ) -> NSView { From c641dae60a9ce1e1263cc32c379ebaa5583598e0 Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 02:55:39 -0700 Subject: [PATCH 10/16] Add failing workspace parameter form sizing test --- cmux.xcodeproj/project.pbxproj | 4 ++ ...orkspaceTemplateParameterPromptTests.swift | 71 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 cmuxTests/WorkspaceTemplateParameterPromptTests.swift diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index cc9f309b23d5..d483284527b1 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -1906,6 +1906,7 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources E3B7A4000000000000000001 /* WorkspaceTabColorSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */; }; 805900000000000000000007 /* WorkspaceTemplateErrorPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */; }; 80590000000000000000000D /* WorkspaceTemplateParameterPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */; }; + 80590000000000000000000F /* WorkspaceTemplateParameterPromptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000010 /* WorkspaceTemplateParameterPromptTests.swift */; }; 6342F0C10000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */; }; 6047C0DE6047C0DE60470001 /* WorkspaceTerminalTabWorkingDirectoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */; }; 634AA6233A5BBF781FE83E89 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */; }; @@ -3811,6 +3812,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorSettings.swift; sourceTree = "<group>"; }; 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateErrorPresenter.swift; sourceTree = "<group>"; }; 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateParameterPrompt.swift; sourceTree = "<group>"; }; + 805900000000000000000010 /* WorkspaceTemplateParameterPromptTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateParameterPromptTests.swift; sourceTree = "<group>"; }; 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalFocusRecoveryTests.swift; sourceTree = "<group>"; }; 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalTabWorkingDirectoryTests.swift; sourceTree = "<group>"; }; 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalWorkingDirectoryFallbackTests.swift; sourceTree = "<group>"; }; @@ -5693,6 +5695,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 5B0C00010000000000000004 /* SidebarResizerOcclusionResolverTests.swift */, 5B0C00010000000000000006 /* PortalDividerCursorOcclusionTests.swift */, C0DE1A080000000000000002 /* SavedLayoutDefinitionTests.swift */, + 805900000000000000000010 /* WorkspaceTemplateParameterPromptTests.swift */, C0DE1A070000000000000002 /* SavedLayoutStoreTests.swift */, 5830CA11BAC0000000000001 /* SocketCallbackAwaiterMainThreadTests.swift */, 5C0011AA0000000000000002 /* GhosttyScrollPreciseBoostTests.swift */, @@ -8147,6 +8150,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 6B524A0CB34FD46A771335AB /* WorkspaceSplitStartupCommandTests.swift in Sources */, F6120000A1B2C3D4E5F60718 /* WorkspaceSSHFishShellTests.swift in Sources */, FA000000A1B2C3D4E5F60718 /* WorkspaceStressProfileTests.swift in Sources */, + 80590000000000000000000F /* WorkspaceTemplateParameterPromptTests.swift in Sources */, 6342F0C10000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift in Sources */, 6047C0DE6047C0DE60470001 /* WorkspaceTerminalTabWorkingDirectoryTests.swift in Sources */, 634AA6233A5BBF781FE83E89 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift in Sources */, diff --git a/cmuxTests/WorkspaceTemplateParameterPromptTests.swift b/cmuxTests/WorkspaceTemplateParameterPromptTests.swift new file mode 100644 index 000000000000..ad2f2fdc4d2e --- /dev/null +++ b/cmuxTests/WorkspaceTemplateParameterPromptTests.swift @@ -0,0 +1,71 @@ +import AppKit +import CmuxFoundation +import Testing + +#if canImport(cmux_DEV) +@testable import cmux_DEV +#elseif canImport(cmux) +@testable import cmux +#endif + +@MainActor +@Suite +struct WorkspaceTemplateParameterPromptTests { + @Test + func parameterFormHasAVisibleResolvedSize() throws { + let presentingWindow = NSWindow( + contentRect: NSRect(x: 0, y: 0, width: 640, height: 480), + styleMask: [.titled], + backing: .buffered, + defer: false + ) + presentingWindow.makeKeyAndOrderFront(nil) + defer { + if let sheet = presentingWindow.attachedSheet { + presentingWindow.endSheet( + sheet, + returnCode: .alertSecondButtonReturn + ) + } + presentingWindow.close() + } + + let definition = CmuxWorkspaceDefinition( + name: "{{ticket}} Parameter UI", + cwd: "{{projectDir}}", + params: [ + "ticket": "CMUX-8059", + "projectDir": "/tmp/cmux", + ] + ) + let handled = WorkspaceTemplateParameterPrompt( + processEnvironment: [:] + ).requestParameters( + for: definition, + displayName: "Parameter UI Test", + presentingWindow: presentingWindow, + completion: { _ in } + ) + + #expect(handled) + let sheet = try #require(presentingWindow.attachedSheet) + let contentView = try #require(sheet.contentView) + let grid = try #require( + descendants(of: contentView).compactMap { $0 as? NSGridView }.first + ) + let fields = descendants(of: grid).compactMap { $0 as? NSTextField } + .filter(\.isEditable) + + #expect(grid.frame.width >= 300) + #expect(grid.frame.height > 0) + #expect(fields.count == 2) + #expect(fields.allSatisfy { $0.frame.width >= 300 }) + #expect(fields.allSatisfy { $0.frame.height > 0 }) + } + + private func descendants(of root: NSView) -> [NSView] { + root.subviews.flatMap { view in + [view] + descendants(of: view) + } + } +} From c14b918f18fc7e3363027875e4b4362e3e1c958c Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 02:57:54 -0700 Subject: [PATCH 11/16] Size workspace parameter form before presentation --- Sources/WorkspaceTemplateParameterPrompt.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/WorkspaceTemplateParameterPrompt.swift b/Sources/WorkspaceTemplateParameterPrompt.swift index 28711ae2fab1..0c479c51d123 100644 --- a/Sources/WorkspaceTemplateParameterPrompt.swift +++ b/Sources/WorkspaceTemplateParameterPrompt.swift @@ -111,6 +111,8 @@ struct WorkspaceTemplateParameterPrompt { grid.column(at: 0).xPlacement = .trailing grid.column(at: 1).xPlacement = .fill grid.setContentHuggingPriority(.required, for: .vertical) + grid.layoutSubtreeIfNeeded() + grid.setFrameSize(grid.fittingSize) return grid } } From 7faddef1cbf136329775e388af0b055779ec303f Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 04:31:00 -0700 Subject: [PATCH 12/16] Add failing workspace command input regressions --- .../CmuxTemplateTests.swift | 7 +++ .../CLIWorkspaceTemplateParameterTests.swift | 45 +++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift index 18848d4ef77a..bfcf9f1c146a 100644 --- a/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift +++ b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxTemplateTests.swift @@ -65,6 +65,13 @@ import Testing == "{{bad.name}} {{1port}} {{literal}}") } + @Test func malformedPlaceholderDoesNotHideNestedValidPlaceholder() throws { + let resolver = CmuxTemplateResolver(explicitValues: ["ticket": "BERKS-87"]) + let resolved = try resolver.resolve(CmuxTemplate("{{bad{{ticket}}")) + + #expect(resolved == "{{badBERKS-87") + } + @Test func parameterInputsPreserveOrderAndExposeEditableSuggestedValues() { let resolver = CmuxTemplateResolver( definitionValues: ["ticket": "CMUX-8059"], diff --git a/cmuxTests/CLIWorkspaceTemplateParameterTests.swift b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift index 19831b9afdf9..63d86ec49299 100644 --- a/cmuxTests/CLIWorkspaceTemplateParameterTests.swift +++ b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift @@ -1,9 +1,14 @@ import Darwin import Foundation import XCTest +#if canImport(cmux_DEV) +@testable import cmux_DEV +#elseif canImport(cmux) +@testable import cmux +#endif extension CLINotifyProcessIntegrationRegressionTests { - func testWorkspaceCreateForwardsRepeatableTemplateParametersAndResolvesCommand() throws { + func testWorkspaceCreateForwardsRepeatableTemplateParametersAndPreservesCommandAsShellInput() throws { let socketPath = makeSocketPath("workspace-template") let listenerFD = try bindUnixSocket(at: socketPath) defer { @@ -49,7 +54,7 @@ extension CLINotifyProcessIntegrationRegressionTests { "workspace", "create", "--name", "Dev {{ticket}}", "--cwd", "{{root}}", - "--command", "api --ticket {{ticket}} --port {{apiPort}}", + "--command", "api\\t--ticket {{ticket}}\\n--port {{apiPort}}\\rready", "--param", "ticket=FIRST", "--param=ticket=BERKS-87", "--param", "apiPort", @@ -74,9 +79,10 @@ extension CLINotifyProcessIntegrationRegressionTests { FileManager.default.currentDirectoryPath ) XCTAssertEqual( - createParams["initial_command"] as? String, - "api --ticket {{ticket}} --port {{apiPort}}" + createParams["initial_input"] as? String, + "api\t--ticket {{ticket}}\r--port {{apiPort}}\rready\r" ) + XCTAssertNil(createParams["initial_command"]) XCTAssertEqual(createParams["focus"] as? Bool, false) XCTAssertEqual( createParams["template_params"] as? [String: String], @@ -89,6 +95,37 @@ extension CLINotifyProcessIntegrationRegressionTests { XCTAssertFalse(requests.contains { $0["method"] as? String == "surface.send_text" }) } + func testWorkspaceCreateResolvesTemplatedInitialShellInputWithoutProcessCommand() throws { + let tabManager = TabManager(autoWelcomeIfNeeded: false) + defer { + tabManager.tabs.forEach { $0.teardownAllPanels() } + } + + let result = TerminalController.shared.v2WorkspaceCreate( + params: [ + "initial_input": "echo {{ticket}}\r", + "template_params": ["ticket": "BERKS-87"], + "focus": false, + "eager_load_terminal": false, + "auto_refresh_metadata": false, + ], + tabManager: tabManager + ) + + guard case .ok(let rawPayload) = result, + let payload = rawPayload as? [String: Any], + let workspaceIdString = payload["workspace_id"] as? String, + let workspaceId = UUID(uuidString: workspaceIdString), + let workspace = tabManager.tabs.first(where: { $0.id == workspaceId }), + let surface = workspace.focusedTerminalPanel?.surface else { + XCTFail("Expected workspace.create to create an initial terminal surface, got \(result)") + return + } + + XCTAssertEqual(surface.initialInput, "echo BERKS-87\r") + XCTAssertNil(surface.debugInitialCommand()) + } + func testLayoutOpenForwardsTemplateParametersWithoutFocus() throws { let socketPath = makeSocketPath("layout-template") let listenerFD = try bindUnixSocket(at: socketPath) From 3e7322ba9fc802dbd686deec6012a41937a2c7bb Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 04:34:52 -0700 Subject: [PATCH 13/16] Preserve workspace command shell input semantics --- CLI/cmux.swift | 2 +- .../ConfigValues/Template/CmuxTemplate.swift | 15 +++++++++++++-- Sources/TerminalController+WorkspaceCreate.swift | 8 +++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CLI/cmux.swift b/CLI/cmux.swift index eb65910251a6..03b4e77bbf1d 100644 --- a/CLI/cmux.swift +++ b/CLI/cmux.swift @@ -7496,7 +7496,7 @@ struct CMUXCLI { params["template_params"] = templateParameterOptions.values } if layoutOpt == nil, let commandOpt { - params["initial_command"] = commandOpt + params["initial_input"] = unescapeSendText(commandOpt + "\\n") } if let layoutOpt { guard let layoutData = layoutOpt.data(using: .utf8), diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift index 372180cafbf9..2126bbe04932 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplate.swift @@ -97,9 +97,16 @@ public struct CmuxTemplate: Sendable { } let innerStart = openingIndex + 2 - guard let close = Self.closeBraces(in: characters, from: innerStart) else { + guard let boundary = Self.candidateBoundary(in: characters, from: innerStart) else { break } + if characters[boundary] == "{" { + // Include the preceding character so escapes and overlapping + // opening braces keep their normal recognition semantics. + index = boundary - 1 + continue + } + let close = boundary let inner = characters[innerStart..<close] let hasIllegalCharacter = inner.contains { character in character == "{" || character == "}" || character == "\n" || character == "\r" @@ -118,9 +125,13 @@ public struct CmuxTemplate: Sendable { return result } - private static func closeBraces(in characters: [Character], from start: Int) -> Int? { + /// Returns the next candidate-closing braces or a nested opening brace. + private static func candidateBoundary(in characters: [Character], from start: Int) -> Int? { var index = start while index + 1 < characters.count { + if characters[index] == "{" { + return index + } if characters[index] == "}", characters[index + 1] == "}" { return index } diff --git a/Sources/TerminalController+WorkspaceCreate.swift b/Sources/TerminalController+WorkspaceCreate.swift index ad33427b603d..78c92a8c025f 100644 --- a/Sources/TerminalController+WorkspaceCreate.swift +++ b/Sources/TerminalController+WorkspaceCreate.swift @@ -19,6 +19,8 @@ extension TerminalController { let requestedInitialCommand = v2RawString(params, "initial_command")?.trimmingCharacters(in: .whitespacesAndNewlines) let initialCommandTemplate = (requestedInitialCommand?.isEmpty == false) ? requestedInitialCommand : nil + let requestedInitialInput = v2RawString(params, "initial_input") + let initialInputTemplate = (requestedInitialInput?.isEmpty == false) ? requestedInitialInput : nil let rawInitialEnv = v2StringMap(params, "initial_env") ?? [:] let initialEnvTemplate = rawInitialEnv.reduce(into: [String: String]()) { result, pair in @@ -125,7 +127,7 @@ extension TerminalController { explicitParameters: templateParameters, processEnvironment: ProcessInfo.processInfo.environment ) - var additionalTemplates = [initialCommandTemplate, descriptionTemplate] + var additionalTemplates = [initialCommandTemplate, initialInputTemplate, descriptionTemplate] .compactMap { $0 } .map(CmuxTemplate.init) additionalTemplates.append(contentsOf: initialEnvTemplate.keys.sorted().compactMap { key in @@ -134,11 +136,13 @@ extension TerminalController { let resolvedDefinition: CmuxWorkspaceDefinition let initialCommand: String? + let initialInput: String? let initialEnv: [String: String] let description: String? if templateParameters.isEmpty { resolvedDefinition = templateDefinition initialCommand = initialCommandTemplate + initialInput = initialInputTemplate initialEnv = initialEnvTemplate description = descriptionTemplate } else { @@ -148,6 +152,7 @@ extension TerminalController { ) resolvedDefinition = templateDefinition.substitutingTemplateValues(values) initialCommand = initialCommandTemplate.map { CmuxTemplate($0).substituting(values) } + initialInput = initialInputTemplate.map { CmuxTemplate($0).substituting(values) } initialEnv = initialEnvTemplate.mapValues { CmuxTemplate($0).substituting(values) } description = descriptionTemplate.map { CmuxTemplate($0).substituting(values) } } catch { @@ -201,6 +206,7 @@ extension TerminalController { title: title, workingDirectory: cwd, initialTerminalCommand: layoutNode == nil ? initialCommand : nil, + initialTerminalInput: layoutNode == nil ? initialInput : nil, initialTerminalEnvironment: layoutNode == nil ? initialEnv : [:], workspaceEnvironment: workspaceEnv, select: shouldFocus, From e8fe3b3ea28cbe6ee6cacc514e3e96a088fedc85 Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 15:50:45 -0700 Subject: [PATCH 14/16] Add failing no-prompt workspace parameter test --- .../CLIWorkspaceTemplateParameterTests.swift | 1 + .../CmuxConfigWorkspaceActionTests.swift | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/cmuxTests/CLIWorkspaceTemplateParameterTests.swift b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift index 63d86ec49299..f2e7b3a549e1 100644 --- a/cmuxTests/CLIWorkspaceTemplateParameterTests.swift +++ b/cmuxTests/CLIWorkspaceTemplateParameterTests.swift @@ -95,6 +95,7 @@ extension CLINotifyProcessIntegrationRegressionTests { XCTAssertFalse(requests.contains { $0["method"] as? String == "surface.send_text" }) } + @MainActor func testWorkspaceCreateResolvesTemplatedInitialShellInputWithoutProcessCommand() throws { let tabManager = TabManager(autoWelcomeIfNeeded: false) defer { diff --git a/cmuxTests/CmuxConfigWorkspaceActionTests.swift b/cmuxTests/CmuxConfigWorkspaceActionTests.swift index 45b62f275705..98ce151be126 100644 --- a/cmuxTests/CmuxConfigWorkspaceActionTests.swift +++ b/cmuxTests/CmuxConfigWorkspaceActionTests.swift @@ -1,3 +1,4 @@ +import AppKit import Foundation import Testing @@ -9,6 +10,7 @@ import Testing /// Inline `type: "workspace"` config actions: decoding, resolution defaults, /// plus-button menu auto-append, trust disclosure, and executor behavior. +@Suite(.serialized) struct CmuxConfigWorkspaceActionTests { private func decode(_ json: String) throws -> CmuxConfigFile { try JSONDecoder().decode(CmuxConfigFile.self, from: Data(json.utf8)) @@ -296,6 +298,7 @@ struct CmuxConfigWorkspaceActionTests { @MainActor @Test func inlineWorkspaceActionCreatesWorkspace() throws { let manager = TabManager() + defer { manager.tabs.forEach { $0.teardownAllPanels() } } let action = try #require(CmuxResolvedConfigAction.fromDefinition( id: "dev-setup", definition: CmuxConfigActionDefinition( @@ -318,9 +321,57 @@ struct CmuxConfigWorkspaceActionTests { #expect(manager.selectedWorkspace?.customTitle == "Dev Setup") } + @MainActor + @Test func inlineWorkspaceActionUsesSavedParametersWithoutPrompting() throws { + let manager = TabManager() + let presentingWindow = NSWindow( + contentRect: NSRect(x: 0, y: 0, width: 640, height: 480), + styleMask: [.titled], + backing: .buffered, + defer: false + ) + presentingWindow.isReleasedWhenClosed = false + defer { + if let sheet = presentingWindow.attachedSheet { + presentingWindow.endSheet(sheet, returnCode: .alertSecondButtonReturn) + } + presentingWindow.close() + } + defer { manager.tabs.forEach { $0.teardownAllPanels() } } + let action = try #require(CmuxResolvedConfigAction.fromDefinition( + id: "ticket-dev", + definition: CmuxConfigActionDefinition( + action: .workspace( + CmuxWorkspaceDefinition( + name: "{{ticket}} Dev", + params: ["ticket": "CMUX-8059"] + ), + restart: nil + ), + title: "Ticket Dev" + ), + sourcePath: nil + )) + + #expect(CmuxConfigExecutor.execute( + action: action, + commands: [], + commandSourcePaths: [:], + tabManager: manager, + baseCwd: NSTemporaryDirectory(), + globalConfigPath: "/tmp/cmux-test-global-config.json", + presentingWindow: presentingWindow + )) + + #expect(presentingWindow.attachedSheet == nil) + #expect(manager.tabs.count == 2) + #expect(manager.selectedWorkspace?.customTitle == "CMUX-8059 Dev") + } + @MainActor @Test func inlineWorkspaceSurfaceTabBarButtonExecutesOnClick() throws { let manager = TabManager() + defer { manager.tabs.forEach { $0.teardownAllPanels() } } let workspace = try #require(manager.tabs.first) let button = CmuxSurfaceTabBarButton( id: "review-setup", @@ -349,6 +400,7 @@ struct CmuxConfigWorkspaceActionTests { @MainActor @Test func inlineWorkspaceActionHonorsIgnoreRestart() throws { let manager = TabManager() + defer { manager.tabs.forEach { $0.teardownAllPanels() } } let existingWorkspace = manager.tabs[0] existingWorkspace.setCustomTitle("Dev Setup") From 62418c8ba74569a80f200fe8f513aa986888a18c Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 17:43:08 -0700 Subject: [PATCH 15/16] Make workspace parameter editing explicit --- .../Template/CmuxTemplateParameterInput.swift | 4 +- .../Template/CmuxTemplateResolver.swift | 6 +- Resources/Localizable.xcstrings | 21878 +++++++++------- ...ppDelegate+NewWorkspaceMenuRendering.swift | 33 + Sources/AppDelegate+SavedLayoutMenu.swift | 3 +- Sources/AppDelegate+WorkspaceActionSave.swift | 51 + Sources/CmuxConfigActionSaver.swift | 59 + Sources/CmuxConfigExecutor.swift | 39 - ...WorkspaceDefinition+Parameterization.swift | 2 +- Sources/ContentView+SavedLayoutCommands.swift | 3 +- Sources/NewWorkspaceMenuModel.swift | 12 + Sources/TabManager+SavedLayouts.swift | 38 +- Sources/WorkspaceActionParameterEditBox.swift | 16 + ...t => WorkspaceActionParameterEditor.swift} | 49 +- Sources/WorkspaceTemplateErrorPresenter.swift | 2 +- cmux.xcodeproj/project.pbxproj | 20 +- cmuxTests/CmuxConfigActionSaverTests.swift | 48 + .../CmuxConfigNewWorkspaceMenuTests.swift | 104 +- ...WorkspaceActionParameterEditorTests.swift} | 16 +- docs/cli-contract.md | 15 +- web/data/cmux.schema.json | 4 +- web/messages/ar.json | 2 +- web/messages/bs.json | 2 +- web/messages/da.json | 2 +- web/messages/de.json | 2 +- web/messages/en.json | 2 +- web/messages/es.json | 2 +- web/messages/fr.json | 2 +- web/messages/it.json | 2 +- web/messages/ja.json | 2 +- web/messages/km.json | 2 +- web/messages/ko.json | 2 +- web/messages/no.json | 2 +- web/messages/pl.json | 2 +- web/messages/pt-BR.json | 2 +- web/messages/ru.json | 2 +- web/messages/th.json | 2 +- web/messages/tr.json | 2 +- web/messages/uk.json | 2 +- web/messages/zh-CN.json | 2 +- web/messages/zh-TW.json | 2 +- 41 files changed, 12447 insertions(+), 9995 deletions(-) create mode 100644 Sources/WorkspaceActionParameterEditBox.swift rename Sources/{WorkspaceTemplateParameterPrompt.swift => WorkspaceActionParameterEditor.swift} (64%) rename cmuxTests/{WorkspaceTemplateParameterPromptTests.swift => WorkspaceActionParameterEditorTests.swift} (80%) diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift index 100ce72374ba..61488c489452 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateParameterInput.swift @@ -1,10 +1,10 @@ -/// One editable value requested by a cmux template launch surface. +/// One editable value exposed by a workspace-template configuration surface. public struct CmuxTemplateParameterInput: Equatable, Sendable { /// The placeholder name shown to the user. public let name: String /// The value supplied by definition, environment, or inline-default - /// precedence before the user edits it. + /// precedence before the user saves an override. public let suggestedValue: String? /// Creates an editable template parameter description. diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift index 3ad463df1fe8..529ee6c37ef4 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValues/Template/CmuxTemplateResolver.swift @@ -82,11 +82,11 @@ public struct CmuxTemplateResolver: Sendable { return values } - /// Describes the editable values needed by a launch UI. + /// Describes the editable values exposed by a configuration UI. /// /// Inputs preserve first-occurrence order and use the same precedence as - /// final resolution, so a prompt can prefill the value that would otherwise - /// be selected automatically. + /// final resolution, so an editor can show the value that launches would + /// otherwise select automatically. public func parameterInputs(for templates: [CmuxTemplate]) -> [CmuxTemplateParameterInput] { var seen = Set<String>() return templates.flatMap(\.variables).compactMap { variable in diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index de7359569981..e3a0d2f7f9d2 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -44438,14399 +44438,14537 @@ "cli.layout.help": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Usage: cmux layout <subcommand> [flags]\n\nSave, list, inspect, open, and delete named workspace layouts.\n\nSubcommands:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nExamples:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" + "value": "الاستخدام: cmux layout <subcommand> [flags]\n\nحفظ وإدراج وفحص وفتح وحذف تخطيطات مساحة العمل المسماة.\n\nالأوامر الفرعية:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nأمثلة:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "使い方: cmux layout <サブコマンド> [フラグ]\n\n名前付きワークスペースレイアウトを保存、一覧表示、取得、開く、削除します。\n\nサブコマンド:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\n例:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" + "value": "Upotreba: cmux layout <subcommand> [flags]\n\nSačuvajte, izlistajte, pregledajte, otvorite i izbrišite imenovane rasporede radnog prostora.\n\nPodnaredbe:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nprimjeri:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } - } - } - }, - "cli.layout.open.error.unknownFlag": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "layout open: unknown flag '%@'" + "value": "Anvendelse: cmux layout <subcommand> [flags]\n\nGem, angiv, inspicér, åbn og slet navngivne arbejdsrumslayouts.\n\nUnderkommandoer:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nEksempler:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "layout open: 不明なフラグ '%@'" + "value": "Verwendung: cmux layout <subcommand> [flags]\n\nBenannte Arbeitsbereichslayouts speichern, auflisten, prüfen, öffnen und löschen.\n\nUnterbefehle:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nBeispiele:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } - } - } - }, - "cli.workspace.create.error.envFileRequiresValue": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "%@: --env-file requires <path>" + "value": "Usage: cmux layout <subcommand> [flags]\n\nSave, list, inspect, open, and delete named workspace layouts.\n\nSubcommands:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nExamples:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "%@: --env-file には <path> が必要です" + "value": "Uso: cmux layout <subcommand> [flags]\n\nGuarde, enumere, inspeccione, abra y elimine diseños de espacios de trabajo con nombre.\n\nSubcomandos:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nEjemplos:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@: --env-file에는 <path>가 필요합니다" + "value": "Utilisation : cmux layout <subcommand> [flags]\n\nEnregistrez, répertoriez, inspectez, ouvrez et supprimez les dispositions d'espace de travail nommées.\n\nSous-commandes :\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nExemples :\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "%@: --env-file потребує <path>" - } - } - } - }, - "cli.workspace.create.error.envRequiresValue": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "%@: --env requires KEY=VALUE" + "value": "Utilizzo: cmux layout <subcommand> [flags]\n\nSalva, elenca, esamina, apri ed elimina i layout dell'area di lavoro con nome.\n\nSottocomandi:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nEsempi:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@: --env には KEY=VALUE が必要です" + "value": "使い方: cmux layout <サブコマンド> [フラグ]\n\n名前付きワークスペースレイアウトを保存、一覧表示、取得、開く、削除します。\n\nサブコマンド:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\n例:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ko": { + "km": { "stringUnit": { "state": "translated", - "value": "%@: --env에는 KEY=VALUE가 필요합니다" + "value": "ការប្រើប្រាស់៖ cmux layout <subcommand> [flags]\n\nរក្សាទុក រាយបញ្ជី ពិនិត្យ បើក និងលុបប្លង់កន្លែងធ្វើការដែលមានឈ្មោះ។\n\nពាក្យ​បញ្ជា​រង៖\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nឧទាហរណ៍៖\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "%@: --env потребує KEY=VALUE" - } - } - } - }, - "cli.workspace.create.error.unknownFlag": { - "extractionState": "manual", - "localizations": { - "en": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@: unknown flag '%@'. Known flags: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "사용법: cmux layout <subcommand> [flags]\n\n명명된 작업 공간 레이아웃을 저장, 나열, 검사, 열기 및 삭제합니다.\n\n하위 명령:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\n예:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "%@: 不明なフラグ '%@'。利用可能なフラグ: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "Bruk: cmux layout <subcommand> [flags]\n\nLagre, liste opp, inspiser, åpne og slett navngitte arbeidsområdeoppsett.\n\nUnderkommandoer:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nEksempler:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ko": { + "pl": { "stringUnit": { "state": "translated", - "value": "%@: 알 수 없는 플래그 '%@'. 사용 가능한 플래그: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "Zastosowanie: cmux layout <subcommand> [flags]\n\nZapisuj, wyświetlaj, sprawdzaj, otwieraj i usuwaj nazwane układy obszarów roboczych.\n\nPodpolecenia:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nPrzykłady:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "uk": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%@: невідомий прапорець '%@'. Доступні прапорці: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" + "value": "Uso: cmux layout <subcommand> [flags]\n\nSalve, liste, inspecione, abra e exclua layouts de espaço de trabalho nomeados.\n\nSubcomandos:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nExemplos:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } - } - } - }, - "cli.workspace.create.help": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Usage: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nCreate a new workspace in the caller's window.\n\nFlags:\n --name <title> Set a custom name for the new workspace\n --description <text> Set a custom description for the new workspace\n --cwd <path> Set the working directory for the new workspace\n --command <text> Send text+Enter to the new workspace after creation\n --env KEY=VALUE Set a workspace environment variable. Repeatable.\n Reserved CMUX_* variables cannot be overridden.\n --env-file <path> Load KEY=VALUE lines from a file. Repeatable.\n --param KEY=VALUE Set a {{variable}} used by workspace strings. Repeatable.\n --param KEY Import KEY from the invoking shell environment.\n --layout <json> Create workspace with a predefined split layout.\n Layout surfaces define their own commands.\n --window <id|ref|index> Target window (default: caller's window)\n --focus <true|false> Focus the new workspace (default: false)\n --group <id|ref> Add the new workspace to a workspace group\n --group-placement afterCurrent|top|end Placement within --group (default: top)\n --group-reference <workspace> Reference workspace for afterCurrent placement\n\nExamples:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" + "value": "Использование: cmux layout <subcommand> [flags]\n\nСохраняйте, перечисляйте, проверяйте, открывайте и удаляйте именованные макеты рабочей области.\n\nПодкоманды:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nПримеры:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "使い方: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\n呼び出し元のウィンドウに新しいワークスペースを作成します。\n\nフラグ:\n --name <title> 新しいワークスペースの名前を設定\n --description <text> 新しいワークスペースの説明を設定\n --cwd <path> 新しいワークスペースの作業ディレクトリを設定\n --command <text> 作成後、新しいワークスペースへテキストと Enter を送信\n --env KEY=VALUE ワークスペース環境変数を設定。繰り返し指定可能。\n 予約済みの CMUX_* 変数は上書きできません。\n --env-file <path> ファイルから KEY=VALUE 行を読み込み。繰り返し指定可能。\n --param KEY=VALUE ワークスペース文字列の {{variable}} を設定。繰り返し指定可能。\n --param KEY 呼び出し元シェルの環境変数 KEY を取り込み。\n --layout <json> 定義済みの分割レイアウトでワークスペースを作成。\n レイアウトのサーフェスが各コマンドを定義します。\n --window <id|ref|index> 対象ウィンドウ (既定: 呼び出し元のウィンドウ)\n --focus <true|false> 新しいワークスペースをフォーカス (既定: false)\n --group <id|ref> 新しいワークスペースをグループへ追加\n --group-placement afterCurrent|top|end --group 内の位置 (既定: top)\n --group-reference <workspace> afterCurrent の基準ワークスペース\n\n例:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" + "value": "การใช้งาน: cmux layout <subcommand> [flags]\n\nบันทึก แสดงรายการ ตรวจสอบ เปิด และลบเค้าโครงพื้นที่ทำงานที่มีชื่อ\n\nคำสั่งย่อย:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nตัวอย่าง:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } - } - } - }, - "cli.workspace.templateParameter.error.environmentMissing": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "%@: --param %@ could not import an unset environment variable" + "value": "Kullanım: cmux layout <subcommand> [flags]\n\nAdlandırılmış çalışma alanı düzenlerini kaydedin, listeleyin, inceleyin, açın ve silin.\n\nAlt komutlar:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nÖrnekler:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "%@: --param %@ は未設定の環境変数を取り込めません" + "value": "Використання: cmux layout <subcommand> [flags]\n\nЗберігайте, створюйте список, перевіряйте, відкривайте та видаляйте іменовані макети робочої області.\n\nПідкоманди:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\nприклади:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } - } - } - }, - "cli.workspace.templateParameter.error.invalidName": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@: invalid template parameter name '%@'" + "value": "用途:cmux layout <subcommand> [flags]\n\n保存、列出、检查、打开和删除命名工作区布局。\n\n子命令:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\n示例:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@: テンプレートパラメータ名 '%@' は無効です" + "value": "用途:cmux layout <subcommand> [flags]\n\n儲存、列出、檢查、開啟和刪除命名工作區佈局。\n\n子命令:\n save <name> [--workspace <ref>] [--overwrite] [--description <text>]\n list [--json]\n get <name>\n open <name> [--cwd <dir>] [--param KEY[=VALUE]]... [--focus <true|false>]\n delete <name>\n\n範例:\n cmux layout save dev --overwrite\n cmux layout list\n cmux layout get dev\n cmux layout open dev --cwd ~/projects/myapp --param port=4100" } } } }, - "cli.workspace.templateParameter.error.missing": { + "cli.layout.open.error.unknownFlag": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@: missing workspace template parameters: %@" + "value": "layout open: علامة غير معروفة \"%@\"" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "%@: ワークスペーステンプレートパラメータがありません: %@" + "value": "layout open: nepoznata zastava '%@'" } - } - } - }, - "cli.workspace.templateParameter.error.requiresValue": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "%@: --param requires KEY=VALUE or KEY" + "value": "layout open: ukendt flag '%@'" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "%@: --param には KEY=VALUE または KEY が必要です" + "value": "layout open: unbekanntes Flag '%@'" } - } - } - }, - "cli.workspace.env.empty": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "No environment variables" + "value": "layout open: unknown flag '%@'" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "環境変数はありません" + "value": "layout open: bandera desconocida '%@'" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "환경 변수가 없습니다" + "value": "layout open : indicateur inconnu '%@'" } }, - "uk": { + "it": { "stringUnit": { "state": "translated", - "value": "Немає змінних середовища" + "value": "layout open: bandiera sconosciuta '%@'" } - } - } - }, - "cli.workspace.env.error.emptyKey": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ja": { "stringUnit": { "state": "translated", - "value": "%@: %@ entry '%@' has an empty key" + "value": "layout open: 不明なフラグ '%@'" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "%@: %@ のエントリ '%@' のキーが空です" + "value": "layout open៖ ទង់មិនស្គាល់ '%@'" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@: %@ 항목 '%@'의 키가 비어 있습니다" + "value": "layout open: 알 수 없는 플래그 '%@'" } }, - "uk": { + "nb": { "stringUnit": { "state": "translated", - "value": "%@: запис %@ '%@' має порожній ключ" + "value": "layout open: ukjent flagg '%@'" } - } - } - }, - "cli.workspace.env.error.invalidAssignment": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "%@: %@ entry '%@' must be in KEY=VALUE form" + "value": "layout open: nieznana flaga „%@”" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%@: %@ のエントリ '%@' は KEY=VALUE 形式である必要があります" + "value": "layout open: sinalizador desconhecido '%@'" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "%@: %@ 항목 '%@'은(는) KEY=VALUE 형식이어야 합니다" + "value": "layout open: неизвестный флаг «%@»" } }, - "uk": { + "th": { "stringUnit": { "state": "translated", - "value": "%@: запис %@ '%@' має бути у форматі KEY=VALUE" + "value": "layout open: ธงที่ไม่รู้จัก '%@'" } - } - } - }, - "cli.workspace.env.error.unknownFlag": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "workspace env: unknown flag '%@'. Known flags: --workspace <id|ref|index>, --window <id|ref|index>, --mask" + "value": "layout open: bilinmeyen işaret '%@'" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "workspace env: 不明なフラグ '%@'。利用可能なフラグ: --workspace <id|ref|index>, --window <id|ref|index>, --mask" + "value": "layout open: невідомий прапор \"%@\"" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "workspace env: 알 수 없는 플래그 '%@'. 사용 가능한 플래그: --workspace <id|ref|index>, --window <id|ref|index>, --mask" + "value": "layout open:未知标志“%@”" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "workspace env: невідомий прапорець '%@'. Доступні прапорці: --workspace <id|ref|index>, --window <id|ref|index>, --mask" + "value": "layout open:未知標誌“%@”" } } } }, - "cli.workspace.envFile.error.readFailed": { + "cli.workspace.create.error.envFileRequiresValue": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@: could not read --env-file '%@': %@" + "value": "%@: --env-file requires <path>" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@: --env-file '%@' を読み込めませんでした: %@" + "value": "%@: --env-file には <path> が必要です" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@: --env-file '%@'을(를) 읽을 수 없습니다: %@" + "value": "%@: --env-file에는 <path>가 필요합니다" } }, "uk": { "stringUnit": { "state": "translated", - "value": "%@: не вдалося прочитати --env-file '%@': %@" - } - } - } - }, - "cli.error.sshSessionAttachWorkspaceRequiresValue": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "ssh-session-attach: --workspace requires a value" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ssh-session-attach: --workspace の値を指定してください" + "value": "%@: --env-file потребує <path>" } } } }, - "cli.workspace.usage": { + "cli.workspace.create.error.envRequiresValue": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux workspace <subcommand> [flags]\n\nCanonical noun for workspace operations. Legacy verbs\n(new-workspace, list-workspaces, close-workspace,\nrename-workspace, select-workspace) keep working and print a\none-time deprecation hint pointing here.\n\nSubcommands:\n list List workspaces in a window\n create [flags] Create a workspace (same flags as new-workspace)\n env [workspace] [--mask]\n Print a workspace's configured environment\n variables (--mask redacts the values)\n close <workspace> Close a workspace\n rename <workspace> --title <new>\n select <workspace> Make a workspace active\n status [set <lane|auto>]\n Show or pin the workspace todo status\n reconnect [workspace] Reconnect a remote (SSH) workspace, including one\n whose automatic reconnect paused because the host\n was unreachable\n disconnect [workspace] Stop a remote (SSH) workspace's connection\n loading <on|off> [--id <name>] Toggle the workspace loading spinner.\n group <subcommand> Workspace group operations (see cmux workspace-group --help)\nenv/reconnect/disconnect accept a positional handle or --workspace\n<id|ref|index>, defaulting to the caller's workspace, then the\nselected one (of --window's window when given).\nExamples:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3" + "value": "%@: --env requires KEY=VALUE" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使い方: cmux workspace <サブコマンド> [フラグ]\n\nワークスペース操作の正規の名前空間です。従来の動詞コマンド\n(new-workspace、list-workspaces、close-workspace、\nrename-workspace、select-workspace) は引き続き動作し、ここを指す\n非推奨ヒントを一度だけ表示します。\n\nサブコマンド:\n list ウィンドウ内のワークスペースを一覧表示\n create [flags] ワークスペースを作成 (new-workspace と同じフラグ。\n --env KEY=VALUE と --env-file <path> を含む)\n env [workspace] [--mask]\n ワークスペースに設定された環境変数を表示\n (--mask は値を伏せ字にします)\n close <workspace> ワークスペースを閉じる\n rename <workspace> --title <new>\n select <workspace> ワークスペースをアクティブにする\n reconnect [workspace] リモート (SSH) ワークスペースを再接続。ホストに\n 到達できず自動再接続が一時停止したものも含む\n disconnect [workspace] リモート (SSH) ワークスペースの接続を停止\n status [set <lane|auto>]\n ワークスペースの todo ステータスを表示/固定\n loading <on|off> [--id <name>]\n ワークスペースの読み込みスピナーを切り替え。--id ごとに\n 別のローダーとして積み重なり、省略時は既定の 1 つを\n 切り替えます\n group <subcommand> ワークスペースグループ操作 (cmux workspace-group --help を参照)\n\nenv/reconnect/disconnect は位置引数のハンドルまたは --workspace\n<id|ref|index> を受け付け、省略時は呼び出し元のワークスペース、\n次に選択中のワークスペース (--window 指定時はそのウィンドウ) を\n対象にします。\n\n例:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace create --cwd . --env AWS_PROFILE=prod --env-file ./.cmux.env\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3\n cmux workspace loading on\n cmux workspace loading on --id build\n cmux workspace loading off" + "value": "%@: --env には KEY=VALUE が必要です" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux workspace <하위 명령> [플래그]\n\n워크스페이스 작업의 표준 네임스페이스입니다. 기존 동사형 명령\n(new-workspace, list-workspaces, close-workspace,\nrename-workspace, select-workspace)은 계속 작동하며 이곳을\n가리키는 사용 중단 안내를 한 번 표시합니다.\n\n하위 명령:\n list 창의 워크스페이스 목록 표시\n create [flags] 워크스페이스 생성 (new-workspace와 동일한 플래그.\n --env KEY=VALUE 및 --env-file <path> 포함)\n env [workspace] [--mask]\n 워크스페이스에 설정된 환경 변수 표시\n (--mask는 값을 가립니다)\n close <workspace> 워크스페이스 닫기\n rename <workspace> --title <new>\n select <workspace> 워크스페이스를 활성화\n reconnect [workspace] 원격 (SSH) 워크스페이스 재연결. 호스트에 연결할\n 수 없어 자동 재연결이 일시 중지된 경우 포함\n disconnect [workspace] 원격 (SSH) 워크스페이스 연결 중지\n status [set <lane|auto>]\n 워크스페이스의 todo 상태 표시/고정\n loading <on|off> [--id <name>]\n 워크스페이스 로딩 스피너 전환. --id마다 별도의\n 로더로 누적되며, 생략 시 기본 로더 하나를 전환\n group <subcommand> 워크스페이스 그룹 작업 (cmux workspace-group --help 참고)\n\nenv/reconnect/disconnect는 위치 핸들 또는 --workspace\n<id|ref|index>를 받으며, 기본값은 호출자의 워크스페이스, 그다음\n선택된 워크스페이스입니다 (--window 지정 시 해당 창 기준).\n\n예시:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace create --cwd . --env AWS_PROFILE=prod --env-file ./.cmux.env\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3\n cmux workspace loading on\n cmux workspace loading on --id build\n cmux workspace loading off" + "value": "%@: --env에는 KEY=VALUE가 필요합니다" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Використання: cmux workspace <підкоманда> [прапорці]\n\nКанонічний простір імен для операцій з робочими просторами.\nЗастарілі дієслівні команди (new-workspace, list-workspaces,\nclose-workspace, rename-workspace, select-workspace) продовжують\nпрацювати й одноразово показують підказку про застарілість, що\nвказує сюди.\n\nПідкоманди:\n list Список робочих просторів у вікні\n create [flags] Створити робочий простір (ті самі прапорці, що й\n new-workspace, зокрема --env KEY=VALUE та --env-file <path>)\n env [workspace] [--mask]\n Показати налаштовані змінні середовища робочого\n простору (--mask приховує значення)\n close <workspace> Закрити робочий простір\n rename <workspace> --title <new>\n select <workspace> Зробити робочий простір активним\n reconnect [workspace] Перепідключити віддалений (SSH) робочий простір,\n зокрема той, де автоматичне перепідключення\n призупинено через недосяжний хост\n disconnect [workspace] Зупинити з'єднання віддаленого (SSH) робочого простору\n status [set <lane|auto>]\n Показати або закріпити todo-статус робочого простору\n loading <on|off> [--id <name>]\n Перемкнути індикатор завантаження робочого простору.\n Кожен --id — окремий лоадер; без --id перемикається\n один типовий\n group <subcommand> Операції з групами робочих просторів (див. cmux workspace-group --help)\n\nenv/reconnect/disconnect приймають позиційний дескриптор або --workspace\n<id|ref|index>; типово використовується робочий простір викликача,\nдалі — вибраний (у вікні з --window, якщо задано).\n\nПриклади:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace create --cwd . --env AWS_PROFILE=prod --env-file ./.cmux.env\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3\n cmux workspace loading on\n cmux workspace loading on --id build\n cmux workspace loading off" + "value": "%@: --env потребує KEY=VALUE" } } } }, - "cli.workspace.status.usage": { + "cli.workspace.create.error.unknownFlag": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Usage: cmux workspace status [set <lane|auto> | cycle] [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nShow or pin a workspace's todo lifecycle status. Without arguments prints\nthe effective status, the inferred status, and the override, targeting the\ncaller's workspace by default.\n\nLanes are inferred from live signals (agent needs input > agent running >\nopen PR > all PRs merged/closed > dirty git tree > todo). `set <lane>`\npins a manual lane that auto-clears as soon as the inferred lane changes;\n`set auto` clears the pin immediately. `cycle` advances the manual override\none lane forward (todo → working → needs-attention → review → done → todo).\n\nLanes: todo, working, needs-attention, review, done\n\nExamples:\n cmux workspace status\n cmux workspace status set review\n cmux workspace status cycle\n cmux workspace status set auto --workspace workspace:2" + "value": "%@: خيار غير معروف '%@'. الخيارات المعروفة: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "使い方: cmux workspace status [set <lane|auto> | cycle] [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nワークスペースの todo ライフサイクルステータスを表示または固定します。引数なしでは、\n有効なステータス、推定ステータス、上書き状態を表示し、既定では呼び出し元の\nワークスペースを対象にします。\n\nレーンはライブシグナルから推定されます (agent needs input > agent running >\nopen PR > all PRs merged/closed > dirty git tree > todo)。`set <lane>` は\n手動レーンを固定し、推定レーンが変わると自動的に解除されます。`set auto` は\n固定をすぐに解除します。`cycle` は手動上書きを 1 レーン先へ進めます\n(todo → working → needs-attention → review → done → todo)。\n\nレーン: todo, working, needs-attention, review, done\n\n例:\n cmux workspace status\n cmux workspace status set review\n cmux workspace status cycle\n cmux workspace status set auto --workspace workspace:2" + "value": "%@: nepoznata opcija '%@'. Poznate opcije: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } - } - } - }, - "cli.todo.usage": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Usage: cmux todo <subcommand> [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nPer-workspace checklist, writable by you and by agents. Targets the\ncaller's workspace by default. Items are capped at 50 per workspace.\n\nSubcommands:\n add \"text\" [--state <pending|in-progress|completed>] [--origin <user|agent>]\n list Print items (1-based indexes) and progress\n check <index|id> Mark an item completed\n uncheck <index|id> Mark an item pending\n start <index|id> Mark an item in-progress\n edit <index|id> \"text\" Rewrite an item's text\n rm <index|id> Remove an item\n clear Remove every item\n set ['<json>'] Atomically replace the whole checklist from a\n JSON array of {text, state?, id?, origin?}\n objects (inline argument, or piped on stdin).\n Items whose id matches an existing item keep\n their identity and origin; the rest are created\n and unnamed existing items are removed.\n open Open (or focus) the workspace's todo pane\n\n<index> is the 1-based number printed by `cmux todo list`; <id> is the\nitem UUID from `cmux todo list --json`.\n\nExamples:\n cmux todo add \"write regression test\"\n cmux todo list\n cmux todo check 1\n cmux todo start 2 --workspace workspace:3\n my-plan-tool --json | cmux todo set\n cmux todo open\n\nSee also: cmux workspace status" + "value": "%@: ukendt flag '%@'. Kendte flag: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "使い方: cmux todo <subcommand> [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nワークスペースごとのチェックリストです。ユーザーとエージェントのどちらも書き込めます。\n既定では呼び出し元のワークスペースを対象にします。項目数はワークスペースごとに\n50 件までです。\n\nサブコマンド:\n add \"text\" [--state <pending|in-progress|completed>] [--origin <user|agent>]\n list 項目 (1 始まりの番号) と進捗を表示\n check <index|id> 項目を完了にする\n uncheck <index|id> 項目を未着手に戻す\n start <index|id> 項目を進行中にする\n edit <index|id> \"text\" 項目のテキストを書き換える\n rm <index|id> 項目を削除\n clear すべての項目を削除\n set ['<json>'] {text, state?, id?, origin?} オブジェクトの\n JSON 配列でチェックリスト全体を原子的に置き換えます\n (インライン引数、または標準入力からパイプ)。\n id が既存項目と一致する項目は ID と origin を維持し、\n それ以外は新規作成され、名前のない既存項目は削除されます。\n open ワークスペースの todo ペインを開く (またはフォーカスする)\n\n<index> は `cmux todo list` に表示される 1 始まりの番号です。<id> は\n`cmux todo list --json` に含まれる項目 UUID です。\n\n例:\n cmux todo add \"write regression test\"\n cmux todo list\n cmux todo check 1\n cmux todo start 2 --workspace workspace:3\n my-plan-tool --json | cmux todo set\n cmux todo open\n\n関連項目: cmux workspace status" + "value": "%@: unbekannte Option '%@'. Bekannte Optionen: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } - } - } - }, - "cli.workspaceLoading.usage": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" + "value": "%@: unknown flag '%@'. Known flags: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "使い方: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" + "value": "%@: opción desconocida '%@'. Opciones conocidas: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "사용법: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" + "value": "%@ : option inconnue '%@'. Options connues : --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "uk": { + "it": { "stringUnit": { "state": "translated", - "value": "Використання: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" + "value": "%@: opzione sconosciuta '%@'. Opzioni note: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } - } - } - }, - "clipboard.sshError.item": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ja": { "stringUnit": { "state": "translated", - "value": "%lld. %@ (%@): %@" + "value": "%@: 不明なフラグ '%@'。利用可能なフラグ: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "%lld. %@ (%@): %@" + "value": "%@៖ ទង់មិនស្គាល់ '%@'។ ទង់ដែលស្គាល់៖ --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%lld. %@ (%@): %@" + "value": "%@: 알 수 없는 플래그 '%@'. 알려진 플래그: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "uk": { + "nb": { "stringUnit": { "state": "translated", - "value": "%lld. %@ (%@): %@" + "value": "%@: ukjent flagg '%@'. Kjente flagg: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } - } - } - }, - "clipboard.sshError.single": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "SSH error (%@): %@" + "value": "%@: nieznana opcja '%@'. Znane opcje: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "SSH エラー (%@): %@" + "value": "%@: opção desconhecida '%@'. Opções conhecidas: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "SSH 오류 (%@): %@" + "value": "%@: неизвестный флаг '%@'. Известные флаги: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "uk": { + "th": { "stringUnit": { "state": "translated", - "value": "Помилка SSH (%@): %@" + "value": "%@: แฟล็กที่ไม่รู้จัก '%@'. แฟล็กที่รู้จัก: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } - } - } - }, - "cloud.overlay.reconnect.button": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Reconnect" + "value": "%@: bilinmeyen bayrak '%@'. Bilinen bayraklar: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "再接続" + "value": "%@: невідомий прапорець '%@'. Відомі прапорці: --name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } - } - } - }, - "command.addWorkspaceChecklistItem.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Add Checklist Item…" + "value": "%@:未知标志 '%@'。已知标志:--name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "チェックリスト項目を追加…" + "value": "%@:未知旗標 '%@'。已知旗標:--name <title>, --description <text>, --command <text>, --cwd <path>, --env KEY=VALUE, --env-file <path>, --param KEY=VALUE, --layout <json>, --window <id|ref|index>, --focus <true|false>, --group <id|ref>, --group-placement <afterCurrent|top|end>, --group-reference <workspace>" } } } }, - "command.applyUpdateIfAvailable.subtitle": { + "cli.workspace.create.help": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عام" + "value": "الاستخدام: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nقم بإنشاء مساحة عمل جديدة في نافذة المتصل.\n\nالأعلام:\n --name <title> قم بتعيين اسم مخصص لمساحة العمل الجديدة\n --description <text> قم بتعيين وصف مخصص لمساحة العمل الجديدة\n --cwd <path> قم بتعيين دليل العمل لمساحة العمل الجديدة\n --command <text> أرسل text+Enter إلى مساحة العمل الجديدة بعد الإنشاء\n --env KEY=VALUE قم بتعيين متغير بيئة مساحة العمل. قابل للتكرار.\n لا يمكن تجاوز متغيرات CMUX_* المحجوزة.\n --env-file <path> قم بتحميل أسطر KEY=VALUE من ملف. قابل للتكرار.\n --param KEY=VALUE قم بتعيين {{variable}} المستخدم بواسطة سلاسل مساحة العمل. قابل للتكرار.\n --param KEY قم باستيراد KEY من بيئة shell التي يتم استدعاءها.\n --layout <json> قم بإنشاء مساحة عمل بتخطيط منقسم محدد مسبقًا.\n تحدد أسطح التخطيط الأوامر الخاصة بها.\n --window <id|ref|index> نافذة الهدف (الافتراضي: نافذة المتصل)\n --focus <true|false> التركيز على مساحة العمل الجديدة (الافتراضي: false)\n --group <id|ref> أضف مساحة العمل الجديدة إلى مجموعة مساحة العمل\n --group-placement afterCurrent|top|end وضع ضمن --group (الافتراضي: top)\n --group-reference <workspace> مساحة العمل المرجعية لوضع afterCurrent\n\nأمثلة:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Globalno" + "value": "Upotreba: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nKreirajte novi radni prostor u prozoru pozivaoca.\n\nzastave:\n --name <title> Postavite prilagođeno ime za novi radni prostor\n --description <text> Postavite prilagođeni opis za novi radni prostor\n --cwd <path> Postavite radni direktorij za novi radni prostor\n --command <text> Pošaljite tekst+Enter u novi radni prostor nakon kreiranja\n --env KEY=VALUE Postavite varijablu okruženja radnog prostora. Ponovljivo.\n Rezervirane CMUX_* varijable ne mogu se nadjačati.\n --env-file <path> Učitavanje KEY=VALUE linija iz datoteke. Ponovljivo.\n --param KEY=VALUE Postavite {{variable}} koji koriste nizovi radnog prostora. Ponovljivo.\n --param KEY Uvoz KEY iz okruženja ljuske za pozivanje.\n --layout <json> Kreirajte radni prostor sa unapred definisanim podeljenim rasporedom.\n Površine rasporeda definiraju vlastite komande.\n --window <id|ref|index> Ciljni prozor (podrazumevano: prozor pozivaoca)\n --focus <true|false> Fokusirajte novi radni prostor (zadano: false)\n --group <id|ref> Dodajte novi radni prostor u grupu radnog prostora\n --group-placement afterCurrent|top|end Položaj unutar --group (zadano: top)\n --group-reference <workspace> Referentni radni prostor za postavljanje afterCurrent\n\nprimjeri:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "da": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Anvendelse: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nOpret et nyt arbejdsområde i opkalderens vindue.\n\nFlag:\n --name <title> Indstil et brugerdefineret navn til det nye arbejdsområde\n --description <text> Indstil en brugerdefineret beskrivelse for det nye arbejdsområde\n --cwd <path> Indstil arbejdsbiblioteket for det nye arbejdsområde\n --command <text> Send tekst+Enter til det nye arbejdsområde efter oprettelse\n --env KEY=VALUE Indstil en arbejdsområdemiljøvariabel. Gentagelig.\n Reserverede CMUX_*-variabler kan ikke tilsidesættes.\n --env-file <path> Indlæs KEY=VALUE-linjer fra en fil. Gentagelig.\n --param KEY=VALUE Indstil en {{variable}}, der bruges af arbejdsområdestrenge. Gentagelig.\n --param KEY Importer KEY fra det påkaldende shell-miljø.\n --layout <json> Skab arbejdsområde med et foruddefineret opdelt layout.\n Layoutflader definerer deres egne kommandoer.\n --window <id|ref|index> Målvindue (standard: opkaldsvindue)\n --focus <true|false> Fokuser det nye arbejdsområde (standard: false)\n --group <id|ref> Føj det nye arbejdsområde til en arbejdsområdegruppe\n --group-placement afterCurrent|top|end Placering i --group (standard: top)\n --group-reference <workspace> Referencearbejdsområde til afterCurrent-placering\n\nEksempler:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "de": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Verwendung: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nErstellen Sie im Fenster des Anrufers einen neuen Arbeitsbereich.\n\nFlaggen:\n --name <title> Legen Sie einen benutzerdefinierten Namen für den neuen Arbeitsbereich fest\n --description <text> Legen Sie eine benutzerdefinierte Beschreibung für den neuen Arbeitsbereich fest\n --cwd <path> Legen Sie das Arbeitsverzeichnis für den neuen Arbeitsbereich fest\n --command <text> Senden Sie nach der Erstellung Text + Eingabetaste an den neuen Arbeitsbereich\n --env KEY=VALUE Legen Sie eine Arbeitsbereichsumgebungsvariable fest. Wiederholbar.\n Reservierte CMUX_*-Variablen können nicht überschrieben werden.\n --env-file <path> KEY=VALUE Zeilen aus einer Datei laden. Wiederholbar.\n --param KEY=VALUE Legen Sie einen {{variable}} fest, der von Arbeitsbereichszeichenfolgen verwendet wird. Wiederholbar.\n --param KEY Importieren Sie KEY aus der aufrufenden Shell-Umgebung.\n --layout <json> Erstellen Sie einen Arbeitsbereich mit einem vordefinierten geteilten Layout.\n Layoutoberflächen definieren ihre eigenen Befehle.\n --window <id|ref|index> Zielfenster (Standard: Anruferfenster)\n --focus <true|false> Den neuen Arbeitsbereich fokussieren (Standard: false)\n --group <id|ref> Fügen Sie den neuen Arbeitsbereich einer Arbeitsbereichsgruppe hinzu\n --group-placement afterCurrent|top|end Platzierung innerhalb --group (Standard: top)\n --group-reference <workspace> Referenzarbeitsbereich für die afterCurrent-Platzierung\n\nBeispiele:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "en": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Usage: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nCreate a new workspace in the caller's window.\n\nFlags:\n --name <title> Set a custom name for the new workspace\n --description <text> Set a custom description for the new workspace\n --cwd <path> Set the working directory for the new workspace\n --command <text> Send text+Enter to the new workspace after creation\n --env KEY=VALUE Set a workspace environment variable. Repeatable.\n Reserved CMUX_* variables cannot be overridden.\n --env-file <path> Load KEY=VALUE lines from a file. Repeatable.\n --param KEY=VALUE Set a {{variable}} used by workspace strings. Repeatable.\n --param KEY Import KEY from the invoking shell environment.\n --layout <json> Create workspace with a predefined split layout.\n Layout surfaces define their own commands.\n --window <id|ref|index> Target window (default: caller's window)\n --focus <true|false> Focus the new workspace (default: false)\n --group <id|ref> Add the new workspace to a workspace group\n --group-placement afterCurrent|top|end Placement within --group (default: top)\n --group-reference <workspace> Reference workspace for afterCurrent placement\n\nExamples:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "es": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Uso: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nCree un nuevo espacio de trabajo en la ventana de la persona que llama.\n\nBanderas:\n --name <title> Establezca un nombre personalizado para el nuevo espacio de trabajo\n --description <text> Establecer una descripción personalizada para el nuevo espacio de trabajo\n --cwd <path> Establecer el directorio de trabajo para el nuevo espacio de trabajo\n --command <text> Enviar texto+Entrar al nuevo espacio de trabajo después de la creación\n --env KEY=VALUE Establezca una variable de entorno de espacio de trabajo. Repetible.\n Las variables CMUX_* reservadas no se pueden anular.\n --env-file <path> Cargue líneas KEY=VALUE desde un archivo. Repetible.\n --param KEY=VALUE Establece un {{variable}} utilizado por las cadenas del espacio de trabajo. Repetible.\n --param KEY Importe KEY desde el entorno de shell que invoca.\n --layout <json> Cree un espacio de trabajo con un diseño dividido predefinido.\n Las superficies de diseño definen sus propios comandos.\n --window <id|ref|index> Ventana de destino (predeterminada: ventana de la persona que llama)\n --focus <true|false> Enfoque el nuevo espacio de trabajo (predeterminado: false)\n --group <id|ref> Agregar el nuevo espacio de trabajo a un grupo de espacios de trabajo\n --group-placement afterCurrent|top|end Ubicación dentro de --group (predeterminado: top)\n --group-reference <workspace> Espacio de trabajo de referencia para la ubicación de afterCurrent\n\nEjemplos:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Général" + "value": "Utilisation : cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nCréez un nouvel espace de travail dans la fenêtre de l'appelant.\n\nDrapeaux :\n --name <title> Définir un nom personnalisé pour le nouvel espace de travail\n --description <text> Définir une description personnalisée pour le nouvel espace de travail\n --cwd <path> Définir le répertoire de travail pour le nouvel espace de travail\n --command <text> Envoyer texte+Entrée au nouvel espace de travail après la création\n --env KEY=VALUE Définissez une variable d'environnement d'espace de travail. Répétable.\n Les variables CMUX_* réservées ne peuvent pas être remplacées.\n --env-file <path> Charge les lignes KEY=VALUE à partir d'un fichier. Répétable.\n --param KEY=VALUE Définit un {{variable}} utilisé par les chaînes de l'espace de travail. Répétable.\n --param KEY Importez KEY à partir de l'environnement shell appelant.\n --layout <json> Créez un espace de travail avec une disposition divisée prédéfinie.\n Les surfaces de mise en page définissent leurs propres commandes.\n --window <id|ref|index> Fenêtre cible (par défaut : fenêtre de l'appelant)\n --focus <true|false> Focus sur le nouvel espace de travail (par défaut : false)\n --group <id|ref> Ajouter le nouvel espace de travail à un groupe d'espaces de travail\n --group-placement afterCurrent|top|end Emplacement dans --group (par défaut : top)\n --group-reference <workspace> Espace de travail de référence pour le placement afterCurrent\n\nExemples :\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "it": { "stringUnit": { "state": "translated", - "value": "Globale" + "value": "Utilizzo: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nCrea una nuova area di lavoro nella finestra del chiamante.\n\nBandiere:\n --name <title> Imposta un nome personalizzato per il nuovo spazio di lavoro\n --description <text> Imposta una descrizione personalizzata per il nuovo spazio di lavoro\n --cwd <path> Imposta la directory di lavoro per il nuovo spazio di lavoro\n --command <text> Invia testo+Invio al nuovo spazio di lavoro dopo la creazione\n --env KEY=VALUE Imposta una variabile di ambiente dello spazio di lavoro. Ripetibile.\n Le variabili CMUX_* riservate non possono essere sovrascritte.\n --env-file <path> Carica le righe KEY=VALUE da un file. Ripetibile.\n --param KEY=VALUE Imposta un {{variable}} utilizzato dalle stringhe dell'area di lavoro. Ripetibile.\n --param KEY Importa KEY dall'ambiente shell richiamante.\n --layout <json> Crea uno spazio di lavoro con un layout diviso predefinito.\n Le superfici di layout definiscono i propri comandi.\n --window <id|ref|index> Finestra di destinazione (predefinita: finestra del chiamante)\n --focus <true|false> Mettere a fuoco il nuovo spazio di lavoro (predefinito: false)\n --group <id|ref> Aggiungere il nuovo spazio di lavoro a un gruppo di spazi di lavoro\n --group-placement afterCurrent|top|end Posizionamento all'interno di --group (predefinito: top)\n --group-reference <workspace> Area di lavoro di riferimento per il posizionamento di afterCurrent\n\nEsempi:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グローバル" + "value": "使い方: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\n呼び出し元のウィンドウに新しいワークスペースを作成します。\n\nフラグ:\n --name <title> 新しいワークスペースの名前を設定\n --description <text> 新しいワークスペースの説明を設定\n --cwd <path> 新しいワークスペースの作業ディレクトリを設定\n --command <text> 作成後、新しいワークスペースへテキストと Enter を送信\n --env KEY=VALUE ワークスペース環境変数を設定。繰り返し指定可能。\n 予約済みの CMUX_* 変数は上書きできません。\n --env-file <path> ファイルから KEY=VALUE 行を読み込み。繰り返し指定可能。\n --param KEY=VALUE ワークスペース文字列の {{variable}} を設定。繰り返し指定可能。\n --param KEY 呼び出し元シェルの環境変数 KEY を取り込み。\n --layout <json> 定義済みの分割レイアウトでワークスペースを作成。\n レイアウトのサーフェスが各コマンドを定義します。\n --window <id|ref|index> 対象ウィンドウ (既定: 呼び出し元のウィンドウ)\n --focus <true|false> 新しいワークスペースをフォーカス (既定: false)\n --group <id|ref> 新しいワークスペースをグループへ追加\n --group-placement afterCurrent|top|end --group 内の位置 (既定: top)\n --group-reference <workspace> afterCurrent の基準ワークスペース\n\n例:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ការប្រើប្រាស់៖ cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nបង្កើតកន្លែងធ្វើការថ្មីនៅក្នុងបង្អួចរបស់អ្នកហៅចូល។\n\nទង់ជាតិ៖\n --name <title> កំណត់ឈ្មោះផ្ទាល់ខ្លួនសម្រាប់កន្លែងធ្វើការថ្មី។\n --description <text> កំណត់ការពិពណ៌នាផ្ទាល់ខ្លួនសម្រាប់កន្លែងធ្វើការថ្មី។\n --cwd <path> កំណត់ថតការងារសម្រាប់កន្លែងធ្វើការថ្មី។\n --command <text> ផ្ញើអត្ថបទ + បញ្ចូលទៅកន្លែងធ្វើការថ្មីបន្ទាប់ពីបង្កើត\n --env KEY=VALUE កំណត់អថេរបរិយាកាសកន្លែងធ្វើការ។ អាចធ្វើម្តងទៀតបាន។\n អថេរ CMUX_* ដែលបានកក់ទុកមិនអាចបដិសេធបានទេ។\n --env-file <path> ផ្ទុកបន្ទាត់ KEY=VALUE ពីឯកសារមួយ។ អាចធ្វើម្តងទៀតបាន។\n --param KEY=VALUE កំណត់ {{variable}} ដែលប្រើដោយខ្សែអក្សរកន្លែងធ្វើការ។ អាចធ្វើម្តងទៀតបាន។\n --param KEY នាំចូល KEY ពីបរិស្ថានសែលហៅ។\n --layout <json> បង្កើតកន្លែងធ្វើការជាមួយនឹងប្លង់បំបែកដែលបានកំណត់ជាមុន។\n ផ្ទៃប្លង់កំណត់ពាក្យបញ្ជាផ្ទាល់ខ្លួនរបស់ពួកគេ។\n --window <id|ref|index> បង្អួចគោលដៅ (លំនាំដើម៖ បង្អួចអ្នកហៅចូល)\n --focus <true|false> ផ្តោតលើកន្លែងធ្វើការថ្មី (លំនាំដើម៖ false)\n --group <id|ref> បន្ថែមកន្លែងធ្វើការថ្មីទៅក្រុមកន្លែងធ្វើការ\n --group-placement afterCurrent|top|end ការដាក់ នៅក្នុង --group (លំនាំដើម៖ top)\n --group-reference <workspace> កន្លែងធ្វើការយោងសម្រាប់ការដាក់ afterCurrent\n\nឧទាហរណ៍៖\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전역" + "value": "사용법: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\n호출자의 창에 새 작업 공간을 만듭니다.\n\n플래그:\n --name <title> 새 작업 공간에 대한 사용자 정의 이름 설정\n --description <text> 새 작업 공간에 대한 사용자 정의 설명 설정\n --cwd <path> 새 작업 공간의 작업 디렉토리 설정\n --command <text> 생성 후 새 작업 공간으로 텍스트 보내기 + Enter\n --env KEY=VALUE 작업 공간 환경 변수를 설정합니다. 반복 가능.\n 예약된 CMUX_* 변수는 재정의될 수 없습니다.\n --env-file <path> 파일에서 KEY=VALUE 라인을 로드합니다. 반복 가능.\n --param KEY=VALUE 작업 공간 문자열에서 사용되는 {{variable}}를 설정합니다. 반복 가능.\n --param KEY 호출 쉘 환경에서 KEY를 가져옵니다.\n --layout <json> 사전 정의된 분할 레이아웃으로 작업 공간을 만듭니다.\n 배치 표면은 자체 명령을 정의합니다.\n --window <id|ref|index> 대상 창(기본값: 발신자 창)\n --focus <true|false> 새 작업 공간에 초점을 맞춥니다. (기본값: false)\n --group <id|ref> 작업 공간 그룹에 새 작업 공간 추가\n --group-placement afterCurrent|top|end --group 내 배치(기본값: top)\n --group-reference <workspace> afterCurrent 배치를 위한 참조 작업 공간\n\n예:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Bruk: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nOpprett et nytt arbeidsområde i innringerens vindu.\n\nFlagg:\n --name <title> Angi et tilpasset navn for det nye arbeidsområdet\n --description <text> Angi en egendefinert beskrivelse for det nye arbeidsområdet\n --cwd <path> Angi arbeidskatalogen for det nye arbeidsområdet\n --command <text> Send tekst+Enter til det nye arbeidsområdet etter oppretting\n --env KEY=VALUE Angi en arbeidsområdemiljøvariabel. Repeterbar.\n Reserverte CMUX_*-variabler kan ikke overstyres.\n --env-file <path> Last inn KEY=VALUE-linjer fra en fil. Repeterbar.\n --param KEY=VALUE Angi en {{variable}} som brukes av arbeidsområdestrenger. Repeterbar.\n --param KEY Importer KEY fra det påkallende skallmiljøet.\n --layout <json> Lag arbeidsområde med et forhåndsdefinert delt oppsett.\n Layoutflater definerer sine egne kommandoer.\n --window <id|ref|index> Målvindu (standard: innringervindu)\n --focus <true|false> Fokuser det nye arbeidsområdet (standard: false)\n --group <id|ref> Legg til det nye arbeidsområdet i en arbeidsområdegruppe\n --group-placement afterCurrent|top|end Plassering innenfor --group (standard: top)\n --group-reference <workspace> Referansearbeidsområde for afterCurrent-plassering\n\nEksempler:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Globalne" + "value": "Zastosowanie: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nUtwórz nowy obszar roboczy w oknie dzwoniącego.\n\nFlagi:\n --name <title> Ustaw niestandardową nazwę nowego obszaru roboczego\n --description <text> Ustaw niestandardowy opis nowego obszaru roboczego\n --cwd <path> Ustaw katalog roboczy dla nowego obszaru roboczego\n --command <text> Wyślij tekst+Enter do nowego obszaru roboczego po utworzeniu\n --env KEY=VALUE Ustaw zmienną środowiskową obszaru roboczego. Powtarzalne.\n Zarezerwowanych zmiennych CMUX_* nie można zastąpić.\n --env-file <path> Załaduj linie KEY=VALUE z pliku. Powtarzalne.\n --param KEY=VALUE Ustawia {{variable}} używany przez ciągi obszaru roboczego. Powtarzalne.\n --param KEY Importuj KEY z wywołującego środowiska powłoki.\n --layout <json> Utwórz przestrzeń roboczą ze wstępnie zdefiniowanym układem podziału.\n Powierzchnie układu definiują własne polecenia.\n --window <id|ref|index> Okno docelowe (domyślnie: okno dzwoniącego)\n --focus <true|false> Skoncentruj się na nowym obszarze roboczym (domyślnie: false)\n --group <id|ref> Dodaj nowy obszar roboczy do grupy obszarów roboczych\n --group-placement afterCurrent|top|end Umieszczenie w --group (domyślnie: top)\n --group-reference <workspace> Referencyjny obszar roboczy dla umieszczenia afterCurrent\n\nPrzykłady:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Uso: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nCrie um novo espaço de trabalho na janela do chamador.\n\nBandeiras:\n --name <title> Defina um nome personalizado para o novo espaço de trabalho\n --description <text> Definir uma descrição customizada para o novo espaço de trabalho\n --cwd <path> Configure o diretório de trabalho para a nova área de trabalho\n --command <text> Enviar texto+Enter para o novo espaço de trabalho após a criação\n --env KEY=VALUE Configure uma variável de ambiente da área de trabalho. Repetível.\n Variáveis ​​CMUX_* reservadas não podem ser substituídas.\n --env-file <path> Carrega linhas KEY=VALUE de um arquivo. Repetível.\n --param KEY=VALUE Configure um {{variable}} usado pelas sequências da área de trabalho. Repetível.\n --param KEY Importe KEY do ambiente shell de chamada.\n --layout <json> Crie um espaço de trabalho com um layout dividido predefinido.\n As superfícies de layout definem seus próprios comandos.\n --window <id|ref|index> Janela de destino (padrão: janela do chamador)\n --focus <true|false> Focar o novo espaço de trabalho (padrão: false)\n --group <id|ref> Incluir a nova área de trabalho em um grupo de áreas de trabalho\n --group-placement afterCurrent|top|end Posicionamento dentro de --group (padrão: top)\n --group-reference <workspace> Área de trabalho de referência para posicionamento afterCurrent\n\nExemplos:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Глобальные" + "value": "Использование: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nСоздайте новую рабочую область в окне вызывающего абонента.\n\nФлаги:\n --name <title> Установите собственное имя для нового рабочего пространства.\n --description <text> Задайте собственное описание для новой рабочей области.\n --cwd <path> Установите рабочий каталог для нового рабочего пространства.\n --command <text> Отправьте текст + Enter в новое рабочее пространство после создания.\n --env KEY=VALUE Задайте переменную среды рабочей области. Повторяемый.\n Зарезервированные переменные CMUX_* нельзя переопределить.\n --env-file <path> Загрузить строки KEY=VALUE из файла. Повторяемый.\n --param KEY=VALUE Установите {{variable}}, используемый строками рабочей области. Повторяемый.\n --param KEY Импортируйте KEY из вызывающей среды оболочки.\n --layout <json> Создайте рабочее пространство с предопределенным разделенным макетом.\n Поверхности макета определяют свои собственные команды.\n --window <id|ref|index> Целевое окно (по умолчанию: окно вызывающего абонента)\n --focus <true|false> Фокус на новом рабочем пространстве (по умолчанию: false)\n --group <id|ref> Добавьте новое рабочее пространство в группу рабочих пространств.\n --group-placement afterCurrent|top|end Размещение внутри --group (по умолчанию: top)\n --group-reference <workspace> Справочная рабочая область для размещения afterCurrent\n\nПримеры:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทั่วไป" + "value": "การใช้งาน: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nสร้างพื้นที่ทำงานใหม่ในหน้าต่างของผู้โทร\n\nธง:\n --name <title> ตั้งชื่อที่กำหนดเองสำหรับพื้นที่ทำงานใหม่\n --description <text> ตั้งค่าคำอธิบายที่กำหนดเองสำหรับเวิร์กสเปซใหม่\n --cwd <path> ตั้งค่าไดเร็กทอรีการทำงานสำหรับพื้นที่ทำงานใหม่\n --command <text> ส่งข้อความ+ป้อนไปยังพื้นที่ทำงานใหม่หลังการสร้าง\n --env KEY=VALUE ตั้งค่าตัวแปรสภาพแวดล้อมเวิร์กสเปซ ทำซ้ำได้\n ตัวแปร CMUX_* ที่สงวนไว้ไม่สามารถเขียนทับได้\n --env-file <path> โหลดบรรทัด KEY=VALUE จากไฟล์ ทำซ้ำได้\n --param KEY=VALUE ตั้งค่า {{variable}} ที่ใช้โดยสตริงเวิร์กสเปซ ทำซ้ำได้\n --param KEY นำเข้า KEY จากสภาพแวดล้อมเชลล์ที่เรียกใช้\n --layout <json> สร้างพื้นที่ทำงานด้วยโครงร่างแยกที่กำหนดไว้ล่วงหน้า\n พื้นผิวเค้าโครงจะกำหนดคำสั่งของตนเอง\n --window <id|ref|index> หน้าต่างเป้าหมาย (ค่าเริ่มต้น: หน้าต่างผู้โทร)\n --focus <true|false> โฟกัสพื้นที่ทำงานใหม่ (ค่าเริ่มต้น: false)\n --group <id|ref> เพิ่มเวิร์กสเปซใหม่ให้กับกลุ่มเวิร์กสเปซ\n --group-placement afterCurrent|top|end ตำแหน่งภายใน --group (ค่าเริ่มต้น: top)\n --group-reference <workspace> พื้นที่ทำงานอ้างอิงสำหรับการวางตำแหน่ง afterCurrent\n\nตัวอย่าง:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel" + "value": "Kullanım: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nArayanın penceresinde yeni bir çalışma alanı oluşturun.\n\nBayraklar:\n --name <title> Yeni çalışma alanı için özel bir ad belirleyin\n --description <text> Yeni çalışma alanı için özel bir açıklama ayarlayın\n --cwd <path> Yeni çalışma alanı için çalışma dizinini ayarlayın\n --command <text> Oluşturulduktan sonra yeni çalışma alanına metin gönder+Enter\n --env KEY=VALUE Bir çalışma alanı ortam değişkeni ayarlayın. Tekrarlanabilir.\n Ayrılmış CMUX_* değişkenleri geçersiz kılınamaz.\n --env-file <path> KEY=VALUE satırlarını bir dosyadan yükleyin. Tekrarlanabilir.\n --param KEY=VALUE Çalışma alanı dizeleri tarafından kullanılan bir {{variable}} ayarlayın. Tekrarlanabilir.\n --param KEY Çağıran kabuk ortamından KEY'yi içe aktarın.\n --layout <json> Önceden tanımlanmış bölünmüş düzen ile çalışma alanı oluşturun.\n Düzen yüzeyleri kendi komutlarını tanımlar.\n --window <id|ref|index> Hedef pencere (varsayılan: arayanın penceresi)\n --focus <true|false> Yeni çalışma alanına odaklanın (varsayılan: false)\n --group <id|ref> Yeni çalışma alanını bir çalışma alanı grubuna ekleyin\n --group-placement afterCurrent|top|end --group içindeki yerleşim (varsayılan: top)\n --group-reference <workspace> afterCurrent yerleşimi için referans çalışma alanı\n\nÖrnekler:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Глобальна" + "value": "Використання: cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\nСтворіть нову робочу область у вікні абонента.\n\nПрапори:\n --name <title> Встановіть спеціальну назву для нової робочої області\n --description <text> Встановіть спеціальний опис для нової робочої області\n --cwd <path> Встановіть робочий каталог для нового робочого простору\n --command <text> Надіслати текст+Enter до нової робочої області після створення\n --env KEY=VALUE Установіть змінну середовища робочої області. Повторювані.\n Зарезервовані змінні CMUX_* не можна перевизначити.\n --env-file <path> Завантажити рядки KEY=VALUE з файлу. Повторювані.\n --param KEY=VALUE Встановити {{variable}}, який використовується рядками робочої області. Повторювані.\n --param KEY Імпортувати KEY із середовища виклику оболонки.\n --layout <json> Створіть робочий простір із попередньо визначеним розділеним макетом.\n Поверхні компонування визначають власні команди.\n --window <id|ref|index> Цільове вікно (за замовчуванням: вікно абонента)\n --focus <true|false> Фокус нового робочого простору (за замовчуванням: false)\n --group <id|ref> Додайте нову робочу область до групи робочих областей\n --group-placement afterCurrent|top|end Розміщення у --group (за замовчуванням: top)\n --group-reference <workspace> Довідкова робоча область для розміщення afterCurrent\n\nприклади:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "全局" + "value": "用途:cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\n在调用者的窗口中创建一个新的工作区。\n\n标志:\n --name <title> 为新工作区设置自定义名称\n --description <text> 为新工作区设置自定义描述\n --cwd <path> 设置新工作区的工作目录\n --command <text> 创建后发送文本+回车到新工作区\n --env KEY=VALUE 设置工作区环境变量。可重复。\n 保留的 CMUX_* 变量不能被覆盖。\n --env-file <path> 从文件加载 KEY=VALUE 行。可重复。\n --param KEY=VALUE 设置工作区字符串使用的 {{variable}}。可重复。\n --param KEY 从调用 shell 环境导入 KEY。\n --layout <json> 创建具有预定义分割布局的工作区。\n 布局表面定义它们自己的命令。\n --window <id|ref|index> 目标窗口(默认:调用者窗口)\n --focus <true|false> 聚焦新工作区(默认值:false)\n --group <id|ref> 将新工作区添加到工作区组\n --group-placement afterCurrent|top|end 放置在 --group 内(默认值:top)\n --group-reference <workspace> afterCurrent 放置的参考工作区\n\n示例:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "全域" + "value": "用途:cmux new-workspace [--name <title>] [--description <text>] [--cwd <path>] [--command <text>] [--env KEY=VALUE]... [--env-file <path>]... [--param KEY=VALUE]... [--layout <json>] [--window <id|ref|index>] [--focus <true|false>] [--group <id|ref>] [--group-placement afterCurrent|top|end] [--group-reference <workspace>]\n\n在呼叫者的視窗中建立一個新的工作區。\n\n標誌:\n --name <title> 為新工作區設定自訂名稱\n --description <text> 為新工作區設定自訂描述\n --cwd <path> 設定新工作區的工作目錄\n --command <text> 建立後發送文字+回車到新工作區\n --env KEY=VALUE 設定工作區環境變數。可重複。\n 保留的 CMUX_* 變數不能被覆蓋。\n --env-file <path> 從檔案載入 KEY=VALUE 行。可重複。\n --param KEY=VALUE 設定工作區字串所使用的 {{variable}}。可重複。\n --param KEY 從呼叫 shell 環境匯入 KEY。\n --layout <json> 建立具有預先定義分割佈局的工作區。\n 佈局表面定義它們自己的命令。\n --window <id|ref|index> 目標視窗(預設:呼叫者視窗)\n --focus <true|false> 聚焦新工作區(預設值:false)\n --group <id|ref> 將新工作區新增至工作區組\n --group-placement afterCurrent|top|end 放置在 --group 內(預設值:top)\n --group-reference <workspace> afterCurrent 放置的參考工作區\n\n範例:\n cmux new-workspace\n cmux new-workspace --name \"Build Server\"\n cmux new-workspace --cwd . --command \"npm test\"\n cmux new-workspace --name \"Dev {{ticket}}\" --param ticket=BERKS-87" } } } }, - "command.applyUpdateIfAvailable.title": { + "cli.workspace.templateParameter.error.environmentMissing": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تطبيق التحديث (إن توفر)" + "value": "تعذر على %@: --param %@ استيراد متغير بيئة غير محدد" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Primijeni ažuriranje (ako je dostupno)" + "value": "%@: --param %@ nije mogao uvesti nepostavljenu varijablu okruženja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Anvend opdatering (hvis tilgængelig)" + "value": "%@: --param %@ kunne ikke importere en ikke indstillet miljøvariabel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Update anwenden (falls verfügbar)" + "value": "%@: --param %@ konnte eine nicht gesetzte Umgebungsvariable nicht importieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Apply Update (If Available)" + "value": "%@: --param %@ could not import an unset environment variable" } }, "es": { "stringUnit": { "state": "translated", - "value": "Aplicar actualización (si está disponible)" + "value": "%@: --param %@ no pudo importar una variable de entorno no configurada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appliquer la mise à jour (si disponible)" + "value": "%@: --param %@ n'a pas pu importer une variable d'environnement non définie" } }, "it": { "stringUnit": { "state": "translated", - "value": "Applica aggiornamento (se disponibile)" + "value": "%@: --param %@ non ha potuto importare una variabile di ambiente non impostata" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップデートを適用(利用可能な場合)" + "value": "%@: --param %@ は未設定の環境変数を取り込めません" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "%@: --param %@ មិនអាចនាំចូលអថេរបរិស្ថានដែលមិនកំណត់បានទេ។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "업데이트 적용 (사용 가능한 경우)" + "value": "%@: --param %@는 설정되지 않은 환경 변수를 가져올 수 없습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Installer oppdatering (hvis tilgjengelig)" + "value": "%@: --param %@ kunne ikke importere en udefinert miljøvariabel" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zastosuj aktualizację (jeśli dostępna)" + "value": "%@: --param %@ nie mógł zaimportować nieustawionej zmiennej środowiskowej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aplicar Atualização (Se Disponível)" + "value": "%@: --param %@ não pôde importar uma variável de ambiente não definida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Применить обновление (если доступно)" + "value": "%@: --param %@ не удалось импортировать неустановленную переменную среды." } }, "th": { "stringUnit": { "state": "translated", - "value": "ติดตั้งอัปเดต (ถ้ามี)" + "value": "%@: --param %@ ไม่สามารถนำเข้าตัวแปรสภาพแวดล้อมที่ไม่ได้ตั้งค่าได้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Güncellemeyi Uygula (Varsa)" + "value": "%@: --param %@, ayarlanmamış bir ortam değişkenini içe aktaramadı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Застосувати оновлення (якщо доступне)" + "value": "%@: --param %@ не вдалося імпортувати невстановлену змінну середовища" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "应用更新(如果可用)" + "value": "%@: --param %@ 无法导入未设置的环境变量" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "套用更新(如果有的話)" + "value": "%@: --param %@ 無法匯入未設定的環境變數" } } } }, - "command.attemptUpdate.subtitle": { + "cli.workspace.templateParameter.error.invalidName": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عام" + "value": "%@: اسم معلمة القالب غير صالح '%@'" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Globalno" + "value": "%@: nevažeći naziv parametra predloška '%@'" } }, "da": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "%@: ugyldigt skabelonparameternavn '%@'" } }, "de": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "%@: ungültiger Vorlagenparametername „%@“" } }, "en": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "%@: invalid template parameter name '%@'" } }, "es": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "%@: nombre de parámetro de plantilla no válido '%@'" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Général" + "value": "%@ : nom de paramètre de modèle non valide '%@'" } }, "it": { "stringUnit": { "state": "translated", - "value": "Globale" + "value": "%@: nome parametro modello non valido '%@'" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グローバル" + "value": "%@: テンプレートパラメータ名 '%@' は無効です" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "%@៖ ឈ្មោះ​ប៉ារ៉ាម៉ែត្រ​គំរូ​មិន​ត្រឹមត្រូវ '%@'" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전역" + "value": "%@: 잘못된 템플릿 매개변수 이름 '%@'" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "%@: ugyldig malparameternavn '%@'" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Globalne" + "value": "%@: niepoprawna nazwa parametru szablonu „%@”" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "%@: nome de parâmetro de modelo inválido '%@'" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Глобальные" + "value": "%@: неверное имя параметра шаблона «%@»." } }, "th": { "stringUnit": { "state": "translated", - "value": "ทั่วไป" + "value": "%@: ชื่อพารามิเตอร์เทมเพลตไม่ถูกต้อง '%@'" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel" + "value": "%@: geçersiz şablon parametre adı '%@'" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Глобальна" + "value": "%@: недійсна назва параметра шаблону \"%@\"" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "全局" + "value": "%@:模板参数名称“%@”无效" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "全域" + "value": "%@:範本參數名稱「%@」無效" } } } }, - "command.attemptUpdate.title": { + "cli.workspace.templateParameter.error.missing": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "محاولة التحديث" + "value": "%@: معلمات قالب مساحة العمل المفقودة: %@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pokušaj ažuriranje" + "value": "%@: nedostaju parametri predloška radnog prostora: %@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Forsøg opdatering" + "value": "%@: manglende arbejdsområdeskabelonparametre: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Update versuchen" + "value": "%@: Fehlende Parameter der Arbeitsbereichsvorlage: %@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Attempt Update" + "value": "%@: missing workspace template parameters: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Intentar actualización" + "value": "%@: faltan parámetros de plantilla de espacio de trabajo: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Tenter la mise à jour" + "value": "%@ : paramètres de modèle d'espace de travail manquants : %@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Tenta aggiornamento" + "value": "%@: parametri del modello dell'area di lavoro mancanti: %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップデートを試行" + "value": "%@: ワークスペーステンプレートパラメータがありません: %@" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "%@៖ បាត់ប៉ារ៉ាម៉ែត្រគំរូកន្លែងធ្វើការ៖ %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "업데이트 시도" + "value": "%@: 작업공간 템플릿 매개변수 누락: %@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Forsøk oppdatering" + "value": "%@: manglende arbeidsområdemalparametere: %@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spróbuj zaktualizować" + "value": "%@: brak parametrów szablonu obszaru roboczego: %@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tentar Atualização" + "value": "%@: parâmetros do modelo de espaço de trabalho ausentes: %@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Попытаться обновить" + "value": "%@: отсутствуют параметры шаблона рабочей области: %@." } }, "th": { "stringUnit": { "state": "translated", - "value": "ลองอัปเดต" + "value": "%@: ไม่มีพารามิเตอร์เทมเพลตพื้นที่ทำงาน: %@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Güncellemeyi Dene" + "value": "%@: eksik çalışma alanı şablon parametreleri: %@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Спробувати оновити" + "value": "%@: відсутні параметри шаблону робочої області: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尝试更新" + "value": "%@:缺少工作区模板参数:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "嘗試更新" + "value": "%@:缺少工作區範本參數:%@" } } } }, - "command.auth.signIn.title": { + "cli.workspace.templateParameter.error.requiresValue": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sign In" + "value": "%@: --param يتطلب KEY=VALUE أو KEY" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "サインイン" + "value": "%@: --param zahtijeva KEY=VALUE ili KEY" } - } - } - }, - "command.auth.signOut.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Sign Out" + "value": "%@: --param kræver KEY=VALUE eller KEY" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "サインアウト" + "value": "%@: --param erfordert KEY=VALUE oder KEY" } - } - } - }, - "command.auth.subtitle": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Account" + "value": "%@: --param requires KEY=VALUE or KEY" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "アカウント" + "value": "%@: --param requiere KEY=VALUE o KEY" } - } - } - }, - "command.browserAvailability.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "%@ : --param nécessite KEY=VALUE ou KEY" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "%@: --param richiede KEY=VALUE o KEY" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "value": "%@: --param には KEY=VALUE または KEY が必要です" } - } - } - }, - "command.browserBack.title": { - "extractionState": "manual", - "localizations": { - "ar": { + }, + "km": { "stringUnit": { "state": "translated", - "value": "رجوع" + "value": "%@៖ --param ទាមទារ KEY=VALUE ឬ KEY" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Nazad" + "value": "%@: --param에는 KEY=VALUE 또는 KEY가 필요합니다." } }, - "da": { + "nb": { "stringUnit": { "state": "translated", - "value": "Tilbage" + "value": "%@: --param krever KEY=VALUE eller KEY" } }, - "de": { + "pl": { "stringUnit": { "state": "translated", - "value": "Zurück" + "value": "%@: --param wymaga KEY=VALUE lub KEY" } }, - "en": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Back" + "value": "%@: --param requer KEY=VALUE ou KEY" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Atrás" + "value": "%@: --param требует KEY=VALUE или KEY" } }, - "fr": { + "th": { "stringUnit": { "state": "translated", - "value": "Précédent" + "value": "%@: --param ต้องใช้ KEY=VALUE หรือ KEY" } }, - "it": { + "tr": { "stringUnit": { "state": "translated", - "value": "Indietro" + "value": "%@: --param, KEY=VALUE veya KEY gerektirir" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "戻る" + "value": "%@: --param вимагає KEY=VALUE або KEY" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "뒤로" + "value": "%@:--param 需要 KEY=VALUE 或 KEY" } }, - "nb": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Tilbake" + "value": "%@:--param 需要 KEY=VALUE 或 KEY" } - }, - "pl": { + } + } + }, + "cli.workspace.env.empty": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Wstecz" + "value": "No environment variables" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Voltar" + "value": "環境変数はありません" } }, - "ru": { + "ko": { "stringUnit": { "state": "translated", - "value": "Назад" + "value": "환경 변수가 없습니다" } }, - "th": { + "uk": { "stringUnit": { "state": "translated", - "value": "ย้อนกลับ" + "value": "Немає змінних середовища" } - }, - "tr": { + } + } + }, + "cli.workspace.env.error.emptyKey": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Geri" + "value": "%@: %@ entry '%@' has an empty key" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Назад" + "value": "%@: %@ のエントリ '%@' のキーが空です" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "后退" + "value": "%@: %@ 항목 '%@'의 키가 비어 있습니다" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "上一頁" + "value": "%@: запис %@ '%@' має порожній ключ" } } } }, - "command.browserClearHistory.subtitle": { + "cli.workspace.env.error.invalidAssignment": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "المتصفح" + "value": "%@: %@ entry '%@' must be in KEY=VALUE form" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Preglednik" + "value": "%@: %@ のエントリ '%@' は KEY=VALUE 形式である必要があります" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "%@: %@ 항목 '%@'은(는) KEY=VALUE 형식이어야 합니다" } }, - "de": { + "uk": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "%@: запис %@ '%@' має бути у форматі KEY=VALUE" } - }, + } + } + }, + "cli.workspace.env.error.unknownFlag": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "workspace env: unknown flag '%@'. Known flags: --workspace <id|ref|index>, --window <id|ref|index>, --mask" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Navegador" + "value": "workspace env: 不明なフラグ '%@'。利用可能なフラグ: --workspace <id|ref|index>, --window <id|ref|index>, --mask" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Navigateur" + "value": "workspace env: 알 수 없는 플래그 '%@'. 사용 가능한 플래그: --workspace <id|ref|index>, --window <id|ref|index>, --mask" } }, - "it": { + "uk": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "workspace env: невідомий прапорець '%@'. Доступні прапорці: --workspace <id|ref|index>, --window <id|ref|index>, --mask" + } + } + } + }, + "cli.workspace.envFile.error.readFailed": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@: could not read --env-file '%@': %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "value": "%@: --env-file '%@' を読み込めませんでした: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저" + "value": "%@: --env-file '%@'을(를) 읽을 수 없습니다: %@" } }, - "nb": { + "uk": { "stringUnit": { "state": "translated", - "value": "Nettleser" + "value": "%@: не вдалося прочитати --env-file '%@': %@" } - }, - "pl": { + } + } + }, + "cli.error.sshSessionAttachWorkspaceRequiresValue": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Przeglądarka" + "value": "ssh-session-attach: --workspace requires a value" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Navegador" + "value": "ssh-session-attach: --workspace の値を指定してください" } - }, - "ru": { + } + } + }, + "cli.workspace.usage": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Браузер" + "value": "Usage: cmux workspace <subcommand> [flags]\n\nCanonical noun for workspace operations. Legacy verbs\n(new-workspace, list-workspaces, close-workspace,\nrename-workspace, select-workspace) keep working and print a\none-time deprecation hint pointing here.\n\nSubcommands:\n list List workspaces in a window\n create [flags] Create a workspace (same flags as new-workspace)\n env [workspace] [--mask]\n Print a workspace's configured environment\n variables (--mask redacts the values)\n close <workspace> Close a workspace\n rename <workspace> --title <new>\n select <workspace> Make a workspace active\n status [set <lane|auto>]\n Show or pin the workspace todo status\n reconnect [workspace] Reconnect a remote (SSH) workspace, including one\n whose automatic reconnect paused because the host\n was unreachable\n disconnect [workspace] Stop a remote (SSH) workspace's connection\n loading <on|off> [--id <name>] Toggle the workspace loading spinner.\n group <subcommand> Workspace group operations (see cmux workspace-group --help)\nenv/reconnect/disconnect accept a positional handle or --workspace\n<id|ref|index>, defaulting to the caller's workspace, then the\nselected one (of --window's window when given).\nExamples:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "เบราว์เซอร์" + "value": "使い方: cmux workspace <サブコマンド> [フラグ]\n\nワークスペース操作の正規の名前空間です。従来の動詞コマンド\n(new-workspace、list-workspaces、close-workspace、\nrename-workspace、select-workspace) は引き続き動作し、ここを指す\n非推奨ヒントを一度だけ表示します。\n\nサブコマンド:\n list ウィンドウ内のワークスペースを一覧表示\n create [flags] ワークスペースを作成 (new-workspace と同じフラグ。\n --env KEY=VALUE と --env-file <path> を含む)\n env [workspace] [--mask]\n ワークスペースに設定された環境変数を表示\n (--mask は値を伏せ字にします)\n close <workspace> ワークスペースを閉じる\n rename <workspace> --title <new>\n select <workspace> ワークスペースをアクティブにする\n reconnect [workspace] リモート (SSH) ワークスペースを再接続。ホストに\n 到達できず自動再接続が一時停止したものも含む\n disconnect [workspace] リモート (SSH) ワークスペースの接続を停止\n status [set <lane|auto>]\n ワークスペースの todo ステータスを表示/固定\n loading <on|off> [--id <name>]\n ワークスペースの読み込みスピナーを切り替え。--id ごとに\n 別のローダーとして積み重なり、省略時は既定の 1 つを\n 切り替えます\n group <subcommand> ワークスペースグループ操作 (cmux workspace-group --help を参照)\n\nenv/reconnect/disconnect は位置引数のハンドルまたは --workspace\n<id|ref|index> を受け付け、省略時は呼び出し元のワークスペース、\n次に選択中のワークスペース (--window 指定時はそのウィンドウ) を\n対象にします。\n\n例:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace create --cwd . --env AWS_PROFILE=prod --env-file ./.cmux.env\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3\n cmux workspace loading on\n cmux workspace loading on --id build\n cmux workspace loading off" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Tarayıcı" + "value": "사용법: cmux workspace <하위 명령> [플래그]\n\n워크스페이스 작업의 표준 네임스페이스입니다. 기존 동사형 명령\n(new-workspace, list-workspaces, close-workspace,\nrename-workspace, select-workspace)은 계속 작동하며 이곳을\n가리키는 사용 중단 안내를 한 번 표시합니다.\n\n하위 명령:\n list 창의 워크스페이스 목록 표시\n create [flags] 워크스페이스 생성 (new-workspace와 동일한 플래그.\n --env KEY=VALUE 및 --env-file <path> 포함)\n env [workspace] [--mask]\n 워크스페이스에 설정된 환경 변수 표시\n (--mask는 값을 가립니다)\n close <workspace> 워크스페이스 닫기\n rename <workspace> --title <new>\n select <workspace> 워크스페이스를 활성화\n reconnect [workspace] 원격 (SSH) 워크스페이스 재연결. 호스트에 연결할\n 수 없어 자동 재연결이 일시 중지된 경우 포함\n disconnect [workspace] 원격 (SSH) 워크스페이스 연결 중지\n status [set <lane|auto>]\n 워크스페이스의 todo 상태 표시/고정\n loading <on|off> [--id <name>]\n 워크스페이스 로딩 스피너 전환. --id마다 별도의\n 로더로 누적되며, 생략 시 기본 로더 하나를 전환\n group <subcommand> 워크스페이스 그룹 작업 (cmux workspace-group --help 참고)\n\nenv/reconnect/disconnect는 위치 핸들 또는 --workspace\n<id|ref|index>를 받으며, 기본값은 호출자의 워크스페이스, 그다음\n선택된 워크스페이스입니다 (--window 지정 시 해당 창 기준).\n\n예시:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace create --cwd . --env AWS_PROFILE=prod --env-file ./.cmux.env\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3\n cmux workspace loading on\n cmux workspace loading on --id build\n cmux workspace loading off" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Браузер" + "value": "Використання: cmux workspace <підкоманда> [прапорці]\n\nКанонічний простір імен для операцій з робочими просторами.\nЗастарілі дієслівні команди (new-workspace, list-workspaces,\nclose-workspace, rename-workspace, select-workspace) продовжують\nпрацювати й одноразово показують підказку про застарілість, що\nвказує сюди.\n\nПідкоманди:\n list Список робочих просторів у вікні\n create [flags] Створити робочий простір (ті самі прапорці, що й\n new-workspace, зокрема --env KEY=VALUE та --env-file <path>)\n env [workspace] [--mask]\n Показати налаштовані змінні середовища робочого\n простору (--mask приховує значення)\n close <workspace> Закрити робочий простір\n rename <workspace> --title <new>\n select <workspace> Зробити робочий простір активним\n reconnect [workspace] Перепідключити віддалений (SSH) робочий простір,\n зокрема той, де автоматичне перепідключення\n призупинено через недосяжний хост\n disconnect [workspace] Зупинити з'єднання віддаленого (SSH) робочого простору\n status [set <lane|auto>]\n Показати або закріпити todo-статус робочого простору\n loading <on|off> [--id <name>]\n Перемкнути індикатор завантаження робочого простору.\n Кожен --id — окремий лоадер; без --id перемикається\n один типовий\n group <subcommand> Операції з групами робочих просторів (див. cmux workspace-group --help)\n\nenv/reconnect/disconnect приймають позиційний дескриптор або --workspace\n<id|ref|index>; типово використовується робочий простір викликача,\nдалі — вибраний (у вікні з --window, якщо задано).\n\nПриклади:\n cmux workspace list --json\n cmux workspace create --name Build --cwd ~/projects/myapp\n cmux workspace create --cwd . --env AWS_PROFILE=prod --env-file ./.cmux.env\n cmux workspace env workspace:3 --mask\n cmux workspace close workspace:3\n cmux workspace reconnect\n cmux workspace disconnect --workspace workspace:3\n cmux workspace loading on\n cmux workspace loading on --id build\n cmux workspace loading off" } - }, - "zh-Hans": { + } + } + }, + "cli.workspace.status.usage": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "浏览器" + "value": "Usage: cmux workspace status [set <lane|auto> | cycle] [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nShow or pin a workspace's todo lifecycle status. Without arguments prints\nthe effective status, the inferred status, and the override, targeting the\ncaller's workspace by default.\n\nLanes are inferred from live signals (agent needs input > agent running >\nopen PR > all PRs merged/closed > dirty git tree > todo). `set <lane>`\npins a manual lane that auto-clears as soon as the inferred lane changes;\n`set auto` clears the pin immediately. `cycle` advances the manual override\none lane forward (todo → working → needs-attention → review → done → todo).\n\nLanes: todo, working, needs-attention, review, done\n\nExamples:\n cmux workspace status\n cmux workspace status set review\n cmux workspace status cycle\n cmux workspace status set auto --workspace workspace:2" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "瀏覽器" + "value": "使い方: cmux workspace status [set <lane|auto> | cycle] [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nワークスペースの todo ライフサイクルステータスを表示または固定します。引数なしでは、\n有効なステータス、推定ステータス、上書き状態を表示し、既定では呼び出し元の\nワークスペースを対象にします。\n\nレーンはライブシグナルから推定されます (agent needs input > agent running >\nopen PR > all PRs merged/closed > dirty git tree > todo)。`set <lane>` は\n手動レーンを固定し、推定レーンが変わると自動的に解除されます。`set auto` は\n固定をすぐに解除します。`cycle` は手動上書きを 1 レーン先へ進めます\n(todo → working → needs-attention → review → done → todo)。\n\nレーン: todo, working, needs-attention, review, done\n\n例:\n cmux workspace status\n cmux workspace status set review\n cmux workspace status cycle\n cmux workspace status set auto --workspace workspace:2" } } } }, - "command.browserClearHistory.title": { + "cli.todo.usage": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "مسح سجل المتصفح" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Obriši historiju preglednika" + "value": "Usage: cmux todo <subcommand> [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nPer-workspace checklist, writable by you and by agents. Targets the\ncaller's workspace by default. Items are capped at 50 per workspace.\n\nSubcommands:\n add \"text\" [--state <pending|in-progress|completed>] [--origin <user|agent>]\n list Print items (1-based indexes) and progress\n check <index|id> Mark an item completed\n uncheck <index|id> Mark an item pending\n start <index|id> Mark an item in-progress\n edit <index|id> \"text\" Rewrite an item's text\n rm <index|id> Remove an item\n clear Remove every item\n set ['<json>'] Atomically replace the whole checklist from a\n JSON array of {text, state?, id?, origin?}\n objects (inline argument, or piped on stdin).\n Items whose id matches an existing item keep\n their identity and origin; the rest are created\n and unnamed existing items are removed.\n open Open (or focus) the workspace's todo pane\n\n<index> is the 1-based number printed by `cmux todo list`; <id> is the\nitem UUID from `cmux todo list --json`.\n\nExamples:\n cmux todo add \"write regression test\"\n cmux todo list\n cmux todo check 1\n cmux todo start 2 --workspace workspace:3\n my-plan-tool --json | cmux todo set\n cmux todo open\n\nSee also: cmux workspace status" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ryd browserhistorik" + "value": "使い方: cmux todo <subcommand> [--workspace <id|ref|index>] [--window <id|ref|index>] [--json]\n\nワークスペースごとのチェックリストです。ユーザーとエージェントのどちらも書き込めます。\n既定では呼び出し元のワークスペースを対象にします。項目数はワークスペースごとに\n50 件までです。\n\nサブコマンド:\n add \"text\" [--state <pending|in-progress|completed>] [--origin <user|agent>]\n list 項目 (1 始まりの番号) と進捗を表示\n check <index|id> 項目を完了にする\n uncheck <index|id> 項目を未着手に戻す\n start <index|id> 項目を進行中にする\n edit <index|id> \"text\" 項目のテキストを書き換える\n rm <index|id> 項目を削除\n clear すべての項目を削除\n set ['<json>'] {text, state?, id?, origin?} オブジェクトの\n JSON 配列でチェックリスト全体を原子的に置き換えます\n (インライン引数、または標準入力からパイプ)。\n id が既存項目と一致する項目は ID と origin を維持し、\n それ以外は新規作成され、名前のない既存項目は削除されます。\n open ワークスペースの todo ペインを開く (またはフォーカスする)\n\n<index> は `cmux todo list` に表示される 1 始まりの番号です。<id> は\n`cmux todo list --json` に含まれる項目 UUID です。\n\n例:\n cmux todo add \"write regression test\"\n cmux todo list\n cmux todo check 1\n cmux todo start 2 --workspace workspace:3\n my-plan-tool --json | cmux todo set\n cmux todo open\n\n関連項目: cmux workspace status" } - }, - "de": { + } + } + }, + "cli.workspaceLoading.usage": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Browserverlauf löschen" + "value": "Usage: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" } }, - "en": { + "ja": { "stringUnit": { "state": "translated", - "value": "Clear Browser History" + "value": "使い方: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Borrar historial del navegador" + "value": "사용법: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" } }, - "fr": { + "uk": { "stringUnit": { "state": "translated", - "value": "Effacer l'historique du navigateur" + "value": "Використання: cmux workspace loading <on|off> [--id <name>] [--workspace <id>] [--window <id>] [--json]" } - }, - "it": { + } + } + }, + "clipboard.sshError.item": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Cancella cronologia browser" + "value": "%lld. %@ (%@): %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザ履歴をクリア" + "value": "%lld. %@ (%@): %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 기록 지우기" + "value": "%lld. %@ (%@): %@" } }, - "nb": { + "uk": { "stringUnit": { "state": "translated", - "value": "Tøm nettleserhistorikk" + "value": "%lld. %@ (%@): %@" } - }, - "pl": { + } + } + }, + "clipboard.sshError.single": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Wyczyść historię przeglądarki" + "value": "SSH error (%@): %@" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Limpar Histórico do Navegador" + "value": "SSH エラー (%@): %@" } }, - "ru": { + "ko": { "stringUnit": { "state": "translated", - "value": "Очистить историю браузера" + "value": "SSH 오류 (%@): %@" } }, - "th": { + "uk": { "stringUnit": { "state": "translated", - "value": "ล้างประวัติเบราว์เซอร์" + "value": "Помилка SSH (%@): %@" } - }, - "tr": { + } + } + }, + "cloud.overlay.reconnect.button": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tarayıcı Geçmişini Temizle" + "value": "Reconnect" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Очистити історію браузера" + "value": "再接続" } - }, - "zh-Hans": { + } + } + }, + "command.addWorkspaceChecklistItem.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "清除浏览器历史记录" + "value": "Add Checklist Item…" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "清除瀏覽記錄" + "value": "チェックリスト項目を追加…" } } } }, - "command.browserConsole.title": { + "command.applyUpdateIfAvailable.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عرض وحدة تحكم JavaScript" + "value": "عام" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prikaži JavaScript konzolu" + "value": "Globalno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vis JavaScript-konsol" + "value": "Globalt" } }, "de": { "stringUnit": { "state": "translated", - "value": "JavaScript-Konsole anzeigen" + "value": "Global" } }, "en": { "stringUnit": { "state": "translated", - "value": "Show JavaScript Console" + "value": "Global" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar consola de JavaScript" + "value": "Global" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher la console JavaScript" + "value": "Général" } }, "it": { "stringUnit": { "state": "translated", - "value": "Mostra console JavaScript" + "value": "Globale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "JavaScriptコンソールを表示" + "value": "グローバル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "JavaScript 콘솔 표시" + "value": "전역" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vis JavaScript-konsoll" + "value": "Globalt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pokaż konsolę JavaScript" + "value": "Globalne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mostrar Console JavaScript" + "value": "Global" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Показать консоль JavaScript" + "value": "Глобальные" } }, "th": { "stringUnit": { "state": "translated", - "value": "แสดงคอนโซล JavaScript" + "value": "ทั่วไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "JavaScript Konsolunu Göster" + "value": "Genel" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Показати консоль JavaScript" + "value": "Глобальна" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示 JavaScript 控制台" + "value": "全局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示 JavaScript 主控台" + "value": "全域" } } } }, - "command.browserDuplicateRight.subtitle": { + "command.applyUpdateIfAvailable.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تخطيط المتصفح" + "value": "تطبيق التحديث (إن توفر)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Raspored preglednika" + "value": "Primijeni ažuriranje (ako je dostupno)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Browserlayout" + "value": "Anvend opdatering (hvis tilgængelig)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser-Layout" + "value": "Update anwenden (falls verfügbar)" } }, "en": { "stringUnit": { "state": "translated", - "value": "Browser Layout" + "value": "Apply Update (If Available)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Disposición del navegador" + "value": "Aplicar actualización (si está disponible)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Disposition du navigateur" + "value": "Appliquer la mise à jour (si disponible)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Layout browser" + "value": "Applica aggiornamento (se disponibile)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザレイアウト" + "value": "アップデートを適用(利用可能な場合)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 레이아웃" + "value": "업데이트 적용 (사용 가능한 경우)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nettleseroppsett" + "value": "Installer oppdatering (hvis tilgjengelig)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Układ przeglądarki" + "value": "Zastosuj aktualizację (jeśli dostępna)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Layout do Navegador" + "value": "Aplicar Atualização (Se Disponível)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Макет браузера" + "value": "Применить обновление (если доступно)" } }, "th": { "stringUnit": { "state": "translated", - "value": "เค้าโครงเบราว์เซอร์" + "value": "ติดตั้งอัปเดต (ถ้ามี)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı Düzeni" + "value": "Güncellemeyi Uygula (Varsa)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Макет браузера" + "value": "Застосувати оновлення (якщо доступне)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "浏览器布局" + "value": "应用更新(如果可用)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瀏覽器版面" + "value": "套用更新(如果有的話)" } } } }, - "command.browserDuplicateRight.title": { + "command.attemptUpdate.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نسخ المتصفح إلى اليمين" + "value": "عام" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Dupliciraj preglednik desno" + "value": "Globalno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Dupliker browser til højre" + "value": "Globalt" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser nach rechts duplizieren" + "value": "Global" } }, "en": { "stringUnit": { "state": "translated", - "value": "Duplicate Browser to the Right" + "value": "Global" } }, "es": { "stringUnit": { "state": "translated", - "value": "Duplicar navegador a la derecha" + "value": "Global" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Dupliquer le navigateur à droite" + "value": "Général" } }, "it": { "stringUnit": { "state": "translated", - "value": "Duplica browser a destra" + "value": "Globale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザを右に複製" + "value": "グローバル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저를 오른쪽으로 복제" + "value": "전역" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dupliser nettleser til høyre" + "value": "Globalt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Duplikuj przeglądarkę na prawo" + "value": "Globalne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Duplicar Navegador à Direita" + "value": "Global" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Дублировать браузер вправо" + "value": "Глобальные" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำซ้ำเบราว์เซอร์ไปทางขวา" + "value": "ทั่วไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcıyı Sağa Çoğalt" + "value": "Genel" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дублювати браузер праворуч" + "value": "Глобальна" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向右复制浏览器" + "value": "全局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將瀏覽器複製到右側" + "value": "全域" } } } }, - "command.browserFocusAddressBar.title": { + "command.attemptUpdate.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "التركيز على شريط العنوان" + "value": "محاولة التحديث" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Fokusiraj adresnu traku" + "value": "Pokušaj ažuriranje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fokuser adresselinjen" + "value": "Forsøg opdatering" } }, "de": { "stringUnit": { "state": "translated", - "value": "Adressleiste fokussieren" + "value": "Update versuchen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Focus Address Bar" + "value": "Attempt Update" } }, "es": { "stringUnit": { "state": "translated", - "value": "Enfocar barra de direcciones" + "value": "Intentar actualización" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activer la barre d'adresse" + "value": "Tenter la mise à jour" } }, "it": { "stringUnit": { "state": "translated", - "value": "Porta il focus sulla barra degli indirizzi" + "value": "Tenta aggiornamento" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アドレスバーにフォーカス" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ផ្ដោតលើរបារអាសយដ្ឋាន" + "value": "アップデートを試行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "주소 표시줄 포커스" + "value": "업데이트 시도" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fokuser adressefeltet" + "value": "Forsøk oppdatering" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ustaw fokus na pasku adresu" + "value": "Spróbuj zaktualizować" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Focar na Barra de Endereço" + "value": "Tentar Atualização" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Перейти к адресной строке" + "value": "Попытаться обновить" } }, "th": { "stringUnit": { "state": "translated", - "value": "โฟกัสแถบที่อยู่" + "value": "ลองอัปเดต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Adres Çubuğuna Odaklan" + "value": "Güncellemeyi Dene" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Фокус на адресному рядку" + "value": "Спробувати оновити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "聚焦地址栏" + "value": "尝试更新" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "聚焦網址列" + "value": "嘗試更新" } } } }, - "command.browserFocusMode.enter.title": { + "command.auth.signIn.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "تفعيل وضع تركيز المتصفح" + "value": "Sign In" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Uđi u način fokusa preglednika" + "value": "サインイン" } - }, - "da": { + } + } + }, + "command.auth.signOut.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Aktivér browser-fokustilstand" + "value": "Sign Out" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Browser-Fokusmodus aktivieren" + "value": "サインアウト" } - }, + } + } + }, + "command.auth.subtitle": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enter Browser Focus Mode" + "value": "Account" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Activar modo de enfoque del navegador" + "value": "アカウント" } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Activer le mode focus du navigateur" + } + } + }, + "command.browserAvailability.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Browser" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Attiva la modalità focus del browser" + "value": "ブラウザ" + } + } + } + }, + "command.browserBack.title": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "رجوع" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ブラウザフォーカスモードに入る" + "value": "Nazad" } }, - "km": { + "da": { "stringUnit": { "state": "translated", - "value": "បើករបៀបផ្ដោតអារម្មណ៍កម្មវិធីរុករក" + "value": "Tilbage" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Zurück" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Back" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Atrás" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Précédent" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Indietro" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "戻る" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 집중 모드 시작" + "value": "뒤로" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Aktiver nettleser-fokusmodus" + "value": "Tilbake" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Włącz tryb skupienia przeglądarki" + "value": "Wstecz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ativar modo de foco do navegador" + "value": "Voltar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Включить режим фокусировки браузера" + "value": "Назад" } }, "th": { "stringUnit": { "state": "translated", - "value": "เข้าสู่โหมดโฟกัสเบราว์เซอร์" + "value": "ย้อนกลับ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı odak modunu aç" + "value": "Geri" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Увімкнути режим фокусування браузера" + "value": "Назад" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "进入浏览器专注模式" + "value": "后退" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "進入瀏覽器專注模式" + "value": "上一頁" } } } }, - "command.browserFocusMode.exit.title": { + "command.browserClearHistory.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إنهاء وضع تركيز المتصفح" + "value": "المتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Izađi iz načina fokusa preglednika" + "value": "Preglednik" } }, "da": { "stringUnit": { "state": "translated", - "value": "Afslut browser-fokustilstand" + "value": "Browser" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser-Fokusmodus beenden" + "value": "Browser" } }, "en": { "stringUnit": { "state": "translated", - "value": "Exit Browser Focus Mode" + "value": "Browser" } }, "es": { "stringUnit": { "state": "translated", - "value": "Salir del modo de enfoque del navegador" + "value": "Navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Quitter le mode focus du navigateur" + "value": "Navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Esci dalla modalità focus del browser" + "value": "Browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザフォーカスモードを終了" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ចេញពីរបៀបផ្ដោតអារម្មណ៍កម្មវិធីរុករក" + "value": "ブラウザ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 집중 모드 종료" + "value": "브라우저" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avslutt nettleser-fokusmodus" + "value": "Nettleser" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyłącz tryb skupienia przeglądarki" + "value": "Przeglądarka" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Sair do modo de foco do navegador" + "value": "Navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выйти из режима фокусировки браузера" + "value": "Браузер" } }, "th": { "stringUnit": { "state": "translated", - "value": "ออกจากโหมดโฟกัสเบราว์เซอร์" + "value": "เบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı odak modundan çık" + "value": "Tarayıcı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вийти з режиму фокусування браузера" + "value": "Браузер" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "退出浏览器专注模式" + "value": "浏览器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "退出瀏覽器專注模式" + "value": "瀏覽器" } } } }, - "command.browserForward.title": { + "command.browserClearHistory.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تقدم" + "value": "مسح سجل المتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Naprijed" + "value": "Obriši historiju preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Frem" + "value": "Ryd browserhistorik" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vor" + "value": "Browserverlauf löschen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Forward" + "value": "Clear Browser History" } }, "es": { "stringUnit": { "state": "translated", - "value": "Adelante" + "value": "Borrar historial del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Suivant" + "value": "Effacer l'historique du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Avanti" + "value": "Cancella cronologia browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "進む" + "value": "ブラウザ履歴をクリア" } }, "ko": { "stringUnit": { "state": "translated", - "value": "앞으로" + "value": "브라우저 기록 지우기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fremover" + "value": "Tøm nettleserhistorikk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Do przodu" + "value": "Wyczyść historię przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Avançar" + "value": "Limpar Histórico do Navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вперед" + "value": "Очистить историю браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "ไปข้างหน้า" + "value": "ล้างประวัติเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İleri" + "value": "Tarayıcı Geçmişini Temizle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вперед" + "value": "Очистити історію браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "前进" + "value": "清除浏览器历史记录" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "下一頁" + "value": "清除瀏覽記錄" } } } }, - "command.browserHideOmnibar.title": { + "command.browserConsole.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إخفاء شريط أومني للمتصفح" + "value": "عرض وحدة تحكم JavaScript" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sakrij omnibar preglednika" + "value": "Prikaži JavaScript konzolu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skjul browserens omnibar" + "value": "Vis JavaScript-konsol" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser-Omnibar ausblenden" + "value": "JavaScript-Konsole anzeigen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Hide Browser Omnibar" + "value": "Show JavaScript Console" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ocultar omnibar del navegador" + "value": "Mostrar consola de JavaScript" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Masquer l’omnibar du navigateur" + "value": "Afficher la console JavaScript" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nascondi omnibar del browser" + "value": "Mostra console JavaScript" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザのオムニバーを非表示" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Hide Browser Omnibar" + "value": "JavaScriptコンソールを表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 옴니바 숨기기" + "value": "JavaScript 콘솔 표시" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skjul nettleserens omnibar" + "value": "Vis JavaScript-konsoll" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ukryj omnibar przeglądarki" + "value": "Pokaż konsolę JavaScript" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ocultar omnibar do navegador" + "value": "Mostrar Console JavaScript" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Скрыть омнибар браузера" + "value": "Показать консоль JavaScript" } }, "th": { "stringUnit": { "state": "translated", - "value": "ซ่อนแถบออมนิของเบราว์เซอร์" + "value": "แสดงคอนโซล JavaScript" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı Omnibarını Gizle" + "value": "JavaScript Konsolunu Göster" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Приховати омнібар браузера" + "value": "Показати консоль JavaScript" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "隐藏浏览器全能栏" + "value": "显示 JavaScript 控制台" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "隱藏瀏覽器網址列" + "value": "顯示 JavaScript 主控台" } } } }, - "command.browserOpenDefault.title": { + "command.browserDuplicateRight.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فتح الصفحة الحالية في المتصفح الافتراضي" + "value": "تخطيط المتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori trenutnu stranicu u podrazumijevanom pregledniku" + "value": "Raspored preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn aktuel side i standardbrowser" + "value": "Browserlayout" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aktuelle Seite im Standardbrowser öffnen" + "value": "Browser-Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Open Current Page in Default Browser" + "value": "Browser Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir página actual en el navegador predeterminado" + "value": "Disposición del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir la page dans le navigateur par défaut" + "value": "Disposition du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri la pagina corrente nel browser predefinito" + "value": "Layout browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "現在のページをデフォルトブラウザで開く" + "value": "ブラウザレイアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "현재 페이지를 기본 브라우저에서 열기" + "value": "브라우저 레이아웃" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne gjeldende side i standard nettleser" + "value": "Nettleseroppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz bieżącą stronę w domyślnej przeglądarce" + "value": "Układ przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Página Atual no Navegador Padrão" + "value": "Layout do Navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть текущую страницу в браузере по умолчанию" + "value": "Макет браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดหน้าปัจจุบันในเบราว์เซอร์เริ่มต้น" + "value": "เค้าโครงเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Geçerli Sayfayı Varsayılan Tarayıcıda Aç" + "value": "Tarayıcı Düzeni" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити поточну сторінку у стандартному браузері" + "value": "Макет браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在默认浏览器中打开当前页面" + "value": "浏览器布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在預設瀏覽器中開啟目前頁面" + "value": "瀏覽器版面" } } } }, - "command.browserReload.title": { + "command.browserDuplicateRight.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تحميل الصفحة" + "value": "نسخ المتصفح إلى اليمين" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ponovo učitaj stranicu" + "value": "Dupliciraj preglednik desno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Genindlæs side" + "value": "Dupliker browser til højre" } }, "de": { "stringUnit": { "state": "translated", - "value": "Seite neu laden" + "value": "Browser nach rechts duplizieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Reload Page" + "value": "Duplicate Browser to the Right" } }, "es": { "stringUnit": { "state": "translated", - "value": "Recargar página" + "value": "Duplicar navegador a la derecha" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Recharger la page" + "value": "Dupliquer le navigateur à droite" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ricarica pagina" + "value": "Duplica browser a destra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ページを再読み込み" + "value": "ブラウザを右に複製" } }, "ko": { "stringUnit": { "state": "translated", - "value": "페이지 새로고침" + "value": "브라우저를 오른쪽으로 복제" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Last inn siden på nytt" + "value": "Dupliser nettleser til høyre" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Odśwież stronę" + "value": "Duplikuj przeglądarkę na prawo" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Recarregar Página" + "value": "Duplicar Navegador à Direita" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Перезагрузить страницу" + "value": "Дублировать браузер вправо" } }, "th": { "stringUnit": { "state": "translated", - "value": "โหลดหน้าใหม่" + "value": "ทำซ้ำเบราว์เซอร์ไปทางขวา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sayfayı Yeniden Yükle" + "value": "Tarayıcıyı Sağa Çoğalt" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перезавантажити сторінку" + "value": "Дублювати браузер праворуч" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重新加载页面" + "value": "向右复制浏览器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新載入頁面" + "value": "將瀏覽器複製到右側" } } } }, - "command.browserShowOmnibar.title": { + "command.browserFocusAddressBar.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إظهار شريط أومني للمتصفح" + "value": "التركيز على شريط العنوان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prikaži omnibar preglednika" + "value": "Fokusiraj adresnu traku" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vis browserens omnibar" + "value": "Fokuser adresselinjen" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser-Omnibar anzeigen" + "value": "Adressleiste fokussieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Show Browser Omnibar" + "value": "Focus Address Bar" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar omnibar del navegador" + "value": "Enfocar barra de direcciones" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher l’omnibar du navigateur" + "value": "Activer la barre d'adresse" } }, "it": { "stringUnit": { "state": "translated", - "value": "Mostra omnibar del browser" + "value": "Porta il focus sulla barra degli indirizzi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザのオムニバーを表示" + "value": "アドレスバーにフォーカス" } }, "km": { "stringUnit": { "state": "translated", - "value": "Show Browser Omnibar" + "value": "ផ្ដោតលើរបារអាសយដ្ឋាន" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 옴니바 보이기" + "value": "주소 표시줄 포커스" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vis nettleserens omnibar" + "value": "Fokuser adressefeltet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pokaż omnibar przeglądarki" + "value": "Ustaw fokus na pasku adresu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mostrar omnibar do navegador" + "value": "Focar na Barra de Endereço" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Показать омнибар браузера" + "value": "Перейти к адресной строке" } }, "th": { "stringUnit": { "state": "translated", - "value": "แสดงแถบออมนิของเบราว์เซอร์" + "value": "โฟกัสแถบที่อยู่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı Omnibarını Göster" + "value": "Adres Çubuğuna Odaklan" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Показати омнібар браузера" + "value": "Фокус на адресному рядку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示浏览器全能栏" + "value": "聚焦地址栏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示瀏覽器網址列" + "value": "聚焦網址列" } } } }, - "command.browserSplitDown.subtitle": { + "command.browserFocusMode.enter.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تخطيط المتصفح" + "value": "تفعيل وضع تركيز المتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Raspored preglednika" + "value": "Uđi u način fokusa preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Browserlayout" + "value": "Aktivér browser-fokustilstand" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser-Layout" + "value": "Browser-Fokusmodus aktivieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Browser Layout" + "value": "Enter Browser Focus Mode" } }, "es": { "stringUnit": { "state": "translated", - "value": "Disposición del navegador" + "value": "Activar modo de enfoque del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Disposition du navigateur" + "value": "Activer le mode focus du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Layout browser" + "value": "Attiva la modalità focus del browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザレイアウト" + "value": "ブラウザフォーカスモードに入る" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បើករបៀបផ្ដោតអារម្មណ៍កម្មវិធីរុករក" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 레이아웃" + "value": "브라우저 집중 모드 시작" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nettleseroppsett" + "value": "Aktiver nettleser-fokusmodus" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Układ przeglądarki" + "value": "Włącz tryb skupienia przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Layout do Navegador" + "value": "Ativar modo de foco do navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Макет браузера" + "value": "Включить режим фокусировки браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "เค้าโครงเบราว์เซอร์" + "value": "เข้าสู่โหมดโฟกัสเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı Düzeni" + "value": "Tarayıcı odak modunu aç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Макет браузера" + "value": "Увімкнути режим фокусування браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "浏览器布局" + "value": "进入浏览器专注模式" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瀏覽器版面" + "value": "進入瀏覽器專注模式" } } } }, - "command.browserSplitDown.title": { + "command.browserFocusMode.exit.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تقسيم المتصفح للأسفل" + "value": "إنهاء وضع تركيز المتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Podijeli preglednik dolje" + "value": "Izađi iz načina fokusa preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Opdel browser nedad" + "value": "Afslut browser-fokustilstand" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser nach unten teilen" + "value": "Browser-Fokusmodus beenden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Split Browser Down" + "value": "Exit Browser Focus Mode" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dividir navegador hacia abajo" + "value": "Salir del modo de enfoque del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Diviser le navigateur vers le bas" + "value": "Quitter le mode focus du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Dividi browser in basso" + "value": "Esci dalla modalità focus del browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザを下に分割" + "value": "ブラウザフォーカスモードを終了" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចេញពីរបៀបផ្ដោតអារម្មណ៍កម្មវិធីរុករក" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저를 아래로 분할" + "value": "브라우저 집중 모드 종료" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Del nettleser ned" + "value": "Avslutt nettleser-fokusmodus" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podziel przeglądarkę w dół" + "value": "Wyłącz tryb skupienia przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Dividir Navegador para Baixo" + "value": "Sair do modo de foco do navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разделить браузер вниз" + "value": "Выйти из режима фокусировки браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "แยกเบราว์เซอร์ลงล่าง" + "value": "ออกจากโหมดโฟกัสเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcıyı Aşağı Böl" + "value": "Tarayıcı odak modundan çık" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Розділити браузер вниз" + "value": "Вийти з режиму фокусування браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向下拆分浏览器" + "value": "退出浏览器专注模式" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "向下分割瀏覽器" + "value": "退出瀏覽器專注模式" } } } }, - "command.browserSplitRight.subtitle": { + "command.browserForward.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تخطيط المتصفح" + "value": "تقدم" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Raspored preglednika" + "value": "Naprijed" } }, "da": { "stringUnit": { "state": "translated", - "value": "Browserlayout" + "value": "Frem" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser-Layout" + "value": "Vor" } }, "en": { "stringUnit": { "state": "translated", - "value": "Browser Layout" + "value": "Forward" } }, "es": { "stringUnit": { "state": "translated", - "value": "Disposición del navegador" + "value": "Adelante" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Disposition du navigateur" + "value": "Suivant" } }, "it": { "stringUnit": { "state": "translated", - "value": "Layout browser" + "value": "Avanti" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザレイアウト" + "value": "進む" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 레이아웃" + "value": "앞으로" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nettleseroppsett" + "value": "Fremover" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Układ przeglądarki" + "value": "Do przodu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Layout do Navegador" + "value": "Avançar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Макет браузера" + "value": "Вперед" } }, "th": { "stringUnit": { "state": "translated", - "value": "เค้าโครงเบราว์เซอร์" + "value": "ไปข้างหน้า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı Düzeni" + "value": "İleri" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Макет браузера" + "value": "Вперед" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "浏览器布局" + "value": "前进" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瀏覽器版面" + "value": "下一頁" } } } }, - "command.browserSplitRight.title": { + "command.browserHideOmnibar.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تقسيم المتصفح لليمين" + "value": "إخفاء شريط أومني للمتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Podijeli preglednik desno" + "value": "Sakrij omnibar preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Opdel browser til højre" + "value": "Skjul browserens omnibar" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser nach rechts teilen" + "value": "Browser-Omnibar ausblenden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Split Browser Right" + "value": "Hide Browser Omnibar" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dividir navegador a la derecha" + "value": "Ocultar omnibar del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Diviser le navigateur à droite" + "value": "Masquer l’omnibar du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Dividi browser a destra" + "value": "Nascondi omnibar del browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザを右に分割" + "value": "ブラウザのオムニバーを非表示" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Hide Browser Omnibar" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저를 오른쪽으로 분할" + "value": "브라우저 옴니바 숨기기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Del nettleser til høyre" + "value": "Skjul nettleserens omnibar" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podziel przeglądarkę w prawo" + "value": "Ukryj omnibar przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Dividir Navegador à Direita" + "value": "Ocultar omnibar do navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разделить браузер вправо" + "value": "Скрыть омнибар браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "แยกเบราว์เซอร์ไปทางขวา" + "value": "ซ่อนแถบออมนิของเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcıyı Sağa Böl" + "value": "Tarayıcı Omnibarını Gizle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Розділити браузер праворуч" + "value": "Приховати омнібар браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向右拆分浏览器" + "value": "隐藏浏览器全能栏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "向右分割瀏覽器" + "value": "隱藏瀏覽器網址列" } } } }, - "command.browserToggleDevTools.title": { + "command.browserOpenDefault.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تبديل أدوات المطور" + "value": "فتح الصفحة الحالية في المتصفح الافتراضي" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prebaci razvojne alate" + "value": "Otvori trenutnu stranicu u podrazumijevanom pregledniku" } }, "da": { "stringUnit": { "state": "translated", - "value": "Slå udviklerværktøjer til/fra" + "value": "Åbn aktuel side i standardbrowser" } }, "de": { "stringUnit": { "state": "translated", - "value": "Entwicklerwerkzeuge ein-/ausblenden" + "value": "Aktuelle Seite im Standardbrowser öffnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Toggle Developer Tools" + "value": "Open Current Page in Default Browser" } }, "es": { "stringUnit": { "state": "translated", - "value": "Alternar herramientas de desarrollo" + "value": "Abrir página actual en el navegador predeterminado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher/masquer les outils de développement" + "value": "Ouvrir la page dans le navigateur par défaut" } }, "it": { "stringUnit": { "state": "translated", - "value": "Attiva/Disattiva Strumenti sviluppatore" + "value": "Apri la pagina corrente nel browser predefinito" } }, "ja": { "stringUnit": { "state": "translated", - "value": "デベロッパツールの切り替え" + "value": "現在のページをデフォルトブラウザで開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "개발자 도구 전환" + "value": "현재 페이지를 기본 브라우저에서 열기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slå utviklerverktøy av/på" + "value": "Åpne gjeldende side i standard nettleser" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przełącz narzędzia deweloperskie" + "value": "Otwórz bieżącą stronę w domyślnej przeglądarce" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Alternar Ferramentas do Desenvolvedor" + "value": "Abrir Página Atual no Navegador Padrão" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Инструменты разработчика" + "value": "Открыть текущую страницу в браузере по умолчанию" } }, "th": { "stringUnit": { "state": "translated", - "value": "สลับเครื่องมือนักพัฒนา" + "value": "เปิดหน้าปัจจุบันในเบราว์เซอร์เริ่มต้น" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Geliştirici Araçlarını Aç/Kapat" + "value": "Geçerli Sayfayı Varsayılan Tarayıcıda Aç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемкнути інструменти розробника" + "value": "Відкрити поточну сторінку у стандартному браузері" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "切换开发者工具" + "value": "在默认浏览器中打开当前页面" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切換開發者工具" + "value": "在預設瀏覽器中開啟目前頁面" } } } }, - "command.browserZoomIn.title": { + "command.browserReload.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تكبير" + "value": "إعادة تحميل الصفحة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Uvećaj" + "value": "Ponovo učitaj stranicu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Zoom ind" + "value": "Genindlæs side" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einzoomen" + "value": "Seite neu laden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Zoom In" + "value": "Reload Page" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ampliar" + "value": "Recargar página" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Zoom avant" + "value": "Recharger la page" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ingrandisci" + "value": "Ricarica pagina" } }, "ja": { "stringUnit": { "state": "translated", - "value": "拡大" + "value": "ページを再読み込み" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확대" + "value": "페이지 새로고침" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Zoom inn" + "value": "Last inn siden på nytt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Powiększ" + "value": "Odśwież stronę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aumentar Zoom" + "value": "Recarregar Página" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Увеличить" + "value": "Перезагрузить страницу" } }, "th": { "stringUnit": { "state": "translated", - "value": "ซูมเข้า" + "value": "โหลดหน้าใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yakınlaştır" + "value": "Sayfayı Yeniden Yükle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Збільшити" + "value": "Перезавантажити сторінку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "放大" + "value": "重新加载页面" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "放大" + "value": "重新載入頁面" } } } }, - "command.browserZoomOut.title": { + "command.browserShowOmnibar.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تصغير" + "value": "إظهار شريط أومني للمتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Umanji" + "value": "Prikaži omnibar preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Zoom ud" + "value": "Vis browserens omnibar" } }, "de": { "stringUnit": { "state": "translated", - "value": "Auszoomen" + "value": "Browser-Omnibar anzeigen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Zoom Out" + "value": "Show Browser Omnibar" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reducir" + "value": "Mostrar omnibar del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Zoom arrière" + "value": "Afficher l’omnibar du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riduci" + "value": "Mostra omnibar del browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "縮小" + "value": "ブラウザのオムニバーを表示" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Show Browser Omnibar" } }, "ko": { "stringUnit": { "state": "translated", - "value": "축소" + "value": "브라우저 옴니바 보이기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Zoom ut" + "value": "Vis nettleserens omnibar" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pomniejsz" + "value": "Pokaż omnibar przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Diminuir Zoom" + "value": "Mostrar omnibar do navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Уменьшить" + "value": "Показать омнибар браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "ซูมออก" + "value": "แสดงแถบออมนิของเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Uzaklaştır" + "value": "Tarayıcı Omnibarını Göster" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зменшити" + "value": "Показати омнібар браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "缩小" + "value": "显示浏览器全能栏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "縮小" + "value": "顯示瀏覽器網址列" } } } }, - "command.browserZoomReset.title": { + "command.browserSplitDown.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الحجم الفعلي" + "value": "تخطيط المتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Stvarna veličina" + "value": "Raspored preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Faktisk størrelse" + "value": "Browserlayout" } }, "de": { "stringUnit": { "state": "translated", - "value": "Originalgröße" + "value": "Browser-Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Actual Size" + "value": "Browser Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño real" + "value": "Disposición del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille réelle" + "value": "Disposition du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Dimensione reale" + "value": "Layout browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "実際のサイズ" + "value": "ブラウザレイアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "실제 크기" + "value": "브라우저 레이아웃" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Faktisk størrelse" + "value": "Nettleseroppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Rozmiar rzeczywisty" + "value": "Układ przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tamanho Real" + "value": "Layout do Navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Фактический размер" + "value": "Макет браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "ขนาดจริง" + "value": "เค้าโครงเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gerçek Boyut" + "value": "Tarayıcı Düzeni" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Фактичний розмір" + "value": "Макет браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "实际大小" + "value": "浏览器布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "實際大小" + "value": "瀏覽器版面" } } } }, - "command.canvas.subtitle": { + "command.browserSplitDown.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اللوحة" + "value": "تقسيم المتصفح للأسفل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Platno" + "value": "Podijeli preglednik dolje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Lærred" + "value": "Opdel browser nedad" } }, "de": { "stringUnit": { "state": "translated", - "value": "Canvas" + "value": "Browser nach unten teilen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Canvas" + "value": "Split Browser Down" } }, "es": { "stringUnit": { "state": "translated", - "value": "Lienzo" + "value": "Dividir navegador hacia abajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Canevas" + "value": "Diviser le navigateur vers le bas" } }, "it": { "stringUnit": { "state": "translated", - "value": "Canvas" + "value": "Dividi browser in basso" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンバス" + "value": "ブラウザを下に分割" } }, "ko": { "stringUnit": { "state": "translated", - "value": "캔버스" + "value": "브라우저를 아래로 분할" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lerret" + "value": "Del nettleser ned" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kanwa" + "value": "Podziel przeglądarkę w dół" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Canvas" + "value": "Dividir Navegador para Baixo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Холст" + "value": "Разделить браузер вниз" } }, "th": { "stringUnit": { "state": "translated", - "value": "แคนวาส" + "value": "แยกเบราว์เซอร์ลงล่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kanvas" + "value": "Tarayıcıyı Aşağı Böl" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Полотно" + "value": "Розділити браузер вниз" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "画布" + "value": "向下拆分浏览器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "畫布" + "value": "向下分割瀏覽器" } } } }, - "command.checkForUpdates.subtitle": { + "command.browserSplitRight.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عام" + "value": "تخطيط المتصفح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Globalno" + "value": "Raspored preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Browserlayout" } }, "de": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Browser-Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Browser Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Disposición del navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Général" + "value": "Disposition du navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Globale" + "value": "Layout browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グローバル" + "value": "ブラウザレイアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전역" + "value": "브라우저 레이아웃" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Nettleseroppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Globalne" + "value": "Układ przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Layout do Navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Глобальные" + "value": "Макет браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทั่วไป" + "value": "เค้าโครงเบราว์เซอร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel" + "value": "Tarayıcı Düzeni" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Глобальна" + "value": "Макет браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "全局" + "value": "浏览器布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "全域" + "value": "瀏覽器版面" } } } }, - "command.checkForUpdates.title": { + "command.browserSplitRight.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "التحقق من التحديثات" + "value": "تقسيم المتصفح لليمين" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Provjeri ažuriranja" + "value": "Podijeli preglednik desno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Søg efter opdateringer" + "value": "Opdel browser til højre" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nach Updates suchen" + "value": "Browser nach rechts teilen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Check for Updates" + "value": "Split Browser Right" } }, "es": { "stringUnit": { "state": "translated", - "value": "Buscar actualizaciones" + "value": "Dividir navegador a la derecha" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Rechercher des mises à jour" + "value": "Diviser le navigateur à droite" } }, "it": { "stringUnit": { "state": "translated", - "value": "Verifica aggiornamenti" + "value": "Dividi browser a destra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップデートを確認" + "value": "ブラウザを右に分割" } }, "ko": { "stringUnit": { "state": "translated", - "value": "업데이트 확인" + "value": "브라우저를 오른쪽으로 분할" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Se etter oppdateringer" + "value": "Del nettleser til høyre" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Sprawdź aktualizacje" + "value": "Podziel przeglądarkę w prawo" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Buscar Atualizações" + "value": "Dividir Navegador à Direita" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Проверить обновления" + "value": "Разделить браузер вправо" } }, "th": { "stringUnit": { "state": "translated", - "value": "ตรวจหาอัปเดต" + "value": "แยกเบราว์เซอร์ไปทางขวา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Güncellemeleri Denetle" + "value": "Tarayıcıyı Sağa Böl" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перевірити оновлення" + "value": "Розділити браузер праворуч" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "检查更新" + "value": "向右拆分浏览器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "檢查更新" + "value": "向右分割瀏覽器" } } } }, - "command.clearTabName.title": { + "command.browserToggleDevTools.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مسح اسم اللسان" + "value": "تبديل أدوات المطور" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obriši naziv taba" + "value": "Prebaci razvojne alate" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ryd fanenavn" + "value": "Slå udviklerværktøjer til/fra" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab-Name löschen" + "value": "Entwicklerwerkzeuge ein-/ausblenden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Clear Tab Name" + "value": "Toggle Developer Tools" } }, "es": { "stringUnit": { "state": "translated", - "value": "Borrar nombre de pestaña" + "value": "Alternar herramientas de desarrollo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Effacer le nom de l'onglet" + "value": "Afficher/masquer les outils de développement" } }, "it": { "stringUnit": { "state": "translated", - "value": "Cancella nome scheda" + "value": "Attiva/Disattiva Strumenti sviluppatore" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ名をクリア" + "value": "デベロッパツールの切り替え" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 이름 지우기" + "value": "개발자 도구 전환" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fjern fanenavn" + "value": "Slå utviklerverktøy av/på" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyczyść nazwę karty" + "value": "Przełącz narzędzia deweloperskie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Limpar Nome da Aba" + "value": "Alternar Ferramentas do Desenvolvedor" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Очистить имя вкладки" + "value": "Инструменты разработчика" } }, "th": { "stringUnit": { "state": "translated", - "value": "ล้างชื่อแท็บ" + "value": "สลับเครื่องมือนักพัฒนา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme Adını Temizle" + "value": "Geliştirici Araçlarını Aç/Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скинути назву вкладки" + "value": "Перемкнути інструменти розробника" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "清除标签页名称" + "value": "切换开发者工具" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "清除標籤頁名稱" - } - } - } - }, - "command.clearWorkspaceDescription.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Clear Workspace Description" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースの説明を消去" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "워크스페이스 설명 지우기" + "value": "切換開發者工具" } } } }, - "command.clearWorkspaceName.title": { + "command.browserZoomIn.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مسح اسم مساحة العمل" + "value": "تكبير" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obriši naziv radnog prostora" + "value": "Uvećaj" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ryd arbejdsområdenavn" + "value": "Zoom ind" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereichsname löschen" + "value": "Einzoomen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Clear Workspace Name" + "value": "Zoom In" } }, "es": { "stringUnit": { "state": "translated", - "value": "Borrar nombre del espacio de trabajo" + "value": "Ampliar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Effacer le nom de l'espace de travail" + "value": "Zoom avant" } }, "it": { "stringUnit": { "state": "translated", - "value": "Cancella nome area di lavoro" + "value": "Ingrandisci" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース名をクリア" + "value": "拡大" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름 지우기" + "value": "확대" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fjern arbeidsområdenavn" + "value": "Zoom inn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyczyść nazwę przestrzeni roboczej" + "value": "Powiększ" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Limpar Nome da Área de Trabalho" + "value": "Aumentar Zoom" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Очистить имя рабочего пространства" + "value": "Увеличить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ล้างชื่อเวิร์กสเปซ" + "value": "ซูมเข้า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı Adını Temizle" + "value": "Yakınlaştır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скинути назву робочої області" + "value": "Збільшити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "清除工作区名称" + "value": "放大" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "清除工作區名稱" + "value": "放大" } } } }, - "command.closeTab.subtitle": { + "command.browserZoomOut.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لسان" + "value": "تصغير" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Umanji" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Zoom ud" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Auszoomen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Zoom Out" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pestaña" + "value": "Reducir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Onglet" + "value": "Zoom arrière" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scheda" + "value": "Riduci" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ" + "value": "縮小" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭" + "value": "축소" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Zoom ut" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Karta" + "value": "Pomniejsz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aba" + "value": "Diminuir Zoom" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Уменьшить" } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บ" + "value": "ซูมออก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme" + "value": "Uzaklaştır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Зменшити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页" + "value": "缩小" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁" + "value": "縮小" } } } }, - "command.closeTab.title": { + "command.browserZoomReset.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق اللسان" + "value": "الحجم الفعلي" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori tab" + "value": "Stvarna veličina" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk fane" + "value": "Faktisk størrelse" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab schließen" + "value": "Originalgröße" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Tab" + "value": "Actual Size" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar pestaña" + "value": "Tamaño real" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer l'onglet" + "value": "Taille réelle" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi scheda" + "value": "Dimensione reale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブを閉じる" + "value": "実際のサイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 닫기" + "value": "실제 크기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk fane" + "value": "Faktisk størrelse" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij kartę" + "value": "Rozmiar rzeczywisty" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Aba" + "value": "Tamanho Real" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть вкладку" + "value": "Фактический размер" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดแท็บ" + "value": "ขนาดจริง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Kapat" + "value": "Gerçek Boyut" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити вкладку" + "value": "Фактичний розмір" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭标签页" + "value": "实际大小" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉標籤頁" + "value": "實際大小" } } } }, - "command.closeWindow.subtitle": { + "command.canvas.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نافذة" + "value": "اللوحة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prozor" + "value": "Platno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vindue" + "value": "Lærred" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fenster" + "value": "Canvas" } }, "en": { "stringUnit": { "state": "translated", - "value": "Window" + "value": "Canvas" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana" + "value": "Lienzo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fenêtre" + "value": "Canevas" } }, "it": { "stringUnit": { "state": "translated", - "value": "Finestra" + "value": "Canvas" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウインドウ" + "value": "キャンバス" } }, "ko": { "stringUnit": { "state": "translated", - "value": "윈도우" + "value": "캔버스" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vindu" + "value": "Lerret" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Okno" + "value": "Kanwa" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Janela" + "value": "Canvas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Окно" + "value": "Холст" } }, "th": { "stringUnit": { "state": "translated", - "value": "หน้าต่าง" + "value": "แคนวาส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pencere" + "value": "Kanvas" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вікно" + "value": "Полотно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "窗口" + "value": "画布" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "視窗" + "value": "畫布" } } } }, - "command.closeWindow.title": { + "command.checkForUpdates.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق النافذة" + "value": "عام" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori prozor" + "value": "Globalno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk vindue" + "value": "Globalt" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fenster schließen" + "value": "Global" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Window" + "value": "Global" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar ventana" + "value": "Global" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer la fenêtre" + "value": "Général" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi finestra" + "value": "Globale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウインドウを閉じる" + "value": "グローバル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "윈도우 닫기" + "value": "전역" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk vindu" + "value": "Globalt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij okno" + "value": "Globalne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Janela" + "value": "Global" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть окно" + "value": "Глобальные" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดหน้าต่าง" + "value": "ทั่วไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pencereyi Kapat" + "value": "Genel" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити вікно" + "value": "Глобальна" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭窗口" + "value": "全局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉視窗" + "value": "全域" } } } }, - "command.closeWorkspace.subtitle": { + "command.checkForUpdates.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل" + "value": "التحقق من التحديثات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor" + "value": "Provjeri ažuriranja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområde" + "value": "Søg efter opdateringer" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich" + "value": "Nach Updates suchen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace" + "value": "Check for Updates" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo" + "value": "Buscar actualizaciones" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail" + "value": "Rechercher des mises à jour" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro" + "value": "Verifica aggiornamenti" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "アップデートを確認" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간" + "value": "업데이트 확인" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområde" + "value": "Se etter oppdateringer" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza" + "value": "Sprawdź aktualizacje" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho" + "value": "Buscar Atualizações" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство" + "value": "Проверить обновления" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ" + "value": "ตรวจหาอัปเดต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı" + "value": "Güncellemeleri Denetle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область" + "value": "Перевірити оновлення" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "检查更新" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區" + "value": "檢查更新" } } } }, - "command.closeWorkspace.title": { + "command.clearTabName.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحة العمل" + "value": "مسح اسم اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori radni prostor" + "value": "Obriši naziv taba" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk arbejdsområde" + "value": "Ryd fanenavn" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich schließen" + "value": "Tab-Name löschen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Workspace" + "value": "Clear Tab Name" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar espacio de trabajo" + "value": "Borrar nombre de pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer l'espace de travail" + "value": "Effacer le nom de l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi area di lavoro" + "value": "Cancella nome scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを閉じる" + "value": "タブ名をクリア" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 닫기" + "value": "탭 이름 지우기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk arbeidsområde" + "value": "Fjern fanenavn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij przestrzeń roboczą" + "value": "Wyczyść nazwę karty" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Área de Trabalho" + "value": "Limpar Nome da Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть рабочее пространство" + "value": "Очистить имя вкладки" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซ" + "value": "ล้างชื่อแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Kapat" + "value": "Sekme Adını Temizle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити робочу область" + "value": "Скинути назву вкладки" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭工作区" + "value": "清除标签页名称" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉工作區" + "value": "清除標籤頁名稱" } } } }, - "command.cloudVM.advanced.title": { + "command.clearWorkspaceDescription.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Advanced" + "value": "Clear Workspace Description" } }, "ja": { "stringUnit": { "state": "translated", - "value": "詳細" - } - } - } - }, - "command.cloudVM.current.missing.message": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Select a Cloud VM workspace first, then retry this command." + "value": "ワークスペースの説明を消去" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VM ワークスペースを選択してから、もう一度実行してください。" + "value": "워크스페이스 설명 지우기" } } } }, - "command.cloudVM.current.missing.title": { + "command.clearWorkspaceName.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "No Cloud VM Selected" + "value": "مسح اسم مساحة العمل" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "Cloud VM が選択されていません" + "value": "Obriši naziv radnog prostora" } - } - } - }, - "command.cloudVM.failed.action.exit": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Open a terminal and run `cmux auth status`, `cmux vm ls`, then `cmux vm new`. If you hit the active VM limit, delete one with `cmux vm rm <id>` and retry." + "value": "Ryd arbejdsområdenavn" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "ターミナルを開いて `cmux auth status`、`cmux vm ls`、`cmux vm new` を実行してください。アクティブな VM 数の上限に達している場合は `cmux vm rm <id>` で削除してから再試行してください。" + "value": "Arbeitsbereichsname löschen" } - } - } - }, - "command.cloudVM.failed.action.launch": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Reload cmux so the bundled CLI is available, then try again. If it still fails, run `cmux vm new` in a terminal and send us the output." + "value": "Clear Workspace Name" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "バンドルされた CLI を使えるように cmux を再読み込みしてから再試行してください。それでも失敗する場合は、ターミナルで `cmux vm new` を実行して出力を送ってください。" - } - } - } - }, - "command.cloudVM.failed.action.missingCLI": { - "extractionState": "manual", - "localizations": { - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Install or reload a fresh cmux build, then try Start Cloud VM again. You can also run `cmux vm new` in a terminal to see the full error." + "value": "Borrar nombre del espacio de trabajo" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "新しい cmux ビルドをインストールまたは再読み込みしてから、Start Cloud VM をもう一度試してください。ターミナルで `cmux vm new` を実行すると完全なエラーも確認できます。" + "value": "Effacer le nom de l'espace de travail" } - } - } - }, - "command.cloudVM.failed.details": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Details:" + "value": "Cancella nome area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "詳細:" + "value": "ワークスペース名をクリア" } - } - } - }, - "command.cloudVM.failed.details.hidden": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Additional technical details are available in logs." + "value": "작업 공간 이름 지우기" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "追加の技術的な詳細はログで確認できます。" + "value": "Fjern arbeidsområdenavn" } - } - } - }, - "command.cloudVM.failed.exit": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "cmux vm new exited with status %d." + "value": "Wyczyść nazwę przestrzeni roboczej" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "cmux vm new がステータス %d で終了しました。" + "value": "Limpar Nome da Área de Trabalho" } - } - } - }, - "command.cloudVM.failed.launch": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "cmux vm new could not be launched." + "value": "Очистить имя рабочего пространства" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "cmux vm new を起動できませんでした。" + "value": "ล้างชื่อเวิร์กสเปซ" } - } - } - }, - "command.cloudVM.failed.missingCLI": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "The bundled cmux CLI is missing from this app build." + "value": "Çalışma Alanı Adını Temizle" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "このアプリビルドにはバンドルされた cmux CLI がありません。" + "value": "Скинути назву робочої області" } - } - } - }, - "command.cloudVM.failed.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Couldn't Start Cloud VM" + "value": "清除工作区名称" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VMを開始できませんでした" + "value": "清除工作區名稱" } } } }, - "command.cloudVM.failed.whatToTry": { + "command.closeTab.subtitle": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "What to try:" + "value": "لسان" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "試すこと:" + "value": "Tab" } - } - } - }, - "command.cloudVM.fork.result.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Cloud VM Forked" + "value": "Fane" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud VM をフォークしました" + "value": "Tab" } - } - } - }, - "command.cloudVM.fork.title": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Fork Cloud VM" + "value": "Tab" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM をフォーク" - } - } - } - }, - "command.cloudVM.handoff.result.title": { - "extractionState": "manual", - "localizations": { - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud VM Handoff" + "value": "Pestaña" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VM ハンドオフ" + "value": "Onglet" } - } - } - }, - "command.cloudVM.handoff.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Agent Handoff" + "value": "Scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントハンドオフ" + "value": "タブ" } - } - } - }, - "command.cloudVM.open.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Open Cloud VM" + "value": "탭" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "Cloud VM を開く" + "value": "Fane" } - } - } - }, - "command.cloudVM.ports.result.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Cloud VM Ports" + "value": "Karta" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cloud VM ポート" + "value": "Aba" } - } - } - }, - "command.cloudVM.ports.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Ports" + "value": "Вкладка" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "ポート" + "value": "แท็บ" } - } - } - }, - "command.cloudVM.promoteTemplate.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Promote to Template" + "value": "Sekme" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "テンプレートに昇格" + "value": "Вкладка" } - } - } - }, - "command.cloudVM.restore.prompt.message": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Paste a checkpoint or snapshot id to restore." + "value": "标签页" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "復元するチェックポイントまたはスナップショット ID を貼り付けてください。" + "value": "標籤頁" } } } }, - "command.cloudVM.restore.prompt.placeholder": { + "command.closeTab.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "snapshot-id" + "value": "إغلاق اللسان" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "snapshot-id" + "value": "Zatvori tab" } - } - } - }, - "command.cloudVM.restore.prompt.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Restore Cloud VM" + "value": "Luk fane" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud VM を復元" + "value": "Tab schließen" } - } - } - }, - "command.cloudVM.restore.result.title": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Cloud VM Restored" + "value": "Close Tab" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud VM を復元しました" + "value": "Cerrar pestaña" } - } - } - }, - "command.cloudVM.restore.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Restore Checkpoint..." + "value": "Fermer l'onglet" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "チェックポイントを復元..." + "value": "Chiudi scheda" } - } - } - }, - "command.cloudVM.result.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VM" + "value": "タブを閉じる" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VM" + "value": "탭 닫기" } - } - } - }, - "command.cloudVM.snapshot.result.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "Cloud VM Checkpoint" + "value": "Lukk fane" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "Cloud VM チェックポイント" - } - } - } - }, - "command.cloudVM.snapshot.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Checkpoint Cloud VM" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM のチェックポイントを作成" - } - } - } - }, - "command.cloudVM.status.result.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM Status" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM ステータス" - } - } - } - }, - "command.cloudVM.status.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Status" + "value": "Zamknij kartę" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ステータス" - } - } - } - }, - "command.cloudVM.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cloud" + "value": "Fechar Aba" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "クラウド" - } - } - } - }, - "command.cloudVM.template.result.title": { - "extractionState": "manual", - "localizations": { - "en": { + "ru": { "stringUnit": { "state": "translated", - "value": "Cloud VM Template" + "value": "Закрыть вкладку" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM テンプレート" - } - } - } - }, - "command.cloudVM.title": { - "extractionState": "manual", - "localizations": { - "en": { + "th": { "stringUnit": { "state": "translated", - "value": "Open Base" + "value": "ปิดแท็บ" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ベースを開く" - } - } - } - }, - "command.cloudVM.tools.result.title": { - "extractionState": "manual", - "localizations": { - "en": { + "tr": { "stringUnit": { "state": "translated", - "value": "Cloud VM Tools" + "value": "Sekmeyi Kapat" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud VM ツール" - } - } - } - }, - "command.cloudVM.tools.title": { - "extractionState": "manual", - "localizations": { - "en": { + "uk": { "stringUnit": { "state": "translated", - "value": "Inspect Tools" + "value": "Закрити вкладку" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ツールを検査" - } - } - } - }, - "command.cmuxConfig.builtInSubtitle": { - "extractionState": "manual", - "localizations": { - "en": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux" + "value": "关闭标签页" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux" + "value": "關閉標籤頁" } } } }, - "command.cmuxConfig.customTitle": { + "command.closeWindow.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مخصص: %@" + "value": "نافذة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prilagođeno: %@" + "value": "Prozor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Brugerdefineret: %@" + "value": "Vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benutzerdefiniert: %@" + "value": "Fenster" } }, "en": { "stringUnit": { "state": "translated", - "value": "Custom: %@" + "value": "Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Personalizado: %@" + "value": "Ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Personnalisé : %@" + "value": "Fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Personalizzato: %@" + "value": "Finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カスタム: %@" + "value": "ウインドウ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자 정의: %@" + "value": "윈도우" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Egendefinert: %@" + "value": "Vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Niestandardowe: %@" + "value": "Okno" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Personalizado: %@" + "value": "Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Пользовательское: %@" + "value": "Окно" } }, "th": { "stringUnit": { "state": "translated", - "value": "กำหนดเอง: %@" + "value": "หน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel: %@" + "value": "Pencere" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Власне: %@" + "value": "Вікно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "自定义: %@" + "value": "窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "自訂: %@" + "value": "視窗" } } } }, - "command.cmuxConfig.defaultClaudeCodeTitle": { + "command.closeWindow.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Claude Code" + "value": "إغلاق النافذة" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Claude Code" - } - } - } - }, - "command.cmuxConfig.defaultCodexTitle": { - "extractionState": "manual", - "localizations": { - "en": { + "bs": { "stringUnit": { "state": "translated", - "value": "Codex" + "value": "Zatvori prozor" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Codex" - } - } - } - }, - "command.cmuxConfig.defaultOpenCodeTitle": { - "extractionState": "manual", - "localizations": { - "en": { + "da": { "stringUnit": { "state": "translated", - "value": "OpenCode" + "value": "Luk vindue" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "OpenCode" - } - } - } - }, - "command.cmuxConfig.issue.newWorkspaceActionNotFound.detail": { - "extractionState": "manual", - "localizations": { - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "%@ references missing action '%@'" + "value": "Fenster schließen" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@ は存在しないアクション '%@' を参照しています" - } - } - } - }, - "command.cmuxConfig.issue.newWorkspaceActionRequiresWorkspaceCommand.detail": { - "extractionState": "manual", - "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ must reference a workspace command action" + "value": "Close Window" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@ はワークスペースコマンドアクションを参照する必要があります" - } - } - } - }, - "command.cmuxConfig.issue.newWorkspaceCommandNotFound.detail": { - "extractionState": "manual", - "localizations": { - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ references missing command '%@'" + "value": "Cerrar ventana" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ は存在しないコマンド '%@' を参照しています" + "value": "Fermer la fenêtre" } - } - } - }, - "command.cmuxConfig.issue.newWorkspaceCommandRequiresWorkspace.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "%@ '%@' must reference a workspace command" + "value": "Chiudi finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ '%@' はワークスペースコマンドを参照する必要があります" + "value": "ウインドウを閉じる" } - } - } - }, - "command.cmuxConfig.issue.schemaError.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "%@" + "value": "윈도우 닫기" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "%@" + "value": "Lukk vindu" } - } - } - }, - "command.cmuxConfig.issue.schemaError.fallback": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Invalid cmux.json" + "value": "Zamknij okno" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "無効な cmux.json" + "value": "Fechar Janela" } - } - } - }, - "command.cmuxConfig.issue.schemaError.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "cmux.json Schema Error" + "value": "Закрыть окно" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "cmux.json スキーマエラー" + "value": "ปิดหน้าต่าง" } - } - } - }, - "command.cmuxConfig.issue.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "%@: %@" + "value": "Pencereyi Kapat" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "%@: %@" + "value": "Закрити вікно" } - } - } - }, - "command.cmuxConfig.issue.warning.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux.json Configuration Warning" + "value": "关闭窗口" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux.json 設定警告" + "value": "關閉視窗" } } } }, - "command.cmuxConfig.subtitle": { + "command.closeWorkspace.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "Робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux.json" + "value": "工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux.json" - } - } - } - }, - "command.copyPaneID.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Copy Pane ID" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ペインIDをコピー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "패널 ID 복사" + "value": "工作區" } } } }, - "command.copyPaneLink.title": { + "command.closeWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نسخ رابط الجزء" + "value": "إغلاق مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kopiraj link panela" + "value": "Zatvori radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kopiér panellink" + "value": "Luk arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fensterbereich-Link kopieren" + "value": "Arbeitsbereich schließen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Copy Pane Link" + "value": "Close Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copiar enlace del panel" + "value": "Cerrar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copier le lien du volet" + "value": "Fermer l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Copia link riquadro" + "value": "Chiudi area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペインリンクをコピー" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ចម្លងតំណភ្ជាប់ផ្ទាំង" + "value": "ワークスペースを閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "패널 링크 복사" + "value": "작업 공간 닫기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kopier panellenke" + "value": "Lukk arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kopiuj link panelu" + "value": "Zamknij przestrzeń roboczą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Copiar link do painel" + "value": "Fechar Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Копировать ссылку на панель" + "value": "Закрыть рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "คัดลอกลิงก์พาเนล" + "value": "ปิดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bölme bağlantısını kopyala" + "value": "Çalışma Alanını Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Копіювати посилання на панель" + "value": "Закрити робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "复制窗格链接" + "value": "关闭工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "複製窗格連結" + "value": "關閉工作區" } } } }, - "command.copySurfaceID.title": { + "command.cloudVM.advanced.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Surface ID" + "value": "Advanced" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サーフェスIDをコピー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "서피스 ID 복사" + "value": "詳細" } } } }, - "command.copySurfaceLink.title": { + "command.cloudVM.current.missing.message": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "نسخ رابط السطح" + "value": "Select a Cloud VM workspace first, then retry this command." } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Kopiraj link površine" + "value": "Cloud VM ワークスペースを選択してから、もう一度実行してください。" } - }, - "da": { + } + } + }, + "command.cloudVM.current.missing.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Kopiér overfladelink" + "value": "No Cloud VM Selected" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Oberflächen-Link kopieren" + "value": "Cloud VM が選択されていません" } - }, + } + } + }, + "command.cloudVM.failed.action.exit": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Surface Link" + "value": "Open a terminal and run `cmux auth status`, `cmux vm ls`, then `cmux vm new`. If you hit the active VM limit, delete one with `cmux vm rm <id>` and retry." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Copiar enlace de superficie" + "value": "ターミナルを開いて `cmux auth status`、`cmux vm ls`、`cmux vm new` を実行してください。アクティブな VM 数の上限に達している場合は `cmux vm rm <id>` で削除してから再試行してください。" } - }, - "fr": { - "stringUnit": { + } + } + }, + "command.cloudVM.failed.action.launch": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { "state": "translated", - "value": "Copier le lien de la surface" + "value": "Reload cmux so the bundled CLI is available, then try again. If it still fails, run `cmux vm new` in a terminal and send us the output." } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Copia link superficie" + "value": "バンドルされた CLI を使えるように cmux を再読み込みしてから再試行してください。それでも失敗する場合は、ターミナルで `cmux vm new` を実行して出力を送ってください。" + } + } + } + }, + "command.cloudVM.failed.action.missingCLI": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Install or reload a fresh cmux build, then try Start Cloud VM again. You can also run `cmux vm new` in a terminal to see the full error." } }, "ja": { "stringUnit": { "state": "translated", - "value": "サーフェスリンクをコピー" + "value": "新しい cmux ビルドをインストールまたは再読み込みしてから、Start Cloud VM をもう一度試してください。ターミナルで `cmux vm new` を実行すると完全なエラーも確認できます。" } - }, - "km": { + } + } + }, + "command.cloudVM.failed.details": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "ចម្លងតំណភ្ជាប់ផ្ទៃ" + "value": "Details:" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "서피스 링크 복사" + "value": "詳細:" } - }, - "nb": { + } + } + }, + "command.cloudVM.failed.details.hidden": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Kopier overflatelenke" + "value": "Additional technical details are available in logs." } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Kopiuj link powierzchni" + "value": "追加の技術的な詳細はログで確認できます。" } - }, - "pt-BR": { + } + } + }, + "command.cloudVM.failed.exit": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Copiar link da superfície" + "value": "cmux vm new exited with status %d." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Копировать ссылку на поверхность" + "value": "cmux vm new がステータス %d で終了しました。" } - }, - "th": { + } + } + }, + "command.cloudVM.failed.launch": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "คัดลอกลิงก์เซอร์เฟซ" + "value": "cmux vm new could not be launched." } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Yüzey bağlantısını kopyala" + "value": "cmux vm new を起動できませんでした。" } - }, - "uk": { + } + } + }, + "command.cloudVM.failed.missingCLI": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Копіювати посилання на поверхню" + "value": "The bundled cmux CLI is missing from this app build." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "复制界面链接" + "value": "このアプリビルドにはバンドルされた cmux CLI がありません。" + } + } + } + }, + "command.cloudVM.failed.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Couldn't Start Cloud VM" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "複製介面連結" + "value": "Cloud VMを開始できませんでした" } } } }, - "command.copyWorkspaceIDAndRef.title": { + "command.cloudVM.failed.whatToTry": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Workspace ID and Ref" + "value": "What to try:" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースIDと参照をコピー" + "value": "試すこと:" + } + } + } + }, + "command.cloudVM.fork.result.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM Forked" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "워크스페이스 ID 및 참조 복사" + "value": "Cloud VM をフォークしました" } } } }, - "command.copyWorkspaceLink.title": { + "command.cloudVM.fork.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "نسخ رابط مساحة العمل" + "value": "Fork Cloud VM" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Kopiraj link radnog prostora" + "value": "Cloud VM をフォーク" } - }, - "da": { + } + } + }, + "command.cloudVM.handoff.result.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Kopiér arbejdsområdelink" + "value": "Cloud VM Handoff" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich-Link kopieren" + "value": "Cloud VM ハンドオフ" } - }, + } + } + }, + "command.cloudVM.handoff.title": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Workspace Link" + "value": "Agent Handoff" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Copiar enlace de espacio de trabajo" + "value": "エージェントハンドオフ" } - }, - "fr": { + } + } + }, + "command.cloudVM.open.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Copier le lien de l’espace de travail" + "value": "Open Cloud VM" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Copia link area di lavoro" + "value": "Cloud VM を開く" + } + } + } + }, + "command.cloudVM.ports.result.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM Ports" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースリンクをコピー" + "value": "Cloud VM ポート" } - }, - "km": { + } + } + }, + "command.cloudVM.ports.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "ចម្លងតំណភ្ជាប់កន្លែងធ្វើការ" + "value": "Ports" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "워크스페이스 링크 복사" + "value": "ポート" } - }, - "nb": { + } + } + }, + "command.cloudVM.promoteTemplate.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Kopier arbeidsområdelenke" + "value": "Promote to Template" } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Kopiuj link obszaru roboczego" + "value": "テンプレートに昇格" } - }, - "pt-BR": { + } + } + }, + "command.cloudVM.restore.prompt.message": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Copiar link do espaço de trabalho" + "value": "Paste a checkpoint or snapshot id to restore." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Копировать ссылку на рабочую область" + "value": "復元するチェックポイントまたはスナップショット ID を貼り付けてください。" } - }, - "th": { + } + } + }, + "command.cloudVM.restore.prompt.placeholder": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "คัดลอกลิงก์เวิร์กสเปซ" + "value": "snapshot-id" } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Çalışma alanı bağlantısını kopyala" + "value": "snapshot-id" } - }, - "uk": { + } + } + }, + "command.cloudVM.restore.prompt.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Копіювати посилання на робочий простір" + "value": "Restore Cloud VM" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "复制工作区链接" + "value": "Cloud VM を復元" + } + } + } + }, + "command.cloudVM.restore.result.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM Restored" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "複製工作區連結" + "value": "Cloud VM を復元しました" } } } }, - "command.disableBrowser.title": { + "command.cloudVM.restore.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disable cmux Browser" + "value": "Restore Checkpoint..." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmuxブラウザを無効にする" + "value": "チェックポイントを復元..." } } } }, - "command.disableMatchTerminalBackground.title": { + "command.cloudVM.result.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disable Match Terminal Background" + "value": "Cloud VM" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルの背景に合わせる設定を無効にする" + "value": "Cloud VM" } } } }, - "command.disableMinimalMode.title": { + "command.cloudVM.snapshot.result.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disable Minimal Mode" + "value": "Cloud VM Checkpoint" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ミニマルモードを無効にする" + "value": "Cloud VM チェックポイント" + } + } + } + }, + "command.cloudVM.snapshot.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Checkpoint Cloud VM" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "미니멀 모드 비활성화" + "value": "Cloud VM のチェックポイントを作成" + } + } + } + }, + "command.cloudVM.status.result.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud VM Status" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Вимкнути мінімальний режим" + "value": "Cloud VM ステータス" } } } }, - "command.editWorkspaceDescription.title": { + "command.cloudVM.status.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Edit Workspace Description…" + "value": "Status" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースの説明を編集…" + "value": "ステータス" + } + } + } + }, + "command.cloudVM.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "워크스페이스 설명 편집…" + "value": "クラウド" } } } }, - "command.enableBrowser.title": { + "command.cloudVM.template.result.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enable cmux Browser" + "value": "Cloud VM Template" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmuxブラウザを有効にする" + "value": "Cloud VM テンプレート" } } } }, - "command.enableMatchTerminalBackground.title": { + "command.cloudVM.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enable Match Terminal Background" + "value": "Open Base" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルの背景に合わせる" + "value": "ベースを開く" } } } }, - "command.enableMinimalMode.title": { + "command.cloudVM.tools.result.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enable Minimal Mode" + "value": "Cloud VM Tools" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ミニマルモードを有効にする" + "value": "Cloud VM ツール" + } + } + } + }, + "command.cloudVM.tools.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Inspect Tools" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "미니멀 모드 활성화" + "value": "ツールを検査" + } + } + } + }, + "command.cmuxConfig.builtInSubtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Увімкнути мінімальний режим" + "value": "cmux" } } } }, - "command.equalizeSplits.title": { + "command.cmuxConfig.customTitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تسوية التقسيمات" + "value": "مخصص: %@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Izjednači podjele" + "value": "Prilagođeno: %@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Udlign opdelinger" + "value": "Brugerdefineret: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Teilungen angleichen" + "value": "Benutzerdefiniert: %@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Equalize Splits" + "value": "Custom: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Igualar divisiones" + "value": "Personalizado: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Égaliser les divisions" + "value": "Personnalisé : %@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Equalizza divisioni" + "value": "Personalizzato: %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "分割を均等にする" + "value": "カスタム: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "분할 균등화" + "value": "사용자 정의: %@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gjør delinger like" + "value": "Egendefinert: %@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyrównaj podziały" + "value": "Niestandardowe: %@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Equalizar Divisões" + "value": "Personalizado: %@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выровнять разделение" + "value": "Пользовательское: %@" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปรับขนาดช่องแยกให้เท่ากัน" + "value": "กำหนดเอง: %@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bölmeleri Eşitle" + "value": "Özel: %@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вирівняти розділення" + "value": "Власне: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "均分面板" + "value": "自定义: %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "均等分割" + "value": "自訂: %@" } } } }, - "command.findInDirectory.subtitle": { + "command.cmuxConfig.defaultClaudeCodeTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Right Sidebar" + "value": "Claude Code" } }, "ja": { "stringUnit": { "state": "translated", - "value": "右サイドバー" + "value": "Claude Code" } } } }, - "command.forkAgentConversationBottom.title": { + "command.cmuxConfig.defaultCodexTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork Conversation to the Bottom" + "value": "Codex" } }, "ja": { "stringUnit": { "state": "translated", - "value": "会話を下にフォーク" + "value": "Codex" } } } }, - "command.forkAgentConversationLeft.title": { + "command.cmuxConfig.defaultOpenCodeTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork Conversation to the Left" + "value": "OpenCode" } }, "ja": { "stringUnit": { "state": "translated", - "value": "会話を左にフォーク" + "value": "OpenCode" } } } }, - "command.forkAgentConversationNewTab.title": { + "command.cmuxConfig.issue.newWorkspaceActionNotFound.detail": { "extractionState": "manual", "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konversation in neuem Tab forken" - } - }, "en": { "stringUnit": { "state": "translated", - "value": "Fork Conversation to New Tab" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Bifurcar conversación en pestaña nueva" + "value": "%@ references missing action '%@'" } }, "ja": { "stringUnit": { "state": "translated", - "value": "会話を新規タブにフォーク" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "대화를 새 탭으로 포크" + "value": "%@ は存在しないアクション '%@' を参照しています" } - }, - "zh-Hans": { + } + } + }, + "command.cmuxConfig.issue.newWorkspaceActionRequiresWorkspaceCommand.detail": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "将对话分叉到新标签页" + "value": "%@ must reference a workspace command action" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "將對話分叉到新分頁" + "value": "%@ はワークスペースコマンドアクションを参照する必要があります" } } } }, - "command.forkAgentConversationNewWorkspace.title": { + "command.cmuxConfig.issue.newWorkspaceCommandNotFound.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork Conversation to New Workspace" + "value": "%@ references missing command '%@'" } }, "ja": { "stringUnit": { "state": "translated", - "value": "会話を新規ワークスペースにフォーク" + "value": "%@ は存在しないコマンド '%@' を参照しています" } } } }, - "command.forkAgentConversationRight.title": { + "command.cmuxConfig.issue.newWorkspaceCommandRequiresWorkspace.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork Conversation to the Right" + "value": "%@ '%@' must reference a workspace command" } }, "ja": { "stringUnit": { "state": "translated", - "value": "会話を右にフォーク" + "value": "%@ '%@' はワークスペースコマンドを参照する必要があります" } } } }, - "command.forkAgentConversationTop.title": { + "command.cmuxConfig.issue.schemaError.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork Conversation to the Top" + "value": "%@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "会話を上にフォーク" + "value": "%@" } } } }, - "command.installCLI.subtitle": { + "command.cmuxConfig.issue.schemaError.fallback": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Invalid cmux.json" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "無効な cmux.json" + } + } + } + }, + "command.cmuxConfig.issue.schemaError.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux.json Schema Error" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux.json スキーマエラー" + } + } + } + }, + "command.cmuxConfig.issue.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@: %@" + } + } + } + }, + "command.cmuxConfig.issue.warning.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux.json Configuration Warning" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux.json 設定警告" + } + } + } + }, + "command.cmuxConfig.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "واجهة الأوامر" + "value": "cmux.json" } }, "bs": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "da": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "de": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "en": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "es": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "fr": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "it": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "ja": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "ko": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "nb": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "pl": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "ru": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "th": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "tr": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "uk": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "cmux.json" } } } }, - "command.installCLI.title": { + "command.copyPaneID.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Copy Pane ID" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ペインIDをコピー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "패널 ID 복사" + } + } + } + }, + "command.copyPaneLink.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "أمر الصدفة: تثبيت 'cmux' في PATH" + "value": "نسخ رابط الجزء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Shell naredba: Instaliraj 'cmux' u PATH" + "value": "Kopiraj link panela" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skalkommando: Installer 'cmux' i PATH" + "value": "Kopiér panellink" } }, "de": { "stringUnit": { "state": "translated", - "value": "Shell-Befehl: 'cmux' im PATH installieren" + "value": "Fensterbereich-Link kopieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Shell Command: Install 'cmux' in PATH" + "value": "Copy Pane Link" } }, "es": { "stringUnit": { "state": "translated", - "value": "Comando de shell: Instalar 'cmux' en PATH" + "value": "Copiar enlace del panel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Commande Shell : installer « cmux » dans le PATH" + "value": "Copier le lien du volet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Comando shell: installa 'cmux' nel PATH" + "value": "Copia link riquadro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "シェルコマンド: 'cmux'をPATHにインストール" + "value": "ペインリンクをコピー" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចម្លងតំណភ្ជាប់ផ្ទាំង" } }, "ko": { "stringUnit": { "state": "translated", - "value": "셸 명령어: PATH에 'cmux' 설치" + "value": "패널 링크 복사" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skallkommando: Installer «cmux» i PATH" + "value": "Kopier panellenke" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Polecenie powłoki: Zainstaluj „cmux” w PATH" + "value": "Kopiuj link panelu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Comando Shell: Instalar 'cmux' no PATH" + "value": "Copiar link do painel" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Команда оболочки: установить «cmux» в PATH" + "value": "Копировать ссылку на панель" } }, "th": { "stringUnit": { "state": "translated", - "value": "คำสั่ง Shell: ติดตั้ง 'cmux' ใน PATH" + "value": "คัดลอกลิงก์พาเนล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kabuk Komutu: 'cmux'u PATH'e Yükle" + "value": "Bölme bağlantısını kopyala" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Команда оболонки: встановити 'cmux' у PATH" + "value": "Копіювати посилання на панель" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Shell 命令:将 'cmux' 安装到 PATH" + "value": "复制窗格链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Shell 指令:將「cmux」安裝至 PATH" + "value": "複製窗格連結" } } } }, - "command.jumpUnread.subtitle": { + "command.copySurfaceID.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Copy Surface ID" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サーフェスIDをコピー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "서피스 ID 복사" + } + } + } + }, + "command.copySurfaceLink.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الإشعارات" + "value": "نسخ رابط السطح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obavještenja" + "value": "Kopiraj link površine" } }, "da": { "stringUnit": { "state": "translated", - "value": "Notifikationer" + "value": "Kopiér overfladelink" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen" + "value": "Oberflächen-Link kopieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Notifications" + "value": "Copy Surface Link" } }, "es": { "stringUnit": { "state": "translated", - "value": "Notificaciones" + "value": "Copiar enlace de superficie" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Notifications" + "value": "Copier le lien de la surface" } }, "it": { "stringUnit": { "state": "translated", - "value": "Notifiche" + "value": "Copia link superficie" } }, "ja": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "サーフェスリンクをコピー" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចម្លងតំណភ្ជាប់ផ្ទៃ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림" + "value": "서피스 링크 복사" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Varsler" + "value": "Kopier overflatelenke" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Powiadomienia" + "value": "Kopiuj link powierzchni" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Notificações" + "value": "Copiar link da superfície" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Уведомления" + "value": "Копировать ссылку на поверхность" } }, "th": { "stringUnit": { "state": "translated", - "value": "การแจ้งเตือน" + "value": "คัดลอกลิงก์เซอร์เฟซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bildirimler" + "value": "Yüzey bağlantısını kopyala" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сповіщення" + "value": "Копіювати посилання на поверхню" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "复制界面链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "複製介面連結" } } } }, - "command.jumpUnread.title": { + "command.copyWorkspaceIDAndRef.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Copy Workspace ID and Ref" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースIDと参照をコピー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "워크스페이스 ID 및 참조 복사" + } + } + } + }, + "command.copyWorkspaceLink.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الانتقال إلى أحدث غير مقروء" + "value": "نسخ رابط مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Skoči na najnovije nepročitano" + "value": "Kopiraj link radnog prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Gå til seneste ulæste" + "value": "Kopiér arbejdsområdelink" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zur letzten ungelesenen springen" + "value": "Arbeitsbereich-Link kopieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Jump to Latest Unread" + "value": "Copy Workspace Link" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ir a la última no leída" + "value": "Copiar enlace de espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aller au dernier message non lu" + "value": "Copier le lien de l’espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Vai all'ultimo non letto" + "value": "Copia link area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最新の未読にジャンプ" + "value": "ワークスペースリンクをコピー" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចម្លងតំណភ្ជាប់កន្លែងធ្វើការ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최신 읽지 않은 항목으로 이동" + "value": "워크스페이스 링크 복사" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gå til siste uleste" + "value": "Kopier arbeidsområdelenke" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przejdź do najnowszego nieprzeczytanego" + "value": "Kopiuj link obszaru roboczego" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ir para Última Não Lida" + "value": "Copiar link do espaço de trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Перейти к последнему непрочитанному" + "value": "Копировать ссылку на рабочую область" } }, "th": { "stringUnit": { "state": "translated", - "value": "ข้ามไปยังรายการยังไม่อ่านล่าสุด" + "value": "คัดลอกลิงก์เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Son Okunmamışa Atla" + "value": "Çalışma alanı bağlantısını kopyala" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейти до останнього непрочитаного" + "value": "Копіювати посилання на робочий простір" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "跳转到最新未读" + "value": "复制工作区链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "跳至最新未讀" + "value": "複製工作區連結" } } } }, - "command.makeDefaultTerminal.keywords": { + "command.disableBrowser.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "default,terminal,ssh,launch,services,handler,command,tool,executable" + "value": "Disable cmux Browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "デフォルト,ターミナル,ssh,起動,サービス,ハンドラ,コマンド,tool,実行ファイル" + "value": "cmuxブラウザを無効にする" } } } }, - "command.makeDefaultTerminal.subtitle": { + "command.disableMatchTerminalBackground.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Disable Match Terminal Background" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グローバル" + "value": "ターミナルの背景に合わせる設定を無効にする" } } } }, - "command.makeDefaultTerminal.title": { + "command.disableMinimalMode.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Make cmux the Default Terminal" + "value": "Disable Minimal Mode" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux をデフォルトターミナルにする" + "value": "ミニマルモードを無効にする" } - } - } - }, - "command.markOldestUnreadAndJumpNext.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Mark as Oldest Unread and Jump to Next Latest Unread" + "value": "미니멀 모드 비활성화" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "最古の未読としてマークして次の最新未読にジャンプ" + "value": "Вимкнути мінімальний режим" } } } }, - "command.markTabRead.title": { + "command.editWorkspaceDescription.title": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعليم اللسان كمقروء" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Označi tab kao pročitan" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Marker fane som læst" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Tab als gelesen markieren" - } - }, "en": { "stringUnit": { "state": "translated", - "value": "Mark Tab as Read" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Marcar pestaña como leída" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Marquer l'onglet comme lu" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Segna scheda come letta" + "value": "Edit Workspace Description…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブを既読にする" + "value": "ワークスペースの説明を編集…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭을 읽음으로 표시" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Merk fane som lest" + "value": "워크스페이스 설명 편집…" } - }, - "pl": { + } + } + }, + "command.enableBrowser.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Oznacz kartę jako przeczytaną" + "value": "Enable cmux Browser" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Marcar Aba como Lida" + "value": "cmuxブラウザを有効にする" } - }, - "ru": { + } + } + }, + "command.enableMatchTerminalBackground.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Отметить вкладку как прочитанную" + "value": "Enable Match Terminal Background" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "ทำเครื่องหมายแท็บว่าอ่านแล้ว" + "value": "ターミナルの背景に合わせる" } - }, - "tr": { + } + } + }, + "command.enableMinimalMode.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Okundu Olarak İşaretle" + "value": "Enable Minimal Mode" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Позначити вкладку як прочитану" + "value": "ミニマルモードを有効にする" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "将标签页标记为已读" + "value": "미니멀 모드 활성화" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "將標籤頁標為已讀" + "value": "Увімкнути мінімальний режим" } } } }, - "command.markTabUnread.title": { + "command.equalizeSplits.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تعليم اللسان كغير مقروء" + "value": "تسوية التقسيمات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Označi tab kao nepročitan" + "value": "Izjednači podjele" } }, "da": { "stringUnit": { "state": "translated", - "value": "Marker fane som ulæst" + "value": "Udlign opdelinger" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab als ungelesen markieren" + "value": "Teilungen angleichen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Mark Tab as Unread" + "value": "Equalize Splits" } }, "es": { "stringUnit": { "state": "translated", - "value": "Marcar pestaña como no leída" + "value": "Igualar divisiones" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Marquer l'onglet comme non lu" + "value": "Égaliser les divisions" } }, "it": { "stringUnit": { "state": "translated", - "value": "Segna scheda come non letta" + "value": "Equalizza divisioni" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブを未読にする" + "value": "分割を均等にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭을 읽지 않음으로 표시" + "value": "분할 균등화" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Merk fane som ulest" + "value": "Gjør delinger like" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Oznacz kartę jako nieprzeczytaną" + "value": "Wyrównaj podziały" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Marcar Aba como Não Lida" + "value": "Equalizar Divisões" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отметить вкладку как непрочитанную" + "value": "Выровнять разделение" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำเครื่องหมายแท็บว่ายังไม่อ่าน" + "value": "ปรับขนาดช่องแยกให้เท่ากัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Okunmadı Olarak İşaretle" + "value": "Bölmeleri Eşitle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Позначити вкладку як непрочитану" + "value": "Вирівняти розділення" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将标签页标记为未读" + "value": "均分面板" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將標籤頁標為未讀" + "value": "均等分割" } } } }, - "command.markWorkspaceDone.title": { + "command.findInDirectory.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mark Workspace as Done" + "value": "Right Sidebar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを完了にする" + "value": "右サイドバー" } } } }, - "command.markdownZoomIn.title": { + "command.forkAgentConversationBottom.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Zoom In" + "value": "Fork Conversation to the Bottom" } }, "ja": { "stringUnit": { "state": "translated", - "value": "拡大" + "value": "会話を下にフォーク" } } } }, - "command.markdownZoomOut.title": { + "command.forkAgentConversationLeft.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Zoom Out" + "value": "Fork Conversation to the Left" } }, "ja": { "stringUnit": { "state": "translated", - "value": "縮小" + "value": "会話を左にフォーク" } } } }, - "command.markdownZoomReset.title": { + "command.forkAgentConversationNewTab.title": { "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Konversation in neuem Tab forken" + } + }, "en": { "stringUnit": { "state": "translated", - "value": "Actual Size" + "value": "Fork Conversation to New Tab" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Bifurcar conversación en pestaña nueva" } }, "ja": { "stringUnit": { "state": "translated", - "value": "実際のサイズ" + "value": "会話を新規タブにフォーク" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "대화를 새 탭으로 포크" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "将对话分叉到新标签页" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "將對話分叉到新分頁" } } } }, - "command.matchTerminalBackground.subtitle": { + "command.forkAgentConversationNewWorkspace.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Choose Sidebar" + "value": "Fork Conversation to New Workspace" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイドバーを選択" + "value": "会話を新規ワークスペースにフォーク" } } } }, - "command.mobileConnect.subtitle": { + "command.forkAgentConversationRight.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Fork Conversation to the Right" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "会話を右にフォーク" + } + } + } + }, + "command.forkAgentConversationTop.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Fork Conversation to the Top" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "会話を上にフォーク" + } + } + } + }, + "command.installCLI.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الأجهزة المحمولة" + "value": "واجهة الأوامر" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Mobilni uređaji" + "value": "CLI" } }, "da": { "stringUnit": { "state": "translated", - "value": "Mobil" + "value": "CLI" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mobilgeräte" + "value": "CLI" } }, "en": { "stringUnit": { "state": "translated", - "value": "Mobile" + "value": "CLI" } }, "es": { "stringUnit": { "state": "translated", - "value": "Móvil" + "value": "CLI" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Mobile" + "value": "CLI" } }, "it": { "stringUnit": { "state": "translated", - "value": "Dispositivi mobili" + "value": "CLI" } }, "ja": { "stringUnit": { "state": "translated", - "value": "モバイル" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ឧបករណ៍ចល័ត" + "value": "CLI" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모바일" + "value": "CLI" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Mobil" + "value": "CLI" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Urządzenia mobilne" + "value": "CLI" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Dispositivos móveis" + "value": "CLI" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Мобильные устройства" + "value": "CLI" } }, "th": { "stringUnit": { "state": "translated", - "value": "อุปกรณ์พกพา" + "value": "CLI" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Mobil" + "value": "CLI" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Мобільні пристрої" + "value": "CLI" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "移动设备" + "value": "CLI" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "行動裝置" + "value": "CLI" } } } }, - "command.mobileConnect.title": { + "command.installCLI.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "توصيل iPhone/iPad" + "value": "أمر الصدفة: تثبيت 'cmux' في PATH" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Poveži iPhone/iPad" + "value": "Shell naredba: Instaliraj 'cmux' u PATH" } }, "da": { "stringUnit": { "state": "translated", - "value": "Forbind iPhone/iPad" + "value": "Skalkommando: Installer 'cmux' i PATH" } }, "de": { "stringUnit": { "state": "translated", - "value": "iPhone/iPad verbinden" + "value": "Shell-Befehl: 'cmux' im PATH installieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Connect iPhone/iPad" + "value": "Shell Command: Install 'cmux' in PATH" } }, "es": { "stringUnit": { "state": "translated", - "value": "Conectar iPhone/iPad" + "value": "Comando de shell: Instalar 'cmux' en PATH" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connecter l’iPhone/iPad" + "value": "Commande Shell : installer « cmux » dans le PATH" } }, "it": { "stringUnit": { "state": "translated", - "value": "Connetti iPhone/iPad" + "value": "Comando shell: installa 'cmux' nel PATH" } }, "ja": { "stringUnit": { "state": "translated", - "value": "iPhone/iPadを接続" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ភ្ជាប់ iPhone/iPad" + "value": "シェルコマンド: 'cmux'をPATHにインストール" } }, "ko": { "stringUnit": { "state": "translated", - "value": "iPhone/iPad 연결" + "value": "셸 명령어: PATH에 'cmux' 설치" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Koble til iPhone/iPad" + "value": "Skallkommando: Installer «cmux» i PATH" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Połącz iPhone/iPad" + "value": "Polecenie powłoki: Zainstaluj „cmux” w PATH" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Conectar iPhone/iPad" + "value": "Comando Shell: Instalar 'cmux' no PATH" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Подключить iPhone/iPad" + "value": "Команда оболочки: установить «cmux» в PATH" } }, "th": { "stringUnit": { "state": "translated", - "value": "เชื่อมต่อ iPhone/iPad" + "value": "คำสั่ง Shell: ติดตั้ง 'cmux' ใน PATH" } }, "tr": { "stringUnit": { "state": "translated", - "value": "iPhone/iPad’i Bağla" + "value": "Kabuk Komutu: 'cmux'u PATH'e Yükle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Підключити iPhone/iPad" + "value": "Команда оболонки: встановити 'cmux' у PATH" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "连接 iPhone/iPad" + "value": "Shell 命令:将 'cmux' 安装到 PATH" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連接 iPhone/iPad" - } - } - } - }, - "command.newAgentChat.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Agent Chat" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Agent Chat" - } - } - } - }, - "command.newAgentChat.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "New agent chat" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "新しいエージェントチャット" + "value": "Shell 指令:將「cmux」安裝至 PATH" } } } }, - "command.newBrowserTab.subtitle": { + "command.jumpUnread.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لسان" + "value": "الإشعارات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Obavještenja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Notifikationer" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Benachrichtigungen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Notifications" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pestaña" + "value": "Notificaciones" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Onglet" + "value": "Notifications" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scheda" + "value": "Notifiche" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ" + "value": "通知" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭" + "value": "알림" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Varsler" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Karta" + "value": "Powiadomienia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aba" + "value": "Notificações" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Уведомления" } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บ" + "value": "การแจ้งเตือน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme" + "value": "Bildirimler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Сповіщення" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页" + "value": "通知" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁" + "value": "通知" } } } }, - "command.newBrowserTab.title": { + "command.jumpUnread.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لسان جديد (متصفح)" + "value": "الانتقال إلى أحدث غير مقروء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Novi tab (Preglednik)" + "value": "Skoči na najnovije nepročitano" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny fane (browser)" + "value": "Gå til seneste ulæste" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neuer Tab (Browser)" + "value": "Zur letzten ungelesenen springen" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Tab (Browser)" + "value": "Jump to Latest Unread" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva pestaña (Navegador)" + "value": "Ir a la última no leída" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvel onglet (navigateur)" + "value": "Aller au dernier message non lu" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova scheda (browser)" + "value": "Vai all'ultimo non letto" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規タブ(ブラウザ)" + "value": "最新の未読にジャンプ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 탭 (브라우저)" + "value": "최신 읽지 않은 항목으로 이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny fane (nettleser)" + "value": "Gå til siste uleste" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa karta (Przeglądarka)" + "value": "Przejdź do najnowszego nieprzeczytanego" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova Aba (Navegador)" + "value": "Ir para Última Não Lida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая вкладка (Браузер)" + "value": "Перейти к последнему непрочитанному" } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บใหม่ (เบราว์เซอร์)" + "value": "ข้ามไปยังรายการยังไม่อ่านล่าสุด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Sekme (Tarayıcı)" + "value": "Son Okunmamışa Atla" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова вкладка (Браузер)" + "value": "Перейти до останнього непрочитаного" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建标签页(浏览器)" + "value": "跳转到最新未读" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增標籤頁(瀏覽器)" + "value": "跳至最新未讀" } } } }, - "command.newBrowserWorkspace.subtitle": { + "command.makeDefaultTerminal.keywords": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "مساحة العمل" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Radni prostor" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Arbejdsområde" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Arbeitsbereich" - } - }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Espacio de trabajo" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Espace de travail" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Area di lavoro" + "value": "default,terminal,ssh,launch,services,handler,command,tool,executable" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "작업 공간" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Arbeidsområde" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Przestrzeń robocza" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Área de Trabalho" + "value": "デフォルト,ターミナル,ssh,起動,サービス,ハンドラ,コマンド,tool,実行ファイル" } - }, - "ru": { + } + } + }, + "command.makeDefaultTerminal.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство" + "value": "Global" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ" + "value": "グローバル" } - }, - "tr": { + } + } + }, + "command.makeDefaultTerminal.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı" + "value": "Make cmux the Default Terminal" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Робоча область" + "value": "cmux をデフォルトターミナルにする" } - }, - "zh-Hans": { + } + } + }, + "command.markOldestUnreadAndJumpNext.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "Mark as Oldest Unread and Jump to Next Latest Unread" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "工作區" + "value": "最古の未読としてマークして次の最新未読にジャンプ" } } } }, - "command.newBrowserWorkspace.title": { + "command.markTabRead.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة عمل متصفح جديدة" + "value": "تعليم اللسان كمقروء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Novi radni prostor preglednika" + "value": "Označi tab kao pročitan" } }, "da": { "stringUnit": { "state": "translated", - "value": "Nyt browserarbejdsområde" + "value": "Marker fane som læst" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neuer Browser-Arbeitsbereich" + "value": "Tab als gelesen markieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Browser Workspace" + "value": "Mark Tab as Read" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo espacio de trabajo de navegador" + "value": "Marcar pestaña como leída" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvel espace de travail navigateur" + "value": "Marquer l'onglet comme lu" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova area di lavoro browser" + "value": "Segna scheda come letta" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規ブラウザワークスペース" + "value": "タブを既読にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 브라우저 작업 공간" + "value": "탭을 읽음으로 표시" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nytt nettleserarbeidsområde" + "value": "Merk fane som lest" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa przestrzeń robocza przeglądarki" + "value": "Oznacz kartę jako przeczytaną" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova Área de Trabalho de Navegador" + "value": "Marcar Aba como Lida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новое рабочее пространство браузера" + "value": "Отметить вкладку как прочитанную" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซเบราว์เซอร์ใหม่" + "value": "ทำเครื่องหมายแท็บว่าอ่านแล้ว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Tarayıcı Çalışma Alanı" + "value": "Sekmeyi Okundu Olarak İşaretle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова робоча область браузера" + "value": "Позначити вкладку як прочитану" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建浏览器工作区" + "value": "将标签页标记为已读" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增瀏覽器工作區" + "value": "將標籤頁標為已讀" } } } }, - "command.newTerminalTab.subtitle": { + "command.markTabUnread.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لسان" + "value": "تعليم اللسان كغير مقروء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Označi tab kao nepročitan" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Marker fane som ulæst" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Tab als ungelesen markieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Mark Tab as Unread" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pestaña" + "value": "Marcar pestaña como no leída" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Onglet" + "value": "Marquer l'onglet comme non lu" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scheda" + "value": "Segna scheda come non letta" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ" + "value": "タブを未読にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭" + "value": "탭을 읽지 않음으로 표시" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Merk fane som ulest" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Karta" + "value": "Oznacz kartę jako nieprzeczytaną" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aba" + "value": "Marcar Aba como Não Lida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Отметить вкладку как непрочитанную" } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บ" + "value": "ทำเครื่องหมายแท็บว่ายังไม่อ่าน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme" + "value": "Sekmeyi Okunmadı Olarak İşaretle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Позначити вкладку як непрочитану" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页" + "value": "将标签页标记为未读" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁" + "value": "將標籤頁標為未讀" } } } }, - "command.newTerminalTab.title": { + "command.markWorkspaceDone.title": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لسان جديد (طرفية)" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Novi tab (Terminal)" + "value": "Mark Workspace as Done" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ny fane (terminal)" + "value": "ワークスペースを完了にする" + } + } + } + }, + "command.markdownZoomIn.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Zoom In" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "拡大" + } + } + } + }, + "command.markdownZoomOut.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Zoom Out" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "縮小" + } + } + } + }, + "command.markdownZoomReset.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Actual Size" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "実際のサイズ" + } + } + } + }, + "command.matchTerminalBackground.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose Sidebar" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サイドバーを選択" + } + } + } + }, + "command.mobileConnect.subtitle": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "الأجهزة المحمولة" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Mobilni uređaji" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Mobil" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neuer Tab (Terminal)" + "value": "Mobilgeräte" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Tab (Terminal)" + "value": "Mobile" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva pestaña (Terminal)" + "value": "Móvil" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvel onglet (terminal)" + "value": "Mobile" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova scheda (terminale)" + "value": "Dispositivi mobili" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規タブ(ターミナル)" + "value": "モバイル" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ឧបករណ៍ចល័ត" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 탭 (터미널)" + "value": "모바일" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny fane (terminal)" + "value": "Mobil" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa karta (Terminal)" + "value": "Urządzenia mobilne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova Aba (Terminal)" + "value": "Dispositivos móveis" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая вкладка (Терминал)" + "value": "Мобильные устройства" } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บใหม่ (เทอร์มินัล)" + "value": "อุปกรณ์พกพา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Sekme (Terminal)" + "value": "Mobil" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова вкладка (Термінал)" + "value": "Мобільні пристрої" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建标签页(终端)" + "value": "移动设备" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增標籤頁(終端機)" + "value": "行動裝置" } } } }, - "command.newWindow.subtitle": { + "command.mobileConnect.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نافذة" + "value": "توصيل iPhone/iPad" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prozor" + "value": "Poveži iPhone/iPad" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vindue" + "value": "Forbind iPhone/iPad" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fenster" + "value": "iPhone/iPad verbinden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Window" + "value": "Connect iPhone/iPad" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana" + "value": "Conectar iPhone/iPad" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fenêtre" + "value": "Connecter l’iPhone/iPad" } }, "it": { "stringUnit": { "state": "translated", - "value": "Finestra" + "value": "Connetti iPhone/iPad" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウインドウ" + "value": "iPhone/iPadを接続" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ភ្ជាប់ iPhone/iPad" } }, "ko": { "stringUnit": { "state": "translated", - "value": "윈도우" + "value": "iPhone/iPad 연결" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vindu" + "value": "Koble til iPhone/iPad" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Okno" + "value": "Połącz iPhone/iPad" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Janela" + "value": "Conectar iPhone/iPad" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Окно" + "value": "Подключить iPhone/iPad" } }, "th": { "stringUnit": { "state": "translated", - "value": "หน้าต่าง" + "value": "เชื่อมต่อ iPhone/iPad" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pencere" + "value": "iPhone/iPad’i Bağla" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вікно" + "value": "Підключити iPhone/iPad" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "窗口" + "value": "连接 iPhone/iPad" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "視窗" + "value": "連接 iPhone/iPad" } } } }, - "command.newWindow.title": { + "command.newAgentChat.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Agent Chat" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Agent Chat" + } + } + } + }, + "command.newAgentChat.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "New agent chat" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "新しいエージェントチャット" + } + } + } + }, + "command.newBrowserTab.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نافذة جديدة" + "value": "لسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Novi prozor" + "value": "Tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Nyt vindue" + "value": "Fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neues Fenster" + "value": "Tab" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Window" + "value": "Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva ventana" + "value": "Pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvelle fenêtre" + "value": "Onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova finestra" + "value": "Scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規ウインドウ" + "value": "タブ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 윈도우" + "value": "탭" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nytt vindu" + "value": "Fane" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowe okno" + "value": "Karta" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova Janela" + "value": "Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новое окно" + "value": "Вкладка" } }, "th": { "stringUnit": { "state": "translated", - "value": "หน้าต่างใหม่" + "value": "แท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Pencere" + "value": "Sekme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нове вікно" + "value": "Вкладка" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建窗口" + "value": "标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增視窗" + "value": "標籤頁" } } } }, - "command.newWorkspace.subtitle": { + "command.newBrowserTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل" + "value": "لسان جديد (متصفح)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor" + "value": "Novi tab (Preglednik)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområde" + "value": "Ny fane (browser)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich" + "value": "Neuer Tab (Browser)" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace" + "value": "New Tab (Browser)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo" + "value": "Nueva pestaña (Navegador)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail" + "value": "Nouvel onglet (navigateur)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro" + "value": "Nuova scheda (browser)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "新規タブ(ブラウザ)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간" + "value": "새 탭 (브라우저)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområde" + "value": "Ny fane (nettleser)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza" + "value": "Nowa karta (Przeglądarka)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho" + "value": "Nova Aba (Navegador)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство" + "value": "Новая вкладка (Браузер)" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ" + "value": "แท็บใหม่ (เบราว์เซอร์)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı" + "value": "Yeni Sekme (Tarayıcı)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область" + "value": "Нова вкладка (Браузер)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "新建标签页(浏览器)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區" + "value": "新增標籤頁(瀏覽器)" } } } }, - "command.newWorkspace.title": { + "command.newBrowserWorkspace.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة عمل جديدة" + "value": "مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Novi radni prostor" + "value": "Radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Nyt arbejdsområde" + "value": "Arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neuer Arbeitsbereich" + "value": "Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Workspace" + "value": "Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo espacio de trabajo" + "value": "Espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvel espace de travail" + "value": "Espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova area di lavoro" + "value": "Area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規ワークスペース" + "value": "ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 작업 공간" + "value": "작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nytt arbeidsområde" + "value": "Arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa przestrzeń robocza" + "value": "Przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova Área de Trabalho" + "value": "Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новое рабочее пространство" + "value": "Рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซใหม่" + "value": "เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Çalışma Alanı" + "value": "Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова робоча область" + "value": "Робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建工作区" + "value": "工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增工作區" + "value": "工作區" } } } }, - "command.nextTabInPane.subtitle": { + "command.newBrowserWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "التنقل بين الألسنة" + "value": "مساحة عمل متصفح جديدة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Navigacija tabovima" + "value": "Novi radni prostor preglednika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fanenavigation" + "value": "Nyt browserarbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab-Navigation" + "value": "Neuer Browser-Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Tab Navigation" + "value": "New Browser Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Navegación de pestañas" + "value": "Nuevo espacio de trabajo de navegador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navigation par onglets" + "value": "Nouvel espace de travail navigateur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Navigazione schede" + "value": "Nuova area di lavoro browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブナビゲーション" + "value": "新規ブラウザワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 탐색" + "value": "새 브라우저 작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fanenavigering" + "value": "Nytt nettleserarbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nawigacja po kartach" + "value": "Nowa przestrzeń robocza przeglądarki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navegação de Abas" + "value": "Nova Área de Trabalho de Navegador" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Навигация по вкладкам" + "value": "Новое рабочее пространство браузера" } }, "th": { "stringUnit": { "state": "translated", - "value": "การนำทางแท็บ" + "value": "เวิร์กสเปซเบราว์เซอร์ใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme Gezinme" + "value": "Yeni Tarayıcı Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Навігація вкладками" + "value": "Нова робоча область браузера" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页导航" + "value": "新建浏览器工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁導覽" + "value": "新增瀏覽器工作區" } } } }, - "command.nextTabInPane.title": { + "command.newTerminalTab.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اللسان التالي في اللوحة" + "value": "لسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sljedeći tab u panelu" + "value": "Tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Næste fane i panel" + "value": "Fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nächster Tab im Bereich" + "value": "Tab" } }, "en": { "stringUnit": { "state": "translated", - "value": "Next Tab in Pane" + "value": "Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Siguiente pestaña en el panel" + "value": "Pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Onglet suivant dans le panneau" + "value": "Onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scheda successiva nel pannello" + "value": "Scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペイン内の次のタブ" + "value": "タブ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "패널 내 다음 탭" + "value": "탭" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Neste fane i panelet" + "value": "Fane" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Następna karta w panelu" + "value": "Karta" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Próxima Aba no Painel" + "value": "Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Следующая вкладка в панели" + "value": "Вкладка" } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บถัดไปในบานหน้าต่าง" + "value": "แท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bölmedeki Sonraki Sekme" + "value": "Sekme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Наступна вкладка в панелі" + "value": "Вкладка" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "下一个面板标签页" + "value": "标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "面板中的下一個標籤頁" + "value": "標籤頁" } } } }, - "command.nextWorkspace.subtitle": { + "command.newTerminalTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "التنقل بين مساحات العمل" + "value": "لسان جديد (طرفية)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Navigacija radnim prostorima" + "value": "Novi tab (Terminal)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområdenavigation" + "value": "Ny fane (terminal)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich-Navigation" + "value": "Neuer Tab (Terminal)" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace Navigation" + "value": "New Tab (Terminal)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Navegación de espacios de trabajo" + "value": "Nueva pestaña (Terminal)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navigation par espaces de travail" + "value": "Nouvel onglet (terminal)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Navigazione aree di lavoro" + "value": "Nuova scheda (terminale)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースナビゲーション" + "value": "新規タブ(ターミナル)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 탐색" + "value": "새 탭 (터미널)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområdenavigering" + "value": "Ny fane (terminal)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nawigacja po przestrzeniach roboczych" + "value": "Nowa karta (Terminal)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navegação de Áreas de Trabalho" + "value": "Nova Aba (Terminal)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Навигация по рабочим пространствам" + "value": "Новая вкладка (Терминал)" } }, "th": { "stringUnit": { "state": "translated", - "value": "การนำทางเวิร์กสเปซ" + "value": "แท็บใหม่ (เทอร์มินัล)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı Gezinme" + "value": "Yeni Sekme (Terminal)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Навігація робочими областями" + "value": "Нова вкладка (Термінал)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区导航" + "value": "新建标签页(终端)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區導覽" + "value": "新增標籤頁(終端機)" } } } }, - "command.nextWorkspace.title": { + "command.newWindow.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل التالية" + "value": "نافذة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sljedeći radni prostor" + "value": "Prozor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Næste arbejdsområde" + "value": "Vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nächster Arbeitsbereich" + "value": "Fenster" } }, "en": { "stringUnit": { "state": "translated", - "value": "Next Workspace" + "value": "Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Siguiente espacio de trabajo" + "value": "Ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail suivant" + "value": "Fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro successiva" + "value": "Finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "次のワークスペース" + "value": "ウインドウ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다음 작업 공간" + "value": "윈도우" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Neste arbeidsområde" + "value": "Vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Następna przestrzeń robocza" + "value": "Okno" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Próxima Área de Trabalho" + "value": "Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Следующее рабочее пространство" + "value": "Окно" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซถัดไป" + "value": "หน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sonraki Çalışma Alanı" + "value": "Pencere" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Наступна робоча область" + "value": "Вікно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "下一个工作区" + "value": "窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "下一個工作區" + "value": "視窗" } } } }, - "command.openDiffViewer.title": { + "command.newWindow.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فتح عارض الاختلافات" + "value": "نافذة جديدة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori preglednik razlika" + "value": "Novi prozor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn diffvisning" + "value": "Nyt vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer öffnen" + "value": "Neues Fenster" } }, "en": { "stringUnit": { "state": "translated", - "value": "Open Diff Viewer" + "value": "New Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir visor de diferencias" + "value": "Nueva ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir la visionneuse de diff" + "value": "Nouvelle fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri visualizzatore diff" + "value": "Nuova finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "差分ビューアを開く" + "value": "新規ウインドウ" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "Open Diff Viewer" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Diff 뷰어 열기" + "value": "새 윈도우" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne diffvisning" + "value": "Nytt vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz podgląd różnic" + "value": "Nowe okno" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir visualizador de diff" + "value": "Nova Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть просмотр diff" + "value": "Новое окно" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดตัวดู diff" + "value": "หน้าต่างใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Diff Görüntüleyiciyi Aç" + "value": "Yeni Pencere" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити переглядач diff" + "value": "Нове вікно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开差异查看器" + "value": "新建窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟差異檢視器" + "value": "新增視窗" } } } }, - "command.openDirectoryDiffViewer.title": { + "command.newWorkspace.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فتح عارض اختلافات المجلد" + "value": "مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori preglednik razlika direktorija" + "value": "Radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn diffvisning for mappe" + "value": "Arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verzeichnis-Diff-Ansicht öffnen" + "value": "Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Open Directory Diff Viewer" + "value": "Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir visor de diferencias del directorio" + "value": "Espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir le visualiseur de diff du répertoire" + "value": "Espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri visualizzatore diff directory" + "value": "Area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ディレクトリ差分ビューアを開く" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "បើកកម្មវិធីមើលភាពខុសគ្នារបស់ថត" + "value": "ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "디렉터리 차이 뷰어 열기" + "value": "작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne differansevisning for mappe" + "value": "Arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz podgląd różnic katalogu" + "value": "Przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir visualizador de diff do diretório" + "value": "Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть просмотр различий каталога" + "value": "Рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดตัวดูส่วนต่างของไดเรกทอรี" + "value": "เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dizin fark görüntüleyicisini aç" + "value": "Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити перегляд відмінностей каталогу" + "value": "Робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开目录差异查看器" + "value": "工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟目錄差異檢視器" - } - } - } - }, - "command.openFilesPane.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Open Files as Pane" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ファイルをペインで開く" - } - } - } - }, - "command.openFindPane.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Open Find as Pane" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "検索をペインで開く" + "value": "工作區" } } } }, - "command.openFolder.subtitle": { + "command.newWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل" + "value": "مساحة عمل جديدة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor" + "value": "Novi radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområde" + "value": "Nyt arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich" + "value": "Neuer Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace" + "value": "New Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo" + "value": "Nuevo espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail" + "value": "Nouvel espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro" + "value": "Nuova area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "新規ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간" + "value": "새 작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområde" + "value": "Nytt arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza" + "value": "Nowa przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho" + "value": "Nova Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство" + "value": "Новое рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ" + "value": "เวิร์กสเปซใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı" + "value": "Yeni Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область" + "value": "Нова робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "新建工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區" + "value": "新增工作區" } } } }, - "command.openFolder.title": { + "command.nextTabInPane.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فتح مجلد…" + "value": "التنقل بين الألسنة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori folder…" + "value": "Navigacija tabovima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn mappe…" + "value": "Fanenavigation" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ordner öffnen …" + "value": "Tab-Navigation" } }, "en": { "stringUnit": { "state": "translated", - "value": "Open Folder…" + "value": "Tab Navigation" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir carpeta…" + "value": "Navegación de pestañas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir un dossier..." + "value": "Navigation par onglets" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri cartella…" + "value": "Navigazione schede" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フォルダを開く…" + "value": "タブナビゲーション" } }, "ko": { "stringUnit": { "state": "translated", - "value": "폴더 열기…" + "value": "탭 탐색" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne mappe …" + "value": "Fanenavigering" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz folder…" + "value": "Nawigacja po kartach" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Pasta…" + "value": "Navegação de Abas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть папку..." + "value": "Навигация по вкладкам" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดโฟลเดอร์..." + "value": "การนำทางแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Klasör Aç…" + "value": "Sekme Gezinme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити теку…" + "value": "Навігація вкладками" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开文件夹..." + "value": "标签页导航" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟資料夾..." - } - } - } - }, - "command.openFolderInVSCodeInline.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "VS Code Inline" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VS Code インライン" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VS Code 인라인" - } - } - } - }, - "command.openFolderInVSCodeInline.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Open Folder in VS Code (Inline)…" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "フォルダを VS Code で開く(インライン)…" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VS Code에서 폴더 열기 (인라인)…" - } - } - } - }, - "command.openGhosttySettings.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ghostty Config Files" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Ghostty設定ファイル" - } - } - } - }, - "command.openGhosttySettings.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Open Ghostty Settings in TextEdit" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Ghostty設定をTextEditで開く" - } - } - } - }, - "command.openRightSidebarToolAsPane.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Pane" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ペイン" + "value": "標籤頁導覽" } } } }, - "command.openSettings.subtitle": { + "command.nextTabInPane.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عام" + "value": "اللسان التالي في اللوحة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Globalno" + "value": "Sljedeći tab u panelu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Næste fane i panel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Nächster Tab im Bereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Next Tab in Pane" } }, "es": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Siguiente pestaña en el panel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Général" + "value": "Onglet suivant dans le panneau" } }, "it": { "stringUnit": { "state": "translated", - "value": "Globale" + "value": "Scheda successiva nel pannello" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グローバル" + "value": "ペイン内の次のタブ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전역" + "value": "패널 내 다음 탭" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Neste fane i panelet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Globalne" + "value": "Następna karta w panelu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Próxima Aba no Painel" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Глобальные" + "value": "Следующая вкладка в панели" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทั่วไป" + "value": "แท็บถัดไปในบานหน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel" + "value": "Bölmedeki Sonraki Sekme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Глобальна" + "value": "Наступна вкладка в панелі" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "全局" + "value": "下一个面板标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "全域" + "value": "面板中的下一個標籤頁" } } } }, - "command.openSettings.title": { + "command.nextWorkspace.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فتح الإعدادات" + "value": "التنقل بين مساحات العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori postavke" + "value": "Navigacija radnim prostorima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn indstillinger" + "value": "Arbejdsområdenavigation" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einstellungen öffnen" + "value": "Arbeitsbereich-Navigation" } }, "en": { "stringUnit": { "state": "translated", - "value": "Open Settings" + "value": "Workspace Navigation" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir ajustes" + "value": "Navegación de espacios de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir les réglages" + "value": "Navigation par espaces de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri impostazioni" + "value": "Navigazione aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定を開く" + "value": "ワークスペースナビゲーション" } }, "ko": { "stringUnit": { "state": "translated", - "value": "설정 열기" + "value": "작업 공간 탐색" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne innstillinger" + "value": "Arbeidsområdenavigering" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz ustawienia" + "value": "Nawigacja po przestrzeniach roboczych" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes" + "value": "Navegação de Áreas de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть настройки" + "value": "Навигация по рабочим пространствам" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดการตั้งค่า" + "value": "การนำทางเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ayarları Aç" + "value": "Çalışma Alanı Gezinme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити налаштування" + "value": "Навігація робочими областями" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开设置" + "value": "工作区导航" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟設定" - } - } - } - }, - "command.openVaultPane.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Open Vault as Pane" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Vaultをペインで開く" + "value": "工作區導覽" } } } }, - "command.openWorkspacePRLinks.title": { + "command.nextWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فتح جميع روابط طلبات السحب في مساحة العمل" + "value": "مساحة العمل التالية" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori sve PR linkove radnog prostora" + "value": "Sljedeći radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn alle PR-links for arbejdsområde" + "value": "Næste arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Alle PR-Links des Arbeitsbereichs öffnen" + "value": "Nächster Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Open All Workspace PR Links" + "value": "Next Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir todos los enlaces de PR del espacio de trabajo" + "value": "Siguiente espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir tous les liens PR de l'espace de travail" + "value": "Espace de travail suivant" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri tutti i link PR dell'area di lavoro" + "value": "Area di lavoro successiva" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのPRリンクをすべて開く" + "value": "次のワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 PR 링크 모두 열기" + "value": "다음 작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne alle PR-lenker for arbeidsområdet" + "value": "Neste arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz wszystkie linki PR przestrzeni roboczej" + "value": "Następna przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Todos os Links de PR da Área de Trabalho" + "value": "Próxima Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть все ссылки PR рабочего пространства" + "value": "Следующее рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดลิงก์ PR ทั้งหมดของเวิร์กสเปซ" + "value": "เวิร์กสเปซถัดไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tüm Çalışma Alanı PR Bağlantılarını Aç" + "value": "Sonraki Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити всі PR-посилання робочої області" + "value": "Наступна робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开工作区所有 PR 链接" + "value": "下一个工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟所有工作區 PR 連結" - } - } - } - }, - "command.openWorkspaceTodoPane.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Open Todo Pane" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Todoペインを開く" + "value": "下一個工作區" } } } }, - "command.pinTab.title": { + "command.openDiffViewer.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تثبيت اللسان" + "value": "فتح عارض الاختلافات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zakači tab" + "value": "Otvori preglednik razlika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fastgør fane" + "value": "Åbn diffvisning" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab anheften" + "value": "Diff-Viewer öffnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Pin Tab" + "value": "Open Diff Viewer" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fijar pestaña" + "value": "Abrir visor de diferencias" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Épingler l'onglet" + "value": "Ouvrir la visionneuse de diff" } }, "it": { "stringUnit": { "state": "translated", - "value": "Fissa scheda" + "value": "Apri visualizzatore diff" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブをピンで固定" + "value": "差分ビューアを開く" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Open Diff Viewer" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 고정" + "value": "Diff 뷰어 열기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fest fane" + "value": "Åpne diffvisning" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przypnij kartę" + "value": "Otwórz podgląd różnic" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fixar Aba" + "value": "Abrir visualizador de diff" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрепить вкладку" + "value": "Открыть просмотр diff" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปักหมุดแท็บ" + "value": "เปิดตัวดู diff" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Sabitle" + "value": "Diff Görüntüleyiciyi Aç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закріпити вкладку" + "value": "Відкрити переглядач diff" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "固定标签页" + "value": "打开差异查看器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "釘選標籤頁" + "value": "開啟差異檢視器" } } } }, - "command.pinWorkspace.title": { + "command.openDirectoryDiffViewer.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تثبيت مساحة العمل" + "value": "فتح عارض اختلافات المجلد" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zakači radni prostor" + "value": "Otvori preglednik razlika direktorija" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fastgør arbejdsområde" + "value": "Åbn diffvisning for mappe" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich anheften" + "value": "Verzeichnis-Diff-Ansicht öffnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Pin Workspace" + "value": "Open Directory Diff Viewer" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fijar espacio de trabajo" + "value": "Abrir visor de diferencias del directorio" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Épingler l'espace de travail" + "value": "Ouvrir le visualiseur de diff du répertoire" } }, "it": { "stringUnit": { "state": "translated", - "value": "Fissa area di lavoro" + "value": "Apri visualizzatore diff directory" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースをピンで固定" + "value": "ディレクトリ差分ビューアを開く" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បើកកម្មវិធីមើលភាពខុសគ្នារបស់ថត" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 고정" + "value": "디렉터리 차이 뷰어 열기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fest arbeidsområde" + "value": "Åpne differansevisning for mappe" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przypnij przestrzeń roboczą" + "value": "Otwórz podgląd różnic katalogu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fixar Área de Trabalho" + "value": "Abrir visualizador de diff do diretório" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрепить рабочее пространство" + "value": "Открыть просмотр различий каталога" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปักหมุดเวิร์กสเปซ" + "value": "เปิดตัวดูส่วนต่างของไดเรกทอรี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Sabitle" + "value": "Dizin fark görüntüleyicisini aç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закріпити робочу область" + "value": "Відкрити перегляд відмінностей каталогу" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "固定工作区" + "value": "打开目录差异查看器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "釘選工作區" + "value": "開啟目錄差異檢視器" } } } }, - "command.previousTabInPane.subtitle": { + "command.openFilesPane.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open Files as Pane" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ファイルをペインで開く" + } + } + } + }, + "command.openFindPane.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open Find as Pane" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "検索をペインで開く" + } + } + } + }, + "command.openFolder.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "التنقل بين الألسنة" + "value": "مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Navigacija tabovima" + "value": "Radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fanenavigation" + "value": "Arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab-Navigation" + "value": "Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Tab Navigation" + "value": "Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Navegación de pestañas" + "value": "Espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navigation par onglets" + "value": "Espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Navigazione schede" + "value": "Area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブナビゲーション" + "value": "ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 탐색" + "value": "작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fanenavigering" + "value": "Arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nawigacja po kartach" + "value": "Przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navegação de Abas" + "value": "Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Навигация по вкладкам" + "value": "Рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "การนำทางแท็บ" + "value": "เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme Gezinme" + "value": "Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Навігація вкладками" + "value": "Робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页导航" + "value": "工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁導覽" + "value": "工作區" } } } }, - "command.previousTabInPane.title": { + "command.openFolder.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اللسان السابق في اللوحة" + "value": "فتح مجلد…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prethodni tab u panelu" + "value": "Otvori folder…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Forrige fane i panel" + "value": "Åbn mappe…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vorheriger Tab im Bereich" + "value": "Ordner öffnen …" } }, "en": { "stringUnit": { "state": "translated", - "value": "Previous Tab in Pane" + "value": "Open Folder…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pestaña anterior en el panel" + "value": "Abrir carpeta…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Onglet précédent dans le panneau" + "value": "Ouvrir un dossier..." } }, "it": { "stringUnit": { "state": "translated", - "value": "Scheda precedente nel pannello" + "value": "Apri cartella…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペイン内の前のタブ" + "value": "フォルダを開く…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "패널 내 이전 탭" + "value": "폴더 열기…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Forrige fane i panelet" + "value": "Åpne mappe …" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Poprzednia karta w panelu" + "value": "Otwórz folder…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aba Anterior no Painel" + "value": "Abrir Pasta…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Предыдущая вкладка в панели" + "value": "Открыть папку..." } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บก่อนหน้าในบานหน้าต่าง" + "value": "เปิดโฟลเดอร์..." } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bölmedeki Önceki Sekme" + "value": "Klasör Aç…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Попередня вкладка в панелі" + "value": "Відкрити теку…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "上一个面板标签页" + "value": "打开文件夹..." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "面板中的上一個標籤頁" + "value": "開啟資料夾..." } } } }, - "command.previousWorkspace.subtitle": { + "command.openFolderInVSCodeInline.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VS Code Inline" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "VS Code インライン" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "VS Code 인라인" + } + } + } + }, + "command.openFolderInVSCodeInline.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open Folder in VS Code (Inline)…" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "フォルダを VS Code で開く(インライン)…" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "VS Code에서 폴더 열기 (인라인)…" + } + } + } + }, + "command.openGhosttySettings.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ghostty Config Files" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Ghostty設定ファイル" + } + } + } + }, + "command.openGhosttySettings.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open Ghostty Settings in TextEdit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Ghostty設定をTextEditで開く" + } + } + } + }, + "command.openRightSidebarToolAsPane.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Pane" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ペイン" + } + } + } + }, + "command.openSettings.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "التنقل بين مساحات العمل" + "value": "عام" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Navigacija radnim prostorima" + "value": "Globalno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområdenavigation" + "value": "Globalt" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich-Navigation" + "value": "Global" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace Navigation" + "value": "Global" } }, "es": { "stringUnit": { "state": "translated", - "value": "Navegación de espacios de trabajo" + "value": "Global" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navigation par espaces de travail" + "value": "Général" } }, "it": { "stringUnit": { "state": "translated", - "value": "Navigazione aree di lavoro" + "value": "Globale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースナビゲーション" + "value": "グローバル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 탐색" + "value": "전역" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområdenavigering" + "value": "Globalt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nawigacja po przestrzeniach roboczych" + "value": "Globalne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navegação de Áreas de Trabalho" + "value": "Global" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Навигация по рабочим пространствам" + "value": "Глобальные" } }, "th": { "stringUnit": { "state": "translated", - "value": "การนำทางเวิร์กสเปซ" + "value": "ทั่วไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı Gezinme" + "value": "Genel" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Навігація робочими областями" + "value": "Глобальна" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区导航" + "value": "全局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區導覽" + "value": "全域" } } } }, - "command.previousWorkspace.title": { + "command.openSettings.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل السابقة" + "value": "فتح الإعدادات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prethodni radni prostor" + "value": "Otvori postavke" } }, "da": { "stringUnit": { "state": "translated", - "value": "Forrige arbejdsområde" + "value": "Åbn indstillinger" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vorheriger Arbeitsbereich" + "value": "Einstellungen öffnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Previous Workspace" + "value": "Open Settings" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo anterior" + "value": "Abrir ajustes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail précédent" + "value": "Ouvrir les réglages" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro precedente" + "value": "Apri impostazioni" } }, "ja": { "stringUnit": { "state": "translated", - "value": "前のワークスペース" + "value": "設定を開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이전 작업 공간" + "value": "설정 열기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Forrige arbeidsområde" + "value": "Åpne innstillinger" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Poprzednia przestrzeń robocza" + "value": "Otwórz ustawienia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho Anterior" + "value": "Abrir Ajustes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Предыдущее рабочее пространство" + "value": "Открыть настройки" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซก่อนหน้า" + "value": "เปิดการตั้งค่า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Önceki Çalışma Alanı" + "value": "Ayarları Aç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Попередня робоча область" + "value": "Відкрити налаштування" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "上一个工作区" + "value": "打开设置" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "上一個工作區" - } - } - } - }, - "command.pro.upgrade.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Upgrade to cmux Pro" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux Proにアップグレード" + "value": "開啟設定" } } } }, - "command.pro.welcomeChecklist.title": { + "command.openVaultPane.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Welcome to cmux Pro" + "value": "Open Vault as Pane" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux Pro へようこそ" + "value": "Vaultをペインで開く" } } } }, - "command.renameTab.title": { + "command.openWorkspacePRLinks.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية اللسان…" + "value": "فتح جميع روابط طلبات السحب في مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preimenuj tab…" + "value": "Otvori sve PR linkove radnog prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Omdøb fane…" + "value": "Åbn alle PR-links for arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab umbenennen …" + "value": "Alle PR-Links des Arbeitsbereichs öffnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Rename Tab…" + "value": "Open All Workspace PR Links" } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar pestaña…" + "value": "Abrir todos los enlaces de PR del espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer l'onglet..." + "value": "Ouvrir tous les liens PR de l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rinomina scheda…" + "value": "Apri tutti i link PR dell'area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブの名称変更…" + "value": "ワークスペースのPRリンクをすべて開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 이름 변경…" + "value": "작업 공간 PR 링크 모두 열기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gi fanen nytt navn …" + "value": "Åpne alle PR-lenker for arbeidsområdet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę karty…" + "value": "Otwórz wszystkie linki PR przestrzeni roboczej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Renomear Aba…" + "value": "Abrir Todos os Links de PR da Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переименовать вкладку..." + "value": "Открыть все ссылки PR рабочего пространства" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อแท็บ..." + "value": "เปิดลิงก์ PR ทั้งหมดของเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Yeniden Adlandır…" + "value": "Tüm Çalışma Alanı PR Bağlantılarını Aç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейменувати вкладку…" + "value": "Відкрити всі PR-посилання робочої області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名标签页..." + "value": "打开工作区所有 PR 链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名標籤頁..." + "value": "開啟所有工作區 PR 連結" } } } }, - "command.renameWorkspace.title": { + "command.openWorkspaceTodoPane.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open Todo Pane" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Todoペインを開く" + } + } + } + }, + "command.pinTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية مساحة العمل…" + "value": "تثبيت اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preimenuj radni prostor…" + "value": "Zakači tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Omdøb arbejdsområde…" + "value": "Fastgør fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich umbenennen …" + "value": "Tab anheften" } }, "en": { "stringUnit": { "state": "translated", - "value": "Rename Workspace…" + "value": "Pin Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar espacio de trabajo…" + "value": "Fijar pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer l'espace de travail..." + "value": "Épingler l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rinomina area di lavoro…" + "value": "Fissa scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースの名称変更…" + "value": "タブをピンで固定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름 변경…" + "value": "탭 고정" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gi arbeidsområdet nytt navn …" + "value": "Fest fane" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę przestrzeni roboczej…" + "value": "Przypnij kartę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Renomear Área de Trabalho…" + "value": "Fixar Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переименовать рабочее пространство..." + "value": "Закрепить вкладку" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อเวิร์กสเปซ..." + "value": "ปักหมุดแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Yeniden Adlandır…" + "value": "Sekmeyi Sabitle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейменувати робочу область…" + "value": "Закріпити вкладку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名工作区..." + "value": "固定标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名工作區..." + "value": "釘選標籤頁" } } } }, - "command.reopenClosedBrowserTab.subtitle": { + "command.pinWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "المتصفح" + "value": "تثبيت مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preglednik" + "value": "Zakači radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Fastgør arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Arbeitsbereich anheften" } }, "en": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Pin Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Navegador" + "value": "Fijar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navigateur" + "value": "Épingler l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Fissa area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "value": "ワークスペースをピンで固定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저" + "value": "작업 공간 고정" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nettleser" + "value": "Fest arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przeglądarka" + "value": "Przypnij przestrzeń roboczą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navegador" + "value": "Fixar Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Браузер" + "value": "Закрепить рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "เบราว์เซอร์" + "value": "ปักหมุดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı" + "value": "Çalışma Alanını Sabitle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Браузер" + "value": "Закріпити робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "浏览器" + "value": "固定工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瀏覽器" + "value": "釘選工作區" } } } }, - "command.reopenClosedBrowserTab.title": { + "command.previousTabInPane.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة فتح لسان المتصفح المغلق" + "value": "التنقل بين الألسنة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ponovo otvori zatvoreni tab preglednika" + "value": "Navigacija tabovima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Genåbn lukket browserfane" + "value": "Fanenavigation" } }, "de": { "stringUnit": { "state": "translated", - "value": "Geschlossenen Browser-Tab erneut öffnen" + "value": "Tab-Navigation" } }, "en": { "stringUnit": { "state": "translated", - "value": "Reopen Closed Browser Tab" + "value": "Tab Navigation" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reabrir pestaña del navegador cerrada" + "value": "Navegación de pestañas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Rouvrir l'onglet de navigateur fermé" + "value": "Navigation par onglets" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riapri scheda browser chiusa" + "value": "Navigazione schede" } }, "ja": { "stringUnit": { "state": "translated", - "value": "閉じたブラウザタブを再度開く" + "value": "タブナビゲーション" } }, "ko": { "stringUnit": { "state": "translated", - "value": "닫은 브라우저 탭 다시 열기" + "value": "탭 탐색" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne lukket nettleserfane på nytt" + "value": "Fanenavigering" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz ponownie zamkniętą kartę przeglądarki" + "value": "Nawigacja po kartach" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Reabrir Aba do Navegador Fechada" + "value": "Navegação de Abas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть закрытую вкладку браузера" + "value": "Навигация по вкладкам" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดแท็บเบราว์เซอร์ที่ปิดไปอีกครั้ง" + "value": "การนำทางแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kapatılan Tarayıcı Sekmesini Yeniden Aç" + "value": "Sekme Gezinme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відновити закриту вкладку браузера" + "value": "Навігація вкладками" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重新打开已关闭的浏览器标签页" + "value": "标签页导航" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新開啟已關閉的瀏覽器標籤頁" + "value": "標籤頁導覽" } } } }, - "command.reopenPreviousSession.subtitle": { + "command.previousTabInPane.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "History" + "value": "اللسان السابق في اللوحة" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "履歴" + "value": "Prethodni tab u panelu" } - } - } - }, - "command.reopenPreviousSession.title": { - "extractionState": "manual", - "localizations": { + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Forrige fane i panel" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Vorheriger Tab im Bereich" + } + }, "en": { "stringUnit": { "state": "translated", - "value": "Restore Previous App Launch" + "value": "Previous Tab in Pane" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Pestaña anterior en el panel" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Onglet précédent dans le panneau" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Scheda precedente nel pannello" } }, "ja": { "stringUnit": { "state": "translated", - "value": "前回のアプリ起動を復元" + "value": "ペイン内の前のタブ" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "패널 내 이전 탭" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Forrige fane i panelet" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Poprzednia karta w panelu" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Aba Anterior no Painel" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предыдущая вкладка в панели" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "แท็บก่อนหน้าในบานหน้าต่าง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bölmedeki Önceki Sekme" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Попередня вкладка в панелі" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "上一个面板标签页" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "面板中的上一個標籤頁" } } } }, - "command.restartSocketListener.subtitle": { + "command.previousWorkspace.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عام" + "value": "التنقل بين مساحات العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Globalno" + "value": "Navigacija radnim prostorima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Arbejdsområdenavigation" } }, "de": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Arbeitsbereich-Navigation" } }, "en": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Workspace Navigation" } }, "es": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Navegación de espacios de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Général" + "value": "Navigation par espaces de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Globale" + "value": "Navigazione aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グローバル" + "value": "ワークスペースナビゲーション" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전역" + "value": "작업 공간 탐색" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Globalt" + "value": "Arbeidsområdenavigering" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Globalne" + "value": "Nawigacja po przestrzeniach roboczych" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Global" + "value": "Navegação de Áreas de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Глобальные" + "value": "Навигация по рабочим пространствам" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทั่วไป" + "value": "การนำทางเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel" + "value": "Çalışma Alanı Gezinme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Глобальна" + "value": "Навігація робочими областями" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "全局" + "value": "工作区导航" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "全域" + "value": "工作區導覽" } } } }, - "command.restartSocketListener.title": { + "command.previousWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تشغيل مستمع واجهة الأوامر" + "value": "مساحة العمل السابقة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ponovo pokreni CLI osluškivač" + "value": "Prethodni radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Genstart CLI-lytter" + "value": "Forrige arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "CLI-Listener neu starten" + "value": "Vorheriger Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Restart CLI Listener" + "value": "Previous Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reiniciar receptor de CLI" + "value": "Espacio de trabajo anterior" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Redémarrer l'écouteur CLI" + "value": "Espace de travail précédent" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riavvia listener CLI" + "value": "Area di lavoro precedente" } }, "ja": { "stringUnit": { "state": "translated", - "value": "CLIリスナーを再起動" + "value": "前のワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "CLI 리스너 재시작" + "value": "이전 작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Start CLI-lytteren på nytt" + "value": "Forrige arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uruchom ponownie nasłuchiwanie CLI" + "value": "Poprzednia przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Reiniciar Listener do CLI" + "value": "Área de Trabalho Anterior" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Перезапустить прослушиватель CLI" + "value": "Предыдущее рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "รีสตาร์ตตัวรับฟัง CLI" + "value": "เวิร์กสเปซก่อนหน้า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "CLI Dinleyicisini Yeniden Başlat" + "value": "Önceki Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перезапустити слухач CLI" + "value": "Попередня робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重启 CLI 监听器" + "value": "上一个工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新啟動 CLI 監聽器" - } - } - } - }, - "command.rightSidebarMode.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Right Sidebar" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "右サイドバー" - } - } - } - }, - "command.savedLayout.openNamed.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "New Workspace from Layout: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レイアウトから新規ワークスペースを作成: %@" + "value": "上一個工作區" } } } }, - "command.savedLayout.saveCurrent.title": { + "command.pro.upgrade.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Save Layout as Template…" + "value": "Upgrade to cmux Pro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "レイアウトをテンプレートとして保存…" + "value": "cmux Proにアップグレード" } } } }, - "command.savedLayout.subtitle": { + "command.pro.welcomeChecklist.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Saved Layouts" + "value": "Welcome to cmux Pro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "保存済みレイアウト" + "value": "cmux Pro へようこそ" } } } }, - "command.showNotifications.subtitle": { + "command.renameTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الإشعارات" + "value": "إعادة تسمية اللسان…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obavještenja" + "value": "Preimenuj tab…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Notifikationer" + "value": "Omdøb fane…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen" + "value": "Tab umbenennen …" } }, "en": { "stringUnit": { "state": "translated", - "value": "Notifications" + "value": "Rename Tab…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Notificaciones" + "value": "Renombrar pestaña…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Notifications" + "value": "Renommer l'onglet..." } }, "it": { "stringUnit": { "state": "translated", - "value": "Notifiche" + "value": "Rinomina scheda…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "タブの名称変更…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림" + "value": "탭 이름 변경…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Varsler" + "value": "Gi fanen nytt navn …" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Powiadomienia" + "value": "Zmień nazwę karty…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Notificações" + "value": "Renomear Aba…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Уведомления" + "value": "Переименовать вкладку..." } }, "th": { "stringUnit": { "state": "translated", - "value": "การแจ้งเตือน" + "value": "เปลี่ยนชื่อแท็บ..." } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bildirimler" + "value": "Sekmeyi Yeniden Adlandır…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сповіщення" + "value": "Перейменувати вкладку…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "重命名标签页..." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "重新命名標籤頁..." } } } }, - "command.showNotifications.title": { + "command.renameWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عرض الإشعارات" + "value": "إعادة تسمية مساحة العمل…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prikaži obavještenja" + "value": "Preimenuj radni prostor…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vis notifikationer" + "value": "Omdøb arbejdsområde…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen anzeigen" + "value": "Arbeitsbereich umbenennen …" } }, "en": { "stringUnit": { "state": "translated", - "value": "Show Notifications" + "value": "Rename Workspace…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar notificaciones" + "value": "Renombrar espacio de trabajo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher les notifications" + "value": "Renommer l'espace de travail..." } }, "it": { "stringUnit": { "state": "translated", - "value": "Mostra notifiche" + "value": "Rinomina area di lavoro…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "通知を表示" + "value": "ワークスペースの名称変更…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림 표시" + "value": "작업 공간 이름 변경…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vis varsler" + "value": "Gi arbeidsområdet nytt navn …" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pokaż powiadomienia" + "value": "Zmień nazwę przestrzeni roboczej…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mostrar Notificações" + "value": "Renomear Área de Trabalho…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Показать уведомления" + "value": "Переименовать рабочее пространство..." } }, "th": { "stringUnit": { "state": "translated", - "value": "แสดงการแจ้งเตือน" + "value": "เปลี่ยนชื่อเวิร์กสเปซ..." } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bildirimleri Göster" + "value": "Çalışma Alanını Yeniden Adlandır…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Показати сповіщення" + "value": "Перейменувати робочу область…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示通知" + "value": "重命名工作区..." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示通知" - } - } - } - }, - "command.sleepyMode.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "View" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "表示" - } - } - } - }, - "command.sleepyMode.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sleepy Mode" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "おやすみモード" - } - } - } - }, - "command.switchExtensionSidebar.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Choose Sidebar" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "サイドバーを選択" - } - } - } - }, - "command.switchExtensionSidebar.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sidebar: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "サイドバー: %@" + "value": "重新命名工作區..." } } } }, - "command.terminalAttachTextBoxFile.title": { + "command.reopenClosedBrowserTab.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "المتصفح" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Preglednik" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Browser" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Browser" } }, "en": { "stringUnit": { "state": "translated", - "value": "Attach File to TextBox Input" + "value": "Browser" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Navegador" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Navigateur" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Browser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "TextBox入力にファイルを添付" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "value": "ブラウザ" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "브라우저" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Nettleser" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Przeglądarka" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Navegador" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Браузер" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "เบราว์เซอร์" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Tarayıcı" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "Браузер" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "浏览器" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Attach File to TextBox Input" + "state": "translated", + "value": "瀏覽器" } } } }, - "command.terminalClearScreenKeepScrollback.title": { + "command.reopenClosedBrowserTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "إعادة فتح لسان المتصفح المغلق" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Ponovo otvori zatvoreni tab preglednika" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Genåbn lukket browserfane" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Geschlossenen Browser-Tab erneut öffnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Clear Screen (Keep Scrollback)" + "value": "Reopen Closed Browser Tab" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Reabrir pestaña del navegador cerrada" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Rouvrir l'onglet de navigateur fermé" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Riapri scheda browser chiusa" } }, "ja": { "stringUnit": { "state": "translated", - "value": "画面をクリア(スクロールバックを保持)" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "value": "閉じたブラウザタブを再度開く" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "닫은 브라우저 탭 다시 열기" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Åpne lukket nettleserfane på nytt" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Otwórz ponownie zamkniętą kartę przeglądarki" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Reabrir Aba do Navegador Fechada" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Открыть закрытую вкладку браузера" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "เปิดแท็บเบราว์เซอร์ที่ปิดไปอีกครั้ง" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Kapatılan Tarayıcı Sekmesini Yeniden Aç" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "Відновити закриту вкладку браузера" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "重新打开已关闭的浏览器标签页" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Clear Screen (Keep Scrollback)" + "state": "translated", + "value": "重新開啟已關閉的瀏覽器標籤頁" } } } }, - "command.terminalFind.title": { + "command.reopenPreviousSession.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "History" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "履歴" + } + } + } + }, + "command.reopenPreviousSession.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Restore Previous App Launch" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "前回のアプリ起動を復元" + } + } + } + }, + "command.restartSocketListener.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "بحث…" + "value": "عام" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pronađi…" + "value": "Globalno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Søg…" + "value": "Globalt" } }, "de": { "stringUnit": { "state": "translated", - "value": "Suchen …" + "value": "Global" } }, "en": { "stringUnit": { "state": "translated", - "value": "Find…" + "value": "Global" } }, "es": { "stringUnit": { "state": "translated", - "value": "Buscar…" + "value": "Global" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Rechercher..." + "value": "Général" } }, "it": { "stringUnit": { "state": "translated", - "value": "Trova…" + "value": "Globale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "検索…" + "value": "グローバル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "찾기…" + "value": "전역" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Finn …" + "value": "Globalt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Znajdź…" + "value": "Globalne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Buscar…" + "value": "Global" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Найти..." + "value": "Глобальные" } }, "th": { "stringUnit": { "state": "translated", - "value": "ค้นหา..." + "value": "ทั่วไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bul…" + "value": "Genel" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Знайти…" + "value": "Глобальна" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "查找..." + "value": "全局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尋找..." + "value": "全域" } } } }, - "command.terminalFindNext.title": { + "command.restartSocketListener.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "البحث عن التالي" + "value": "إعادة تشغيل مستمع واجهة الأوامر" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pronađi sljedeće" + "value": "Ponovo pokreni CLI osluškivač" } }, "da": { "stringUnit": { "state": "translated", - "value": "Find næste" + "value": "Genstart CLI-lytter" } }, "de": { "stringUnit": { "state": "translated", - "value": "Weitersuchen" + "value": "CLI-Listener neu starten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Find Next" + "value": "Restart CLI Listener" } }, "es": { "stringUnit": { "state": "translated", - "value": "Buscar siguiente" + "value": "Reiniciar receptor de CLI" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Résultat suivant" + "value": "Redémarrer l'écouteur CLI" } }, "it": { "stringUnit": { "state": "translated", - "value": "Trova successivo" + "value": "Riavvia listener CLI" } }, "ja": { "stringUnit": { "state": "translated", - "value": "次を検索" + "value": "CLIリスナーを再起動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다음 찾기" + "value": "CLI 리스너 재시작" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Finn neste" + "value": "Start CLI-lytteren på nytt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Znajdź następny" + "value": "Uruchom ponownie nasłuchiwanie CLI" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Buscar Próximo" + "value": "Reiniciar Listener do CLI" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Найти далее" + "value": "Перезапустить прослушиватель CLI" } }, "th": { "stringUnit": { "state": "translated", - "value": "ค้นหาถัดไป" + "value": "รีสตาร์ตตัวรับฟัง CLI" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sonrakini Bul" + "value": "CLI Dinleyicisini Yeniden Başlat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Знайти наступне" + "value": "Перезапустити слухач CLI" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "查找下一个" + "value": "重启 CLI 监听器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尋找下一個" + "value": "重新啟動 CLI 監聽器" } } } }, - "command.terminalFindPrevious.title": { + "command.rightSidebarMode.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Right Sidebar" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "右サイドバー" + } + } + } + }, + "command.savedLayout.openNamed.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "New Workspace from Layout: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "レイアウトから新規ワークスペースを作成: %@" + } + } + } + }, + "command.savedLayout.saveCurrent.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Save Layout as Template…" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "レイアウトをテンプレートとして保存…" + } + } + } + }, + "command.savedLayout.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Saved Layouts" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "保存済みレイアウト" + } + } + } + }, + "command.showNotifications.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "البحث عن السابق" + "value": "الإشعارات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pronađi prethodno" + "value": "Obavještenja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Find forrige" + "value": "Notifikationer" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vorheriges suchen" + "value": "Benachrichtigungen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Find Previous" + "value": "Notifications" } }, "es": { "stringUnit": { "state": "translated", - "value": "Buscar anterior" + "value": "Notificaciones" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Résultat précédent" + "value": "Notifications" } }, "it": { "stringUnit": { "state": "translated", - "value": "Trova precedente" + "value": "Notifiche" } }, "ja": { "stringUnit": { "state": "translated", - "value": "前を検索" + "value": "通知" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이전 찾기" + "value": "알림" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Finn forrige" + "value": "Varsler" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Znajdź poprzedni" + "value": "Powiadomienia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Buscar Anterior" + "value": "Notificações" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Найти ранее" + "value": "Уведомления" } }, "th": { "stringUnit": { "state": "translated", - "value": "ค้นหาก่อนหน้า" + "value": "การแจ้งเตือน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Öncekini Bul" + "value": "Bildirimler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Знайти попереднє" + "value": "Сповіщення" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "查找上一个" + "value": "通知" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尋找上一個" + "value": "通知" } } } }, - "command.terminalFocusTextBoxInput.title": { + "command.showNotifications.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "عرض الإشعارات" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Prikaži obavještenja" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Vis notifikationer" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Benachrichtigungen anzeigen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Focus TextBox Input" + "value": "Show Notifications" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Mostrar notificaciones" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Afficher les notifications" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Mostra notifiche" } }, "ja": { "stringUnit": { "state": "translated", - "value": "TextBox入力にフォーカス" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "value": "通知を表示" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "알림 표시" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Vis varsler" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Pokaż powiadomienia" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Mostrar Notificações" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Показать уведомления" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "แสดงการแจ้งเตือน" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Bildirimleri Göster" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "Показати сповіщення" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "显示通知" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Focus TextBox Input" + "state": "translated", + "value": "顯示通知" } } } }, - "command.terminalHideFind.title": { + "command.sleepyMode.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "إخفاء شريط البحث" + "value": "View" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Sakrij traku za pretragu" + "value": "表示" + } + } + } + }, + "command.sleepyMode.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sleepy Mode" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Skjul søgelinje" + "value": "おやすみモード" + } + } + } + }, + "command.switchExtensionSidebar.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose Sidebar" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Suchleiste ausblenden" + "value": "サイドバーを選択" + } + } + } + }, + "command.switchExtensionSidebar.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sidebar: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サイドバー: %@" + } + } + } + }, + "command.terminalAttachTextBoxFile.title": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "Attach File to TextBox Input" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Attach File to TextBox Input" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Attach File to TextBox Input" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "en": { "stringUnit": { "state": "translated", - "value": "Hide Find Bar" + "value": "Attach File to TextBox Input" } }, "es": { "stringUnit": { - "state": "translated", - "value": "Ocultar barra de búsqueda" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "fr": { "stringUnit": { - "state": "translated", - "value": "Masquer la barre de recherche" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "it": { "stringUnit": { - "state": "translated", - "value": "Nascondi barra di ricerca" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "ja": { "stringUnit": { "state": "translated", - "value": "検索バーを非表示" + "value": "TextBox入力にファイルを添付" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "ko": { "stringUnit": { - "state": "translated", - "value": "찾기 막대 숨기기" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Skjul søkelinje" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Ukryj pasek wyszukiwania" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Ocultar Barra de Busca" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Скрыть панель поиска" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "th": { "stringUnit": { - "state": "translated", - "value": "ซ่อนแถบค้นหา" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Arama Çubuğunu Gizle" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Сховати панель пошуку" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "zh-Hans": { "stringUnit": { - "state": "translated", - "value": "隐藏查找栏" + "state": "needs_review", + "value": "Attach File to TextBox Input" } }, "zh-Hant": { "stringUnit": { - "state": "translated", - "value": "隱藏尋找列" + "state": "needs_review", + "value": "Attach File to TextBox Input" } } } }, - "command.terminalSendCtrlF.title": { + "command.terminalClearScreenKeepScrollback.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "en": { "stringUnit": { "state": "translated", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルにCtrl-Fを送信" + "value": "画面をクリア(スクロールバックを保持)" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "Send Ctrl-F to Terminal" + "value": "Clear Screen (Keep Scrollback)" } } } }, - "command.terminalSplitBrowserDown.subtitle": { + "command.terminalFind.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تخطيط الطرفية" + "value": "بحث…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Raspored terminala" + "value": "Pronađi…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Terminallayout" + "value": "Søg…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal-Layout" + "value": "Suchen …" } }, "en": { "stringUnit": { "state": "translated", - "value": "Terminal Layout" + "value": "Find…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Disposición del terminal" + "value": "Buscar…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Disposition du terminal" + "value": "Rechercher..." } }, "it": { "stringUnit": { "state": "translated", - "value": "Layout terminale" + "value": "Trova…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルレイアウト" + "value": "検索…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 레이아웃" + "value": "찾기…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Terminaloppsett" + "value": "Finn …" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Układ terminala" + "value": "Znajdź…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Layout do Terminal" + "value": "Buscar…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Макет терминала" + "value": "Найти..." } }, "th": { "stringUnit": { "state": "translated", - "value": "เค้าโครงเทอร์มินัล" + "value": "ค้นหา..." } }, "tr": { "stringUnit": { "state": "translated", - "value": "Terminal Düzeni" + "value": "Bul…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Макет терміналу" + "value": "Знайти…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "终端布局" + "value": "查找..." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終端機版面" + "value": "尋找..." } } } }, - "command.terminalSplitBrowserDown.title": { + "command.terminalFindNext.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تقسيم المتصفح للأسفل" + "value": "البحث عن التالي" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Podijeli preglednik dolje" + "value": "Pronađi sljedeće" } }, "da": { "stringUnit": { "state": "translated", - "value": "Opdel browser nedad" + "value": "Find næste" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser nach unten teilen" + "value": "Weitersuchen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Split Browser Down" + "value": "Find Next" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dividir navegador hacia abajo" + "value": "Buscar siguiente" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Diviser le navigateur vers le bas" + "value": "Résultat suivant" } }, "it": { "stringUnit": { "state": "translated", - "value": "Dividi browser in basso" + "value": "Trova successivo" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザを下に分割" + "value": "次を検索" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저를 아래로 분할" + "value": "다음 찾기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Del nettleser ned" + "value": "Finn neste" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podziel przeglądarkę w dół" + "value": "Znajdź następny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Dividir Navegador para Baixo" + "value": "Buscar Próximo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разделить браузер вниз" + "value": "Найти далее" } }, "th": { "stringUnit": { "state": "translated", - "value": "แยกเบราว์เซอร์ลงล่าง" + "value": "ค้นหาถัดไป" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcıyı Aşağı Böl" + "value": "Sonrakini Bul" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Розділити браузер вниз" + "value": "Знайти наступне" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向下拆分浏览器" + "value": "查找下一个" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "向下分割瀏覽器" + "value": "尋找下一個" } } } }, - "command.terminalSplitBrowserRight.subtitle": { + "command.terminalFindPrevious.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تخطيط الطرفية" + "value": "البحث عن السابق" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Raspored terminala" + "value": "Pronađi prethodno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Terminallayout" + "value": "Find forrige" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal-Layout" + "value": "Vorheriges suchen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Terminal Layout" + "value": "Find Previous" } }, "es": { "stringUnit": { "state": "translated", - "value": "Disposición del terminal" + "value": "Buscar anterior" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Disposition du terminal" + "value": "Résultat précédent" } }, "it": { "stringUnit": { "state": "translated", - "value": "Layout terminale" + "value": "Trova precedente" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルレイアウト" + "value": "前を検索" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 레이아웃" + "value": "이전 찾기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Terminaloppsett" + "value": "Finn forrige" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Układ terminala" + "value": "Znajdź poprzedni" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Layout do Terminal" + "value": "Buscar Anterior" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Макет терминала" + "value": "Найти ранее" } }, "th": { "stringUnit": { "state": "translated", - "value": "เค้าโครงเทอร์มินัล" + "value": "ค้นหาก่อนหน้า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Terminal Düzeni" + "value": "Öncekini Bul" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Макет терміналу" + "value": "Знайти попереднє" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "终端布局" + "value": "查找上一个" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終端機版面" + "value": "尋找上一個" } } } }, - "command.terminalSplitBrowserRight.title": { + "command.terminalFocusTextBoxInput.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { - "state": "translated", - "value": "تقسيم المتصفح لليمين" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Podijeli preglednik desno" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "da": { "stringUnit": { - "state": "translated", - "value": "Opdel browser til højre" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "de": { "stringUnit": { - "state": "translated", - "value": "Browser nach rechts teilen" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "en": { "stringUnit": { "state": "translated", - "value": "Split Browser Right" + "value": "Focus TextBox Input" } }, "es": { "stringUnit": { - "state": "translated", - "value": "Dividir navegador a la derecha" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "fr": { "stringUnit": { - "state": "translated", - "value": "Diviser le navigateur à droite" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "it": { "stringUnit": { - "state": "translated", - "value": "Dividi browser a destra" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザを右に分割" + "value": "TextBox入力にフォーカス" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Focus TextBox Input" } }, "ko": { "stringUnit": { - "state": "translated", - "value": "브라우저를 오른쪽으로 분할" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Del nettleser til høyre" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Podziel przeglądarkę w prawo" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Dividir Navegador à Direita" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Разделить браузер вправо" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "th": { "stringUnit": { - "state": "translated", - "value": "แยกเบราว์เซอร์ไปทางขวา" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Tarayıcıyı Sağa Böl" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Розділити браузер праворуч" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "zh-Hans": { "stringUnit": { - "state": "translated", - "value": "向右拆分浏览器" + "state": "needs_review", + "value": "Focus TextBox Input" } }, "zh-Hant": { "stringUnit": { - "state": "translated", - "value": "向右分割瀏覽器" + "state": "needs_review", + "value": "Focus TextBox Input" } } } }, - "command.terminalSplitDown.subtitle": { + "command.terminalHideFind.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تخطيط الطرفية" + "value": "إخفاء شريط البحث" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Raspored terminala" + "value": "Sakrij traku za pretragu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Terminallayout" + "value": "Skjul søgelinje" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal-Layout" + "value": "Suchleiste ausblenden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Terminal Layout" + "value": "Hide Find Bar" } }, "es": { "stringUnit": { "state": "translated", - "value": "Disposición del terminal" + "value": "Ocultar barra de búsqueda" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Disposition du terminal" + "value": "Masquer la barre de recherche" } }, "it": { "stringUnit": { "state": "translated", - "value": "Layout terminale" + "value": "Nascondi barra di ricerca" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルレイアウト" + "value": "検索バーを非表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 레이아웃" + "value": "찾기 막대 숨기기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Terminaloppsett" + "value": "Skjul søkelinje" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Układ terminala" + "value": "Ukryj pasek wyszukiwania" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Layout do Terminal" + "value": "Ocultar Barra de Busca" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Макет терминала" + "value": "Скрыть панель поиска" } }, "th": { "stringUnit": { "state": "translated", - "value": "เค้าโครงเทอร์มินัล" + "value": "ซ่อนแถบค้นหา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Terminal Düzeni" + "value": "Arama Çubuğunu Gizle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Макет терміналу" + "value": "Сховати панель пошуку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "终端布局" + "value": "隐藏查找栏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終端機版面" + "value": "隱藏尋找列" } } } }, - "command.terminalSplitDown.title": { + "command.terminalSendCtrlF.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { - "state": "translated", - "value": "تقسيم للأسفل" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Podijeli dolje" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "da": { "stringUnit": { - "state": "translated", - "value": "Opdel nedad" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "de": { "stringUnit": { - "state": "translated", - "value": "Nach unten teilen" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "en": { "stringUnit": { "state": "translated", - "value": "Split Down" + "value": "Send Ctrl-F to Terminal" } }, "es": { "stringUnit": { - "state": "translated", - "value": "Dividir hacia abajo" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "fr": { "stringUnit": { - "state": "translated", - "value": "Diviser vers le bas" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "it": { "stringUnit": { - "state": "translated", - "value": "Dividi in basso" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "下に分割" + "value": "ターミナルにCtrl-Fを送信" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "ko": { "stringUnit": { - "state": "translated", - "value": "아래로 분할" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Del ned" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Podziel w dół" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Dividir para Baixo" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Разделить вниз" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "th": { "stringUnit": { - "state": "translated", - "value": "แยกลงล่าง" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Aşağı Böl" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Розділити вниз" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "zh-Hans": { "stringUnit": { - "state": "translated", - "value": "向下拆分" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } }, "zh-Hant": { "stringUnit": { - "state": "translated", - "value": "向下分割" + "state": "needs_review", + "value": "Send Ctrl-F to Terminal" } } } }, - "command.terminalSplitRight.subtitle": { + "command.terminalSplitBrowserDown.subtitle": { "extractionState": "manual", "localizations": { "ar": { @@ -58949,18177 +59087,19743 @@ } } }, - "command.terminalSplitRight.title": { + "command.terminalSplitBrowserDown.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تقسيم لليمين" + "value": "تقسيم المتصفح للأسفل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Podijeli desno" + "value": "Podijeli preglednik dolje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Opdel til højre" + "value": "Opdel browser nedad" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nach rechts teilen" + "value": "Browser nach unten teilen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Split Right" + "value": "Split Browser Down" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dividir a la derecha" + "value": "Dividir navegador hacia abajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Diviser à droite" + "value": "Diviser le navigateur vers le bas" } }, "it": { "stringUnit": { "state": "translated", - "value": "Dividi a destra" + "value": "Dividi browser in basso" } }, "ja": { "stringUnit": { "state": "translated", - "value": "右に分割" + "value": "ブラウザを下に分割" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오른쪽으로 분할" + "value": "브라우저를 아래로 분할" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Del til høyre" + "value": "Del nettleser ned" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podziel w prawo" + "value": "Podziel przeglądarkę w dół" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Dividir à Direita" + "value": "Dividir Navegador para Baixo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разделить вправо" + "value": "Разделить браузер вниз" } }, "th": { "stringUnit": { "state": "translated", - "value": "แยกไปทางขวา" + "value": "แยกเบราว์เซอร์ลงล่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sağa Böl" + "value": "Tarayıcıyı Aşağı Böl" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Розділити праворуч" + "value": "Розділити браузер вниз" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向右拆分" + "value": "向下拆分浏览器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "向右分割" + "value": "向下分割瀏覽器" } } } }, - "command.terminalToggleTextBoxInput.title": { + "command.terminalSplitBrowserRight.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "تخطيط الطرفية" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Raspored terminala" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Terminallayout" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Terminal-Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Toggle TextBox Input" + "value": "Terminal Layout" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Disposición del terminal" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Disposition du terminal" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Layout terminale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "TextBox入力を切り替え" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "value": "ターミナルレイアウト" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "터미널 레이아웃" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Terminaloppsett" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Układ terminala" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Layout do Terminal" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Макет терминала" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "เค้าโครงเทอร์มินัล" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Terminal Düzeni" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "Макет терміналу" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "终端布局" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Toggle TextBox Input" + "state": "translated", + "value": "終端機版面" } } } }, - "command.terminalUseSelectionForFind.title": { + "command.terminalSplitBrowserRight.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "استخدام التحديد للبحث" + "value": "تقسيم المتصفح لليمين" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Koristi odabrano za pretragu" + "value": "Podijeli preglednik desno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Brug markering til søgning" + "value": "Opdel browser til højre" } }, "de": { "stringUnit": { "state": "translated", - "value": "Auswahl für Suche verwenden" + "value": "Browser nach rechts teilen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Use Selection for Find" + "value": "Split Browser Right" } }, "es": { "stringUnit": { "state": "translated", - "value": "Usar selección para buscar" + "value": "Dividir navegador a la derecha" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utiliser la sélection pour la recherche" + "value": "Diviser le navigateur à droite" } }, "it": { "stringUnit": { "state": "translated", - "value": "Usa selezione per la ricerca" + "value": "Dividi browser a destra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択範囲を検索に使用" + "value": "ブラウザを右に分割" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택 항목을 찾기에 사용" + "value": "브라우저를 오른쪽으로 분할" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Bruk utvalg for søk" + "value": "Del nettleser til høyre" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Użyj zaznaczenia do wyszukiwania" + "value": "Podziel przeglądarkę w prawo" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Usar Seleção para Busca" + "value": "Dividir Navegador à Direita" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Использовать выделение для поиска" + "value": "Разделить браузер вправо" } }, "th": { "stringUnit": { "state": "translated", - "value": "ใช้ข้อความที่เลือกเพื่อค้นหา" + "value": "แยกเบราว์เซอร์ไปทางขวา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Seçimi Bulmak İçin Kullan" + "value": "Tarayıcıyı Sağa Böl" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Використати виділення для пошуку" + "value": "Розділити браузер праворуч" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "使用选中内容查找" + "value": "向右拆分浏览器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "使用所選範圍來尋找" + "value": "向右分割瀏覽器" } } } }, - "command.toggleFullScreen.subtitle": { + "command.terminalSplitDown.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نافذة" + "value": "تخطيط الطرفية" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prozor" + "value": "Raspored terminala" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vindue" + "value": "Terminallayout" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fenster" + "value": "Terminal-Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Window" + "value": "Terminal Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana" + "value": "Disposición del terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fenêtre" + "value": "Disposition du terminal" } }, "it": { "stringUnit": { "state": "translated", - "value": "Finestra" + "value": "Layout terminale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウインドウ" + "value": "ターミナルレイアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "윈도우" + "value": "터미널 레이아웃" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vindu" + "value": "Terminaloppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Okno" + "value": "Układ terminala" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Janela" + "value": "Layout do Terminal" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Окно" + "value": "Макет терминала" } }, "th": { "stringUnit": { "state": "translated", - "value": "หน้าต่าง" + "value": "เค้าโครงเทอร์มินัล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pencere" + "value": "Terminal Düzeni" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вікно" + "value": "Макет терміналу" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "窗口" + "value": "终端布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "視窗" + "value": "終端機版面" } } } }, - "command.toggleFullScreen.title": { + "command.terminalSplitDown.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تبديل ملء الشاشة" + "value": "تقسيم للأسفل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prebaci puni ekran" + "value": "Podijeli dolje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skift fuldskærm" + "value": "Opdel nedad" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vollbild umschalten" + "value": "Nach unten teilen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Toggle Full Screen" + "value": "Split Down" } }, "es": { "stringUnit": { "state": "translated", - "value": "Alternar pantalla completa" + "value": "Dividir hacia abajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activer/désactiver le plein écran" + "value": "Diviser vers le bas" } }, "it": { "stringUnit": { "state": "translated", - "value": "Attiva/Disattiva schermo intero" + "value": "Dividi in basso" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フルスクリーンの切り替え" + "value": "下に分割" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전체 화면 전환" + "value": "아래로 분할" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slå fullskjerm av/på" + "value": "Del ned" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przełącz pełny ekran" + "value": "Podziel w dół" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Alternar Tela Cheia" + "value": "Dividir para Baixo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Полноэкранный режим" + "value": "Разделить вниз" } }, "th": { "stringUnit": { "state": "translated", - "value": "สลับเต็มหน้าจอ" + "value": "แยกลงล่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tam Ekranı Aç/Kapat" + "value": "Aşağı Böl" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемкнути повноекранний режим" + "value": "Розділити вниз" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "切换全屏" + "value": "向下拆分" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切換全螢幕" + "value": "向下分割" } } } }, - "command.toggleFullWidthTab.title": { + "command.terminalSplitRight.subtitle": { "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Toggle Full Width Tab" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "全幅タブを切り替え" - } - } - } - }, - "command.toggleLeftSidebar.title": { "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تبديل الشريط الجانبي الأيسر" + "value": "تخطيط الطرفية" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prebaci lijevu bočnu traku" + "value": "Raspored terminala" } }, "da": { "stringUnit": { "state": "translated", - "value": "Slå venstre sidebjælke til/fra" + "value": "Terminallayout" } }, "de": { "stringUnit": { "state": "translated", - "value": "Linke Seitenleiste ein-/ausblenden" + "value": "Terminal-Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Toggle Left Sidebar" + "value": "Terminal Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Alternar barra lateral izquierda" + "value": "Disposición del terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher/masquer la barre latérale gauche" + "value": "Disposition du terminal" } }, "it": { "stringUnit": { "state": "translated", - "value": "Attiva/Disattiva barra laterale sinistra" + "value": "Layout terminale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "左サイドバーを切り替え" + "value": "ターミナルレイアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "왼쪽 사이드바 전환" + "value": "터미널 레이아웃" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slå venstre sidepanel av/på" + "value": "Terminaloppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przełącz lewy pasek boczny" + "value": "Układ terminala" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Alternar barra lateral esquerda" + "value": "Layout do Terminal" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переключить левую боковую панель" + "value": "Макет терминала" } }, "th": { "stringUnit": { "state": "translated", - "value": "สลับแถบด้านข้างซ้าย" + "value": "เค้าโครงเทอร์มินัล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sol Kenar Çubuğunu Aç/Kapat" + "value": "Terminal Düzeni" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемкнути ліву бічну панель" + "value": "Макет терміналу" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "切换左侧边栏" + "value": "终端布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切換左側邊欄" - } - } - } - }, - "command.toggleSetting.disableTitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Disable %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@を無効化" - } - } - } - }, - "command.toggleSetting.enableTitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Enable %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@を有効化" - } - } - } - }, - "command.toggleSetting.state.off": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Off" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オフ" - } - } - } - }, - "command.toggleSetting.state.on": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オン" - } - } - } - }, - "command.toggleSetting.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%@ • %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@ • %@" + "value": "終端機版面" } } } }, - "command.toggleSidebar.subtitle": { + "command.terminalSplitRight.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "التخطيط" + "value": "تقسيم لليمين" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Raspored" + "value": "Podijeli desno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Layout" + "value": "Opdel til højre" } }, "de": { "stringUnit": { "state": "translated", - "value": "Layout" + "value": "Nach rechts teilen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Layout" + "value": "Split Right" } }, "es": { "stringUnit": { "state": "translated", - "value": "Disposición" + "value": "Dividir a la derecha" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Disposition" + "value": "Diviser à droite" } }, "it": { "stringUnit": { "state": "translated", - "value": "Layout" + "value": "Dividi a destra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "レイアウト" + "value": "右に分割" } }, "ko": { "stringUnit": { "state": "translated", - "value": "레이아웃" + "value": "오른쪽으로 분할" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Oppsett" + "value": "Del til høyre" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Układ" + "value": "Podziel w prawo" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Layout" + "value": "Dividir à Direita" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Макет" + "value": "Разделить вправо" } }, "th": { "stringUnit": { "state": "translated", - "value": "เค้าโครง" + "value": "แยกไปทางขวา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Düzen" + "value": "Sağa Böl" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Макет" + "value": "Розділити праворуч" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "布局" + "value": "向右拆分" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "版面" + "value": "向右分割" } } } }, - "command.toggleSplitZoom.subtitle": { + "command.terminalToggleTextBoxInput.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { - "state": "translated", - "value": "تخطيط الطرفية" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Raspored terminala" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "da": { "stringUnit": { - "state": "translated", - "value": "Terminallayout" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "de": { "stringUnit": { - "state": "translated", - "value": "Terminal-Layout" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "en": { "stringUnit": { "state": "translated", - "value": "Terminal Layout" + "value": "Toggle TextBox Input" } }, "es": { "stringUnit": { - "state": "translated", - "value": "Disposición del terminal" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "fr": { "stringUnit": { - "state": "translated", - "value": "Disposition du terminal" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "it": { "stringUnit": { - "state": "translated", - "value": "Layout terminale" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルレイアウト" + "value": "TextBox入力を切り替え" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "ko": { "stringUnit": { - "state": "translated", - "value": "터미널 레이아웃" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Terminaloppsett" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Układ terminala" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Layout do Terminal" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Макет терминала" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "th": { "stringUnit": { - "state": "translated", - "value": "เค้าโครงเทอร์มินัล" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Terminal Düzeni" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Макет терміналу" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "zh-Hans": { "stringUnit": { - "state": "translated", - "value": "终端布局" + "state": "needs_review", + "value": "Toggle TextBox Input" } }, "zh-Hant": { "stringUnit": { - "state": "translated", - "value": "終端機版面" + "state": "needs_review", + "value": "Toggle TextBox Input" } } } }, - "command.toggleSplitZoom.title": { + "command.terminalUseSelectionForFind.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تبديل تكبير اللوحة" + "value": "استخدام التحديد للبحث" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prebaci uvećanje panela" + "value": "Koristi odabrano za pretragu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Slå panelzoom til/fra" + "value": "Brug markering til søgning" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bereichszoom umschalten" + "value": "Auswahl für Suche verwenden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Toggle Pane Zoom" + "value": "Use Selection for Find" } }, "es": { "stringUnit": { "state": "translated", - "value": "Alternar zoom del panel" + "value": "Usar selección para buscar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activer/désactiver le zoom du panneau" + "value": "Utiliser la sélection pour la recherche" } }, "it": { "stringUnit": { "state": "translated", - "value": "Attiva/Disattiva zoom pannello" + "value": "Usa selezione per la ricerca" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペインズームの切り替え" + "value": "選択範囲を検索に使用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "패널 확대/축소 전환" + "value": "선택 항목을 찾기에 사용" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slå panelzoom av/på" + "value": "Bruk utvalg for søk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przełącz powiększenie panelu" + "value": "Użyj zaznaczenia do wyszukiwania" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Alternar Zoom do Painel" + "value": "Usar Seleção para Busca" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Масштаб панели" + "value": "Использовать выделение для поиска" } }, "th": { "stringUnit": { "state": "translated", - "value": "สลับการซูมบานหน้าต่าง" + "value": "ใช้ข้อความที่เลือกเพื่อค้นหา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bölme Yakınlaştırmasını Aç/Kapat" + "value": "Seçimi Bulmak İçin Kullan" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемкнути масштаб панелі" + "value": "Використати виділення для пошуку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "切换面板缩放" + "value": "使用选中内容查找" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切換面板縮放" - } - } - } - }, - "command.toggleUnread.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Toggle Unread" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未読を切り替え" + "value": "使用所選範圍來尋找" } } } }, - "command.triggerFlash.subtitle": { + "command.toggleFullScreen.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "العرض" + "value": "نافذة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prikaz" + "value": "Prozor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Visning" + "value": "Vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ansicht" + "value": "Fenster" } }, "en": { "stringUnit": { "state": "translated", - "value": "View" + "value": "Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Vista" + "value": "Ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Présentation" + "value": "Fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Vista" + "value": "Finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "表示" + "value": "ウインドウ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "보기" + "value": "윈도우" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vis" + "value": "Vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Widok" + "value": "Okno" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Visualização" + "value": "Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вид" + "value": "Окно" } }, "th": { "stringUnit": { "state": "translated", - "value": "มุมมอง" + "value": "หน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Görünüm" + "value": "Pencere" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перегляд" + "value": "Вікно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "视图" + "value": "窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示方式" + "value": "視窗" } } } }, - "command.triggerFlash.title": { + "command.toggleFullScreen.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "وميض اللوحة المركّزة" + "value": "تبديل ملء الشاشة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Označi fokusirani panel" + "value": "Prebaci puni ekran" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fremhæv fokuseret panel" + "value": "Skift fuldskærm" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokussierten Bereich hervorheben" + "value": "Vollbild umschalten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Flash Focused Panel" + "value": "Toggle Full Screen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Resaltar panel enfocado" + "value": "Alternar pantalla completa" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Flasher le panneau actif" + "value": "Activer/désactiver le plein écran" } }, "it": { "stringUnit": { "state": "translated", - "value": "Evidenzia pannello attivo" + "value": "Attiva/Disattiva schermo intero" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フォーカスペインを強調" + "value": "フルスクリーンの切り替え" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포커스된 패널 깜빡이기" + "value": "전체 화면 전환" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Blink fokusert panel" + "value": "Slå fullskjerm av/på" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podświetl aktywny panel" + "value": "Przełącz pełny ekran" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Piscar Painel em Foco" + "value": "Alternar Tela Cheia" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Подсветить активную панель" + "value": "Полноэкранный режим" } }, "th": { "stringUnit": { "state": "translated", - "value": "กะพริบแผงที่โฟกัส" + "value": "สลับเต็มหน้าจอ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Odaklanılan Paneli Yanıp Söndür" + "value": "Tam Ekranı Aç/Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Підсвітити активну панель" + "value": "Перемкнути повноекранний режим" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "闪烁聚焦面板" + "value": "切换全屏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "閃爍聚焦面板" + "value": "切換全螢幕" } } } }, - "command.uninstallCLI.subtitle": { + "command.toggleFullWidthTab.title": { "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Toggle Full Width Tab" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "全幅タブを切り替え" + } + } + } + }, + "command.toggleLeftSidebar.title": { "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "واجهة الأوامر" + "value": "تبديل الشريط الجانبي الأيسر" } }, "bs": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Prebaci lijevu bočnu traku" } }, "da": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Slå venstre sidebjælke til/fra" } }, "de": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Linke Seitenleiste ein-/ausblenden" } }, "en": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Toggle Left Sidebar" } }, "es": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Alternar barra lateral izquierda" } }, "fr": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Afficher/masquer la barre latérale gauche" } }, "it": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Attiva/Disattiva barra laterale sinistra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "左サイドバーを切り替え" } }, "ko": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "왼쪽 사이드바 전환" } }, "nb": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Slå venstre sidepanel av/på" } }, "pl": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Przełącz lewy pasek boczny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Alternar barra lateral esquerda" } }, "ru": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Переключить левую боковую панель" } }, "th": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "สลับแถบด้านข้างซ้าย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Sol Kenar Çubuğunu Aç/Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "Перемкнути ліву бічну панель" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "切换左侧边栏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "CLI" + "value": "切換左側邊欄" } } } }, - "command.uninstallCLI.title": { + "command.toggleSetting.disableTitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Disable %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@を無効化" + } + } + } + }, + "command.toggleSetting.enableTitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Enable %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@を有効化" + } + } + } + }, + "command.toggleSetting.state.off": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Off" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "オフ" + } + } + } + }, + "command.toggleSetting.state.on": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "On" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "オン" + } + } + } + }, + "command.toggleSetting.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ • %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ • %@" + } + } + } + }, + "command.toggleSidebar.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "أمر الصدفة: إلغاء تثبيت 'cmux' من PATH" + "value": "التخطيط" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Shell naredba: Deinstaliraj 'cmux' iz PATH" + "value": "Raspored" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skalkommando: Afinstaller 'cmux' fra PATH" + "value": "Layout" } }, "de": { "stringUnit": { "state": "translated", - "value": "Shell-Befehl: 'cmux' aus PATH entfernen" + "value": "Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Shell Command: Uninstall 'cmux' from PATH" + "value": "Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Comando de shell: Desinstalar 'cmux' de PATH" + "value": "Disposición" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Commande Shell : désinstaller « cmux » du PATH" + "value": "Disposition" } }, "it": { "stringUnit": { "state": "translated", - "value": "Comando shell: disinstalla 'cmux' dal PATH" + "value": "Layout" } }, "ja": { "stringUnit": { "state": "translated", - "value": "シェルコマンド: 'cmux'をPATHからアンインストール" + "value": "レイアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "셸 명령어: PATH에서 'cmux' 제거" + "value": "레이아웃" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skallkommando: Avinstaller «cmux» fra PATH" + "value": "Oppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Polecenie powłoki: Odinstaluj „cmux” z PATH" + "value": "Układ" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Comando Shell: Desinstalar 'cmux' do PATH" + "value": "Layout" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Команда оболочки: удалить «cmux» из PATH" + "value": "Макет" } }, "th": { "stringUnit": { "state": "translated", - "value": "คำสั่ง Shell: ถอนการติดตั้ง 'cmux' จาก PATH" + "value": "เค้าโครง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kabuk Komutu: 'cmux'u PATH'ten Kaldır" + "value": "Düzen" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Команда оболонки: видалити 'cmux' з PATH" + "value": "Макет" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Shell 命令:从 PATH 卸载 'cmux'" + "value": "布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Shell 指令:從 PATH 解除安裝「cmux」" + "value": "版面" } } } }, - "command.unpinTab.title": { + "command.toggleSplitZoom.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء تثبيت اللسان" + "value": "تخطيط الطرفية" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkači tab" + "value": "Raspored terminala" } }, "da": { "stringUnit": { "state": "translated", - "value": "Frigør fane" + "value": "Terminallayout" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab loslösen" + "value": "Terminal-Layout" } }, "en": { "stringUnit": { "state": "translated", - "value": "Unpin Tab" + "value": "Terminal Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desfijar pestaña" + "value": "Disposición del terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désépingler l'onglet" + "value": "Disposition du terminal" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sblocca scheda" + "value": "Layout terminale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブのピンを外す" + "value": "ターミナルレイアウト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 고정 해제" + "value": "터미널 레이아웃" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Løsne fane" + "value": "Terminaloppsett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Odepnij kartę" + "value": "Układ terminala" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desafixar Aba" + "value": "Layout do Terminal" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открепить вкладку" + "value": "Макет терминала" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลิกปักหมุดแท็บ" + "value": "เค้าโครงเทอร์มินัล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme Sabitlemesini Kaldır" + "value": "Terminal Düzeni" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкріпити вкладку" + "value": "Макет терміналу" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消固定标签页" + "value": "终端布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消釘選標籤頁" + "value": "終端機版面" } } } }, - "command.unpinWorkspace.title": { + "command.toggleSplitZoom.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء تثبيت مساحة العمل" + "value": "تبديل تكبير اللوحة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkači radni prostor" + "value": "Prebaci uvećanje panela" } }, "da": { "stringUnit": { "state": "translated", - "value": "Frigør arbejdsområde" + "value": "Slå panelzoom til/fra" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich loslösen" + "value": "Bereichszoom umschalten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Unpin Workspace" + "value": "Toggle Pane Zoom" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desfijar espacio de trabajo" + "value": "Alternar zoom del panel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désépingler l'espace de travail" + "value": "Activer/désactiver le zoom du panneau" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sblocca area di lavoro" + "value": "Attiva/Disattiva zoom pannello" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのピンを外す" + "value": "ペインズームの切り替え" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 고정 해제" + "value": "패널 확대/축소 전환" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Løsne arbeidsområde" + "value": "Slå panelzoom av/på" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Odepnij przestrzeń roboczą" + "value": "Przełącz powiększenie panelu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desafixar Área de Trabalho" + "value": "Alternar Zoom do Painel" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открепить рабочее пространство" + "value": "Масштаб панели" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลิกปักหมุดเวิร์กสเปซ" + "value": "สลับการซูมบานหน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı Sabitlemesini Kaldır" + "value": "Bölme Yakınlaştırmasını Aç/Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкріпити робочу область" + "value": "Перемкнути масштаб панелі" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消固定工作区" + "value": "切换面板缩放" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消釘選工作區" + "value": "切換面板縮放" } } } }, - "command.vscodeServeWebRestart.title": { + "command.toggleUnread.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Toggle Unread" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "未読を切り替え" + } + } + } + }, + "command.triggerFlash.subtitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تشغيل خادم VS Code المضمّن" + "value": "العرض" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ponovo pokreni VS Code inline server" + "value": "Prikaz" } }, "da": { "stringUnit": { "state": "translated", - "value": "Genstart VS Code Inline Server" + "value": "Visning" } }, "de": { "stringUnit": { "state": "translated", - "value": "VS Code Inline-Server neu starten" + "value": "Ansicht" } }, "en": { "stringUnit": { "state": "translated", - "value": "Restart VS Code Inline Server" + "value": "View" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reiniciar servidor en línea de VS Code" + "value": "Vista" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Redémarrer le serveur VS Code intégré" + "value": "Présentation" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riavvia server inline VS Code" + "value": "Vista" } }, "ja": { "stringUnit": { "state": "translated", - "value": "VS Codeインラインサーバーを再起動" + "value": "表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "VS Code 인라인 서버 재시작" + "value": "보기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Start VS Code innebygd server på nytt" + "value": "Vis" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uruchom ponownie wbudowany serwer VS Code" + "value": "Widok" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Reiniciar Servidor Inline do VS Code" + "value": "Visualização" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Перезапустить встроенный сервер VS Code" + "value": "Вид" } }, "th": { "stringUnit": { "state": "translated", - "value": "รีสตาร์ตเซิร์ฟเวอร์ VS Code แบบอินไลน์" + "value": "มุมมอง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "VS Code Satır İçi Sunucusunu Yeniden Başlat" + "value": "Görünüm" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перезапустити вбудований сервер VS Code" + "value": "Перегляд" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重启 VS Code 内联服务器" + "value": "视图" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新啟動 VS Code 內嵌伺服器" + "value": "顯示方式" } } } }, - "command.vscodeServeWebStop.title": { + "command.triggerFlash.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إيقاف خادم VS Code المضمّن" + "value": "وميض اللوحة المركّزة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zaustavi VS Code inline server" + "value": "Označi fokusirani panel" } }, "da": { "stringUnit": { "state": "translated", - "value": "Stop VS Code Inline Server" + "value": "Fremhæv fokuseret panel" } }, "de": { "stringUnit": { "state": "translated", - "value": "VS Code Inline-Server stoppen" + "value": "Fokussierten Bereich hervorheben" } }, "en": { "stringUnit": { "state": "translated", - "value": "Stop VS Code Inline Server" + "value": "Flash Focused Panel" } }, "es": { "stringUnit": { "state": "translated", - "value": "Detener servidor en línea de VS Code" + "value": "Resaltar panel enfocado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Arrêter le serveur VS Code intégré" + "value": "Flasher le panneau actif" } }, "it": { "stringUnit": { "state": "translated", - "value": "Arresta server inline VS Code" + "value": "Evidenzia pannello attivo" } }, "ja": { "stringUnit": { "state": "translated", - "value": "VS Codeインラインサーバーを停止" + "value": "フォーカスペインを強調" } }, "ko": { "stringUnit": { "state": "translated", - "value": "VS Code 인라인 서버 중지" + "value": "포커스된 패널 깜빡이기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Stopp VS Code innebygd server" + "value": "Blink fokusert panel" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zatrzymaj wbudowany serwer VS Code" + "value": "Podświetl aktywny panel" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Parar Servidor Inline do VS Code" + "value": "Piscar Painel em Foco" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Остановить встроенный сервер VS Code" + "value": "Подсветить активную панель" } }, "th": { "stringUnit": { "state": "translated", - "value": "หยุดเซิร์ฟเวอร์ VS Code แบบอินไลน์" + "value": "กะพริบแผงที่โฟกัส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "VS Code Satır İçi Sunucusunu Durdur" + "value": "Odaklanılan Paneli Yanıp Söndür" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зупинити вбудований сервер VS Code" + "value": "Підсвітити активну панель" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "停止 VS Code 内联服务器" + "value": "闪烁聚焦面板" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "停止 VS Code 內嵌伺服器" + "value": "閃爍聚焦面板" } } } }, - "command.workspaceStatus.title": { + "command.uninstallCLI.subtitle": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Workspace Status: %@" + "value": "واجهة الأوامر" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ワークスペースのステータス: %@" + "value": "CLI" } - } - } - }, - "command.workspaceStatusAuto.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Workspace Status: Auto" + "value": "CLI" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "ワークスペースのステータス: 自動" - } - } - } - }, - "commandPalette.description.workspaceInputHint": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Press Enter to save. Press Shift-Enter for a new line, or Escape to cancel." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Enter で保存します。Shift-Enter で改行、Escape でキャンセルします。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Enter를 눌러 저장하세요. Shift-Enter로 줄바꿈, Escape로 취소합니다." - } - } - } - }, - "commandPalette.description.workspacePlaceholder": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Workspace description" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースの説明" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "워크스페이스 설명" - } - } - } - }, - "commandPalette.kind.agentSession": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "needs_review", - "value": "Agent" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Agent" - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Agent" - } - }, - "de": { - "stringUnit": { - "state": "needs_review", - "value": "Agent" + "value": "CLI" } }, "en": { "stringUnit": { "state": "translated", - "value": "Agent" + "value": "CLI" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェント" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "Agent" + "value": "CLI" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Agent" + "state": "translated", + "value": "CLI" } } } }, - "commandPalette.kind.browser": { + "command.uninstallCLI.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "أمر الصدفة: إلغاء تثبيت 'cmux' من PATH" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "value": "Shell naredba: Deinstaliraj 'cmux' iz PATH" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "브라우저" + "value": "Skalkommando: Afinstaller 'cmux' fra PATH" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Браузер" + "value": "Shell-Befehl: 'cmux' aus PATH entfernen" } - } - } - }, - "commandPalette.kind.cloudVMLoading": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Cloud VM" + "value": "Shell Command: Uninstall 'cmux' from PATH" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "クラウドVM" + "value": "Comando de shell: Desinstalar 'cmux' de PATH" } - } - } - }, - "commandPalette.kind.customSidebar": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Custom Sidebar" + "value": "Commande Shell : désinstaller « cmux » du PATH" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Comando shell: disinstalla 'cmux' dal PATH" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カスタムサイドバー" + "value": "シェルコマンド: 'cmux'をPATHからアンインストール" } - } - } - }, - "commandPalette.kind.markdown": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Markdown" + "value": "셸 명령어: PATH에서 'cmux' 제거" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "Markdown" + "value": "Skallkommando: Avinstaller «cmux» fra PATH" } }, - "ko": { + "pl": { "stringUnit": { "state": "translated", - "value": "마크다운" + "value": "Polecenie powłoki: Odinstaluj „cmux” z PATH" } }, - "uk": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Markdown" + "value": "Comando Shell: Desinstalar 'cmux' do PATH" } - } - } - }, - "commandPalette.kind.rightSidebarTool": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Tool" + "value": "Команда оболочки: удалить «cmux» из PATH" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "ツール" + "value": "คำสั่ง Shell: ถอนการติดตั้ง 'cmux' จาก PATH" } - } - } - }, - "commandPalette.kind.terminal": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Terminal" + "value": "Kabuk Komutu: 'cmux'u PATH'ten Kaldır" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "ターミナル" + "value": "Команда оболонки: видалити 'cmux' з PATH" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "터미널" + "value": "Shell 命令:从 PATH 卸载 'cmux'" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Термінал" + "value": "Shell 指令:從 PATH 解除安裝「cmux」" } } } }, - "commandPalette.kind.workspace": { + "command.unpinTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل" + "value": "إلغاء تثبيت اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor" + "value": "Otkači tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområde" + "value": "Frigør fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich" + "value": "Tab loslösen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace" + "value": "Unpin Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo" + "value": "Desfijar pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail" + "value": "Désépingler l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro" + "value": "Sblocca scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "タブのピンを外す" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간" + "value": "탭 고정 해제" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområde" + "value": "Løsne fane" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza" + "value": "Odepnij kartę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho" + "value": "Desafixar Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство" + "value": "Открепить вкладку" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ" + "value": "เลิกปักหมุดแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı" + "value": "Sekme Sabitlemesini Kaldır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область" + "value": "Відкріпити вкладку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "取消固定标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區" - } - } - } - }, - "commandPalette.kind.workspaceTodo": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Todos" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Todo" + "value": "取消釘選標籤頁" } } } }, - "commandPalette.rename.clearCustomName": { + "command.unpinWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "(مسح الاسم المخصص)" + "value": "إلغاء تثبيت مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "(obriši prilagođeni naziv)" + "value": "Otkači radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "(ryd brugerdefineret navn)" + "value": "Frigør arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "(Benutzerdefinierten Namen löschen)" + "value": "Arbeitsbereich loslösen" } }, "en": { "stringUnit": { "state": "translated", - "value": "(clear custom name)" + "value": "Unpin Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "(borrar nombre personalizado)" + "value": "Desfijar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "(effacer le nom personnalisé)" + "value": "Désépingler l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "(cancella nome personalizzato)" + "value": "Sblocca area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "(カスタム名をクリア)" + "value": "ワークスペースのピンを外す" } }, "ko": { "stringUnit": { "state": "translated", - "value": "(사용자 지정 이름 지우기)" + "value": "작업 공간 고정 해제" } }, "nb": { "stringUnit": { "state": "translated", - "value": "(fjern egendefinert navn)" + "value": "Løsne arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "(wyczyść własną nazwę)" + "value": "Odepnij przestrzeń roboczą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "(limpar nome personalizado)" + "value": "Desafixar Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "(очистить пользовательское имя)" + "value": "Открепить рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "(ล้างชื่อที่กำหนดเอง)" + "value": "เลิกปักหมุดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "(özel adı temizle)" + "value": "Çalışma Alanı Sabitlemesini Kaldır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "(скинути власну назву)" + "value": "Відкріпити робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "(清除自定义名称)" + "value": "取消固定工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "(清除自訂名稱)" + "value": "取消釘選工作區" } } } }, - "commandPalette.rename.tabConfirmHint": { + "command.vscodeServeWebRestart.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اضغط Enter لتطبيق اسم اللسان، أو Escape للإلغاء." + "value": "إعادة تشغيل خادم VS Code المضمّن" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pritisnite Enter za primjenu naziva taba, ili Escape za otkazivanje." + "value": "Ponovo pokreni VS Code inline server" } }, "da": { "stringUnit": { "state": "translated", - "value": "Tryk Enter for at anvende dette fanenavn, eller Escape for at annullere." + "value": "Genstart VS Code Inline Server" } }, "de": { "stringUnit": { "state": "translated", - "value": "Drücken Sie die Eingabetaste, um den Tab-Namen zu übernehmen, oder Escape zum Abbrechen." + "value": "VS Code Inline-Server neu starten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Press Enter to apply this tab name, or Escape to cancel." + "value": "Restart VS Code Inline Server" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pulsa Intro para aplicar este nombre de pestaña, o Escape para cancelar." + "value": "Reiniciar servidor en línea de VS Code" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appuyez sur Entrée pour appliquer ce nom d'onglet, ou sur Échap pour annuler." + "value": "Redémarrer le serveur VS Code intégré" } }, "it": { "stringUnit": { "state": "translated", - "value": "Premi Invio per applicare il nome della scheda, oppure Esc per annullare." + "value": "Riavvia server inline VS Code" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Enterキーでタブ名を適用、Escapeキーでキャンセルします。" + "value": "VS Codeインラインサーバーを再起動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Enter를 눌러 탭 이름을 적용하거나, Escape를 눌러 취소하세요." + "value": "VS Code 인라인 서버 재시작" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Trykk Enter for å bruke dette fanenavnet, eller Escape for å avbryte." + "value": "Start VS Code innebygd server på nytt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Naciśnij Enter, aby zastosować nazwę karty, lub Escape, aby anulować." + "value": "Uruchom ponownie wbudowany serwer VS Code" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pressione Enter para aplicar este nome de aba ou Escape para cancelar." + "value": "Reiniciar Servidor Inline do VS Code" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Нажмите Enter, чтобы применить имя вкладки, или Escape для отмены." + "value": "Перезапустить встроенный сервер VS Code" } }, "th": { "stringUnit": { "state": "translated", - "value": "กด Enter เพื่อใช้ชื่อแท็บนี้ หรือ Escape เพื่อยกเลิก" + "value": "รีสตาร์ตเซิร์ฟเวอร์ VS Code แบบอินไลน์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sekme adını uygulamak için Enter tuşuna basın veya iptal etmek için Escape tuşuna basın." + "value": "VS Code Satır İçi Sunucusunu Yeniden Başlat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Натисніть Enter, щоб застосувати назву вкладки, або Escape для скасування." + "value": "Перезапустити вбудований сервер VS Code" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "按 Enter 应用此标签页名称,或按 Escape 取消。" + "value": "重启 VS Code 内联服务器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "按 Enter 套用此標籤頁名稱,或按 Escape 取消。" + "value": "重新啟動 VS Code 內嵌伺服器" } } } }, - "commandPalette.rename.tabDescription": { + "command.vscodeServeWebStop.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اختر اسمًا مخصصًا للسان." + "value": "إيقاف خادم VS Code المضمّن" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odaberite prilagođeni naziv taba." + "value": "Zaustavi VS Code inline server" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vælg et brugerdefineret fanenavn." + "value": "Stop VS Code Inline Server" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wählen Sie einen benutzerdefinierten Tab-Namen." + "value": "VS Code Inline-Server stoppen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Choose a custom tab name." + "value": "Stop VS Code Inline Server" } }, "es": { "stringUnit": { "state": "translated", - "value": "Elige un nombre personalizado para la pestaña." + "value": "Detener servidor en línea de VS Code" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Choisissez un nom personnalisé pour l'onglet." + "value": "Arrêter le serveur VS Code intégré" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scegli un nome personalizzato per la scheda." + "value": "Arresta server inline VS Code" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブのカスタム名を選択してください。" + "value": "VS Codeインラインサーバーを停止" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자 지정 탭 이름을 선택하세요." + "value": "VS Code 인라인 서버 중지" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Velg et egendefinert fanenavn." + "value": "Stopp VS Code innebygd server" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybierz własną nazwę karty." + "value": "Zatrzymaj wbudowany serwer VS Code" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Escolha um nome personalizado para a aba." + "value": "Parar Servidor Inline do VS Code" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выберите пользовательское имя вкладки." + "value": "Остановить встроенный сервер VS Code" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลือกชื่อแท็บที่กำหนดเอง" + "value": "หยุดเซิร์ฟเวอร์ VS Code แบบอินไลน์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel bir sekme adı seçin." + "value": "VS Code Satır İçi Sunucusunu Durdur" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виберіть власну назву вкладки." + "value": "Зупинити вбудований сервер VS Code" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择自定义标签页名称。" + "value": "停止 VS Code 内联服务器" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選擇自訂標籤頁名稱。" + "value": "停止 VS Code 內嵌伺服器" } } } }, - "commandPalette.rename.tabInputHint": { + "command.workspaceStatus.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "أدخل اسم اللسان. اضغط Enter لإعادة التسمية، Escape للإلغاء." + "value": "Workspace Status: %@" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Unesite naziv taba. Pritisnite Enter za preimenovanje, Escape za otkazivanje." + "value": "ワークスペースのステータス: %@" } - }, - "da": { + } + } + }, + "command.workspaceStatusAuto.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Indtast et fanenavn. Tryk Enter for at omdøbe, Escape for at annullere." + "value": "Workspace Status: Auto" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Geben Sie einen Tab-Namen ein. Eingabetaste zum Umbenennen, Escape zum Abbrechen." + "value": "ワークスペースのステータス: 自動" } - }, + } + } + }, + "commandPalette.description.workspaceInputHint": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enter a tab name. Press Enter to rename, Escape to cancel." + "value": "Press Enter to save. Press Shift-Enter for a new line, or Escape to cancel." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Introduce un nombre de pestaña. Pulsa Intro para renombrar, Escape para cancelar." + "value": "Enter で保存します。Shift-Enter で改行、Escape でキャンセルします。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Saisissez un nom d'onglet. Appuyez sur Entrée pour renommer, Échap pour annuler." + "value": "Enter를 눌러 저장하세요. Shift-Enter로 줄바꿈, Escape로 취소합니다." } - }, - "it": { + } + } + }, + "commandPalette.description.workspacePlaceholder": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Inserisci un nome per la scheda. Premi Invio per rinominare, Esc per annullare." + "value": "Workspace description" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ名を入力してください。Enterで名称変更、Escapeでキャンセルします。" + "value": "ワークスペースの説明" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 이름을 입력하세요. Enter로 이름 변경, Escape로 취소." + "value": "워크스페이스 설명" } - }, - "nb": { + } + } + }, + "commandPalette.kind.agentSession": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { - "state": "translated", - "value": "Skriv inn et fanenavn. Trykk Enter for å gi nytt navn, Escape for å avbryte." + "state": "needs_review", + "value": "Agent" } }, - "pl": { + "bs": { "stringUnit": { - "state": "translated", - "value": "Wprowadź nazwę karty. Naciśnij Enter, aby zmienić nazwę, Escape, aby anulować." + "state": "needs_review", + "value": "Agent" } }, - "pt-BR": { + "da": { "stringUnit": { - "state": "translated", - "value": "Insira um nome para a aba. Pressione Enter para renomear, Escape para cancelar." + "state": "needs_review", + "value": "Agent" } }, - "ru": { + "de": { "stringUnit": { - "state": "translated", - "value": "Введите имя вкладки. Нажмите Enter для переименования, Escape для отмены." + "state": "needs_review", + "value": "Agent" } }, - "th": { + "en": { "stringUnit": { "state": "translated", - "value": "ป้อนชื่อแท็บ กด Enter เพื่อเปลี่ยนชื่อ, Escape เพื่อยกเลิก" + "value": "Agent" } }, - "tr": { + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "ja": { "stringUnit": { "state": "translated", - "value": "Bir sekme adı girin. Yeniden adlandırmak için Enter, iptal etmek için Escape tuşuna basın." + "value": "エージェント" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Agent" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Введіть назву вкладки. Enter — перейменувати, Escape — скасувати." + "state": "needs_review", + "value": "Agent" } }, "zh-Hans": { "stringUnit": { - "state": "translated", - "value": "输入标签页名称。按 Enter 重命名,按 Escape 取消。" + "state": "needs_review", + "value": "Agent" } }, "zh-Hant": { "stringUnit": { - "state": "translated", - "value": "輸入標籤頁名稱。按 Enter 重新命名,按 Escape 取消。" + "state": "needs_review", + "value": "Agent" } } } }, - "commandPalette.rename.tabPlaceholder": { + "commandPalette.kind.browser": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "اسم اللسان" + "value": "Browser" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Naziv taba" + "value": "ブラウザ" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Fanenavn" + "value": "브라우저" } }, - "de": { + "uk": { "stringUnit": { "state": "translated", - "value": "Tab-Name" + "value": "Браузер" } - }, + } + } + }, + "commandPalette.kind.cloudVMLoading": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Tab name" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombre de pestaña" + "value": "Cloud VM" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Nom de l'onglet" + "value": "クラウドVM" } - }, - "it": { + } + } + }, + "commandPalette.kind.customSidebar": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Nome scheda" + "value": "Custom Sidebar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ名" + "value": "カスタムサイドバー" } - }, - "ko": { + } + } + }, + "commandPalette.kind.markdown": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "탭 이름" + "value": "Markdown" } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fanenavn" + "value": "Markdown" } }, - "pl": { + "ko": { "stringUnit": { "state": "translated", - "value": "Nazwa karty" + "value": "마크다운" } }, - "pt-BR": { + "uk": { "stringUnit": { "state": "translated", - "value": "Nome da aba" + "value": "Markdown" } - }, - "ru": { + } + } + }, + "commandPalette.kind.rightSidebarTool": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Имя вкладки" + "value": "Tool" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "ชื่อแท็บ" + "value": "ツール" } - }, - "tr": { + } + } + }, + "commandPalette.kind.terminal": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Sekme adı" + "value": "Terminal" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Назва вкладки" + "value": "ターミナル" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "标签页名称" + "value": "터미널" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "標籤頁名稱" + "value": "Термінал" } } } }, - "commandPalette.rename.tabTitle": { + "commandPalette.kind.workspace": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية اللسان" + "value": "مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preimenuj tab" + "value": "Radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Omdøb fane" + "value": "Arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab umbenennen" + "value": "Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Rename Tab" + "value": "Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar pestaña" + "value": "Espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer l'onglet" + "value": "Espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rinomina scheda" + "value": "Area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブの名称変更" + "value": "ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 이름 변경" + "value": "작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gi fanen nytt navn" + "value": "Arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę karty" + "value": "Przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Renomear Aba" + "value": "Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переименовать вкладку" + "value": "Рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อแท็บ" + "value": "เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Yeniden Adlandır" + "value": "Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейменувати вкладку" + "value": "Робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名标签页" + "value": "工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名標籤頁" + "value": "工作區" } } } }, - "commandPalette.rename.workspaceConfirmHint": { + "commandPalette.kind.workspaceTodo": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Todos" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Todo" + } + } + } + }, + "commandPalette.rename.clearCustomName": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اضغط Enter لتطبيق اسم مساحة العمل، أو Escape للإلغاء." + "value": "(مسح الاسم المخصص)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pritisnite Enter za primjenu naziva radnog prostora, ili Escape za otkazivanje." + "value": "(obriši prilagođeni naziv)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Tryk Enter for at anvende dette arbejdsområdenavn, eller Escape for at annullere." + "value": "(ryd brugerdefineret navn)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Drücken Sie die Eingabetaste, um den Arbeitsbereichsnamen zu übernehmen, oder Escape zum Abbrechen." + "value": "(Benutzerdefinierten Namen löschen)" } }, "en": { "stringUnit": { "state": "translated", - "value": "Press Enter to apply this workspace name, or Escape to cancel." + "value": "(clear custom name)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pulsa Intro para aplicar este nombre de espacio de trabajo, o Escape para cancelar." + "value": "(borrar nombre personalizado)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appuyez sur Entrée pour appliquer ce nom d'espace de travail, ou sur Échap pour annuler." + "value": "(effacer le nom personnalisé)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Premi Invio per applicare il nome dell'area di lavoro, oppure Esc per annullare." + "value": "(cancella nome personalizzato)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Enterキーでワークスペース名を適用、Escapeキーでキャンセルします。" + "value": "(カスタム名をクリア)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Enter를 눌러 작업 공간 이름을 적용하거나, Escape를 눌러 취소하세요." + "value": "(사용자 지정 이름 지우기)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Trykk Enter for å bruke dette arbeidsområdenavnet, eller Escape for å avbryte." + "value": "(fjern egendefinert navn)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Naciśnij Enter, aby zastosować nazwę przestrzeni roboczej, lub Escape, aby anulować." + "value": "(wyczyść własną nazwę)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pressione Enter para aplicar este nome de área de trabalho ou Escape para cancelar." + "value": "(limpar nome personalizado)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Нажмите Enter, чтобы применить имя рабочего пространства, или Escape для отмены." + "value": "(очистить пользовательское имя)" } }, "th": { "stringUnit": { "state": "translated", - "value": "กด Enter เพื่อใช้ชื่อเวิร์กสเปซนี้ หรือ Escape เพื่อยกเลิก" + "value": "(ล้างชื่อที่กำหนดเอง)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu çalışma alanı adını uygulamak için Enter tuşuna basın veya iptal etmek için Escape tuşuna basın." + "value": "(özel adı temizle)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Натисніть Enter, щоб застосувати назву робочої області, або Escape для скасування." + "value": "(скинути власну назву)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "按 Enter 应用此工作区名称,或按 Escape 取消。" + "value": "(清除自定义名称)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "按 Enter 套用此工作區名稱,或按 Escape 取消。" + "value": "(清除自訂名稱)" } } } }, - "commandPalette.rename.workspaceDescription": { + "commandPalette.rename.tabConfirmHint": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اختر اسمًا مخصصًا لمساحة العمل." + "value": "اضغط Enter لتطبيق اسم اللسان، أو Escape للإلغاء." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odaberite prilagođeni naziv radnog prostora." + "value": "Pritisnite Enter za primjenu naziva taba, ili Escape za otkazivanje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Vælg et brugerdefineret arbejdsområdenavn." + "value": "Tryk Enter for at anvende dette fanenavn, eller Escape for at annullere." } }, "de": { "stringUnit": { "state": "translated", - "value": "Wählen Sie einen benutzerdefinierten Arbeitsbereichsnamen." + "value": "Drücken Sie die Eingabetaste, um den Tab-Namen zu übernehmen, oder Escape zum Abbrechen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Choose a custom workspace name." + "value": "Press Enter to apply this tab name, or Escape to cancel." } }, "es": { "stringUnit": { "state": "translated", - "value": "Elige un nombre personalizado para el espacio de trabajo." + "value": "Pulsa Intro para aplicar este nombre de pestaña, o Escape para cancelar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Choisissez un nom personnalisé pour l'espace de travail." + "value": "Appuyez sur Entrée pour appliquer ce nom d'onglet, ou sur Échap pour annuler." } }, "it": { "stringUnit": { "state": "translated", - "value": "Scegli un nome personalizzato per l'area di lavoro." + "value": "Premi Invio per applicare il nome della scheda, oppure Esc per annullare." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのカスタム名を選択してください。" + "value": "Enterキーでタブ名を適用、Escapeキーでキャンセルします。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자 지정 작업 공간 이름을 선택하세요." + "value": "Enter를 눌러 탭 이름을 적용하거나, Escape를 눌러 취소하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Velg et egendefinert arbeidsområdenavn." + "value": "Trykk Enter for å bruke dette fanenavnet, eller Escape for å avbryte." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybierz własną nazwę przestrzeni roboczej." + "value": "Naciśnij Enter, aby zastosować nazwę karty, lub Escape, aby anulować." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Escolha um nome personalizado para a área de trabalho." + "value": "Pressione Enter para aplicar este nome de aba ou Escape para cancelar." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выберите пользовательское имя рабочего пространства." + "value": "Нажмите Enter, чтобы применить имя вкладки, или Escape для отмены." } }, "th": { "stringUnit": { "state": "translated", - "value": "เลือกชื่อเวิร์กสเปซที่กำหนดเอง" + "value": "กด Enter เพื่อใช้ชื่อแท็บนี้ หรือ Escape เพื่อยกเลิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel bir çalışma alanı adı seçin." + "value": "Bu sekme adını uygulamak için Enter tuşuna basın veya iptal etmek için Escape tuşuna basın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виберіть власну назву робочої області." + "value": "Натисніть Enter, щоб застосувати назву вкладки, або Escape для скасування." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择自定义工作区名称。" + "value": "按 Enter 应用此标签页名称,或按 Escape 取消。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選擇自訂工作區名稱。" + "value": "按 Enter 套用此標籤頁名稱,或按 Escape 取消。" } } } }, - "commandPalette.rename.workspaceInputHint": { + "commandPalette.rename.tabDescription": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "أدخل اسم مساحة العمل. اضغط Enter لإعادة التسمية، Escape للإلغاء." + "value": "اختر اسمًا مخصصًا للسان." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Unesite naziv radnog prostora. Pritisnite Enter za preimenovanje, Escape za otkazivanje." + "value": "Odaberite prilagođeni naziv taba." } }, "da": { "stringUnit": { "state": "translated", - "value": "Indtast et arbejdsområdenavn. Tryk Enter for at omdøbe, Escape for at annullere." + "value": "Vælg et brugerdefineret fanenavn." } }, "de": { "stringUnit": { "state": "translated", - "value": "Geben Sie einen Arbeitsbereichsnamen ein. Eingabetaste zum Umbenennen, Escape zum Abbrechen." + "value": "Wählen Sie einen benutzerdefinierten Tab-Namen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Enter a workspace name. Press Enter to rename, Escape to cancel." + "value": "Choose a custom tab name." } }, "es": { "stringUnit": { "state": "translated", - "value": "Introduce un nombre de espacio de trabajo. Pulsa Intro para renombrar, Escape para cancelar." + "value": "Elige un nombre personalizado para la pestaña." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Saisissez un nom d'espace de travail. Appuyez sur Entrée pour renommer, Échap pour annuler." + "value": "Choisissez un nom personnalisé pour l'onglet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Inserisci un nome per l'area di lavoro. Premi Invio per rinominare, Esc per annullare." + "value": "Scegli un nome personalizzato per la scheda." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース名を入力してください。Enterで名称変更、Escapeでキャンセルします。" + "value": "タブのカスタム名を選択してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름을 입력하세요. Enter로 이름 변경, Escape로 취소." + "value": "사용자 지정 탭 이름을 선택하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skriv inn et arbeidsområdenavn. Trykk Enter for å gi nytt navn, Escape for å avbryte." + "value": "Velg et egendefinert fanenavn." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wprowadź nazwę przestrzeni roboczej. Naciśnij Enter, aby zmienić nazwę, Escape, aby anulować." + "value": "Wybierz własną nazwę karty." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Insira um nome para a área de trabalho. Pressione Enter para renomear, Escape para cancelar." + "value": "Escolha um nome personalizado para a aba." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Введите имя рабочего пространства. Нажмите Enter для переименования, Escape для отмены." + "value": "Выберите пользовательское имя вкладки." } }, "th": { "stringUnit": { "state": "translated", - "value": "ป้อนชื่อเวิร์กสเปซ กด Enter เพื่อเปลี่ยนชื่อ, Escape เพื่อยกเลิก" + "value": "เลือกชื่อแท็บที่กำหนดเอง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bir çalışma alanı adı girin. Yeniden adlandırmak için Enter, iptal etmek için Escape tuşuna basın." + "value": "Özel bir sekme adı seçin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Введіть назву робочої області. Enter — перейменувати, Escape — скасувати." + "value": "Виберіть власну назву вкладки." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "输入工作区名称。按 Enter 重命名,按 Escape 取消。" + "value": "选择自定义标签页名称。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "輸入工作區名稱。按 Enter 重新命名,按 Escape 取消。" + "value": "選擇自訂標籤頁名稱。" } } } }, - "commandPalette.rename.workspacePlaceholder": { + "commandPalette.rename.tabInputHint": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اسم مساحة العمل" + "value": "أدخل اسم اللسان. اضغط Enter لإعادة التسمية، Escape للإلغاء." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Naziv radnog prostora" + "value": "Unesite naziv taba. Pritisnite Enter za preimenovanje, Escape za otkazivanje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområdenavn" + "value": "Indtast et fanenavn. Tryk Enter for at omdøbe, Escape for at annullere." } }, "de": { "stringUnit": { "state": "translated", - "value": "Name des Arbeitsbereichs" + "value": "Geben Sie einen Tab-Namen ein. Eingabetaste zum Umbenennen, Escape zum Abbrechen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace name" + "value": "Enter a tab name. Press Enter to rename, Escape to cancel." } }, "es": { "stringUnit": { "state": "translated", - "value": "Nombre del espacio de trabajo" + "value": "Introduce un nombre de pestaña. Pulsa Intro para renombrar, Escape para cancelar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nom de l'espace de travail" + "value": "Saisissez un nom d'onglet. Appuyez sur Entrée pour renommer, Échap pour annuler." } }, "it": { "stringUnit": { "state": "translated", - "value": "Nome area di lavoro" + "value": "Inserisci un nome per la scheda. Premi Invio per rinominare, Esc per annullare." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース名" + "value": "タブ名を入力してください。Enterで名称変更、Escapeでキャンセルします。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름" + "value": "탭 이름을 입력하세요. Enter로 이름 변경, Escape로 취소." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområdenavn" + "value": "Skriv inn et fanenavn. Trykk Enter for å gi nytt navn, Escape for å avbryte." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nazwa przestrzeni roboczej" + "value": "Wprowadź nazwę karty. Naciśnij Enter, aby zmienić nazwę, Escape, aby anulować." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nome da área de trabalho" + "value": "Insira um nome para a aba. Pressione Enter para renomear, Escape para cancelar." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Имя рабочего пространства" + "value": "Введите имя вкладки. Нажмите Enter для переименования, Escape для отмены." } }, "th": { "stringUnit": { "state": "translated", - "value": "ชื่อเวิร์กสเปซ" + "value": "ป้อนชื่อแท็บ กด Enter เพื่อเปลี่ยนชื่อ, Escape เพื่อยกเลิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma alanı adı" + "value": "Bir sekme adı girin. Yeniden adlandırmak için Enter, iptal etmek için Escape tuşuna basın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Назва робочої області" + "value": "Введіть назву вкладки. Enter — перейменувати, Escape — скасувати." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区名称" + "value": "输入标签页名称。按 Enter 重命名,按 Escape 取消。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區名稱" + "value": "輸入標籤頁名稱。按 Enter 重新命名,按 Escape 取消。" } } } }, - "commandPalette.rename.workspaceTitle": { + "commandPalette.rename.tabPlaceholder": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية مساحة العمل" + "value": "اسم اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preimenuj radni prostor" + "value": "Naziv taba" } }, "da": { "stringUnit": { "state": "translated", - "value": "Omdøb arbejdsområde" + "value": "Fanenavn" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich umbenennen" + "value": "Tab-Name" } }, "en": { "stringUnit": { "state": "translated", - "value": "Rename Workspace" + "value": "Tab name" } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar espacio de trabajo" + "value": "Nombre de pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer l'espace de travail" + "value": "Nom de l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rinomina area di lavoro" + "value": "Nome scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースの名称変更" + "value": "タブ名" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름 변경" + "value": "탭 이름" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gi arbeidsområdet nytt navn" + "value": "Fanenavn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę przestrzeni roboczej" + "value": "Nazwa karty" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Renomear Área de Trabalho" + "value": "Nome da aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переименовать рабочее пространство" + "value": "Имя вкладки" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อเวิร์กสเปซ" + "value": "ชื่อแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Yeniden Adlandır" + "value": "Sekme adı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейменувати робочу область" + "value": "Назва вкладки" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名工作区" + "value": "标签页名称" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名工作區" + "value": "標籤頁名稱" } } } }, - "commandPalette.search.commandsEmpty": { + "commandPalette.rename.tabTitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد أوامر تطابق بحثك." + "value": "إعادة تسمية اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nijedna naredba ne odgovara vašoj pretrazi." + "value": "Preimenuj tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ingen kommandoer matcher din søgning." + "value": "Omdøb fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Befehle entsprechen Ihrer Suche." + "value": "Tab umbenennen" } }, "en": { "stringUnit": { "state": "translated", - "value": "No commands match your search." + "value": "Rename Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ningún comando coincide con tu búsqueda." + "value": "Renombrar pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune commande ne correspond à votre recherche." + "value": "Renommer l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nessun comando corrisponde alla ricerca." + "value": "Rinomina scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "検索に一致するコマンドがありません。" + "value": "タブの名称変更" } }, "ko": { "stringUnit": { "state": "translated", - "value": "검색과 일치하는 명령어가 없습니다." + "value": "탭 이름 변경" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ingen kommandoer samsvarer med søket ditt." + "value": "Gi fanen nytt navn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Brak poleceń pasujących do wyszukiwania." + "value": "Zmień nazwę karty" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nenhum comando corresponde à sua pesquisa." + "value": "Renomear Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Нет команд, соответствующих запросу." + "value": "Переименовать вкладку" } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่มีคำสั่งที่ตรงกับการค้นหาของคุณ" + "value": "เปลี่ยนชื่อแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Aramanızla eşleşen komut yok." + "value": "Sekmeyi Yeniden Adlandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Команди, що відповідають пошуку, не знайдено." + "value": "Перейменувати вкладку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有匹配的命令。" + "value": "重命名标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有符合搜尋的指令。" + "value": "重新命名標籤頁" } } } }, - "commandPalette.search.commandsPlaceholder": { + "commandPalette.rename.workspaceConfirmHint": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اكتب أمرًا" + "value": "اضغط Enter لتطبيق اسم مساحة العمل، أو Escape للإلغاء." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Unesite naredbu" + "value": "Pritisnite Enter za primjenu naziva radnog prostora, ili Escape za otkazivanje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Skriv en kommando" + "value": "Tryk Enter for at anvende dette arbejdsområdenavn, eller Escape for at annullere." } }, "de": { "stringUnit": { "state": "translated", - "value": "Befehl eingeben" + "value": "Drücken Sie die Eingabetaste, um den Arbeitsbereichsnamen zu übernehmen, oder Escape zum Abbrechen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Type a command" + "value": "Press Enter to apply this workspace name, or Escape to cancel." } }, "es": { "stringUnit": { "state": "translated", - "value": "Escribe un comando" + "value": "Pulsa Intro para aplicar este nombre de espacio de trabajo, o Escape para cancelar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Saisissez une commande" + "value": "Appuyez sur Entrée pour appliquer ce nom d'espace de travail, ou sur Échap pour annuler." } }, "it": { "stringUnit": { "state": "translated", - "value": "Digita un comando" + "value": "Premi Invio per applicare il nome dell'area di lavoro, oppure Esc per annullare." } }, "ja": { "stringUnit": { "state": "translated", - "value": "コマンドを入力" + "value": "Enterキーでワークスペース名を適用、Escapeキーでキャンセルします。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "명령어를 입력하세요" + "value": "Enter를 눌러 작업 공간 이름을 적용하거나, Escape를 눌러 취소하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skriv en kommando" + "value": "Trykk Enter for å bruke dette arbeidsområdenavnet, eller Escape for å avbryte." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wpisz polecenie" + "value": "Naciśnij Enter, aby zastosować nazwę przestrzeni roboczej, lub Escape, aby anulować." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Digite um comando" + "value": "Pressione Enter para aplicar este nome de área de trabalho ou Escape para cancelar." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Введите команду" + "value": "Нажмите Enter, чтобы применить имя рабочего пространства, или Escape для отмены." } }, "th": { "stringUnit": { "state": "translated", - "value": "พิมพ์คำสั่ง" + "value": "กด Enter เพื่อใช้ชื่อเวิร์กสเปซนี้ หรือ Escape เพื่อยกเลิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bir komut yazın" + "value": "Bu çalışma alanı adını uygulamak için Enter tuşuna basın veya iptal etmek için Escape tuşuna basın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Введіть команду" + "value": "Натисніть Enter, щоб застосувати назву робочої області, або Escape для скасування." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "输入命令" + "value": "按 Enter 应用此工作区名称,或按 Escape 取消。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "輸入指令" + "value": "按 Enter 套用此工作區名稱,或按 Escape 取消。" } } } }, - "commandPalette.search.switcherEmpty": { + "commandPalette.rename.workspaceDescription": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد مساحات عمل تطابق بحثك." + "value": "اختر اسمًا مخصصًا لمساحة العمل." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nijedan radni prostor ne odgovara vašoj pretrazi." + "value": "Odaberite prilagođeni naziv radnog prostora." } }, "da": { "stringUnit": { "state": "translated", - "value": "Ingen arbejdsområder matcher din søgning." + "value": "Vælg et brugerdefineret arbejdsområdenavn." } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Arbeitsbereiche entsprechen Ihrer Suche." + "value": "Wählen Sie einen benutzerdefinierten Arbeitsbereichsnamen." } }, "en": { "stringUnit": { "state": "translated", - "value": "No workspaces match your search." + "value": "Choose a custom workspace name." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ningún espacio de trabajo coincide con tu búsqueda." + "value": "Elige un nombre personalizado para el espacio de trabajo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucun espace de travail ne correspond à votre recherche." + "value": "Choisissez un nom personnalisé pour l'espace de travail." } }, "it": { "stringUnit": { "state": "translated", - "value": "Nessuna area di lavoro corrisponde alla ricerca." + "value": "Scegli un nome personalizzato per l'area di lavoro." } }, "ja": { "stringUnit": { "state": "translated", - "value": "検索に一致するワークスペースがありません。" + "value": "ワークスペースのカスタム名を選択してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "검색과 일치하는 작업 공간이 없습니다." + "value": "사용자 지정 작업 공간 이름을 선택하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ingen arbeidsområder samsvarer med søket ditt." + "value": "Velg et egendefinert arbeidsområdenavn." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Brak przestrzeni roboczych pasujących do wyszukiwania." + "value": "Wybierz własną nazwę przestrzeni roboczej." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nenhuma área de trabalho corresponde à sua pesquisa." + "value": "Escolha um nome personalizado para a área de trabalho." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Нет рабочих пространств, соответствующих запросу." + "value": "Выберите пользовательское имя рабочего пространства." } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่มีเวิร์กสเปซที่ตรงกับการค้นหาของคุณ" + "value": "เลือกชื่อเวิร์กสเปซที่กำหนดเอง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Aramanızla eşleşen çalışma alanı yok." + "value": "Özel bir çalışma alanı adı seçin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робочі області, що відповідають пошуку, не знайдено." + "value": "Виберіть власну назву робочої області." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有匹配的工作区。" + "value": "选择自定义工作区名称。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有符合搜尋的工作區。" - } - } - } - }, - "commandPalette.search.switcherEmptyAllSurfaces": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No workspaces or surfaces match your search." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "検索に一致するワークスペースまたはサーフェスはありません。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "검색과 일치하는 워크스페이스 또는 서피스가 없습니다." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Робочі області чи поверхні, що відповідають пошуку, не знайдено." + "value": "選擇自訂工作區名稱。" } } } }, - "commandPalette.search.switcherPlaceholder": { + "commandPalette.rename.workspaceInputHint": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "البحث في مساحات العمل" + "value": "أدخل اسم مساحة العمل. اضغط Enter لإعادة التسمية، Escape للإلغاء." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pretraži radne prostore" + "value": "Unesite naziv radnog prostora. Pritisnite Enter za preimenovanje, Escape za otkazivanje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Søg i arbejdsområder" + "value": "Indtast et arbejdsområdenavn. Tryk Enter for at omdøbe, Escape for at annullere." } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche durchsuchen" + "value": "Geben Sie einen Arbeitsbereichsnamen ein. Eingabetaste zum Umbenennen, Escape zum Abbrechen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Search workspaces" + "value": "Enter a workspace name. Press Enter to rename, Escape to cancel." } }, "es": { "stringUnit": { "state": "translated", - "value": "Buscar espacios de trabajo" + "value": "Introduce un nombre de espacio de trabajo. Pulsa Intro para renombrar, Escape para cancelar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Rechercher des espaces de travail" + "value": "Saisissez un nom d'espace de travail. Appuyez sur Entrée pour renommer, Échap pour annuler." } }, "it": { "stringUnit": { "state": "translated", - "value": "Cerca aree di lavoro" + "value": "Inserisci un nome per l'area di lavoro. Premi Invio per rinominare, Esc per annullare." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを検索" + "value": "ワークスペース名を入力してください。Enterで名称変更、Escapeでキャンセルします。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 검색" + "value": "작업 공간 이름을 입력하세요. Enter로 이름 변경, Escape로 취소." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Søk i arbeidsområder" + "value": "Skriv inn et arbeidsområdenavn. Trykk Enter for å gi nytt navn, Escape for å avbryte." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Szukaj przestrzeni roboczych" + "value": "Wprowadź nazwę przestrzeni roboczej. Naciśnij Enter, aby zmienić nazwę, Escape, aby anulować." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pesquisar áreas de trabalho" + "value": "Insira um nome para a área de trabalho. Pressione Enter para renomear, Escape para cancelar." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Поиск рабочих пространств" + "value": "Введите имя рабочего пространства. Нажмите Enter для переименования, Escape для отмены." } }, "th": { "stringUnit": { "state": "translated", - "value": "ค้นหาเวิร์กสเปซ" + "value": "ป้อนชื่อเวิร์กสเปซ กด Enter เพื่อเปลี่ยนชื่อ, Escape เพื่อยกเลิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma alanlarını ara" + "value": "Bir çalışma alanı adı girin. Yeniden adlandırmak için Enter, iptal etmek için Escape tuşuna basın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Пошук робочих областей" + "value": "Введіть назву робочої області. Enter — перейменувати, Escape — скасувати." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "搜索工作区" + "value": "输入工作区名称。按 Enter 重命名,按 Escape 取消。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "搜尋工作區" - } - } - } - }, - "commandPalette.search.switcherPlaceholderAllSurfaces": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Search workspaces and surfaces" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースとサーフェスを検索" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "워크스페이스 및 서피스 검색" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Пошук робочих областей і поверхонь" + "value": "輸入工作區名稱。按 Enter 重新命名,按 Escape 取消。" } } } }, - "commandPalette.subtitle.browserWithName": { + "commandPalette.rename.workspacePlaceholder": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "المتصفح • %@" + "value": "اسم مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preglednik • %@" + "value": "Naziv radnog prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Browser • %@" + "value": "Arbejdsområdenavn" } }, "de": { "stringUnit": { "state": "translated", - "value": "Browser • %@" + "value": "Name des Arbeitsbereichs" } }, "en": { "stringUnit": { "state": "translated", - "value": "Browser • %@" + "value": "Workspace name" } }, "es": { "stringUnit": { "state": "translated", - "value": "Navegador • %@" + "value": "Nombre del espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navigateur • %@" + "value": "Nom de l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Browser • %@" + "value": "Nome area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザ • %@" + "value": "ワークスペース名" } }, "ko": { "stringUnit": { "state": "translated", - "value": "브라우저 • %@" + "value": "작업 공간 이름" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nettleser • %@" + "value": "Arbeidsområdenavn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przeglądarka • %@" + "value": "Nazwa przestrzeni roboczej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navegador • %@" + "value": "Nome da área de trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Браузер • %@" + "value": "Имя рабочего пространства" } }, "th": { "stringUnit": { "state": "translated", - "value": "เบราว์เซอร์ • %@" + "value": "ชื่อเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tarayıcı • %@" + "value": "Çalışma alanı adı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Браузер • %@" + "value": "Назва робочої області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "浏览器 • %@" + "value": "工作区名称" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瀏覽器 • %@" - } - } - } - }, - "commandPalette.subtitle.markdownWithName": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Markdown • %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Markdown • %@" + "value": "工作區名稱" } } } }, - "commandPalette.subtitle.tabFallback": { + "commandPalette.rename.workspaceTitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لسان" + "value": "إعادة تسمية مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Preimenuj radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Omdøb arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Arbeitsbereich umbenennen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Tab" + "value": "Rename Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pestaña" + "value": "Renombrar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Onglet" + "value": "Renommer l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scheda" + "value": "Rinomina area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ" + "value": "ワークスペースの名称変更" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭" + "value": "작업 공간 이름 변경" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fane" + "value": "Gi arbeidsområdet nytt navn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Karta" + "value": "Zmień nazwę przestrzeni roboczej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aba" + "value": "Renomear Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Переименовать рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บ" + "value": "เปลี่ยนชื่อเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme" + "value": "Çalışma Alanını Yeniden Adlandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вкладка" + "value": "Перейменувати робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页" + "value": "重命名工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁" + "value": "重新命名工作區" } } } }, - "commandPalette.subtitle.tabWithName": { + "commandPalette.search.commandsEmpty": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لسان • %@" + "value": "لا توجد أوامر تطابق بحثك." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Tab • %@" + "value": "Nijedna naredba ne odgovara vašoj pretrazi." } }, "da": { "stringUnit": { "state": "translated", - "value": "Fane • %@" + "value": "Ingen kommandoer matcher din søgning." } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab • %@" + "value": "Keine Befehle entsprechen Ihrer Suche." } }, "en": { "stringUnit": { "state": "translated", - "value": "Tab • %@" + "value": "No commands match your search." } }, "es": { "stringUnit": { "state": "translated", - "value": "Pestaña • %@" + "value": "Ningún comando coincide con tu búsqueda." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Onglet • %@" + "value": "Aucune commande ne correspond à votre recherche." } }, "it": { "stringUnit": { "state": "translated", - "value": "Scheda • %@" + "value": "Nessun comando corrisponde alla ricerca." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ • %@" + "value": "検索に一致するコマンドがありません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 • %@" + "value": "검색과 일치하는 명령어가 없습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fane • %@" + "value": "Ingen kommandoer samsvarer med søket ditt." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Karta • %@" + "value": "Brak poleceń pasujących do wyszukiwania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aba • %@" + "value": "Nenhum comando corresponde à sua pesquisa." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вкладка • %@" + "value": "Нет команд, соответствующих запросу." } }, "th": { "stringUnit": { "state": "translated", - "value": "แท็บ • %@" + "value": "ไม่มีคำสั่งที่ตรงกับการค้นหาของคุณ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme • %@" + "value": "Aramanızla eşleşen komut yok." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вкладка • %@" + "value": "Команди, що відповідають пошуку, не знайдено." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页 • %@" + "value": "没有匹配的命令。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁 • %@" + "value": "沒有符合搜尋的指令。" } } } }, - "commandPalette.subtitle.terminalWithName": { + "commandPalette.search.commandsPlaceholder": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الطرفية • %@" + "value": "اكتب أمرًا" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Unesite naredbu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Skriv en kommando" } }, "de": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Befehl eingeben" } }, "en": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Type a command" } }, "es": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Escribe un comando" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Saisissez une commande" } }, "it": { "stringUnit": { "state": "translated", - "value": "Terminale • %@" + "value": "Digita un comando" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナル • %@" + "value": "コマンドを入力" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 • %@" + "value": "명령어를 입력하세요" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Skriv en kommando" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Wpisz polecenie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Digite um comando" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Терминал • %@" + "value": "Введите команду" } }, "th": { "stringUnit": { "state": "translated", - "value": "เทอร์มินัล • %@" + "value": "พิมพ์คำสั่ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Terminal • %@" + "value": "Bir komut yazın" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Термінал • %@" + "value": "Введіть команду" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "终端 • %@" + "value": "输入命令" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終端機 • %@" + "value": "輸入指令" } } } }, - "commandPalette.subtitle.workspaceFallback": { + "commandPalette.search.switcherEmpty": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل" + "value": "لا توجد مساحات عمل تطابق بحثك." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor" + "value": "Nijedan radni prostor ne odgovara vašoj pretrazi." } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområde" + "value": "Ingen arbejdsområder matcher din søgning." } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich" + "value": "Keine Arbeitsbereiche entsprechen Ihrer Suche." } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace" + "value": "No workspaces match your search." } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo" + "value": "Ningún espacio de trabajo coincide con tu búsqueda." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail" + "value": "Aucun espace de travail ne correspond à votre recherche." } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro" + "value": "Nessuna area di lavoro corrisponde alla ricerca." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "検索に一致するワークスペースがありません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간" + "value": "검색과 일치하는 작업 공간이 없습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområde" + "value": "Ingen arbeidsområder samsvarer med søket ditt." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza" + "value": "Brak przestrzeni roboczych pasujących do wyszukiwania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho" + "value": "Nenhuma área de trabalho corresponde à sua pesquisa." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство" + "value": "Нет рабочих пространств, соответствующих запросу." } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ" + "value": "ไม่มีเวิร์กสเปซที่ตรงกับการค้นหาของคุณ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı" + "value": "Aramanızla eşleşen çalışma alanı yok." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область" + "value": "Робочі області, що відповідають пошуку, не знайдено." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "没有匹配的工作区。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區" + "value": "沒有符合搜尋的工作區。" } } } }, - "commandPalette.subtitle.workspaceWithName": { + "commandPalette.search.switcherEmptyAllSurfaces": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No workspaces or surfaces match your search." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "検索に一致するワークスペースまたはサーフェスはありません。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "검색과 일치하는 워크스페이스 또는 서피스가 없습니다." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Робочі області чи поверхні, що відповідають пошуку, не знайдено." + } + } + } + }, + "commandPalette.search.switcherPlaceholder": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل • %@" + "value": "البحث في مساحات العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor • %@" + "value": "Pretraži radne prostore" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområde • %@" + "value": "Søg i arbejdsområder" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich • %@" + "value": "Arbeitsbereiche durchsuchen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace • %@" + "value": "Search workspaces" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo • %@" + "value": "Buscar espacios de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail • %@" + "value": "Rechercher des espaces de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro • %@" + "value": "Cerca aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース • %@" + "value": "ワークスペースを検索" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 • %@" + "value": "작업 공간 검색" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområde • %@" + "value": "Søk i arbeidsområder" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza • %@" + "value": "Szukaj przestrzeni roboczych" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho • %@" + "value": "Pesquisar áreas de trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство • %@" + "value": "Поиск рабочих пространств" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ • %@" + "value": "ค้นหาเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı • %@" + "value": "Çalışma alanlarını ara" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область • %@" + "value": "Пошук робочих областей" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区 • %@" + "value": "搜索工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區 • %@" + "value": "搜尋工作區" } } } }, - "commandPalette.switcher.windowLabel": { + "commandPalette.search.switcherPlaceholderAllSurfaces": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Search workspaces and surfaces" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースとサーフェスを検索" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "워크스페이스 및 서피스 검색" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Пошук робочих областей і поверхонь" + } + } + } + }, + "commandPalette.subtitle.browserWithName": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "النافذة %lld" + "value": "المتصفح • %@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prozor %lld" + "value": "Preglednik • %@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vindue %lld" + "value": "Browser • %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fenster %lld" + "value": "Browser • %@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Window %lld" + "value": "Browser • %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana %lld" + "value": "Navegador • %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fenêtre %lld" + "value": "Navigateur • %@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Finestra %lld" + "value": "Browser • %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウインドウ %lld" + "value": "ブラウザ • %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "윈도우 %lld" + "value": "브라우저 • %@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vindu %lld" + "value": "Nettleser • %@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Okno %lld" + "value": "Przeglądarka • %@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Janela %lld" + "value": "Navegador • %@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Окно %lld" + "value": "Браузер • %@" } }, "th": { "stringUnit": { "state": "translated", - "value": "หน้าต่าง %lld" + "value": "เบราว์เซอร์ • %@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pencere %lld" + "value": "Tarayıcı • %@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вікно %lld" + "value": "Браузер • %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "窗口 %lld" + "value": "浏览器 • %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "視窗 %lld" + "value": "瀏覽器 • %@" } } } }, - "commandPalette.switcher.workspaceLabel": { + "commandPalette.subtitle.markdownWithName": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Markdown • %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Markdown • %@" + } + } + } + }, + "commandPalette.subtitle.tabFallback": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل" + "value": "لسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor" + "value": "Tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområde" + "value": "Fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich" + "value": "Tab" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace" + "value": "Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo" + "value": "Pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail" + "value": "Onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro" + "value": "Scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "タブ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간" + "value": "탭" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområde" + "value": "Fane" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza" + "value": "Karta" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho" + "value": "Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство" + "value": "Вкладка" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซ" + "value": "แท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı" + "value": "Sekme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область" + "value": "Вкладка" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区" + "value": "标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區" + "value": "標籤頁" } } } }, - "common.allow": { + "commandPalette.subtitle.tabWithName": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سماح" + "value": "لسان • %@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Dozvoli" + "value": "Tab • %@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Tillad" + "value": "Fane • %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Erlauben" + "value": "Tab • %@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Allow" + "value": "Tab • %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Permitir" + "value": "Pestaña • %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Autoriser" + "value": "Onglet • %@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Consenti" + "value": "Scheda • %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "許可" + "value": "タブ • %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "허용" + "value": "탭 • %@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Tillat" + "value": "Fane • %@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zezwól" + "value": "Karta • %@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Permitir" + "value": "Aba • %@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разрешить" + "value": "Вкладка • %@" } }, "th": { "stringUnit": { "state": "translated", - "value": "อนุญาต" + "value": "แท็บ • %@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İzin Ver" + "value": "Sekme • %@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дозволити" + "value": "Вкладка • %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "允许" + "value": "标签页 • %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "允許" + "value": "標籤頁 • %@" } } } }, - "common.cancel": { + "commandPalette.subtitle.terminalWithName": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "الطرفية • %@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkaži" + "value": "Terminal • %@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Annuller" + "value": "Terminal • %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Terminal • %@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Terminal • %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Terminal • %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Terminal • %@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Annulla" + "value": "Terminale • %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "ターミナル • %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "터미널 • %@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avbryt" + "value": "Terminal • %@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Anuluj" + "value": "Terminal • %@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Terminal • %@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отменить" + "value": "Терминал • %@" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยกเลิก" + "value": "เทอร์มินัล • %@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Vazgeç" + "value": "Terminal • %@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скасувати" + "value": "Термінал • %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "终端 • %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "終端機 • %@" } } } }, - "common.close": { + "commandPalette.subtitle.workspaceFallback": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق" + "value": "مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori" + "value": "Radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk" + "value": "Arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schließen" + "value": "Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close" + "value": "Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar" + "value": "Espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer" + "value": "Espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi" + "value": "Area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "閉じる" + "value": "ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "닫기" + "value": "작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk" + "value": "Arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij" + "value": "Przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar" + "value": "Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть" + "value": "Рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kapat" + "value": "Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити" + "value": "Робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "工作區" } } } }, - "common.copyDetails": { + "commandPalette.subtitle.workspaceWithName": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نسخ التفاصيل" + "value": "مساحة العمل • %@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kopiraj detalje" + "value": "Radni prostor • %@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kopier detaljer" + "value": "Arbejdsområde • %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Details kopieren" + "value": "Arbeitsbereich • %@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Copy Details" + "value": "Workspace • %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copiar detalles" + "value": "Espacio de trabajo • %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copier les détails" + "value": "Espace de travail • %@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Copia dettagli" + "value": "Area di lavoro • %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "詳細をコピー" + "value": "ワークスペース • %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "세부 정보 복사" + "value": "작업 공간 • %@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kopier detaljer" + "value": "Arbeidsområde • %@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kopiuj szczegóły" + "value": "Przestrzeń robocza • %@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Copiar Detalhes" + "value": "Área de Trabalho • %@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Скопировать подробности" + "value": "Рабочее пространство • %@" } }, "th": { "stringUnit": { "state": "translated", - "value": "คัดลอกรายละเอียด" + "value": "เวิร์กสเปซ • %@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ayrıntıları Kopyala" + "value": "Çalışma Alanı • %@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Копіювати деталі" + "value": "Робоча область • %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "拷贝详细信息" + "value": "工作区 • %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "拷貝詳細資訊" - } - } - } - }, - "common.create": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Create" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "作成" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "생성" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Створити" + "value": "工作區 • %@" } } } }, - "common.dontSave": { + "commandPalette.switcher.windowLabel": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عدم الحفظ" + "value": "النافذة %lld" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ne spremi" + "value": "Prozor %lld" } }, "da": { "stringUnit": { "state": "translated", - "value": "Gem ikke" + "value": "Vindue %lld" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nicht sichern" + "value": "Fenster %lld" } }, "en": { "stringUnit": { "state": "translated", - "value": "Don't Save" + "value": "Window %lld" } }, "es": { "stringUnit": { "state": "translated", - "value": "No guardar" + "value": "Ventana %lld" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ne pas enregistrer" + "value": "Fenêtre %lld" } }, "it": { "stringUnit": { "state": "translated", - "value": "Non salvare" + "value": "Finestra %lld" } }, "ja": { "stringUnit": { "state": "translated", - "value": "保存しない" + "value": "ウインドウ %lld" } }, "ko": { "stringUnit": { "state": "translated", - "value": "저장 안 함" + "value": "윈도우 %lld" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ikke arkiver" + "value": "Vindu %lld" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nie zachowuj" + "value": "Okno %lld" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Não Salvar" + "value": "Janela %lld" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Не сохранять" + "value": "Окно %lld" } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่บันทึก" + "value": "หน้าต่าง %lld" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kaydetme" + "value": "Pencere %lld" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Не зберігати" + "value": "Вікно %lld" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "不存储" + "value": "窗口 %lld" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "不儲存" + "value": "視窗 %lld" } } } }, - "common.installAndRelaunch": { + "commandPalette.switcher.workspaceLabel": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تثبيت وإعادة التشغيل" + "value": "مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Instaliraj i ponovo pokreni" + "value": "Radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Installer og genstart" + "value": "Arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Installieren und neu starten" + "value": "Arbeitsbereich" } }, "en": { "stringUnit": { "state": "translated", - "value": "Install and Relaunch" + "value": "Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Instalar y reiniciar" + "value": "Espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Installer et relancer" + "value": "Espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Installa e riavvia" + "value": "Area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "インストールして再起動" + "value": "ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "설치 후 재실행" + "value": "작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Installer og start på nytt" + "value": "Arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zainstaluj i uruchom ponownie" + "value": "Przestrzeń robocza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Instalar e Reiniciar" + "value": "Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Установить и перезапустить" + "value": "Рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "ติดตั้งและเปิดใหม่" + "value": "เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yükle ve Yeniden Başlat" + "value": "Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Встановити та перезапустити" + "value": "Робоча область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "安装并重新启动" + "value": "工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "安裝並重新啟動" + "value": "工作區" } } } }, - "common.later": { + "common.allow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لاحقًا" + "value": "سماح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kasnije" + "value": "Dozvoli" } }, "da": { "stringUnit": { "state": "translated", - "value": "Senere" + "value": "Tillad" } }, "de": { "stringUnit": { "state": "translated", - "value": "Später" + "value": "Erlauben" } }, "en": { "stringUnit": { "state": "translated", - "value": "Later" + "value": "Allow" } }, "es": { "stringUnit": { "state": "translated", - "value": "Más tarde" + "value": "Permitir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Plus tard" + "value": "Autoriser" } }, "it": { "stringUnit": { "state": "translated", - "value": "Più tardi" + "value": "Consenti" } }, "ja": { "stringUnit": { "state": "translated", - "value": "後で" + "value": "許可" } }, "ko": { "stringUnit": { "state": "translated", - "value": "나중에" + "value": "허용" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Senere" + "value": "Tillat" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Później" + "value": "Zezwól" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Depois" + "value": "Permitir" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Позже" + "value": "Разрешить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภายหลัง" + "value": "อนุญาต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Daha Sonra" + "value": "İzin Ver" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Пізніше" + "value": "Дозволити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "稍后" + "value": "允许" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "稍後" + "value": "允許" } } } }, - "common.notNow": { + "common.cancel": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "ليس الآن" + "value": "إلغاء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ne sada" + "value": "Otkaži" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ikke nu" + "value": "Annuller" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nicht jetzt" + "value": "Abbrechen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Not Now" + "value": "Cancel" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ahora no" + "value": "Cancelar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pas maintenant" + "value": "Annuler" } }, "it": { "stringUnit": { "state": "translated", - "value": "Non ora" + "value": "Annulla" } }, "ja": { "stringUnit": { "state": "translated", - "value": "今はしない" + "value": "キャンセル" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បោះបង់" } }, "ko": { "stringUnit": { "state": "translated", - "value": "나중에" + "value": "취소" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ikke nå" + "value": "Avbryt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nie teraz" + "value": "Anuluj" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Agora Não" + "value": "Cancelar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Не сейчас" + "value": "Отменить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่ใช่ตอนนี้" + "value": "ยกเลิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Şimdi Değil" + "value": "Vazgeç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Не зараз" + "value": "Скасувати" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "以后再说" + "value": "取消" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "現在不要" + "value": "取消" } } } }, - "common.ok": { + "common.close": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "إغلاق" } }, "bs": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Zatvori" } }, "da": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Luk" } }, "de": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Schließen" } }, "en": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Close" } }, "es": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Cerrar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Fermer" } }, "it": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Chiudi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "닫기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Lukk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Zamknij" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Fechar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Закрыть" } }, "th": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "ปิด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tamam" + "value": "Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Закрити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "关闭" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "關閉" } } } }, - "common.rename": { + "common.copyDetails": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية" + "value": "نسخ التفاصيل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preimenuj" + "value": "Kopiraj detalje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Omdøb" + "value": "Kopier detaljer" } }, "de": { "stringUnit": { "state": "translated", - "value": "Umbenennen" + "value": "Details kopieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Rename" + "value": "Copy Details" } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar" + "value": "Copiar detalles" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer" + "value": "Copier les détails" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rinomina" + "value": "Copia dettagli" } }, "ja": { "stringUnit": { "state": "translated", - "value": "名前を変更" + "value": "詳細をコピー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이름 변경" + "value": "세부 정보 복사" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gi nytt navn" + "value": "Kopier detaljer" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę" + "value": "Kopiuj szczegóły" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Renomear" + "value": "Copiar Detalhes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переименовать" + "value": "Скопировать подробности" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อ" + "value": "คัดลอกรายละเอียด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeniden Adlandır" + "value": "Ayrıntıları Kopyala" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейменувати" + "value": "Копіювати деталі" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名" + "value": "拷贝详细信息" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名" + "value": "拷貝詳細資訊" } } } }, - "common.restartLater": { + "common.create": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "إعادة التشغيل لاحقًا" + "value": "Create" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ponovo pokreni kasnije" + "value": "作成" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Genstart senere" + "value": "생성" } }, - "de": { + "uk": { "stringUnit": { "state": "translated", - "value": "Später neu starten" + "value": "Створити" } - }, + } + } + }, + "common.dontSave": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "عدم الحفظ" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Ne spremi" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Gem ikke" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Nicht sichern" + } + }, "en": { "stringUnit": { "state": "translated", - "value": "Restart Later" + "value": "Don't Save" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reiniciar más tarde" + "value": "No guardar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Redémarrer plus tard" + "value": "Ne pas enregistrer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riavvia più tardi" + "value": "Non salvare" } }, "ja": { "stringUnit": { "state": "translated", - "value": "後で再起動" + "value": "保存しない" } }, "ko": { "stringUnit": { "state": "translated", - "value": "나중에 재시작" + "value": "저장 안 함" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Start på nytt senere" + "value": "Ikke arkiver" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uruchom ponownie później" + "value": "Nie zachowuj" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Reiniciar Depois" + "value": "Não Salvar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Перезапустить позже" + "value": "Не сохранять" } }, "th": { "stringUnit": { "state": "translated", - "value": "รีสตาร์ตภายหลัง" + "value": "ไม่บันทึก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Daha Sonra Yeniden Başlat" + "value": "Kaydetme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перезапустити пізніше" + "value": "Не зберігати" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "稍后重启" + "value": "不存储" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "稍後重新啟動" + "value": "不儲存" } } } }, - "common.restartNow": { + "common.installAndRelaunch": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة التشغيل الآن" + "value": "تثبيت وإعادة التشغيل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ponovo pokreni sada" + "value": "Instaliraj i ponovo pokreni" } }, "da": { "stringUnit": { "state": "translated", - "value": "Genstart nu" + "value": "Installer og genstart" } }, "de": { "stringUnit": { "state": "translated", - "value": "Jetzt neu starten" + "value": "Installieren und neu starten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Restart Now" + "value": "Install and Relaunch" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reiniciar ahora" + "value": "Instalar y reiniciar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Redémarrer maintenant" + "value": "Installer et relancer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riavvia ora" + "value": "Installa e riavvia" } }, "ja": { "stringUnit": { "state": "translated", - "value": "今すぐ再起動" + "value": "インストールして再起動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "지금 재시작" + "value": "설치 후 재실행" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Start på nytt nå" + "value": "Installer og start på nytt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uruchom ponownie teraz" + "value": "Zainstaluj i uruchom ponownie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Reiniciar Agora" + "value": "Instalar e Reiniciar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Перезапустить сейчас" + "value": "Установить и перезапустить" } }, "th": { "stringUnit": { "state": "translated", - "value": "รีสตาร์ตเดี๋ยวนี้" + "value": "ติดตั้งและเปิดใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Şimdi Yeniden Başlat" + "value": "Yükle ve Yeniden Başlat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перезапустити зараз" + "value": "Встановити та перезапустити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "立即重启" + "value": "安装并重新启动" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "立即重新啟動" + "value": "安裝並重新啟動" } } } }, - "common.retry": { + "common.later": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة المحاولة" + "value": "لاحقًا" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pokušaj ponovo" + "value": "Kasnije" } }, "da": { "stringUnit": { "state": "translated", - "value": "Prøv igen" + "value": "Senere" } }, "de": { "stringUnit": { "state": "translated", - "value": "Erneut versuchen" + "value": "Später" } }, "en": { "stringUnit": { "state": "translated", - "value": "Retry" + "value": "Later" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reintentar" + "value": "Más tarde" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Réessayer" + "value": "Plus tard" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riprova" + "value": "Più tardi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再試行" + "value": "後で" } }, "ko": { "stringUnit": { "state": "translated", - "value": "재시도" + "value": "나중에" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Prøv igjen" + "value": "Senere" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ponów" + "value": "Później" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tentar Novamente" + "value": "Depois" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Повторить" + "value": "Позже" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลองใหม่" + "value": "ภายหลัง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tekrar Dene" + "value": "Daha Sonra" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Повторити" + "value": "Пізніше" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重试" + "value": "稍后" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重試" + "value": "稍後" } } } }, - "common.skip": { + "common.notNow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تخطي" + "value": "ليس الآن" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preskoči" + "value": "Ne sada" } }, "da": { "stringUnit": { "state": "translated", - "value": "Spring over" + "value": "Ikke nu" } }, "de": { "stringUnit": { "state": "translated", - "value": "Überspringen" + "value": "Nicht jetzt" } }, "en": { "stringUnit": { "state": "translated", - "value": "Skip" + "value": "Not Now" } }, "es": { "stringUnit": { "state": "translated", - "value": "Omitir" + "value": "Ahora no" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ignorer" + "value": "Pas maintenant" } }, "it": { "stringUnit": { "state": "translated", - "value": "Salta" + "value": "Non ora" } }, "ja": { "stringUnit": { "state": "translated", - "value": "スキップ" + "value": "今はしない" } }, "ko": { "stringUnit": { "state": "translated", - "value": "건너뛰기" + "value": "나중에" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hopp over" + "value": "Ikke nå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pomiń" + "value": "Nie teraz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pular" + "value": "Agora Não" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Пропустить" + "value": "Не сейчас" } }, "th": { "stringUnit": { "state": "translated", - "value": "ข้าม" + "value": "ไม่ใช่ตอนนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Atla" + "value": "Şimdi Değil" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Пропустити" + "value": "Не зараз" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "跳过" + "value": "以后再说" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "略過" - } - } - } - }, - "contextMenu.addChecklistItem": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Add Checklist Item…" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "チェックリスト項目を追加…" + "value": "現在不要" } } } }, - "contextMenu.chooseCustomColor": { + "common.ok": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اختيار لون مخصص…" + "value": "OK" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odaberi prilagođenu boju…" + "value": "OK" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vælg brugerdefineret farve…" + "value": "OK" } }, "de": { "stringUnit": { "state": "translated", - "value": "Eigene Farbe wählen …" + "value": "OK" } }, "en": { "stringUnit": { "state": "translated", - "value": "Choose Custom Color…" + "value": "OK" } }, "es": { "stringUnit": { "state": "translated", - "value": "Elegir color personalizado…" + "value": "OK" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Choisir une couleur personnalisée..." + "value": "OK" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scegli colore personalizzato…" + "value": "OK" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カスタムカラーを選択…" + "value": "OK" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "យល់ព្រម" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자 지정 색상 선택…" + "value": "OK" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Velg egendefinert farge …" + "value": "OK" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybierz własny kolor…" + "value": "OK" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Escolher Cor Personalizada…" + "value": "OK" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выбрать пользовательский цвет..." + "value": "OK" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลือกสีที่กำหนดเอง..." + "value": "OK" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel Renk Seç…" + "value": "Tamam" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вибрати власний колір…" + "value": "OK" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选取自定义颜色..." + "value": "OK" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選擇自訂顏色..." + "value": "OK" } } } }, - "contextMenu.clearColor": { + "common.rename": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مسح اللون" + "value": "إعادة تسمية" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obriši boju" + "value": "Preimenuj" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ryd farve" + "value": "Omdøb" } }, "de": { "stringUnit": { "state": "translated", - "value": "Farbe entfernen" + "value": "Umbenennen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Clear Color" + "value": "Rename" } }, "es": { "stringUnit": { "state": "translated", - "value": "Borrar color" + "value": "Renombrar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Effacer la couleur" + "value": "Renommer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rimuovi colore" + "value": "Rinomina" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カラーをクリア" + "value": "名前を変更" } }, "ko": { "stringUnit": { "state": "translated", - "value": "색상 지우기" + "value": "이름 변경" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fjern farge" + "value": "Gi nytt navn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyczyść kolor" + "value": "Zmień nazwę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Limpar Cor" + "value": "Renomear" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Убрать цвет" + "value": "Переименовать" } }, "th": { "stringUnit": { "state": "translated", - "value": "ล้างสี" + "value": "เปลี่ยนชื่อ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Rengi Temizle" + "value": "Yeniden Adlandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скинути колір" + "value": "Перейменувати" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "清除颜色" + "value": "重命名" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "清除顏色" - } - } - } - }, - "contextMenu.clearLatestNotification": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Clear Latest Notification" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "最新の通知をクリア" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "최근 알림 지우기" - } - } - } - }, - "contextMenu.clearLatestNotifications": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Clear Latest Notifications" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "最新の通知をクリア" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "최근 알림 모두 지우기" - } - } - } - }, - "contextMenu.clearWorkspaceDescription": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Clear Workspace Description" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースの説明を消去" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "워크스페이스 설명 지우기" + "value": "重新命名" } } } }, - "contextMenu.closeOtherWorkspaces": { + "common.restartLater": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحات العمل الأخرى" + "value": "إعادة التشغيل لاحقًا" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori ostale radne prostore" + "value": "Ponovo pokreni kasnije" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk andre arbejdsområder" + "value": "Genstart senere" } }, "de": { "stringUnit": { "state": "translated", - "value": "Andere Arbeitsbereiche schließen" + "value": "Später neu starten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Other Workspaces" + "value": "Restart Later" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar otros espacios de trabajo" + "value": "Reiniciar más tarde" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer les autres espaces de travail" + "value": "Redémarrer plus tard" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi altre aree di lavoro" + "value": "Riavvia più tardi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "他のワークスペースを閉じる" + "value": "後で再起動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 작업 공간 닫기" + "value": "나중에 재시작" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk andre arbeidsområder" + "value": "Start på nytt senere" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij inne przestrzenie robocze" + "value": "Uruchom ponownie później" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Outras Áreas de Trabalho" + "value": "Reiniciar Depois" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть другие рабочие пространства" + "value": "Перезапустить позже" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซอื่น" + "value": "รีสตาร์ตภายหลัง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Diğer Çalışma Alanlarını Kapat" + "value": "Daha Sonra Yeniden Başlat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити інші робочі області" + "value": "Перезапустити пізніше" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭其他工作区" + "value": "稍后重启" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉其他工作區" + "value": "稍後重新啟動" } } } }, - "contextMenu.closeWorkspace": { + "common.restartNow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحة العمل" + "value": "إعادة التشغيل الآن" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori radni prostor" + "value": "Ponovo pokreni sada" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk arbejdsområde" + "value": "Genstart nu" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich schließen" + "value": "Jetzt neu starten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Workspace" + "value": "Restart Now" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar espacio de trabajo" + "value": "Reiniciar ahora" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer l'espace de travail" + "value": "Redémarrer maintenant" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi area di lavoro" + "value": "Riavvia ora" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを閉じる" + "value": "今すぐ再起動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 닫기" + "value": "지금 재시작" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk arbeidsområde" + "value": "Start på nytt nå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij przestrzeń roboczą" + "value": "Uruchom ponownie teraz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Área de Trabalho" + "value": "Reiniciar Agora" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть рабочее пространство" + "value": "Перезапустить сейчас" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซ" + "value": "รีสตาร์ตเดี๋ยวนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Kapat" + "value": "Şimdi Yeniden Başlat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити робочу область" + "value": "Перезапустити зараз" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭工作区" + "value": "立即重启" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉工作區" + "value": "立即重新啟動" } } } }, - "contextMenu.closeWorkspaces": { + "common.retry": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحات العمل" + "value": "إعادة المحاولة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori radne prostore" + "value": "Pokušaj ponovo" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk arbejdsområder" + "value": "Prøv igen" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche schließen" + "value": "Erneut versuchen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Workspaces" + "value": "Retry" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar espacios de trabajo" + "value": "Reintentar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer les espaces de travail" + "value": "Réessayer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi aree di lavoro" + "value": "Riprova" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを閉じる" + "value": "再試行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 닫기" + "value": "재시도" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk arbeidsområder" + "value": "Prøv igjen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij przestrzenie robocze" + "value": "Ponów" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Áreas de Trabalho" + "value": "Tentar Novamente" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть рабочие пространства" + "value": "Повторить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซ" + "value": "ลองใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanlarını Kapat" + "value": "Tekrar Dene" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити робочі області" + "value": "Повторити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭工作区" + "value": "重试" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉工作區" + "value": "重試" } } } }, - "contextMenu.closeWorkspacesAbove": { + "common.skip": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحات العمل أعلاه" + "value": "تخطي" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori radne prostore iznad" + "value": "Preskoči" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk arbejdsområder ovenfor" + "value": "Spring over" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche darüber schließen" + "value": "Überspringen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Workspaces Above" + "value": "Skip" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar espacios de trabajo superiores" + "value": "Omitir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer les espaces de travail au-dessus" + "value": "Ignorer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi aree di lavoro sopra" + "value": "Salta" } }, "ja": { "stringUnit": { "state": "translated", - "value": "上のワークスペースを閉じる" + "value": "スキップ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "위쪽 작업 공간 닫기" + "value": "건너뛰기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk arbeidsområder over" + "value": "Hopp over" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij przestrzenie robocze powyżej" + "value": "Pomiń" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Áreas de Trabalho Acima" + "value": "Pular" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть рабочие пространства выше" + "value": "Пропустить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซด้านบน" + "value": "ข้าม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yukarıdaki Çalışma Alanlarını Kapat" + "value": "Atla" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити робочі області вище" + "value": "Пропустити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭上方工作区" + "value": "跳过" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉上方的工作區" + "value": "略過" } } } }, - "contextMenu.closeWorkspacesBelow": { + "contextMenu.addChecklistItem": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Checklist Item…" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "チェックリスト項目を追加…" + } + } + } + }, + "contextMenu.chooseCustomColor": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحات العمل أدناه" + "value": "اختيار لون مخصص…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori radne prostore ispod" + "value": "Odaberi prilagođenu boju…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk arbejdsområder nedenfor" + "value": "Vælg brugerdefineret farve…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche darunter schließen" + "value": "Eigene Farbe wählen …" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close Workspaces Below" + "value": "Choose Custom Color…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar espacios de trabajo inferiores" + "value": "Elegir color personalizado…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer les espaces de travail en dessous" + "value": "Choisir une couleur personnalisée..." } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi aree di lavoro sotto" + "value": "Scegli colore personalizzato…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "下のワークスペースを閉じる" + "value": "カスタムカラーを選択…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아래쪽 작업 공간 닫기" + "value": "사용자 지정 색상 선택…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk arbeidsområder under" + "value": "Velg egendefinert farge …" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij przestrzenie robocze poniżej" + "value": "Wybierz własny kolor…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar Áreas de Trabalho Abaixo" + "value": "Escolher Cor Personalizada…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть рабочие пространства ниже" + "value": "Выбрать пользовательский цвет..." } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซด้านล่าง" + "value": "เลือกสีที่กำหนดเอง..." } }, "tr": { "stringUnit": { "state": "translated", - "value": "Aşağıdaki Çalışma Alanlarını Kapat" + "value": "Özel Renk Seç…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити робочі області нижче" + "value": "Вибрати власний колір…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭下方工作区" + "value": "选取自定义颜色..." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉下方的工作區" + "value": "選擇自訂顏色..." } } } }, - "contextMenu.copyError": { + "contextMenu.clearColor": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Copy Error" + "value": "مسح اللون" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "エラーをコピー" + "value": "Obriši boju" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "오류 복사" + "value": "Ryd farve" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Копіювати помилку" + "value": "Farbe entfernen" } - } - } - }, - "contextMenu.copyErrors": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Copy Errors" + "value": "Clear Color" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Borrar color" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Effacer la couleur" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Rimuovi colore" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エラーをコピー" + "value": "カラーをクリア" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오류 모두 복사" + "value": "색상 지우기" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Fjern farge" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Wyczyść kolor" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Limpar Cor" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Убрать цвет" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ล้างสี" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Rengi Temizle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Копіювати помилки" + "value": "Скинути колір" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "清除颜色" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "清除顏色" } } } }, - "contextMenu.copySshError": { + "contextMenu.clearLatestNotification": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy SSH Error" + "value": "Clear Latest Notification" } }, "ja": { "stringUnit": { "state": "translated", - "value": "SSHエラーをコピー" + "value": "最新の通知をクリア" } }, "ko": { "stringUnit": { "state": "translated", - "value": "SSH 오류 복사" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Копіювати помилку SSH" + "value": "최근 알림 지우기" } } } }, - "contextMenu.copyWorkspaceID": { + "contextMenu.clearLatestNotifications": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Workspace ID" + "value": "Clear Latest Notifications" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースIDをコピー" + "value": "最新の通知をクリア" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스 ID 복사" + "value": "최근 알림 모두 지우기" } } } }, - "contextMenu.copyWorkspaceIDs": { + "contextMenu.clearWorkspaceDescription": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Workspace IDs" + "value": "Clear Workspace Description" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースIDをコピー" + "value": "ワークスペースの説明を消去" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스 ID 복사" + "value": "워크스페이스 설명 지우기" } } } }, - "contextMenu.copyWorkspaceLink": { + "contextMenu.closeOtherWorkspaces": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نسخ رابط مساحة العمل" + "value": "إغلاق مساحات العمل الأخرى" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kopiraj link radnog prostora" + "value": "Zatvori ostale radne prostore" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kopiér arbejdsområdelink" + "value": "Luk andre arbejdsområder" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich-Link kopieren" + "value": "Andere Arbeitsbereiche schließen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Copy Workspace Link" + "value": "Close Other Workspaces" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copiar enlace de espacio de trabajo" + "value": "Cerrar otros espacios de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copier le lien de l’espace de travail" + "value": "Fermer les autres espaces de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Copia link area di lavoro" + "value": "Chiudi altre aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースリンクをコピー" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ចម្លងតំណភ្ជាប់កន្លែងធ្វើការ" + "value": "他のワークスペースを閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스 링크 복사" + "value": "다른 작업 공간 닫기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kopier arbeidsområdelenke" + "value": "Lukk andre arbeidsområder" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kopiuj link obszaru roboczego" + "value": "Zamknij inne przestrzenie robocze" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Copiar link do espaço de trabalho" + "value": "Fechar Outras Áreas de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Копировать ссылку на рабочую область" + "value": "Закрыть другие рабочие пространства" } }, "th": { "stringUnit": { "state": "translated", - "value": "คัดลอกลิงก์เวิร์กสเปซ" + "value": "ปิดเวิร์กสเปซอื่น" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma alanı bağlantısını kopyala" + "value": "Diğer Çalışma Alanlarını Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Копіювати посилання на робочий простір" + "value": "Закрити інші робочі області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "复制工作区链接" + "value": "关闭其他工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "複製工作區連結" + "value": "關閉其他工作區" } } } }, - "contextMenu.copyWorkspaceLinks": { + "contextMenu.closeWorkspace": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نسخ روابط مساحات العمل" + "value": "إغلاق مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kopiraj linkove radnih prostora" + "value": "Zatvori radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kopiér arbejdsområdelinks" + "value": "Luk arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich-Links kopieren" + "value": "Arbeitsbereich schließen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Copy Workspace Links" + "value": "Close Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copiar enlaces de espacios de trabajo" + "value": "Cerrar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copier les liens des espaces de travail" + "value": "Fermer l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Copia link aree di lavoro" + "value": "Chiudi area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースリンクをコピー" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ចម្លងតំណភ្ជាប់កន្លែងធ្វើការ" + "value": "ワークスペースを閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스 링크 복사" + "value": "작업 공간 닫기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kopier arbeidsområdelenker" + "value": "Lukk arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kopiuj linki obszarów roboczych" + "value": "Zamknij przestrzeń roboczą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Copiar links dos espaços de trabalho" + "value": "Fechar Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Копировать ссылки на рабочие области" + "value": "Закрыть рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "คัดลอกลิงก์เวิร์กสเปซ" + "value": "ปิดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma alanı bağlantılarını kopyala" + "value": "Çalışma Alanını Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Копіювати посилання на робочі простори" + "value": "Закрити робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "复制工作区链接" + "value": "关闭工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "複製工作區連結" + "value": "關閉工作區" } } } }, - "contextMenu.disconnectWorkspace": { + "contextMenu.closeWorkspaces": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Disconnect Workspace" + "value": "إغلاق مساحات العمل" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ワークスペースを切断" + "value": "Zatvori radne prostore" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "워크스페이스 연결 해제" + "value": "Luk arbejdsområder" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Відключити робочий простір" + "value": "Arbeitsbereiche schließen" } - } - } - }, - "contextMenu.disconnectWorkspaces": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Disconnect Workspaces" + "value": "Close Workspaces" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cerrar espacios de trabajo" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Fermer les espaces de travail" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Chiudi aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを切断" + "value": "ワークスペースを閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스 연결 해제" + "value": "작업 공간 닫기" } }, - "uk": { + "nb": { "stringUnit": { "state": "translated", - "value": "Відключити робочі простори" + "value": "Lukk arbeidsområder" } - } - } - }, - "contextMenu.editWorkspaceDescription": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Edit Workspace Description…" + "value": "Zamknij przestrzenie robocze" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "ワークスペースの説明を編集…" + "value": "Fechar Áreas de Trabalho" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "워크스페이스 설명 편집…" + "value": "Закрыть рабочие пространства" } - } - } - }, - "contextMenu.markWorkspaceDone": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "th": { "stringUnit": { "state": "translated", - "value": "Mark Workspace as Done" + "value": "ปิดเวิร์กสเปซ" } }, - "ja": { + "tr": { "stringUnit": { "state": "translated", - "value": "ワークスペースを完了にする" + "value": "Çalışma Alanlarını Kapat" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Закрити робочі області" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭工作区" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "關閉工作區" } } } }, - "contextMenu.markWorkspaceRead": { + "contextMenu.closeWorkspacesAbove": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تعليم مساحة العمل كمقروءة" + "value": "إغلاق مساحات العمل أعلاه" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Označi radni prostor kao pročitan" + "value": "Zatvori radne prostore iznad" } }, "da": { "stringUnit": { "state": "translated", - "value": "Marker arbejdsområde som læst" + "value": "Luk arbejdsområder ovenfor" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich als gelesen markieren" + "value": "Arbeitsbereiche darüber schließen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Mark Workspace as Read" + "value": "Close Workspaces Above" } }, "es": { "stringUnit": { "state": "translated", - "value": "Marcar espacio de trabajo como leído" + "value": "Cerrar espacios de trabajo superiores" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Marquer l'espace de travail comme lu" + "value": "Fermer les espaces de travail au-dessus" } }, "it": { "stringUnit": { "state": "translated", - "value": "Segna area di lavoro come letta" + "value": "Chiudi aree di lavoro sopra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを既読にする" + "value": "上のワークスペースを閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간을 읽음으로 표시" + "value": "위쪽 작업 공간 닫기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Merk arbeidsområde som lest" + "value": "Lukk arbeidsområder over" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Oznacz przestrzeń roboczą jako przeczytaną" + "value": "Zamknij przestrzenie robocze powyżej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Marcar Área de Trabalho como Lida" + "value": "Fechar Áreas de Trabalho Acima" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отметить рабочее пространство как прочитанное" + "value": "Закрыть рабочие пространства выше" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำเครื่องหมายเวิร์กสเปซว่าอ่านแล้ว" + "value": "ปิดเวิร์กสเปซด้านบน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Okundu Olarak İşaretle" + "value": "Yukarıdaki Çalışma Alanlarını Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Позначити робочу область як прочитану" + "value": "Закрити робочі області вище" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将工作区标记为已读" + "value": "关闭上方工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將工作區標為已讀" + "value": "關閉上方的工作區" } } } }, - "contextMenu.markWorkspaceUnread": { + "contextMenu.closeWorkspacesBelow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تعليم مساحة العمل كغير مقروءة" + "value": "إغلاق مساحات العمل أدناه" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Označi radni prostor kao nepročitan" + "value": "Zatvori radne prostore ispod" } }, "da": { "stringUnit": { "state": "translated", - "value": "Marker arbejdsområde som ulæst" + "value": "Luk arbejdsområder nedenfor" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich als ungelesen markieren" + "value": "Arbeitsbereiche darunter schließen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Mark Workspace as Unread" + "value": "Close Workspaces Below" } }, "es": { "stringUnit": { "state": "translated", - "value": "Marcar espacio de trabajo como no leído" + "value": "Cerrar espacios de trabajo inferiores" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Marquer l'espace de travail comme non lu" + "value": "Fermer les espaces de travail en dessous" } }, "it": { "stringUnit": { "state": "translated", - "value": "Segna area di lavoro come non letta" + "value": "Chiudi aree di lavoro sotto" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを未読にする" + "value": "下のワークスペースを閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간을 읽지 않음으로 표시" + "value": "아래쪽 작업 공간 닫기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Merk arbeidsområde som ulest" + "value": "Lukk arbeidsområder under" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Oznacz przestrzeń roboczą jako nieprzeczytaną" + "value": "Zamknij przestrzenie robocze poniżej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Marcar Área de Trabalho como Não Lida" + "value": "Fechar Áreas de Trabalho Abaixo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отметить рабочее пространство как непрочитанное" + "value": "Закрыть рабочие пространства ниже" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำเครื่องหมายเวิร์กสเปซว่ายังไม่อ่าน" + "value": "ปิดเวิร์กสเปซด้านล่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Okunmadı Olarak İşaretle" + "value": "Aşağıdaki Çalışma Alanlarını Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Позначити робочу область як непрочитану" + "value": "Закрити робочі області нижче" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将工作区标记为未读" + "value": "关闭下方工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將工作區標為未讀" + "value": "關閉下方的工作區" } } } }, - "contextMenu.markWorkspacesDone": { + "contextMenu.copyError": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mark Workspaces as Done" + "value": "Copy Error" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択したワークスペースを完了にする" + "value": "エラーをコピー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "오류 복사" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Копіювати помилку" } } } }, - "contextMenu.markWorkspacesRead": { + "contextMenu.copyErrors": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "تعليم مساحات العمل كمقروءة" + "value": "Copy Errors" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Označi radne prostore kao pročitane" + "value": "エラーをコピー" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Marker arbejdsområder som læste" + "value": "오류 모두 복사" } }, - "de": { + "uk": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche als gelesen markieren" + "value": "Копіювати помилки" } - }, + } + } + }, + "contextMenu.copySshError": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mark Workspaces as Read" + "value": "Copy SSH Error" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Marcar espacios de trabajo como leídos" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Marquer les espaces de travail comme lus" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Segna aree di lavoro come lette" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースを既読にする" + "value": "SSHエラーをコピー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간을 읽음으로 표시" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Merk arbeidsområder som lest" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Oznacz przestrzenie robocze jako przeczytane" + "value": "SSH 오류 복사" } }, - "pt-BR": { + "uk": { "stringUnit": { "state": "translated", - "value": "Marcar Áreas de Trabalho como Lidas" + "value": "Копіювати помилку SSH" } - }, - "ru": { + } + } + }, + "contextMenu.copyWorkspaceID": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Отметить рабочие пространства как прочитанные" + "value": "Copy Workspace ID" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "ทำเครื่องหมายเวิร์กสเปซว่าอ่านแล้ว" + "value": "ワークスペースIDをコピー" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanlarını Okundu Olarak İşaretle" + "value": "워크스페이스 ID 복사" } - }, - "uk": { + } + } + }, + "contextMenu.copyWorkspaceIDs": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Позначити робочі області як прочитані" + "value": "Copy Workspace IDs" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "将工作区标记为已读" + "value": "ワークスペースIDをコピー" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "將工作區標為已讀" + "value": "워크스페이스 ID 복사" } } } }, - "contextMenu.markWorkspacesUnread": { + "contextMenu.copyWorkspaceLink": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تعليم مساحات العمل كغير مقروءة" + "value": "نسخ رابط مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Označi radne prostore kao nepročitane" + "value": "Kopiraj link radnog prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Marker arbejdsområder som ulæste" + "value": "Kopiér arbejdsområdelink" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche als ungelesen markieren" + "value": "Arbeitsbereich-Link kopieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Mark Workspaces as Unread" + "value": "Copy Workspace Link" } }, "es": { "stringUnit": { "state": "translated", - "value": "Marcar espacios de trabajo como no leídos" + "value": "Copiar enlace de espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Marquer les espaces de travail comme non lus" + "value": "Copier le lien de l’espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Segna aree di lavoro come non lette" + "value": "Copia link area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを未読にする" + "value": "ワークスペースリンクをコピー" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចម្លងតំណភ្ជាប់កន្លែងធ្វើការ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간을 읽지 않음으로 표시" + "value": "워크스페이스 링크 복사" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Merk arbeidsområder som ulest" + "value": "Kopier arbeidsområdelenke" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Oznacz przestrzenie robocze jako nieprzeczytane" + "value": "Kopiuj link obszaru roboczego" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Marcar Áreas de Trabalho como Não Lidas" + "value": "Copiar link do espaço de trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отметить рабочие пространства как непрочитанные" + "value": "Копировать ссылку на рабочую область" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำเครื่องหมายเวิร์กสเปซว่ายังไม่อ่าน" + "value": "คัดลอกลิงก์เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanlarını Okunmadı Olarak İşaretle" + "value": "Çalışma alanı bağlantısını kopyala" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Позначити робочі області як непрочитані" + "value": "Копіювати посилання на робочий простір" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将工作区标记为未读" + "value": "复制工作区链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將工作區標為未讀" + "value": "複製工作區連結" } } } }, - "contextMenu.moveDown": { + "contextMenu.copyWorkspaceLinks": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نقل للأسفل" + "value": "نسخ روابط مساحات العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pomjeri dolje" + "value": "Kopiraj linkove radnih prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Flyt ned" + "value": "Kopiér arbejdsområdelinks" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nach unten bewegen" + "value": "Arbeitsbereich-Links kopieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Move Down" + "value": "Copy Workspace Links" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover hacia abajo" + "value": "Copiar enlaces de espacios de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déplacer vers le bas" + "value": "Copier les liens des espaces de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sposta in basso" + "value": "Copia link aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "下に移動" + "value": "ワークスペースリンクをコピー" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចម្លងតំណភ្ជាប់កន្លែងធ្វើការ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아래로 이동" + "value": "워크스페이스 링크 복사" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytt ned" + "value": "Kopier arbeidsområdelenker" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenieś w dół" + "value": "Kopiuj linki obszarów roboczych" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mover para Baixo" + "value": "Copiar links dos espaços de trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переместить вниз" + "value": "Копировать ссылки на рабочие области" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลื่อนลง" + "value": "คัดลอกลิงก์เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Aşağı Taşı" + "value": "Çalışma alanı bağlantılarını kopyala" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемістити вниз" + "value": "Копіювати посилання на робочі простори" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "下移" + "value": "复制工作区链接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "下移" + "value": "複製工作區連結" } } } }, - "contextMenu.moveToTop": { + "contextMenu.disconnectWorkspace": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "نقل إلى الأعلى" + "value": "Disconnect Workspace" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Pomjeri na vrh" + "value": "ワークスペースを切断" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Flyt til toppen" + "value": "워크스페이스 연결 해제" } }, - "de": { + "uk": { "stringUnit": { "state": "translated", - "value": "Nach oben bewegen" + "value": "Відключити робочий простір" } - }, + } + } + }, + "contextMenu.disconnectWorkspaces": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Move to Top" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Mover al inicio" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Déplacer en haut" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Sposta in cima" + "value": "Disconnect Workspaces" } }, "ja": { "stringUnit": { "state": "translated", - "value": "一番上に移動" + "value": "ワークスペースを切断" } }, "ko": { "stringUnit": { "state": "translated", - "value": "맨 위로 이동" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Flytt til toppen" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Przenieś na górę" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Mover para o Topo" + "value": "워크스페이스 연결 해제" } }, - "ru": { + "uk": { "stringUnit": { "state": "translated", - "value": "Переместить наверх" + "value": "Відключити робочі простори" } - }, - "th": { + } + } + }, + "contextMenu.editWorkspaceDescription": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "ย้ายไปด้านบน" + "value": "Edit Workspace Description…" } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "En Üste Taşı" + "value": "ワークスペースの説明を編集…" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Перемістити на початок" + "value": "워크스페이스 설명 편집…" } - }, - "zh-Hans": { + } + } + }, + "contextMenu.markWorkspaceDone": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "移到顶部" + "value": "Mark Workspace as Done" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "移至最上方" + "value": "ワークスペースを完了にする" } } } }, - "contextMenu.moveUp": { + "contextMenu.markWorkspaceRead": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نقل للأعلى" + "value": "تعليم مساحة العمل كمقروءة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pomjeri gore" + "value": "Označi radni prostor kao pročitan" } }, "da": { "stringUnit": { "state": "translated", - "value": "Flyt op" + "value": "Marker arbejdsområde som læst" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nach oben bewegen" + "value": "Arbeitsbereich als gelesen markieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Move Up" + "value": "Mark Workspace as Read" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover hacia arriba" + "value": "Marcar espacio de trabajo como leído" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déplacer vers le haut" + "value": "Marquer l'espace de travail comme lu" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sposta in alto" + "value": "Segna area di lavoro come letta" } }, "ja": { "stringUnit": { "state": "translated", - "value": "上に移動" + "value": "ワークスペースを既読にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "위로 이동" + "value": "작업 공간을 읽음으로 표시" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytt opp" + "value": "Merk arbeidsområde som lest" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenieś w górę" + "value": "Oznacz przestrzeń roboczą jako przeczytaną" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mover para Cima" + "value": "Marcar Área de Trabalho como Lida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переместить вверх" + "value": "Отметить рабочее пространство как прочитанное" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลื่อนขึ้น" + "value": "ทำเครื่องหมายเวิร์กสเปซว่าอ่านแล้ว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yukarı Taşı" + "value": "Çalışma Alanını Okundu Olarak İşaretle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемістити вгору" + "value": "Позначити робочу область як прочитану" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "上移" + "value": "将工作区标记为已读" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "上移" + "value": "將工作區標為已讀" } } } }, - "contextMenu.moveWorkspaceToWindow": { + "contextMenu.markWorkspaceUnread": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نقل مساحة العمل إلى نافذة" + "value": "تعليم مساحة العمل كغير مقروءة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Premjesti radni prostor u prozor" + "value": "Označi radni prostor kao nepročitan" } }, "da": { "stringUnit": { "state": "translated", - "value": "Flyt arbejdsområde til vindue" + "value": "Marker arbejdsområde som ulæst" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich in Fenster bewegen" + "value": "Arbeitsbereich als ungelesen markieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Move Workspace to Window" + "value": "Mark Workspace as Unread" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover espacio de trabajo a ventana" + "value": "Marcar espacio de trabajo como no leído" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déplacer l'espace de travail vers une fenêtre" + "value": "Marquer l'espace de travail comme non lu" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sposta area di lavoro in una finestra" + "value": "Segna area di lavoro come non letta" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースをウインドウに移動" + "value": "ワークスペースを未読にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간을 윈도우로 이동" + "value": "작업 공간을 읽지 않음으로 표시" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytt arbeidsområde til vindu" + "value": "Merk arbeidsområde som ulest" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenieś przestrzeń roboczą do okna" + "value": "Oznacz przestrzeń roboczą jako nieprzeczytaną" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mover Área de Trabalho para Janela" + "value": "Marcar Área de Trabalho como Não Lida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переместить рабочее пространство в окно" + "value": "Отметить рабочее пространство как непрочитанное" } }, "th": { "stringUnit": { "state": "translated", - "value": "ย้ายเวิร์กสเปซไปยังหน้าต่าง" + "value": "ทำเครื่องหมายเวิร์กสเปซว่ายังไม่อ่าน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Pencereye Taşı" + "value": "Çalışma Alanını Okunmadı Olarak İşaretle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемістити робочу область у вікно" + "value": "Позначити робочу область як непрочитану" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将工作区移到窗口" + "value": "将工作区标记为未读" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將工作區移至視窗" + "value": "將工作區標為未讀" } } } }, - "contextMenu.moveWorkspacesToWindow": { + "contextMenu.markWorkspacesDone": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Mark Workspaces as Done" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択したワークスペースを完了にする" + } + } + } + }, + "contextMenu.markWorkspacesRead": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نقل مساحات العمل إلى نافذة" + "value": "تعليم مساحات العمل كمقروءة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Premjesti radne prostore u prozor" + "value": "Označi radne prostore kao pročitane" } }, "da": { "stringUnit": { "state": "translated", - "value": "Flyt arbejdsområder til vindue" + "value": "Marker arbejdsområder som læste" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche in Fenster bewegen" + "value": "Arbeitsbereiche als gelesen markieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Move Workspaces to Window" + "value": "Mark Workspaces as Read" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover espacios de trabajo a ventana" + "value": "Marcar espacios de trabajo como leídos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déplacer les espaces de travail vers une fenêtre" + "value": "Marquer les espaces de travail comme lus" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sposta aree di lavoro in una finestra" + "value": "Segna aree di lavoro come lette" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースをウインドウに移動" + "value": "ワークスペースを既読にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간을 윈도우로 이동" + "value": "작업 공간을 읽음으로 표시" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytt arbeidsområder til vindu" + "value": "Merk arbeidsområder som lest" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenieś przestrzenie robocze do okna" + "value": "Oznacz przestrzenie robocze jako przeczytane" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mover Áreas de Trabalho para Janela" + "value": "Marcar Áreas de Trabalho como Lidas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переместить рабочие пространства в окно" + "value": "Отметить рабочие пространства как прочитанные" } }, "th": { "stringUnit": { "state": "translated", - "value": "ย้ายเวิร์กสเปซไปยังหน้าต่าง" + "value": "ทำเครื่องหมายเวิร์กสเปซว่าอ่านแล้ว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanlarını Pencereye Taşı" + "value": "Çalışma Alanlarını Okundu Olarak İşaretle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемістити робочі області у вікно" + "value": "Позначити робочі області як прочитані" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将工作区移到窗口" + "value": "将工作区标记为已读" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將工作區移至視窗" + "value": "將工作區標為已讀" } } } }, - "contextMenu.newWindow": { + "contextMenu.markWorkspacesUnread": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نافذة جديدة" + "value": "تعليم مساحات العمل كغير مقروءة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Novi prozor" + "value": "Označi radne prostore kao nepročitane" } }, "da": { "stringUnit": { "state": "translated", - "value": "Nyt vindue" + "value": "Marker arbejdsområder som ulæste" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neues Fenster" + "value": "Arbeitsbereiche als ungelesen markieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Window" + "value": "Mark Workspaces as Unread" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva ventana" + "value": "Marcar espacios de trabajo como no leídos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvelle fenêtre" + "value": "Marquer les espaces de travail comme non lus" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova finestra" + "value": "Segna aree di lavoro come non lette" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規ウインドウ" + "value": "ワークスペースを未読にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 윈도우" + "value": "작업 공간을 읽지 않음으로 표시" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nytt vindu" + "value": "Merk arbeidsområder som ulest" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowe okno" + "value": "Oznacz przestrzenie robocze jako nieprzeczytane" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova Janela" + "value": "Marcar Áreas de Trabalho como Não Lidas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новое окно" + "value": "Отметить рабочие пространства как непрочитанные" } }, "th": { "stringUnit": { "state": "translated", - "value": "หน้าต่างใหม่" + "value": "ทำเครื่องหมายเวิร์กสเปซว่ายังไม่อ่าน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Pencere" + "value": "Çalışma Alanlarını Okunmadı Olarak İşaretle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нове вікно" + "value": "Позначити робочі області як непрочитані" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建窗口" + "value": "将工作区标记为未读" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增視窗" - } - } - } - }, - "contextMenu.notifications": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Notifications" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "通知" - } - } - } - }, - "contextMenu.notifications.empty": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No Notifications" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "通知はありません" + "value": "將工作區標為未讀" } } } }, - "contextMenu.pinWorkspace": { + "contextMenu.moveDown": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تثبيت مساحة العمل" + "value": "نقل للأسفل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zakači radni prostor" + "value": "Pomjeri dolje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fastgør arbejdsområde" + "value": "Flyt ned" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich anheften" + "value": "Nach unten bewegen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Pin Workspace" + "value": "Move Down" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fijar espacio de trabajo" + "value": "Mover hacia abajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Épingler l'espace de travail" + "value": "Déplacer vers le bas" } }, "it": { "stringUnit": { "state": "translated", - "value": "Fissa area di lavoro" + "value": "Sposta in basso" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースをピンで固定" + "value": "下に移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 고정" + "value": "아래로 이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fest arbeidsområde" + "value": "Flytt ned" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przypnij przestrzeń roboczą" + "value": "Przenieś w dół" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fixar Área de Trabalho" + "value": "Mover para Baixo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрепить рабочее пространство" + "value": "Переместить вниз" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปักหมุดเวิร์กสเปซ" + "value": "เลื่อนลง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Sabitle" + "value": "Aşağı Taşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закріпити робочу область" + "value": "Перемістити вниз" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "固定工作区" + "value": "下移" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "釘選工作區" + "value": "下移" } } } }, - "contextMenu.pinWorkspaces": { + "contextMenu.moveToTop": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تثبيت مساحات العمل" + "value": "نقل إلى الأعلى" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zakači radne prostore" + "value": "Pomjeri na vrh" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fastgør arbejdsområder" + "value": "Flyt til toppen" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche anheften" + "value": "Nach oben bewegen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Pin Workspaces" + "value": "Move to Top" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fijar espacios de trabajo" + "value": "Mover al inicio" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Épingler les espaces de travail" + "value": "Déplacer en haut" } }, "it": { "stringUnit": { "state": "translated", - "value": "Fissa aree di lavoro" + "value": "Sposta in cima" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースをピンで固定" + "value": "一番上に移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 고정" + "value": "맨 위로 이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fest arbeidsområder" + "value": "Flytt til toppen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przypnij przestrzenie robocze" + "value": "Przenieś na górę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fixar Áreas de Trabalho" + "value": "Mover para o Topo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрепить рабочие пространства" + "value": "Переместить наверх" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปักหมุดเวิร์กสเปซ" + "value": "ย้ายไปด้านบน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanlarını Sabitle" + "value": "En Üste Taşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закріпити робочі області" + "value": "Перемістити на початок" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "固定工作区" + "value": "移到顶部" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "釘選工作區" - } - } - } - }, - "contextMenu.reconnectWorkspace": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reconnect Workspace" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースを再接続" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "워크스페이스 재연결" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Перепідключити робочий простір" - } - } - } - }, - "contextMenu.reconnectWorkspaces": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reconnect Workspaces" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースを再接続" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "워크스페이스 재연결" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Перепідключити робочі простори" + "value": "移至最上方" } } } }, - "contextMenu.removeCustomWorkspaceName": { + "contextMenu.moveUp": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إزالة اسم مساحة العمل المخصص" + "value": "نقل للأعلى" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ukloni prilagođeni naziv radnog prostora" + "value": "Pomjeri gore" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fjern brugerdefineret arbejdsområdenavn" + "value": "Flyt op" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benutzerdefinierten Arbeitsbereichsnamen entfernen" + "value": "Nach oben bewegen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Remove Custom Workspace Name" + "value": "Move Up" } }, "es": { "stringUnit": { "state": "translated", - "value": "Eliminar nombre personalizado del espacio de trabajo" + "value": "Mover hacia arriba" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimer le nom personnalisé de l'espace de travail" + "value": "Déplacer vers le haut" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rimuovi nome personalizzato area di lavoro" + "value": "Sposta in alto" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カスタムワークスペース名を削除" + "value": "上に移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자 지정 작업 공간 이름 제거" + "value": "위로 이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fjern egendefinert arbeidsområdenavn" + "value": "Flytt opp" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usuń własną nazwę przestrzeni roboczej" + "value": "Przenieś w górę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Remover Nome Personalizado da Área de Trabalho" + "value": "Mover para Cima" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалить пользовательское имя рабочего пространства" + "value": "Переместить вверх" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลบชื่อเวิร์กสเปซที่กำหนดเอง" + "value": "เลื่อนขึ้น" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel Çalışma Alanı Adını Kaldır" + "value": "Yukarı Taşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Видалити власну назву робочої області" + "value": "Перемістити вгору" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "移除自定义工作区名称" + "value": "上移" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "移除自訂工作區名稱" + "value": "上移" } } } }, - "contextMenu.renameWorkspace": { + "contextMenu.moveWorkspaceToWindow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية مساحة العمل…" + "value": "نقل مساحة العمل إلى نافذة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preimenuj radni prostor…" + "value": "Premjesti radni prostor u prozor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Omdøb arbejdsområde…" + "value": "Flyt arbejdsområde til vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich umbenennen …" + "value": "Arbeitsbereich in Fenster bewegen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Rename Workspace…" + "value": "Move Workspace to Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar espacio de trabajo…" + "value": "Mover espacio de trabajo a ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer l'espace de travail..." + "value": "Déplacer l'espace de travail vers une fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rinomina area di lavoro…" + "value": "Sposta area di lavoro in una finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースの名称変更…" + "value": "ワークスペースをウインドウに移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름 변경…" + "value": "작업 공간을 윈도우로 이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gi arbeidsområdet nytt navn …" + "value": "Flytt arbeidsområde til vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę przestrzeni roboczej…" + "value": "Przenieś przestrzeń roboczą do okna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Renomear Área de Trabalho…" + "value": "Mover Área de Trabalho para Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переименовать рабочее пространство..." + "value": "Переместить рабочее пространство в окно" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อเวิร์กสเปซ..." + "value": "ย้ายเวิร์กสเปซไปยังหน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Yeniden Adlandır…" + "value": "Çalışma Alanını Pencereye Taşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейменувати робочу область…" + "value": "Перемістити робочу область у вікно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名工作区..." + "value": "将工作区移到窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名工作區..." - } - } - } - }, - "contextMenu.showWorkspaceInFinder": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Show in Finder" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Finderで表示" + "value": "將工作區移至視窗" } } } }, - "contextMenu.unpinWorkspace": { + "contextMenu.moveWorkspacesToWindow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء تثبيت مساحة العمل" + "value": "نقل مساحات العمل إلى نافذة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkači radni prostor" + "value": "Premjesti radne prostore u prozor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Frigør arbejdsområde" + "value": "Flyt arbejdsområder til vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich loslösen" + "value": "Arbeitsbereiche in Fenster bewegen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Unpin Workspace" + "value": "Move Workspaces to Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desfijar espacio de trabajo" + "value": "Mover espacios de trabajo a ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désépingler l'espace de travail" + "value": "Déplacer les espaces de travail vers une fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sblocca area di lavoro" + "value": "Sposta aree di lavoro in una finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのピンを外す" + "value": "ワークスペースをウインドウに移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 고정 해제" + "value": "작업 공간을 윈도우로 이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Løsne arbeidsområde" + "value": "Flytt arbeidsområder til vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Odepnij przestrzeń roboczą" + "value": "Przenieś przestrzenie robocze do okna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desafixar Área de Trabalho" + "value": "Mover Áreas de Trabalho para Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открепить рабочее пространство" + "value": "Переместить рабочие пространства в окно" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลิกปักหมุดเวิร์กสเปซ" + "value": "ย้ายเวิร์กสเปซไปยังหน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı Sabitlemesini Kaldır" + "value": "Çalışma Alanlarını Pencereye Taşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкріпити робочу область" + "value": "Перемістити робочі області у вікно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消固定工作区" + "value": "将工作区移到窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消釘選工作區" + "value": "將工作區移至視窗" } } } }, - "contextMenu.unpinWorkspaces": { + "contextMenu.newWindow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء تثبيت مساحات العمل" + "value": "نافذة جديدة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkači radne prostore" + "value": "Novi prozor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Frigør arbejdsområder" + "value": "Nyt vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche loslösen" + "value": "Neues Fenster" } }, "en": { "stringUnit": { "state": "translated", - "value": "Unpin Workspaces" + "value": "New Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desfijar espacios de trabajo" + "value": "Nueva ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désépingler les espaces de travail" + "value": "Nouvelle fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sblocca aree di lavoro" + "value": "Nuova finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのピンを外す" + "value": "新規ウインドウ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 고정 해제" + "value": "새 윈도우" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Løsne arbeidsområder" + "value": "Nytt vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Odepnij przestrzenie robocze" + "value": "Nowe okno" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desafixar Áreas de Trabalho" + "value": "Nova Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открепить рабочие пространства" + "value": "Новое окно" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลิกปักหมุดเวิร์กสเปซ" + "value": "หน้าต่างใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanları Sabitlemesini Kaldır" + "value": "Yeni Pencere" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкріпити робочі області" + "value": "Нове вікно" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消固定工作区" + "value": "新建窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消釘選工作區" + "value": "新增視窗" } } } }, - "contextMenu.workspaceColor": { + "contextMenu.notifications": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "通知" + } + } + } + }, + "contextMenu.notifications.empty": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No Notifications" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "通知はありません" + } + } + } + }, + "contextMenu.pinWorkspace": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لون مساحة العمل" + "value": "تثبيت مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Boja radnog prostora" + "value": "Zakači radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområdefarve" + "value": "Fastgør arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereichsfarbe" + "value": "Arbeitsbereich anheften" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace Color" + "value": "Pin Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Color del espacio de trabajo" + "value": "Fijar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Couleur de l'espace de travail" + "value": "Épingler l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Colore area di lavoro" + "value": "Fissa area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースカラー" + "value": "ワークスペースをピンで固定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 색상" + "value": "작업 공간 고정" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområdefarge" + "value": "Fest arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kolor przestrzeni roboczej" + "value": "Przypnij przestrzeń roboczą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cor da Área de Trabalho" + "value": "Fixar Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Цвет рабочего пространства" + "value": "Закрепить рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "สีเวิร์กสเปซ" + "value": "ปักหมุดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı Rengi" + "value": "Çalışma Alanını Sabitle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Колір робочої області" + "value": "Закріпити робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区颜色" + "value": "固定工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區顏色" + "value": "釘選工作區" } } } }, - "contextMenu.workspaceGroup.moveTo": { + "contextMenu.pinWorkspaces": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نقل إلى المجموعة" + "value": "تثبيت مساحات العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Premjesti u grupu" + "value": "Zakači radne prostore" } }, "da": { "stringUnit": { "state": "translated", - "value": "Flyt til gruppe" + "value": "Fastgør arbejdsområder" } }, "de": { "stringUnit": { "state": "translated", - "value": "In Gruppe verschieben" + "value": "Arbeitsbereiche anheften" } }, "en": { "stringUnit": { "state": "translated", - "value": "Move to Group" + "value": "Pin Workspaces" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover al grupo" + "value": "Fijar espacios de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déplacer vers le groupe" + "value": "Épingler les espaces de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sposta nel gruppo" + "value": "Fissa aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グループに移動" + "value": "ワークスペースをピンで固定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그룹으로 이동" + "value": "작업 공간 고정" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytt til gruppe" + "value": "Fest arbeidsområder" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenieś do grupy" + "value": "Przypnij przestrzenie robocze" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mover para o grupo" + "value": "Fixar Áreas de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переместить в группу" + "value": "Закрепить рабочие пространства" } }, "th": { "stringUnit": { "state": "translated", - "value": "ย้ายไปยังกลุ่ม" + "value": "ปักหมุดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gruba taşı" + "value": "Çalışma Alanlarını Sabitle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемістити до групи" + "value": "Закріпити робочі області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "移动到分组" + "value": "固定工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "移至群組" + "value": "釘選工作區" } } } }, - "contextMenu.workspaceGroup.newEmpty": { + "contextMenu.reconnectWorkspace": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Reconnect Workspace" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースを再接続" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "워크스페이스 재연결" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Перепідключити робочий простір" + } + } + } + }, + "contextMenu.reconnectWorkspaces": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Reconnect Workspaces" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースを再接続" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "워크스페이스 재연결" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Перепідключити робочі простори" + } + } + } + }, + "contextMenu.removeCustomWorkspaceName": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مجموعة مساحة عمل فارغة جديدة" + "value": "إزالة اسم مساحة العمل المخصص" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nova prazna grupa radnih prostora" + "value": "Ukloni prilagođeni naziv radnog prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny tom arbejdsområdegruppe" + "value": "Fjern brugerdefineret arbejdsområdenavn" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neue leere Arbeitsbereichsgruppe" + "value": "Benutzerdefinierten Arbeitsbereichsnamen entfernen" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Empty Workspace Group" + "value": "Remove Custom Workspace Name" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo grupo de espacios de trabajo vacío" + "value": "Eliminar nombre personalizado del espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouveau groupe d’espaces de travail vide" + "value": "Supprimer le nom personnalisé de l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuovo gruppo di aree di lavoro vuoto" + "value": "Rimuovi nome personalizzato area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "空のワークスペースグループを作成" + "value": "カスタムワークスペース名を削除" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 빈 작업 공간 그룹" + "value": "사용자 지정 작업 공간 이름 제거" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny tom arbeidsområdegruppe" + "value": "Fjern egendefinert arbeidsområdenavn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa pusta grupa przestrzeni roboczych" + "value": "Usuń własną nazwę przestrzeni roboczej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Novo grupo de áreas de trabalho vazio" + "value": "Remover Nome Personalizado da Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая пустая группа рабочих пространств" + "value": "Удалить пользовательское имя рабочего пространства" } }, "th": { "stringUnit": { "state": "translated", - "value": "กลุ่มเวิร์กสเปซว่างใหม่" + "value": "ลบชื่อเวิร์กสเปซที่กำหนดเอง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Boş Çalışma Alanı Grubu" + "value": "Özel Çalışma Alanı Adını Kaldır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова порожня група робочих областей" + "value": "Видалити власну назву робочої області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新建空工作区组" + "value": "移除自定义工作区名称" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新增空白工作區群組" + "value": "移除自訂工作區名稱" } } } }, - "contextMenu.workspaceGroup.newFromSelection": { + "contextMenu.renameWorkspace": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مجموعة جديدة من التحديد" + "value": "إعادة تسمية مساحة العمل…" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nova grupa iz odabira" + "value": "Preimenuj radni prostor…" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny gruppe fra valg" + "value": "Omdøb arbejdsområde…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neue Gruppe aus Auswahl" + "value": "Arbeitsbereich umbenennen …" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Group from Selection" + "value": "Rename Workspace…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo grupo desde la selección" + "value": "Renombrar espacio de trabajo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouveau groupe depuis la sélection" + "value": "Renommer l'espace de travail..." } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuovo gruppo dalla selezione" + "value": "Rinomina area di lavoro…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択からグループを作成" + "value": "ワークスペースの名称変更…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택 항목으로 새 그룹" + "value": "작업 공간 이름 변경…" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny gruppe fra valg" + "value": "Gi arbeidsområdet nytt navn …" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa grupa z zaznaczenia" + "value": "Zmień nazwę przestrzeni roboczej…" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Novo grupo a partir da seleção" + "value": "Renomear Área de Trabalho…" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая группа из выделения" + "value": "Переименовать рабочее пространство..." } }, "th": { "stringUnit": { "state": "translated", - "value": "สร้างกลุ่มใหม่จากที่เลือก" + "value": "เปลี่ยนชื่อเวิร์กสเปซ..." } }, "tr": { "stringUnit": { "state": "translated", - "value": "Seçimden yeni grup" + "value": "Çalışma Alanını Yeniden Adlandır…" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова група з вибраного" + "value": "Перейменувати робочу область…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用所选工作区新建分组" + "value": "重命名工作区..." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用所選工作區新增群組" + "value": "重新命名工作區..." } } } }, - "contextMenu.workspaceGroup.newFromWorkspace": { + "contextMenu.showWorkspaceInFinder": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Show in Finder" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Finderで表示" + } + } + } + }, + "contextMenu.unpinWorkspace": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مجموعة جديدة من مساحة العمل" + "value": "إلغاء تثبيت مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nova grupa iz radnog prostora" + "value": "Otkači radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny gruppe fra arbejdsområde" + "value": "Frigør arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neue Gruppe aus Arbeitsbereich" + "value": "Arbeitsbereich loslösen" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Group from Workspace" + "value": "Unpin Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo grupo desde el espacio de trabajo" + "value": "Desfijar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouveau groupe depuis cet espace de travail" + "value": "Désépingler l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuovo gruppo da quest’area di lavoro" + "value": "Sblocca area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースからグループを作成" + "value": "ワークスペースのピンを外す" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 작업 공간으로 새 그룹" + "value": "작업 공간 고정 해제" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny gruppe fra arbeidsområdet" + "value": "Løsne arbeidsområde" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa grupa z przestrzeni" + "value": "Odepnij przestrzeń roboczą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Novo grupo a partir desta área" + "value": "Desafixar Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая группа из этого пространства" + "value": "Открепить рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "สร้างกลุ่มใหม่จากเวิร์กสเปซนี้" + "value": "เลิกปักหมุดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu çalışma alanından yeni grup" + "value": "Çalışma Alanı Sabitlemesini Kaldır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова група з робочої області" + "value": "Відкріпити робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用此工作区新建分组" + "value": "取消固定工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用此工作區新增群組" + "value": "取消釘選工作區" } } } }, - "contextMenu.workspaceGroup.remove": { + "contextMenu.unpinWorkspaces": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إزالة من المجموعة" + "value": "إلغاء تثبيت مساحات العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ukloni iz grupe" + "value": "Otkači radne prostore" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fjern fra gruppe" + "value": "Frigør arbejdsområder" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus Gruppe entfernen" + "value": "Arbeitsbereiche loslösen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Remove from Group" + "value": "Unpin Workspaces" } }, "es": { "stringUnit": { "state": "translated", - "value": "Quitar del grupo" + "value": "Desfijar espacios de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Retirer du groupe" + "value": "Désépingler les espaces de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rimuovi dal gruppo" + "value": "Sblocca aree di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グループから削除" + "value": "ワークスペースのピンを外す" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그룹에서 제거" + "value": "작업 공간 고정 해제" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fjern fra gruppe" + "value": "Løsne arbeidsområder" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usuń z grupy" + "value": "Odepnij przestrzenie robocze" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Remover do grupo" + "value": "Desafixar Áreas de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Убрать из группы" + "value": "Открепить рабочие пространства" } }, "th": { "stringUnit": { "state": "translated", - "value": "นำออกจากกลุ่ม" + "value": "เลิกปักหมุดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gruptan çıkar" + "value": "Çalışma Alanları Sabitlemesini Kaldır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Прибрати з групи" + "value": "Відкріпити робочі області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "从分组中移除" + "value": "取消固定工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "從群組移除" + "value": "取消釘選工作區" } } } }, - "contextMenu.workspaceSettings": { + "contextMenu.workspaceColor": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Workspace Settings" + "value": "لون مساحة العمل" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ワークスペース設定" + "value": "Boja radnog prostora" } - } - } - }, - "contextMenu.workspaceSettings.hideTerminalScrollBar": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Hide Terminal Scroll Bar" + "value": "Arbejdsområdefarve" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "ターミナルのスクロールバーを隠す" + "value": "Arbeitsbereichsfarbe" } - } - } - }, - "contextMenu.workspaceStatus": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Status" + "value": "Workspace Color" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ステータス" - } - } - } - }, - "contextMenu.workspaceStatus.auto": { - "extractionState": "manual", - "localizations": { - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Auto — %@" + "value": "Color del espacio de trabajo" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "自動 — %@" + "value": "Couleur de l'espace de travail" } - } - } - }, - "crashBreadcrumb.body": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Diagnostic file saved. Click to reveal it in Finder." + "value": "Colore area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "診断ファイルを保存しました。クリックするとFinderで表示します。" + "value": "ワークスペースカラー" } - } - } - }, - "crashBreadcrumb.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Diagnostic file saved" + "value": "작업 공간 색상" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "診断ファイルを保存しました" + "value": "Arbeidsområdefarge" } - } - } - }, - "crashBreadcrumb.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "cmux crashed during your last session" + "value": "Kolor przestrzeni roboczej" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "前回のセッション中に cmux がクラッシュしました" + "value": "Cor da Área de Trabalho" } - } - } - }, - "customSidebarRenderer.inProcess.description": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Renders as native SwiftUI inside cmux with hover, focus, and typing. A faulty sidebar shares the app process." + "value": "Цвет рабочего пространства" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "cmux 内でネイティブ SwiftUI として描画し、ホバー・フォーカス・入力に対応します。サイドバーに問題があるとアプリプロセスに影響します。" + "value": "สีเวิร์กสเปซ" } - } - } - }, - "customSidebarRenderer.inProcess.name": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "In-app (full input)" + "value": "Çalışma Alanı Rengi" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "アプリ内(フル入力)" + "value": "Колір робочої області" } - } - } - }, - "customSidebarRenderer.remote.description": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Renders in a crash-isolated helper process. Clicks only: no hover, focus, or typing." + "value": "工作区颜色" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "クラッシュから隔離されたヘルパープロセスで描画します。クリックのみ対応で、ホバー・フォーカス・入力はできません。" + "value": "工作區顏色" } } } }, - "customSidebarRenderer.remote.name": { + "contextMenu.workspaceGroup.moveTo": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Isolated process" + "value": "نقل إلى المجموعة" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "分離プロセス" + "value": "Premjesti u grupu" } - } - } - }, - "debug.aboutTitlebarDebug.resetAbout": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Reset About" + "value": "Flyt til gruppe" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "Aboutをリセット" + "value": "In Gruppe verschieben" } - } - } - }, - "debug.aboutTitlebarDebug.title": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "About Titlebar Debug" + "value": "Move to Group" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "Aboutタイトルバーデバッグ" + "value": "Mover al grupo" } - } - } - }, - "debug.bonsplitTabBarDebug.actionLaneBorder": { - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Action Lane Border" + "value": "Déplacer vers le groupe" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Sposta nel gruppo" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アクションレーンの境界線" + "value": "グループに移動" } - } - } - }, - "debug.bonsplitTabBarDebug.actionLaneGeometry": { - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Action Lane Geometry" + "value": "그룹으로 이동" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "アクションレーンのジオメトリ" + "value": "Flytt til gruppe" } - } - } - }, - "debug.bonsplitTabBarDebug.contentFade": { - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Content fade" + "value": "Przenieś do grupy" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "コンテンツのフェード" + "value": "Mover para o grupo" } - } - } - }, - "debug.bonsplitTabBarDebug.copyConfig": { - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Переместить в группу" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "設定をコピー" + "value": "ย้ายไปยังกลุ่ม" } - } - } - }, - "debug.bonsplitTabBarDebug.fineTune": { - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Fine tune" + "value": "Gruba taşı" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "微調整" + "value": "Перемістити до групи" } - } - } - }, - "debug.bonsplitTabBarDebug.heading": { - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bonsplit Tab Bar" + "value": "移动到分组" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Bonsplitタブバー" + "value": "移至群組" } } } }, - "debug.bonsplitTabBarDebug.pixelsValue": { + "contextMenu.workspaceGroup.newEmpty": { + "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ px" + "value": "مجموعة مساحة عمل فارغة جديدة" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "%@ px" + "value": "Nova prazna grupa radnih prostora" } - } - } - }, - "debug.bonsplitTabBarDebug.reset": { - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Ny tom arbejdsområdegruppe" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "リセット" + "value": "Neue leere Arbeitsbereichsgruppe" } - } - } - }, - "debug.bonsplitTabBarDebug.separatorFadeFrame": { - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Separator fade frame" + "value": "New Empty Workspace Group" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "区切り線のフェード幅" + "value": "Nuevo grupo de espacios de trabajo vacío" } - } - } - }, - "debug.bonsplitTabBarDebug.solidBgExtra": { - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Solid bg extra" + "value": "Nouveau groupe d’espaces de travail vide" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Nuovo gruppo di aree di lavoro vuoto" } }, "ja": { "stringUnit": { "state": "translated", - "value": "単色背景の追加幅" + "value": "空のワークスペースグループを作成" } - } - } - }, - "debug.bonsplitTabBarDebug.title": { - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Bonsplit Tab Bar Debug" + "value": "새 빈 작업 공간 그룹" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "Bonsplitタブバーのデバッグ" + "value": "Ny tom arbeidsområdegruppe" } - } - } - }, - "debug.browserProfilePopover.group.padding": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Padding" + "value": "Nowa pusta grupa przestrzeni roboczych" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "余白" + "value": "Novo grupo de áreas de trabalho vazio" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "패딩" + "value": "Новая пустая группа рабочих пространств" } }, - "uk": { + "th": { "stringUnit": { "state": "translated", - "value": "Відступи" + "value": "กลุ่มเวิร์กสเปซว่างใหม่" } - } - } - }, - "debug.browserProfilePopover.group.preview": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Preview" + "value": "Yeni Boş Çalışma Alanı Grubu" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "プレビュー" + "value": "Нова порожня група робочих областей" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "미리보기" + "value": "新建空工作区组" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Перегляд" + "value": "新增空白工作區群組" } } } }, - "debug.browserProfilePopover.heading": { + "contextMenu.workspaceGroup.newFromSelection": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Browser Profile Popover" + "value": "مجموعة جديدة من التحديد" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ブラウザープロファイルポップオーバー" + "value": "Nova grupa iz odabira" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "브라우저 프로필 팝오버" + "value": "Ny gruppe fra valg" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Спливне вікно профілю браузера" + "value": "Neue Gruppe aus Auswahl" } - } - } - }, - "debug.browserProfilePopover.label.horizontal": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Horizontal" + "value": "New Group from Selection" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nuevo grupo desde la selección" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Nouveau groupe depuis la sélection" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Nuovo gruppo dalla selezione" } }, "ja": { "stringUnit": { "state": "translated", - "value": "水平" + "value": "選択からグループを作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가로" + "value": "선택 항목으로 새 그룹" } }, - "uk": { + "nb": { "stringUnit": { "state": "translated", - "value": "Горизонтальний" + "value": "Ny gruppe fra valg" } - } - } - }, - "debug.browserProfilePopover.label.vertical": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Vertical" + "value": "Nowa grupa z zaznaczenia" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "垂直" + "value": "Novo grupo a partir da seleção" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "세로" + "value": "Новая группа из выделения" } }, - "uk": { + "th": { "stringUnit": { "state": "translated", - "value": "Вертикальний" + "value": "สร้างกลุ่มใหม่จากที่เลือก" } - } - } - }, - "debug.browserProfilePopover.liveNote": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Changes apply live to the browser profile popover." + "value": "Seçimden yeni grup" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "変更はブラウザープロファイルポップオーバーにライブで反映されます。" + "value": "Нова група з вибраного" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "변경 사항이 브라우저 프로필 팝오버에 실시간으로 적용됩니다." + "value": "用所选工作区新建分组" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Зміни застосовуються до спливного вікна профілю браузера в реальному часі." + "value": "用所選工作區新增群組" } } } }, - "debug.browserProfilePopover.note": { + "contextMenu.workspaceGroup.newFromWorkspace": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Tune the profile popover padding live while comparing it against the browser toolbar menu." + "value": "مجموعة جديدة من مساحة العمل" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ブラウザーツールバーのメニューと見比べながら、プロファイルポップオーバーの余白をライブで調整します。" + "value": "Nova grupa iz radnog prostora" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "브라우저 도구 모음 메뉴와 비교하면서 프로필 팝오버 패딩을 실시간으로 조정합니다." + "value": "Ny gruppe fra arbejdsområde" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Налаштуйте відступи спливного вікна профілю в реальному часі, порівнюючи з меню панелі інструментів браузера." + "value": "Neue Gruppe aus Arbeitsbereich" } - } - } - }, - "debug.browserProfilePopover.reset": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "New Group from Workspace" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nuevo grupo desde el espacio de trabajo" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Nouveau groupe depuis cet espace de travail" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Nuovo gruppo da quest’area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リセット" + "value": "ワークスペースからグループを作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "초기화" + "value": "이 작업 공간으로 새 그룹" } }, - "uk": { + "nb": { "stringUnit": { "state": "translated", - "value": "Скинути" + "value": "Ny gruppe fra arbeidsområdet" } - } - } - }, - "debug.devBuildBanner.show": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Show Dev Build Banner" + "value": "Nowa grupa z przestrzeni" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "開発ビルドバナーを表示" + "value": "Novo grupo a partir desta área" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "개발 빌드 배너 표시" + "value": "Новая группа из этого пространства" } }, - "uk": { + "th": { "stringUnit": { "state": "translated", - "value": "Показати банер версії для розробки" + "value": "สร้างกลุ่มใหม่จากเวิร์กสเปซนี้" } - } - } - }, - "debug.devBuildBanner.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "THIS IS A DEV BUILD" + "value": "Bu çalışma alanından yeni grup" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "これは開発ビルドです" + "value": "Нова група з робочої області" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "개발 빌드입니다" + "value": "用此工作区新建分组" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ЦЕ ВЕРСІЯ ДЛЯ РОЗРОБКИ" + "value": "用此工作區新增群組" } } } }, - "debug.devWindowDisplay.clear": { + "contextMenu.workspaceGroup.remove": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Clear (system default)" + "value": "إزالة من المجموعة" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "クリア(システムデフォルト)" + "value": "Ukloni iz grupe" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "지우기(시스템 기본값)" + "value": "Fjern fra gruppe" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Очистити (системне за замовчуванням)" + "value": "Aus Gruppe entfernen" } - } - } - }, - "debug.devWindowDisplay.current": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Current: %@" + "value": "Remove from Group" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Quitar del grupo" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Retirer du groupe" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Rimuovi dal gruppo" } }, "ja": { "stringUnit": { "state": "translated", - "value": "現在: %@" + "value": "グループから削除" } }, "ko": { "stringUnit": { "state": "translated", - "value": "현재: %@" + "value": "그룹에서 제거" } }, - "uk": { + "nb": { "stringUnit": { "state": "translated", - "value": "Поточний: %@" + "value": "Fjern fra gruppe" } - } - } - }, - "debug.devWindowDisplay.currentNone": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Current: (system default)" + "value": "Usuń z grupy" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "現在: (システムデフォルト)" + "value": "Remover do grupo" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "현재: (시스템 기본값)" + "value": "Убрать из группы" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "นำออกจากกลุ่ม" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Gruptan çıkar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Поточний: (системне за замовчуванням)" + "value": "Прибрати з групи" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "从分组中移除" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "從群組移除" } } } }, - "debug.devWindowDisplay.description": { + "contextMenu.workspaceSettings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "New DEBUG cmux windows open on the selected display. Shared across all tagged dev builds; applied at window creation." + "value": "Workspace Settings" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新しいDEBUG cmuxウィンドウは選択したディスプレイで開きます。すべてのタグ付き開発ビルドで共有され、ウィンドウ作成時に適用されます。" + "value": "ワークスペース設定" } - }, - "ko": { + } + } + }, + "contextMenu.workspaceSettings.hideTerminalScrollBar": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "새 DEBUG cmux 창이 선택한 디스플레이에서 열립니다. 모든 태그가 지정된 개발 빌드에서 공유되며 창 생성 시 적용됩니다." + "value": "Hide Terminal Scroll Bar" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Нові вікна DEBUG cmux відкриваються на вибраному дисплеї. Спільне для всіх позначених тегами складань розробки; застосовується під час створення вікна." + "value": "ターミナルのスクロールバーを隠す" } } } }, - "debug.devWindowDisplay.refresh": { + "contextMenu.workspaceStatus": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Refresh displays" + "value": "Status" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ディスプレイを更新" + "value": "ステータス" } - }, - "ko": { + } + } + }, + "contextMenu.workspaceStatus.auto": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "디스플레이 새로 고침" + "value": "Auto — %@" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Оновити дисплеї" + "value": "自動 — %@" } } } }, - "debug.devWindowDisplay.title": { + "crashBreadcrumb.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Dev Window Display" + "value": "Diagnostic file saved. Click to reveal it in Finder." } }, "ja": { "stringUnit": { "state": "translated", - "value": "開発ウィンドウディスプレイ" + "value": "診断ファイルを保存しました。クリックするとFinderで表示します。" } - }, - "ko": { + } + } + }, + "crashBreadcrumb.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "개발 창 디스플레이" + "value": "Diagnostic file saved" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Дисплей вікна розробки" + "value": "診断ファイルを保存しました" } } } }, - "debug.menu.aboutTitlebarDebug": { + "crashBreadcrumb.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "About Titlebar Debug…" + "value": "cmux crashed during your last session" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Aboutタイトルバーデバッグ…" + "value": "前回のセッション中に cmux がクラッシュしました" } } } }, - "debug.menu.bonsplitTabBarDebug": { + "customSidebarRenderer.inProcess.description": { + "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Bonsplit Tab Bar Debug…" + "value": "Renders as native SwiftUI inside cmux with hover, focus, and typing. A faulty sidebar shares the app process." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Bonsplitタブバーのデバッグ…" + "value": "cmux 内でネイティブ SwiftUI として描画し、ホバー・フォーカス・入力に対応します。サイドバーに問題があるとアプリプロセスに影響します。" } } } }, - "debug.menu.browserProfilePopoverDebug": { + "customSidebarRenderer.inProcess.name": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Browser Profile Popover Debug…" + "value": "In-app (full input)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザープロファイルポップオーバーのデバッグ…" + "value": "アプリ内(フル入力)" } - }, - "ko": { + } + } + }, + "customSidebarRenderer.remote.description": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "브라우저 프로필 팝오버 디버그…" + "value": "Renders in a crash-isolated helper process. Clicks only: no hover, focus, or typing." } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Налагодження спливного вікна профілю браузера…" + "value": "クラッシュから隔離されたヘルパープロセスで描画します。クリックのみ対応で、ホバー・フォーカス・入力はできません。" } } } }, - "debug.menu.browserToolbarButtonSpacing": { + "customSidebarRenderer.remote.name": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Browser Toolbar Button Spacing" + "value": "Isolated process" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブラウザーツールバーのボタン間隔" + "value": "分離プロセス" } - }, - "ko": { + } + } + }, + "debug.aboutTitlebarDebug.resetAbout": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "브라우저 도구 모음 버튼 간격" + "value": "Reset About" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Відстань кнопок панелі інструментів браузера" + "value": "Aboutをリセット" } } } }, - "debug.menu.devWindowDisplay": { + "debug.aboutTitlebarDebug.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Dev Window Display…" + "value": "About Titlebar Debug" } }, "ja": { "stringUnit": { "state": "translated", - "value": "開発ウィンドウディスプレイ…" + "value": "Aboutタイトルバーデバッグ" } - }, - "ko": { + } + } + }, + "debug.bonsplitTabBarDebug.actionLaneBorder": { + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "개발 창 디스플레이…" + "value": "Action Lane Border" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Дисплей вікна розробки…" + "value": "アクションレーンの境界線" } } } }, - "debug.menu.feedButtonStyleDebug": { - "extractionState": "manual", + "debug.bonsplitTabBarDebug.actionLaneGeometry": { "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Feed Button Style Debug…" + "value": "Action Lane Geometry" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フィードボタンスタイルのデバッグ…" + "value": "アクションレーンのジオメトリ" } } } }, - "debug.menu.feedTextEditorDebug": { - "extractionState": "manual", + "debug.bonsplitTabBarDebug.contentFade": { "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Feed Text Editor Lab…" + "value": "Content fade" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フィードテキストエディタラボ…" + "value": "コンテンツのフェード" } } } }, - "debug.menu.irohTransport": { - "extractionState": "manual", + "debug.bonsplitTabBarDebug.copyConfig": { "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Iroh Transport" + "value": "Copy Config" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Iroh トランスポート" + "value": "設定をコピー" } } } }, - "debug.menu.irohTransport.automatic": { - "extractionState": "manual", + "debug.bonsplitTabBarDebug.fineTune": { "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Automatic" + "value": "Fine tune" } }, "ja": { "stringUnit": { "state": "translated", - "value": "自動" + "value": "微調整" } } } }, - "debug.menu.irohTransport.noRelay": { - "extractionState": "manual", + "debug.bonsplitTabBarDebug.heading": { "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No Relay (Direct Only)" + "value": "Bonsplit Tab Bar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リレーなし(直接接続のみ)" + "value": "Bonsplitタブバー" } } } }, - "debug.menu.irohTransport.relayOnly": { - "extractionState": "manual", + "debug.bonsplitTabBarDebug.pixelsValue": { "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Relay Only" + "value": "%@ px" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リレーのみ" + "value": "%@ px" } } } }, - "debug.menu.openAgentGuiReact": { - "extractionState": "manual", + "debug.bonsplitTabBarDebug.reset": { "localizations": { - "ar": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "Reset" } }, - "bs": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "リセット" } - }, - "da": { + } + } + }, + "debug.bonsplitTabBarDebug.separatorFadeFrame": { + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "Separator fade frame" } }, - "de": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "区切り線のフェード幅" } - }, + } + } + }, + "debug.bonsplitTabBarDebug.solidBgExtra": { + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Agent GUI (React)" + "value": "Solid bg extra" } }, - "es": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" - } - }, - "fr": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "単色背景の追加幅" } - }, - "it": { + } + } + }, + "debug.bonsplitTabBarDebug.title": { + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "Bonsplit Tab Bar Debug" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Agent GUI を開く (React)" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" - } - }, - "ko": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" - } - }, - "nb": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" - } - }, - "pl": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" - } - }, - "pt-BR": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "value": "Bonsplitタブバーのデバッグ" } - }, - "ru": { + } + } + }, + "debug.browserProfilePopover.group.padding": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "Padding" } }, - "th": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "余白" } }, - "tr": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "패딩" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (React)" + "state": "translated", + "value": "Відступи" } } } }, - "debug.menu.openAgentGuiSolid": { + "debug.browserProfilePopover.group.preview": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "de": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, "en": { "stringUnit": { "state": "translated", - "value": "Open Agent GUI (Solid)" - } - }, - "es": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "fr": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "it": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "value": "Preview" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Agent GUI を開く (Solid)" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "value": "プレビュー" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "nb": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "pl": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "state": "translated", + "value": "미리보기" } }, - "pt-BR": { + "uk": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "state": "translated", + "value": "Перегляд" } - }, - "ru": { + } + } + }, + "debug.browserProfilePopover.heading": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "state": "translated", + "value": "Browser Profile Popover" } }, - "th": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "state": "translated", + "value": "ブラウザープロファイルポップオーバー" } }, - "tr": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "state": "translated", + "value": "브라우저 프로필 팝오버" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "needs_review", - "value": "Open Agent GUI (Solid)" + "state": "translated", + "value": "Спливне вікно профілю браузера" } } } }, - "debug.menu.openStressWorkspacesWithLoadedSurfaces": { + "debug.browserProfilePopover.label.horizontal": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Stress Workspaces and Load All Terminals" + "value": "Horizontal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "負荷テスト用ワークスペースを開いてすべてのターミナルを読み込む" + "value": "水平" } }, "ko": { "stringUnit": { "state": "translated", - "value": "스트레스 워크스페이스 열기 및 모든 터미널 로드" + "value": "가로" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити стрес-тест робочих областей і завантажити всі термінали" + "value": "Горизонтальний" } } } }, - "debug.menu.pdfPreviewChromeDebug": { + "debug.browserProfilePopover.label.vertical": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "PDF Preview Chrome Debug…" + "value": "Vertical" } }, "ja": { "stringUnit": { "state": "translated", - "value": "PDFプレビュークロームのデバッグ…" + "value": "垂直" } }, "ko": { "stringUnit": { "state": "translated", - "value": "PDF 미리보기 크롬 디버그…" + "value": "세로" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Налагодження хрому PDF-перегляду…" + "value": "Вертикальний" } } } }, - "debug.menu.showCanvasCommandScrollHint": { + "debug.browserProfilePopover.liveNote": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "إظهار تلميح التمرير في اللوحة" + "value": "Changes apply live to the browser profile popover." } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Prikaži savjet za pomicanje platna" + "value": "変更はブラウザープロファイルポップオーバーにライブで反映されます。" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Vis scrollhint for lærred" + "value": "변경 사항이 브라우저 프로필 팝오버에 실시간으로 적용됩니다." } }, - "de": { + "uk": { "stringUnit": { "state": "translated", - "value": "Canvas-Scrollhinweis anzeigen" + "value": "Зміни застосовуються до спливного вікна профілю браузера в реальному часі." } - }, + } + } + }, + "debug.browserProfilePopover.note": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Canvas Scroll Hint" + "value": "Tune the profile popover padding live while comparing it against the browser toolbar menu." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Mostrar indicación de desplazamiento del lienzo" + "value": "ブラウザーツールバーのメニューと見比べながら、プロファイルポップオーバーの余白をライブで調整します。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Afficher l’indice de défilement du canevas" + "value": "브라우저 도구 모음 메뉴와 비교하면서 프로필 팝오버 패딩을 실시간으로 조정합니다." } }, - "it": { + "uk": { "stringUnit": { "state": "translated", - "value": "Mostra il suggerimento di scorrimento del canvas" + "value": "Налаштуйте відступи спливного вікна профілю в реальному часі, порівнюючи з меню панелі інструментів браузера." } - }, - "ja": { + } + } + }, + "debug.browserProfilePopover.reset": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "キャンバスのスクロールヒントを表示" + "value": "Reset" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "បង្ហាញគន្លឹះរមូរ Canvas" + "value": "リセット" } }, "ko": { "stringUnit": { "state": "translated", - "value": "캔버스 스크롤 힌트 표시" + "value": "초기화" } }, - "nb": { + "uk": { "stringUnit": { "state": "translated", - "value": "Vis rulletips for lerret" + "value": "Скинути" } - }, - "pl": { + } + } + }, + "debug.devBuildBanner.show": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Pokaż wskazówkę przewijania obszaru roboczego" + "value": "Show Dev Build Banner" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Mostrar dica de rolagem da tela" + "value": "開発ビルドバナーを表示" } }, - "ru": { + "ko": { "stringUnit": { "state": "translated", - "value": "Показать подсказку прокрутки холста" + "value": "개발 빌드 배너 표시" } }, - "th": { + "uk": { "stringUnit": { "state": "translated", - "value": "แสดงคำแนะนำการเลื่อนแคนวาส" + "value": "Показати банер версії для розробки" } - }, - "tr": { + } + } + }, + "debug.devBuildBanner.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tuval kaydırma ipucunu göster" + "value": "THIS IS A DEV BUILD" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Показати підказку прокручування полотна" + "value": "これは開発ビルドです" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "显示画布滚动提示" + "value": "개발 빌드입니다" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "顯示畫布捲動提示" + "value": "ЦЕ ВЕРСІЯ ДЛЯ РОЗРОБКИ" } } } }, - "debug.menu.splitButtonLayoutDebug": { + "debug.devWindowDisplay.clear": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Split Button Layout Debug…" + "value": "Clear (system default)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "分割ボタンレイアウトのデバッグ…" + "value": "クリア(システムデフォルト)" } - } - } - }, - "debug.menu.startupAppearanceDebug": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Startup Appearance Debug…" + "value": "지우기(시스템 기본값)" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "起動時の外観デバッグ…" + "value": "Очистити (системне за замовчуванням)" } } } }, - "debug.menu.tabBarBackdropLab": { + "debug.devWindowDisplay.current": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Backdrop Lab…" + "value": "Current: %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブバー背景ラボ…" - } - } - } - }, - "debug.menu.titlebarLayoutDebug": { - "extractionState": "manual", - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "現在: %@" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "현재: %@" } }, - "da": { + "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Поточний: %@" } - }, - "de": { + } + } + }, + "debug.devWindowDisplay.currentNone": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Current: (system default)" } }, - "en": { + "ja": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "現在: (システムデフォルト)" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "현재: (시스템 기본값)" } }, - "fr": { + "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Поточний: (системне за замовчуванням)" } - }, - "it": { + } + } + }, + "debug.devWindowDisplay.description": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "New DEBUG cmux windows open on the selected display. Shared across all tagged dev builds; applied at window creation." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タイトルバーレイアウトデバッグ..." + "value": "新しいDEBUG cmuxウィンドウは選択したディスプレイで開きます。すべてのタグ付き開発ビルドで共有され、ウィンドウ作成時に適用されます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "새 DEBUG cmux 창이 선택한 디스플레이에서 열립니다. 모든 태그가 지정된 개발 빌드에서 공유되며 창 생성 시 적용됩니다." } }, - "nb": { + "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Нові вікна DEBUG cmux відкриваються на вибраному дисплеї. Спільне для всіх позначених тегами складань розробки; застосовується під час створення вікна." } - }, - "pl": { + } + } + }, + "debug.devWindowDisplay.refresh": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Refresh displays" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "ディスプレイを更新" } }, - "ru": { + "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "디스플레이 새로 고침" } }, - "th": { + "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Оновити дисплеї" } - }, - "tr": { + } + } + }, + "debug.devWindowDisplay.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Dev Window Display" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "開発ウィンドウディスプレイ" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "개발 창 디스플레이" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug..." + "value": "Дисплей вікна розробки" } } } }, - "debug.splitButtonLayout.alwaysHover": { + "debug.menu.aboutTitlebarDebug": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Always Show Hover State" + "value": "About Titlebar Debug…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ホバー状態を常に表示" + "value": "Aboutタイトルバーデバッグ…" } } } }, - "debug.splitButtonLayout.backdropOptions": { - "extractionState": "manual", + "debug.menu.bonsplitTabBarDebug": { "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Backdrop Options" + "value": "Bonsplit Tab Bar Debug…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "背景オプション" + "value": "Bonsplitタブバーのデバッグ…" } } } }, - "debug.splitButtonLayout.caretSegment": { + "debug.menu.browserProfilePopoverDebug": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Caret Segment" + "value": "Browser Profile Popover Debug…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャレットセグメント" + "value": "ブラウザープロファイルポップオーバーのデバッグ…" } - } - } - }, - "debug.splitButtonLayout.cloudPreview": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud Split Button" + "value": "브라우저 프로필 팝오버 디버그…" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "クラウド分割ボタン" + "value": "Налагодження спливного вікна профілю браузера…" } } } }, - "debug.splitButtonLayout.hoverSegment": { + "debug.menu.browserToolbarButtonSpacing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Forced Hover Segment" + "value": "Browser Toolbar Button Spacing" } }, "ja": { "stringUnit": { "state": "translated", - "value": "強制ホバーセグメント" + "value": "ブラウザーツールバーのボタン間隔" } - } - } - }, - "debug.splitButtonLayout.hoverSegment.both": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Both" + "value": "브라우저 도구 모음 버튼 간격" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "両方" + "value": "Відстань кнопок панелі інструментів браузера" } } } }, - "debug.splitButtonLayout.hoverSegment.caret": { + "debug.menu.devWindowDisplay": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Caret" + "value": "Dev Window Display…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャレット" + "value": "開発ウィンドウディスプレイ…" } - } - } - }, - "debug.splitButtonLayout.hoverSegment.plus": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Plus" + "value": "개발 창 디스플레이…" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "プラス" + "value": "Дисплей вікна розробки…" } } } }, - "debug.splitButtonLayout.inUse": { + "debug.menu.feedButtonStyleDebug": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "In Use" + "value": "Feed Button Style Debug…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用中" + "value": "フィードボタンスタイルのデバッグ…" } } } }, - "debug.splitButtonLayout.innerPadding": { + "debug.menu.feedTextEditorDebug": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Inner Padding and Width" + "value": "Feed Text Editor Lab…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "内側の余白と幅" + "value": "フィードテキストエディタラボ…" } } } }, - "debug.splitButtonLayout.liveNote": { + "debug.menu.irohTransport": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Changes apply live." + "value": "Iroh Transport" } }, "ja": { "stringUnit": { "state": "translated", - "value": "変更はライブで反映されます。" + "value": "Iroh トランスポート" } } } }, - "debug.splitButtonLayout.option.controlBackground": { + "debug.menu.irohTransport.automatic": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "controlBackgroundColor" + "value": "Automatic" } }, "ja": { "stringUnit": { "state": "translated", - "value": "controlBackgroundColor" + "value": "自動" } } } }, - "debug.splitButtonLayout.option.hidden": { + "debug.menu.irohTransport.noRelay": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hidden" + "value": "No Relay (Direct Only)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "非表示" + "value": "リレーなし(直接接続のみ)" } } } }, - "debug.splitButtonLayout.option.precompositedBar": { + "debug.menu.irohTransport.relayOnly": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Pre-composited barBackground" + "value": "Relay Only" } }, "ja": { "stringUnit": { "state": "translated", - "value": "合成済み barBackground" + "value": "リレーのみ" } } } }, - "debug.splitButtonLayout.option.precompositedPane": { + "debug.menu.openAgentGuiReact": { "extractionState": "manual", "localizations": { + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, "en": { "stringUnit": { "state": "translated", - "value": "Pre-composited paneBackground" + "value": "Open Agent GUI (React)" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "合成済み paneBackground" + "value": "Agent GUI を開く (React)" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (React)" } } } }, - "debug.splitButtonLayout.option.rawBar": { + "debug.menu.openAgentGuiSolid": { "extractionState": "manual", "localizations": { + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, "en": { "stringUnit": { "state": "translated", - "value": "barBackground (tab chrome)" + "value": "Open Agent GUI (Solid)" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "barBackground(タブクローム)" + "value": "Agent GUI を開く (Solid)" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "Open Agent GUI (Solid)" } } } }, - "debug.splitButtonLayout.option.rawPane": { + "debug.menu.openStressWorkspacesWithLoadedSurfaces": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Raw paneBackground (opaque)" + "value": "Open Stress Workspaces and Load All Terminals" } }, "ja": { "stringUnit": { "state": "translated", - "value": "未加工 paneBackground(不透明)" + "value": "負荷テスト用ワークスペースを開いてすべてのターミナルを読み込む" } - } - } - }, - "debug.splitButtonLayout.option.translucentChrome": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Translucent chrome" + "value": "스트레스 워크스페이스 열기 및 모든 터미널 로드" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "半透明クローム" + "value": "Відкрити стрес-тест робочих областей і завантажити всі термінали" } } } }, - "debug.splitButtonLayout.option.windowBackground": { + "debug.menu.pdfPreviewChromeDebug": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "windowBackgroundColor" + "value": "PDF Preview Chrome Debug…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "windowBackgroundColor" + "value": "PDFプレビュークロームのデバッグ…" } - } - } - }, - "debug.splitButtonLayout.padding.bottom": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Bottom" + "value": "PDF 미리보기 크롬 디버그…" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "下" + "value": "Налагодження хрому PDF-перегляду…" } } } }, - "debug.splitButtonLayout.padding.leading": { + "debug.menu.showCanvasCommandScrollHint": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "إظهار تلميح التمرير في اللوحة" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "前" + "value": "Prikaži savjet za pomicanje platna" } - } - } - }, - "debug.splitButtonLayout.padding.top": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Vis scrollhint for lærred" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "上" + "value": "Canvas-Scrollhinweis anzeigen" } - } - } - }, - "debug.splitButtonLayout.padding.trailing": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Trailing" + "value": "Show Canvas Scroll Hint" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "後" + "value": "Mostrar indicación de desplazamiento del lienzo" } - } - } - }, - "debug.splitButtonLayout.plusClicks": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Plus clicks: %d" + "value": "Afficher l’indice de défilement du canevas" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "プラスのクリック数: %d" + "value": "Mostra il suggerimento di scorrimento del canvas" } - } - } - }, - "debug.splitButtonLayout.plusSegment": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ja": { "stringUnit": { "state": "translated", - "value": "Plus Segment" + "value": "キャンバスのスクロールヒントを表示" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "プラスセグメント" + "value": "បង្ហាញគន្លឹះរមូរ Canvas" } - } - } - }, - "debug.splitButtonLayout.resetPadding": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Reset Padding and Widths" + "value": "캔버스 스크롤 힌트 표시" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "余白と幅をリセット" + "value": "Vis rulletips for lerret" } - } - } - }, - "debug.splitButtonLayout.sectionWidth": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Section Width" + "value": "Pokaż wskazówkę przewijania obszaru roboczego" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "セクション幅" + "value": "Mostrar dica de rolagem da tela" } - } - } - }, - "debug.splitButtonLayout.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Button Backdrop Color" + "value": "Показать подсказку прокрутки холста" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "ボタン背景色" + "value": "แสดงคำแนะนำการเลื่อนแคนวาส" } - } - } - }, - "debug.splitButtonLayout.width.caretOffset": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Caret Width Offset" + "value": "Tuval kaydırma ipucunu göster" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "キャレット幅オフセット" + "value": "Показати підказку прокручування полотна" } - } - } - }, - "debug.splitButtonLayout.width.plusOffset": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Plus Width Offset" + "value": "显示画布滚动提示" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "プラス幅オフセット" + "value": "顯示畫布捲動提示" } } } }, - "debug.splitButtonLayout.windowTitle": { + "debug.menu.splitButtonLayoutDebug": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Split Button Layout" + "value": "Split Button Layout Debug…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "分割ボタンレイアウト" + "value": "分割ボタンレイアウトのデバッグ…" } } } }, - "debug.startupAppearance.appearance.label": { + "debug.menu.startupAppearanceDebug": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Appearance" + "value": "Startup Appearance Debug…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "外観" + "value": "起動時の外観デバッグ…" } } } }, - "debug.startupAppearance.applied.appearanceLabel": { + "debug.menu.tabBarBackdropLab": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Appearance:" + "value": "Tab Bar Backdrop Lab…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "外観:" + "value": "タブバー背景ラボ…" } } } }, - "debug.startupAppearance.applied.configLabel": { + "debug.menu.titlebarLayoutDebug": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Config:" + "value": "Titlebar Layout Debug..." } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "設定:" + "value": "Titlebar Layout Debug..." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タイトルバーレイアウトデバッグ..." + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Titlebar Layout Debug..." } } } }, - "debug.startupAppearance.applied.heading": { + "debug.splitButtonLayout.alwaysHover": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Applied" + "value": "Always Show Hover State" } }, "ja": { "stringUnit": { "state": "translated", - "value": "適用済み" + "value": "ホバー状態を常に表示" } } } }, - "debug.startupAppearance.applied.help": { + "debug.splitButtonLayout.backdropOptions": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reloads the running app through Ghostty config update, matching startup theme resolution without editing config files." + "value": "Backdrop Options" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定ファイルを編集せず、Ghostty 設定更新で実行中のアプリを再読み込みし、起動時のテーマ解決を再現します。" + "value": "背景オプション" } } } }, - "debug.startupAppearance.applyPreview.button": { + "debug.splitButtonLayout.caretSegment": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Apply Preview" + "value": "Caret Segment" } }, "ja": { "stringUnit": { "state": "translated", - "value": "プレビューを適用" + "value": "キャレットセグメント" } } } }, - "debug.startupAppearance.copySelectedConfig.button": { + "debug.splitButtonLayout.cloudPreview": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy Selected Config" + "value": "Cloud Split Button" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択中の設定をコピー" + "value": "クラウド分割ボタン" } } } }, - "debug.startupAppearance.mode.dark": { + "debug.splitButtonLayout.hoverSegment": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Force Dark" + "value": "Forced Hover Segment" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ダークを強制" + "value": "強制ホバーセグメント" } } } }, - "debug.startupAppearance.mode.light": { + "debug.splitButtonLayout.hoverSegment.both": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Force Light" + "value": "Both" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ライトを強制" + "value": "両方" } } } }, - "debug.startupAppearance.mode.stored": { + "debug.splitButtonLayout.hoverSegment.caret": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Stored App Setting" + "value": "Caret" } }, "ja": { "stringUnit": { "state": "translated", - "value": "保存済みのアプリ設定" + "value": "キャレット" } } } }, - "debug.startupAppearance.preview.heading": { + "debug.splitButtonLayout.hoverSegment.plus": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Preview" + "value": "Plus" } }, "ja": { "stringUnit": { "state": "translated", - "value": "プレビュー" + "value": "プラス" } } } }, - "debug.startupAppearance.profile.freshInstall.detail": { + "debug.splitButtonLayout.inUse": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No user theme or terminal colors, so cmux applies its managed default colors." + "value": "In Use" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザーのテーマやターミナル色がないため、cmux の管理されたデフォルト色を適用します。" + "value": "使用中" } } } }, - "debug.startupAppearance.profile.freshInstall.title": { + "debug.splitButtonLayout.innerPadding": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fresh Install" + "value": "Inner Padding and Width" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規インストール" + "value": "内側の余白と幅" } } } }, - "debug.startupAppearance.profile.realUserConfig.detail": { + "debug.splitButtonLayout.liveNote": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Loads your actual Ghostty and cmux config files." + "value": "Changes apply live." } }, "ja": { "stringUnit": { "state": "translated", - "value": "実際の Ghostty と cmux の設定ファイルを読み込みます。" + "value": "変更はライブで反映されます。" } } } }, - "debug.startupAppearance.profile.realUserConfig.title": { + "debug.splitButtonLayout.option.controlBackground": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Real User Config" + "value": "controlBackgroundColor" } }, "ja": { "stringUnit": { "state": "translated", - "value": "実際のユーザー設定" + "value": "controlBackgroundColor" } } } }, - "debug.startupAppearance.profile.userExplicitColors.detail": { + "debug.splitButtonLayout.option.hidden": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Simulates a user with direct terminal color settings and no theme." + "value": "Hidden" } }, "ja": { "stringUnit": { "state": "translated", - "value": "テーマなしでターミナル色を直接設定しているユーザーをシミュレートします。" + "value": "非表示" } } } }, - "debug.startupAppearance.profile.userExplicitColors.title": { + "debug.splitButtonLayout.option.precompositedBar": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "User Explicit Colors" + "value": "Pre-composited barBackground" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザー指定色" + "value": "合成済み barBackground" } } } }, - "debug.startupAppearance.profile.userSingleTheme.detail": { + "debug.splitButtonLayout.option.precompositedPane": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Simulates a user with one Ghostty theme applied in both appearances." + "value": "Pre-composited paneBackground" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ライトとダークの両方に同じ Ghostty テーマを適用しているユーザーをシミュレートします。" + "value": "合成済み paneBackground" } } } }, - "debug.startupAppearance.profile.userSingleTheme.title": { + "debug.splitButtonLayout.option.rawBar": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "User Single Theme" + "value": "barBackground (tab chrome)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザー単一テーマ" + "value": "barBackground(タブクローム)" } } } }, - "debug.startupAppearance.profile.userThemePair.detail": { + "debug.splitButtonLayout.option.rawPane": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Simulates a user with an explicit light/dark Ghostty theme." + "value": "Raw paneBackground (opaque)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ライトとダークの Ghostty テーマを明示的に設定しているユーザーをシミュレートします。" + "value": "未加工 paneBackground(不透明)" } } } }, - "debug.startupAppearance.profile.userThemePair.title": { + "debug.splitButtonLayout.option.translucentChrome": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "User Light/Dark Theme" + "value": "Translucent chrome" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユーザーのライト/ダークテーマ" + "value": "半透明クローム" } } } }, - "debug.startupAppearance.realConfigFallback": { + "debug.splitButtonLayout.option.windowBackground": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Loads real user config files." + "value": "windowBackgroundColor" } }, "ja": { "stringUnit": { "state": "translated", - "value": "実際のユーザー設定ファイルを読み込みます。" + "value": "windowBackgroundColor" } } } }, - "debug.startupAppearance.restoreRealStartup.button": { + "debug.splitButtonLayout.padding.bottom": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Restore Real Startup" + "value": "Bottom" } }, "ja": { "stringUnit": { "state": "translated", - "value": "実際の起動設定に戻す" + "value": "下" } } } }, - "debug.startupAppearance.selectedConfig.heading": { + "debug.splitButtonLayout.padding.leading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Selected Config" + "value": "Leading" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択中の設定" + "value": "前" } } } }, - "debug.startupAppearance.startupConfig.label": { + "debug.splitButtonLayout.padding.top": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Startup config" + "value": "Top" } }, "ja": { "stringUnit": { "state": "translated", - "value": "起動設定" + "value": "上" } } } }, - "debug.startupAppearance.window.title": { + "debug.splitButtonLayout.padding.trailing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Startup Appearance Debug" + "value": "Trailing" } }, "ja": { "stringUnit": { "state": "translated", - "value": "起動時の外観デバッグ" + "value": "後" } } } }, - "debug.tabBarBackdropLab.candidateEnd": { + "debug.splitButtonLayout.plusClicks": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "End opacity" + "value": "Plus clicks: %d" } }, "ja": { "stringUnit": { "state": "translated", - "value": "終端不透明度" + "value": "プラスのクリック数: %d" } } } }, - "debug.tabBarBackdropLab.candidateFade": { + "debug.splitButtonLayout.plusSegment": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Candidate fade" + "value": "Plus Segment" } }, "ja": { "stringUnit": { "state": "translated", - "value": "候補フェード" + "value": "プラスセグメント" } } } }, - "debug.tabBarBackdropLab.candidateLead": { + "debug.splitButtonLayout.resetPadding": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Lead opacity" + "value": "Reset Padding and Widths" } }, "ja": { "stringUnit": { "state": "translated", - "value": "開始不透明度" + "value": "余白と幅をリセット" } } } }, - "debug.tabBarBackdropLab.candidateRamp": { + "debug.splitButtonLayout.sectionWidth": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ramp start" + "value": "Section Width" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ランプ開始" + "value": "セクション幅" } } } }, - "debug.tabBarBackdropLab.candidateSoftness": { + "debug.splitButtonLayout.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Candidate softness" + "value": "Button Backdrop Color" } }, "ja": { "stringUnit": { "state": "translated", - "value": "候補の柔らかさ" + "value": "ボタン背景色" } } } }, - "debug.tabBarBackdropLab.candidateSolid": { + "debug.splitButtonLayout.width.caretOffset": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Solid width" + "value": "Caret Width Offset" } }, "ja": { "stringUnit": { "state": "translated", - "value": "塗りつぶし幅" + "value": "キャレット幅オフセット" } } } }, - "debug.tabBarBackdropLab.leftSidebar": { + "debug.splitButtonLayout.width.plusOffset": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "L" + "value": "Plus Width Offset" } }, "ja": { "stringUnit": { "state": "translated", - "value": "左" + "value": "プラス幅オフセット" } } } }, - "debug.tabBarBackdropLab.maskTabs": { + "debug.splitButtonLayout.windowTitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mask tabs" + "value": "Split Button Layout" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブをマスク" + "value": "分割ボタンレイアウト" } } } }, - "debug.tabBarBackdropLab.opacity": { + "debug.startupAppearance.appearance.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Surface opacity" + "value": "Appearance" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サーフェス不透明度" + "value": "外観" } } } }, - "debug.tabBarBackdropLab.rightSidebar": { + "debug.startupAppearance.applied.appearanceLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "R" + "value": "Appearance:" } }, "ja": { "stringUnit": { "state": "translated", - "value": "右" + "value": "外観:" } } } }, - "debug.tabBarBackdropLab.subtitle": { + "debug.startupAppearance.applied.configLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Live Bonsplit tab bars with overflow tabs under the split buttons. The window background is transparent." + "value": "Config:" } }, "ja": { "stringUnit": { "state": "translated", - "value": "分割ボタンの下にあふれるタブを表示するライブ Bonsplit タブバーです。ウインドウ背景は透明です。" + "value": "設定:" } } } }, - "debug.tabBarBackdropLab.tab.agentBrowserLogs": { + "debug.startupAppearance.applied.heading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "agent-browser logs" + "value": "Applied" } }, "ja": { "stringUnit": { "state": "translated", - "value": "agent-browser ログ" + "value": "適用済み" } } } }, - "debug.tabBarBackdropLab.tab.backdropCheck": { + "debug.startupAppearance.applied.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "split button backdrop check" + "value": "Reloads the running app through Ghostty config update, matching startup theme resolution without editing config files." } }, "ja": { "stringUnit": { "state": "translated", - "value": "分割ボタン背景チェック" + "value": "設定ファイルを編集せず、Ghostty 設定更新で実行中のアプリを再読み込みし、起動時のテーマ解決を再現します。" } } } }, - "debug.tabBarBackdropLab.tab.hiddenBelowControls": { + "debug.startupAppearance.applyPreview.button": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "tabs hidden below controls" + "value": "Apply Preview" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コントロール下に隠れるタブ" + "value": "プレビューを適用" } } } }, - "debug.tabBarBackdropLab.tab.rightEdgeOverflow": { + "debug.startupAppearance.copySelectedConfig.button": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "right edge overflow sample" + "value": "Copy Selected Config" } }, "ja": { "stringUnit": { "state": "translated", - "value": "右端オーバーフローのサンプル" + "value": "選択中の設定をコピー" } } } }, - "debug.tabBarBackdropLab.tab.terminalTransparency": { + "debug.startupAppearance.mode.dark": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux terminal transparency" + "value": "Force Dark" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux ターミナル透明度" + "value": "ダークを強制" } } } }, - "debug.tabBarBackdropLab.tab.underlayText": { + "debug.startupAppearance.mode.light": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "underlay tab text visible here" + "value": "Force Light" } }, "ja": { "stringUnit": { "state": "translated", - "value": "下のタブ文字が見える場所" + "value": "ライトを強制" } } } }, - "debug.tabBarBackdropLab.terminal.compare": { + "debug.startupAppearance.mode.stored": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "drag / resize / compare the transparent edges" + "value": "Stored App Setting" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ドラッグ / リサイズ / 透明な端を比較" + "value": "保存済みのアプリ設定" } } } }, - "debug.tabBarBackdropLab.terminal.overflow": { + "debug.startupAppearance.preview.heading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "tab titles intentionally overflow under the split buttons" + "value": "Preview" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブタイトルは意図的に分割ボタンの下へあふれます" + "value": "プレビュー" } } } }, - "debug.tabBarBackdropLab.terminal.prompt": { + "debug.startupAppearance.profile.freshInstall.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "lawrence in ~/cmux" + "value": "No user theme or terminal colors, so cmux applies its managed default colors." } }, "ja": { "stringUnit": { "state": "translated", - "value": "lawrence in ~/cmux" + "value": "ユーザーのテーマやターミナル色がないため、cmux の管理されたデフォルト色を適用します。" } } } }, - "debug.tabBarBackdropLab.title": { + "debug.startupAppearance.profile.freshInstall.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Backdrop Lab" + "value": "Fresh Install" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブバー背景ラボ" + "value": "新規インストール" } } } }, - "debug.tabBarBackdropLab.titlebarSample": { + "debug.startupAppearance.profile.realUserConfig.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "workspace@lab:~" + "value": "Loads your actual Ghostty and cmux config files." } }, "ja": { "stringUnit": { "state": "translated", - "value": "workspace@lab:~" + "value": "実際の Ghostty と cmux の設定ファイルを読み込みます。" } } } }, - "debug.tabBarBackdropLab.variant.candidate": { + "debug.startupAppearance.profile.realUserConfig.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Candidate" + "value": "Real User Config" } }, "ja": { "stringUnit": { "state": "translated", - "value": "候補" + "value": "実際のユーザー設定" } } } }, - "debug.tabBarBackdropLab.variant.candidate.detail": { + "debug.startupAppearance.profile.userExplicitColors.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Translucent chrome with tab occlusion." + "value": "Simulates a user with direct terminal color settings and no theme." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブを隠す半透明クロームです。" + "value": "テーマなしでターミナル色を直接設定しているユーザーをシミュレートします。" } } } }, - "debug.tabBarBackdropLab.variant.candidateLowContrast": { + "debug.startupAppearance.profile.userExplicitColors.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Low contrast" + "value": "User Explicit Colors" } }, "ja": { "stringUnit": { "state": "translated", - "value": "低コントラスト" + "value": "ユーザー指定色" } } } }, - "debug.tabBarBackdropLab.variant.candidateLowContrast.detail": { + "debug.startupAppearance.profile.userSingleTheme.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Lower-opacity solid region." + "value": "Simulates a user with one Ghostty theme applied in both appearances." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ソリッド領域の不透明度を下げます。" + "value": "ライトとダークの両方に同じ Ghostty テーマを適用しているユーザーをシミュレートします。" } } } }, - "debug.tabBarBackdropLab.variant.candidateSoftEnd": { + "debug.startupAppearance.profile.userSingleTheme.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Soft end" + "value": "User Single Theme" } }, "ja": { "stringUnit": { "state": "translated", - "value": "柔らかい終端" + "value": "ユーザー単一テーマ" } } } }, - "debug.tabBarBackdropLab.variant.candidateSoftEnd.detail": { + "debug.startupAppearance.profile.userThemePair.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Same mask with lighter button fill." + "value": "Simulates a user with an explicit light/dark Ghostty theme." } }, "ja": { "stringUnit": { "state": "translated", - "value": "同じマスクでボタン背景を薄くします。" + "value": "ライトとダークの Ghostty テーマを明示的に設定しているユーザーをシミュレートします。" } } } }, - "debug.tabBarBackdropLab.variant.candidateTightEdge": { + "debug.startupAppearance.profile.userThemePair.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Tight edge" + "value": "User Light/Dark Theme" } }, "ja": { "stringUnit": { "state": "translated", - "value": "強めの端" + "value": "ユーザーのライト/ダークテーマ" } } } }, - "debug.tabBarBackdropLab.variant.candidateTightEdge.detail": { + "debug.startupAppearance.realConfigFallback": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "More coverage at the fade start." + "value": "Loads real user config files." } }, "ja": { "stringUnit": { "state": "translated", - "value": "フェード開始部分の被覆を強めます。" + "value": "実際のユーザー設定ファイルを読み込みます。" } } } }, - "debug.tabBarBackdropLab.variant.candidateWideFade": { + "debug.startupAppearance.restoreRealStartup.button": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wide fade" + "value": "Restore Real Startup" } }, "ja": { "stringUnit": { "state": "translated", - "value": "広いフェード" + "value": "実際の起動設定に戻す" } } } }, - "debug.tabBarBackdropLab.variant.candidateWideFade.detail": { + "debug.startupAppearance.selectedConfig.heading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Same model with a softer edge." + "value": "Selected Config" } }, "ja": { "stringUnit": { "state": "translated", - "value": "同じモデルで端をより柔らかくします。" + "value": "選択中の設定" } } } }, - "debug.tabBarBackdropLab.variant.controlBackground": { + "debug.startupAppearance.startupConfig.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "4 Control background" + "value": "Startup config" } }, "ja": { "stringUnit": { "state": "translated", - "value": "4 コントロール背景" + "value": "起動設定" } } } }, - "debug.tabBarBackdropLab.variant.controlBackground.detail": { + "debug.startupAppearance.window.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Uses AppKit controlBackgroundColor." + "value": "Startup Appearance Debug" } }, "ja": { "stringUnit": { "state": "translated", - "value": "AppKit の controlBackgroundColor を使います。" + "value": "起動時の外観デバッグ" } } } }, - "debug.tabBarBackdropLab.variant.hidden": { + "debug.tabBarBackdropLab.candidateEnd": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "7 No backdrop" + "value": "End opacity" } }, "ja": { "stringUnit": { "state": "translated", - "value": "7 背景なし" + "value": "終端不透明度" } } } }, - "debug.tabBarBackdropLab.variant.hidden.detail": { + "debug.tabBarBackdropLab.candidateFade": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Control sample. Tabs remain visible below the buttons." + "value": "Candidate fade" } }, "ja": { "stringUnit": { "state": "translated", - "value": "比較用サンプルです。ボタンの下にタブが見えたままになります。" + "value": "候補フェード" } } } }, - "debug.tabBarBackdropLab.variant.opaqueBar": { + "debug.tabBarBackdropLab.candidateLead": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "2 Raw bar opaque" + "value": "Lead opacity" } }, "ja": { "stringUnit": { "state": "translated", - "value": "2 バーをそのまま不透明化" + "value": "開始不透明度" } } } }, - "debug.tabBarBackdropLab.variant.opaqueBar.detail": { + "debug.tabBarBackdropLab.candidateRamp": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ramp start" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ランプ開始" + } + } + } + }, + "debug.tabBarBackdropLab.candidateSoftness": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Candidate softness" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "候補の柔らかさ" + } + } + } + }, + "debug.tabBarBackdropLab.candidateSolid": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Uses the tab chrome color at full opacity." + "value": "Solid width" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "塗りつぶし幅" + } + } + } + }, + "debug.tabBarBackdropLab.leftSidebar": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "L" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "左" + } + } + } + }, + "debug.tabBarBackdropLab.maskTabs": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Mask tabs" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タブをマスク" + } + } + } + }, + "debug.tabBarBackdropLab.opacity": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Surface opacity" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サーフェス不透明度" + } + } + } + }, + "debug.tabBarBackdropLab.rightSidebar": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "R" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "右" + } + } + } + }, + "debug.tabBarBackdropLab.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Live Bonsplit tab bars with overflow tabs under the split buttons. The window background is transparent." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "分割ボタンの下にあふれるタブを表示するライブ Bonsplit タブバーです。ウインドウ背景は透明です。" + } + } + } + }, + "debug.tabBarBackdropLab.tab.agentBrowserLogs": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "agent-browser logs" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "agent-browser ログ" + } + } + } + }, + "debug.tabBarBackdropLab.tab.backdropCheck": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "split button backdrop check" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "分割ボタン背景チェック" + } + } + } + }, + "debug.tabBarBackdropLab.tab.hiddenBelowControls": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "tabs hidden below controls" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "コントロール下に隠れるタブ" + } + } + } + }, + "debug.tabBarBackdropLab.tab.rightEdgeOverflow": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "right edge overflow sample" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "右端オーバーフローのサンプル" + } + } + } + }, + "debug.tabBarBackdropLab.tab.terminalTransparency": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux terminal transparency" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux ターミナル透明度" + } + } + } + }, + "debug.tabBarBackdropLab.tab.underlayText": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "underlay tab text visible here" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "下のタブ文字が見える場所" + } + } + } + }, + "debug.tabBarBackdropLab.terminal.compare": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "drag / resize / compare the transparent edges" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ドラッグ / リサイズ / 透明な端を比較" + } + } + } + }, + "debug.tabBarBackdropLab.terminal.overflow": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "tab titles intentionally overflow under the split buttons" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タブタイトルは意図的に分割ボタンの下へあふれます" + } + } + } + }, + "debug.tabBarBackdropLab.terminal.prompt": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "lawrence in ~/cmux" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "lawrence in ~/cmux" + } + } + } + }, + "debug.tabBarBackdropLab.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tab Bar Backdrop Lab" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タブバー背景ラボ" + } + } + } + }, + "debug.tabBarBackdropLab.titlebarSample": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "workspace@lab:~" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "workspace@lab:~" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidate": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Candidate" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "候補" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidate.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Translucent chrome with tab occlusion." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タブを隠す半透明クロームです。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateLowContrast": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Low contrast" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "低コントラスト" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateLowContrast.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Lower-opacity solid region." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ソリッド領域の不透明度を下げます。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateSoftEnd": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Soft end" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "柔らかい終端" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateSoftEnd.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Same mask with lighter button fill." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "同じマスクでボタン背景を薄くします。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateTightEdge": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tight edge" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "強めの端" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateTightEdge.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "More coverage at the fade start." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "フェード開始部分の被覆を強めます。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateWideFade": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Wide fade" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "広いフェード" + } + } + } + }, + "debug.tabBarBackdropLab.variant.candidateWideFade.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Same model with a softer edge." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "同じモデルで端をより柔らかくします。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.controlBackground": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "4 Control background" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "4 コントロール背景" + } + } + } + }, + "debug.tabBarBackdropLab.variant.controlBackground.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Uses AppKit controlBackgroundColor." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "AppKit の controlBackgroundColor を使います。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.hidden": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "7 No backdrop" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "7 背景なし" + } + } + } + }, + "debug.tabBarBackdropLab.variant.hidden.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Control sample. Tabs remain visible below the buttons." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "比較用サンプルです。ボタンの下にタブが見えたままになります。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.opaqueBar": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "2 Raw bar opaque" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "2 バーをそのまま不透明化" + } + } + } + }, + "debug.tabBarBackdropLab.variant.opaqueBar.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Uses the tab chrome color at full opacity." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タブクローム色を完全な不透明度で使います。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.opaquePane": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "1 Raw pane opaque" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1 ペインをそのまま不透明化" + } + } + } + }, + "debug.tabBarBackdropLab.variant.opaquePane.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Forces the pane fill to full opacity." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ペイン塗りを完全な不透明度にします。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.precompositedBar": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "5 Opaque bar composite" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "5 バー合成の不透明背景" + } + } + } + }, + "debug.tabBarBackdropLab.variant.precompositedBar.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Composites tab chrome over the window background." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タブクロームをウインドウ背景の上に合成します。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.precompositedPane": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "0 Opaque pane composite" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "0 ペイン合成の不透明背景" + } + } + } + }, + "debug.tabBarBackdropLab.variant.precompositedPane.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Old candidate. Covers too hard." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "以前の候補です。被覆が強すぎます。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.translucentChrome": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "6 Translucent chrome" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "6 半透明クローム" + } + } + } + }, + "debug.tabBarBackdropLab.variant.translucentChrome.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Shows the bleed-through problem." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "透けて見える問題を表示します。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.translucentNoFade": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No fade" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "フェードなし" + } + } + } + }, + "debug.tabBarBackdropLab.variant.translucentNoFade.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Hard translucent edge for contrast." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "比較用の硬い半透明エッジです。" + } + } + } + }, + "debug.tabBarBackdropLab.variant.windowBackground": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "3 Window background" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "3 ウインドウ背景" + } + } + } + }, + "debug.tabBarBackdropLab.variant.windowBackground.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Uses AppKit windowBackgroundColor." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "AppKit の windowBackgroundColor を使います。" + } + } + } + }, + "debug.tabBarBackdropLab.width": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sample width" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サンプル幅" + } + } + } + }, + "debug.titlebarLayoutDebug.actions": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + } + } + }, + "debug.titlebarLayoutDebug.apply": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "適用" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Apply" + } + } + } + }, + "debug.titlebarLayoutDebug.copyConfig": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "設定をコピー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Copy Config" + } + } + } + }, + "debug.titlebarLayoutDebug.leading": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "左余白" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Leading" + } + } + } + }, + "debug.titlebarLayoutDebug.minimumWidth": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "最小幅" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "タブクローム色を完全な不透明度で使います。" + "value": "Minimum Width" } - } - } - }, - "debug.tabBarBackdropLab.variant.opaquePane": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "1 Raw pane opaque" + "value": "Minimum Width" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "1 ペインをそのまま不透明化" + "value": "Minimum Width" } - } - } - }, - "debug.tabBarBackdropLab.variant.opaquePane.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Forces the pane fill to full opacity." + "value": "Minimum Width" } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ペイン塗りを完全な不透明度にします。" + "value": "Minimum Width" } - } - } - }, - "debug.tabBarBackdropLab.variant.precompositedBar": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "th": { "stringUnit": { "state": "translated", - "value": "5 Opaque bar composite" + "value": "Minimum Width" } }, - "ja": { + "tr": { "stringUnit": { "state": "translated", - "value": "5 バー合成の不透明背景" + "value": "Minimum Width" } - } - } - }, - "debug.tabBarBackdropLab.variant.precompositedBar.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "uk": { "stringUnit": { "state": "translated", - "value": "Composites tab chrome over the window background." + "value": "Minimum Width" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "タブクロームをウインドウ背景の上に合成します。" + "value": "Minimum Width" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Minimum Width" } } } }, - "debug.tabBarBackdropLab.variant.precompositedPane": { + "debug.titlebarLayoutDebug.reset": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "0 Opaque pane composite" + "value": "Reset" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "0 ペイン合成の不透明背景" + "value": "Reset" } - } - } - }, - "debug.tabBarBackdropLab.variant.precompositedPane.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Old candidate. Covers too hard." + "value": "Reset" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "以前の候補です。被覆が強すぎます。" + "value": "Reset" } - } - } - }, - "debug.tabBarBackdropLab.variant.translucentChrome": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "6 Translucent chrome" + "value": "Reset" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "6 半透明クローム" + "value": "Reset" } - } - } - }, - "debug.tabBarBackdropLab.variant.translucentChrome.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Shows the bleed-through problem." + "value": "Reset" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Reset" } }, "ja": { "stringUnit": { "state": "translated", - "value": "透けて見える問題を表示します。" + "value": "リセット" } - } - } - }, - "debug.tabBarBackdropLab.variant.translucentNoFade": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "No fade" + "value": "Reset" } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "フェードなし" + "value": "Reset" } - } - } - }, - "debug.tabBarBackdropLab.variant.translucentNoFade.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Hard translucent edge for contrast." + "value": "Reset" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "比較用の硬い半透明エッジです。" + "value": "Reset" } - } - } - }, - "debug.tabBarBackdropLab.variant.windowBackground": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "3 Window background" + "value": "Reset" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "3 ウインドウ背景" + "value": "Reset" } - } - } - }, - "debug.tabBarBackdropLab.variant.windowBackground.detail": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Uses AppKit windowBackgroundColor." + "value": "Reset" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "AppKit の windowBackgroundColor を使います。" + "value": "Reset" } - } - } - }, - "debug.tabBarBackdropLab.width": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Sample width" + "value": "Reset" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サンプル幅" + "value": "Reset" } } } }, - "debug.titlebarLayoutDebug.actions": { + "debug.titlebarLayoutDebug.sidebar": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "da": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "de": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "en": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "es": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "it": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アクション" + "value": "サイドバー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "th": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Actions" + "value": "Sidebar" } } } }, - "debug.titlebarLayoutDebug.apply": { + "debug.titlebarLayoutDebug.style": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "da": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "de": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "en": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "es": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "ja": { "stringUnit": { "state": "translated", - "value": "適用" + "value": "スタイル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "th": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Apply" + "value": "Style" } } } }, - "debug.titlebarLayoutDebug.copyConfig": { + "debug.titlebarLayoutDebug.tabBarInset": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "da": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "de": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "en": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "it": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定をコピー" + "value": "タブバー余白" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "th": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Copy Config" + "value": "Tab Bar Inset" } } } }, - "debug.titlebarLayoutDebug.leading": { + "debug.titlebarLayoutDebug.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "da": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "de": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "en": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "es": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "it": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "ja": { "stringUnit": { "state": "translated", - "value": "左余白" + "value": "タイトルバーレイアウトデバッグ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "th": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Leading" + "value": "Titlebar Layout Debug" } } } }, - "debug.titlebarLayoutDebug.minimumWidth": { + "debug.titlebarLayoutDebug.titlebarControls": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "da": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "de": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "en": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "es": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "it": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最小幅" + "value": "タイトルバーコントロール" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "th": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Minimum Width" + "value": "Titlebar Controls" } } } }, - "debug.titlebarLayoutDebug.reset": { + "debug.titlebarLayoutDebug.titlebarInset": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "da": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "de": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "en": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "es": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "it": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リセット" + "value": "タイトルバー余白" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "th": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Reset" + "value": "Titlebar Inset" } } } }, - "debug.titlebarLayoutDebug.sidebar": { + "debug.titlebarLayoutDebug.top": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "de": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "en": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイドバー" + "value": "上" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "th": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Sidebar" + "value": "Top" } } } }, - "debug.titlebarLayoutDebug.style": { + "debug.titlebarLayoutDebug.trafficLights": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "da": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "de": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "en": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "es": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "it": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "ja": { "stringUnit": { "state": "translated", - "value": "スタイル" + "value": "信号ボタン余白" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "th": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Style" + "value": "Traffic Light Insets" } } } }, - "debug.titlebarLayoutDebug.tabBarInset": { + "debug.windows.browserProfilePopover.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Browser Profile Popover Debug" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "ブラウザープロファイルポップオーバーのデバッグ" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "브라우저 프로필 팝오버 디버그" } }, - "de": { + "uk": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Налагодження спливного вікна профілю браузера" } - }, + } + } + }, + "defaultTerminal.updateFailed.message": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tab Bar Inset" + "value": "macOS could not update every default terminal handler." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "macOS はすべてのデフォルトターミナルハンドラを更新できませんでした。" } - }, - "it": { + } + } + }, + "detail.mode": { + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Mode" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブバー余白" + "value": "モード" } - }, - "ko": { + } + } + }, + "detail.primaryAction": { + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Open Related File" } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "関連ファイルを開く" } - }, - "pl": { + } + } + }, + "detail.secondaryAction": { + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Restore Defaults" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "デフォルトに戻す" } - }, - "ru": { + } + } + }, + "detail.section": { + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Section" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "セクション" } - }, - "tr": { + } + } + }, + "detail.slider": { + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Amount" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "量" } - }, - "zh-Hans": { + } + } + }, + "detail.toggle": { + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "Enable" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab Bar Inset" + "value": "有効にする" } } } }, - "debug.titlebarLayoutDebug.title": { + "detectedSSH.fileDrop.error.notFileURL": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "تعذّر رفع العنصر الذي تم إفلاته لأنه ليس ملفًا محليًا. أفلت ملفًا من Finder، ثم حاول مرة أخرى." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Nije moguće otpremiti ispuštenu stavku jer nije lokalna datoteka. Ispustite datoteku iz Findera, pa pokušajte ponovo." } }, "da": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Det emne, du slap, kunne ikke uploades, fordi det ikke er en lokal fil. Træk en fil fra Finder, og prøv igen." } }, "de": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Das abgelegte Objekt konnte nicht hochgeladen werden, weil es keine lokale Datei ist. Ziehe eine Datei aus dem Finder hinein und versuche es erneut." } }, "en": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Couldn't upload the dropped item because it isn't a local file. Drop a file from Finder, then try again." } }, "es": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "No se pudo subir el elemento soltado porque no es un archivo local. Suelta un archivo desde Finder e inténtalo de nuevo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Impossible de téléverser l’élément déposé, car ce n’est pas un fichier local. Déposez un fichier depuis le Finder, puis réessayez." } }, "it": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Impossibile caricare l’elemento rilasciato perché non è un file locale. Rilascia un file dal Finder e riprova." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タイトルバーレイアウトデバッグ" + "value": "ドロップされた項目はローカルファイルではないためアップロードできません。Finder からファイルをドロップして、もう一度お試しください。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនអាចផ្ទុកឡើងធាតុដែលបានទម្លាក់បានទេ ព្រោះវាមិនមែនជាឯកសារមូលដ្ឋាន។ សូមទម្លាក់ឯកសារពី Finder ហើយព្យាយាមម្តងទៀត។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "드롭한 항목이 로컬 파일이 아니어서 업로드할 수 없습니다. Finder에서 파일을 드롭한 다음 다시 시도하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Kunne ikke laste opp elementet som ble sluppet, fordi det ikke er en lokal fil. Slipp en fil fra Finder, og prøv igjen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Nie można przesłać upuszczonego elementu, ponieważ nie jest plikiem lokalnym. Upuść plik z Findera i spróbuj ponownie." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Não foi possível enviar o item solto porque ele não é um arquivo local. Solte um arquivo do Finder e tente novamente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Не удалось загрузить перетащенный объект, потому что это не локальный файл. Перетащите файл из Finder и повторите попытку." } }, "th": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "ไม่สามารถอัปโหลดรายการที่วางได้เพราะไม่ใช่ไฟล์ในเครื่อง ให้วางไฟล์จาก Finder แล้วลองอีกครั้ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Bırakılan öğe yerel bir dosya olmadığı için yüklenemedi. Finder’dan bir dosya bırakıp yeniden deneyin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "Не вдалося завантажити скинутий елемент, бо це не локальний файл. Перетягніть файл із Finder і повторіть спробу." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "无法上传拖放的项目,因为它不是本地文件。请从 Finder 拖放一个文件,然后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Titlebar Layout Debug" + "value": "無法上傳拖放的項目,因為它不是本機檔案。請從 Finder 拖放檔案,然後再試一次。" } } } }, - "debug.titlebarLayoutDebug.titlebarControls": { + "detectedSSH.fileDrop.error.scpTimedOut": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "انتهت مهلة نقل الملف. تحقق من المضيف البعيد واتصال الشبكة، ثم حاول مرة أخرى." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Prijenos datoteke je istekao. Provjerite udaljeni host i mrežnu vezu, pa pokušajte ponovo." } }, "da": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Filoverførslen fik timeout. Kontrollér fjernværten og netværksforbindelsen, og prøv igen." } }, "de": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Die Dateiübertragung hat das Zeitlimit überschritten. Prüfe den Remote-Host und die Netzwerkverbindung und versuche es erneut." } }, "en": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "File transfer timed out. Check the remote host and network connection, then try again." } }, "es": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "La transferencia del archivo agotó el tiempo de espera. Comprueba el host remoto y la conexión de red e inténtalo de nuevo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Le transfert du fichier a expiré. Vérifiez l’hôte distant et la connexion réseau, puis réessayez." } }, "it": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Il trasferimento del file è scaduto. Verifica l’host remoto e la connessione di rete, poi riprova." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タイトルバーコントロール" + "value": "ファイル転送がタイムアウトしました。リモートホストとネットワーク接続を確認して、もう一度お試しください。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ការផ្ទេរឯកសារអស់ពេលកំណត់។ សូមពិនិត្យម៉ាស៊ីនពីចម្ងាយ និងការតភ្ជាប់បណ្តាញ ហើយព្យាយាមម្តងទៀត។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "파일 전송 시간이 초과되었습니다. 원격 호스트와 네트워크 연결을 확인한 다음 다시 시도하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Filoverføringen tidsavbrøt. Kontroller den eksterne verten og nettverkstilkoblingen, og prøv igjen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Upłynął limit czasu transferu pliku. Sprawdź host zdalny i połączenie sieciowe, a następnie spróbuj ponownie." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "A transferência do arquivo expirou. Verifique o host remoto e a conexão de rede e tente novamente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Время передачи файла истекло. Проверьте удалённый хост и сетевое подключение, затем повторите попытку." } }, "th": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "การถ่ายโอนไฟล์หมดเวลา ตรวจสอบโฮสต์ระยะไกลและการเชื่อมต่อเครือข่าย แล้วลองอีกครั้ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Dosya aktarımı zaman aşımına uğradı. Uzak ana makineyi ve ağ bağlantısını kontrol edip yeniden deneyin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "Час передавання файлу минув. Перевірте віддалений хост і мережеве з’єднання, а потім повторіть спробу." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "文件传输超时。请检查远程主机和网络连接,然后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Titlebar Controls" + "value": "檔案傳輸逾時。請檢查遠端主機和網路連線,然後再試一次。" } } } }, - "debug.titlebarLayoutDebug.titlebarInset": { + "detectedSSH.fileDrop.error.uploadFailed": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "تعذّر رفع الملف إلى الجلسة البعيدة. تحقق من أن المضيف البعيد قابل للوصول، ثم حاول مرة أخرى." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Datoteku nije moguće otpremiti u udaljenu sesiju. Provjerite da li je udaljeni host dostupan, pa pokušajte ponovo." } }, "da": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Filen kunne ikke uploades til den eksterne session. Kontrollér, at fjernværten kan nås, og prøv igen." } }, "de": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Die Datei konnte nicht in die Remote-Sitzung hochgeladen werden. Prüfe, ob der Remote-Host erreichbar ist, und versuche es erneut." } }, "en": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Couldn't upload the file to the remote session. Check that the remote host is reachable, then try again." } }, "es": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "No se pudo subir el archivo a la sesión remota. Comprueba que el host remoto esté accesible e inténtalo de nuevo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Impossible de téléverser le fichier vers la session distante. Vérifiez que l’hôte distant est joignable, puis réessayez." } }, "it": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Impossibile caricare il file nella sessione remota. Verifica che l’host remoto sia raggiungibile e riprova." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タイトルバー余白" + "value": "リモートセッションへファイルをアップロードできませんでした。リモートホストに到達できることを確認して、もう一度お試しください。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនអាចផ្ទុកឡើងឯកសារទៅសម័យពីចម្ងាយបានទេ។ សូមពិនិត្យថាម៉ាស៊ីនពីចម្ងាយអាចចូលដំណើរការបាន ហើយព្យាយាមម្តងទៀត។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "원격 세션에 파일을 업로드할 수 없습니다. 원격 호스트에 연결할 수 있는지 확인한 다음 다시 시도하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Kunne ikke laste opp filen til den eksterne økten. Kontroller at den eksterne verten er tilgjengelig, og prøv igjen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Nie można przesłać pliku do sesji zdalnej. Sprawdź, czy host zdalny jest osiągalny, i spróbuj ponownie." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Não foi possível enviar o arquivo para a sessão remota. Verifique se o host remoto está acessível e tente novamente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Не удалось загрузить файл в удалённый сеанс. Проверьте доступность удалённого хоста и повторите попытку." } }, "th": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "ไม่สามารถอัปโหลดไฟล์ไปยังเซสชันระยะไกลได้ ตรวจสอบว่าโฮสต์ระยะไกลเข้าถึงได้ แล้วลองอีกครั้ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Dosya uzak oturuma yüklenemedi. Uzak ana makinenin erişilebilir olduğunu kontrol edip yeniden deneyin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "Не вдалося завантажити файл у віддалений сеанс. Перевірте доступність віддаленого хоста й повторіть спробу." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "无法将文件上传到远程会话。请检查远程主机是否可访问,然后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Titlebar Inset" + "value": "無法將檔案上傳到遠端工作階段。請確認遠端主機可連線,然後再試一次。" } } } }, - "debug.titlebarLayoutDebug.top": { + "dialog.closeAnchor.message.lone": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "إغلاق مساحة العمل هذه سيحذف المجموعة «%@»." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Zatvaranje ovog radnog prostora ukloniti će grupu „%@“." } }, "da": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Hvis du lukker dette arbejdsområde, fjernes gruppen “%@”." } }, "de": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Wenn du diesen Arbeitsbereich schließt, wird die Gruppe „%@“ entfernt." } }, "en": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Closing this workspace will remove the group “%@”." } }, "es": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Cerrar este espacio de trabajo eliminará el grupo «%@»." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Fermer cet espace de travail supprimera le groupe « %@ »." } }, "it": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Chiudere quest’area di lavoro rimuoverà il gruppo «%@»." } }, "ja": { "stringUnit": { "state": "translated", - "value": "上" + "value": "このワークスペースを閉じるとグループ「%@」が削除されます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "이 작업 공간을 닫으면 그룹 “%@”이(가) 삭제됩니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Hvis du lukker dette arbeidsområdet, fjernes gruppen «%@»." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Zamknięcie tej przestrzeni usunie grupę „%@”." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Fechar esta área de trabalho removerá o grupo “%@”." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Закрытие этого рабочего пространства удалит группу «%@»." } }, "th": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "การปิดเวิร์กสเปซนี้จะลบกลุ่ม “%@”" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Bu çalışma alanını kapatmak “%@” grubunu kaldıracak." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "Закриття цієї робочої області видалить групу «%@»." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "关闭此工作区将删除分组「%@」。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Top" + "value": "關閉此工作區將移除群組「%@」。" } } } }, - "debug.titlebarLayoutDebug.trafficLights": { + "dialog.closeAnchor.message.many": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "إغلاق مساحة العمل هذه سيُلغي تجميع «%1$@» وسيُحرّر %2$lld مساحات عمل أخرى." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Zatvaranje ovog radnog prostora razgrupisaće „%1$@“ i osloboditi %2$lld drugih radnih prostora." } }, "da": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Hvis du lukker dette arbejdsområde, opdeles “%1$@” og %2$lld andre arbejdsområder frigives." } }, "de": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Wenn du diesen Arbeitsbereich schließt, wird die Gruppe „%1$@“ aufgelöst und %2$lld weitere Arbeitsbereiche werden freigegeben." } }, "en": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Closing this workspace will ungroup “%1$@” and release %2$lld other workspaces." } }, "es": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Cerrar este espacio de trabajo desagrupará «%1$@» y liberará %2$lld espacios de trabajo más." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Fermer cet espace de travail dissociera « %1$@ » et libérera %2$lld autres espaces de travail." } }, "it": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Chiudere quest’area di lavoro dividerà «%1$@» e libererà altre %2$lld aree di lavoro." } }, "ja": { "stringUnit": { "state": "translated", - "value": "信号ボタン余白" + "value": "このワークスペースを閉じるとグループ「%1$@」が解除され、他の %2$lld 個のワークスペースが切り離されます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "이 작업 공간을 닫으면 그룹 “%1$@”이(가) 해제되고 다른 작업 공간 %2$lld개가 분리됩니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Hvis du lukker dette arbeidsområdet, oppløses «%1$@» og %2$lld andre arbeidsområder frigjøres." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Zamknięcie tej przestrzeni rozgrupuje „%1$@” i uwolni %2$lld innych przestrzeni." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Fechar esta área de trabalho desagrupará “%1$@” e liberará outras %2$lld áreas de trabalho." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Закрытие этого рабочего пространства разгруппирует «%1$@» и освободит ещё %2$lld рабочих пространств." } }, "th": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "การปิดเวิร์กสเปซนี้จะเลิกจัดกลุ่ม “%1$@” และปล่อยอีก %2$lld เวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Bu çalışma alanını kapatmak “%1$@” grubunu çözer ve %2$lld başka çalışma alanını serbest bırakır." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "Закриття цієї робочої області розгрупує «%1$@» та звільнить ще %2$lld робочих областей." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "关闭此工作区将解散分组「%1$@」并释放另外 %2$lld 个工作区。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Traffic Light Insets" + "value": "關閉此工作區將解散群組「%1$@」並釋出另外 %2$lld 個工作區。" } } } }, - "debug.windows.browserProfilePopover.title": { + "dialog.closeAnchor.message.one": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Browser Profile Popover Debug" + "value": "إغلاق مساحة العمل هذه سيُلغي تجميع «%@» وسيُحرّر مساحة عمل أخرى واحدة." } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ブラウザープロファイルポップオーバーのデバッグ" + "value": "Zatvaranje ovog radnog prostora razgrupisaće „%@“ i osloboditi 1 drugi radni prostor." } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "브라우저 프로필 팝오버 디버그" + "value": "Hvis du lukker dette arbejdsområde, opdeles “%@” og 1 andet arbejdsområde frigives." } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Налагодження спливного вікна профілю браузера" + "value": "Wenn du diesen Arbeitsbereich schließt, wird die Gruppe „%@“ aufgelöst und 1 weiterer Arbeitsbereich freigegeben." } - } - } - }, - "defaultTerminal.updateFailed.message": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "macOS could not update every default terminal handler." + "value": "Closing this workspace will ungroup “%@” and release 1 other workspace." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "macOS はすべてのデフォルトターミナルハンドラを更新できませんでした。" + "value": "Cerrar este espacio de trabajo desagrupará «%@» y liberará 1 espacio de trabajo más." } - } - } - }, - "detail.mode": { - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Mode" + "value": "Fermer cet espace de travail dissociera « %@ » et libérera 1 autre espace de travail." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Chiudere quest’area di lavoro dividerà «%@» e libererà 1 altra area di lavoro." } }, "ja": { "stringUnit": { "state": "translated", - "value": "モード" + "value": "このワークスペースを閉じるとグループ「%@」が解除され、他のワークスペース 1 個が切り離されます。" } - } - } - }, - "detail.primaryAction": { - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Open Related File" + "value": "이 작업 공간을 닫으면 그룹 “%@”이(가) 해제되고 다른 작업 공간 1개가 분리됩니다." } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "関連ファイルを開く" + "value": "Hvis du lukker dette arbeidsområdet, oppløses «%@» og 1 annet arbeidsområde frigjøres." } - } - } - }, - "detail.secondaryAction": { - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Restore Defaults" + "value": "Zamknięcie tej przestrzeni rozgrupuje „%@” i uwolni 1 inną przestrzeń." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "デフォルトに戻す" + "value": "Fechar esta área de trabalho desagrupará “%@” e liberará 1 outra área de trabalho." } - } - } - }, - "detail.section": { - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Section" + "value": "Закрытие этого рабочего пространства разгруппирует «%@» и освободит 1 другое рабочее пространство." } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "セクション" + "value": "การปิดเวิร์กสเปซนี้จะเลิกจัดกลุ่ม “%@” และปล่อยอีก 1 เวิร์กสเปซ" } - } - } - }, - "detail.slider": { - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Amount" + "value": "Bu çalışma alanını kapatmak “%@” grubunu çözer ve 1 başka çalışma alanını serbest bırakır." } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "量" + "value": "Закриття цієї робочої області розгрупує «%@» та звільнить ще 1 робочу область." } - } - } - }, - "detail.toggle": { - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Enable" + "value": "关闭此工作区将解散分组「%@」并释放另外 1 个工作区。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "有効にする" + "value": "關閉此工作區將解散群組「%@」並釋出另外 1 個工作區。" } } } }, - "detectedSSH.fileDrop.error.notFileURL": { + "dialog.closeAnchor.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر رفع العنصر الذي تم إفلاته لأنه ليس ملفًا محليًا. أفلت ملفًا من Finder، ثم حاول مرة أخرى." + "value": "هل تريد إغلاق مساحة العمل هذه؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nije moguće otpremiti ispuštenu stavku jer nije lokalna datoteka. Ispustite datoteku iz Findera, pa pokušajte ponovo." + "value": "Zatvoriti ovaj radni prostor?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Det emne, du slap, kunne ikke uploades, fordi det ikke er en lokal fil. Træk en fil fra Finder, og prøv igen." + "value": "Luk dette arbejdsområde?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das abgelegte Objekt konnte nicht hochgeladen werden, weil es keine lokale Datei ist. Ziehe eine Datei aus dem Finder hinein und versuche es erneut." + "value": "Diesen Arbeitsbereich schließen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "Couldn't upload the dropped item because it isn't a local file. Drop a file from Finder, then try again." + "value": "Close this workspace?" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo subir el elemento soltado porque no es un archivo local. Suelta un archivo desde Finder e inténtalo de nuevo." + "value": "¿Cerrar este espacio de trabajo?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible de téléverser l’élément déposé, car ce n’est pas un fichier local. Déposez un fichier depuis le Finder, puis réessayez." + "value": "Fermer cet espace de travail ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Impossibile caricare l’elemento rilasciato perché non è un file locale. Rilascia un file dal Finder e riprova." + "value": "Chiudere quest’area di lavoro?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ドロップされた項目はローカルファイルではないためアップロードできません。Finder からファイルをドロップして、もう一度お試しください。" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "មិនអាចផ្ទុកឡើងធាតុដែលបានទម្លាក់បានទេ ព្រោះវាមិនមែនជាឯកសារមូលដ្ឋាន។ សូមទម្លាក់ឯកសារពី Finder ហើយព្យាយាមម្តងទៀត។" + "value": "このワークスペースを閉じますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "드롭한 항목이 로컬 파일이 아니어서 업로드할 수 없습니다. Finder에서 파일을 드롭한 다음 다시 시도하세요." + "value": "이 작업 공간을 닫을까요?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kunne ikke laste opp elementet som ble sluppet, fordi det ikke er en lokal fil. Slipp en fil fra Finder, og prøv igjen." + "value": "Lukke dette arbeidsområdet?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nie można przesłać upuszczonego elementu, ponieważ nie jest plikiem lokalnym. Upuść plik z Findera i spróbuj ponownie." + "value": "Zamknąć tę przestrzeń?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Não foi possível enviar o item solto porque ele não é um arquivo local. Solte um arquivo do Finder e tente novamente." + "value": "Fechar esta área de trabalho?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Не удалось загрузить перетащенный объект, потому что это не локальный файл. Перетащите файл из Finder и повторите попытку." + "value": "Закрыть это рабочее пространство?" } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่สามารถอัปโหลดรายการที่วางได้เพราะไม่ใช่ไฟล์ในเครื่อง ให้วางไฟล์จาก Finder แล้วลองอีกครั้ง" + "value": "ปิดเวิร์กสเปซนี้ใช่ไหม?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bırakılan öğe yerel bir dosya olmadığı için yüklenemedi. Finder’dan bir dosya bırakıp yeniden deneyin." + "value": "Bu çalışma alanı kapatılsın mı?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Не вдалося завантажити скинутий елемент, бо це не локальний файл. Перетягніть файл із Finder і повторіть спробу." + "value": "Закрити цю робочу область?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法上传拖放的项目,因为它不是本地文件。请从 Finder 拖放一个文件,然后重试。" + "value": "关闭此工作区?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法上傳拖放的項目,因為它不是本機檔案。請從 Finder 拖放檔案,然後再試一次。" + "value": "關閉此工作區?" } } } }, - "detectedSSH.fileDrop.error.scpTimedOut": { + "dialog.closeLastTabWindow.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "انتهت مهلة نقل الملف. تحقق من المضيف البعيد واتصال الشبكة، ثم حاول مرة أخرى." + "value": "سيؤدي هذا إلى إغلاق آخر لسان وإغلاق النافذة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prijenos datoteke je istekao. Provjerite udaljeni host i mrežnu vezu, pa pokušajte ponovo." + "value": "Ovo će zatvoriti posljednji tab i zatvoriti prozor." } }, "da": { "stringUnit": { "state": "translated", - "value": "Filoverførslen fik timeout. Kontrollér fjernværten og netværksforbindelsen, og prøv igen." + "value": "Dette lukker den sidste fane og lukker vinduet." } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Dateiübertragung hat das Zeitlimit überschritten. Prüfe den Remote-Host und die Netzwerkverbindung und versuche es erneut." + "value": "Dadurch wird der letzte Tab geschlossen und das Fenster geschlossen." } }, "en": { "stringUnit": { "state": "translated", - "value": "File transfer timed out. Check the remote host and network connection, then try again." + "value": "This will close the last tab and close the window." } }, "es": { "stringUnit": { "state": "translated", - "value": "La transferencia del archivo agotó el tiempo de espera. Comprueba el host remoto y la conexión de red e inténtalo de nuevo." + "value": "Esto cerrará la última pestaña y cerrará la ventana." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le transfert du fichier a expiré. Vérifiez l’hôte distant et la connexion réseau, puis réessayez." + "value": "Cela fermera le dernier onglet et fermera la fenêtre." } }, "it": { "stringUnit": { "state": "translated", - "value": "Il trasferimento del file è scaduto. Verifica l’host remoto e la connessione di rete, poi riprova." + "value": "Questa operazione chiuderà l'ultima scheda e la finestra." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ファイル転送がタイムアウトしました。リモートホストとネットワーク接続を確認して、もう一度お試しください。" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ការផ្ទេរឯកសារអស់ពេលកំណត់។ សូមពិនិត្យម៉ាស៊ីនពីចម្ងាយ និងការតភ្ជាប់បណ្តាញ ហើយព្យាយាមម្តងទៀត។" + "value": "最後のタブを閉じ、ウインドウを閉じます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파일 전송 시간이 초과되었습니다. 원격 호스트와 네트워크 연결을 확인한 다음 다시 시도하세요." + "value": "마지막 탭이 닫히면 윈도우도 닫힙니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Filoverføringen tidsavbrøt. Kontroller den eksterne verten og nettverkstilkoblingen, og prøv igjen." + "value": "Dette vil lukke den siste fanen og lukke vinduet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Upłynął limit czasu transferu pliku. Sprawdź host zdalny i połączenie sieciowe, a następnie spróbuj ponownie." + "value": "Spowoduje to zamknięcie ostatniej karty i zamknięcie okna." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A transferência do arquivo expirou. Verifique o host remoto e a conexão de rede e tente novamente." + "value": "Isto fechará a última aba e fechará a janela." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Время передачи файла истекло. Проверьте удалённый хост и сетевое подключение, затем повторите попытку." + "value": "Это закроет последнюю вкладку и окно." } }, "th": { "stringUnit": { "state": "translated", - "value": "การถ่ายโอนไฟล์หมดเวลา ตรวจสอบโฮสต์ระยะไกลและการเชื่อมต่อเครือข่าย แล้วลองอีกครั้ง" + "value": "การดำเนินการนี้จะปิดแท็บสุดท้ายและปิดหน้าต่าง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dosya aktarımı zaman aşımına uğradı. Uzak ana makineyi ve ağ bağlantısını kontrol edip yeniden deneyin." + "value": "Bu, son sekmeyi kapatacak ve pencereyi kapatacak." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Час передавання файлу минув. Перевірте віддалений хост і мережеве з’єднання, а потім повторіть спробу." + "value": "Це закриє останню вкладку та закриє вікно." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "文件传输超时。请检查远程主机和网络连接,然后重试。" + "value": "这将关闭最后一个标签页并关闭窗口。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "檔案傳輸逾時。請檢查遠端主機和網路連線,然後再試一次。" + "value": "這將關閉最後一個標籤頁並關閉視窗。" } } } }, - "detectedSSH.fileDrop.error.uploadFailed": { + "dialog.closeLastTabWorkspace.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر رفع الملف إلى الجلسة البعيدة. تحقق من أن المضيف البعيد قابل للوصول، ثم حاول مرة أخرى." + "value": "سيؤدي هذا إلى إغلاق آخر لسان وإغلاق مساحة العمل." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Datoteku nije moguće otpremiti u udaljenu sesiju. Provjerite da li je udaljeni host dostupan, pa pokušajte ponovo." + "value": "Ovo će zatvoriti posljednji tab i zatvoriti njegov radni prostor." } }, "da": { "stringUnit": { "state": "translated", - "value": "Filen kunne ikke uploades til den eksterne session. Kontrollér, at fjernværten kan nås, og prøv igen." + "value": "Dette lukker den sidste fane og lukker dets arbejdsområde." } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Datei konnte nicht in die Remote-Sitzung hochgeladen werden. Prüfe, ob der Remote-Host erreichbar ist, und versuche es erneut." + "value": "Dadurch wird der letzte Tab geschlossen und der Arbeitsbereich geschlossen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Couldn't upload the file to the remote session. Check that the remote host is reachable, then try again." + "value": "This will close the last tab and close its workspace." } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo subir el archivo a la sesión remota. Comprueba que el host remoto esté accesible e inténtalo de nuevo." + "value": "Esto cerrará la última pestaña y cerrará su espacio de trabajo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible de téléverser le fichier vers la session distante. Vérifiez que l’hôte distant est joignable, puis réessayez." + "value": "Cela fermera le dernier onglet et fermera son espace de travail." } }, "it": { "stringUnit": { "state": "translated", - "value": "Impossibile caricare il file nella sessione remota. Verifica che l’host remoto sia raggiungibile e riprova." + "value": "Questa operazione chiuderà l'ultima scheda e la sua area di lavoro." } }, "ja": { "stringUnit": { "state": "translated", - "value": "リモートセッションへファイルをアップロードできませんでした。リモートホストに到達できることを確認して、もう一度お試しください。" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "មិនអាចផ្ទុកឡើងឯកសារទៅសម័យពីចម្ងាយបានទេ។ សូមពិនិត្យថាម៉ាស៊ីនពីចម្ងាយអាចចូលដំណើរការបាន ហើយព្យាយាមម្តងទៀត។" + "value": "最後のタブを閉じ、ワークスペースを閉じます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "원격 세션에 파일을 업로드할 수 없습니다. 원격 호스트에 연결할 수 있는지 확인한 다음 다시 시도하세요." + "value": "마지막 탭이 닫히면 해당 작업 공간도 닫힙니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kunne ikke laste opp filen til den eksterne økten. Kontroller at den eksterne verten er tilgjengelig, og prøv igjen." + "value": "Dette vil lukke den siste fanen og lukke arbeidsområdet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nie można przesłać pliku do sesji zdalnej. Sprawdź, czy host zdalny jest osiągalny, i spróbuj ponownie." + "value": "Spowoduje to zamknięcie ostatniej karty i zamknięcie jej przestrzeni roboczej." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Não foi possível enviar o arquivo para a sessão remota. Verifique se o host remoto está acessível e tente novamente." + "value": "Isto fechará a última aba e fechará sua área de trabalho." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Не удалось загрузить файл в удалённый сеанс. Проверьте доступность удалённого хоста и повторите попытку." + "value": "Это закроет последнюю вкладку и её рабочее пространство." } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่สามารถอัปโหลดไฟล์ไปยังเซสชันระยะไกลได้ ตรวจสอบว่าโฮสต์ระยะไกลเข้าถึงได้ แล้วลองอีกครั้ง" + "value": "การดำเนินการนี้จะปิดแท็บสุดท้ายและปิดเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dosya uzak oturuma yüklenemedi. Uzak ana makinenin erişilebilir olduğunu kontrol edip yeniden deneyin." + "value": "Bu, son sekmeyi kapatacak ve çalışma alanını kapatacak." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Не вдалося завантажити файл у віддалений сеанс. Перевірте доступність віддаленого хоста й повторіть спробу." + "value": "Це закриє останню вкладку та її робочу область." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法将文件上传到远程会话。请检查远程主机是否可访问,然后重试。" + "value": "这将关闭最后一个标签页并关闭其工作区。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法將檔案上傳到遠端工作階段。請確認遠端主機可連線,然後再試一次。" + "value": "這將關閉最後一個標籤頁並關閉其工作區。" } } } }, - "dialog.closeAnchor.message.lone": { + "dialog.closeOtherTabs.message.one": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحة العمل هذه سيحذف المجموعة «%@»." + "value": "سيؤدي هذا إلى إغلاق لسان واحد في هذه اللوحة:\n%@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvaranje ovog radnog prostora ukloniti će grupu „%@“." + "value": "Ovo će zatvoriti 1 tab u ovom panelu:\n%@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Hvis du lukker dette arbejdsområde, fjernes gruppen “%@”." + "value": "Dette lukker 1 fane i dette panel:\n%@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wenn du diesen Arbeitsbereich schließt, wird die Gruppe „%@“ entfernt." + "value": "Dadurch wird 1 Tab in diesem Bereich geschlossen:\n%@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Closing this workspace will remove the group “%@”." + "value": "This will close 1 tab in this pane:\n%@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar este espacio de trabajo eliminará el grupo «%@»." + "value": "Esto cerrará 1 pestaña en este panel:\n%@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer cet espace de travail supprimera le groupe « %@ »." + "value": "Cela fermera 1 onglet dans ce panneau :\n%@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudere quest’area di lavoro rimuoverà il gruppo «%@»." + "value": "Questa operazione chiuderà 1 scheda in questo pannello:\n%@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このワークスペースを閉じるとグループ「%@」が削除されます。" + "value": "このペインの 1 個のタブを閉じます:\n%@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 작업 공간을 닫으면 그룹 “%@”이(가) 삭제됩니다." + "value": "이 패널에서 탭 1개를 닫습니다:\n%@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hvis du lukker dette arbeidsområdet, fjernes gruppen «%@»." + "value": "Dette vil lukke 1 fane i dette panelet:\n%@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknięcie tej przestrzeni usunie grupę „%@”." + "value": "Spowoduje to zamknięcie 1 karty w tym panelu:\n%@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar esta área de trabalho removerá o grupo “%@”." + "value": "Isto fechará 1 aba neste painel:\n%@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрытие этого рабочего пространства удалит группу «%@»." + "value": "Будет закрыта 1 вкладка в этой панели:\n%@" } }, "th": { "stringUnit": { "state": "translated", - "value": "การปิดเวิร์กสเปซนี้จะลบกลุ่ม “%@”" + "value": "การดำเนินการนี้จะปิด 1 แท็บในบานหน้าต่างนี้:\n%@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu çalışma alanını kapatmak “%@” grubunu kaldıracak." + "value": "Bu bölmedeki 1 sekme kapatılacak:\n%@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закриття цієї робочої області видалить групу «%@»." + "value": "Це закриє 1 вкладку в цій панелі:\n%@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭此工作区将删除分组「%@」。" + "value": "这将关闭此面板中的 1 个标签页:\n%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉此工作區將移除群組「%@」。" + "value": "這將關閉此面板中的 1 個標籤頁:\n%@" } } } }, - "dialog.closeAnchor.message.many": { + "dialog.closeOtherTabs.message.other": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحة العمل هذه سيُلغي تجميع «%1$@» وسيُحرّر %2$lld مساحات عمل أخرى." + "value": "سيؤدي هذا إلى إغلاق %1$lld لسان في هذه اللوحة:\n%2$@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvaranje ovog radnog prostora razgrupisaće „%1$@“ i osloboditi %2$lld drugih radnih prostora." + "value": "Ovo će zatvoriti %1$lld tabova u ovom panelu:\n%2$@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Hvis du lukker dette arbejdsområde, opdeles “%1$@” og %2$lld andre arbejdsområder frigives." + "value": "Dette lukker %1$lld faner i dette panel:\n%2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wenn du diesen Arbeitsbereich schließt, wird die Gruppe „%1$@“ aufgelöst und %2$lld weitere Arbeitsbereiche werden freigegeben." + "value": "Dadurch werden %1$lld Tabs in diesem Bereich geschlossen:\n%2$@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Closing this workspace will ungroup “%1$@” and release %2$lld other workspaces." + "value": "This will close %1$lld tabs in this pane:\n%2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar este espacio de trabajo desagrupará «%1$@» y liberará %2$lld espacios de trabajo más." + "value": "Esto cerrará %1$lld pestañas en este panel:\n%2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer cet espace de travail dissociera « %1$@ » et libérera %2$lld autres espaces de travail." + "value": "Cela fermera %1$lld onglets dans ce panneau :\n%2$@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudere quest’area di lavoro dividerà «%1$@» e libererà altre %2$lld aree di lavoro." + "value": "Questa operazione chiuderà %1$lld schede in questo pannello:\n%2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このワークスペースを閉じるとグループ「%1$@」が解除され、他の %2$lld 個のワークスペースが切り離されます。" + "value": "このペインの %1$lld 個のタブを閉じます:\n%2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 작업 공간을 닫으면 그룹 “%1$@”이(가) 해제되고 다른 작업 공간 %2$lld개가 분리됩니다." + "value": "이 패널에서 탭 %1$lld개를 닫습니다:\n%2$@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hvis du lukker dette arbeidsområdet, oppløses «%1$@» og %2$lld andre arbeidsområder frigjøres." + "value": "Dette vil lukke %1$lld faner i dette panelet:\n%2$@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknięcie tej przestrzeni rozgrupuje „%1$@” i uwolni %2$lld innych przestrzeni." + "value": "Spowoduje to zamknięcie %1$lld kart w tym panelu:\n%2$@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar esta área de trabalho desagrupará “%1$@” e liberará outras %2$lld áreas de trabalho." + "value": "Isto fechará %1$lld abas neste painel:\n%2$@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрытие этого рабочего пространства разгруппирует «%1$@» и освободит ещё %2$lld рабочих пространств." + "value": "Будет закрыто вкладок в этой панели: %1$lld\n%2$@" } }, "th": { "stringUnit": { "state": "translated", - "value": "การปิดเวิร์กสเปซนี้จะเลิกจัดกลุ่ม “%1$@” และปล่อยอีก %2$lld เวิร์กสเปซ" + "value": "การดำเนินการนี้จะปิด %1$lld แท็บในบานหน้าต่างนี้:\n%2$@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu çalışma alanını kapatmak “%1$@” grubunu çözer ve %2$lld başka çalışma alanını serbest bırakır." + "value": "Bu bölmedeki %1$lld sekme kapatılacak:\n%2$@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закриття цієї робочої області розгрупує «%1$@» та звільнить ще %2$lld робочих областей." + "value": "Це закриє %1$lld вкладок у цій панелі:\n%2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭此工作区将解散分组「%1$@」并释放另外 %2$lld 个工作区。" + "value": "这将关闭此面板中的 %1$lld 个标签页:\n%2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉此工作區將解散群組「%1$@」並釋出另外 %2$lld 個工作區。" + "value": "這將關閉此面板中的 %1$lld 個標籤頁:\n%2$@" } } } }, - "dialog.closeAnchor.message.one": { + "dialog.closeOtherTabs.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحة العمل هذه سيُلغي تجميع «%@» وسيُحرّر مساحة عمل أخرى واحدة." + "value": "إغلاق الألسنة الأخرى؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvaranje ovog radnog prostora razgrupisaće „%@“ i osloboditi 1 drugi radni prostor." + "value": "Zatvoriti ostale tabove?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Hvis du lukker dette arbejdsområde, opdeles “%@” og 1 andet arbejdsområde frigives." + "value": "Luk andre faner?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wenn du diesen Arbeitsbereich schließt, wird die Gruppe „%@“ aufgelöst und 1 weiterer Arbeitsbereich freigegeben." + "value": "Andere Tabs schließen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "Closing this workspace will ungroup “%@” and release 1 other workspace." + "value": "Close other tabs?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar este espacio de trabajo desagrupará «%@» y liberará 1 espacio de trabajo más." + "value": "¿Cerrar otras pestañas?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer cet espace de travail dissociera « %@ » et libérera 1 autre espace de travail." + "value": "Fermer les autres onglets ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudere quest’area di lavoro dividerà «%@» e libererà 1 altra area di lavoro." + "value": "Chiudere le altre schede?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このワークスペースを閉じるとグループ「%@」が解除され、他のワークスペース 1 個が切り離されます。" + "value": "他のタブを閉じますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 작업 공간을 닫으면 그룹 “%@”이(가) 해제되고 다른 작업 공간 1개가 분리됩니다." + "value": "다른 탭을 닫으시겠습니까?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hvis du lukker dette arbeidsområdet, oppløses «%@» og 1 annet arbeidsområde frigjøres." + "value": "Lukke andre faner?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknięcie tej przestrzeni rozgrupuje „%@” i uwolni 1 inną przestrzeń." + "value": "Zamknąć inne karty?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar esta área de trabalho desagrupará “%@” e liberará 1 outra área de trabalho." + "value": "Fechar outras abas?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрытие этого рабочего пространства разгруппирует «%@» и освободит 1 другое рабочее пространство." + "value": "Закрыть другие вкладки?" } }, "th": { "stringUnit": { "state": "translated", - "value": "การปิดเวิร์กสเปซนี้จะเลิกจัดกลุ่ม “%@” และปล่อยอีก 1 เวิร์กสเปซ" + "value": "ปิดแท็บอื่นหรือไม่?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu çalışma alanını kapatmak “%@” grubunu çözer ve 1 başka çalışma alanını serbest bırakır." + "value": "Diğer sekmeler kapatılsın mı?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закриття цієї робочої області розгрупує «%@» та звільнить ще 1 робочу область." + "value": "Закрити інші вкладки?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭此工作区将解散分组「%@」并释放另外 1 个工作区。" + "value": "关闭其他标签页?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉此工作區將解散群組「%@」並釋出另外 1 個工作區。" + "value": "要關閉其他標籤頁嗎?" } } } }, - "dialog.closeAnchor.title": { + "dialog.closePane.message.one": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "هل تريد إغلاق مساحة العمل هذه؟" + "value": "This will close 1 tab in this pane:\n%@" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Zatvoriti ovaj radni prostor?" + "value": "このペインの 1 個のタブを閉じます:\n%@" } - }, - "da": { + } + } + }, + "dialog.closePane.message.other": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Luk dette arbejdsområde?" + "value": "This will close %1$lld tabs in this pane:\n%2$@" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Diesen Arbeitsbereich schließen?" + "value": "このペインの %1$lld 個のタブを閉じます:\n%2$@" } - }, + } + } + }, + "dialog.closePane.title": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Close this workspace?" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Cerrar este espacio de trabajo?" + "value": "Close pane?" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fermer cet espace de travail ?" + "value": "ペインを閉じますか?" } - }, - "it": { + } + } + }, + "dialog.closePinnedWorkspace.message": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Chiudere quest’area di lavoro?" + "value": "This workspace is pinned. Closing it will close the workspace and all of its panels." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このワークスペースを閉じますか?" + "value": "このワークスペースはピン留めされています。閉じると、このワークスペースとその中のすべてのパネルが閉じます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 작업 공간을 닫을까요?" + "value": "이 워크스페이스는 고정되어 있습니다. 닫으면 워크스페이스와 모든 패널이 닫힙니다." } }, - "nb": { + "uk": { "stringUnit": { "state": "translated", - "value": "Lukke dette arbeidsområdet?" + "value": "Ця робоча область закріплена. Закриття видалить робочу область та всі її панелі." } - }, - "pl": { + } + } + }, + "dialog.closePinnedWorkspace.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Zamknąć tę przestrzeń?" + "value": "Close pinned workspace?" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fechar esta área de trabalho?" + "value": "ピン留めされたワークスペースを閉じますか?" } }, - "ru": { + "ko": { "stringUnit": { "state": "translated", - "value": "Закрыть это рабочее пространство?" + "value": "고정된 워크스페이스를 닫으시겠습니까?" } }, - "th": { + "uk": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซนี้ใช่ไหม?" + "value": "Закрити закріплену робочу область?" } - }, - "tr": { + } + } + }, + "dialog.closeTab.cancel": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Bu çalışma alanı kapatılsın mı?" + "value": "Cancel" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Закрити цю робочу область?" + "value": "キャンセル" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "关闭此工作区?" + "value": "취소" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "關閉此工作區?" + "value": "Скасувати" } } } }, - "dialog.closeLastTabWindow.message": { + "dialog.closeTab.close": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سيؤدي هذا إلى إغلاق آخر لسان وإغلاق النافذة." + "value": "إغلاق" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovo će zatvoriti posljednji tab i zatvoriti prozor." + "value": "Zatvori" } }, "da": { "stringUnit": { "state": "translated", - "value": "Dette lukker den sidste fane og lukker vinduet." + "value": "Luk" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dadurch wird der letzte Tab geschlossen und das Fenster geschlossen." + "value": "Schließen" } }, "en": { "stringUnit": { "state": "translated", - "value": "This will close the last tab and close the window." + "value": "Close" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esto cerrará la última pestaña y cerrará la ventana." + "value": "Cerrar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cela fermera le dernier onglet et fermera la fenêtre." + "value": "Fermer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa operazione chiuderà l'ultima scheda e la finestra." + "value": "Chiudi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最後のタブを閉じ、ウインドウを閉じます。" + "value": "閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마지막 탭이 닫히면 윈도우도 닫힙니다." + "value": "닫기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dette vil lukke den siste fanen og lukke vinduet." + "value": "Lukk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spowoduje to zamknięcie ostatniej karty i zamknięcie okna." + "value": "Zamknij" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Isto fechará a última aba e fechará a janela." + "value": "Fechar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Это закроет последнюю вкладку и окно." + "value": "Закрыть" } }, "th": { "stringUnit": { "state": "translated", - "value": "การดำเนินการนี้จะปิดแท็บสุดท้ายและปิดหน้าต่าง" + "value": "ปิด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu, son sekmeyi kapatacak ve pencereyi kapatacak." + "value": "Kapat" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Це закриє останню вкладку та закриє вікно." + "value": "Закрити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这将关闭最后一个标签页并关闭窗口。" + "value": "关闭" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這將關閉最後一個標籤頁並關閉視窗。" + "value": "關閉" } } } }, - "dialog.closeLastTabWorkspace.message": { + "dialog.closeTab.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سيؤدي هذا إلى إغلاق آخر لسان وإغلاق مساحة العمل." + "value": "سيؤدي هذا إلى إغلاق اللسان الحالي." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovo će zatvoriti posljednji tab i zatvoriti njegov radni prostor." + "value": "Ovo će zatvoriti trenutni tab." } }, "da": { "stringUnit": { "state": "translated", - "value": "Dette lukker den sidste fane og lukker dets arbejdsområde." + "value": "Dette lukker den aktuelle fane." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dadurch wird der letzte Tab geschlossen und der Arbeitsbereich geschlossen." + "value": "Dadurch wird der aktuelle Tab geschlossen." } }, "en": { "stringUnit": { "state": "translated", - "value": "This will close the last tab and close its workspace." + "value": "This will close the current tab." } }, "es": { "stringUnit": { "state": "translated", - "value": "Esto cerrará la última pestaña y cerrará su espacio de trabajo." + "value": "Esto cerrará la pestaña actual." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cela fermera le dernier onglet et fermera son espace de travail." + "value": "Cela fermera l'onglet actuel." } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa operazione chiuderà l'ultima scheda e la sua area di lavoro." + "value": "Questa operazione chiuderà la scheda corrente." } }, "ja": { "stringUnit": { "state": "translated", - "value": "最後のタブを閉じ、ワークスペースを閉じます。" + "value": "現在のタブを閉じます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마지막 탭이 닫히면 해당 작업 공간도 닫힙니다." + "value": "현재 탭을 닫습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dette vil lukke den siste fanen og lukke arbeidsområdet." + "value": "Dette vil lukke den gjeldende fanen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spowoduje to zamknięcie ostatniej karty i zamknięcie jej przestrzeni roboczej." + "value": "Spowoduje to zamknięcie bieżącej karty." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Isto fechará a última aba e fechará sua área de trabalho." + "value": "Isto fechará a aba atual." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Это закроет последнюю вкладку и её рабочее пространство." + "value": "Текущая вкладка будет закрыта." } }, "th": { "stringUnit": { "state": "translated", - "value": "การดำเนินการนี้จะปิดแท็บสุดท้ายและปิดเวิร์กสเปซ" + "value": "การดำเนินการนี้จะปิดแท็บปัจจุบัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu, son sekmeyi kapatacak ve çalışma alanını kapatacak." + "value": "Bu, geçerli sekmeyi kapatacak." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Це закриє останню вкладку та її робочу область." + "value": "Це закриє поточну вкладку." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这将关闭最后一个标签页并关闭其工作区。" + "value": "这将关闭当前标签页。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這將關閉最後一個標籤頁並關閉其工作區。" + "value": "這將關閉目前的標籤頁。" } } } }, - "dialog.closeOtherTabs.message.one": { + "dialog.closeTab.messageNamed": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This will close \"%@\"." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」を閉じます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "\"%@\"을(를) 닫습니다." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Це закриє \"%@\"." + } + } + } + }, + "dialog.closeTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سيؤدي هذا إلى إغلاق لسان واحد في هذه اللوحة:\n%@" + "value": "إغلاق اللسان؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovo će zatvoriti 1 tab u ovom panelu:\n%@" + "value": "Zatvoriti tab?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Dette lukker 1 fane i dette panel:\n%@" + "value": "Luk fane?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dadurch wird 1 Tab in diesem Bereich geschlossen:\n%@" + "value": "Tab schließen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "This will close 1 tab in this pane:\n%@" + "value": "Close tab?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esto cerrará 1 pestaña en este panel:\n%@" + "value": "¿Cerrar pestaña?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cela fermera 1 onglet dans ce panneau :\n%@" + "value": "Fermer l'onglet ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa operazione chiuderà 1 scheda in questo pannello:\n%@" + "value": "Chiudere la scheda?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このペインの 1 個のタブを閉じます:\n%@" + "value": "タブを閉じますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 패널에서 탭 1개를 닫습니다:\n%@" + "value": "탭을 닫으시겠습니까?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dette vil lukke 1 fane i dette panelet:\n%@" + "value": "Lukke fane?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spowoduje to zamknięcie 1 karty w tym panelu:\n%@" + "value": "Zamknąć kartę?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Isto fechará 1 aba neste painel:\n%@" + "value": "Fechar aba?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Будет закрыта 1 вкладка в этой панели:\n%@" + "value": "Закрыть вкладку?" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ปิดแท็บหรือไม่?" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Sekme kapatılsın mı?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Закрити вкладку?" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭标签页?" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "要關閉標籤頁嗎?" + } + } + } + }, + "dialog.closeWindow.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This will close the current window and all of its workspaces." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "現在のウィンドウとそのすべてのワークスペースを閉じます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "현재 윈도우와 모든 워크스페이스가 닫힙니다." } }, - "th": { + "uk": { "stringUnit": { "state": "translated", - "value": "การดำเนินการนี้จะปิด 1 แท็บในบานหน้าต่างนี้:\n%@" + "value": "Це закриє поточне вікно та всі його робочі області." } - }, - "tr": { + } + } + }, + "dialog.closeWindow.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Bu bölmedeki 1 sekme kapatılacak:\n%@" + "value": "Close window?" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Це закриє 1 вкладку в цій панелі:\n%@" + "value": "ウィンドウを閉じますか?" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "这将关闭此面板中的 1 个标签页:\n%@" + "value": "윈도우를 닫으시겠습니까?" } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "這將關閉此面板中的 1 個標籤頁:\n%@" + "value": "Закрити вікно?" } } } }, - "dialog.closeOtherTabs.message.other": { + "dialog.closeWorkspace.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سيؤدي هذا إلى إغلاق %1$lld لسان في هذه اللوحة:\n%2$@" + "value": "سيؤدي هذا إلى إغلاق مساحة العمل وجميع لوحاتها." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovo će zatvoriti %1$lld tabova u ovom panelu:\n%2$@" + "value": "Ovo će zatvoriti radni prostor i sve njegove panele." } }, "da": { "stringUnit": { "state": "translated", - "value": "Dette lukker %1$lld faner i dette panel:\n%2$@" + "value": "Dette lukker arbejdsområdet og alle dets paneler." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dadurch werden %1$lld Tabs in diesem Bereich geschlossen:\n%2$@" + "value": "Dadurch werden der Arbeitsbereich und alle zugehörigen Bereiche geschlossen." } }, "en": { "stringUnit": { "state": "translated", - "value": "This will close %1$lld tabs in this pane:\n%2$@" + "value": "This will close the workspace and all of its panels." } }, "es": { "stringUnit": { "state": "translated", - "value": "Esto cerrará %1$lld pestañas en este panel:\n%2$@" + "value": "Esto cerrará el espacio de trabajo y todos sus paneles." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cela fermera %1$lld onglets dans ce panneau :\n%2$@" + "value": "Cela fermera l'espace de travail et tous ses panneaux." } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa operazione chiuderà %1$lld schede in questo pannello:\n%2$@" + "value": "Questa operazione chiuderà l'area di lavoro e tutti i suoi pannelli." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このペインの %1$lld 個のタブを閉じます:\n%2$@" + "value": "ワークスペースとそのすべてのパネルを閉じます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 패널에서 탭 %1$lld개를 닫습니다:\n%2$@" + "value": "작업 공간과 모든 패널을 닫습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dette vil lukke %1$lld faner i dette panelet:\n%2$@" + "value": "Dette vil lukke arbeidsområdet og alle panelene." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spowoduje to zamknięcie %1$lld kart w tym panelu:\n%2$@" + "value": "Spowoduje to zamknięcie przestrzeni roboczej i wszystkich jej paneli." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Isto fechará %1$lld abas neste painel:\n%2$@" + "value": "Isto fechará a área de trabalho e todos os seus painéis." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Будет закрыто вкладок в этой панели: %1$lld\n%2$@" + "value": "Рабочее пространство и все его панели будут закрыты." } }, "th": { "stringUnit": { "state": "translated", - "value": "การดำเนินการนี้จะปิด %1$lld แท็บในบานหน้าต่างนี้:\n%2$@" + "value": "การดำเนินการนี้จะปิดเวิร์กสเปซและแผงทั้งหมด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu bölmedeki %1$lld sekme kapatılacak:\n%2$@" + "value": "Bu, çalışma alanını ve tüm panellerini kapatacak." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Це закриє %1$lld вкладок у цій панелі:\n%2$@" + "value": "Це закриє робочу область та всі її панелі." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这将关闭此面板中的 %1$lld 个标签页:\n%2$@" + "value": "这将关闭工作区及其所有面板。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這將關閉此面板中的 %1$lld 個標籤頁:\n%2$@" + "value": "這將關閉工作區及其所有面板。" } } } }, - "dialog.closeOtherTabs.title": { + "dialog.closeWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق الألسنة الأخرى؟" + "value": "إغلاق مساحة العمل؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvoriti ostale tabove?" + "value": "Zatvoriti radni prostor?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk andre faner?" + "value": "Luk arbejdsområde?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Andere Tabs schließen?" + "value": "Arbeitsbereich schließen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close other tabs?" + "value": "Close workspace?" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Cerrar otras pestañas?" + "value": "¿Cerrar espacio de trabajo?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer les autres onglets ?" + "value": "Fermer l'espace de travail ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudere le altre schede?" + "value": "Chiudere l'area di lavoro?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "他のタブを閉じますか?" + "value": "ワークスペースを閉じますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 탭을 닫으시겠습니까?" + "value": "작업 공간을 닫으시겠습니까?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukke andre faner?" + "value": "Lukke arbeidsområde?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknąć inne karty?" + "value": "Zamknąć przestrzeń roboczą?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar outras abas?" + "value": "Fechar área de trabalho?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть другие вкладки?" + "value": "Закрыть рабочее пространство?" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดแท็บอื่นหรือไม่?" + "value": "ปิดเวิร์กสเปซหรือไม่?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Diğer sekmeler kapatılsın mı?" + "value": "Çalışma alanı kapatılsın mı?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити інші вкладки?" + "value": "Закрити робочу область?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭其他标签页?" + "value": "关闭工作区?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要關閉其他標籤頁嗎?" + "value": "要關閉工作區嗎?" } } } }, - "dialog.closePane.message.one": { + "dialog.closeWorkspaces.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This will close 1 tab in this pane:\n%@" + "value": "This will close %1$lld workspaces and all of their panels:\n%2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このペインの 1 個のタブを閉じます:\n%@" + "value": "%1$lld 個のワークスペースと、それぞれのすべてのパネルを閉じます:\n%2$@" } - } - } - }, - "dialog.closePane.message.other": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "This will close %1$lld tabs in this pane:\n%2$@" + "value": "%1$lld개의 워크스페이스와 모든 패널이 닫힙니다:\n%2$@" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "このペインの %1$lld 個のタブを閉じます:\n%2$@" + "value": "Це закриє %1$lld робочих областей та всі їхні панелі:\n%2$@" } } } }, - "dialog.closePane.title": { + "dialog.closeWorkspaces.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Close pane?" + "value": "Close workspaces?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペインを閉じますか?" + "value": "ワークスペースを閉じますか?" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "워크스페이스를 닫으시겠습니까?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Закрити робочі області?" } } } }, - "dialog.closePinnedWorkspace.message": { + "dialog.closeWorkspacesWindow.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This workspace is pinned. Closing it will close the workspace and all of its panels." + "value": "This will close the current window, its %1$lld workspaces, and all of their panels:\n%2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このワークスペースはピン留めされています。閉じると、このワークスペースとその中のすべてのパネルが閉じます。" + "value": "現在のウィンドウと、その %1$lld 個のワークスペースと、それぞれのすべてのパネルを閉じます:\n%2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 워크스페이스는 고정되어 있습니다. 닫으면 워크스페이스와 모든 패널이 닫힙니다." + "value": "현재 윈도우, %1$lld개의 워크스페이스 및 모든 패널이 닫힙니다:\n%2$@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ця робоча область закріплена. Закриття видалить робочу область та всі її панелі." + "value": "Це закриє поточне вікно, його %1$lld робочих областей та всі їхні панелі:\n%2$@" } } } }, - "dialog.closePinnedWorkspace.title": { + "dialog.cmuxConfig.confirmCommand.cancel": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Close pinned workspace?" + "value": "إلغاء" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "ピン留めされたワークスペースを閉じますか?" + "value": "Otkaži" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "고정된 워크스페이스를 닫으시겠습니까?" + "value": "Annuller" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Закрити закріплену робочу область?" + "value": "Abbrechen" } - } - } - }, - "dialog.closeTab.cancel": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", "value": "Cancel" } }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cancelar" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Annuler" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Annulla" + } + }, "ja": { "stringUnit": { "state": "translated", @@ -77132,5768 +78836,5809 @@ "value": "취소" } }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Avbryt" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Anuluj" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Cancelar" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отмена" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ยกเลิก" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "İptal" + } + }, "uk": { "stringUnit": { "state": "translated", "value": "Скасувати" } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "取消" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "取消" + } } } }, - "dialog.closeTab.close": { + "dialog.cmuxConfig.confirmCommand.messageWithCommand": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This project action comes from:\n\n%@\n\nIt will run:\n\n%@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このプロジェクトアクションは次の設定から読み込まれました:\n\n%@\n\n実行内容:\n\n%@" + } + } + } + }, + "dialog.cmuxConfig.confirmCommand.run": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق" + "value": "تشغيل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori" + "value": "Pokreni" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk" + "value": "Kør" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schließen" + "value": "Ausführen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close" + "value": "Run Once" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar" + "value": "Ejecutar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer" + "value": "Exécuter" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudi" + "value": "Esegui" } }, "ja": { "stringUnit": { "state": "translated", - "value": "閉じる" + "value": "1回のみ実行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "닫기" + "value": "실행" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukk" + "value": "Kjør" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknij" + "value": "Uruchom" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar" + "value": "Executar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть" + "value": "Выполнить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "รัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kapat" + "value": "Çalıştır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити" + "value": "Виконати" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "运行" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "執行" } } } }, - "dialog.closeTab.message": { + "dialog.cmuxConfig.confirmCommand.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سيؤدي هذا إلى إغلاق اللسان الحالي." + "value": "تشغيل الأمر" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovo će zatvoriti trenutni tab." + "value": "Pokreni naredbu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Dette lukker den aktuelle fane." + "value": "Kør kommando" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dadurch wird der aktuelle Tab geschlossen." + "value": "Befehl ausführen" } }, "en": { "stringUnit": { "state": "translated", - "value": "This will close the current tab." + "value": "Run Project Action?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esto cerrará la pestaña actual." + "value": "Ejecutar comando" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cela fermera l'onglet actuel." + "value": "Exécuter la commande" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa operazione chiuderà la scheda corrente." + "value": "Esegui comando" } }, "ja": { "stringUnit": { "state": "translated", - "value": "現在のタブを閉じます。" + "value": "プロジェクトアクションを実行しますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "현재 탭을 닫습니다." + "value": "명령 실행" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dette vil lukke den gjeldende fanen." + "value": "Kjør kommando" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spowoduje to zamknięcie bieżącej karty." + "value": "Uruchom polecenie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Isto fechará a aba atual." + "value": "Executar comando" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Текущая вкладка будет закрыта." + "value": "Выполнить команду" } }, "th": { "stringUnit": { "state": "translated", - "value": "การดำเนินการนี้จะปิดแท็บปัจจุบัน" + "value": "รันคำสั่ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu, geçerli sekmeyi kapatacak." + "value": "Komutu Çalıştır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Це закриє поточну вкладку." + "value": "Виконати команду" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这将关闭当前标签页。" + "value": "运行命令" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這將關閉目前的標籤頁。" + "value": "執行命令" } } } }, - "dialog.closeTab.messageNamed": { + "dialog.cmuxConfig.confirmCommand.trustAndRun": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This will close \"%@\"." + "value": "Trust and Run" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「%@」を閉じます。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "\"%@\"을(를) 닫습니다." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Це закриє \"%@\"." + "value": "信頼して実行" } } } }, - "dialog.closeTab.title": { + "dialog.cmuxConfig.confirmRestart.cancel": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق اللسان؟" + "value": "إلغاء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvoriti tab?" + "value": "Otkaži" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk fane?" + "value": "Annuller" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab schließen?" + "value": "Abbrechen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close tab?" + "value": "Cancel" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Cerrar pestaña?" + "value": "Cancelar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer l'onglet ?" + "value": "Annuler" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudere la scheda?" + "value": "Annulla" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブを閉じますか?" + "value": "キャンセル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭을 닫으시겠습니까?" + "value": "취소" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukke fane?" + "value": "Avbryt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknąć kartę?" + "value": "Anuluj" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar aba?" + "value": "Cancelar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть вкладку?" + "value": "Отмена" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดแท็บหรือไม่?" + "value": "ยกเลิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekme kapatılsın mı?" + "value": "İptal" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити вкладку?" + "value": "Скасувати" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭标签页?" + "value": "取消" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要關閉標籤頁嗎?" + "value": "取消" } } } }, - "dialog.closeWindow.message": { + "dialog.cmuxConfig.confirmRestart.message": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "This will close the current window and all of its workspaces." + "value": "مساحة العمل بهذا الاسم موجودة بالفعل. هل تريد إغلاقها وإنشاء واحدة جديدة؟" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "現在のウィンドウとそのすべてのワークスペースを閉じます。" + "value": "Radni prostor s ovim imenom već postoji. Zatvoriti ga i kreirati novi?" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "현재 윈도우와 모든 워크스페이스가 닫힙니다." + "value": "Et arbejdsområde med dette navn eksisterer allerede. Luk det og opret et nyt?" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Це закриє поточне вікно та всі його робочі області." + "value": "Ein Arbeitsbereich mit diesem Namen existiert bereits. Schließen und neu erstellen?" } - } - } - }, - "dialog.closeWindow.title": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Close window?" + "value": "A workspace with this name already exists. Close it and create a new one?" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Ya existe un espacio de trabajo con este nombre. ¿Cerrarlo y crear uno nuevo?" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Un espace de travail portant ce nom existe déjà. Le fermer et en créer un nouveau ?" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Esiste già un'area di lavoro con questo nome. Chiuderla e crearne una nuova?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウィンドウを閉じますか?" + "value": "この名前のワークスペースは既に存在します。閉じて新しく作成しますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "윈도우를 닫으시겠습니까?" + "value": "같은 이름의 워크스페이스가 이미 있습니다. 닫고 새로 만드시겠습니까?" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Et arbeidsområde med dette navnet finnes allerede. Lukke det og opprette et nytt?" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Przestrzeń robocza o tej nazwie już istnieje. Zamknąć ją i utworzyć nową?" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Um espaço de trabalho com este nome já existe. Fechar e criar um novo?" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Рабочая область с таким именем уже существует. Закрыть её и создать новую?" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "พื้นที่ทำงานที่มีชื่อนี้มีอยู่แล้ว ปิดและสร้างใหม่หรือไม่?" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu adda bir çalışma alanı zaten var. Kapatıp yenisini oluşturulsun mu?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити вікно?" + "value": "Робоча область з такою назвою вже існує. Закрити її та створити нову?" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "同名工作区已存在。关闭并新建吗?" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "同名工作區已存在。關閉並新建嗎?" } } } }, - "dialog.closeWorkspace.message": { + "dialog.cmuxConfig.confirmRestart.recreate": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سيؤدي هذا إلى إغلاق مساحة العمل وجميع لوحاتها." + "value": "إعادة إنشاء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovo će zatvoriti radni prostor i sve njegove panele." + "value": "Ponovo kreiraj" } }, "da": { "stringUnit": { "state": "translated", - "value": "Dette lukker arbejdsområdet og alle dets paneler." + "value": "Genskab" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dadurch werden der Arbeitsbereich und alle zugehörigen Bereiche geschlossen." + "value": "Neu erstellen" } }, "en": { "stringUnit": { "state": "translated", - "value": "This will close the workspace and all of its panels." + "value": "Recreate" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esto cerrará el espacio de trabajo y todos sus paneles." + "value": "Recrear" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cela fermera l'espace de travail et tous ses panneaux." + "value": "Recréer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa operazione chiuderà l'area di lavoro e tutti i suoi pannelli." + "value": "Ricrea" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースとそのすべてのパネルを閉じます。" + "value": "再作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간과 모든 패널을 닫습니다." + "value": "다시 만들기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dette vil lukke arbeidsområdet og alle panelene." + "value": "Opprett på nytt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spowoduje to zamknięcie przestrzeni roboczej i wszystkich jej paneli." + "value": "Utwórz ponownie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Isto fechará a área de trabalho e todos os seus painéis." + "value": "Recriar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочее пространство и все его панели будут закрыты." + "value": "Пересоздать" } }, "th": { "stringUnit": { "state": "translated", - "value": "การดำเนินการนี้จะปิดเวิร์กสเปซและแผงทั้งหมด" + "value": "สร้างใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu, çalışma alanını ve tüm panellerini kapatacak." + "value": "Yeniden Oluştur" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Це закриє робочу область та всі її панелі." + "value": "Створити заново" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这将关闭工作区及其所有面板。" + "value": "重新创建" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這將關閉工作區及其所有面板。" + "value": "重新建立" } } } }, - "dialog.closeWorkspace.title": { + "dialog.cmuxConfig.confirmRestart.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إغلاق مساحة العمل؟" + "value": "مساحة العمل موجودة بالفعل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvoriti radni prostor?" + "value": "Radni prostor već postoji" } }, "da": { "stringUnit": { "state": "translated", - "value": "Luk arbejdsområde?" + "value": "Arbejdsområdet eksisterer allerede" } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich schließen?" + "value": "Arbeitsbereich existiert bereits" } }, "en": { "stringUnit": { "state": "translated", - "value": "Close workspace?" + "value": "Workspace Already Exists" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Cerrar espacio de trabajo?" + "value": "El espacio de trabajo ya existe" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer l'espace de travail ?" + "value": "L'espace de travail existe déjà" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiudere l'area di lavoro?" + "value": "L'area di lavoro esiste già" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを閉じますか?" + "value": "ワークスペースは既に存在します" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간을 닫으시겠습니까?" + "value": "워크스페이스가 이미 존재합니다" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lukke arbeidsområde?" + "value": "Arbeidsområdet finnes allerede" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zamknąć przestrzeń roboczą?" + "value": "Przestrzeń robocza już istnieje" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Fechar área de trabalho?" + "value": "O espaço de trabalho já existe" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Закрыть рабочее пространство?" + "value": "Рабочая область уже существует" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดเวิร์กสเปซหรือไม่?" + "value": "พื้นที่ทำงานมีอยู่แล้ว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma alanı kapatılsın mı?" + "value": "Çalışma Alanı Zaten Var" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Закрити робочу область?" + "value": "Робоча область вже існує" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭工作区?" + "value": "工作区已存在" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要關閉工作區嗎?" + "value": "工作區已存在" } } } }, - "dialog.closeWorkspaces.message": { + "dialog.cmuxConfig.disclosure.cwd": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This will close %1$lld workspaces and all of their panels:\n%2$@" + "value": "cwd: %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$lld 個のワークスペースと、それぞれのすべてのパネルを閉じます:\n%2$@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld개의 워크스페이스와 모든 패널이 닫힙니다:\n%2$@" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Це закриє %1$lld робочих областей та всі їхні панелі:\n%2$@" + "value": "作業ディレクトリ: %@" } } } }, - "dialog.closeWorkspaces.title": { + "dialog.cmuxConfig.disclosure.cwdCommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Close workspaces?" + "value": "cwd %1$@: %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを閉じますか?" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "워크스페이스를 닫으시겠습니까?" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Закрити робочі області?" + "value": "作業ディレクトリ %1$@: %2$@" } } } }, - "dialog.closeWorkspacesWindow.message": { + "dialog.cmuxConfig.disclosure.url": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This will close the current window, its %1$lld workspaces, and all of their panels:\n%2$@" + "value": "url: %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "現在のウィンドウと、その %1$lld 個のワークスペースと、それぞれのすべてのパネルを閉じます:\n%2$@" + "value": "URL: %@" } - }, - "ko": { + } + } + }, + "dialog.defaultTerminal.setFailed.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "현재 윈도우, %1$lld개의 워크스페이스 및 모든 패널이 닫힙니다:\n%2$@" + "value": "Could Not Set Default Terminal" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Це закриє поточне вікно, його %1$lld робочих областей та всі їхні панелі:\n%2$@" + "value": "デフォルトターミナルに設定できませんでした" } } } }, - "dialog.cmuxConfig.confirmCommand.cancel": { + "dialog.deleteGroup.confirm": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "حذف" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkaži" + "value": "Obriši" } }, "da": { "stringUnit": { "state": "translated", - "value": "Annuller" + "value": "Slet" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Löschen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Delete" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Eliminar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Supprimer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Annulla" + "value": "Elimina" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "削除" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Delete" } }, "ko": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "삭제" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avbryt" + "value": "Slett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Anuluj" + "value": "Usuń" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Excluir" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отмена" + "value": "Удалить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยกเลิก" + "value": "ลบ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İptal" + "value": "Sil" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скасувати" + "value": "Видалити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "删除" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消" - } - } - } - }, - "dialog.cmuxConfig.confirmCommand.messageWithCommand": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This project action comes from:\n\n%@\n\nIt will run:\n\n%@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このプロジェクトアクションは次の設定から読み込まれました:\n\n%@\n\n実行内容:\n\n%@" + "value": "刪除" } } } }, - "dialog.cmuxConfig.confirmCommand.run": { + "dialog.deleteGroup.message.lone": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تشغيل" + "value": "هل تريد حذف المجموعة «%@» وإغلاق مساحة العمل التابعة لها؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pokreni" + "value": "Obrisati grupu „%@“ i zatvoriti njen radni prostor?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kør" + "value": "Slet gruppen “%@” og luk dens arbejdsområde?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ausführen" + "value": "Gruppe „%@“ löschen und ihren Arbeitsbereich schließen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "Run Once" + "value": "Delete the group “%@” and close its workspace?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ejecutar" + "value": "¿Eliminar el grupo «%@» y cerrar su espacio de trabajo?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Exécuter" + "value": "Supprimer le groupe « %@ » et fermer son espace de travail ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Esegui" + "value": "Eliminare il gruppo «%@» e chiudere la sua area di lavoro?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "1回のみ実行" + "value": "グループ「%@」を削除してワークスペースを閉じますか?" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Delete the group “%@” and close its workspace?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "실행" + "value": "그룹 “%@”을(를) 삭제하고 해당 작업 공간을 닫을까요?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kjør" + "value": "Slette gruppen «%@» og lukke arbeidsområdet?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uruchom" + "value": "Usunąć grupę „%@” i zamknąć jej przestrzeń?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Executar" + "value": "Excluir o grupo “%@” e fechar sua área de trabalho?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выполнить" + "value": "Удалить группу «%@» и закрыть её рабочее пространство?" } }, "th": { "stringUnit": { "state": "translated", - "value": "รัน" + "value": "ลบกลุ่ม “%@” และปิดเวิร์กสเปซในนั้นใช่ไหม?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalıştır" + "value": "“%@” grubunu silip içindeki çalışma alanını kapatayım mı?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виконати" + "value": "Видалити групу «%@» та закрити її робочу область?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "运行" + "value": "删除分组「%@」并关闭其工作区?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "執行" + "value": "刪除群組「%@」並關閉其工作區?" } } } }, - "dialog.cmuxConfig.confirmCommand.title": { + "dialog.deleteGroup.message.many": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تشغيل الأمر" + "value": "هل تريد حذف المجموعة «%1$@» وإغلاق %2$lld مساحات عمل تابعة لها؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pokreni naredbu" + "value": "Obrisati grupu „%1$@“ i zatvoriti %2$lld radnih prostora u njoj?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kør kommando" + "value": "Slet gruppen “%1$@” og luk dens %2$lld arbejdsområder?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Befehl ausführen" + "value": "Gruppe „%1$@“ löschen und ihre %2$lld Arbeitsbereiche schließen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "Run Project Action?" + "value": "Delete the group “%1$@” and close its %2$lld workspaces?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ejecutar comando" + "value": "¿Eliminar el grupo «%1$@» y cerrar sus %2$lld espacios de trabajo?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Exécuter la commande" + "value": "Supprimer le groupe « %1$@ » et fermer ses %2$lld espaces de travail ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Esegui comando" + "value": "Eliminare il gruppo «%1$@» e chiudere le sue %2$lld aree di lavoro?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "プロジェクトアクションを実行しますか?" + "value": "グループ「%1$@」を削除して %2$lld 個のワークスペースを閉じますか?" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Delete the group “%1$@” and close its %2$lld workspaces?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "명령 실행" + "value": "그룹 “%1$@”을(를) 삭제하고 작업 공간 %2$lld개를 닫을까요?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kjør kommando" + "value": "Slette gruppen «%1$@» og lukke dens %2$lld arbeidsområder?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uruchom polecenie" + "value": "Usunąć grupę „%1$@” i zamknąć jej %2$lld przestrzeni?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Executar comando" + "value": "Excluir o grupo “%1$@” e fechar suas %2$lld áreas de trabalho?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выполнить команду" + "value": "Удалить группу «%1$@» и закрыть её %2$lld рабочих пространств?" } }, "th": { "stringUnit": { "state": "translated", - "value": "รันคำสั่ง" + "value": "ลบกลุ่ม “%1$@” และปิดเวิร์กสเปซ %2$lld รายการในนั้นใช่ไหม?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Komutu Çalıştır" + "value": "“%1$@” grubunu silip içindeki %2$lld çalışma alanını kapatayım mı?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виконати команду" + "value": "Видалити групу «%1$@» та закрити її %2$lld робочих областей?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "运行命令" + "value": "删除分组「%1$@」并关闭其中的 %2$lld 个工作区?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "執行命令" - } - } - } - }, - "dialog.cmuxConfig.confirmCommand.trustAndRun": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Trust and Run" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "信頼して実行" + "value": "刪除群組「%1$@」並關閉其中的 %2$lld 個工作區?" } } } }, - "dialog.cmuxConfig.confirmRestart.cancel": { + "dialog.deleteGroup.message.one": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "هل تريد حذف المجموعة «%@» وإغلاق مساحتي العمل التابعتين لها؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkaži" + "value": "Obrisati grupu „%@“ i zatvoriti njena 2 radna prostora?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Annuller" + "value": "Slet gruppen “%@” og luk dens 2 arbejdsområder?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Gruppe „%@“ löschen und ihre 2 Arbeitsbereiche schließen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Delete the group “%@” and close its 2 workspaces?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "¿Eliminar el grupo «%@» y cerrar sus 2 espacios de trabajo?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Supprimer le groupe « %@ » et fermer ses 2 espaces de travail ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Annulla" + "value": "Eliminare il gruppo «%@» e chiudere le sue 2 aree di lavoro?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "グループ「%@」を削除して 2 個のワークスペースを閉じますか?" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Delete the group “%@” and close its 2 workspaces?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "그룹 “%@”을(를) 삭제하고 작업 공간 2개를 닫을까요?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avbryt" + "value": "Slette gruppen «%@» og lukke dens 2 arbeidsområder?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Anuluj" + "value": "Usunąć grupę „%@” i zamknąć jej 2 przestrzenie?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Excluir o grupo “%@” e fechar suas 2 áreas de trabalho?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Отмена" + "value": "Удалить группу «%@» и закрыть её 2 рабочих пространства?" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยกเลิก" + "value": "ลบกลุ่ม “%@” และปิดเวิร์กสเปซ 2 รายการในนั้นใช่ไหม?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İptal" + "value": "“%@” grubunu silip içindeki 2 çalışma alanını kapatayım mı?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скасувати" + "value": "Видалити групу «%@» та закрити її 2 робочі області?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "删除分组「%@」并关闭其中的 2 个工作区?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "刪除群組「%@」並關閉其中的 2 個工作區?" } } } }, - "dialog.cmuxConfig.confirmRestart.message": { + "dialog.deleteGroup.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل بهذا الاسم موجودة بالفعل. هل تريد إغلاقها وإنشاء واحدة جديدة؟" + "value": "هل تريد حذف هذه المجموعة؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor s ovim imenom već postoji. Zatvoriti ga i kreirati novi?" + "value": "Obrisati ovu grupu?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Et arbejdsområde med dette navn eksisterer allerede. Luk det og opret et nyt?" + "value": "Slet denne gruppe?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Arbeitsbereich mit diesem Namen existiert bereits. Schließen und neu erstellen?" + "value": "Diese Gruppe löschen?" } }, "en": { "stringUnit": { "state": "translated", - "value": "A workspace with this name already exists. Close it and create a new one?" + "value": "Delete this group?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ya existe un espacio de trabajo con este nombre. ¿Cerrarlo y crear uno nuevo?" + "value": "¿Eliminar este grupo?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un espace de travail portant ce nom existe déjà. Le fermer et en créer un nouveau ?" + "value": "Supprimer ce groupe ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Esiste già un'area di lavoro con questo nome. Chiuderla e crearne una nuova?" + "value": "Eliminare questo gruppo?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "この名前のワークスペースは既に存在します。閉じて新しく作成しますか?" + "value": "このグループを削除しますか?" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "Delete this group?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "같은 이름의 워크스페이스가 이미 있습니다. 닫고 새로 만드시겠습니까?" + "value": "이 그룹을 삭제할까요?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Et arbeidsområde med dette navnet finnes allerede. Lukke det og opprette et nytt?" + "value": "Slette denne gruppen?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza o tej nazwie już istnieje. Zamknąć ją i utworzyć nową?" + "value": "Usunąć tę grupę?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Um espaço de trabalho com este nome já existe. Fechar e criar um novo?" + "value": "Excluir este grupo?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочая область с таким именем уже существует. Закрыть её и создать новую?" + "value": "Удалить эту группу?" } }, "th": { "stringUnit": { "state": "translated", - "value": "พื้นที่ทำงานที่มีชื่อนี้มีอยู่แล้ว ปิดและสร้างใหม่หรือไม่?" + "value": "ลบกลุ่มนี้ใช่ไหม?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu adda bir çalışma alanı zaten var. Kapatıp yenisini oluşturulsun mu?" + "value": "Bu grup silinsin mi?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область з такою назвою вже існує. Закрити її та створити нову?" + "value": "Видалити цю групу?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "同名工作区已存在。关闭并新建吗?" + "value": "删除此分组?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "同名工作區已存在。關閉並新建嗎?" + "value": "刪除此群組?" } } } }, - "dialog.cmuxConfig.confirmRestart.recreate": { + "dialog.deleteWorkspaceLayout.cancel": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "キャンセル" + } + } + } + }, + "dialog.deleteWorkspaceLayout.delete": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "削除" + } + } + } + }, + "dialog.deleteWorkspaceLayout.failedTitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Couldn't Delete Workspace Layout" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースレイアウトを削除できませんでした" + } + } + } + }, + "dialog.deleteWorkspaceLayout.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Removes “%1$@” from %2$@. Workspaces it already created stay open." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%1$@」を %2$@ から削除します。作成済みのワークスペースはそのまま残ります。" + } + } + } + }, + "dialog.deleteWorkspaceLayout.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete Workspace Layout?" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ワークスペースレイアウトを削除しますか?" + } + } + } + }, + "dialog.dontAskAgain": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Don’t ask again" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "次回から確認しない" + } + } + } + }, + "dialog.dontWarnCmdQ": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة إنشاء" + "value": "عدم التحذير مجددًا عند Cmd+Q" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ponovo kreiraj" + "value": "Ne upozoravaj ponovo za Cmd+Q" } }, "da": { "stringUnit": { "state": "translated", - "value": "Genskab" + "value": "Advar ikke igen for Cmd+Q" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neu erstellen" + "value": "Nicht erneut bei Cmd+Q warnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Recreate" + "value": "Don't warn again for Cmd+Q" } }, "es": { "stringUnit": { "state": "translated", - "value": "Recrear" + "value": "No volver a advertir para Cmd+Q" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Recréer" + "value": "Ne plus avertir pour Cmd+Q" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ricrea" + "value": "Non avvisare più per Cmd+Q" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再作成" + "value": "Cmd+Q の警告を表示しない" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다시 만들기" + "value": "Cmd+Q에 대해 다시 경고하지 않기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Opprett på nytt" + "value": "Ikke advar igjen for Cmd+Q" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Utwórz ponownie" + "value": "Nie ostrzegaj ponownie przy Cmd+Q" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Recriar" + "value": "Não avisar novamente para Cmd+Q" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Пересоздать" + "value": "Больше не предупреждать при Cmd+Q" } }, "th": { "stringUnit": { "state": "translated", - "value": "สร้างใหม่" + "value": "ไม่ต้องเตือนอีกสำหรับ Cmd+Q" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeniden Oluştur" + "value": "Cmd+Q için bir daha uyarma" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Створити заново" + "value": "Більше не попереджувати про Cmd+Q" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重新创建" + "value": "不再提示 Cmd+Q 警告" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新建立" + "value": "不再顯示 Cmd+Q 警告" } } } }, - "dialog.cmuxConfig.confirmRestart.title": { + "dialog.enableNotifications.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل موجودة بالفعل" + "value": "الإشعارات معطلة لـ cmux. قم بتفعيلها في إعدادات النظام لرؤية التنبيهات." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Radni prostor već postoji" + "value": "Obavještenja su onemogućena za cmux. Omogućite ih u Postavkama sistema da biste vidjeli upozorenja." } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområdet eksisterer allerede" + "value": "Notifikationer er deaktiveret for cmux. Aktiver dem i Systemindstillinger for at se advarsler." } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich existiert bereits" + "value": "Benachrichtigungen sind für cmux deaktiviert. Aktivieren Sie sie in den Systemeinstellungen, um Hinweise zu sehen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace Already Exists" + "value": "Notifications are disabled for cmux. Enable them in System Settings to see alerts." } }, "es": { "stringUnit": { "state": "translated", - "value": "El espacio de trabajo ya existe" + "value": "Las notificaciones están desactivadas para cmux. Actívalas en Ajustes del Sistema para ver alertas." } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'espace de travail existe déjà" + "value": "Les notifications sont désactivées pour cmux. Activez-les dans les Réglages Système pour voir les alertes." } }, "it": { "stringUnit": { "state": "translated", - "value": "L'area di lavoro esiste già" + "value": "Le notifiche sono disabilitate per cmux. Abilitale nelle Impostazioni di Sistema per visualizzare gli avvisi." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースは既に存在します" + "value": "cmuxの通知が無効になっています。アラートを表示するにはシステム設定で有効にしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스가 이미 존재합니다" + "value": "cmux에 대한 알림이 비활성화되어 있습니다. 알림을 보려면 시스템 설정에서 활성화하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområdet finnes allerede" + "value": "Varsler er deaktivert for cmux. Aktiver dem i Systeminnstillinger for å se varsler." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przestrzeń robocza już istnieje" + "value": "Powiadomienia są wyłączone dla cmux. Włącz je w Ustawieniach systemowych, aby widzieć alerty." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O espaço de trabalho já existe" + "value": "As notificações estão desativadas para o cmux. Ative-as nos Ajustes do Sistema para ver os alertas." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рабочая область уже существует" + "value": "Уведомления для cmux отключены. Включите их в Системных настройках, чтобы видеть оповещения." } }, "th": { "stringUnit": { "state": "translated", - "value": "พื้นที่ทำงานมีอยู่แล้ว" + "value": "การแจ้งเตือนถูกปิดใช้งานสำหรับ cmux เปิดใช้งานในการตั้งค่าระบบเพื่อดูการแจ้งเตือน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanı Zaten Var" + "value": "cmux için bildirimler devre dışı. Uyarıları görmek için Sistem Ayarları'nda etkinleştirin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Робоча область вже існує" + "value": "Сповіщення для cmux вимкнено. Увімкніть їх у Системних налаштуваннях, щоб бачити повідомлення." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区已存在" + "value": "cmux 的通知已被禁用。请在系统设置中启用通知以接收提醒。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區已存在" - } - } - } - }, - "dialog.cmuxConfig.disclosure.cwd": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "cwd: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "作業ディレクトリ: %@" - } - } - } - }, - "dialog.cmuxConfig.disclosure.cwdCommand": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "cwd %1$@: %2$@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "作業ディレクトリ %1$@: %2$@" - } - } - } - }, - "dialog.cmuxConfig.disclosure.url": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "url: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "URL: %@" - } - } - } - }, - "dialog.defaultTerminal.setFailed.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Could Not Set Default Terminal" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "デフォルトターミナルに設定できませんでした" + "value": "cmux 的通知已停用。請在「系統設定」中啟用,以接收提示。" } } } }, - "dialog.deleteGroup.confirm": { + "dialog.enableNotifications.notNow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "حذف" + "value": "ليس الآن" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obriši" + "value": "Ne sada" } }, "da": { "stringUnit": { "state": "translated", - "value": "Slet" + "value": "Ikke nu" } }, "de": { "stringUnit": { "state": "translated", - "value": "Löschen" + "value": "Nicht jetzt" } }, "en": { "stringUnit": { "state": "translated", - "value": "Delete" + "value": "Not Now" } }, "es": { "stringUnit": { "state": "translated", - "value": "Eliminar" + "value": "Ahora no" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimer" + "value": "Pas maintenant" } }, "it": { "stringUnit": { "state": "translated", - "value": "Elimina" + "value": "Non ora" } }, "ja": { "stringUnit": { "state": "translated", - "value": "削除" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Delete" + "value": "今はしない" } }, "ko": { "stringUnit": { "state": "translated", - "value": "삭제" + "value": "나중에" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slett" + "value": "Ikke nå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usuń" + "value": "Nie teraz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Excluir" + "value": "Agora Não" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалить" + "value": "Не сейчас" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลบ" + "value": "ไม่ใช่ตอนนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sil" + "value": "Şimdi Değil" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Видалити" + "value": "Не зараз" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "删除" + "value": "以后再说" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "刪除" + "value": "現在不要" } } } }, - "dialog.deleteGroup.message.lone": { + "dialog.enableNotifications.openSettings": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد حذف المجموعة «%@» وإغلاق مساحة العمل التابعة لها؟" + "value": "فتح الإعدادات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obrisati grupu „%@“ i zatvoriti njen radni prostor?" + "value": "Otvori postavke" } }, "da": { "stringUnit": { "state": "translated", - "value": "Slet gruppen “%@” og luk dens arbejdsområde?" + "value": "Åbn indstillinger" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gruppe „%@“ löschen und ihren Arbeitsbereich schließen?" + "value": "Einstellungen öffnen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Delete the group “%@” and close its workspace?" + "value": "Open Settings" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Eliminar el grupo «%@» y cerrar su espacio de trabajo?" + "value": "Abrir Ajustes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimer le groupe « %@ » et fermer son espace de travail ?" + "value": "Ouvrir les réglages" } }, "it": { "stringUnit": { "state": "translated", - "value": "Eliminare il gruppo «%@» e chiudere la sua area di lavoro?" + "value": "Apri impostazioni" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グループ「%@」を削除してワークスペースを閉じますか?" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Delete the group “%@” and close its workspace?" + "value": "設定を開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그룹 “%@”을(를) 삭제하고 해당 작업 공간을 닫을까요?" + "value": "설정 열기" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slette gruppen «%@» og lukke arbeidsområdet?" + "value": "Åpne innstillinger" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usunąć grupę „%@” i zamknąć jej przestrzeń?" + "value": "Otwórz ustawienia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Excluir o grupo “%@” e fechar sua área de trabalho?" + "value": "Abrir Ajustes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалить группу «%@» и закрыть её рабочее пространство?" + "value": "Открыть настройки" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลบกลุ่ม “%@” และปิดเวิร์กสเปซในนั้นใช่ไหม?" + "value": "เปิดการตั้งค่า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "“%@” grubunu silip içindeki çalışma alanını kapatayım mı?" + "value": "Ayarları Aç" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Видалити групу «%@» та закрити її робочу область?" + "value": "Відкрити налаштування" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "删除分组「%@」并关闭其工作区?" + "value": "打开设置" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "刪除群組「%@」並關閉其工作區?" + "value": "開啟設定" } } } }, - "dialog.deleteGroup.message.many": { + "dialog.enableNotifications.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد حذف المجموعة «%1$@» وإغلاق %2$lld مساحات عمل تابعة لها؟" + "value": "تفعيل الإشعارات لـ cmux" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obrisati grupu „%1$@“ i zatvoriti %2$lld radnih prostora u njoj?" + "value": "Omogući obavještenja za cmux" } }, "da": { "stringUnit": { "state": "translated", - "value": "Slet gruppen “%1$@” og luk dens %2$lld arbejdsområder?" + "value": "Aktiver notifikationer for cmux" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gruppe „%1$@“ löschen und ihre %2$lld Arbeitsbereiche schließen?" + "value": "Benachrichtigungen für cmux aktivieren" } }, "en": { "stringUnit": { "state": "translated", - "value": "Delete the group “%1$@” and close its %2$lld workspaces?" + "value": "Enable Notifications for cmux" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Eliminar el grupo «%1$@» y cerrar sus %2$lld espacios de trabajo?" + "value": "Activar notificaciones para cmux" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimer le groupe « %1$@ » et fermer ses %2$lld espaces de travail ?" + "value": "Activer les notifications pour cmux" } }, "it": { "stringUnit": { "state": "translated", - "value": "Eliminare il gruppo «%1$@» e chiudere le sue %2$lld aree di lavoro?" + "value": "Abilita notifiche per cmux" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グループ「%1$@」を削除して %2$lld 個のワークスペースを閉じますか?" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Delete the group “%1$@” and close its %2$lld workspaces?" + "value": "cmuxの通知を有効にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그룹 “%1$@”을(를) 삭제하고 작업 공간 %2$lld개를 닫을까요?" + "value": "cmux 알림 활성화" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slette gruppen «%1$@» og lukke dens %2$lld arbeidsområder?" + "value": "Aktiver varsler for cmux" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usunąć grupę „%1$@” i zamknąć jej %2$lld przestrzeni?" + "value": "Włącz powiadomienia dla cmux" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Excluir o grupo “%1$@” e fechar suas %2$lld áreas de trabalho?" + "value": "Ativar Notificações para o cmux" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалить группу «%1$@» и закрыть её %2$lld рабочих пространств?" + "value": "Включить уведомления для cmux" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลบกลุ่ม “%1$@” และปิดเวิร์กสเปซ %2$lld รายการในนั้นใช่ไหม?" + "value": "เปิดใช้งานการแจ้งเตือนสำหรับ cmux" } }, "tr": { "stringUnit": { "state": "translated", - "value": "“%1$@” grubunu silip içindeki %2$lld çalışma alanını kapatayım mı?" + "value": "cmux İçin Bildirimleri Etkinleştir" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Видалити групу «%1$@» та закрити її %2$lld робочих областей?" + "value": "Увімкнути сповіщення для cmux" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "删除分组「%1$@」并关闭其中的 %2$lld 个工作区?" + "value": "启用 cmux 通知" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "刪除群組「%1$@」並關閉其中的 %2$lld 個工作區?" + "value": "為 cmux 啟用通知" } } } }, - "dialog.deleteGroup.message.one": { + "dialog.moveFailed.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد حذف المجموعة «%@» وإغلاق مساحتي العمل التابعتين لها؟" + "value": "لم يتمكن cmux من نقل هذا اللسان إلى الوجهة المحددة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obrisati grupu „%@“ i zatvoriti njena 2 radna prostora?" + "value": "cmux nije mogao premjestiti ovaj tab na odabrano odredište." } }, "da": { "stringUnit": { "state": "translated", - "value": "Slet gruppen “%@” og luk dens 2 arbejdsområder?" + "value": "cmux kunne ikke flytte denne fane til den valgte destination." } }, "de": { "stringUnit": { "state": "translated", - "value": "Gruppe „%@“ löschen und ihre 2 Arbeitsbereiche schließen?" + "value": "cmux konnte diesen Tab nicht zum ausgewählten Ziel verschieben." } }, "en": { "stringUnit": { "state": "translated", - "value": "Delete the group “%@” and close its 2 workspaces?" + "value": "cmux could not move this tab to the selected destination." } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Eliminar el grupo «%@» y cerrar sus 2 espacios de trabajo?" + "value": "cmux no pudo mover esta pestaña al destino seleccionado." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimer le groupe « %@ » et fermer ses 2 espaces de travail ?" + "value": "cmux n'a pas pu déplacer cet onglet vers la destination sélectionnée." } }, "it": { "stringUnit": { "state": "translated", - "value": "Eliminare il gruppo «%@» e chiudere le sue 2 aree di lavoro?" + "value": "cmux non è riuscito a spostare questa scheda nella destinazione selezionata." } }, "ja": { "stringUnit": { "state": "translated", - "value": "グループ「%@」を削除して 2 個のワークスペースを閉じますか?" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Delete the group “%@” and close its 2 workspaces?" + "value": "cmuxはこのタブを選択した移動先に移動できませんでした。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그룹 “%@”을(를) 삭제하고 작업 공간 2개를 닫을까요?" + "value": "cmux에서 이 탭을 선택한 대상으로 이동할 수 없습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slette gruppen «%@» og lukke dens 2 arbeidsområder?" + "value": "cmux kunne ikke flytte denne fanen til den valgte destinasjonen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usunąć grupę „%@” i zamknąć jej 2 przestrzenie?" + "value": "cmux nie mógł przenieść tej karty do wybranego miejsca docelowego." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Excluir o grupo “%@” e fechar suas 2 áreas de trabalho?" + "value": "O cmux não conseguiu mover esta aba para o destino selecionado." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалить группу «%@» и закрыть её 2 рабочих пространства?" + "value": "cmux не удалось переместить эту вкладку в выбранное место назначения." } }, "th": { "stringUnit": { "state": "translated", - "value": "ลบกลุ่ม “%@” และปิดเวิร์กสเปซ 2 รายการในนั้นใช่ไหม?" + "value": "cmux ไม่สามารถย้ายแท็บนี้ไปยังปลายทางที่เลือกได้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "“%@” grubunu silip içindeki 2 çalışma alanını kapatayım mı?" + "value": "cmux bu sekmeyi seçilen hedefe taşıyamadı." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Видалити групу «%@» та закрити її 2 робочі області?" + "value": "cmux не зміг перемістити цю вкладку до вибраного місця призначення." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "删除分组「%@」并关闭其中的 2 个工作区?" + "value": "cmux 无法将此标签页移动到所选目标。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "刪除群組「%@」並關閉其中的 2 個工作區?" + "value": "cmux 無法將此標籤頁移至所選的目的地。" } } } }, - "dialog.deleteGroup.title": { + "dialog.moveFailed.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد حذف هذه المجموعة؟" + "value": "فشل النقل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obrisati ovu grupu?" + "value": "Premještanje nije uspjelo" } }, "da": { "stringUnit": { "state": "translated", - "value": "Slet denne gruppe?" + "value": "Flytning mislykkedes" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diese Gruppe löschen?" + "value": "Verschieben fehlgeschlagen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Delete this group?" + "value": "Move Failed" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Eliminar este grupo?" + "value": "Error al mover" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Supprimer ce groupe ?" + "value": "Échec du déplacement" } }, "it": { "stringUnit": { "state": "translated", - "value": "Eliminare questo gruppo?" + "value": "Spostamento non riuscito" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このグループを削除しますか?" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Delete this group?" + "value": "移動失敗" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 그룹을 삭제할까요?" + "value": "이동 실패" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slette denne gruppen?" + "value": "Flytting mislyktes" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Usunąć tę grupę?" + "value": "Przenoszenie nie powiodło się" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Excluir este grupo?" + "value": "Falha ao Mover" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалить эту группу?" + "value": "Ошибка перемещения" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลบกลุ่มนี้ใช่ไหม?" + "value": "การย้ายล้มเหลว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu grup silinsin mi?" + "value": "Taşıma Başarısız" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Видалити цю групу?" + "value": "Помилка переміщення" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "删除此分组?" + "value": "移动失败" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "刪除此群組?" - } - } - } - }, - "dialog.deleteWorkspaceLayout.cancel": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cancel" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "キャンセル" - } - } - } - }, - "dialog.deleteWorkspaceLayout.delete": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "削除" - } - } - } - }, - "dialog.deleteWorkspaceLayout.failedTitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Couldn't Delete Workspace Layout" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースレイアウトを削除できませんでした" - } - } - } - }, - "dialog.deleteWorkspaceLayout.message": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Removes “%1$@” from %2$@. Workspaces it already created stay open." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "「%1$@」を %2$@ から削除します。作成済みのワークスペースはそのまま残ります。" - } - } - } - }, - "dialog.deleteWorkspaceLayout.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete Workspace Layout?" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ワークスペースレイアウトを削除しますか?" - } - } - } - }, - "dialog.dontAskAgain": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Don’t ask again" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "次回から確認しない" + "value": "移動失敗" } } } }, - "dialog.dontWarnCmdQ": { + "dialog.moveTab.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "عدم التحذير مجددًا عند Cmd+Q" + "value": "اختر وجهة لهذا اللسان." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ne upozoravaj ponovo za Cmd+Q" + "value": "Odaberite odredište za ovaj tab." } }, "da": { "stringUnit": { "state": "translated", - "value": "Advar ikke igen for Cmd+Q" + "value": "Vælg en destination for denne fane." } }, "de": { "stringUnit": { "state": "translated", - "value": "Nicht erneut bei Cmd+Q warnen" + "value": "Wählen Sie ein Ziel für diesen Tab." } }, "en": { "stringUnit": { "state": "translated", - "value": "Don't warn again for Cmd+Q" + "value": "Choose a destination for this tab." } }, "es": { "stringUnit": { "state": "translated", - "value": "No volver a advertir para Cmd+Q" + "value": "Elige un destino para esta pestaña." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ne plus avertir pour Cmd+Q" + "value": "Choisissez une destination pour cet onglet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Non avvisare più per Cmd+Q" + "value": "Scegli una destinazione per questa scheda." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Cmd+Q の警告を表示しない" + "value": "このタブの移動先を選択してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cmd+Q에 대해 다시 경고하지 않기" + "value": "이 탭의 대상을 선택하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ikke advar igjen for Cmd+Q" + "value": "Velg en destinasjon for denne fanen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nie ostrzegaj ponownie przy Cmd+Q" + "value": "Wybierz miejsce docelowe dla tej karty." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Não avisar novamente para Cmd+Q" + "value": "Escolha um destino para esta aba." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Больше не предупреждать при Cmd+Q" + "value": "Выберите место назначения для этой вкладки." } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่ต้องเตือนอีกสำหรับ Cmd+Q" + "value": "เลือกปลายทางสำหรับแท็บนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cmd+Q için bir daha uyarma" + "value": "Bu sekme için bir hedef seçin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Більше не попереджувати про Cmd+Q" + "value": "Виберіть місце призначення для цієї вкладки." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "不再提示 Cmd+Q 警告" + "value": "请为此标签页选择目标位置。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "不再顯示 Cmd+Q 警告" + "value": "選擇此標籤頁的目的地。" } } } }, - "dialog.enableNotifications.message": { + "dialog.moveTab.move": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الإشعارات معطلة لـ cmux. قم بتفعيلها في إعدادات النظام لرؤية التنبيهات." + "value": "نقل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obavještenja su onemogućena za cmux. Omogućite ih u Postavkama sistema da biste vidjeli upozorenja." + "value": "Premjesti" } }, "da": { "stringUnit": { "state": "translated", - "value": "Notifikationer er deaktiveret for cmux. Aktiver dem i Systemindstillinger for at se advarsler." + "value": "Flyt" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen sind für cmux deaktiviert. Aktivieren Sie sie in den Systemeinstellungen, um Hinweise zu sehen." + "value": "Verschieben" } }, "en": { "stringUnit": { "state": "translated", - "value": "Notifications are disabled for cmux. Enable them in System Settings to see alerts." + "value": "Move" } }, "es": { "stringUnit": { "state": "translated", - "value": "Las notificaciones están desactivadas para cmux. Actívalas en Ajustes del Sistema para ver alertas." + "value": "Mover" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les notifications sont désactivées pour cmux. Activez-les dans les Réglages Système pour voir les alertes." + "value": "Déplacer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Le notifiche sono disabilitate per cmux. Abilitale nelle Impostazioni di Sistema per visualizzare gli avvisi." + "value": "Sposta" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmuxの通知が無効になっています。アラートを表示するにはシステム設定で有効にしてください。" + "value": "移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux에 대한 알림이 비활성화되어 있습니다. 알림을 보려면 시스템 설정에서 활성화하세요." + "value": "이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Varsler er deaktivert for cmux. Aktiver dem i Systeminnstillinger for å se varsler." + "value": "Flytt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Powiadomienia są wyłączone dla cmux. Włącz je w Ustawieniach systemowych, aby widzieć alerty." + "value": "Przenieś" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "As notificações estão desativadas para o cmux. Ative-as nos Ajustes do Sistema para ver os alertas." + "value": "Mover" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Уведомления для cmux отключены. Включите их в Системных настройках, чтобы видеть оповещения." + "value": "Переместить" } }, "th": { "stringUnit": { "state": "translated", - "value": "การแจ้งเตือนถูกปิดใช้งานสำหรับ cmux เปิดใช้งานในการตั้งค่าระบบเพื่อดูการแจ้งเตือน" + "value": "ย้าย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux için bildirimler devre dışı. Uyarıları görmek için Sistem Ayarları'nda etkinleştirin." + "value": "Taşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сповіщення для cmux вимкнено. Увімкніть їх у Системних налаштуваннях, щоб бачити повідомлення." + "value": "Перемістити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 的通知已被禁用。请在系统设置中启用通知以接收提醒。" + "value": "移动" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 的通知已停用。請在「系統設定」中啟用,以接收提示。" + "value": "移動" } } } }, - "dialog.enableNotifications.notNow": { + "dialog.moveTab.newWorkspaceCurrentWindow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "ليس الآن" + "value": "مساحة عمل جديدة في النافذة الحالية" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ne sada" + "value": "Novi radni prostor u trenutnom prozoru" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ikke nu" + "value": "Nyt arbejdsområde i nuværende vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nicht jetzt" + "value": "Neuer Arbeitsbereich im aktuellen Fenster" } }, "en": { "stringUnit": { "state": "translated", - "value": "Not Now" + "value": "New Workspace in Current Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ahora no" + "value": "Nuevo espacio de trabajo en la ventana actual" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pas maintenant" + "value": "Nouvel espace de travail dans la fenêtre actuelle" } }, "it": { "stringUnit": { "state": "translated", - "value": "Non ora" + "value": "Nuova area di lavoro nella finestra corrente" } }, "ja": { "stringUnit": { "state": "translated", - "value": "今はしない" + "value": "現在のウインドウの新規ワークスペース" } }, "ko": { "stringUnit": { "state": "translated", - "value": "나중에" + "value": "현재 윈도우의 새 작업 공간" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ikke nå" + "value": "Nytt arbeidsområde i gjeldende vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nie teraz" + "value": "Nowa przestrzeń robocza w bieżącym oknie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Agora Não" + "value": "Nova Área de Trabalho na Janela Atual" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Не сейчас" + "value": "Новое рабочее пространство в текущем окне" } }, "th": { "stringUnit": { "state": "translated", - "value": "ไม่ใช่ตอนนี้" + "value": "เวิร์กสเปซใหม่ในหน้าต่างปัจจุบัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Şimdi Değil" + "value": "Geçerli Pencerede Yeni Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Не зараз" + "value": "Нова робоча область у поточному вікні" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "以后再说" + "value": "当前窗口的新工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "現在不要" + "value": "目前視窗的新工作區" } } } }, - "dialog.enableNotifications.openSettings": { + "dialog.moveTab.selectedWorkspaceNewWindow": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فتح الإعدادات" + "value": "مساحة العمل المحددة في نافذة جديدة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori postavke" + "value": "Odabrani radni prostor u novom prozoru" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn indstillinger" + "value": "Valgt arbejdsområde i nyt vindue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einstellungen öffnen" + "value": "Ausgewählter Arbeitsbereich in neuem Fenster" } }, "en": { "stringUnit": { "state": "translated", - "value": "Open Settings" + "value": "Selected Workspace in New Window" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes" + "value": "Espacio de trabajo seleccionado en nueva ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir les réglages" + "value": "Espace de travail sélectionné dans une nouvelle fenêtre" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri impostazioni" + "value": "Area di lavoro selezionata in una nuova finestra" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定を開く" + "value": "選択したワークスペースを新規ウインドウに" } }, "ko": { "stringUnit": { "state": "translated", - "value": "설정 열기" + "value": "선택한 작업 공간을 새 윈도우로" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne innstillinger" + "value": "Valgt arbeidsområde i nytt vindu" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz ustawienia" + "value": "Wybrana przestrzeń robocza w nowym oknie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes" + "value": "Área de Trabalho Selecionada em Nova Janela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть настройки" + "value": "Выбранное рабочее пространство в новом окне" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดการตั้งค่า" + "value": "เวิร์กสเปซที่เลือกในหน้าต่างใหม่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ayarları Aç" + "value": "Yeni Pencerede Seçili Çalışma Alanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити налаштування" + "value": "Вибрана робоча область у новому вікні" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开设置" + "value": "新窗口中的所选工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟設定" + "value": "所選工作區至新視窗" } } } }, - "dialog.enableNotifications.title": { + "dialog.moveTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "تفعيل الإشعارات لـ cmux" + "value": "نقل اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Omogući obavještenja za cmux" + "value": "Premjesti tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Aktiver notifikationer for cmux" + "value": "Flyt fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen für cmux aktivieren" + "value": "Tab verschieben" } }, "en": { "stringUnit": { "state": "translated", - "value": "Enable Notifications for cmux" + "value": "Move Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Activar notificaciones para cmux" + "value": "Mover pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activer les notifications pour cmux" + "value": "Déplacer l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Abilita notifiche per cmux" + "value": "Sposta scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmuxの通知を有効にする" + "value": "タブの移動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux 알림 활성화" + "value": "탭 이동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Aktiver varsler for cmux" + "value": "Flytt fane" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Włącz powiadomienia dla cmux" + "value": "Przenieś kartę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ativar Notificações para o cmux" + "value": "Mover Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Включить уведомления для cmux" + "value": "Переместить вкладку" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดใช้งานการแจ้งเตือนสำหรับ cmux" + "value": "ย้ายแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux İçin Bildirimleri Etkinleştir" + "value": "Sekmeyi Taşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Увімкнути сповіщення для cmux" + "value": "Перемістити вкладку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "启用 cmux 通知" + "value": "移动标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "為 cmux 啟用通知" + "value": "移動標籤頁" } } } }, - "dialog.moveFailed.message": { + "dialog.newWorkspaceDefault.failedTitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Couldn't Update Default" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "デフォルトを更新できませんでした" + } + } + } + }, + "dialog.quitCmux.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "لم يتمكن cmux من نقل هذا اللسان إلى الوجهة المحددة." + "value": "سيؤدي هذا إلى إغلاق جميع النوافذ ومساحات العمل." } }, "bs": { "stringUnit": { "state": "translated", - "value": "cmux nije mogao premjestiti ovaj tab na odabrano odredište." + "value": "Ovo će zatvoriti sve prozore i radne prostore." } }, "da": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke flytte denne fane til den valgte destination." + "value": "Dette lukker alle vinduer og arbejdsområder." } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte diesen Tab nicht zum ausgewählten Ziel verschieben." + "value": "Dadurch werden alle Fenster und Arbeitsbereiche geschlossen." } }, "en": { "stringUnit": { "state": "translated", - "value": "cmux could not move this tab to the selected destination." + "value": "This will close all windows and workspaces." } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux no pudo mover esta pestaña al destino seleccionado." + "value": "Esto cerrará todas las ventanas y espacios de trabajo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n'a pas pu déplacer cet onglet vers la destination sélectionnée." + "value": "Cela fermera toutes les fenêtres et tous les espaces de travail." } }, "it": { "stringUnit": { "state": "translated", - "value": "cmux non è riuscito a spostare questa scheda nella destinazione selezionata." + "value": "Questa operazione chiuderà tutte le finestre e le aree di lavoro." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmuxはこのタブを選択した移動先に移動できませんでした。" + "value": "すべてのウインドウとワークスペースを閉じます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux에서 이 탭을 선택한 대상으로 이동할 수 없습니다." + "value": "모든 윈도우와 작업 공간을 닫습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke flytte denne fanen til den valgte destinasjonen." + "value": "Dette vil lukke alle vinduer og arbeidsområder." } }, "pl": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł przenieść tej karty do wybranego miejsca docelowego." + "value": "Spowoduje to zamknięcie wszystkich okien i przestrzeni roboczych." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O cmux não conseguiu mover esta aba para o destino selecionado." + "value": "Isto fechará todas as janelas e áreas de trabalho." } }, "ru": { "stringUnit": { "state": "translated", - "value": "cmux не удалось переместить эту вкладку в выбранное место назначения." + "value": "Все окна и рабочие пространства будут закрыты." } }, "th": { "stringUnit": { "state": "translated", - "value": "cmux ไม่สามารถย้ายแท็บนี้ไปยังปลายทางที่เลือกได้" + "value": "การดำเนินการนี้จะปิดหน้าต่างและเวิร์กสเปซทั้งหมด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux bu sekmeyi seçilen hedefe taşıyamadı." + "value": "Bu, tüm pencereleri ve çalışma alanlarını kapatacak." } }, "uk": { "stringUnit": { "state": "translated", - "value": "cmux не зміг перемістити цю вкладку до вибраного місця призначення." + "value": "Це закриє всі вікна та робочі області." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 无法将此标签页移动到所选目标。" + "value": "这将关闭所有窗口和工作区。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 無法將此標籤頁移至所選的目的地。" + "value": "這將關閉所有視窗和工作區。" } } } }, - "dialog.moveFailed.title": { + "dialog.quitCmux.quit": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "فشل النقل" + "value": "إنهاء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Premještanje nije uspjelo" + "value": "Zatvori" } }, "da": { "stringUnit": { "state": "translated", - "value": "Flytning mislykkedes" + "value": "Afslut" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verschieben fehlgeschlagen" + "value": "Beenden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Move Failed" + "value": "Quit" } }, "es": { "stringUnit": { "state": "translated", - "value": "Error al mover" + "value": "Salir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Échec du déplacement" + "value": "Quitter" } }, "it": { "stringUnit": { "state": "translated", - "value": "Spostamento non riuscito" + "value": "Esci" } }, "ja": { "stringUnit": { "state": "translated", - "value": "移動失敗" + "value": "終了" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이동 실패" + "value": "종료" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytting mislyktes" + "value": "Avslutt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenoszenie nie powiodło się" + "value": "Zakończ" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Falha ao Mover" + "value": "Encerrar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ошибка перемещения" + "value": "Завершить" } }, "th": { "stringUnit": { "state": "translated", - "value": "การย้ายล้มเหลว" + "value": "ออก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Taşıma Başarısız" + "value": "Çık" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Помилка переміщення" + "value": "Завершити" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "移动失败" + "value": "退出" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "移動失敗" + "value": "結束" } } } }, - "dialog.moveTab.message": { + "dialog.quitCmux.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اختر وجهة لهذا اللسان." + "value": "إنهاء cmux؟" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odaberite odredište za ovaj tab." + "value": "Zatvoriti cmux?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vælg en destination for denne fane." + "value": "Afslut cmux?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wählen Sie ein Ziel für diesen Tab." + "value": "cmux beenden?" } }, "en": { "stringUnit": { "state": "translated", - "value": "Choose a destination for this tab." + "value": "Quit cmux?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Elige un destino para esta pestaña." + "value": "¿Salir de cmux?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Choisissez une destination pour cet onglet." + "value": "Quitter cmux ?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Scegli una destinazione per questa scheda." + "value": "Uscire da cmux?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このタブの移動先を選択してください。" + "value": "cmux を終了しますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 탭의 대상을 선택하세요." + "value": "cmux를 종료하시겠습니까?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Velg en destinasjon for denne fanen." + "value": "Avslutte cmux?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybierz miejsce docelowe dla tej karty." + "value": "Zakończyć cmux?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Escolha um destino para esta aba." + "value": "Encerrar o cmux?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выберите место назначения для этой вкладки." + "value": "Завершить cmux?" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลือกปลายทางสำหรับแท็บนี้" + "value": "ออกจาก cmux หรือไม่?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sekme için bir hedef seçin." + "value": "cmux'tan çıkılsın mı?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виберіть місце призначення для цієї вкладки." + "value": "Завершити cmux?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请为此标签页选择目标位置。" + "value": "退出 cmux?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選擇此標籤頁的目的地。" + "value": "要結束 cmux 嗎?" } } } }, - "dialog.moveTab.move": { + "dialog.renameTab.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نقل" + "value": "أدخل اسمًا مخصصًا لهذا اللسان." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Premjesti" + "value": "Unesite prilagođeni naziv za ovaj tab." } }, "da": { "stringUnit": { "state": "translated", - "value": "Flyt" + "value": "Indtast et brugerdefineret navn til denne fane." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verschieben" + "value": "Geben Sie einen benutzerdefinierten Namen für diesen Tab ein." } }, "en": { "stringUnit": { "state": "translated", - "value": "Move" + "value": "Enter a custom name for this tab." } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover" + "value": "Introduce un nombre personalizado para esta pestaña." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déplacer" + "value": "Saisissez un nom personnalisé pour cet onglet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Sposta" + "value": "Inserisci un nome personalizzato per questa scheda." } }, "ja": { "stringUnit": { "state": "translated", - "value": "移動" + "value": "このタブのカスタム名を入力してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이동" + "value": "이 탭의 사용자 지정 이름을 입력하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytt" + "value": "Skriv inn et egendefinert navn for denne fanen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenieś" + "value": "Wprowadź własną nazwę dla tej karty." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mover" + "value": "Insira um nome personalizado para esta aba." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переместить" + "value": "Введите пользовательское имя для этой вкладки." } }, "th": { "stringUnit": { "state": "translated", - "value": "ย้าย" + "value": "ป้อนชื่อที่กำหนดเองสำหรับแท็บนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Taşı" + "value": "Bu sekme için özel bir ad girin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемістити" + "value": "Введіть власну назву для цієї вкладки." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "移动" + "value": "请为此标签页输入自定义名称。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "移動" + "value": "為此標籤頁輸入自訂名稱。" } } } }, - "dialog.moveTab.newWorkspaceCurrentWindow": { + "dialog.renameTab.placeholder": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة عمل جديدة في النافذة الحالية" + "value": "اسم اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Novi radni prostor u trenutnom prozoru" + "value": "Naziv taba" } }, "da": { "stringUnit": { "state": "translated", - "value": "Nyt arbejdsområde i nuværende vindue" + "value": "Fanenavn" } }, "de": { "stringUnit": { "state": "translated", - "value": "Neuer Arbeitsbereich im aktuellen Fenster" + "value": "Tab-Name" } }, "en": { "stringUnit": { "state": "translated", - "value": "New Workspace in Current Window" + "value": "Tab name" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo espacio de trabajo en la ventana actual" + "value": "Nombre de pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nouvel espace de travail dans la fenêtre actuelle" + "value": "Nom de l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova area di lavoro nella finestra corrente" + "value": "Nome scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "現在のウインドウの新規ワークスペース" + "value": "タブ名" } }, "ko": { "stringUnit": { "state": "translated", - "value": "현재 윈도우의 새 작업 공간" + "value": "탭 이름" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nytt arbeidsområde i gjeldende vindu" + "value": "Fanenavn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa przestrzeń robocza w bieżącym oknie" + "value": "Nazwa karty" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova Área de Trabalho na Janela Atual" + "value": "Nome da aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новое рабочее пространство в текущем окне" + "value": "Имя вкладки" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซใหม่ในหน้าต่างปัจจุบัน" + "value": "ชื่อแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Geçerli Pencerede Yeni Çalışma Alanı" + "value": "Sekme adı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова робоча область у поточному вікні" + "value": "Назва вкладки" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "当前窗口的新工作区" + "value": "标签页名称" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "目前視窗的新工作區" + "value": "標籤頁名稱" } } } }, - "dialog.moveTab.selectedWorkspaceNewWindow": { + "dialog.renameTab.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "مساحة العمل المحددة في نافذة جديدة" + "value": "إعادة تسمية اللسان" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odabrani radni prostor u novom prozoru" + "value": "Preimenuj tab" } }, "da": { "stringUnit": { "state": "translated", - "value": "Valgt arbejdsområde i nyt vindue" + "value": "Omdøb fane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ausgewählter Arbeitsbereich in neuem Fenster" + "value": "Tab umbenennen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Selected Workspace in New Window" + "value": "Rename Tab" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espacio de trabajo seleccionado en nueva ventana" + "value": "Renombrar pestaña" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Espace de travail sélectionné dans une nouvelle fenêtre" + "value": "Renommer l'onglet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Area di lavoro selezionata in una nuova finestra" + "value": "Rinomina scheda" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択したワークスペースを新規ウインドウに" + "value": "タブの名称変更" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택한 작업 공간을 새 윈도우로" + "value": "탭 이름 변경" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Valgt arbeidsområde i nytt vindu" + "value": "Gi fanen nytt navn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybrana przestrzeń robocza w nowym oknie" + "value": "Zmień nazwę karty" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Área de Trabalho Selecionada em Nova Janela" + "value": "Renomear Aba" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выбранное рабочее пространство в новом окне" + "value": "Переименовать вкладку" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวิร์กสเปซที่เลือกในหน้าต่างใหม่" + "value": "เปลี่ยนชื่อแท็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni Pencerede Seçili Çalışma Alanı" + "value": "Sekmeyi Yeniden Adlandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вибрана робоча область у новому вікні" + "value": "Перейменувати вкладку" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新窗口中的所选工作区" + "value": "重命名标签页" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "所選工作區至新視窗" + "value": "重新命名標籤頁" } } } }, - "dialog.moveTab.title": { + "dialog.renameWorkspace.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "نقل اللسان" + "value": "أدخل اسمًا مخصصًا لمساحة العمل هذه." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Premjesti tab" + "value": "Unesite prilagođeni naziv za ovaj radni prostor." } }, "da": { "stringUnit": { "state": "translated", - "value": "Flyt fane" + "value": "Indtast et brugerdefineret navn til dette arbejdsområde." } }, "de": { "stringUnit": { "state": "translated", - "value": "Tab verschieben" + "value": "Geben Sie einen benutzerdefinierten Namen für diesen Arbeitsbereich ein." } }, "en": { "stringUnit": { "state": "translated", - "value": "Move Tab" + "value": "Enter a custom name for this workspace." } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover pestaña" + "value": "Introduce un nombre personalizado para este espacio de trabajo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déplacer l'onglet" + "value": "Saisissez un nom personnalisé pour cet espace de travail." } }, "it": { "stringUnit": { "state": "translated", - "value": "Sposta scheda" + "value": "Inserisci un nome personalizzato per questa area di lavoro." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブの移動" + "value": "このワークスペースのカスタム名を入力してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭 이동" + "value": "이 작업 공간의 사용자 지정 이름을 입력하세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Flytt fane" + "value": "Skriv inn et egendefinert navn for dette arbeidsområdet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Przenieś kartę" + "value": "Wprowadź własną nazwę dla tej przestrzeni roboczej." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mover Aba" + "value": "Insira um nome personalizado para esta área de trabalho." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переместить вкладку" + "value": "Введите пользовательское имя для этого рабочего пространства." } }, "th": { "stringUnit": { "state": "translated", - "value": "ย้ายแท็บ" + "value": "ป้อนชื่อที่กำหนดเองสำหรับเวิร์กสเปซนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Taşı" + "value": "Bu çalışma alanı için özel bir ad girin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перемістити вкладку" + "value": "Введіть власну назву для цієї робочої області." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "移动标签页" + "value": "请为此工作区输入自定义名称。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "移動標籤頁" - } - } - } - }, - "dialog.newWorkspaceDefault.failedTitle": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Couldn't Update Default" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "デフォルトを更新できませんでした" + "value": "為此工作區輸入自訂名稱。" } } } }, - "dialog.quitCmux.message": { + "dialog.renameWorkspace.placeholder": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "سيؤدي هذا إلى إغلاق جميع النوافذ ومساحات العمل." + "value": "اسم مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovo će zatvoriti sve prozore i radne prostore." + "value": "Naziv radnog prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Dette lukker alle vinduer og arbejdsområder." + "value": "Arbejdsområdenavn" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dadurch werden alle Fenster und Arbeitsbereiche geschlossen." + "value": "Name des Arbeitsbereichs" } }, "en": { "stringUnit": { "state": "translated", - "value": "This will close all windows and workspaces." + "value": "Workspace name" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esto cerrará todas las ventanas y espacios de trabajo." + "value": "Nombre del espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cela fermera toutes les fenêtres et tous les espaces de travail." + "value": "Nom de l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa operazione chiuderà tutte le finestre e le aree di lavoro." + "value": "Nome area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "すべてのウインドウとワークスペースを閉じます。" + "value": "ワークスペース名" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 윈도우와 작업 공간을 닫습니다." + "value": "작업 공간 이름" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dette vil lukke alle vinduer og arbeidsområder." + "value": "Arbeidsområdenavn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spowoduje to zamknięcie wszystkich okien i przestrzeni roboczych." + "value": "Nazwa przestrzeni roboczej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Isto fechará todas as janelas e áreas de trabalho." + "value": "Nome da área de trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Все окна и рабочие пространства будут закрыты." + "value": "Имя рабочего пространства" } }, "th": { "stringUnit": { "state": "translated", - "value": "การดำเนินการนี้จะปิดหน้าต่างและเวิร์กสเปซทั้งหมด" + "value": "ชื่อเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu, tüm pencereleri ve çalışma alanlarını kapatacak." + "value": "Çalışma alanı adı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Це закриє всі вікна та робочі області." + "value": "Назва робочої області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这将关闭所有窗口和工作区。" + "value": "工作区名称" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這將關閉所有視窗和工作區。" + "value": "工作區名稱" } } } }, - "dialog.quitCmux.quit": { + "dialog.renameWorkspace.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إنهاء" + "value": "إعادة تسمية مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvori" + "value": "Preimenuj radni prostor" } }, "da": { "stringUnit": { "state": "translated", - "value": "Afslut" + "value": "Omdøb arbejdsområde" } }, "de": { "stringUnit": { "state": "translated", - "value": "Beenden" + "value": "Arbeitsbereich umbenennen" } }, "en": { "stringUnit": { "state": "translated", - "value": "Quit" + "value": "Rename Workspace" } }, "es": { "stringUnit": { "state": "translated", - "value": "Salir" + "value": "Renombrar espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Quitter" + "value": "Renommer l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Esci" + "value": "Rinomina area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "終了" + "value": "ワークスペースの名称変更" } }, "ko": { "stringUnit": { "state": "translated", - "value": "종료" + "value": "작업 공간 이름 변경" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avslutt" + "value": "Gi arbeidsområdet nytt navn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zakończ" + "value": "Zmień nazwę przestrzeni roboczej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Encerrar" + "value": "Renomear Área de Trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Завершить" + "value": "Переименовать рабочее пространство" } }, "th": { "stringUnit": { "state": "translated", - "value": "ออก" + "value": "เปลี่ยนชื่อเวิร์กสเปซ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çık" + "value": "Çalışma Alanını Yeniden Adlandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Завершити" + "value": "Перейменувати робочу область" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "退出" + "value": "重命名工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "結束" + "value": "重新命名工作區" } } } }, - "dialog.quitCmux.title": { + "dialog.saveWorkspaceLayout.cancel": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "キャンセル" + } + } + } + }, + "dialog.saveWorkspaceLayout.commandTooLongMessage": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إنهاء cmux؟" + "value": "أمر واحد أو أكثر من الأوامر الملتقطة أطول من %lld بايت UTF-8 ولا يمكن إعادة تشغيلها بشكل موثوق من تخطيط محفوظ. اختصرها قبل الحفظ." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zatvoriti cmux?" + "value": "Jedna ili više snimljenih komandi duže su od %lld UTF-8 bajtova i ne mogu se pouzdano ponovo pokrenuti iz spremljenog rasporeda. Skratite ih prije spremanja." } }, "da": { "stringUnit": { "state": "translated", - "value": "Afslut cmux?" + "value": "En eller flere registrerede kommandoer er længere end %lld UTF-8-byte og kan ikke afspilles pålideligt fra et gemt layout. Gør dem kortere, før du gemmer." } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux beenden?" + "value": "Ein oder mehrere erfasste Befehle sind länger als %lld UTF-8-Bytes und können aus einem gespeicherten Layout nicht zuverlässig erneut ausgeführt werden. Kürze sie vor dem Speichern." } }, "en": { "stringUnit": { "state": "translated", - "value": "Quit cmux?" + "value": "One or more captured commands are longer than %lld UTF-8 bytes and cannot be replayed reliably from a saved layout. Shorten them before saving." } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Salir de cmux?" + "value": "Uno o más comandos capturados superan los %lld bytes UTF-8 y no pueden reproducirse de forma fiable desde un diseño guardado. Acórtalos antes de guardar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Quitter cmux ?" + "value": "Une ou plusieurs commandes capturées dépassent %lld octets UTF-8 et ne peuvent pas être relancées de manière fiable depuis une disposition enregistrée. Raccourcissez-les avant d’enregistrer." } }, "it": { "stringUnit": { "state": "translated", - "value": "Uscire da cmux?" + "value": "Uno o più comandi acquisiti superano %lld byte UTF-8 e non possono essere rieseguiti in modo affidabile da un layout salvato. Accorciali prima di salvare." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux を終了しますか?" + "value": "取得したコマンドの一部が %lld UTF-8 バイトを超えているため、保存したレイアウトから確実に再実行できません。保存する前に短くしてください。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ពាក្យបញ្ជាដែលបានចាប់យកមួយ ឬច្រើន វែងជាង %lld បៃ UTF-8 ហើយមិនអាចដំណើរការឡើងវិញពីប្លង់ដែលបានរក្សាទុកបានយ៉ាងទុកចិត្ត។ សូមបង្រួមវាមុនពេលរក្សាទុក។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux를 종료하시겠습니까?" + "value": "캡처된 명령 하나 이상이 %lld UTF-8바이트보다 길어 저장된 레이아웃에서 안정적으로 다시 실행할 수 없습니다. 저장하기 전에 줄이세요." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avslutte cmux?" + "value": "Én eller flere fangede kommandoer er lengre enn %lld UTF-8-byte og kan ikke kjøres på nytt pålitelig fra et lagret oppsett. Forkort dem før du lagrer." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zakończyć cmux?" + "value": "Jedno lub więcej przechwyconych poleceń ma więcej niż %lld bajtów UTF-8 i nie można ich niezawodnie odtworzyć z zapisanego układu. Skróć je przed zapisaniem." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Encerrar o cmux?" + "value": "Um ou mais comandos capturados têm mais de %lld bytes UTF-8 e não podem ser reexecutados de forma confiável a partir de um layout salvo. Encurte-os antes de salvar." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Завершить cmux?" + "value": "Одна или несколько захваченных команд длиннее %lld байт UTF-8 и не могут надежно запускаться из сохраненного макета. Сократите их перед сохранением." } }, "th": { "stringUnit": { "state": "translated", - "value": "ออกจาก cmux หรือไม่?" + "value": "คำสั่งที่จับไว้หนึ่งรายการขึ้นไปยาวเกิน %lld ไบต์ UTF-8 และไม่สามารถเรียกใช้ซ้ำจากเลย์เอาต์ที่บันทึกไว้ได้อย่างน่าเชื่อถือ โปรดย่อให้สั้นลงก่อนบันทึก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux'tan çıkılsın mı?" + "value": "Yakalanan komutlardan biri veya daha fazlası %lld UTF-8 bayttan uzun ve kaydedilmiş bir düzenden güvenilir şekilde yeniden çalıştırılamaz. Kaydetmeden önce kısaltın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Завершити cmux?" + "value": "Одна або кілька захоплених команд довші за %lld байтів UTF-8 і не можуть надійно запускатися зі збереженого макета. Скоротіть їх перед збереженням." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "退出 cmux?" + "value": "一个或多个捕获的命令超过 %lld 个 UTF-8 字节,无法从已保存的布局中可靠地重新运行。请先缩短再保存。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要結束 cmux 嗎?" + "value": "一個或多個擷取的指令超過 %lld 個 UTF-8 位元組,無法從已儲存的佈局可靠地重新執行。請先縮短再儲存。" } } } }, - "dialog.renameTab.message": { + "dialog.saveWorkspaceLayout.commandTooLongTitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "أدخل اسمًا مخصصًا لهذا اللسان." + "value": "الأمر طويل جدًا للحفظ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Unesite prilagođeni naziv za ovaj tab." + "value": "Komanda je preduga za spremanje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Indtast et brugerdefineret navn til denne fane." + "value": "Kommandoen er for lang til at gemme" } }, "de": { "stringUnit": { "state": "translated", - "value": "Geben Sie einen benutzerdefinierten Namen für diesen Tab ein." + "value": "Befehl ist zu lang zum Speichern" } }, "en": { "stringUnit": { "state": "translated", - "value": "Enter a custom name for this tab." + "value": "Command Too Long to Save" } }, "es": { "stringUnit": { "state": "translated", - "value": "Introduce un nombre personalizado para esta pestaña." + "value": "El comando es demasiado largo para guardarlo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Saisissez un nom personnalisé pour cet onglet." + "value": "Commande trop longue à enregistrer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Inserisci un nome personalizzato per questa scheda." + "value": "Comando troppo lungo da salvare" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このタブのカスタム名を入力してください。" + "value": "コマンドが長すぎて保存できません" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ពាក្យបញ្ជាវែងពេក មិនអាចរក្សាទុកបាន" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 탭의 사용자 지정 이름을 입력하세요." + "value": "명령이 너무 길어 저장할 수 없음" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skriv inn et egendefinert navn for denne fanen." + "value": "Kommandoen er for lang til å lagres" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wprowadź własną nazwę dla tej karty." + "value": "Polecenie jest zbyt długie do zapisania" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Insira um nome personalizado para esta aba." + "value": "Comando longo demais para salvar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Введите пользовательское имя для этой вкладки." + "value": "Команда слишком длинная для сохранения" } }, "th": { "stringUnit": { "state": "translated", - "value": "ป้อนชื่อที่กำหนดเองสำหรับแท็บนี้" + "value": "คำสั่งยาวเกินกว่าจะบันทึก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sekme için özel bir ad girin." + "value": "Komut kaydetmek için çok uzun" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Введіть власну назву для цієї вкладки." + "value": "Команда задовга для збереження" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请为此标签页输入自定义名称。" + "value": "命令太长,无法保存" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "為此標籤頁輸入自訂名稱。" + "value": "指令太長,無法儲存" } } } }, - "dialog.renameTab.placeholder": { + "dialog.saveWorkspaceLayout.commandsHeader": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "اسم اللسان" + "value": "Commands that will be saved and re-run:" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Naziv taba" + "value": "保存され再実行されるコマンド:" } - }, - "da": { + } + } + }, + "dialog.saveWorkspaceLayout.defaultName": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Fanenavn" + "value": "Workspace" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab-Name" + "value": "ワークスペース" } - }, + } + } + }, + "dialog.saveWorkspaceLayout.envHeader": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Tab name" + "value": "Environment variables whose values will be saved:" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Nombre de pestaña" + "value": "値が保存される環境変数:" } - }, - "fr": { + } + } + }, + "dialog.saveWorkspaceLayout.failedTitle": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Nom de l'onglet" + "value": "Couldn't Save Workspace Layout" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Nome scheda" + "value": "ワークスペースレイアウトを保存できませんでした" + } + } + } + }, + "dialog.saveWorkspaceLayout.makeDefaultCheckbox": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Use as default for new workspaces" } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブ名" + "value": "新規ワークスペースのデフォルトとして使用" } - }, - "ko": { + } + } + }, + "dialog.saveWorkspaceLayout.message": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "탭 이름" + "value": "Saves this workspace as a reusable layout in %@. It appears in the new-workspace menu and the Command Palette." } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fanenavn" + "value": "このワークスペースを再利用可能なレイアウトとして %@ に保存します。新規ワークスペースメニューとコマンドパレットに表示されます。" } - }, - "pl": { + } + } + }, + "dialog.saveWorkspaceLayout.namePlaceholder": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Nazwa karty" + "value": "Layout name" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Nome da aba" + "value": "レイアウト名" } - }, - "ru": { + } + } + }, + "dialog.saveWorkspaceLayout.ok": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Имя вкладки" + "value": "OK" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "ชื่อแท็บ" + "value": "OK" } - }, - "tr": { + } + } + }, + "dialog.saveWorkspaceLayout.save": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Sekme adı" + "value": "Save" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Назва вкладки" + "value": "保存" } - }, - "zh-Hans": { + } + } + }, + "dialog.saveWorkspaceLayout.skippedNote": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "标签页名称" + "value": "%lld panels have no layout representation (previews, viewers, …) and will be left out." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "標籤頁名稱" + "value": "%lld 個のパネルはレイアウトで表現できないため(プレビュー、ビューアなど)、保存されません。" } } } }, - "dialog.renameTab.title": { + "dialog.saveWorkspaceLayout.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية اللسان" + "value": "Save Workspace Layout" } }, - "bs": { + "ja": { "stringUnit": { "state": "translated", - "value": "Preimenuj tab" + "value": "ワークスペースレイアウトを保存" } - }, - "da": { + } + } + }, + "dialog.saveWorkspaceLayout.urlsHeader": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Omdøb fane" + "value": "URLs that will be saved:" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Tab umbenennen" + "value": "保存される URL:" } - }, + } + } + }, + "dialog.savedLayout.error.blankName": { + "extractionState": "manual", + "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rename Tab" + "value": "Enter a name before saving the layout." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Renombrar pestaña" + "value": "レイアウトを保存する前に名前を入力してください。" } - }, - "fr": { + } + } + }, + "dialog.savedLayout.error.corruptFile": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Renommer l'onglet" + "value": "The saved layouts file could not be read. Check it and try again." } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Rinomina scheda" + "value": "保存済みレイアウトファイルを読み取れませんでした。内容を確認してから再試行してください。" + } + } + } + }, + "dialog.savedLayout.error.duplicateName": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "A layout with that name already exists." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブの名称変更" + "value": "その名前のレイアウトはすでに存在します。" + } + } + } + }, + "dialog.savedLayout.error.notFound": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "That saved layout could not be found." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "탭 이름 변경" + "value": "その保存済みレイアウトが見つかりませんでした。" + } + } + } + }, + "dialog.savedLayout.error.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Layout Not Saved" } }, - "nb": { + "ja": { "stringUnit": { "state": "translated", - "value": "Gi fanen nytt navn" + "value": "レイアウトは保存されませんでした" + } + } + } + }, + "dialog.savedLayout.error.unknown": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The saved layout request could not be completed. Try again." } }, - "pl": { + "ja": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę karty" + "value": "保存済みレイアウトの要求を完了できませんでした。再試行してください。" + } + } + } + }, + "dialog.savedLayout.overwrite.confirm": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Replace" } }, - "pt-BR": { + "ja": { "stringUnit": { "state": "translated", - "value": "Renomear Aba" + "value": "置き換え" + } + } + } + }, + "dialog.savedLayout.overwrite.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "A layout named “%@” already exists. Replace it?" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Переименовать вкладку" + "value": "“%@” という名前のレイアウトはすでに存在します。置き換えますか?" + } + } + } + }, + "dialog.savedLayout.overwrite.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Replace Saved Layout?" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อแท็บ" + "value": "保存済みレイアウトを置き換えますか?" + } + } + } + }, + "dialog.savedLayout.save.confirm": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Save" } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Sekmeyi Yeniden Adlandır" + "value": "保存" + } + } + } + }, + "dialog.savedLayout.save.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Enter a name for this workspace layout." } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Перейменувати вкладку" + "value": "このワークスペースレイアウトの名前を入力してください。" + } + } + } + }, + "dialog.savedLayout.save.placeholder": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Layout name" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "重命名标签页" + "value": "レイアウト名" + } + } + } + }, + "dialog.savedLayout.save.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Save Layout as Template" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "重新命名標籤頁" + "value": "レイアウトをテンプレートとして保存" } } } }, - "dialog.renameWorkspace.message": { + "dialog.workspaceLayoutParameters.edit.confirm": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "أدخل اسمًا مخصصًا لمساحة العمل هذه." + "value": "حفظ التغييرات" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Unesite prilagođeni naziv za ovaj radni prostor." + "value": "Sačuvaj promjene" } }, "da": { "stringUnit": { "state": "translated", - "value": "Indtast et brugerdefineret navn til dette arbejdsområde." + "value": "Gem ændringer" } }, "de": { "stringUnit": { "state": "translated", - "value": "Geben Sie einen benutzerdefinierten Namen für diesen Arbeitsbereich ein." + "value": "Änderungen speichern" } }, "en": { "stringUnit": { "state": "translated", - "value": "Enter a custom name for this workspace." + "value": "Save Changes" } }, "es": { "stringUnit": { "state": "translated", - "value": "Introduce un nombre personalizado para este espacio de trabajo." + "value": "Guardar cambios" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Saisissez un nom personnalisé pour cet espace de travail." + "value": "Enregistrer les modifications" } }, "it": { "stringUnit": { "state": "translated", - "value": "Inserisci un nome personalizzato per questa area di lavoro." + "value": "Salva modifiche" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "変更を保存" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "このワークスペースのカスタム名を入力してください。" + "value": "រក្សាទុកការផ្លាស់ប្តូរ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 작업 공간의 사용자 지정 이름을 입력하세요." + "value": "변경 사항 저장" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skriv inn et egendefinert navn for dette arbeidsområdet." + "value": "Lagre endringer" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wprowadź własną nazwę dla tej przestrzeni roboczej." + "value": "Zapisz zmiany" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Insira um nome personalizado para esta área de trabalho." + "value": "Salvar alterações" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Введите пользовательское имя для этого рабочего пространства." + "value": "Сохранить изменения" } }, "th": { "stringUnit": { "state": "translated", - "value": "ป้อนชื่อที่กำหนดเองสำหรับเวิร์กสเปซนี้" + "value": "บันทึกการเปลี่ยนแปลง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu çalışma alanı için özel bir ad girin." + "value": "Değişiklikleri Kaydet" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Введіть власну назву для цієї робочої області." + "value": "Зберегти зміни" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请为此工作区输入自定义名称。" + "value": "保存更改" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "為此工作區輸入自訂名稱。" + "value": "儲存變更" } } } }, - "dialog.renameWorkspace.placeholder": { + "dialog.workspaceLayoutParameters.edit.failedTitle": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "اسم مساحة العمل" + "value": "تعذر تحديث تخطيط مساحة العمل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Naziv radnog prostora" + "value": "Nije moguće ažurirati raspored radnog prostora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Arbejdsområdenavn" + "value": "Arbejdsområdets layout kunne ikke opdateres" } }, "de": { "stringUnit": { "state": "translated", - "value": "Name des Arbeitsbereichs" + "value": "Das Arbeitsbereichslayout konnte nicht aktualisiert werden" } }, "en": { "stringUnit": { "state": "translated", - "value": "Workspace name" + "value": "Couldn't Update Workspace Layout" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nombre del espacio de trabajo" + "value": "No se pudo actualizar el diseño del espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nom de l'espace de travail" + "value": "Impossible de mettre à jour la disposition de l'espace de travail" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nome area di lavoro" + "value": "Impossibile aggiornare il layout dell'area di lavoro" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペース名" + "value": "ワークスペースレイアウトを更新できませんでした" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនអាចធ្វើបច្ចុប្បន្នភាពប្លង់កន្លែងធ្វើការបានទេ។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름" + "value": "작업공간 레이아웃을 업데이트할 수 없습니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Arbeidsområdenavn" + "value": "Kunne ikke oppdatere arbeidsområdeoppsettet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nazwa przestrzeni roboczej" + "value": "Nie można zaktualizować układu obszaru roboczego" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nome da área de trabalho" + "value": "Não foi possível atualizar o layout do espaço de trabalho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Имя рабочего пространства" + "value": "Не удалось обновить макет рабочей области" } }, "th": { "stringUnit": { "state": "translated", - "value": "ชื่อเวิร์กสเปซ" + "value": "ไม่สามารถอัปเดตเค้าโครงพื้นที่ทำงาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma alanı adı" + "value": "Çalışma Alanı Düzeni Güncellenemedi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Назва робочої області" + "value": "Не вдалося оновити макет робочої області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区名称" + "value": "无法更新工作区布局" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區名稱" + "value": "無法更新工作區佈局" } } } }, - "dialog.renameWorkspace.title": { + "dialog.workspaceLayoutParameters.edit.message": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "إعادة تسمية مساحة العمل" + "value": "يتم حفظ التغييرات في \"%@\" واستخدامها تلقائيًا في كل مرة تفتح فيها هذا التخطيط." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Preimenuj radni prostor" + "value": "Promjene se čuvaju u “%@” i koriste se automatski svaki put kada otvorite ovaj izgled." } }, "da": { "stringUnit": { "state": "translated", - "value": "Omdøb arbejdsområde" + "value": "Ændringer gemmes i \"%@\" og bruges automatisk, hver gang du åbner dette layout." } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereich umbenennen" + "value": "Änderungen werden unter „%@“ gespeichert und jedes Mal automatisch verwendet, wenn Sie dieses Layout öffnen." } }, "en": { "stringUnit": { "state": "translated", - "value": "Rename Workspace" + "value": "Changes are saved to “%@” and used automatically each time you open this layout." } }, "es": { "stringUnit": { "state": "translated", - "value": "Renombrar espacio de trabajo" + "value": "Los cambios se guardan en “%@” y se usan automáticamente cada vez que abre este diseño." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Renommer l'espace de travail" + "value": "Les modifications sont enregistrées dans « %@ » et utilisées automatiquement chaque fois que vous ouvrez cette mise en page." } }, "it": { "stringUnit": { "state": "translated", - "value": "Rinomina area di lavoro" + "value": "Le modifiche vengono salvate in \"%@\" e utilizzate automaticamente ogni volta che si apre questo layout." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースの名称変更" + "value": "変更は「%@」に保存され、このレイアウトを開くたびに自動的に使用されます。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ការផ្លាស់ប្តូរត្រូវបានរក្សាទុកទៅ “%@” ហើយប្រើដោយស្វ័យប្រវត្តិរាល់ពេលដែលអ្នកបើកប្លង់នេះ។" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작업 공간 이름 변경" + "value": "변경 사항은 “%@”에 저장되며 이 레이아웃을 열 때마다 자동으로 사용됩니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gi arbeidsområdet nytt navn" + "value": "Endringer lagres i \"%@\" og brukes automatisk hver gang du åpner dette oppsettet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmień nazwę przestrzeni roboczej" + "value": "Zmiany są zapisywane w „%@” i używane automatycznie przy każdym otwarciu tego układu." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Renomear Área de Trabalho" + "value": "As alterações são salvas em “%@” e usadas automaticamente sempre que você abre este layout." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Переименовать рабочее пространство" + "value": "Изменения сохраняются в «%@» и используются автоматически каждый раз, когда вы открываете этот макет." } }, "th": { "stringUnit": { "state": "translated", - "value": "เปลี่ยนชื่อเวิร์กสเปซ" + "value": "การเปลี่ยนแปลงจะถูกบันทึกไปที่ “%@” และใช้โดยอัตโนมัติทุกครั้งที่คุณเปิดเค้าโครงนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çalışma Alanını Yeniden Adlandır" + "value": "Değişiklikler “%@” dosyasına kaydedilir ve bu düzeni her açtığınızda otomatik olarak kullanılır." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перейменувати робочу область" + "value": "Зміни зберігаються в «%@» і використовуються автоматично кожного разу, коли ви відкриваєте цей макет." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重命名工作区" + "value": "更改将保存到“%@”,并在您每次打开此布局时自动使用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新命名工作區" - } - } - } - }, - "dialog.saveWorkspaceLayout.cancel": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cancel" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "キャンセル" + "value": "變更將儲存到“%@”,並在您每次開啟此佈局時自動使用。" } } } }, - "dialog.saveWorkspaceLayout.commandTooLongMessage": { + "dialog.workspaceLayoutParameters.edit.placeholder": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "أمر واحد أو أكثر من الأوامر الملتقطة أطول من %lld بايت UTF-8 ولا يمكن إعادة تشغيلها بشكل موثوق من تخطيط محفوظ. اختصرها قبل الحفظ." + "value": "أدخل قيمة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Jedna ili više snimljenih komandi duže su od %lld UTF-8 bajtova i ne mogu se pouzdano ponovo pokrenuti iz spremljenog rasporeda. Skratite ih prije spremanja." + "value": "Unesite vrijednost" } }, "da": { "stringUnit": { "state": "translated", - "value": "En eller flere registrerede kommandoer er længere end %lld UTF-8-byte og kan ikke afspilles pålideligt fra et gemt layout. Gør dem kortere, før du gemmer." + "value": "Indtast en værdi" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein oder mehrere erfasste Befehle sind länger als %lld UTF-8-Bytes und können aus einem gespeicherten Layout nicht zuverlässig erneut ausgeführt werden. Kürze sie vor dem Speichern." + "value": "Geben Sie einen Wert ein" } }, "en": { "stringUnit": { "state": "translated", - "value": "One or more captured commands are longer than %lld UTF-8 bytes and cannot be replayed reliably from a saved layout. Shorten them before saving." + "value": "Enter a value" } }, "es": { "stringUnit": { "state": "translated", - "value": "Uno o más comandos capturados superan los %lld bytes UTF-8 y no pueden reproducirse de forma fiable desde un diseño guardado. Acórtalos antes de guardar." + "value": "Introduce un valor" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Une ou plusieurs commandes capturées dépassent %lld octets UTF-8 et ne peuvent pas être relancées de manière fiable depuis une disposition enregistrée. Raccourcissez-les avant d’enregistrer." + "value": "Entrez une valeur" } }, "it": { "stringUnit": { "state": "translated", - "value": "Uno o più comandi acquisiti superano %lld byte UTF-8 e non possono essere rieseguiti in modo affidabile da un layout salvato. Accorciali prima di salvare." + "value": "Inserisci un valore" } }, "ja": { "stringUnit": { "state": "translated", - "value": "取得したコマンドの一部が %lld UTF-8 バイトを超えているため、保存したレイアウトから確実に再実行できません。保存する前に短くしてください。" + "value": "値を入力" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពាក្យបញ្ជាដែលបានចាប់យកមួយ ឬច្រើន វែងជាង %lld បៃ UTF-8 ហើយមិនអាចដំណើរការឡើងវិញពីប្លង់ដែលបានរក្សាទុកបានយ៉ាងទុកចិត្ត។ សូមបង្រួមវាមុនពេលរក្សាទុក។" + "value": "បញ្ចូលតម្លៃ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "캡처된 명령 하나 이상이 %lld UTF-8바이트보다 길어 저장된 레이아웃에서 안정적으로 다시 실행할 수 없습니다. 저장하기 전에 줄이세요." + "value": "값을 입력하세요" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Én eller flere fangede kommandoer er lengre enn %lld UTF-8-byte og kan ikke kjøres på nytt pålitelig fra et lagret oppsett. Forkort dem før du lagrer." + "value": "Skriv inn en verdi" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Jedno lub więcej przechwyconych poleceń ma więcej niż %lld bajtów UTF-8 i nie można ich niezawodnie odtworzyć z zapisanego układu. Skróć je przed zapisaniem." + "value": "Wprowadź wartość" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Um ou mais comandos capturados têm mais de %lld bytes UTF-8 e não podem ser reexecutados de forma confiável a partir de um layout salvo. Encurte-os antes de salvar." + "value": "Insira um valor" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Одна или несколько захваченных команд длиннее %lld байт UTF-8 и не могут надежно запускаться из сохраненного макета. Сократите их перед сохранением." + "value": "Введите значение" } }, "th": { "stringUnit": { "state": "translated", - "value": "คำสั่งที่จับไว้หนึ่งรายการขึ้นไปยาวเกิน %lld ไบต์ UTF-8 และไม่สามารถเรียกใช้ซ้ำจากเลย์เอาต์ที่บันทึกไว้ได้อย่างน่าเชื่อถือ โปรดย่อให้สั้นลงก่อนบันทึก" + "value": "ป้อนค่า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yakalanan komutlardan biri veya daha fazlası %lld UTF-8 bayttan uzun ve kaydedilmiş bir düzenden güvenilir şekilde yeniden çalıştırılamaz. Kaydetmeden önce kısaltın." + "value": "Bir değer girin" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Одна або кілька захоплених команд довші за %lld байтів UTF-8 і не можуть надійно запускатися зі збереженого макета. Скоротіть їх перед збереженням." + "value": "Введіть значення" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "一个或多个捕获的命令超过 %lld 个 UTF-8 字节,无法从已保存的布局中可靠地重新运行。请先缩短再保存。" + "value": "输入一个值" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "一個或多個擷取的指令超過 %lld 個 UTF-8 位元組,無法從已儲存的佈局可靠地重新執行。請先縮短再儲存。" + "value": "輸入一個值" } } } }, - "dialog.saveWorkspaceLayout.commandTooLongTitle": { + "dialog.workspaceLayoutParameters.edit.title": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "الأمر طويل جدًا للحفظ" + "value": "تحرير معلمات التخطيط" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Komanda je preduga za spremanje" + "value": "Uredi parametre rasporeda" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kommandoen er for lang til at gemme" + "value": "Rediger layoutparametre" } }, "de": { "stringUnit": { "state": "translated", - "value": "Befehl ist zu lang zum Speichern" + "value": "Layoutparameter bearbeiten" } }, "en": { "stringUnit": { "state": "translated", - "value": "Command Too Long to Save" + "value": "Edit Layout Parameters" } }, "es": { "stringUnit": { "state": "translated", - "value": "El comando es demasiado largo para guardarlo" + "value": "Editar parámetros de diseño" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Commande trop longue à enregistrer" + "value": "Modifier les paramètres de mise en page" } }, "it": { "stringUnit": { "state": "translated", - "value": "Comando troppo lungo da salvare" + "value": "Modifica parametri di layout" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コマンドが長すぎて保存できません" + "value": "レイアウトパラメータを編集" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពាក្យបញ្ជាវែងពេក មិនអាចរក្សាទុកបាន" + "value": "កែសម្រួលប៉ារ៉ាម៉ែត្រប្លង់" } }, "ko": { "stringUnit": { "state": "translated", - "value": "명령이 너무 길어 저장할 수 없음" + "value": "레이아웃 매개변수 편집" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kommandoen er for lang til å lagres" + "value": "Rediger layoutparametere" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Polecenie jest zbyt długie do zapisania" + "value": "Edytuj parametry układu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Comando longo demais para salvar" + "value": "Editar parâmetros de layout" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Команда слишком длинная для сохранения" + "value": "Редактировать параметры макета" } }, "th": { "stringUnit": { "state": "translated", - "value": "คำสั่งยาวเกินกว่าจะบันทึก" + "value": "แก้ไขพารามิเตอร์เค้าโครง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Komut kaydetmek için çok uzun" + "value": "Düzen Parametrelerini Düzenle" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Команда задовга для збереження" + "value": "Редагувати параметри макета" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "命令太长,无法保存" + "value": "编辑布局参数" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "指令太長,無法儲存" + "value": "編輯佈局參數" } } } }, - "dialog.saveWorkspaceLayout.commandsHeader": { + "dialog.workspaceTemplate.failed.message": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Commands that will be saved and re-run:" + "value": "لا يمكن حل قالب مساحة العمل." } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "保存され再実行されるコマンド:" + "value": "Predložak radnog prostora nije mogao biti razriješen." } - } - } - }, - "dialog.saveWorkspaceLayout.defaultName": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Workspace" + "value": "Arbejdsområdeskabelonen kunne ikke løses." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "ワークスペース" + "value": "Die Arbeitsbereichsvorlage konnte nicht aufgelöst werden." } - } - } - }, - "dialog.saveWorkspaceLayout.envHeader": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Environment variables whose values will be saved:" + "value": "The workspace template could not be resolved." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "値が保存される環境変数:" - } - } - } - }, - "dialog.saveWorkspaceLayout.failedTitle": { - "extractionState": "manual", - "localizations": { - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Couldn't Save Workspace Layout" + "value": "No se pudo resolver la plantilla del espacio de trabajo." } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "ワークスペースレイアウトを保存できませんでした" + "value": "Le modèle d'espace de travail n'a pas pu être résolu." } - } - } - }, - "dialog.saveWorkspaceLayout.makeDefaultCheckbox": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "Use as default for new workspaces" + "value": "Impossibile risolvere il modello dell'area di lavoro." } }, "ja": { "stringUnit": { "state": "translated", - "value": "新規ワークスペースのデフォルトとして使用" - } - } - } - }, - "dialog.saveWorkspaceLayout.message": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Saves this workspace as a reusable layout in %@. It appears in the new-workspace menu and the Command Palette." + "value": "ワークスペーステンプレートを解決できませんでした。" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "このワークスペースを再利用可能なレイアウトとして %@ に保存します。新規ワークスペースメニューとコマンドパレットに表示されます。" + "value": "គំរូកន្លែងធ្វើការមិនអាចដោះស្រាយបានទេ។" } - } - } - }, - "dialog.saveWorkspaceLayout.namePlaceholder": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Layout name" + "value": "작업공간 템플릿을 확인할 수 없습니다." } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "レイアウト名" + "value": "Arbeidsområdemalen kunne ikke løses." } - } - } - }, - "dialog.saveWorkspaceLayout.ok": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Nie można rozwiązać szablonu obszaru roboczego." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "O modelo de espaço de trabalho não pôde ser resolvido." } - } - } - }, - "dialog.saveWorkspaceLayout.save": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "Save" + "value": "Не удалось разрешить шаблон рабочей области." } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "保存" + "value": "ไม่สามารถแก้ไขเทมเพลตพื้นที่ทำงาน" } - } - } - }, - "dialog.saveWorkspaceLayout.skippedNote": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "%lld panels have no layout representation (previews, viewers, …) and will be left out." + "value": "Çalışma alanı şablonu çözülemedi." } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "%lld 個のパネルはレイアウトで表現できないため(プレビュー、ビューアなど)、保存されません。" + "value": "Не вдалося вирішити шаблон робочої області." } - } - } - }, - "dialog.saveWorkspaceLayout.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Save Workspace Layout" + "value": "无法解析工作区模板。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ワークスペースレイアウトを保存" + "value": "無法解析工作區模板。" } } } }, - "dialog.saveWorkspaceLayout.urlsHeader": { + "dialog.workspaceTemplate.missingParameters.message": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "URLs that will be saved:" + "value": "القيم المفقودة لـ: %@. إذا ظهر هذا التخطيط في قائمة مساحة العمل، فاختر إدارة التخطيطات → تحرير معلمات التخطيط. وإلا، فأضف القيم إلى params في ملف التكوين الخاص به." } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "保存される URL:" + "value": "Nedostaju vrijednosti za: %@. Ako se ovaj raspored pojavljuje u meniju radnog prostora, odaberite Upravljaj rasporedima → Uredi parametre rasporeda. U suprotnom dodajte vrijednosti u params u njegovoj konfiguracijskoj datoteci." } - } - } - }, - "dialog.savedLayout.error.blankName": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Enter a name before saving the layout." + "value": "Manglende værdier for: %@. Hvis dette layout vises i arbejdsområdemenuen, skal du vælge Administrer layouts → Rediger layoutparametre. Ellers skal du føje værdierne til params i layoutets konfigurationsfil." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "レイアウトを保存する前に名前を入力してください。" + "value": "Fehlende Werte für: %@. Wenn dieses Layout im Arbeitsbereichsmenü angezeigt wird, wählen Sie „Layouts verwalten“ → „Layoutparameter bearbeiten“. Andernfalls fügen Sie die Werte in der Konfigurationsdatei des Layouts zu params hinzu." } - } - } - }, - "dialog.savedLayout.error.corruptFile": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "The saved layouts file could not be read. Check it and try again." + "value": "Missing values for: %@. If this layout appears in the workspace menu, choose Manage Layouts → Edit Layout Parameters. Otherwise, add the values to params in its configuration file." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "保存済みレイアウトファイルを読み取れませんでした。内容を確認してから再試行してください。" - } - } - } - }, - "dialog.savedLayout.error.duplicateName": { - "extractionState": "manual", - "localizations": { - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "A layout with that name already exists." + "value": "Valores faltantes para: %@. Si este diseño aparece en el menú del espacio de trabajo, elija Administrar diseños → Editar parámetros de diseño. De lo contrario, agregue los valores a params en su archivo de configuración." } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "その名前のレイアウトはすでに存在します。" + "value": "Valeurs manquantes pour : %@. Si cette mise en page apparaît dans le menu des espaces de travail, choisissez Gérer les mises en page → Modifier les paramètres de mise en page. Sinon, ajoutez les valeurs à params dans son fichier de configuration." } - } - } - }, - "dialog.savedLayout.error.notFound": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "That saved layout could not be found." + "value": "Valori mancanti per: %@. Se questo layout appare nel menu dell'area di lavoro, scegli Gestisci layout → Modifica parametri di layout. Altrimenti, aggiungi i valori a params nel relativo file di configurazione." } }, "ja": { "stringUnit": { "state": "translated", - "value": "その保存済みレイアウトが見つかりませんでした。" - } - } - } - }, - "dialog.savedLayout.error.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Layout Not Saved" + "value": "次の値がありません: %@。このレイアウトがワークスペースメニューに表示される場合は、[レイアウトを管理]→[レイアウトパラメータを編集]を選択してください。それ以外の場合は、設定ファイルの params に値を追加してください。" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "レイアウトは保存されませんでした" + "value": "បាត់តម្លៃសម្រាប់៖ %@។ ប្រសិនបើប្លង់នេះបង្ហាញក្នុងម៉ឺនុយកន្លែងធ្វើការ សូមជ្រើស គ្រប់គ្រងប្លង់ → កែសម្រួលប៉ារ៉ាម៉ែត្រប្លង់។ បើមិនដូច្នោះទេ សូមបន្ថែមតម្លៃទៅ params ក្នុងឯកសារកំណត់រចនាសម្ព័ន្ធរបស់វា។" } - } - } - }, - "dialog.savedLayout.error.unknown": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "The saved layout request could not be completed. Try again." + "value": "다음 값이 없습니다: %@. 이 레이아웃이 워크스페이스 메뉴에 표시되면 레이아웃 관리 → 레이아웃 매개변수 편집을 선택하세요. 그렇지 않으면 해당 구성 파일의 params에 값을 추가하세요." } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "保存済みレイアウトの要求を完了できませんでした。再試行してください。" + "value": "Mangler verdier for: %@. Hvis dette oppsettet vises i arbeidsområdemenyen, velger du Administrer oppsett → Rediger layoutparametere. Ellers legger du verdiene til params i konfigurasjonsfilen." } - } - } - }, - "dialog.savedLayout.overwrite.confirm": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Replace" + "value": "Brakujące wartości: %@. Jeśli ten układ pojawia się w menu obszaru roboczego, wybierz Zarządzaj układami → Edytuj parametry układu. W przeciwnym razie dodaj wartości do params w jego pliku konfiguracyjnym." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "置き換え" + "value": "Valores ausentes: %@. Se este layout aparecer no menu do espaço de trabalho, escolha Gerenciar layouts → Editar parâmetros de layout. Caso contrário, adicione os valores a params no arquivo de configuração dele." } - } - } - }, - "dialog.savedLayout.overwrite.message": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "A layout named “%@” already exists. Replace it?" + "value": "Отсутствуют значения: %@. Если этот макет отображается в меню рабочих областей, выберите «Управление макетами» → «Редактировать параметры макета». В противном случае добавьте значения в params в файле конфигурации макета." } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "“%@” という名前のレイアウトはすでに存在します。置き換えますか?" + "value": "ค่าที่ขาดหายไป: %@ หากเค้าโครงนี้ปรากฏในเมนูพื้นที่ทำงาน ให้เลือก จัดการเค้าโครง → แก้ไขพารามิเตอร์เค้าโครง มิฉะนั้น ให้เพิ่มค่าลงใน params ในไฟล์การกำหนดค่าของเค้าโครง" } - } - } - }, - "dialog.savedLayout.overwrite.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Replace Saved Layout?" + "value": "Eksik değerler: %@. Bu düzen çalışma alanı menüsünde görünüyorsa Düzenleri Yönet → Düzen Parametrelerini Düzenle'yi seçin. Aksi takdirde değerleri düzenin yapılandırma dosyasındaki params alanına ekleyin." } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "保存済みレイアウトを置き換えますか?" + "value": "Відсутні значення: %@. Якщо цей макет відображається в меню робочих областей, виберіть «Керування макетами» → «Редагувати параметри макета». Інакше додайте значення до params у файлі конфігурації макета." } - } - } - }, - "dialog.savedLayout.save.confirm": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Save" + "value": "缺少值:%@。如果此布局显示在工作区菜单中,请选择“管理布局”→“编辑布局参数”。否则,请将这些值添加到其配置文件的 params 中。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "保存" + "value": "缺少值:%@。如果此佈局顯示在工作區選單中,請選擇「管理佈局」→「編輯佈局參數」。否則,請將這些值加入其設定檔的 params 中。" } } } }, - "dialog.savedLayout.save.message": { + "dialog.workspaceTemplate.missingParameters.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Enter a name for this workspace layout." + "value": "معلمات مساحة العمل مطلوبة" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "このワークスペースレイアウトの名前を入力してください。" + "value": "Obavezni parametri radnog prostora" } - } - } - }, - "dialog.savedLayout.save.placeholder": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Layout name" + "value": "Arbejdsområdeparametre påkrævet" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "レイアウト名" + "value": "Erforderliche Arbeitsbereichsparameter" } - } - } - }, - "dialog.savedLayout.save.title": { - "extractionState": "manual", - "localizations": { + }, "en": { "stringUnit": { "state": "translated", - "value": "Save Layout as Template" + "value": "Workspace Parameters Required" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "レイアウトをテンプレートとして保存" + "value": "Parámetros del espacio de trabajo requeridos" } - } - } - }, - "dialog.workspaceTemplate.configure.confirm": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Create Workspace" + "value": "Paramètres de l'espace de travail requis" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "ワークスペースを作成" + "value": "Parametri dell'area di lavoro obbligatori" } - } - } - }, - "dialog.workspaceTemplate.configure.message": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ja": { "stringUnit": { "state": "translated", - "value": "Set values for “%@” before creating the workspace." + "value": "ワークスペースパラメータが必要です" } }, - "ja": { + "km": { "stringUnit": { "state": "translated", - "value": "ワークスペースを作成する前に「%@」の値を設定してください。" + "value": "ប៉ារ៉ាម៉ែត្រកន្លែងធ្វើការចាំបាច់" } - } - } - }, - "dialog.workspaceTemplate.configure.placeholder": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Enter a value" + "value": "작업공간 매개변수가 필요합니다." } }, - "ja": { + "nb": { "stringUnit": { "state": "translated", - "value": "値を入力" + "value": "Arbeidsområdeparametere kreves" } - } - } - }, - "dialog.workspaceTemplate.configure.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "pl": { "stringUnit": { "state": "translated", - "value": "Configure Workspace Parameters" + "value": "Wymagane parametry obszaru roboczego" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "ワークスペースパラメータを設定" + "value": "Parâmetros do espaço de trabalho obrigatórios" } - } - } - }, - "dialog.workspaceTemplate.failed.message": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ru": { "stringUnit": { "state": "translated", - "value": "The workspace template could not be resolved." + "value": "Обязательные параметры рабочей области" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "ワークスペーステンプレートを解決できませんでした。" + "value": "ต้องมีพารามิเตอร์พื้นที่ทำงาน" } - } - } - }, - "dialog.workspaceTemplate.missingParameters.message": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "Missing values for: %@" + "value": "Gerekli Çalışma Alanı Parametreleri" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "次の値がありません: %@" + "value": "Обов’язкові параметри робочої області" } - } - } - }, - "dialog.workspaceTemplate.missingParameters.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Workspace Parameters Required" + "value": "所需的工作区参数" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ワークスペースパラメータが必要です" + "value": "所需的工作區參數" } } } @@ -99713,6 +101458,131 @@ } } }, + "error.cmuxConfigActionSaver.actionNotFound": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تعذر العثور على تخطيط مساحة العمل \"%@\" في التكوين العام." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Nije moguće pronaći raspored radnog prostora “%@” u globalnoj konfiguraciji." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Kunne ikke finde arbejdsområdelayoutet \"%@\" i den globale konfiguration." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Das Arbeitsbereichslayout „%@“ konnte in der globalen Konfiguration nicht gefunden werden." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Couldn't find workspace layout “%@” in the global configuration." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No se pudo encontrar el diseño del espacio de trabajo \"%@\" en la configuración global." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Impossible de trouver la disposition de l'espace de travail « %@ » dans la configuration globale." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Impossibile trovare il layout dell'area di lavoro \"%@\" nella configurazione globale." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "グローバル設定にワークスペースレイアウト「%@」が見つかりませんでした。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនអាចស្វែងរកប្លង់កន្លែងធ្វើការ “%@” នៅក្នុងការកំណត់រចនាសម្ព័ន្ធសកលបានទេ។" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "전역 구성에서 작업 공간 레이아웃 “%@”를 찾을 수 없습니다." + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Kunne ikke finne arbeidsområdeoppsettet \"%@\" i den globale konfigurasjonen." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Nie można znaleźć układu obszaru roboczego „%@” w konfiguracji globalnej." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Não foi possível encontrar o layout do espaço de trabalho “%@” na configuração global." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось найти макет рабочей области «%@» в глобальной конфигурации." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ไม่พบเค้าโครงพื้นที่ทำงาน “%@” ในการกำหนดค่าส่วนกลาง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Genel yapılandırmada \"%@\" çalışma alanı düzeni bulunamadı." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Не вдалося знайти макет робочої області «%@» у глобальній конфігурації." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在全局配置中找不到工作区布局“%@”。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在全域配置中找不到工作區佈局“%@”。" + } + } + } + }, "error.cmuxConfigActionSaver.malformedConfig": { "extractionState": "manual", "localizations": { @@ -99730,6 +101600,131 @@ } } }, + "error.cmuxConfigActionSaver.notEditableWorkspaceAction": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "\"%@\" ليس تخطيطًا مضمنًا لمساحة العمل ولا يمكن تحريره هنا." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "“%@” nije inline raspored radnog prostora i ne može se uređivati ovdje." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "\"%@\" er ikke et indlejret arbejdsområdelayout og kan ikke redigeres her." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "„%@“ ist kein Inline-Arbeitsbereichslayout und kann hier nicht bearbeitet werden." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "“%@” is not an inline workspace layout and can't be edited here." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "“%@” no es un diseño de espacio de trabajo en línea y no se puede editar aquí." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "« %@ » n'est pas une disposition d'espace de travail en ligne et ne peut pas être modifié ici." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "\"%@\" non è un layout dell'area di lavoro in linea e non può essere modificato qui." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」はインラインワークスペースレイアウトではないため、ここでは編集できません。" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "“%@” មិនមែនជាប្លង់កន្លែងធ្វើការក្នុងជួរ ហើយមិនអាចកែសម្រួលនៅទីនេះបានទេ។" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "“%@”는 인라인 작업 공간 레이아웃이 아니므로 여기에서 편집할 수 없습니다." + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "\"%@\" er ikke et innebygd arbeidsområdeoppsett og kan ikke redigeres her." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "„%@” nie jest wbudowanym układem obszaru roboczego i nie można go tutaj edytować." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "“%@” não é um layout de espaço de trabalho embutido e não pode ser editado aqui." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "«%@» не является встроенным макетом рабочей области, и его нельзя здесь редактировать." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "“%@” ไม่ใช่เค้าโครงพื้นที่ทำงานแบบอินไลน์และไม่สามารถแก้ไขได้ที่นี่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "“%@” satır içi bir çalışma alanı düzeni değildir ve burada düzenlenemez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "“%@” не є вбудованим макетом робочої області, і його не можна редагувати тут." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "“%@”不是内联工作区布局,无法在此处进行编辑。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "「%@」不是內嵌工作區佈局,無法在此處進行編輯。" + } + } + } + }, "error.cmuxConfigActionSaver.unreadableConfig": { "extractionState": "manual", "localizations": { @@ -117028,6 +119023,131 @@ } } }, + "menu.newWorkspace.editLayoutParametersSubmenu": { + "extractionState": "manual", + "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "تحرير معلمات التخطيط" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Uredi parametre rasporeda" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Rediger layoutparametre" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Layoutparameter bearbeiten" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Layout Parameters" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Editar parámetros de diseño" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Modifier les paramètres de mise en page" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Modifica parametri di layout" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "レイアウトパラメータを編集" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "កែសម្រួលប៉ារ៉ាម៉ែត្រប្លង់" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "레이아웃 매개변수 편집" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Rediger layoutparametere" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Edytuj parametry układu" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Editar parâmetros de layout" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактировать параметры макета" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "แก้ไขพารามิเตอร์เค้าโครง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Düzen Parametrelerini Düzenle" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Редагувати параметри макета" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "编辑布局参数" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "編輯佈局參數" + } + } + } + }, "menu.newWorkspace.layoutsHeader": { "extractionState": "manual", "localizations": { @@ -117048,17 +119168,125 @@ "menu.newWorkspace.manageLayouts": { "extractionState": "manual", "localizations": { + "ar": { + "stringUnit": { + "state": "translated", + "value": "إدارة التخطيطات" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Upravljaj rasporedima" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Administrer layouts" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Layouts verwalten" + } + }, "en": { "stringUnit": { "state": "translated", "value": "Manage Layouts" } }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Administrar diseños" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Gérer les mises en page" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Gestisci layout" + } + }, "ja": { "stringUnit": { "state": "translated", "value": "レイアウトを管理" } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "គ្រប់គ្រងប្លង់" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "레이아웃 관리" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Administrer oppsett" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Zarządzaj układami" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Gerenciar layouts" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление макетами" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "จัดการเค้าโครง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Düzenleri Yönet" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Керування макетами" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "管理布局" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "管理佈局" + } } } }, diff --git a/Sources/AppDelegate+NewWorkspaceMenuRendering.swift b/Sources/AppDelegate+NewWorkspaceMenuRendering.swift index 603b6d583fce..acf759b95e1b 100644 --- a/Sources/AppDelegate+NewWorkspaceMenuRendering.swift +++ b/Sources/AppDelegate+NewWorkspaceMenuRendering.swift @@ -134,6 +134,7 @@ extension AppDelegate { if !management.defaultLayout.entries.isEmpty || management.defaultLayout.hasDefault + || !management.editableActions.isEmpty || !management.deletableActions.isEmpty { let parent = NSMenuItem( title: String( @@ -190,6 +191,38 @@ extension AppDelegate { } submenu.addItem(item) } + if !management.editableActions.isEmpty { + submenu.addItem(.separator()) + let editParametersItem = NSMenuItem( + title: String( + localized: "menu.newWorkspace.editLayoutParametersSubmenu", + defaultValue: "Edit Layout Parameters" + ), + action: nil, + keyEquivalent: "" + ) + let editParametersSubmenu = NSMenu() + for action in management.editableActions { + let item = NSMenuItem( + title: action.title + "…", + action: #selector(editWorkspaceConfigActionParametersMenuItem(_:)), + keyEquivalent: "" + ) + item.target = self + item.representedObject = WorkspaceActionParameterEditBox( + windowId: context.windowId, + actionID: action.id, + actionTitle: action.title + ) + item.image = action.icon?.contextMenuImage( + configSourcePath: action.iconSourcePath, + globalConfigPath: cmuxConfigStore.globalConfigPath + ) + editParametersSubmenu.addItem(item) + } + editParametersItem.submenu = editParametersSubmenu + submenu.addItem(editParametersItem) + } if !management.deletableActions.isEmpty { submenu.addItem(.separator()) submenu.addItem(.sectionHeader(title: String( diff --git a/Sources/AppDelegate+SavedLayoutMenu.swift b/Sources/AppDelegate+SavedLayoutMenu.swift index 9dc812feb576..6239ffa291b9 100644 --- a/Sources/AppDelegate+SavedLayoutMenu.swift +++ b/Sources/AppDelegate+SavedLayoutMenu.swift @@ -1,5 +1,4 @@ import AppKit -import CmuxFoundation import Foundation @MainActor @@ -64,7 +63,7 @@ extension AppDelegate { NSSound.beep() return } - _ = context.tabManager.openSavedLayoutInteractively( + _ = context.tabManager.openSavedLayout( layout, cwdOverride: nil, focus: true, diff --git a/Sources/AppDelegate+WorkspaceActionSave.swift b/Sources/AppDelegate+WorkspaceActionSave.swift index 6bf705718576..79d474fb81a7 100644 --- a/Sources/AppDelegate+WorkspaceActionSave.swift +++ b/Sources/AppDelegate+WorkspaceActionSave.swift @@ -136,6 +136,57 @@ extension AppDelegate { } } + @objc func editWorkspaceConfigActionParametersMenuItem(_ sender: NSMenuItem) { + guard let box = sender.representedObject as? WorkspaceActionParameterEditBox, + let context = mainWindowContexts.values.first(where: { $0.windowId == box.windowId }), + let cmuxConfigStore = context.cmuxConfigStore, + let window = resolvedWindow(for: context), + let action = cmuxConfigStore.actionLookup[box.actionID], + isDeletableGlobalAction(action, cmuxConfigStore: cmuxConfigStore), + let definition = action.action.inlineWorkspace?.definition else { + NSSound.beep() + return + } + + let presented = WorkspaceActionParameterEditor( + processEnvironment: ProcessInfo.processInfo.environment + ).present( + definition: definition, + displayName: box.actionTitle, + presentingWindow: window + ) { [weak window, weak cmuxConfigStore] parameters in + guard let parameters, let cmuxConfigStore else { return } + do { + try CmuxConfigActionSaver.updateWorkspaceActionParameters( + id: box.actionID, + parameters: parameters, + globalConfigPath: cmuxConfigStore.globalConfigPath + ) + cmuxConfigStore.loadAll() +#if DEBUG + cmuxDebugLog("workspaceLayoutParameters.updated id=\(box.actionID)") +#endif + } catch { + guard let window else { return } + let errorAlert = NSAlert() + errorAlert.alertStyle = .warning + errorAlert.messageText = String( + localized: "dialog.workspaceLayoutParameters.edit.failedTitle", + defaultValue: "Couldn't Update Workspace Layout" + ) + errorAlert.informativeText = error.localizedDescription + errorAlert.addButton(withTitle: String( + localized: "common.ok", + defaultValue: "OK" + )) + errorAlert.beginSheetModal(for: window) + } + } + if !presented { + NSSound.beep() + } + } + @objc func saveWorkspaceAsConfigActionMenuItem(_ sender: NSMenuItem) { guard let windowId = (sender.representedObject as? NSUUID) as UUID?, let context = mainWindowContexts.values.first(where: { $0.windowId == windowId }) else { diff --git a/Sources/CmuxConfigActionSaver.swift b/Sources/CmuxConfigActionSaver.swift index edd31c9c92f6..50ff2fe4541f 100644 --- a/Sources/CmuxConfigActionSaver.swift +++ b/Sources/CmuxConfigActionSaver.swift @@ -12,6 +12,8 @@ enum CmuxConfigActionSaver { enum SaveError: LocalizedError, Equatable { case unreadableConfig(String) case malformedConfig(String) + case actionNotFound(String) + case notEditableWorkspaceAction(String) var errorDescription: String? { switch self { @@ -27,6 +29,18 @@ enum CmuxConfigActionSaver { defaultValue: "%@ isn't a valid JSON object, so the action couldn't be added. Fix the file and try again." ) return String(format: format, path) + case .actionNotFound(let actionID): + let format = String( + localized: "error.cmuxConfigActionSaver.actionNotFound", + defaultValue: "Couldn't find workspace layout “%@” in the global configuration." + ) + return String(format: format, actionID) + case .notEditableWorkspaceAction(let actionID): + let format = String( + localized: "error.cmuxConfigActionSaver.notEditableWorkspaceAction", + defaultValue: "“%@” is not an inline workspace layout and can't be edited here." + ) + return String(format: format, actionID) } } } @@ -90,6 +104,51 @@ enum CmuxConfigActionSaver { return SaveResult(actionID: actionID, configPath: globalConfigPath) } + /// Updates the persisted values for an existing inline workspace layout. + static func updateWorkspaceActionParameters( + id actionID: String, + parameters: [String: String], + globalConfigPath: String, + fileManager: FileManager = .default + ) throws { + guard fileManager.fileExists(atPath: globalConfigPath), + let data = fileManager.contents(atPath: globalConfigPath), + let source = String(data: data, encoding: .utf8) else { + throw SaveError.unreadableConfig(globalConfigPath) + } + try validateEditableConfig(source, globalConfigPath: globalConfigPath) + + guard let sanitized = try? JSONCParser.preprocess(data: Data(source.utf8)), + let config = try? JSONDecoder().decode(CmuxConfigFile.self, from: sanitized), + let action = config.actions[actionID]?.action else { + throw SaveError.actionNotFound(actionID) + } + guard action.inlineWorkspace != nil else { + throw SaveError.notEditableWorkspaceAction(actionID) + } + + var updated = source + for name in parameters.keys.sorted() { + guard let value = parameters[name] else { continue } + do { + updated = try JSONCObjectEditor.setNestedStringProperty( + objectPath: ["actions", actionID, "workspace", "params"], + key: name, + value: value, + in: updated + ) + } catch { + throw SaveError.malformedConfig(globalConfigPath) + } + } + guard updated != source else { return } + try writeOwnerOnlyConfig( + updated, + globalConfigPath: globalConfigPath, + fileManager: fileManager + ) + } + /// Removes `actions.<actionID>` from the config file, preserving comments /// and formatting. Only global-config actions are deletable this way. static func deleteAction( diff --git a/Sources/CmuxConfigExecutor.swift b/Sources/CmuxConfigExecutor.swift index 78614ca40516..4e3e9b606f27 100644 --- a/Sources/CmuxConfigExecutor.swift +++ b/Sources/CmuxConfigExecutor.swift @@ -20,45 +20,6 @@ struct CmuxConfigExecutor { ) -> Bool { if let workspace = command.workspace { let processEnvironment = ProcessInfo.processInfo.environment - let parameterInputs = workspace.templateParameterInputs( - processEnvironment: processEnvironment - ) - if !parameterInputs.isEmpty { - return WorkspaceTemplateParameterPrompt( - processEnvironment: processEnvironment - ).requestParameters( - for: workspace, - displayName: displayTitle ?? command.name, - presentingWindow: presentingWindow - ) { parameters in - guard let parameters else { return } - do { - let resolvedCommand = try resolvedWorkspaceCommandForLaunch( - command, - templateParameters: parameters, - processEnvironment: processEnvironment - ) - _ = execute( - command: resolvedCommand, - tabManager: tabManager, - baseCwd: baseCwd, - configSourcePath: configSourcePath, - globalConfigPath: globalConfigPath, - displayTitle: displayTitle, - actionID: actionID, - icon: icon, - iconSourcePath: iconSourcePath, - presentingWindow: presentingWindow, - onExecuted: onExecuted - ) - } catch { - WorkspaceTemplateErrorPresenter( - presentingWindow: presentingWindow - ).present(error) - } - } - } - let resolvedCommand: CmuxCommandDefinition do { resolvedCommand = try resolvedWorkspaceCommandForLaunch( diff --git a/Sources/CmuxWorkspaceDefinition+Parameterization.swift b/Sources/CmuxWorkspaceDefinition+Parameterization.swift index 564b9f511f62..dfa8339f4355 100644 --- a/Sources/CmuxWorkspaceDefinition+Parameterization.swift +++ b/Sources/CmuxWorkspaceDefinition+Parameterization.swift @@ -7,7 +7,7 @@ extension CmuxWorkspaceDefinition { params != nil } - /// Editable launch inputs in deterministic first-occurrence order. + /// Editable configuration inputs in deterministic first-occurrence order. func templateParameterInputs( processEnvironment: [String: String] ) -> [CmuxTemplateParameterInput] { diff --git a/Sources/ContentView+SavedLayoutCommands.swift b/Sources/ContentView+SavedLayoutCommands.swift index 776a97b90c33..6180242dafb0 100644 --- a/Sources/ContentView+SavedLayoutCommands.swift +++ b/Sources/ContentView+SavedLayoutCommands.swift @@ -1,5 +1,4 @@ import AppKit -import CmuxFoundation import CmuxCommandPalette import Foundation @@ -58,7 +57,7 @@ extension ContentView { NSSound.beep() return } - _ = tabManager.openSavedLayoutInteractively( + _ = tabManager.openSavedLayout( resolvedLayout, cwdOverride: nil, focus: true, diff --git a/Sources/NewWorkspaceMenuModel.swift b/Sources/NewWorkspaceMenuModel.swift index 6501aacc169e..27644e189bd5 100644 --- a/Sources/NewWorkspaceMenuModel.swift +++ b/Sources/NewWorkspaceMenuModel.swift @@ -14,6 +14,7 @@ struct NewWorkspaceMenuModel: Equatable { struct ManagementSection: Equatable { let defaultLayout: NewWorkspaceDefaultLayoutMenuModel + let editableActions: [CmuxResolvedConfigAction] let deletableActions: [CmuxResolvedConfigAction] } @@ -95,6 +96,17 @@ struct NewWorkspaceMenuModel: Equatable { ) let management = ManagementSection( defaultLayout: defaultLayout, + editableActions: loadedActions + .filter { action in + guard deletable(action), + let definition = action.action.inlineWorkspace?.definition else { + return false + } + return !definition.templateParameterInputs( + processEnvironment: [:] + ).isEmpty + } + .sorted { ($0.title, $0.id) < ($1.title, $1.id) }, deletableActions: loadedActions .filter { isWorkspaceLayout($0) && deletable($0) } .sorted { ($0.title, $0.id) < ($1.title, $1.id) } diff --git a/Sources/TabManager+SavedLayouts.swift b/Sources/TabManager+SavedLayouts.swift index b0ae908396b7..7369c405a2e6 100644 --- a/Sources/TabManager+SavedLayouts.swift +++ b/Sources/TabManager+SavedLayouts.swift @@ -47,36 +47,26 @@ extension TabManager { return workspace } - /// Shared interactive launch path for saved layouts from menus and commands. + /// Shared UI launch path for saved layouts from menus and commands. @discardableResult - func openSavedLayoutInteractively( + func openSavedLayout( _ layout: CmuxSavedLayout, cwdOverride: String?, focus: Bool, presentingWindow: NSWindow? ) -> Bool { - let processEnvironment = ProcessInfo.processInfo.environment - return WorkspaceTemplateParameterPrompt( - processEnvironment: processEnvironment - ).requestParameters( - for: layout.workspace, - displayName: layout.name, - presentingWindow: presentingWindow - ) { parameters in - guard let parameters else { return } - do { - _ = try self.openWorkspace( - fromSavedLayout: layout, - cwdOverride: cwdOverride, - templateParameters: parameters, - processEnvironment: processEnvironment, - focus: focus - ) - } catch { - WorkspaceTemplateErrorPresenter( - presentingWindow: presentingWindow - ).present(error) - } + do { + _ = try openWorkspace( + fromSavedLayout: layout, + cwdOverride: cwdOverride, + focus: focus + ) + return true + } catch { + WorkspaceTemplateErrorPresenter( + presentingWindow: presentingWindow + ).present(error) + return false } } } diff --git a/Sources/WorkspaceActionParameterEditBox.swift b/Sources/WorkspaceActionParameterEditBox.swift new file mode 100644 index 000000000000..a40bae59653e --- /dev/null +++ b/Sources/WorkspaceActionParameterEditBox.swift @@ -0,0 +1,16 @@ +import AppKit +import Foundation + +/// Payload for an explicit edit-parameters menu action. +@MainActor +final class WorkspaceActionParameterEditBox: NSObject { + let windowId: UUID + let actionID: String + let actionTitle: String + + init(windowId: UUID, actionID: String, actionTitle: String) { + self.windowId = windowId + self.actionID = actionID + self.actionTitle = actionTitle + } +} diff --git a/Sources/WorkspaceTemplateParameterPrompt.swift b/Sources/WorkspaceActionParameterEditor.swift similarity index 64% rename from Sources/WorkspaceTemplateParameterPrompt.swift rename to Sources/WorkspaceActionParameterEditor.swift index 0c479c51d123..27d6e1c95bae 100644 --- a/Sources/WorkspaceTemplateParameterPrompt.swift +++ b/Sources/WorkspaceActionParameterEditor.swift @@ -2,48 +2,44 @@ import AppKit import CmuxFoundation import Foundation -/// Shared parameter collection for every interactive workspace-template launch. +/// Edits the values persisted for an inline workspace layout's template parameters. @MainActor -struct WorkspaceTemplateParameterPrompt { +struct WorkspaceActionParameterEditor { private let processEnvironment: [String: String] init(processEnvironment: [String: String]) { self.processEnvironment = processEnvironment } - /// Requests editable values when a definition explicitly enables templates. - /// The completion receives `nil` when the user cancels. + /// Presents the explicit edit flow and returns false when the layout has no parameters. @discardableResult - func requestParameters( - for definition: CmuxWorkspaceDefinition, + func present( + definition: CmuxWorkspaceDefinition, displayName: String, - presentingWindow: NSWindow?, + presentingWindow: NSWindow, completion: @escaping ([String: String]?) -> Void ) -> Bool { let inputs = definition.templateParameterInputs( processEnvironment: processEnvironment ) - guard !inputs.isEmpty else { - completion([:]) - return true - } + guard !inputs.isEmpty else { return false } let alert = NSAlert() alert.messageText = String( - localized: "dialog.workspaceTemplate.configure.title", - defaultValue: "Configure Workspace Parameters" + localized: "dialog.workspaceLayoutParameters.edit.title", + defaultValue: "Edit Layout Parameters" ) let messageFormat = String( - localized: "dialog.workspaceTemplate.configure.message", - defaultValue: "Set values for “%@” before creating the workspace." + localized: "dialog.workspaceLayoutParameters.edit.message", + defaultValue: "Changes are saved to “%@” and used automatically each time you open this layout." ) alert.informativeText = String.localizedStringWithFormat( messageFormat, displayName ) alert.addButton(withTitle: String( - localized: "dialog.workspaceTemplate.configure.confirm", - defaultValue: "Create Workspace" + localized: "dialog.workspaceLayoutParameters.edit.confirm", + defaultValue: "Save Changes" )) alert.addButton(withTitle: String( localized: "common.cancel", @@ -52,11 +48,10 @@ struct WorkspaceTemplateParameterPrompt { let fields = makeFields(inputs) alert.accessoryView = makeAccessoryView(inputs: inputs, fields: fields) - alert.window.initialFirstResponder = inputs.firstIndex(where: { - $0.suggestedValue == nil - }).flatMap { fields[inputs[$0].name] } ?? fields[inputs[0].name] + let initialInput = inputs.first(where: { $0.suggestedValue == nil }) ?? inputs[0] + alert.window.initialFirstResponder = fields[initialInput.name] - let finish: (NSApplication.ModalResponse) -> Void = { response in + alert.beginSheetModal(for: presentingWindow) { response in guard response == .alertFirstButtonReturn else { completion(nil) return @@ -65,12 +60,6 @@ struct WorkspaceTemplateParameterPrompt { fields[input.name].map { (input.name, $0.stringValue) } })) } - - if let window = presentingWindow ?? NSApp.keyWindow ?? NSApp.mainWindow { - alert.beginSheetModal(for: window, completionHandler: finish) - } else { - finish(runCmuxModalAlert(alert)) - } return true } @@ -81,15 +70,15 @@ struct WorkspaceTemplateParameterPrompt { let field = NSTextField(string: input.suggestedValue ?? "") field.placeholderString = input.suggestedValue == nil ? String( - localized: "dialog.workspaceTemplate.configure.placeholder", + localized: "dialog.workspaceLayoutParameters.edit.placeholder", defaultValue: "Enter a value" ) : nil field.identifier = NSUserInterfaceItemIdentifier( - "workspaceTemplate.parameter.\(input.name)" + "workspaceLayoutParameters.value.\(input.name)" ) field.setAccessibilityLabel(input.name) - field.widthAnchor.constraint(equalToConstant: 300).isActive = true + field.widthAnchor.constraint(equalToConstant: 320).isActive = true return (input.name, field) }) } diff --git a/Sources/WorkspaceTemplateErrorPresenter.swift b/Sources/WorkspaceTemplateErrorPresenter.swift index c1cc1b8846e1..1c4d25a36821 100644 --- a/Sources/WorkspaceTemplateErrorPresenter.swift +++ b/Sources/WorkspaceTemplateErrorPresenter.swift @@ -11,7 +11,7 @@ struct WorkspaceTemplateErrorPresenter { if case CmuxTemplateResolutionError.missingVariables(let names) = error { let format = String( localized: "dialog.workspaceTemplate.missingParameters.message", - defaultValue: "Missing values for: %@" + defaultValue: "Missing values for: %@. If this layout appears in the workspace menu, choose Manage Layouts → Edit Layout Parameters. Otherwise, add the values to params in its configuration file." ) message = String.localizedStringWithFormat(format, names.joined(separator: ", ")) } else { diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index 6722b11b5e39..0451d5318ce5 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -1839,6 +1839,9 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources A5001406 /* Workspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5001416 /* Workspace.swift */; }; 7D77A0EBBE3D8E05CDC16229 /* WorkspaceActionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5CC15CEAA80B779ADEE78AA /* WorkspaceActionDispatcher.swift */; }; 7F0A0E04A8CADC84BB4F1DF7 /* WorkspaceActionDispatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF7347934AB1BD387686EE43 /* WorkspaceActionDispatcherTests.swift */; }; + 805900000000000000000011 /* WorkspaceActionParameterEditBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000012 /* WorkspaceActionParameterEditBox.swift */; }; + 80590000000000000000000D /* WorkspaceActionParameterEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80590000000000000000000E /* WorkspaceActionParameterEditor.swift */; }; + 80590000000000000000000F /* WorkspaceActionParameterEditorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000010 /* WorkspaceActionParameterEditorTests.swift */; }; A5FB1313 /* WorkspaceActionSaveDialogAccessory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FB1314 /* WorkspaceActionSaveDialogAccessory.swift */; }; C7D41E01 /* WorkspaceActionSaveDialogAccessoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7D41E02 /* WorkspaceActionSaveDialogAccessoryTests.swift */; }; D7AB00000000000000000011 /* WorkspaceAdjacentPaneMoveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7AB00000000000000000012 /* WorkspaceAdjacentPaneMoveTests.swift */; }; @@ -1902,8 +1905,6 @@ C0DE71B10000000000000001 /* AppDelegate+AgentChatNotifications.swift in Sources E30750000000000000000002 /* WorkspaceTabColorResolution.swift in Sources */ = {isa = PBXBuildFile; fileRef = E30750000000000000000001 /* WorkspaceTabColorResolution.swift */; }; E3B7A4000000000000000001 /* WorkspaceTabColorSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */; }; 805900000000000000000007 /* WorkspaceTemplateErrorPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */; }; - 80590000000000000000000D /* WorkspaceTemplateParameterPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */; }; - 80590000000000000000000F /* WorkspaceTemplateParameterPromptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805900000000000000000010 /* WorkspaceTemplateParameterPromptTests.swift */; }; 6342F0C10000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */; }; 6047C0DE6047C0DE60470001 /* WorkspaceTerminalTabWorkingDirectoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */; }; 634AA6233A5BBF781FE83E89 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */; }; @@ -3742,6 +3743,9 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = A5001416 /* Workspace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Workspace.swift; sourceTree = "<group>"; }; C5CC15CEAA80B779ADEE78AA /* WorkspaceActionDispatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceActionDispatcher.swift; sourceTree = "<group>"; }; EF7347934AB1BD387686EE43 /* WorkspaceActionDispatcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceActionDispatcherTests.swift; sourceTree = "<group>"; }; + 805900000000000000000012 /* WorkspaceActionParameterEditBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceActionParameterEditBox.swift; sourceTree = "<group>"; }; + 80590000000000000000000E /* WorkspaceActionParameterEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceActionParameterEditor.swift; sourceTree = "<group>"; }; + 805900000000000000000010 /* WorkspaceActionParameterEditorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceActionParameterEditorTests.swift; sourceTree = "<group>"; }; A5FB1314 /* WorkspaceActionSaveDialogAccessory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceActionSaveDialogAccessory.swift; sourceTree = "<group>"; }; C7D41E02 /* WorkspaceActionSaveDialogAccessoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceActionSaveDialogAccessoryTests.swift; sourceTree = "<group>"; }; D7AB00000000000000000012 /* WorkspaceAdjacentPaneMoveTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceAdjacentPaneMoveTests.swift; sourceTree = "<group>"; }; @@ -3805,8 +3809,6 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E30750000000000000000001 /* WorkspaceTabColorResolution.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorResolution.swift; sourceTree = "<group>"; }; E3B7A4000000000000000002 /* WorkspaceTabColorSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTabColorSettings.swift; sourceTree = "<group>"; }; 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateErrorPresenter.swift; sourceTree = "<group>"; }; - 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateParameterPrompt.swift; sourceTree = "<group>"; }; - 805900000000000000000010 /* WorkspaceTemplateParameterPromptTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTemplateParameterPromptTests.swift; sourceTree = "<group>"; }; 6342F0C20000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalFocusRecoveryTests.swift; sourceTree = "<group>"; }; 6047C0DE6047C0DE60470002 /* WorkspaceTerminalTabWorkingDirectoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalTabWorkingDirectoryTests.swift; sourceTree = "<group>"; }; 08850489C70ECFACA540C2F3 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceTerminalWorkingDirectoryFallbackTests.swift; sourceTree = "<group>"; }; @@ -4136,7 +4138,8 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 805900000000000000000004 /* CmuxWorkspaceDefinition+Parameterization.swift */, 805900000000000000000006 /* TerminalController+WorkspaceTemplateParameters.swift */, 805900000000000000000008 /* WorkspaceTemplateErrorPresenter.swift */, - 80590000000000000000000E /* WorkspaceTemplateParameterPrompt.swift */, + 80590000000000000000000E /* WorkspaceActionParameterEditor.swift */, + 805900000000000000000012 /* WorkspaceActionParameterEditBox.swift */, 3023B1003023B1003023B100 /* ConfigSource.swift */, 3023B1013023B1013023B101 /* ConfigSettingsView.swift */, A11EAB000000000000000001 /* AppearanceSettings.swift */, @@ -5686,7 +5689,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 5B0C00010000000000000004 /* SidebarResizerOcclusionResolverTests.swift */, 5B0C00010000000000000006 /* PortalDividerCursorOcclusionTests.swift */, C0DE1A080000000000000002 /* SavedLayoutDefinitionTests.swift */, - 805900000000000000000010 /* WorkspaceTemplateParameterPromptTests.swift */, + 805900000000000000000010 /* WorkspaceActionParameterEditorTests.swift */, C0DE1A070000000000000002 /* SavedLayoutStoreTests.swift */, 5830CA11BAC0000000000001 /* SocketCallbackAwaiterMainThreadTests.swift */, 5C0011AA0000000000000002 /* GhosttyScrollPreciseBoostTests.swift */, @@ -7439,6 +7442,8 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E3B7A400000000000000020A /* Workspace+WorkspaceSurfaceTreeReading.swift in Sources */, A5001406 /* Workspace.swift in Sources */, 7D77A0EBBE3D8E05CDC16229 /* WorkspaceActionDispatcher.swift in Sources */, + 805900000000000000000011 /* WorkspaceActionParameterEditBox.swift in Sources */, + 80590000000000000000000D /* WorkspaceActionParameterEditor.swift in Sources */, A5FB1313 /* WorkspaceActionSaveDialogAccessory.swift in Sources */, A11EAD000000000000000000 /* WorkspaceAppearanceResolution.swift in Sources */, A5F0C0010000000000000002 /* WorkspaceAttentionFlashRingView.swift in Sources */, @@ -7477,7 +7482,6 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = E30750000000000000000002 /* WorkspaceTabColorResolution.swift in Sources */, E3B7A4000000000000000001 /* WorkspaceTabColorSettings.swift in Sources */, 805900000000000000000007 /* WorkspaceTemplateErrorPresenter.swift in Sources */, - 80590000000000000000000D /* WorkspaceTemplateParameterPrompt.swift in Sources */, 5732A0075732A0075732A007 /* WorkspaceTitlebarModeLayer.swift in Sources */, 7D7D087CAACD917D8163F844 /* WorkspaceTodoFeature.swift in Sources */, 249969F7EAC03A99E20C753B /* WorkspaceTodoPanel.swift in Sources */, @@ -8116,6 +8120,7 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 606600010000000000000001 /* WindowTerminalHostViewTitlebarHitTests.swift in Sources */, 604500100000000000000003 /* WindowTitleTemplateTests.swift in Sources */, 7F0A0E04A8CADC84BB4F1DF7 /* WorkspaceActionDispatcherTests.swift in Sources */, + 80590000000000000000000F /* WorkspaceActionParameterEditorTests.swift in Sources */, C7D41E01 /* WorkspaceActionSaveDialogAccessoryTests.swift in Sources */, D7AB00000000000000000011 /* WorkspaceAdjacentPaneMoveTests.swift in Sources */, A11EAE000000000000000000 /* WorkspaceAppearanceConfigResolutionTests.swift in Sources */, @@ -8138,7 +8143,6 @@ C0DE71B10000000000000002 /* AppDelegate+AgentChatNotifications.swift */ = {isa = 6B524A0CB34FD46A771335AB /* WorkspaceSplitStartupCommandTests.swift in Sources */, F6120000A1B2C3D4E5F60718 /* WorkspaceSSHFishShellTests.swift in Sources */, FA000000A1B2C3D4E5F60718 /* WorkspaceStressProfileTests.swift in Sources */, - 80590000000000000000000F /* WorkspaceTemplateParameterPromptTests.swift in Sources */, 6342F0C10000000000000001 /* WorkspaceTerminalFocusRecoveryTests.swift in Sources */, 6047C0DE6047C0DE60470001 /* WorkspaceTerminalTabWorkingDirectoryTests.swift in Sources */, 634AA6233A5BBF781FE83E89 /* WorkspaceTerminalWorkingDirectoryFallbackTests.swift in Sources */, diff --git a/cmuxTests/CmuxConfigActionSaverTests.swift b/cmuxTests/CmuxConfigActionSaverTests.swift index e0d48bb6657c..0cae05c14a1b 100644 --- a/cmuxTests/CmuxConfigActionSaverTests.swift +++ b/cmuxTests/CmuxConfigActionSaverTests.swift @@ -177,6 +177,54 @@ struct CmuxConfigActionSaverTests { #expect(permissions.intValue & 0o777 == 0o600) } + @Test func updateWorkspaceParametersPreservesActionAndComments() throws { + let root = try temporaryRoot("update-parameters") + defer { try? FileManager.default.removeItem(at: root) } + let configPath = root.appendingPathComponent("cmux.json").path + try """ + { + "actions": { + // keep the user's layout note + "ticket-dev": { + "type": "workspace", + "title": "Ticket Dev", + "subtitle": "Keep this metadata", + "workspace": { + "name": "{{ticket}} Dev", + "cwd": "{{projectDir}}", + "params": { + "ticket": "OLD-1" // keep the parameter note + } + } + } + } + } + """.write(toFile: configPath, atomically: true, encoding: .utf8) + + try CmuxConfigActionSaver.updateWorkspaceActionParameters( + id: "ticket-dev", + parameters: [ + "ticket": "CMUX-8059", + "projectDir": "/tmp/cmux", + ], + globalConfigPath: configPath + ) + + let saved = try String(contentsOfFile: configPath, encoding: .utf8) + #expect(saved.contains("// keep the user's layout note")) + #expect(saved.contains("// keep the parameter note")) + let sanitized = try JSONCParser.preprocess(data: Data(saved.utf8)) + let config = try JSONDecoder().decode(CmuxConfigFile.self, from: sanitized) + let action = try #require(config.actions["ticket-dev"]) + #expect(action.title == "Ticket Dev") + #expect(action.subtitle == "Keep this metadata") + let definition = try #require(action.action?.inlineWorkspace?.definition) + #expect(definition.params == [ + "ticket": "CMUX-8059", + "projectDir": "/tmp/cmux", + ]) + } + // MARK: - Deleting @Test func deleteRemovesActionAndPreservesComments() throws { diff --git a/cmuxTests/CmuxConfigNewWorkspaceMenuTests.swift b/cmuxTests/CmuxConfigNewWorkspaceMenuTests.swift index 034d10263635..c35b6dc8d511 100644 --- a/cmuxTests/CmuxConfigNewWorkspaceMenuTests.swift +++ b/cmuxTests/CmuxConfigNewWorkspaceMenuTests.swift @@ -268,30 +268,32 @@ struct CmuxConfigNewWorkspaceMenuTests { @MainActor @Test func renderedContextMenuGroupsCreateLayoutsAndManagementTail() throws { - let (store, root) = try loadStore(globalJSON: twoLayoutConfig(defaultActionID: "review-layout")) - defer { try? FileManager.default.removeItem(at: root) } + try withAgentChatUIFlag(true) { + let (store, root) = try loadStore(globalJSON: twoLayoutConfig(defaultActionID: "review-layout")) + defer { try? FileManager.default.removeItem(at: root) } - try withNewWorkspaceContextMenu(store: store) { menu in - let layoutsHeader = String(localized: "menu.newWorkspace.layoutsHeader", defaultValue: "Layouts") - let headerIndex = try #require(menu.items.firstIndex { $0.title == layoutsHeader }) - let saveTitle = String(localized: "menu.newWorkspace.saveWorkspaceAsLayout", defaultValue: "Save Workspace as Layout…") - let saveIndex = try #require(menu.items.firstIndex { $0.title == saveTitle }) - let newWorkspaceIndex = try #require(firstContextMenuIndex(menu, actionID: CmuxSurfaceTabBarBuiltInAction.newWorkspace.configID)) - let agentChatIndex = try #require(firstContextMenuIndex(menu, actionID: CmuxSurfaceTabBarBuiltInAction.newAgentChat.configID)) - let reviewIndex = try #require(firstContextMenuIndex(menu, actionID: "review-layout")) - let devIndex = try #require(firstContextMenuIndex(menu, actionID: "dev-layout")) - - #expect(newWorkspaceIndex < headerIndex) - #expect(agentChatIndex < headerIndex) - #expect(headerIndex < reviewIndex) - #expect(headerIndex < devIndex) - #expect(reviewIndex < saveIndex) - #expect(devIndex < saveIndex) - let layoutRange = (headerIndex + 1)..<saveIndex - let nonLayoutIDs = menu.items[layoutRange].compactMap(contextMenuActionID).filter { - $0 != "review-layout" && $0 != "dev-layout" + try withNewWorkspaceContextMenu(store: store) { menu in + let layoutsHeader = String(localized: "menu.newWorkspace.layoutsHeader", defaultValue: "Layouts") + let headerIndex = try #require(menu.items.firstIndex { $0.title == layoutsHeader }) + let saveTitle = String(localized: "menu.newWorkspace.saveWorkspaceAsLayout", defaultValue: "Save Workspace as Layout…") + let saveIndex = try #require(menu.items.firstIndex { $0.title == saveTitle }) + let newWorkspaceIndex = try #require(firstContextMenuIndex(menu, actionID: CmuxSurfaceTabBarBuiltInAction.newWorkspace.configID)) + let agentChatIndex = try #require(firstContextMenuIndex(menu, actionID: CmuxSurfaceTabBarBuiltInAction.newAgentChat.configID)) + let reviewIndex = try #require(firstContextMenuIndex(menu, actionID: "review-layout")) + let devIndex = try #require(firstContextMenuIndex(menu, actionID: "dev-layout")) + + #expect(newWorkspaceIndex < headerIndex) + #expect(agentChatIndex < headerIndex) + #expect(headerIndex < reviewIndex) + #expect(headerIndex < devIndex) + #expect(reviewIndex < saveIndex) + #expect(devIndex < saveIndex) + let layoutRange = (headerIndex + 1)..<saveIndex + let nonLayoutIDs = menu.items[layoutRange].compactMap(contextMenuActionID).filter { + $0 != "review-layout" && $0 != "dev-layout" + } + #expect(nonLayoutIDs.isEmpty) } - #expect(nonLayoutIDs.isEmpty) } } @@ -365,7 +367,63 @@ struct CmuxConfigNewWorkspaceMenuTests { #expect(submenu.items.contains { $0.title == String(localized: "menu.newWorkspace.deleteLayoutSubmenu", defaultValue: "Delete Workspace Layout") }) let deleteIDs = submenu.items.compactMap { ($0.representedObject as? WorkspaceActionDeleteBox)?.actionID } #expect(deleteIDs == ["dev-layout", "review-layout"]) - #expect(submenu.items.allSatisfy { $0.submenu == nil }) + #expect(submenu.items.filter { + $0.title != String( + localized: "menu.newWorkspace.editLayoutParametersSubmenu", + defaultValue: "Edit Layout Parameters" + ) + }.allSatisfy { $0.submenu == nil }) + } + } + + @MainActor + @Test func renderedContextMenuOffersExplicitParameterEditing() throws { + let (store, root) = try loadStore(globalJSON: """ + { + "actions": { + "static-layout": { + "type": "workspace", + "title": "Static Layout", + "workspace": { "name": "Static" } + }, + "ticket-layout": { + "type": "workspace", + "title": "Ticket Layout", + "workspace": { + "name": "{{ticket}} Dev", + "params": { "ticket": "CMUX-8059" } + } + } + } + } + """) + defer { try? FileManager.default.removeItem(at: root) } + + try withNewWorkspaceContextMenu(store: store) { menu in + let manage = try #require(menu.items.first { + $0.title == String( + localized: "menu.newWorkspace.manageLayouts", + defaultValue: "Manage Layouts" + ) + }) + let submenu = try #require(manage.submenu) + let editParameters = try #require(submenu.items.first { + $0.title == String( + localized: "menu.newWorkspace.editLayoutParametersSubmenu", + defaultValue: "Edit Layout Parameters" + ) + }) + let editParametersSubmenu = try #require(editParameters.submenu) + let editItems = editParametersSubmenu.items.compactMap { item -> (NSMenuItem, WorkspaceActionParameterEditBox)? in + guard let box = item.representedObject as? WorkspaceActionParameterEditBox else { + return nil + } + return (item, box) + } + #expect(editItems.map { $0.1.actionID } == ["ticket-layout"]) + let editItem = try #require(editItems.first?.0) + #expect(editItem.title == "Ticket Layout…") + #expect(editItem.action == Selector(("editWorkspaceConfigActionParametersMenuItem:"))) } } diff --git a/cmuxTests/WorkspaceTemplateParameterPromptTests.swift b/cmuxTests/WorkspaceActionParameterEditorTests.swift similarity index 80% rename from cmuxTests/WorkspaceTemplateParameterPromptTests.swift rename to cmuxTests/WorkspaceActionParameterEditorTests.swift index ad2f2fdc4d2e..7be3273afee0 100644 --- a/cmuxTests/WorkspaceTemplateParameterPromptTests.swift +++ b/cmuxTests/WorkspaceActionParameterEditorTests.swift @@ -10,15 +10,16 @@ import Testing @MainActor @Suite -struct WorkspaceTemplateParameterPromptTests { +struct WorkspaceActionParameterEditorTests { @Test - func parameterFormHasAVisibleResolvedSize() throws { + func parameterEditorHasVisibleEditableFields() throws { let presentingWindow = NSWindow( contentRect: NSRect(x: 0, y: 0, width: 640, height: 480), styleMask: [.titled], backing: .buffered, defer: false ) + presentingWindow.isReleasedWhenClosed = false presentingWindow.makeKeyAndOrderFront(nil) defer { if let sheet = presentingWindow.attachedSheet { @@ -38,10 +39,10 @@ struct WorkspaceTemplateParameterPromptTests { "projectDir": "/tmp/cmux", ] ) - let handled = WorkspaceTemplateParameterPrompt( + let handled = WorkspaceActionParameterEditor( processEnvironment: [:] - ).requestParameters( - for: definition, + ).present( + definition: definition, displayName: "Parameter UI Test", presentingWindow: presentingWindow, completion: { _ in } @@ -56,10 +57,11 @@ struct WorkspaceTemplateParameterPromptTests { let fields = descendants(of: grid).compactMap { $0 as? NSTextField } .filter(\.isEditable) - #expect(grid.frame.width >= 300) + #expect(grid.frame.width >= 320) #expect(grid.frame.height > 0) #expect(fields.count == 2) - #expect(fields.allSatisfy { $0.frame.width >= 300 }) + #expect(fields.map(\.stringValue).sorted() == ["/tmp/cmux", "CMUX-8059"]) + #expect(fields.allSatisfy { $0.frame.width >= 320 }) #expect(fields.allSatisfy { $0.frame.height > 0 }) } diff --git a/docs/cli-contract.md b/docs/cli-contract.md index 93ba0d47f242..e32317a94b66 100644 --- a/docs/cli-contract.md +++ b/docs/cli-contract.md @@ -236,12 +236,15 @@ literal `{{name}}`. Names use the same grammar as custom-command parameters: they start with a letter or `_` and continue with letters, digits, `_`, or `-`. File-backed workspace definitions opt into placeholder handling by declaring a -`params` object; use `"params": {}` when every value should be entered at -launch. Selecting an opted-in configured layout or saved layout in the cmux UI -opens a parameter sheet with one editable field per placeholder, prefilled from -the precedence rules below. Definitions without `params` preserve existing -`{{...}}` text literally. Socket `workspace.create` requests opt in by supplying -at least one `template_params` value. +`params` object. Values stored there are used automatically when the layout is +opened from the cmux UI; choosing a layout never interrupts creation with a +parameter prompt. For global inline workspace actions, edit those saved values +from **New Workspace → Manage Layouts → Edit Layout Parameters**. Project-local +actions, `workspaceCommand` definitions, and `~/.config/cmux/layouts.json` +entries remain source-owned and can be edited in their configuration file. +Definitions without `params` preserve existing `{{...}}` text literally. Socket +`workspace.create` requests opt in by supplying at least one `template_params` +value. Parameterization covers the workspace `name`, `cwd`, `setup`, and `env` values; surface `name`, `command`, `cwd`, `env` values, and `url`; and the corresponding diff --git a/web/data/cmux.schema.json b/web/data/cmux.schema.json index a24b7c6ea4c1..1b8d8922cc7f 100644 --- a/web/data/cmux.schema.json +++ b/web/data/cmux.schema.json @@ -66,7 +66,7 @@ }, "commands": { "title": "commands", - "description": "Custom shell commands and workspace layout definitions. Workspace definitions support name, cwd, color, env, layout, setup, and params defaults for launch-time {{variable}} placeholders.", + "description": "Custom shell commands and workspace layout definitions. Workspace definitions support name, cwd, color, env, layout, setup, and saved params values for launch-time {{variable}} placeholders.", "type": "array", "items": { "type": "object", @@ -1778,7 +1778,7 @@ "additionalProperties": { "type": "string" }, - "description": "Opts the workspace into {{variable}} placeholder handling and supplies default values. Use an empty object to request every value in the launch UI. Explicit invocation template_params/--param values take precedence." + "description": "Opts the workspace into {{variable}} placeholder handling and supplies values used automatically by UI launches. Global inline workspace actions can edit these under Manage Layouts > Edit Layout Parameters. Explicit invocation template_params/--param values take precedence." }, "workspaceLayoutNode": { "oneOf": [ diff --git a/web/messages/ar.json b/web/messages/ar.json index bce4d363a453..905b2f8f73f5 100644 --- a/web/messages/ar.json +++ b/web/messages/ar.json @@ -1083,7 +1083,7 @@ "fullExample": "مثال كامل", "wsFieldParams": "القيم الافتراضية لمتغيرات قالب مساحة العمل", "parameterizedLayouts": "تخطيطات مساحة عمل ذات معلمات", - "parameterizedLayoutsDesc": "استخدم <variable>{variableSyntax}</variable> أو <defaultValue>{defaultSyntax}</defaultValue> في العناوين والمسارات وقيم البيئة وأوامر الإعداد والطرفية وروابط المتصفح. أضف <escaped>{escapedSyntax}</escaped> لإبقاء العنصر النائب حرفياً. يوفر كائن <params>params</params> قيماً افتراضية قابلة لإعادة الاستخدام.", + "parameterizedLayoutsDesc": "أضف كائن <params>params</params> لتمكين معلمات مساحة العمل، ثم استخدم <variable>{variableSyntax}</variable> أو <defaultValue>{defaultSyntax}</defaultValue> في العناوين والمسارات وقيم البيئة وأوامر الإعداد والطرفية وروابط المتصفح. أضف <escaped>{escapedSyntax}</escaped> لإبقاء العنصر النائب حرفياً. تُستخدم قيم كائن <params>params</params> تلقائياً في كل مرة. وللإجراءات المضمنة العامة، عدّلها من «مساحة عمل جديدة ← إدارة التخطيطات ← تحرير معلمات التخطيط».", "parameterizedLayoutsPrecedence": "ترتيب الحل هو <explicit>قيم الاستدعاء الصريحة</explicit>، ثم افتراضيات <params>params</params>، ثم <env>env</env> الحرفية لمساحة العمل، ثم <process>بيئة عملية cmux</process>، وأخيراً <inline>الافتراضي المضمّن</inline>. تؤدي القيم المطلوبة المفقودة إلى إلغاء التشغيل كله قبل إنشاء أي مساحة عمل.", "parameterizedLayoutsCLI": "استخدم <paramValue>--param KEY=VALUE</paramValue> أو <paramEnv>--param KEY</paramEnv> مع <workspaceCreate>cmux workspace create</workspaceCreate> و <layoutOpen>cmux layout open</layoutOpen>. يستورد النموذج بلا قيمة متغير الصدفة المستدعية. ترسل عملاء المقبس template_params، وتعيد القيم المفقودة <missing>missing_parameters</missing>.", "restartNew": "إنشاء مساحة عمل جديدة (الافتراضي)" diff --git a/web/messages/bs.json b/web/messages/bs.json index 43c37a0eb17a..21c07c5dbfb6 100644 --- a/web/messages/bs.json +++ b/web/messages/bs.json @@ -1083,7 +1083,7 @@ "fullExample": "Potpuni primjer", "wsFieldParams": "Zadane vrijednosti varijabli predloška radnog prostora", "parameterizedLayouts": "Parametrizirani rasporedi radnog prostora", - "parameterizedLayoutsDesc": "Koristite <variable>{variableSyntax}</variable> ili <defaultValue>{defaultSyntax}</defaultValue> u naslovima, putanjama, vrijednostima okruženja, naredbama za postavljanje, terminalskim naredbama i URL-ovima preglednika. Dodajte <escaped>{escapedSyntax}</escaped> da rezervirano mjesto ostane doslovno. Objekt <params>params</params> daje ponovo upotrebljive zadane vrijednosti.", + "parameterizedLayoutsDesc": "Dodajte objekt <params>params</params> da omogućite parametre radnog prostora, zatim koristite <variable>{variableSyntax}</variable> ili <defaultValue>{defaultSyntax}</defaultValue> u naslovima, putanjama, vrijednostima okruženja, naredbama za postavljanje, terminalskim naredbama i URL-ovima preglednika. Dodajte <escaped>{escapedSyntax}</escaped> da rezervirano mjesto ostane doslovno. Vrijednosti u objektu <params>params</params> automatski se koriste svaki put. Za globalne ugrađene akcije uredite ih putem Novi radni prostor → Upravljaj rasporedima → Uredi parametre rasporeda.", "parameterizedLayoutsPrecedence": "Redoslijed razrješavanja je <explicit>izričite vrijednosti poziva</explicit>, zadane vrijednosti <params>params</params>, doslovni <env>env</env> radnog prostora, <process>okruženje cmux procesa</process>, pa <inline>ugrađena zadana vrijednost</inline>. Nedostajuće obavezne vrijednosti prekidaju cijelo pokretanje prije stvaranja radnog prostora.", "parameterizedLayoutsCLI": "Koristite <paramValue>--param KEY=VALUE</paramValue> ili <paramEnv>--param KEY</paramEnv> uz <workspaceCreate>cmux workspace create</workspaceCreate> i <layoutOpen>cmux layout open</layoutOpen>. Oblik bez vrijednosti uvozi varijablu pozivajuće ljuske. Socket klijenti šalju template_params; nedostajuće vrijednosti vraćaju <missing>missing_parameters</missing>.", "restartNew": "Kreiraj novi radni prostor (zadano)" diff --git a/web/messages/da.json b/web/messages/da.json index f702141df6bd..690eec543459 100644 --- a/web/messages/da.json +++ b/web/messages/da.json @@ -1083,7 +1083,7 @@ "fullExample": "Fuldt eksempel", "wsFieldParams": "Standardværdier for workspace-skabelonvariabler", "parameterizedLayouts": "Parameteriserede workspace-layouts", - "parameterizedLayoutsDesc": "Brug <variable>{variableSyntax}</variable> eller <defaultValue>{defaultSyntax}</defaultValue> i titler, stier, miljøværdier, opsætningskommandoer, terminalkommandoer og browser-URL'er. Sæt <escaped>{escapedSyntax}</escaped> foran for at bevare en pladsholder bogstaveligt. Objektet <params>params</params> angiver genanvendelige standarder.", + "parameterizedLayoutsDesc": "Tilføj et <params>params</params>-objekt for at aktivere arbejdsområdeparametre, og brug derefter <variable>{variableSyntax}</variable> eller <defaultValue>{defaultSyntax}</defaultValue> i titler, stier, miljøværdier, opsætningskommandoer, terminalkommandoer og browser-URL'er. Sæt <escaped>{escapedSyntax}</escaped> foran for at bevare en pladsholder bogstaveligt. Værdierne i <params>params</params> bruges automatisk hver gang. For globale indlejrede handlinger kan de redigeres under Nyt arbejdsområde → Administrer layouts → Rediger layoutparametre.", "parameterizedLayoutsPrecedence": "Rækkefølgen er <explicit>eksplicitte kaldværdier</explicit>, standarder i <params>params</params>, bogstaveligt workspace-<env>env</env>, <process>cmux-processens miljø</process> og til sidst <inline>inline-standarden</inline>. Manglende obligatoriske værdier afbryder hele starten, før et workspace oprettes.", "parameterizedLayoutsCLI": "Brug <paramValue>--param KEY=VALUE</paramValue> eller <paramEnv>--param KEY</paramEnv> med <workspaceCreate>cmux workspace create</workspaceCreate> og <layoutOpen>cmux layout open</layoutOpen>. Formen uden værdi importerer variablen fra den kaldende shell. Socketklienter sender template_params; manglende værdier returnerer <missing>missing_parameters</missing>.", "restartNew": "Opret et nyt workspace (standard)" diff --git a/web/messages/de.json b/web/messages/de.json index ff09dfcfa379..41b7d1a996fe 100644 --- a/web/messages/de.json +++ b/web/messages/de.json @@ -1083,7 +1083,7 @@ "fullExample": "Vollständiges Beispiel", "wsFieldParams": "Standardwerte für Workspace-Vorlagenvariablen", "parameterizedLayouts": "Parametrisierte Workspace-Layouts", - "parameterizedLayoutsDesc": "Verwende <variable>{variableSyntax}</variable> oder <defaultValue>{defaultSyntax}</defaultValue> in Titeln, Pfaden, Umgebungswerten, Setup-Befehlen, Terminalbefehlen und Browser-URLs. Mit <escaped>{escapedSyntax}</escaped> bleibt ein Platzhalter wörtlich erhalten. Das Objekt <params>params</params> liefert wiederverwendbare Standardwerte.", + "parameterizedLayoutsDesc": "Füge ein <params>params</params>-Objekt hinzu, um Arbeitsbereichsparameter zu aktivieren, und verwende dann <variable>{variableSyntax}</variable> oder <defaultValue>{defaultSyntax}</defaultValue> in Titeln, Pfaden, Umgebungswerten, Setup-Befehlen, Terminalbefehlen und Browser-URLs. Mit <escaped>{escapedSyntax}</escaped> bleibt ein Platzhalter wörtlich erhalten. Die Werte in <params>params</params> werden bei jedem Öffnen automatisch verwendet. Für globale Inline-Aktionen bearbeitest du sie unter Neuer Arbeitsbereich → Layouts verwalten → Layoutparameter bearbeiten.", "parameterizedLayoutsPrecedence": "Die Auflösungsreihenfolge ist <explicit>explizite Aufrufwerte</explicit>, Vorgaben aus <params>params</params>, wörtliches Workspace-<env>env</env>, die <process>Umgebung des cmux-Prozesses</process> und zuletzt der <inline>Inline-Standardwert</inline>. Fehlende Pflichtwerte brechen den gesamten Start ab, bevor ein Workspace erstellt wird.", "parameterizedLayoutsCLI": "Verwende <paramValue>--param KEY=VALUE</paramValue> oder <paramEnv>--param KEY</paramEnv> mit <workspaceCreate>cmux workspace create</workspaceCreate> und <layoutOpen>cmux layout open</layoutOpen>. Die Form ohne Wert importiert die Variable der aufrufenden Shell. Socket-Clients senden template_params; fehlende Werte liefern <missing>missing_parameters</missing>.", "restartNew": "Neuen Workspace erstellen (Standard)" diff --git a/web/messages/en.json b/web/messages/en.json index 2b8fd8992c38..a82e0e766a19 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -1904,7 +1904,7 @@ "fullExample": "Full example", "wsFieldParams": "Enable workspace template variables and provide their default values", "parameterizedLayouts": "Parameterized workspace layouts", - "parameterizedLayoutsDesc": "Add a <params>params</params> object to enable workspace parameters, then use <variable>{variableSyntax}</variable> or <defaultValue>{defaultSyntax}</defaultValue> in workspace and surface titles, paths, environment values, setup commands, terminal commands, and browser URLs. Selecting the layout in cmux opens an editable parameter sheet prefilled from reusable defaults. Prefix <escaped>{escapedSyntax}</escaped> to keep a placeholder literal.", + "parameterizedLayoutsDesc": "Add a <params>params</params> object to enable workspace parameters, then use <variable>{variableSyntax}</variable> or <defaultValue>{defaultSyntax}</defaultValue> in workspace and surface titles, paths, environment values, setup commands, terminal commands, and browser URLs. Values in <params>params</params> are reused automatically. For global inline actions, edit them under New Workspace → Manage Layouts → Edit Layout Parameters. Prefix <escaped>{escapedSyntax}</escaped> to keep a placeholder literal.", "parameterizedLayoutsPrecedence": "Resolution order is <explicit>explicit invocation values</explicit>, <params>params</params> defaults, literal workspace <env>env</env>, the <process>cmux process environment</process>, then the <inline>inline default</inline>. Missing required values abort the whole launch before any workspace is created.", "parameterizedLayoutsCLI": "Use <paramValue>--param KEY=VALUE</paramValue> or <paramEnv>--param KEY</paramEnv> with <workspaceCreate>cmux workspace create</workspaceCreate> and <layoutOpen>cmux layout open</layoutOpen>. The value-less form imports an exported environment variable from the invoking shell. Socket clients send template_params; missing values return <missing>missing_parameters</missing>.", "restartNew": "Create a new workspace (default)", diff --git a/web/messages/es.json b/web/messages/es.json index 223ef2c744aa..09a208f52dd1 100644 --- a/web/messages/es.json +++ b/web/messages/es.json @@ -1083,7 +1083,7 @@ "fullExample": "Ejemplo completo", "wsFieldParams": "Valores predeterminados para variables de plantilla del workspace", "parameterizedLayouts": "Layouts de workspace parametrizados", - "parameterizedLayoutsDesc": "Usa <variable>{variableSyntax}</variable> o <defaultValue>{defaultSyntax}</defaultValue> en títulos, rutas, valores de entorno, comandos de preparación, comandos de terminal y URL del navegador. Anteponer <escaped>{escapedSyntax}</escaped> conserva un marcador literalmente. El objeto <params>params</params> proporciona valores predeterminados reutilizables.", + "parameterizedLayoutsDesc": "Añade un objeto <params>params</params> para activar los parámetros del espacio de trabajo y, a continuación, usa <variable>{variableSyntax}</variable> o <defaultValue>{defaultSyntax}</defaultValue> en títulos, rutas, valores de entorno, comandos de preparación, comandos de terminal y URL del navegador. Anteponer <escaped>{escapedSyntax}</escaped> conserva un marcador literalmente. Los valores de <params>params</params> se reutilizan automáticamente. Para las acciones globales en línea, edítalos en Nuevo espacio de trabajo → Administrar diseños → Editar parámetros de diseño.", "parameterizedLayoutsPrecedence": "El orden de resolución es <explicit>valores explícitos de la invocación</explicit>, valores de <params>params</params>, <env>env</env> literal del workspace, el <process>entorno del proceso cmux</process> y el <inline>valor predeterminado en línea</inline>. Si falta un valor obligatorio, se cancela todo el lanzamiento antes de crear el workspace.", "parameterizedLayoutsCLI": "Usa <paramValue>--param KEY=VALUE</paramValue> o <paramEnv>--param KEY</paramEnv> con <workspaceCreate>cmux workspace create</workspaceCreate> y <layoutOpen>cmux layout open</layoutOpen>. La forma sin valor importa la variable del shell invocador. Los clientes de socket envían template_params; los valores ausentes devuelven <missing>missing_parameters</missing>.", "restartNew": "Crear un workspace nuevo (por defecto)" diff --git a/web/messages/fr.json b/web/messages/fr.json index 23d6f81bde88..23c87b5e5293 100644 --- a/web/messages/fr.json +++ b/web/messages/fr.json @@ -1084,7 +1084,7 @@ "fullExample": "Exemple complet", "wsFieldParams": "Valeurs par défaut des variables de modèle du workspace", "parameterizedLayouts": "Layouts de workspace paramétrés", - "parameterizedLayoutsDesc": "Utilisez <variable>{variableSyntax}</variable> ou <defaultValue>{defaultSyntax}</defaultValue> dans les titres, chemins, valeurs d'environnement, commandes de préparation, commandes de terminal et URL du navigateur. Préfixez par <escaped>{escapedSyntax}</escaped> pour conserver un paramètre littéral. L'objet <params>params</params> fournit des valeurs par défaut réutilisables.", + "parameterizedLayoutsDesc": "Ajoutez un objet <params>params</params> pour activer les paramètres d’espace de travail, puis utilisez <variable>{variableSyntax}</variable> ou <defaultValue>{defaultSyntax}</defaultValue> dans les titres, chemins, valeurs d'environnement, commandes de préparation, commandes de terminal et URL du navigateur. Préfixez par <escaped>{escapedSyntax}</escaped> pour conserver un paramètre littéral. Les valeurs de <params>params</params> sont réutilisées automatiquement. Pour les actions intégrées globales, modifiez-les via Nouvel espace de travail → Gérer les mises en page → Modifier les paramètres de mise en page.", "parameterizedLayoutsPrecedence": "L'ordre de résolution est : <explicit>valeurs d'appel explicites</explicit>, valeurs de <params>params</params>, <env>env</env> littéral du workspace, <process>environnement du processus cmux</process>, puis <inline>valeur par défaut intégrée</inline>. Toute valeur obligatoire manquante annule le lancement avant la création du workspace.", "parameterizedLayoutsCLI": "Utilisez <paramValue>--param KEY=VALUE</paramValue> ou <paramEnv>--param KEY</paramEnv> avec <workspaceCreate>cmux workspace create</workspaceCreate> et <layoutOpen>cmux layout open</layoutOpen>. La forme sans valeur importe la variable du shell appelant. Les clients socket envoient template_params ; les valeurs manquantes renvoient <missing>missing_parameters</missing>.", "restartNew": "Créer un nouveau workspace (par défaut)" diff --git a/web/messages/it.json b/web/messages/it.json index 2f1eec2bcb70..2bbdd73d2673 100644 --- a/web/messages/it.json +++ b/web/messages/it.json @@ -1083,7 +1083,7 @@ "fullExample": "Esempio completo", "wsFieldParams": "Valori predefiniti per le variabili del modello workspace", "parameterizedLayouts": "Layout workspace parametrizzati", - "parameterizedLayoutsDesc": "Usa <variable>{variableSyntax}</variable> o <defaultValue>{defaultSyntax}</defaultValue> in titoli, percorsi, valori di ambiente, comandi di configurazione, comandi del terminale e URL del browser. Anteponi <escaped>{escapedSyntax}</escaped> per mantenere letterale un segnaposto. L'oggetto <params>params</params> fornisce valori predefiniti riutilizzabili.", + "parameterizedLayoutsDesc": "Aggiungi un oggetto <params>params</params> per abilitare i parametri dell’area di lavoro, quindi usa <variable>{variableSyntax}</variable> o <defaultValue>{defaultSyntax}</defaultValue> in titoli, percorsi, valori di ambiente, comandi di configurazione, comandi del terminale e URL del browser. Anteponi <escaped>{escapedSyntax}</escaped> per mantenere letterale un segnaposto. I valori in <params>params</params> vengono riutilizzati automaticamente. Per le azioni inline globali, modificali in Nuova area di lavoro → Gestisci layout → Modifica parametri di layout.", "parameterizedLayoutsPrecedence": "L'ordine di risoluzione è <explicit>valori espliciti di invocazione</explicit>, valori di <params>params</params>, <env>env</env> letterale del workspace, <process>ambiente del processo cmux</process> e infine <inline>valore predefinito inline</inline>. I valori obbligatori mancanti annullano l'intero avvio prima della creazione del workspace.", "parameterizedLayoutsCLI": "Usa <paramValue>--param KEY=VALUE</paramValue> o <paramEnv>--param KEY</paramEnv> con <workspaceCreate>cmux workspace create</workspaceCreate> e <layoutOpen>cmux layout open</layoutOpen>. La forma senza valore importa la variabile della shell chiamante. I client socket inviano template_params; i valori mancanti restituiscono <missing>missing_parameters</missing>.", "restartNew": "Crea un nuovo workspace (predefinito)" diff --git a/web/messages/ja.json b/web/messages/ja.json index 53eff49191d8..70853bf374d0 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -1827,7 +1827,7 @@ "fullExample": "完全な例", "wsFieldParams": "ワークスペーステンプレート変数を有効にして既定値を指定", "parameterizedLayouts": "パラメータ化されたワークスペースレイアウト", - "parameterizedLayoutsDesc": "<params>params</params> オブジェクトを追加してワークスペースパラメータを有効にすると、ワークスペースやサーフェスのタイトル、パス、環境変数値、セットアップコマンド、ターミナルコマンド、ブラウザ URL で <variable>{variableSyntax}</variable> または <defaultValue>{defaultSyntax}</defaultValue> を使えます。cmux でレイアウトを選択すると、再利用可能な既定値が入力された編集可能なパラメータシートが開きます。プレースホルダーを文字どおり残すには <escaped>{escapedSyntax}</escaped> を付けます。", + "parameterizedLayoutsDesc": "<params>params</params> オブジェクトを追加してワークスペースパラメータを有効にすると、ワークスペースやサーフェスのタイトル、パス、環境変数値、セットアップコマンド、ターミナルコマンド、ブラウザ URL で <variable>{variableSyntax}</variable> または <defaultValue>{defaultSyntax}</defaultValue> を使えます。<params>params</params> の値は自動的に再利用されます。グローバルインラインアクションの値は、[新規ワークスペース]→[レイアウトを管理]→[レイアウトパラメータを編集]から変更できます。プレースホルダーを文字どおり残すには <escaped>{escapedSyntax}</escaped> を付けます。", "parameterizedLayoutsPrecedence": "解決順序は <explicit>呼び出し時の明示値</explicit>、<params>params</params> の既定値、ワークスペースのリテラル <env>env</env>、<process>cmux プロセス環境</process>、<inline>インライン既定値</inline>です。必須値がない場合、ワークスペースを作成する前に起動全体が中止されます。", "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> と <layoutOpen>cmux layout open</layoutOpen> では <paramValue>--param KEY=VALUE</paramValue> または <paramEnv>--param KEY</paramEnv> を使います。値なし形式は呼び出し元シェルでエクスポートされた環境変数を取り込みます。ソケットクライアントは template_params を送り、値がない場合は <missing>missing_parameters</missing> が返ります。", "restartNew": "新しいワークスペースを作成する (デフォルト)", diff --git a/web/messages/km.json b/web/messages/km.json index 99dd4245190e..d6a214991dff 100644 --- a/web/messages/km.json +++ b/web/messages/km.json @@ -1083,7 +1083,7 @@ "fullExample": "ឧទាហរណ៍ពេញលេញ", "wsFieldParams": "តម្លៃលំនាំដើមសម្រាប់អថេរគំរូ workspace", "parameterizedLayouts": "ប្លង់ workspace ដែលមានប៉ារ៉ាម៉ែត្រ", - "parameterizedLayoutsDesc": "ប្រើ <variable>{variableSyntax}</variable> ឬ <defaultValue>{defaultSyntax}</defaultValue> ក្នុងចំណងជើង ផ្លូវ តម្លៃបរិស្ថាន ពាក្យបញ្ជារៀបចំ ពាក្យបញ្ជា terminal និង URL browser។ ដាក់ <escaped>{escapedSyntax}</escaped> ខាងមុខ ដើម្បីរក្សាកន្លែងជំនួសជាអក្សរដើម។ វត្ថុ <params>params</params> ផ្តល់តម្លៃលំនាំដើមដែលអាចប្រើឡើងវិញ។", + "parameterizedLayoutsDesc": "បន្ថែមវត្ថុ <params>params</params> ដើម្បីបើកប៉ារ៉ាម៉ែត្រកន្លែងធ្វើការ បន្ទាប់មកប្រើ <variable>{variableSyntax}</variable> ឬ <defaultValue>{defaultSyntax}</defaultValue> ក្នុងចំណងជើង ផ្លូវ តម្លៃបរិស្ថាន ពាក្យបញ្ជារៀបចំ ពាក្យបញ្ជា terminal និង URL browser។ ដាក់ <escaped>{escapedSyntax}</escaped> ខាងមុខ ដើម្បីរក្សាកន្លែងជំនួសជាអក្សរដើម។ តម្លៃក្នុង <params>params</params> ត្រូវបានប្រើឡើងវិញដោយស្វ័យប្រវត្តិ។ សម្រាប់សកម្មភាព inline សកល សូមកែសម្រួលនៅ កន្លែងធ្វើការថ្មី → គ្រប់គ្រងប្លង់ → កែសម្រួលប៉ារ៉ាម៉ែត្រប្លង់។", "parameterizedLayoutsPrecedence": "លំដាប់ដោះស្រាយគឺ <explicit>តម្លៃហៅច្បាស់លាស់</explicit> បន្ទាប់មកលំនាំដើម <params>params</params>, <env>env</env> workspace ជាក់ស្តែង, <process>បរិស្ថានដំណើរការ cmux</process> និង <inline>លំនាំដើមក្នុង placeholder</inline>។ បើខ្វះតម្លៃចាំបាច់ ការបើកទាំងមូលត្រូវបោះបង់មុនបង្កើត workspace។", "parameterizedLayoutsCLI": "ប្រើ <paramValue>--param KEY=VALUE</paramValue> ឬ <paramEnv>--param KEY</paramEnv> ជាមួយ <workspaceCreate>cmux workspace create</workspaceCreate> និង <layoutOpen>cmux layout open</layoutOpen>។ ទម្រង់គ្មានតម្លៃនាំចូលអថេរពី shell ដែលហៅ។ Socket client ផ្ញើ template_params; តម្លៃខ្វះត្រឡប់ <missing>missing_parameters</missing>។", "restartNew": "បង្កើត workspace ថ្មី (លំនាំដើម)" diff --git a/web/messages/ko.json b/web/messages/ko.json index ac12afb704df..6073abb510e7 100644 --- a/web/messages/ko.json +++ b/web/messages/ko.json @@ -1083,7 +1083,7 @@ "fullExample": "전체 예시", "wsFieldParams": "워크스페이스 템플릿 변수의 기본값", "parameterizedLayouts": "매개변수화된 워크스페이스 레이아웃", - "parameterizedLayoutsDesc": "워크스페이스 및 서피스 제목, 경로, 환경 값, 설정 명령, 터미널 명령, 브라우저 URL에서 <variable>{variableSyntax}</variable> 또는 <defaultValue>{defaultSyntax}</defaultValue>를 사용합니다. <escaped>{escapedSyntax}</escaped>를 앞에 붙이면 자리표시자를 문자 그대로 유지합니다. <params>params</params> 객체는 재사용 가능한 기본값을 제공합니다.", + "parameterizedLayoutsDesc": "<params>params</params> 객체를 추가하여 워크스페이스 매개변수를 활성화한 다음 워크스페이스 및 서피스 제목, 경로, 환경 값, 설정 명령, 터미널 명령, 브라우저 URL에서 <variable>{variableSyntax}</variable> 또는 <defaultValue>{defaultSyntax}</defaultValue>를 사용합니다. <escaped>{escapedSyntax}</escaped>를 앞에 붙이면 자리표시자를 문자 그대로 유지합니다. <params>params</params> 값은 자동으로 재사용됩니다. 전역 인라인 작업의 값은 새 작업 공간 → 레이아웃 관리 → 레이아웃 매개변수 편집에서 변경합니다.", "parameterizedLayoutsPrecedence": "해결 순서는 <explicit>명시적 호출 값</explicit>, <params>params</params> 기본값, 워크스페이스의 리터럴 <env>env</env>, <process>cmux 프로세스 환경</process>, <inline>인라인 기본값</inline>입니다. 필수 값이 없으면 워크스페이스를 만들기 전에 전체 실행을 중단합니다.", "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> 및 <layoutOpen>cmux layout open</layoutOpen>에서 <paramValue>--param KEY=VALUE</paramValue> 또는 <paramEnv>--param KEY</paramEnv>를 사용합니다. 값 없는 형식은 호출 셸 변수를 가져옵니다. 소켓 클라이언트는 template_params를 보내며, 값이 없으면 <missing>missing_parameters</missing>를 반환합니다.", "restartNew": "새 워크스페이스 만들기 (기본값)" diff --git a/web/messages/no.json b/web/messages/no.json index cbdfc3207157..cb58a74e86d2 100644 --- a/web/messages/no.json +++ b/web/messages/no.json @@ -1083,7 +1083,7 @@ "fullExample": "Fullstendig eksempel", "wsFieldParams": "Standardverdier for workspace-malvariabler", "parameterizedLayouts": "Parameteriserte workspace-oppsett", - "parameterizedLayoutsDesc": "Bruk <variable>{variableSyntax}</variable> eller <defaultValue>{defaultSyntax}</defaultValue> i titler, stier, miljøverdier, oppsettskommandoer, terminalkommandoer og nettleser-URL-er. Sett <escaped>{escapedSyntax}</escaped> foran for å beholde en plassholder bokstavelig. Objektet <params>params</params> gir gjenbrukbare standardverdier.", + "parameterizedLayoutsDesc": "Legg til et <params>params</params>-objekt for å aktivere arbeidsområdeparametere, og bruk deretter <variable>{variableSyntax}</variable> eller <defaultValue>{defaultSyntax}</defaultValue> i titler, stier, miljøverdier, oppsettskommandoer, terminalkommandoer og nettleser-URL-er. Sett <escaped>{escapedSyntax}</escaped> foran for å beholde en plassholder bokstavelig. Verdiene i <params>params</params> brukes automatisk hver gang. For globale innebygde handlinger redigerer du dem under Nytt arbeidsområde → Administrer oppsett → Rediger layoutparametere.", "parameterizedLayoutsPrecedence": "Rekkefølgen er <explicit>eksplisitte kallverdier</explicit>, standarder i <params>params</params>, bokstavelig workspace-<env>env</env>, <process>miljøet til cmux-prosessen</process> og til slutt <inline>innebygd standardverdi</inline>. Manglende påkrevde verdier avbryter hele oppstarten før et workspace opprettes.", "parameterizedLayoutsCLI": "Bruk <paramValue>--param KEY=VALUE</paramValue> eller <paramEnv>--param KEY</paramEnv> med <workspaceCreate>cmux workspace create</workspaceCreate> og <layoutOpen>cmux layout open</layoutOpen>. Formen uten verdi importerer variabelen fra skallet som kaller. Socket-klienter sender template_params; manglende verdier gir <missing>missing_parameters</missing>.", "restartNew": "Opprett et nytt workspace (standard)" diff --git a/web/messages/pl.json b/web/messages/pl.json index f89e289f1698..937d677b1d6d 100644 --- a/web/messages/pl.json +++ b/web/messages/pl.json @@ -1084,7 +1084,7 @@ "fullExample": "Pełny przykład", "wsFieldParams": "Domyślne wartości zmiennych szablonu workspace", "parameterizedLayouts": "Parametryzowane układy workspace", - "parameterizedLayoutsDesc": "Użyj <variable>{variableSyntax}</variable> lub <defaultValue>{defaultSyntax}</defaultValue> w tytułach, ścieżkach, wartościach środowiska, poleceniach konfiguracji, poleceniach terminala i adresach URL przeglądarki. Prefiks <escaped>{escapedSyntax}</escaped> zachowuje symbol zastępczy dosłownie. Obiekt <params>params</params> dostarcza domyślnych wartości wielokrotnego użytku.", + "parameterizedLayoutsDesc": "Dodaj obiekt <params>params</params>, aby włączyć parametry przestrzeni roboczej, a następnie użyj <variable>{variableSyntax}</variable> lub <defaultValue>{defaultSyntax}</defaultValue> w tytułach, ścieżkach, wartościach środowiska, poleceniach konfiguracji, poleceniach terminala i adresach URL przeglądarki. Prefiks <escaped>{escapedSyntax}</escaped> zachowuje symbol zastępczy dosłownie. Wartości w <params>params</params> są używane automatycznie. W przypadku globalnych akcji wbudowanych edytuj je w Nowa przestrzeń robocza → Zarządzaj układami → Edytuj parametry układu.", "parameterizedLayoutsPrecedence": "Kolejność rozwiązywania to <explicit>jawne wartości wywołania</explicit>, wartości <params>params</params>, dosłowne <env>env</env> workspace, <process>środowisko procesu cmux</process>, a następnie <inline>wartość domyślna w symbolu</inline>. Brak wymaganej wartości przerywa całe uruchomienie przed utworzeniem workspace.", "parameterizedLayoutsCLI": "Użyj <paramValue>--param KEY=VALUE</paramValue> lub <paramEnv>--param KEY</paramEnv> z <workspaceCreate>cmux workspace create</workspaceCreate> i <layoutOpen>cmux layout open</layoutOpen>. Forma bez wartości importuje zmienną powłoki wywołującej. Klienci gniazda wysyłają template_params; brakujące wartości zwracają <missing>missing_parameters</missing>.", "restartNew": "Utwórz nowy workspace (domyślnie)" diff --git a/web/messages/pt-BR.json b/web/messages/pt-BR.json index 926509a7dbae..1558c11f630a 100644 --- a/web/messages/pt-BR.json +++ b/web/messages/pt-BR.json @@ -1083,7 +1083,7 @@ "fullExample": "Exemplo completo", "wsFieldParams": "Valores padrão para variáveis de modelo do workspace", "parameterizedLayouts": "Layouts de workspace parametrizados", - "parameterizedLayoutsDesc": "Use <variable>{variableSyntax}</variable> ou <defaultValue>{defaultSyntax}</defaultValue> em títulos, caminhos, valores de ambiente, comandos de preparação, comandos do terminal e URLs do navegador. Prefixe com <escaped>{escapedSyntax}</escaped> para manter um marcador literal. O objeto <params>params</params> fornece valores padrão reutilizáveis.", + "parameterizedLayoutsDesc": "Adicione um objeto <params>params</params> para habilitar parâmetros de área de trabalho e use <variable>{variableSyntax}</variable> ou <defaultValue>{defaultSyntax}</defaultValue> em títulos, caminhos, valores de ambiente, comandos de preparação, comandos do terminal e URLs do navegador. Prefixe com <escaped>{escapedSyntax}</escaped> para manter um marcador literal. Os valores de <params>params</params> são reutilizados automaticamente. Para ações inline globais, edite-os em Nova Área de Trabalho → Gerenciar layouts → Editar parâmetros de layout.", "parameterizedLayoutsPrecedence": "A ordem de resolução é <explicit>valores explícitos da invocação</explicit>, padrões de <params>params</params>, <env>env</env> literal do workspace, o <process>ambiente do processo cmux</process> e o <inline>padrão embutido</inline>. Valores obrigatórios ausentes cancelam todo o lançamento antes da criação do workspace.", "parameterizedLayoutsCLI": "Use <paramValue>--param KEY=VALUE</paramValue> ou <paramEnv>--param KEY</paramEnv> com <workspaceCreate>cmux workspace create</workspaceCreate> e <layoutOpen>cmux layout open</layoutOpen>. A forma sem valor importa a variável do shell chamador. Clientes de socket enviam template_params; valores ausentes retornam <missing>missing_parameters</missing>.", "restartNew": "Criar um novo workspace (padrão)" diff --git a/web/messages/ru.json b/web/messages/ru.json index f3a40294c95b..a6a5dec17177 100644 --- a/web/messages/ru.json +++ b/web/messages/ru.json @@ -1083,7 +1083,7 @@ "fullExample": "Полный пример", "wsFieldParams": "Значения по умолчанию для переменных шаблона workspace", "parameterizedLayouts": "Параметризованные макеты workspace", - "parameterizedLayoutsDesc": "Используйте <variable>{variableSyntax}</variable> или <defaultValue>{defaultSyntax}</defaultValue> в заголовках, путях, значениях окружения, командах настройки, командах терминала и URL браузера. Префикс <escaped>{escapedSyntax}</escaped> сохраняет заполнитель буквально. Объект <params>params</params> задаёт повторно используемые значения по умолчанию.", + "parameterizedLayoutsDesc": "Добавьте объект <params>params</params>, чтобы включить параметры рабочего пространства, затем используйте <variable>{variableSyntax}</variable> или <defaultValue>{defaultSyntax}</defaultValue> в заголовках, путях, значениях окружения, командах настройки, командах терминала и URL браузера. Префикс <escaped>{escapedSyntax}</escaped> сохраняет заполнитель буквально. Значения из <params>params</params> используются автоматически. Для глобальных встроенных действий измените их в меню Новое рабочее пространство → Управление макетами → Редактировать параметры макета.", "parameterizedLayoutsPrecedence": "Порядок разрешения: <explicit>явные значения вызова</explicit>, значения <params>params</params>, буквальный <env>env</env> workspace, <process>окружение процесса cmux</process>, затем <inline>встроенное значение по умолчанию</inline>. Отсутствие обязательного значения отменяет весь запуск до создания workspace.", "parameterizedLayoutsCLI": "Используйте <paramValue>--param KEY=VALUE</paramValue> или <paramEnv>--param KEY</paramEnv> с <workspaceCreate>cmux workspace create</workspaceCreate> и <layoutOpen>cmux layout open</layoutOpen>. Форма без значения импортирует переменную вызывающей оболочки. Клиенты сокета отправляют template_params; отсутствие значений возвращает <missing>missing_parameters</missing>.", "restartNew": "Создать новый workspace (по умолчанию)" diff --git a/web/messages/th.json b/web/messages/th.json index 5a9dc4226820..7b9b30e009fc 100644 --- a/web/messages/th.json +++ b/web/messages/th.json @@ -1085,7 +1085,7 @@ "fullExample": "ตัวอย่างเต็ม", "wsFieldParams": "ค่าเริ่มต้นสำหรับตัวแปรเทมเพลต workspace", "parameterizedLayouts": "เลย์เอาต์ workspace แบบกำหนดพารามิเตอร์", - "parameterizedLayoutsDesc": "ใช้ <variable>{variableSyntax}</variable> หรือ <defaultValue>{defaultSyntax}</defaultValue> ในชื่อ พาธ ค่าสภาพแวดล้อม คำสั่งตั้งค่า คำสั่งเทอร์มินัล และ URL เบราว์เซอร์ เติม <escaped>{escapedSyntax}</escaped> ด้านหน้าเพื่อคง placeholder ไว้ตามตัวอักษร อ็อบเจ็กต์ <params>params</params> ให้ค่าเริ่มต้นที่นำกลับมาใช้ได้", + "parameterizedLayoutsDesc": "เพิ่มอ็อบเจ็กต์ <params>params</params> เพื่อเปิดใช้พารามิเตอร์เวิร์กสเปซ จากนั้นใช้ <variable>{variableSyntax}</variable> หรือ <defaultValue>{defaultSyntax}</defaultValue> ในชื่อ พาธ ค่าสภาพแวดล้อม คำสั่งตั้งค่า คำสั่งเทอร์มินัล และ URL เบราว์เซอร์ เติม <escaped>{escapedSyntax}</escaped> ด้านหน้าเพื่อคง placeholder ไว้ตามตัวอักษร ค่าใน <params>params</params> จะถูกนำมาใช้ซ้ำโดยอัตโนมัติ สำหรับการดำเนินการแบบอินไลน์ส่วนกลาง ให้แก้ไขที่ เวิร์กสเปซใหม่ → จัดการเค้าโครง → แก้ไขพารามิเตอร์เค้าโครง", "parameterizedLayoutsPrecedence": "ลำดับการแก้ค่าคือ <explicit>ค่าที่ระบุตอนเรียก</explicit>, ค่าเริ่มต้น <params>params</params>, <env>env</env> แบบตรงตัวของ workspace, <process>สภาพแวดล้อมของโปรเซส cmux</process> แล้วจึง <inline>ค่าเริ่มต้นใน placeholder</inline> หากขาดค่าที่จำเป็น การเปิดทั้งหมดจะถูกยกเลิกก่อนสร้าง workspace", "parameterizedLayoutsCLI": "ใช้ <paramValue>--param KEY=VALUE</paramValue> หรือ <paramEnv>--param KEY</paramEnv> กับ <workspaceCreate>cmux workspace create</workspaceCreate> และ <layoutOpen>cmux layout open</layoutOpen> รูปแบบไม่มีค่าจะนำเข้าตัวแปรจาก shell ที่เรียก Socket client ส่ง template_params; ค่าที่ขาดจะคืน <missing>missing_parameters</missing>", "restartNew": "สร้าง workspace ใหม่ (ค่าเริ่มต้น)" diff --git a/web/messages/tr.json b/web/messages/tr.json index 4947fe4cb625..705f29fdcabc 100644 --- a/web/messages/tr.json +++ b/web/messages/tr.json @@ -1083,7 +1083,7 @@ "fullExample": "Tam örnek", "wsFieldParams": "Workspace şablon değişkenleri için varsayılan değerler", "parameterizedLayouts": "Parametreli workspace düzenleri", - "parameterizedLayoutsDesc": "Başlıklarda, yollarda, ortam değerlerinde, kurulum komutlarında, terminal komutlarında ve tarayıcı URL'lerinde <variable>{variableSyntax}</variable> veya <defaultValue>{defaultSyntax}</defaultValue> kullanın. Bir yer tutucuyu değişmeden bırakmak için önüne <escaped>{escapedSyntax}</escaped> ekleyin. <params>params</params> nesnesi yeniden kullanılabilir varsayılanlar sağlar.", + "parameterizedLayoutsDesc": "Çalışma alanı parametrelerini etkinleştirmek için bir <params>params</params> nesnesi ekleyin, ardından başlıklarda, yollarda, ortam değerlerinde, kurulum komutlarında, terminal komutlarında ve tarayıcı URL'lerinde <variable>{variableSyntax}</variable> veya <defaultValue>{defaultSyntax}</defaultValue> kullanın. Bir yer tutucuyu değişmeden bırakmak için önüne <escaped>{escapedSyntax}</escaped> ekleyin. <params>params</params> içindeki değerler otomatik olarak yeniden kullanılır. Genel satır içi eylemler için bunları Yeni Çalışma Alanı → Düzenleri Yönet → Düzen Parametrelerini Düzenle altında düzenleyin.", "parameterizedLayoutsPrecedence": "Çözüm sırası <explicit>açık çağrı değerleri</explicit>, <params>params</params> varsayılanları, gerçek workspace <env>env</env> değerleri, <process>cmux süreç ortamı</process> ve son olarak <inline>satır içi varsayılan</inline> şeklindedir. Eksik zorunlu değerler workspace oluşturulmadan önce tüm başlatmayı iptal eder.", "parameterizedLayoutsCLI": "<workspaceCreate>cmux workspace create</workspaceCreate> ve <layoutOpen>cmux layout open</layoutOpen> ile <paramValue>--param KEY=VALUE</paramValue> veya <paramEnv>--param KEY</paramEnv> kullanın. Değersiz biçim çağıran kabuk değişkenini içe aktarır. Socket istemcileri template_params gönderir; eksik değerler <missing>missing_parameters</missing> döndürür.", "restartNew": "Yeni bir workspace oluştur (varsayılan)" diff --git a/web/messages/uk.json b/web/messages/uk.json index 8538569e055e..9301ffed9350 100644 --- a/web/messages/uk.json +++ b/web/messages/uk.json @@ -1083,7 +1083,7 @@ "fullExample": "Повний приклад", "wsFieldParams": "Типові значення змінних шаблону workspace", "parameterizedLayouts": "Параметризовані макети workspace", - "parameterizedLayoutsDesc": "Використовуйте <variable>{variableSyntax}</variable> або <defaultValue>{defaultSyntax}</defaultValue> у заголовках, шляхах, значеннях середовища, командах налаштування, командах термінала й URL браузера. Префікс <escaped>{escapedSyntax}</escaped> зберігає заповнювач буквально. Об'єкт <params>params</params> задає повторно використовувані типові значення.", + "parameterizedLayoutsDesc": "Додайте об’єкт <params>params</params>, щоб увімкнути параметри робочої області, потім використовуйте <variable>{variableSyntax}</variable> або <defaultValue>{defaultSyntax}</defaultValue> у заголовках, шляхах, значеннях середовища, командах налаштування, командах термінала й URL браузера. Префікс <escaped>{escapedSyntax}</escaped> зберігає заповнювач буквально. Значення з <params>params</params> використовуються автоматично. Для глобальних вбудованих дій змініть їх у Нова робоча область → Керування макетами → Редагувати параметри макета.", "parameterizedLayoutsPrecedence": "Порядок розв'язання: <explicit>явні значення виклику</explicit>, типові значення <params>params</params>, буквальний <env>env</env> workspace, <process>середовище процесу cmux</process>, потім <inline>вбудоване типове значення</inline>. Відсутність обов'язкового значення скасовує весь запуск до створення workspace.", "parameterizedLayoutsCLI": "Використовуйте <paramValue>--param KEY=VALUE</paramValue> або <paramEnv>--param KEY</paramEnv> з <workspaceCreate>cmux workspace create</workspaceCreate> і <layoutOpen>cmux layout open</layoutOpen>. Форма без значення імпортує змінну оболонки виклику. Клієнти сокета надсилають template_params; відсутні значення повертають <missing>missing_parameters</missing>.", "restartNew": "Створити новий workspace (за замовчуванням)" diff --git a/web/messages/zh-CN.json b/web/messages/zh-CN.json index 88e337364f4f..e49d9a2dd180 100644 --- a/web/messages/zh-CN.json +++ b/web/messages/zh-CN.json @@ -1083,7 +1083,7 @@ "fullExample": "完整示例", "wsFieldParams": "workspace 模板变量的默认值", "parameterizedLayouts": "参数化 workspace 布局", - "parameterizedLayoutsDesc": "可在 workspace 和 surface 的标题、路径、环境值、设置命令、终端命令及浏览器 URL 中使用 <variable>{variableSyntax}</variable> 或 <defaultValue>{defaultSyntax}</defaultValue>。添加 <escaped>{escapedSyntax}</escaped> 前缀可保留字面占位符。<params>params</params> 对象提供可复用的默认值。", + "parameterizedLayoutsDesc": "添加 <params>params</params> 对象以启用工作区参数,然后可在 workspace 和 surface 的标题、路径、环境值、设置命令、终端命令及浏览器 URL 中使用 <variable>{variableSyntax}</variable> 或 <defaultValue>{defaultSyntax}</defaultValue>。添加 <escaped>{escapedSyntax}</escaped> 前缀可保留字面占位符。<params>params</params> 中的值会自动复用。对于全局内联操作,请前往新建工作区 → 管理布局 → 编辑布局参数进行修改。", "parameterizedLayoutsPrecedence": "解析顺序为:<explicit>显式调用值</explicit>、<params>params</params> 默认值、workspace 的字面 <env>env</env>、<process>cmux 进程环境</process>,最后是<inline>内联默认值</inline>。缺少必需值时,会在创建任何 workspace 前中止整个启动。", "parameterizedLayoutsCLI": "在 <workspaceCreate>cmux workspace create</workspaceCreate> 和 <layoutOpen>cmux layout open</layoutOpen> 中使用 <paramValue>--param KEY=VALUE</paramValue> 或 <paramEnv>--param KEY</paramEnv>。无值形式会导入调用 shell 的变量。Socket 客户端发送 template_params;缺少值时返回 <missing>missing_parameters</missing>。", "restartNew": "创建新的 workspace(默认)" diff --git a/web/messages/zh-TW.json b/web/messages/zh-TW.json index d97560a453e3..b059f7e7cf78 100644 --- a/web/messages/zh-TW.json +++ b/web/messages/zh-TW.json @@ -1083,7 +1083,7 @@ "fullExample": "完整範例", "wsFieldParams": "workspace 範本變數的預設值", "parameterizedLayouts": "參數化 workspace 版面配置", - "parameterizedLayoutsDesc": "可在 workspace 與 surface 的標題、路徑、環境值、設定命令、終端命令及瀏覽器 URL 中使用 <variable>{variableSyntax}</variable> 或 <defaultValue>{defaultSyntax}</defaultValue>。加上 <escaped>{escapedSyntax}</escaped> 前綴可保留字面預留位置。<params>params</params> 物件提供可重複使用的預設值。", + "parameterizedLayoutsDesc": "加入 <params>params</params> 物件以啟用工作區參數,接著可在 workspace 與 surface 的標題、路徑、環境值、設定命令、終端命令及瀏覽器 URL 中使用 <variable>{variableSyntax}</variable> 或 <defaultValue>{defaultSyntax}</defaultValue>。加上 <escaped>{escapedSyntax}</escaped> 前綴可保留字面預留位置。<params>params</params> 中的值會自動重複使用。若是全域內嵌動作,請前往新增工作區 → 管理佈局 → 編輯佈局參數進行修改。", "parameterizedLayoutsPrecedence": "解析順序為:<explicit>明確呼叫值</explicit>、<params>params</params> 預設值、workspace 的字面 <env>env</env>、<process>cmux 程序環境</process>,最後是<inline>內嵌預設值</inline>。缺少必要值時,會在建立任何 workspace 前中止整個啟動。", "parameterizedLayoutsCLI": "在 <workspaceCreate>cmux workspace create</workspaceCreate> 與 <layoutOpen>cmux layout open</layoutOpen> 中使用 <paramValue>--param KEY=VALUE</paramValue> 或 <paramEnv>--param KEY</paramEnv>。無值形式會匯入呼叫 shell 的變數。Socket 用戶端傳送 template_params;缺少值時回傳 <missing>missing_parameters</missing>。", "restartNew": "建立新的 workspace(預設)" From 341a9e752d1484e5b2a1caeae8feb5af7efe9e70 Mon Sep 17 00:00:00 2001 From: austinywang <austinwang115@gmail.com> Date: Wed, 15 Jul 2026 17:57:59 -0700 Subject: [PATCH 16/16] Remove stale workspace prompt binding --- Sources/CmuxConfigExecutor.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/CmuxConfigExecutor.swift b/Sources/CmuxConfigExecutor.swift index 4e3e9b606f27..c5bcd52ae7f3 100644 --- a/Sources/CmuxConfigExecutor.swift +++ b/Sources/CmuxConfigExecutor.swift @@ -18,7 +18,7 @@ struct CmuxConfigExecutor { presentingWindow: NSWindow? = nil, onExecuted: (() -> Void)? = nil ) -> Bool { - if let workspace = command.workspace { + if command.workspace != nil { let processEnvironment = ProcessInfo.processInfo.environment let resolvedCommand: CmuxCommandDefinition do {