diff --git a/CLI/CMUXCLI+Config.swift b/CLI/CMUXCLI+Config.swift index b7cce744d26d..e33c4aabb2e6 100644 --- a/CLI/CMUXCLI+Config.swift +++ b/CLI/CMUXCLI+Config.swift @@ -1,5 +1,6 @@ import Foundation import CmuxFoundation +import CmuxSettings extension CMUXCLI { func runConfigCommand( @@ -22,21 +23,55 @@ extension CMUXCLI { case "help": print(configUsage()) case "get": - guard args.count == 2, let key = canonicalFontSizeKey(args[1]) else { - throw CLIError(message: "Usage: cmux config get ") + guard args.count == 2 else { + throw CLIError(message: "Usage: cmux config get ") + } + if let key = canonicalFontSizeKey(args[1]) { + try runConfigGetFontSize(forKey: key, jsonOutput: wantsJSON) + } else { + try runConfigGetSetting(path: args[1], jsonOutput: wantsJSON) } - try runConfigGetFontSize(forKey: key, jsonOutput: wantsJSON) case "set": - guard args.count == 3, let key = canonicalFontSizeKey(args[1]) else { - throw CLIError(message: "Usage: cmux config set ") + guard args.count == 3 else { + throw CLIError(message: "Usage: cmux config set ") } - try runConfigSetFontSize( - forKey: key, - rawValue: args[2], - socketPath: socketPath, - explicitPassword: explicitPassword, + if let key = canonicalFontSizeKey(args[1]) { + try runConfigSetFontSize( + forKey: key, + rawValue: args[2], + socketPath: socketPath, + explicitPassword: explicitPassword, + jsonOutput: wantsJSON + ) + } else { + try runConfigSettingChange( + .set(path: args[1], value: CmuxSettingValue(commandLineArgument: args[2])), + jsonOutput: wantsJSON + ) + } + case "unset": + guard args.count == 2 else { + throw CLIError(message: "Usage: cmux config unset ") + } + try runConfigSettingChange(.unset(path: args[1]), jsonOutput: wantsJSON) + case "toggle": + guard args.count == 2 else { + throw CLIError(message: "Usage: cmux config toggle ") + } + try runConfigSettingChange(.toggle(path: args[1]), jsonOutput: wantsJSON) + case "cycle": + guard args.count >= 3 else { + throw CLIError(message: "Usage: cmux config cycle [value...]") + } + try runConfigSettingChange( + .cycle(path: args[1], values: args.dropFirst(2).map { CmuxSettingValue(commandLineArgument: $0) }), jsonOutput: wantsJSON ) + case "preset": + guard args.count == 2 else { + throw CLIError(message: "Usage: cmux config preset ") + } + try runConfigSettingChange(.preset(name: args[1]), jsonOutput: wantsJSON) case CmuxGhosttyConfigSettingEditor.sidebarFontSizeKey, CmuxGhosttyConfigSettingEditor.surfaceTabBarFontSizeKey: if args.count == 1 { try runConfigGetFontSize(forKey: subcommand, jsonOutput: wantsJSON) @@ -104,9 +139,15 @@ extension CMUXCLI { func configCommandDoesNotNeedSocket(_ commandArgs: [String]) -> Bool { let parsedArgs = docsSettingsArguments(commandArgs) let subcommand = parsedArgs.arguments.first?.lowercased() ?? "help" - if subcommand == "get" { + if ["get", "unset", "toggle", "cycle", "preset"].contains(subcommand) { return true } + // `set` only reloads the running app for the Ghostty font-size keys; + // cmux.json settings are applied by the app's file watcher. + if subcommand == "set" { + let key = parsedArgs.arguments.count > 1 ? parsedArgs.arguments[1] : "" + return canonicalFontSizeKey(key) == nil + } if subcommand == CmuxGhosttyConfigSettingEditor.sidebarFontSizeKey || subcommand == CmuxGhosttyConfigSettingEditor.surfaceTabBarFontSizeKey { return parsedArgs.arguments.count == 1 @@ -121,9 +162,9 @@ extension CMUXCLI { defaultValue: "Validate JSONC syntax and cmux config semantics." ) return """ - Usage: cmux config + Usage: cmux config - Inspect cmux.json, print configuration references, update selected Ghostty config keys, or reload the running app. + Inspect and change cmux.json settings, print configuration references, update selected Ghostty config keys, or reload the running app. Subcommands: doctor|check|validate [--path ] [--scope ] @@ -131,11 +172,21 @@ extension CMUXCLI { path|paths Print cmux.json paths, docs URL, and schema URL. docs|documentation Print the same output as `cmux docs settings`. reload Reload Ghostty config + cmux.json and refresh terminals (alias for `cmux reload-config`). + get Print a setting: its cmux.json value, else the value set in Settings, else the default. + set Write a setting to ~/.config/cmux/cmux.json. is JSON (true, 1.4, "dark", [...]); + other text is stored as a string. Comments and other keys are kept. + unset Remove a setting from cmux.json, so the value set in Settings (or the default) applies. + toggle Flip a true/false setting, starting from the value cmux is using. + cycle [value...] Move a setting to the value after its current one, wrapping around. + preset Apply the settings stored at settingPresets. in cmux.json. get Print sidebar-font-size or surface-tab-bar-font-size. set Set sidebar-font-size (10-20 pt) or surface-tab-bar-font-size (8-24 pt), then reload if cmux is running. sidebar-font-size [points] Get or set the left sidebar text size. surface-tab-bar-font-size [points] Get or set the workspace tab bar text size. + Setting changes are validated against the cmux.json schema before anything is written. A running + cmux applies them automatically; no reload is needed. + Config files: \(Self.primarySettingsDisplayPath) legacy config: \(Self.legacySettingsDisplayPath) @@ -145,6 +196,11 @@ extension CMUXCLI { \(Self.ghosttyConfigDisplayPath) Examples: + cmux config get terminal.scrollSpeed + cmux config set terminal.scrollSpeed 1.4 + cmux config toggle fileEditor.wordWrap + cmux config cycle terminal.scrollSpeed 1.0 1.4 1.8 + cmux config preset sidebar.quiet cmux config doctor cmux config doctor --path .cmux/cmux.json cmux config set sidebar-font-size 14 @@ -197,6 +253,116 @@ extension CMUXCLI { print(" cmux reload-config") } + /// Applies a setting change to the global cmux.json through the same + /// ``JSONConfigStore/apply(_:)`` path setting actions use. + private func runConfigSettingChange(_ change: CmuxSettingChange, jsonOutput: Bool) throws { + let store = JSONConfigStore(fileURL: CmuxConfigLocation().userConfigFile) + let result: CmuxSettingChangeResult + do { + let liveValues = Self.configSettingLiveValues() + result = try runConfigSettingsBlocking { try await store.apply(change, liveValues: liveValues) } + } catch { + throw CLIError(message: error.localizedDescription) + } + let changed = result.receipts.filter { $0.before != $0.installed } + + if jsonOutput { + let paths: [[String: Any]] = result.receipts.map { receipt in + var entry: [String: Any] = [ + "path": receipt.path, + "changed": receipt.before != receipt.installed, + ] + if let value = result.installedValue(at: receipt.path) { + entry["value"] = value.jsonObject + } + return entry + } + print(jsonString([ + "ok": true, + "file": store.fileURL.path, + "paths": paths, + ])) + return + } + + if changed.isEmpty { + print("OK unchanged") + } + for receipt in changed { + if let value = result.installedValue(at: receipt.path) { + print("OK \(receipt.path) = \(value.jsonText)") + } else { + print("OK \(receipt.path) unset") + } + } + print("path: \(Self.tildePath(store.fileURL.path))") + } + + private func runConfigGetSetting(path: String, jsonOutput: Bool) throws { + let store = JSONConfigStore(fileURL: CmuxConfigLocation().userConfigFile) + let reading: CmuxSettingReading + do { + reading = try store.reading(at: path, liveValues: Self.configSettingLiveValues()) + } catch { + throw CLIError(message: error.localizedDescription) + } + + let source: String + if reading.configured != nil { + source = "cmux.json" + } else if reading.live != nil { + source = "settings" + } else { + source = "default" + } + + if jsonOutput { + var payload: [String: Any] = [ + "path": reading.path, + "file": store.fileURL.path, + "configured": reading.configured != nil, + "source": source, + ] + payload["value"] = reading.effective?.jsonObject ?? NSNull() + if let defaultValue = reading.defaultValue { + payload["default"] = defaultValue.jsonObject + } + print(jsonString(payload)) + return + } + + let suffix: String + switch source { + case "settings": suffix = " (set in Settings, not cmux.json)" + case "default": suffix = " (default)" + default: suffix = "" + } + print("\(reading.path) = \(reading.effective?.jsonText ?? "null")\(suffix)") + } + + /// Reads settings the Settings window stored in the cmux app's + /// UserDefaults, so `get`, `toggle`, and `cycle` start from the value + /// the app is using when cmux.json doesn't set the key. + private static func configSettingLiveValues() -> CmuxSettingLiveValues { + .userDefaults(suiteName: CLISocketPathResolver.currentAppBundleIdentifier()) + } + + /// Bridges the actor-backed store to this synchronous command. The + /// semaphore orders the result hand-off after the task's write. + private func runConfigSettingsBlocking( + _ work: @escaping @Sendable () async throws -> T + ) throws -> T { + let semaphore = DispatchSemaphore(value: 0) + nonisolated(unsafe) var output: Result! + Task { + do { output = .success(try await work()) } + catch { output = .failure(error) } + semaphore.signal() + } + semaphore.wait() + return try output.get() + } + /// Normalizes a user-supplied key to a supported editable font-size key, or nil if unsupported. private func canonicalFontSizeKey(_ raw: String) -> String? { switch raw.lowercased() { diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift index 18bb292faebb..b7d527ff1615 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift @@ -75,7 +75,7 @@ enum CmuxEmbeddedConfigSchema { }, "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\", \"workspace\" (inline workspace with name/cwd/color/env/setup/layout, plus optional restart), \"setting\" (change one setting in the global cmux.json: path plus exactly one of set, toggle: true, cycle, or unset: true), or \"settingPreset\" (apply a named entry from settingPresets). Setting actions only run when declared in the global ~/.config/cmux/cmux.json or a pack it references; with confirm: true they ask before saving. 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 }, @@ -108,6 +108,27 @@ enum CmuxEmbeddedConfigSchema { "additionalProperties": true } }, + "settingPresets": { + "x-cmux-scopes": ["global"], + "title": "settingPresets", + "description": "Named groups of settings applied together by a \"settingPreset\" action or `cmux config preset `. Each preset is a partial cmux.json holding only settings sections, for example {\"sidebar\": {\"showPorts\": false}}. Nested objects merge key by key; other values replace the current one. Keys the preset doesn't name keep their values.", + "type": "object", + "default": {}, + "additionalProperties": { + "allOf": [ + { "$ref": "#" }, + { + "type": "object", + "minProperties": 1, + "propertyNames": { + "not": { + "enum": ["$schema", "schemaVersion", "actions", "commands", "newWorkspaceCommand", "packs", "rightSidebar", "settingPresets", "surfaceTabBarButtons", "ui", "vault"] + } + } + } + ] + } + }, "computerUse": { "x-cmux-scopes": ["global"], "title": "computerUse", diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchemaPathLookup.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchemaPathLookup.swift new file mode 100644 index 000000000000..f1399c51438d --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchemaPathLookup.swift @@ -0,0 +1,149 @@ +import Foundation + +/// Answers "does cmux.json declare this dotted path, and what is its default?" +/// from the same embedded schema ``CmuxConfigSemanticValidator`` uses. +/// +/// A path is declared when every component resolves through `properties`, +/// a matching `patternProperties` entry, or an object-valued +/// `additionalProperties` schema, following `$ref` and the alternatives of +/// `allOf`, `anyOf`, and `oneOf`. Writers use it to reject a mistyped path +/// before touching the file, and to find the effective value of a key the +/// file doesn't set. +public struct CmuxConfigSchemaPathLookup { + private let rootSchema: [String: Any] + + public init() { + self.init(schema: .embedded) + } + + init(schema: CmuxParsedConfigSchema) { + self.rootSchema = schema.root + } + + /// Whether the schema declares `components` as a property path. + public func isDeclared(_ components: [String]) -> Bool { + !components.isEmpty && !schemas(at: components).isEmpty + } + + /// The schema `default` for `components`, or nil when the path is + /// undeclared or has no default. `null` defaults are returned as `NSNull`. + public func defaultValue(at components: [String]) -> Any? { + for schema in schemas(at: components) { + if let value = defaultValue(in: schema, depth: 0) { + return value + } + } + return nil + } + + /// The JSON types (`"boolean"`, `"string"`, `"number"`, ...) the schema + /// allows at `components`, following `$ref` and `anyOf`/`oneOf`/`allOf`. + /// Empty when the path is undeclared or its schema names no type. + public func declaredTypes(at components: [String]) -> Set { + var types: Set = [] + for schema in schemas(at: components) { + collectTypes(in: schema, depth: 0, into: &types) + } + return types + } + + private func collectTypes(in schema: [String: Any], depth: Int, into types: inout Set) { + guard depth < 16 else { return } + if let type = schema["type"] as? String { + types.insert(type) + } else if let list = schema["type"] as? [String] { + types.formUnion(list) + } + if let ref = schema["$ref"] as? String, let target = resolvedReference(ref) { + collectTypes(in: target, depth: depth + 1, into: &types) + } + for combinator in ["allOf", "anyOf", "oneOf"] { + guard let alternatives = schema[combinator] as? [Any] else { continue } + for case let alternative as [String: Any] in alternatives { + collectTypes(in: alternative, depth: depth + 1, into: &types) + } + } + } + + private func defaultValue(in schema: [String: Any], depth: Int) -> Any? { + if let value = schema["default"] { + return value + } + guard depth < 16 else { return nil } + if let ref = schema["$ref"] as? String, let target = resolvedReference(ref) { + return defaultValue(in: target, depth: depth + 1) + } + return nil + } + + /// Every schema that can describe the value at `components`. + private func schemas(at components: [String]) -> [[String: Any]] { + var current: [[String: Any]] = [rootSchema] + for component in components { + var next: [[String: Any]] = [] + for schema in current { + next.append(contentsOf: childSchemas(named: component, in: schema, depth: 0)) + } + guard !next.isEmpty else { return [] } + current = next + } + return current + } + + private func childSchemas( + named key: String, + in schema: [String: Any], + depth: Int + ) -> [[String: Any]] { + guard depth < 16 else { return [] } + var matches: [[String: Any]] = [] + if let properties = schema["properties"] as? [String: Any], + let child = properties[key] as? [String: Any] { + matches.append(child) + } + if let patterns = schema["patternProperties"] as? [String: Any] { + for (pattern, child) in patterns { + guard let child = child as? [String: Any], + matchesPattern(key, pattern: pattern) else { continue } + matches.append(child) + } + } + if matches.isEmpty, let additional = schema["additionalProperties"] as? [String: Any] { + matches.append(additional) + } + if let ref = schema["$ref"] as? String, let target = resolvedReference(ref) { + matches.append(contentsOf: childSchemas(named: key, in: target, depth: depth + 1)) + } + for combinator in ["allOf", "anyOf", "oneOf"] { + guard let alternatives = schema[combinator] as? [Any] else { continue } + for case let alternative as [String: Any] in alternatives { + matches.append(contentsOf: childSchemas(named: key, in: alternative, depth: depth + 1)) + } + } + return matches + } + + private func resolvedReference(_ ref: String) -> [String: Any]? { + // "#" names the whole document, so a nested object can reuse the root + // schema (for example a settingPresets entry is a partial cmux.json). + if ref == "#" { return rootSchema } + guard ref.hasPrefix("#/") else { return nil } + var cursor: Any = rootSchema + for component in ref.dropFirst(2).split(separator: "/") { + let key = component + .replacingOccurrences(of: "~1", with: "/") + .replacingOccurrences(of: "~0", with: "~") + guard let dictionary = cursor as? [String: Any], let next = dictionary[key] else { + return nil + } + cursor = next + } + return cursor as? [String: Any] + } + + private func matchesPattern(_ value: String, pattern: String) -> Bool { + guard let expression = try? NSRegularExpression(pattern: pattern) else { return false } + let range = NSRange(location: 0, length: (value as NSString).length) + return expression.firstMatch(in: value, range: range) != nil + } +} diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSemanticValidator.swift b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSemanticValidator.swift index 263e04cad6f7..052bb890d74c 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSemanticValidator.swift +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSemanticValidator.swift @@ -283,6 +283,9 @@ public struct CmuxConfigSemanticValidator { } private func resolvedReference(_ ref: String) -> [String: Any]? { + // "#" names the whole document, so a nested object can reuse the root + // schema (for example a settingPresets entry is a partial cmux.json). + if ref == "#" { return rootSchema } guard ref.hasPrefix("#/") else { return nil } var current: Any = rootSchema for component in ref.dropFirst(2).split(separator: "/") { diff --git a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/Resources/Localizable.xcstrings b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/Resources/Localizable.xcstrings index 934e07c251ea..4184652f9062 100644 --- a/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/Resources/Localizable.xcstrings +++ b/Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/Resources/Localizable.xcstrings @@ -4956,6 +4956,419 @@ } } }, + "config.settingChange.unknownPath": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' isn't a cmux setting. Run `cmux docs settings` to list them." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "'%@' ist keine cmux-Einstellung. Führe `cmux docs settings` aus, um alle aufzulisten." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "'%@' n'est pas un réglage cmux. Exécutez `cmux docs settings` pour les lister." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "'%@' ليس إعدادًا في cmux. شغّل `cmux docs settings` لعرض الإعدادات." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "'%@' no es un ajuste de cmux. Ejecuta `cmux docs settings` para ver la lista." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "'%@' 不是 cmux 設定。執行 `cmux docs settings` 可列出所有設定。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "'%@' 不是 cmux 设置。运行 `cmux docs settings` 可列出所有设置。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "'%@'은(는) cmux 설정이 아닙니다. `cmux docs settings`를 실행해 목록을 확인하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "'%@' は cmux の設定ではありません。`cmux docs settings` を実行すると一覧を表示できます。" + } + } + } + }, + "config.settingChange.notASetting": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' isn't a setting. Edit that section of cmux.json directly." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "'%@' ist keine Einstellung. Bearbeite diesen Abschnitt von cmux.json direkt." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "'%@' n'est pas un réglage. Modifiez directement cette section de cmux.json." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "'%@' ليس إعدادًا. عدّل هذا القسم من cmux.json مباشرةً." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "'%@' no es un ajuste. Edita esa sección de cmux.json directamente." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "'%@' 不是設定。請直接編輯 cmux.json 的該區段。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "'%@' 不是设置。请直接编辑 cmux.json 的该部分。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "'%@'은(는) 설정이 아닙니다. cmux.json의 해당 섹션을 직접 편집하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "'%@' は設定ではありません。cmux.json の該当セクションを直接編集してください。" + } + } + } + }, + "config.settingChange.notBoolean": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' isn't true or false, so it can't be toggled." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "'%@' ist nicht true oder false und kann daher nicht umgeschaltet werden." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "'%@' n'est ni true ni false et ne peut donc pas être basculé." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "'%@' ليس true أو false، لذا لا يمكن تبديله." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "'%@' no es true ni false, así que no se puede alternar." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "'%@' 不是 true 或 false,因此無法切換。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "'%@' 不是 true 或 false,因此无法切换。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "'%@'은(는) true나 false가 아니므로 전환할 수 없습니다." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "'%@' は true でも false でもないため、切り替えられません。" + } + } + } + }, + "config.settingChange.emptyCycle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cycling '%@' needs at least one value." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Zum Durchschalten von '%@' ist mindestens ein Wert nötig." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Faire défiler '%@' nécessite au moins une valeur." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يتطلب التنقّل بين قيم '%@' قيمة واحدة على الأقل." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Para alternar entre valores de '%@' se necesita al menos un valor." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "循環切換 '%@' 至少需要一個值。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "循环切换 '%@' 至少需要一个值。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "'%@' 값을 순환하려면 값이 하나 이상 필요합니다." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "'%@' を順に切り替えるには、少なくとも 1 つの値が必要です。" + } + } + } + }, + "config.settingChange.unknownPreset": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No setting preset named '%@'. Add it under settingPresets in ~/.config/cmux/cmux.json." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Es gibt keine Einstellungsvorlage namens '%@'. Füge sie unter settingPresets in ~/.config/cmux/cmux.json hinzu." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Aucun préréglage nommé '%@'. Ajoutez-le sous settingPresets dans ~/.config/cmux/cmux.json." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لا يوجد إعداد مسبق باسم '%@'. أضفه ضمن settingPresets في ~/.config/cmux/cmux.json." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No hay ningún preajuste llamado '%@'. Añádelo en settingPresets en ~/.config/cmux/cmux.json." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "沒有名為 '%@' 的設定預設組。請在 ~/.config/cmux/cmux.json 的 settingPresets 下新增。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "没有名为 '%@' 的设置预设。请在 ~/.config/cmux/cmux.json 的 settingPresets 下添加。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "'%@'(이)라는 설정 프리셋이 없습니다. ~/.config/cmux/cmux.json의 settingPresets 아래에 추가하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "'%@' という名前の設定プリセットはありません。~/.config/cmux/cmux.json の settingPresets に追加してください。" + } + } + } + }, + "config.settingChange.invalidPreset": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Setting preset '%@' must be an object of settings, for example {\"sidebar\": {\"showPorts\": false}}." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Die Einstellungsvorlage '%@' muss ein Objekt mit Einstellungen sein, zum Beispiel {\"sidebar\": {\"showPorts\": false}}." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Le préréglage '%@' doit être un objet de réglages, par exemple {\"sidebar\": {\"showPorts\": false}}." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يجب أن يكون الإعداد المسبق '%@' كائنًا من الإعدادات، مثل {\"sidebar\": {\"showPorts\": false}}." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "El preajuste '%@' debe ser un objeto de ajustes, por ejemplo {\"sidebar\": {\"showPorts\": false}}." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "設定預設組 '%@' 必須是設定物件,例如 {\"sidebar\": {\"showPorts\": false}}。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设置预设 '%@' 必须是设置对象,例如 {\"sidebar\": {\"showPorts\": false}}。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "설정 프리셋 '%@'은(는) 설정 객체여야 합니다. 예: {\"sidebar\": {\"showPorts\": false}}" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "設定プリセット '%@' は設定のオブジェクトである必要があります。例: {\"sidebar\": {\"showPorts\": false}}。" + } + } + } + }, + "config.settingChange.keyContainsDot": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' names a key that contains \".\", such as a workspaceGroups.byCwd path. Setting paths split on every \".\", so that key can't be changed this way. Edit it in cmux.json directly." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "'%@' verweist auf einen Schlüssel mit \".\", etwa einen workspaceGroups.byCwd-Pfad. Einstellungspfade werden an jedem \".\" geteilt, daher lässt sich dieser Schlüssel so nicht ändern. Bearbeite ihn direkt in cmux.json." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "'%@' désigne une clé qui contient \".\", par exemple un chemin workspaceGroups.byCwd. Les chemins de réglage sont découpés à chaque \".\", donc cette clé ne peut pas être modifiée ainsi. Modifiez-la directement dans cmux.json." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "'%@' يشير إلى مفتاح يحتوي على \".\"، مثل مسار workspaceGroups.byCwd. تُقسَّم مسارات الإعدادات عند كل \".\"، لذا لا يمكن تغيير هذا المفتاح بهذه الطريقة. عدّله في cmux.json مباشرةً." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "'%@' se refiere a una clave que contiene \".\", como una ruta de workspaceGroups.byCwd. Las rutas de ajustes se dividen en cada \".\", así que esa clave no se puede cambiar de esta forma. Edítala directamente en cmux.json." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "'%@' 指向含有 \".\" 的鍵,例如 workspaceGroups.byCwd 路徑。設定路徑會在每個 \".\" 處分割,因此無法用這種方式變更該鍵。請直接在 cmux.json 中編輯。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "'%@' 指向包含 \".\" 的键,例如 workspaceGroups.byCwd 路径。设置路径会在每个 \".\" 处拆分,因此无法用这种方式更改该键。请直接在 cmux.json 中编辑。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "'%@'은(는) \".\"이 포함된 키를 가리킵니다(예: workspaceGroups.byCwd 경로). 설정 경로는 모든 \".\"에서 나뉘므로 이 방법으로는 해당 키를 변경할 수 없습니다. cmux.json에서 직접 편집하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "'%@' は \".\" を含むキー(workspaceGroups.byCwd のパスなど)を指しています。設定パスはすべての \".\" で分割されるため、この方法ではそのキーを変更できません。cmux.json で直接編集してください。" + } + } + } + }, "cli.sshPtyAttach.launchAcknowledgementTimeoutLimitReached": { "extractionState": "manual", "localizations": { diff --git a/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxConfigSchemaPathLookupTests.swift b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxConfigSchemaPathLookupTests.swift new file mode 100644 index 000000000000..a3480e8157e5 --- /dev/null +++ b/Packages/macOS/CmuxFoundation/Tests/CmuxFoundationTests/CmuxConfigSchemaPathLookupTests.swift @@ -0,0 +1,63 @@ +import Foundation +import Testing +@testable import CmuxFoundation + +@Suite("cmux.json schema path lookup") +struct CmuxConfigSchemaPathLookupTests { + private let lookup = CmuxConfigSchemaPathLookup() + + @Test("declares settings leaves, sections, and map entries") + func declaresKnownPaths() { + #expect(lookup.isDeclared(["terminal", "scrollSpeed"])) + #expect(lookup.isDeclared(["fileEditor", "wordWrap"])) + #expect(lookup.isDeclared(["terminal", "rendererRealization", "maxWarmRenderers"])) + #expect(lookup.isDeclared(["sidebar"])) + // A $ref-backed property. + #expect(lookup.isDeclared(["paneBorderColor"])) + // An entry of a keyed map. + #expect(lookup.isDeclared(["shortcuts", "bindings", "toggleSidebar"])) + } + + @Test("rejects paths the schema doesn't declare") + func rejectsUnknownPaths() { + #expect(!lookup.isDeclared([])) + #expect(!lookup.isDeclared(["terminal", "scrollSpeeed"])) + #expect(!lookup.isDeclared(["nope"])) + #expect(!lookup.isDeclared(["terminal", "scrollSpeed", "child"])) + } + + @Test("returns schema defaults") + func returnsDefaults() { + #expect((lookup.defaultValue(at: ["terminal", "scrollSpeed"]) as? NSNumber)?.doubleValue == 1.0) + #expect((lookup.defaultValue(at: ["fileEditor", "wordWrap"]) as? NSNumber)?.boolValue == false) + #expect(lookup.defaultValue(at: ["paneBorderColor"]) is NSNull) + #expect(lookup.defaultValue(at: ["terminal", "nope"]) == nil) + } + + @Test("setting presets validate as partial settings documents") + func settingPresetsValidateAgainstRoot() throws { + let validator = CmuxConfigSemanticValidator(scope: .global) + let valid = validator.validate(jsonObject: [ + "settingPresets": [ + "sidebar.quiet": ["sidebar": ["showPorts": false, "showLog": false]], + "scroll.fast": ["terminal": ["scrollSpeed": 1.8]], + ], + ]) + #expect(valid.isEmpty, "\(valid)") + + let wrongType = validator.validate(jsonObject: [ + "settingPresets": ["bad": ["sidebar": ["showPorts": "no"]]], + ]) + #expect(wrongType.contains { $0.path.contains("showPorts") }) + + let structural = validator.validate(jsonObject: [ + "settingPresets": ["bad": ["actions": [:]]], + ]) + #expect(!structural.isEmpty) + + let projectScoped = CmuxConfigSemanticValidator(scope: .project).validate(jsonObject: [ + "settingPresets": ["p": ["sidebar": ["showPorts": false]]], + ]) + #expect(!projectScoped.isEmpty) + } +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/AnySettingKey.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/AnySettingKey.swift index ca0b27e7611e..6b196e9601b6 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/AnySettingKey.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/AnySettingKey.swift @@ -59,6 +59,16 @@ public struct AnySettingKey: Sendable { /// The UserDefaults fallback value, type-erased for batch reset bookkeeping. public let userDefaultsDefaultValue: (any Sendable)? + /// Reads this setting's stored UserDefaults value in its cmux.json form, + /// or returns nil when nothing is stored (or the key isn't + /// UserDefaults-backed). A key with its own suite reads that suite + /// instead of the one passed in. + public let jsonValueInUserDefaults: @Sendable (UserDefaults) -> Any? + + /// The UserDefaults default value in its cmux.json form, or nil for keys + /// that aren't UserDefaults-backed. + public let jsonDefaultValue: @Sendable () -> Any? + /// Wraps a UserDefaults-backed key. public init(_ key: DefaultsKey) { self.id = key.id @@ -72,6 +82,15 @@ public struct AnySettingKey: Sendable { } self.resetInJSON = { _ in } self.userDefaultsDefaultValue = key.defaultValue + self.jsonValueInUserDefaults = { defaults in + let store = key.suite.flatMap(UserDefaults.init(suiteName:)) ?? defaults + guard let raw = store.object(forKey: key.userDefaultsKey), + let value = Value.decodeFromUserDefaults(raw) else { + return nil + } + return value.encodeForJSON() + } + self.jsonDefaultValue = { key.defaultValue.encodeForJSON() } } /// Wraps a JSON-backed key. @@ -83,6 +102,8 @@ public struct AnySettingKey: Sendable { try? await store.reset(key) } self.userDefaultsDefaultValue = nil + self.jsonValueInUserDefaults = { _ in nil } + self.jsonDefaultValue = { nil } } /// Wraps a secret-file-backed key. Secrets are reset through @@ -94,6 +115,8 @@ public struct AnySettingKey: Sendable { self.migrateUserDefaultsLegacyKeys = { _ in } self.resetInJSON = { _ in } self.userDefaultsDefaultValue = nil + self.jsonValueInUserDefaults = { _ in nil } + self.jsonDefaultValue = { nil } } private static func migrateLegacyDefaultsKey( diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChange.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChange.swift new file mode 100644 index 000000000000..12eccd58752b --- /dev/null +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChange.swift @@ -0,0 +1,70 @@ +import Foundation + +/// One edit to the settings in the global cmux.json. +/// +/// Both `"type": "setting"` / `"type": "settingPreset"` actions and +/// `cmux config set|unset|toggle|cycle|preset` describe their edit with this +/// type and apply it through ``JSONConfigStore/apply(_:)``, so every +/// entrypoint validates and writes the same way. +public enum CmuxSettingChange: Sendable, Hashable { + /// Writes `value` at the dotted settings `path`. + case set(path: String, value: CmuxSettingValue) + /// Removes `path`, so cmux falls back to the default. + case unset(path: String) + /// Flips a boolean setting. An absent key flips its schema default. + case toggle(path: String) + /// Advances `path` to the entry after its current value in `values`, + /// wrapping at the end. A value that isn't in the list, including an + /// absent key whose default isn't listed, moves to the first entry. + case cycle(path: String, values: [CmuxSettingValue]) + /// Merges the partial settings object stored at `settingPresets.` + /// in the same file. Nested objects merge key by key; every other value, + /// including arrays, replaces the current one. + case preset(name: String) + + /// The settings path this change edits, or the preset name. + public var displayTarget: String { + switch self { + case .set(let path, _), .unset(let path), .toggle(let path), .cycle(let path, _): + return path + case .preset(let name): + return name + } + } + + /// The equivalent `cmux config` command, shown when a setting action + /// asks for confirmation. + public var commandLineDescription: String { + switch self { + case .set(let path, let value): + return "cmux config set \(path) \(value.jsonText)" + case .unset(let path): + return "cmux config unset \(path)" + case .toggle(let path): + return "cmux config toggle \(path)" + case .cycle(let path, let values): + return (["cmux config cycle", path] + values.map(\.jsonText)).joined(separator: " ") + case .preset(let name): + return "cmux config preset \(name)" + } + } +} + +/// The paths a ``CmuxSettingChange`` wrote. Runtime application is not +/// observed: cmux's config file watcher applies the saved file. +public struct CmuxSettingChangeResult: Sendable { + /// One receipt per path the change addressed, in the order the change + /// produced them. A path that already held the requested value has + /// equal `before` and `installed` data. + public let receipts: [JSONConfigMutationReceipt] + + /// The value now stored at `path`, or nil when this change removed it or + /// didn't touch it. + public func installedValue(at path: String) -> CmuxSettingValue? { + guard let data = receipts.last(where: { $0.path == path })?.installed, + let object = try? JSONSerialization.jsonObject(with: data, options: [.fragmentsAllowed]) else { + return nil + } + return CmuxSettingValue(jsonObject: object) + } +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChangeError.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChangeError.swift new file mode 100644 index 000000000000..3141298cef53 --- /dev/null +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChangeError.swift @@ -0,0 +1,73 @@ +import CmuxFoundation +import Foundation + +/// A ``CmuxSettingChange`` refused before anything was written. +public enum CmuxSettingChangeError: LocalizedError, Sendable, Equatable { + /// The path is empty, has an empty component, or isn't declared by the + /// cmux.json schema. + case unknownPath(String) + /// The path is inside a section that holds hand-written configuration + /// (`actions`, `commands`, `ui`, ...) rather than settings. + case notASetting(String) + /// `toggle` found a value that isn't a boolean. + case notBoolean(String) + /// `cycle` was given no values. + case emptyCycle(String) + /// `settingPresets.` doesn't exist. + case unknownPreset(String) + /// `settingPresets.` isn't an object of settings. + case invalidPreset(String) + /// The path only resolves if one of its keys contains ".", such as a + /// `workspaceGroups.byCwd` entry for `~/src/app.web`. Setting paths split + /// on every ".", so these keys can't be addressed; there is deliberately + /// no escaping syntax. + case keyContainsDot(String) + + public var errorDescription: String? { + let localization = CmuxConfigValidationLocalization() + switch self { + case .unknownPath(let path): + return localization.format( + "config.settingChange.unknownPath", + defaultValue: "'%@' isn't a cmux setting. Run `cmux docs settings` to list them.", + path + ) + case .notASetting(let path): + return localization.format( + "config.settingChange.notASetting", + defaultValue: "'%@' isn't a setting. Edit that section of cmux.json directly.", + path + ) + case .notBoolean(let path): + return localization.format( + "config.settingChange.notBoolean", + defaultValue: "'%@' isn't true or false, so it can't be toggled.", + path + ) + case .emptyCycle(let path): + return localization.format( + "config.settingChange.emptyCycle", + defaultValue: "Cycling '%@' needs at least one value.", + path + ) + case .unknownPreset(let name): + return localization.format( + "config.settingChange.unknownPreset", + defaultValue: "No setting preset named '%@'. Add it under settingPresets in ~/.config/cmux/cmux.json.", + name + ) + case .invalidPreset(let name): + return localization.format( + "config.settingChange.invalidPreset", + defaultValue: "Setting preset '%@' must be an object of settings, for example {\"sidebar\": {\"showPorts\": false}}.", + name + ) + case .keyContainsDot(let path): + return localization.format( + "config.settingChange.keyContainsDot", + defaultValue: "'%@' names a key that contains \".\", such as a workspaceGroups.byCwd path. Setting paths split on every \".\", so that key can't be changed this way. Edit it in cmux.json directly.", + path + ) + } + } +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChangePlanner.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChangePlanner.swift new file mode 100644 index 000000000000..7d333a1b39be --- /dev/null +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingChangePlanner.swift @@ -0,0 +1,221 @@ +import CmuxFoundation +import Foundation + +/// Turns a ``CmuxSettingChange`` into concrete path edits against the current +/// config root. Runs inside ``JSONConfigStore``'s writer lock so `toggle`, +/// `cycle`, and `preset` read the same document they rewrite. +struct CmuxSettingChangePlanner { + struct Edit { + let path: JSONPath + /// The value to write, or nil to remove the path. + let value: Any? + } + + /// Top-level sections of cmux.json that hold hand-written structure + /// rather than settings. A setting change never writes into them; the + /// `settingPresets` a change reads from is one of them. + static let nonSettingSections: Set = [ + "$schema", + "schemaVersion", + "actions", + "commands", + "newWorkspaceCommand", + "packs", + "rightSidebar", + "settingPresets", + "surfaceTabBarButtons", + "ui", + "vault", + ] + + static let presetsKey = "settingPresets" + + private let schema: CmuxConfigSchemaPathLookup + private let liveValues: CmuxSettingLiveValues + private let presetOverrides: [String: CmuxSettingValue] + + init( + schema: CmuxConfigSchemaPathLookup = CmuxConfigSchemaPathLookup(), + liveValues: CmuxSettingLiveValues = .schemaDefaultsOnly, + presetOverrides: [String: CmuxSettingValue] = [:] + ) { + self.schema = schema + self.liveValues = liveValues + self.presetOverrides = presetOverrides + } + + func edits(for change: CmuxSettingChange, in root: [String: Any]) throws -> [Edit] { + switch change { + case .set(let path, let value): + return [Edit(path: try settingPath(path, root: root), value: value.jsonObject)] + case .unset(let path): + return [Edit(path: try settingPath(path, root: root), value: nil)] + case .toggle(let rawPath): + let path = try settingPath(rawPath, root: root) + let current = effectiveValue(at: path, in: root) + guard let current = current.flatMap(CmuxSettingValue.init(jsonObject:)), + case .bool(let flag) = current else { + throw CmuxSettingChangeError.notBoolean(rawPath) + } + return [Edit(path: path, value: NSNumber(value: !flag))] + case .cycle(let rawPath, let values): + let path = try settingPath(rawPath, root: root) + guard let first = values.first else { + throw CmuxSettingChangeError.emptyCycle(rawPath) + } + let current = effectiveValue(at: path, in: root).flatMap(CmuxSettingValue.init(jsonObject:)) + let next: CmuxSettingValue + if let current, let index = values.firstIndex(where: { Self.matches($0, current) }) { + next = values[(index + 1) % values.count] + } else { + next = first + } + return [Edit(path: path, value: next.jsonObject)] + case .preset(let name): + let presetObject = (root[Self.presetsKey] as? [String: Any])?[name] + ?? presetOverrides[name]?.jsonObject + guard let preset = presetObject else { + throw CmuxSettingChangeError.unknownPreset(name) + } + guard let settings = preset as? [String: Any], !settings.isEmpty else { + throw CmuxSettingChangeError.invalidPreset(name) + } + if let section = settings.keys.sorted().first(where: Self.nonSettingSections.contains) { + throw CmuxSettingChangeError.notASetting(section) + } + var edits: [Edit] = [] + try appendLeafEdits(of: settings, prefix: [], into: &edits) + guard !edits.isEmpty else { + throw CmuxSettingChangeError.invalidPreset(name) + } + return edits + } + } + + /// Flattens a partial settings object into one edit per leaf so a preset + /// only replaces the keys it names. + private func appendLeafEdits( + of object: [String: Any], + prefix: [String], + into edits: inout [Edit] + ) throws { + for key in object.keys.sorted() { + let components = prefix + [key] + let value = object[key]! + if let child = value as? [String: Any] { + // An empty object merges nothing. Writing it as a leaf would + // replace the whole section, comments included. + try appendLeafEdits(of: child, prefix: components, into: &edits) + } else { + // Re-encode through CmuxSettingValue so a preset's 1.4 is + // written as 1.4, the same as a `set` or `cycle` value. + edits.append(Edit( + path: try settingPath(components), + value: CmuxSettingValue(jsonObject: value)?.jsonObject ?? value + )) + } + } + } + + /// Validates a dotted settings path: declared by the schema and outside + /// the non-setting sections. `root` is the current file, used only to + /// explain a refusal. + func settingPath(_ raw: String, root: [String: Any] = [:]) throws -> JSONPath { + let components = raw.split(separator: ".", omittingEmptySubsequences: false).map(String.init) + return try settingPath(components, display: raw, root: root) + } + + private func settingPath( + _ components: [String], + display: String? = nil, + root: [String: Any] = [:] + ) throws -> JSONPath { + let display = display ?? components.joined(separator: ".") + guard !components.isEmpty, !components.contains(where: \.isEmpty) else { + throw CmuxSettingChangeError.unknownPath(display) + } + // A key containing "." (a preset's object key) can't be addressed by + // a dotted JSONPath. + guard !components.contains(where: { $0.contains(".") }) else { + throw CmuxSettingChangeError.keyContainsDot(display) + } + guard !Self.nonSettingSections.contains(components[0]) else { + throw CmuxSettingChangeError.notASetting(display) + } + guard schema.isDeclared(components) else { + if resolvesWithDottedKey(components, root: root) { + throw CmuxSettingChangeError.keyContainsDot(display) + } + throw CmuxSettingChangeError.unknownPath(display) + } + return JSONPath(dottedPath: components.joined(separator: ".")) + } + + /// Whether rejoining some adjacent components with "." gives a declared + /// path whose rejoined key the caller most likely meant: one the file + /// already has, or a path-like key such as a `workspaceGroups.byCwd` + /// entry for `~/src/app.web`. A typo under a map keyed by names (for + /// example `shortcuts.bindings.toggleSidebar.foo`) stays an unknown + /// path. Used only to explain the refusal; such keys stay unsupported. + private func resolvesWithDottedKey(_ components: [String], root: [String: Any]) -> Bool { + // Each bit of `mask` joins component i to component i + 1. Paths are + // short; the cap keeps a pathological argument cheap. + let joints = components.count - 1 + guard joints > 0, joints <= 10 else { return false } + for mask in 1..<(1 << joints) { + var merged: [String] = [components[0]] + for index in 1.. Any? { + path.lookup(in: root) + ?? liveValue(at: path)?.jsonObject + ?? schema.defaultValue(at: path.components) + } + + func liveValue(at path: JSONPath) -> CmuxSettingValue? { + liveValues.value(at: path.components.joined(separator: ".")) + } + + func defaultValue(at path: JSONPath) -> Any? { + schema.defaultValue(at: path.components) + } + + /// The value at `components`, which may contain keys with "." that a + /// ``JSONPath`` can't express. + private static func value(at components: [String], in root: [String: Any]) -> Any? { + var cursor: Any = root + for component in components { + guard let object = cursor as? [String: Any], let next = object[component] else { return nil } + cursor = next + } + return cursor + } + + /// Cycle membership. Numbers compare with a small tolerance so `1.4` + /// read back from disk still matches the `1.4` in the action. + static func matches(_ lhs: CmuxSettingValue, _ rhs: CmuxSettingValue) -> Bool { + if case .number(let left) = lhs, case .number(let right) = rhs { + return abs(left - right) <= 1e-9 * max(1, abs(left), abs(right)) + } + return lhs == rhs + } +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingLiveValues.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingLiveValues.swift new file mode 100644 index 000000000000..c68c11e773e2 --- /dev/null +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingLiveValues.swift @@ -0,0 +1,101 @@ +import CmuxFoundation +import Foundation + +/// Where a setting change finds the value cmux is using for a key that +/// cmux.json doesn't set. +/// +/// Most settings are stored in UserDefaults by the Settings window; cmux.json +/// only overrides them. So when the file doesn't name a key, `toggle` and +/// `cycle` must start from the UserDefaults value, not the schema default, +/// or the first press would write the value the user already sees. +public struct CmuxSettingLiveValues: Sendable { + private let resolve: @Sendable (String) -> CmuxSettingValue? + + /// A resolver backed by a closure from a dotted settings path to its + /// current value, or nil when it has none. + public init(resolve: @escaping @Sendable (String) -> CmuxSettingValue?) { + self.resolve = resolve + } + + /// No live values: absent keys fall back to the schema default. + public static let schemaDefaultsOnly = CmuxSettingLiveValues { _ in nil } + + /// Reads UserDefaults-backed settings from the defaults domain + /// `suiteName`, such as the cmux app's bundle identifier when called from + /// the CLI. `nil` reads `UserDefaults.standard`, which is the app's own + /// domain inside the app. + /// + /// Only scalar values (true/false, numbers, strings) whose type the + /// schema allows at that path are used; see ``liveValue(for:storedJSON:schema:)``. + public static func userDefaults(suiteName: String?) -> CmuxSettingLiveValues { + let keys = Dictionary( + SettingCatalog().all.map { ($0.id, $0) }, + uniquingKeysWith: { first, _ in first } + ) + return CmuxSettingLiveValues { path in + guard let key = keys[path] else { return nil } + let defaults = suiteName.flatMap(UserDefaults.init(suiteName:)) ?? .standard + guard let stored = key.jsonValueInUserDefaults(defaults) else { return nil } + return liveValue(for: path, storedJSON: stored, schema: CmuxConfigSchemaPathLookup()) + } + } + + /// Settings whose UserDefaults value isn't stored in its cmux.json form. + /// Each maps the stored value (already in its catalog JSON encoding) to + /// the cmux.json value. Keep in sync with the cmux.json-to-UserDefaults + /// mapping in the app's settings file store + /// (`CmuxSettingsFileStore+AppSection.swift`, + /// `KeyboardShortcutSettingsFileStore.swift`); the catalog test in + /// `CmuxSettingChangeTests` fails when a new key needs an entry. + static let storedValueMappings: [String: @Sendable (Any) -> CmuxSettingValue?] = [ + // Stored as the workspace presentation mode. + "app.minimalMode": { stored in + switch stored as? String { + case "minimal": return .bool(true) + case "standard": return .bool(false) + default: return nil + } + }, + // Stored as the opposite flag, "close the workspace". + "app.keepWorkspaceOpenWhenClosingLastSurface": { stored in + (stored as? Bool).map { .bool(!$0) } + }, + // Stored as a width, with a negative sentinel for "no cap", which + // cmux.json spells `false`. + SessionContentWidthSettings.settingsPath: { stored in + guard let width = (stored as? NSNumber)?.doubleValue, width.isFinite else { return nil } + return width < SessionContentWidthSettings.minimumWidth ? .bool(false) : .number(width) + }, + ] + + /// The cmux.json value for a stored UserDefaults value, or nil when the + /// stored form can't be trusted to mean the same thing: a non-scalar + /// value (lists and maps are often stored as text), or a type the schema + /// doesn't allow at `path`. + static func liveValue( + for path: String, + storedJSON: Any, + schema: CmuxConfigSchemaPathLookup + ) -> CmuxSettingValue? { + if let mapping = storedValueMappings[path] { + return mapping(storedJSON) + } + guard let value = CmuxSettingValue(jsonObject: storedJSON) else { return nil } + let allowed = schema.declaredTypes(at: path.split(separator: ".").map(String.init)) + switch value { + case .bool: + return allowed.contains("boolean") ? value : nil + case .string: + return allowed.contains("string") ? value : nil + case .number(let number): + if allowed.contains("number") { return value } + return allowed.contains("integer") && number.rounded() == number ? value : nil + case .null, .array, .object: + return nil + } + } + + func value(at path: String) -> CmuxSettingValue? { + resolve(path) + } +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingReading.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingReading.swift new file mode 100644 index 000000000000..b1d5bcfad460 --- /dev/null +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingReading.swift @@ -0,0 +1,45 @@ +import Foundation + +/// A settings path as `cmux config get` reports it. +public struct CmuxSettingReading: Sendable, Equatable { + /// The dotted path that was read. + public let path: String + /// The value cmux.json sets, or nil when the key is absent. + public let configured: CmuxSettingValue? + /// The value stored outside cmux.json, such as one set in the Settings + /// window, or nil when there is none. + public let live: CmuxSettingValue? + /// The schema default, or nil when the schema declares none. + public let defaultValue: CmuxSettingValue? + + /// The value cmux uses: the configured value, else the live value, else + /// the default. + public var effective: CmuxSettingValue? { + configured ?? live ?? defaultValue + } +} + +extension JSONConfigStore { + /// Reads one settings path straight from disk, validated the same way + /// ``apply(_:)`` validates a write. + /// + /// - Parameter liveValues: Where to read the value of a key the file + /// doesn't set, as in ``apply(_:liveValues:)``. + /// - Throws: ``CmuxSettingChangeError`` for an unknown or non-setting + /// path, or a read/parse error for an unreadable file. + public nonisolated func reading( + at path: String, + liveValues: CmuxSettingLiveValues = .schemaDefaultsOnly + ) throws -> CmuxSettingReading { + let planner = CmuxSettingChangePlanner(liveValues: liveValues) + let root = try snapshotRoot() + let jsonPath = try planner.settingPath(path, root: root) + let configured = jsonPath.lookup(in: root).flatMap(CmuxSettingValue.init(jsonObject:)) + return CmuxSettingReading( + path: path, + configured: configured, + live: configured == nil ? planner.liveValue(at: jsonPath) : nil, + defaultValue: planner.defaultValue(at: jsonPath).flatMap(CmuxSettingValue.init(jsonObject:)) + ) + } +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingValue.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingValue.swift new file mode 100644 index 000000000000..3eb10c11b711 --- /dev/null +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/SettingChanges/CmuxSettingValue.swift @@ -0,0 +1,149 @@ +import Foundation + +/// A JSON value carried by a setting change, such as the `set` value or a +/// `cycle` entry of a `"type": "setting"` action. +/// +/// It exists so setting changes can be `Hashable` and `Sendable` like the +/// rest of the action registry, and converts to and from the Foundation +/// objects `JSONSerialization` and ``JSONConfigStore`` work with. +public enum CmuxSettingValue: Sendable, Hashable { + case null + case bool(Bool) + case number(Double) + case string(String) + case array([CmuxSettingValue]) + case object([String: CmuxSettingValue]) + + /// Converts a `JSONSerialization` object. Returns nil for values JSON + /// can't represent, including non-finite numbers. + public init?(jsonObject: Any) { + switch jsonObject { + case is NSNull: + self = .null + case let number as NSNumber: + if CFGetTypeID(number) == CFBooleanGetTypeID() { + self = .bool(number.boolValue) + } else { + let value = number.doubleValue + guard value.isFinite else { return nil } + self = .number(value) + } + case let string as String: + self = .string(string) + case let array as [Any]: + var values: [CmuxSettingValue] = [] + values.reserveCapacity(array.count) + for element in array { + guard let value = CmuxSettingValue(jsonObject: element) else { return nil } + values.append(value) + } + self = .array(values) + case let dictionary as [String: Any]: + var values: [String: CmuxSettingValue] = [:] + for (key, element) in dictionary { + guard let value = CmuxSettingValue(jsonObject: element) else { return nil } + values[key] = value + } + self = .object(values) + default: + return nil + } + } + + /// Parses a command-line value the way `cmux config set` does: valid JSON + /// (`true`, `1.4`, `"text"`, `[...]`, `{...}`) keeps its type, and any + /// other text is taken as a plain string, so `cmux config set + /// app.appearance dark` works without shell-quoting JSON. + public init(commandLineArgument raw: String) { + if let data = raw.data(using: .utf8), + let object = try? JSONSerialization.jsonObject(with: data, options: [.fragmentsAllowed]), + let value = CmuxSettingValue(jsonObject: object) { + self = value + } else { + self = .string(raw) + } + } + + /// The Foundation representation `JSONSerialization` accepts. Integral + /// numbers become integers so `2` round-trips as `2`, not `2.0`. Other + /// numbers become an `NSDecimalNumber` built from Swift's shortest + /// round-trip text, because `JSONSerialization` prints a `Double` with 17 + /// significant digits and would write `1.4` as `1.3999999999999999`. + public var jsonObject: Any { + switch self { + case .null: + return NSNull() + case .bool(let value): + return NSNumber(value: value) + case .number(let value): + if value.rounded() == value, abs(value) < 9_007_199_254_740_992 { + return NSNumber(value: Int64(value)) + } + let decimal = NSDecimalNumber(string: "\(value)", locale: Locale(identifier: "en_US_POSIX")) + return decimal == NSDecimalNumber.notANumber ? NSNumber(value: value) : decimal + case .string(let value): + return value + case .array(let values): + return values.map(\.jsonObject) + case .object(let values): + return values.mapValues(\.jsonObject) + } + } + + /// Compact JSON text for messages and CLI output. + public var jsonText: String { + guard let data = try? JSONSerialization.data( + withJSONObject: jsonObject, + options: [.fragmentsAllowed, .sortedKeys, .withoutEscapingSlashes] + ), let text = String(data: data, encoding: .utf8) else { + return "null" + } + return text + } +} + +extension CmuxSettingValue: Codable { + public init(from decoder: any Decoder) throws { + let container = try decoder.singleValueContainer() + if container.decodeNil() { + self = .null + } else if let value = try? container.decode(Bool.self) { + self = .bool(value) + } else if let value = try? container.decode(Double.self) { + self = .number(value) + } else if let value = try? container.decode(String.self) { + self = .string(value) + } else if let value = try? container.decode([CmuxSettingValue].self) { + self = .array(value) + } else if let value = try? container.decode([String: CmuxSettingValue].self) { + self = .object(value) + } else { + throw DecodingError.dataCorruptedError( + in: container, + debugDescription: "expected a JSON value" + ) + } + } + + public func encode(to encoder: any Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case .null: + try container.encodeNil() + case .bool(let value): + try container.encode(value) + case .number(let value): + if value.rounded() == value, abs(value) < 9_007_199_254_740_992 { + try container.encode(Int64(value)) + } else { + try container.encode(value) + } + case .string(let value): + try container.encode(value) + case .array(let values): + try container.encode(values) + case .object(let values): + try container.encode(values) + } + } +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigAtomicPublisher.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigAtomicPublisher.swift index 280e8e4a400d..e57579ef2481 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigAtomicPublisher.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigAtomicPublisher.swift @@ -18,7 +18,12 @@ struct JSONConfigAtomicPublisher: Sendable { self.exchangeOverride = exchangeOverride } - func publish(_ data: Data, to target: URL, expected: Data?) throws { + func publish( + _ data: Data, + to target: URL, + expected: Data?, + isTargetCurrent: (@Sendable () -> Bool)? = nil + ) throws { let fileManager = FileManager.default let parent = target.deletingLastPathComponent() try fileManager.createDirectory(at: parent, withIntermediateDirectories: true) @@ -59,12 +64,19 @@ struct JSONConfigAtomicPublisher: Sendable { try? fileManager.setAttributes([.posixPermissions: permissions], ofItemAtPath: staging.path) } - guard fileManager.fileExists(atPath: target.path) else { + guard fileManager.fileExists(atPath: target.path), isTargetCurrent?() ?? true else { throw JSONConfigWriteConflict.sourceChanged } try exchange(staging, target) stagingContainsRecovery = true + guard isTargetCurrent?() ?? true else { + if rollbackIfStillOwned(candidate: data, recovery: expected, staging: staging, target: target) { + stagingContainsRecovery = false + } + throw JSONConfigWriteConflict.sourceChanged + } + let recovered: Data do { recovered = try Data(contentsOf: staging) diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigMutationReceipt.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigMutationReceipt.swift index 5d5cac93ace8..775c3431ad1c 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigMutationReceipt.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigMutationReceipt.swift @@ -19,8 +19,16 @@ public struct JSONConfigMutationReceipt: Sendable { static func encode(_ value: Any?) throws -> Data? { guard let value else { return nil } return try JSONSerialization.data( - withJSONObject: value, + withJSONObject: canonicalJSONObject(value), options: [.fragmentsAllowed, .sortedKeys] ) } } + +/// Re-encodes numbers the way ``CmuxSettingValue`` writes them, so `1.4` +/// read back from disk and `1.4` about to be written compare equal. Without +/// it, `JSONSerialization` prints the parsed double as `1.3999999999999999` +/// and every re-set of a fraction looks like a change. +func canonicalJSONObject(_ value: Any) -> Any { + CmuxSettingValue(jsonObject: value)?.jsonObject ?? value +} diff --git a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigStore.swift b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigStore.swift index 26dae1163bb0..88adac1f26c1 100644 --- a/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigStore.swift +++ b/Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigStore.swift @@ -328,6 +328,12 @@ public actor JSONConfigStore { try readFromDisk(at: fileURL) } + /// The parsed root as it is on disk now, for synchronous readers such as + /// ``reading(at:)``. A missing file reads as an empty root. + nonisolated func snapshotRoot() throws -> [String: Any] { + try readFromDisk() + } + private nonisolated func readFromDisk(at url: URL) throws -> [String: Any] { try readDocument(at: url).root } @@ -415,6 +421,93 @@ public actor JSONConfigStore { undoing: JSONConfigMutationReceipt? = nil, validateSemantics: Bool = true ) async throws -> JSONConfigMutationReceipt { + let receipts = try await mutateRoot(validateSemantics: validateSemantics) { root, writeURL in + // Undo owns the path only while it still holds the installed value on + // the same resolved target. A newer choice, or a retargeted symlink, + // wins and the file stays byte-for-byte unchanged. + if let undoing { + let before = try JSONConfigMutationReceipt.encode(path.lookup(in: root)) + if undoing.target != writeURL || before != undoing.installed { + throw JSONConfigMutationError.undoConflict( + path: undoing.path, + expected: undoing.installed, + current: before, + restore: undoing.before + ) + } + } + return [CmuxSettingChangePlanner.Edit(path: path, value: value)] + } + return receipts[0] + } + + /// Applies a setting change as one validated, atomic publication. + /// + /// `toggle`, `cycle`, and `preset` read the current value inside the same + /// writer lock that publishes the result, so two quick invocations can't + /// both read the old value. The complete candidate is validated against + /// the canonical global schema and refused only for issues this change + /// introduces. Comments and unrelated formatting are preserved. + /// + /// - Parameters: + /// - change: The edit to apply. + /// - liveValues: Where `toggle` and `cycle` read the current value of + /// a key the file doesn't set, before falling back to the schema + /// default. Pass ``CmuxSettingLiveValues/userDefaults(suiteName:)`` + /// so settings changed in the Settings window start from what the + /// user sees. + /// - presetOverrides: Presets resolved from trusted config packs. These + /// values are used for planning but are never written into the file. + /// - Returns: One receipt per path the change addressed, including paths + /// that already held the requested value. Runtime application is not + /// observed; cmux's config file watcher applies the saved file. + /// - Throws: ``CmuxSettingChangeError`` for an unknown or non-setting + /// path, a non-boolean toggle, or a missing preset; + /// ``JSONConfigMutationError/invalidCandidate(_:)`` for a value the + /// schema rejects; or a conflict, parse, or filesystem error. Nothing is + /// published on throw. + public func apply( + _ change: CmuxSettingChange, + liveValues: CmuxSettingLiveValues = .schemaDefaultsOnly, + presetOverrides: [String: CmuxSettingValue] = [:] + ) async throws -> CmuxSettingChangeResult { + let planner = CmuxSettingChangePlanner( + liveValues: liveValues, + presetOverrides: presetOverrides + ) + let receipts = try await mutateRoot(validateSemantics: true) { root, _ in + try planner.edits(for: change, in: root) + } + return CmuxSettingChangeResult(receipts: receipts) + } + + /// Computes the edits, writes them to disk, and **only then** commits to + /// the in-memory cache. + /// + /// If the write fails (e.g. permission denied, full disk), the cache is + /// left untouched so subsequent reads still reflect what is actually on + /// disk. Without this ordering, a failed write would silently leave the + /// cache ahead of the file and reads would return phantom unsaved data. + /// + /// If the existing file on disk exists but cannot be parsed (corrupt + /// JSON, malformed JSONC, top-level non-object), the write is refused + /// — overwriting a corrupt file would silently destroy whatever real + /// content the user has in it. The error from + /// ``readFromDisk(at:)`` is propagated to the caller. + /// + /// The root must never come from a cache loaded under a different resolved + /// target, since that would overwrite the new target's contents with the old + /// target's data. A single mutation reads and writes through one resolution + /// snapshot, so a concurrent retarget serializes against the write instead + /// of splitting the operation across two targets. + /// + /// `makeEdits` runs under the writer lock with the authoritative on-disk + /// root and resolved target, so read-modify-write edits observe exactly + /// the document they replace. Every edit lands in one publication. + private func mutateRoot( + validateSemantics: Bool, + makeEdits: ([String: Any], URL) throws -> [CmuxSettingChangePlanner.Edit] + ) async throws -> [JSONConfigMutationReceipt] { // Resolve once so parsing, source editing, and the atomic replace all // target the same file when cmux.json is a symlink. let writeURL = Self.resolvedWriteURL(for: fileURL) @@ -427,32 +520,24 @@ public actor JSONConfigStore { throw JSONConfigWriteConflict.sourceChanged } let document = try readDocument(at: writeURL) - - // Undo owns the path only while it still holds the installed value on - // the same resolved target. A newer choice, or a retargeted symlink, - // wins and the file stays byte-for-byte unchanged. - let before = try JSONConfigMutationReceipt.encode(path.lookup(in: document.root)) - if let undoing, undoing.target != writeURL || before != undoing.installed { - throw JSONConfigMutationError.undoConflict( - path: undoing.path, - expected: undoing.installed, - current: before, - restore: undoing.before - ) - } + let edits = try makeEdits(document.root, writeURL) var candidateRoot = document.root - if let value { - path.assign(value, in: &candidateRoot) - } else { - path.remove(in: &candidateRoot) + for edit in edits { + if let value = edit.value { + edit.path.assign(value, in: &candidateRoot) + } else { + edit.path.remove(in: &candidateRoot) + } + } + let receipts = try edits.map { edit in + JSONConfigMutationReceipt( + path: edit.path.components.joined(separator: "."), + before: try JSONConfigMutationReceipt.encode(edit.path.lookup(in: document.root)), + installed: try JSONConfigMutationReceipt.encode(edit.path.lookup(in: candidateRoot)), + target: writeURL + ) } - let receipt = JSONConfigMutationReceipt( - path: path.components.joined(separator: "."), - before: before, - installed: try JSONConfigMutationReceipt.encode(path.lookup(in: candidateRoot)), - target: writeURL - ) // Semantic no-ops stay byte-stable and avoid an atomic replace. Reading // from disk here also refreshes the cache if an external edit landed @@ -462,27 +547,28 @@ public actor JSONConfigStore { cachedRoot = document.root cacheValid = true cachedRootResolvedPath = writeURL.path - return receipt + return receipts } // Missing/zero-byte configs have no authoring text to preserve. Seed // the smallest editable object and let the path editor create only the // requested path. - let source: String + var updatedSource: String if let existingSource = document.source, !existingSource.isEmpty { - source = existingSource + updatedSource = existingSource } else { - source = "{\n}\n" + updatedSource = "{\n}\n" } - let updatedSource: String - if let value { - updatedSource = try sourceEditor.set( - path: path.components, - value: JSONCPathEditor.EncodedValue(rawValue: value), - in: source - ) - } else { - updatedSource = try sourceEditor.remove(path: path.components, in: source) + for edit in edits { + if let value = edit.value { + updatedSource = try sourceEditor.set( + path: edit.path.components, + value: JSONCPathEditor.EncodedValue(rawValue: value), + in: updatedSource + ) + } else { + updatedSource = try sourceEditor.remove(path: edit.path.components, in: updatedSource) + } } let data = try sanitizer.encodedSource(updatedSource, preserving: document.originalData) @@ -508,7 +594,12 @@ public actor JSONConfigStore { throw JSONConfigWriteConflict.sourceChanged } do { - try publisher.publish(data, to: writeURL, expected: document.originalData) + try publisher.publish( + data, + to: writeURL, + expected: document.originalData, + isTargetCurrent: { Self.resolvedWriteURL(for: fileURL) == writeURL } + ) } catch { // A filesystem exchange can have happened before a later validation // error. Never keep serving a pre-publication cache after any @@ -532,7 +623,7 @@ public actor JSONConfigStore { for continuation in subscribers.values { continuation.yield(()) } - return receipt + return receipts } /// Rejects a complete candidate that has canonical global-schema issues @@ -553,11 +644,11 @@ public actor JSONConfigStore { _ rhs: [String: Any] ) -> Bool { guard let left = try? JSONSerialization.data( - withJSONObject: lhs, + withJSONObject: canonicalJSONObject(lhs), options: [.sortedKeys, .withoutEscapingSlashes] ), let right = try? JSONSerialization.data( - withJSONObject: rhs, + withJSONObject: canonicalJSONObject(rhs), options: [.sortedKeys, .withoutEscapingSlashes] ) else { return false diff --git a/Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/CmuxSettingChangeTests.swift b/Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/CmuxSettingChangeTests.swift new file mode 100644 index 000000000000..736dc27aa110 --- /dev/null +++ b/Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/CmuxSettingChangeTests.swift @@ -0,0 +1,471 @@ +import CmuxFoundation +import Foundation +import Testing +@testable import CmuxSettings + +@Suite("Setting changes applied through JSONConfigStore") +struct CmuxSettingChangeTests { + private func fixture(_ contents: String) throws -> URL { + let dir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + let file = dir.appendingPathComponent("cmux.json") + try Data(contents.utf8).write(to: file) + return file + } + + private func root(_ file: URL) throws -> [String: Any] { + let data = try JSONCSanitizer().sanitize(Data(contentsOf: file)) + return try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:] + } + + private func value(_ path: String, in file: URL) throws -> Any? { + JSONPath(dottedPath: path).lookup(in: try root(file)) + } + + private let baseConfig = """ + { + // keep this comment + "actions": { + "scroll.cycle": { "type": "setting", "path": "terminal.scrollSpeed", "cycle": [1.0, 1.4, 1.8] } + }, + "terminal": { "scrollSpeed": 1.4 }, + "sidebar": { "showLog": true } + } + + """ + + @Test("set writes the value and keeps comments and unrelated keys") + func setPreservesUnrelatedContent() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let result = try await JSONConfigStore(fileURL: file) + .apply(.set(path: "fileEditor.wordWrap", value: .bool(true))) + + #expect(result.installedValue(at: "fileEditor.wordWrap") == .bool(true)) + #expect((try value("fileEditor.wordWrap", in: file) as? NSNumber)?.boolValue == true) + #expect((try value("terminal.scrollSpeed", in: file) as? NSNumber)?.doubleValue == 1.4) + let text = try String(contentsOf: file, encoding: .utf8) + #expect(text.contains("// keep this comment")) + #expect(text.contains("\"scroll.cycle\"")) + } + + @Test("toggle flips a configured boolean, then the schema default when absent") + func toggleUsesConfiguredValueOrDefault() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + + _ = try await store.apply(.toggle(path: "sidebar.showLog")) + #expect((try value("sidebar.showLog", in: file) as? NSNumber)?.boolValue == false) + _ = try await store.apply(.toggle(path: "sidebar.showLog")) + #expect((try value("sidebar.showLog", in: file) as? NSNumber)?.boolValue == true) + + // fileEditor.wordWrap is absent and defaults to false, so the first + // toggle turns it on. + _ = try await store.apply(.toggle(path: "fileEditor.wordWrap")) + #expect((try value("fileEditor.wordWrap", in: file) as? NSNumber)?.boolValue == true) + } + + @Test("toggle refuses a non-boolean setting without writing") + func toggleRefusesNonBoolean() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let before = try Data(contentsOf: file) + await #expect(throws: CmuxSettingChangeError.notBoolean("terminal.scrollSpeed")) { + _ = try await JSONConfigStore(fileURL: file).apply(.toggle(path: "terminal.scrollSpeed")) + } + #expect(try Data(contentsOf: file) == before) + } + + @Test("cycle advances, wraps, and restarts from an unlisted value") + func cycleAdvancesAndWraps() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + let values: [CmuxSettingValue] = [.number(1.0), .number(1.4), .number(1.8)] + + _ = try await store.apply(.cycle(path: "terminal.scrollSpeed", values: values)) + #expect((try value("terminal.scrollSpeed", in: file) as? NSNumber)?.doubleValue == 1.8) + _ = try await store.apply(.cycle(path: "terminal.scrollSpeed", values: values)) + #expect((try value("terminal.scrollSpeed", in: file) as? NSNumber)?.doubleValue == 1.0) + + _ = try await store.apply(.set(path: "terminal.scrollSpeed", value: .number(2.5))) + _ = try await store.apply(.cycle(path: "terminal.scrollSpeed", values: values)) + #expect((try value("terminal.scrollSpeed", in: file) as? NSNumber)?.doubleValue == 1.0) + } + + @Test("cycle starts from the schema default when the key is absent") + func cycleStartsFromDefault() async throws { + let file = try fixture("{}\n") + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + // terminal.scrollSpeed defaults to 1.0, so the next entry is 1.4. + _ = try await JSONConfigStore(fileURL: file) + .apply(.cycle(path: "terminal.scrollSpeed", values: [.number(1.0), .number(1.4)])) + #expect((try value("terminal.scrollSpeed", in: file) as? NSNumber)?.doubleValue == 1.4) + } + + @Test("unknown, structural, and malformed paths are refused") + func refusesNonSettingPaths() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + let before = try Data(contentsOf: file) + + await #expect(throws: CmuxSettingChangeError.unknownPath("terminal.scrollSpeeed")) { + _ = try await store.apply(.set(path: "terminal.scrollSpeeed", value: .number(1))) + } + await #expect(throws: CmuxSettingChangeError.notASetting("actions.evil")) { + _ = try await store.apply(.set(path: "actions.evil", value: .object(["type": .string("command")]))) + } + await #expect(throws: CmuxSettingChangeError.unknownPath("terminal..scrollSpeed")) { + _ = try await store.apply(.unset(path: "terminal..scrollSpeed")) + } + #expect(try Data(contentsOf: file) == before) + } + + @Test("toggle and cycle start from the live value of a key cmux.json doesn't set") + func liveValuesSeedToggleAndCycle() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + // The Settings window turned word wrap on and set scroll speed 1.8; + // neither is in the file. + let live = CmuxSettingLiveValues { path in + switch path { + case "fileEditor.wordWrap": return .bool(true) + case "sidebar.showLog": return .bool(false) + default: return nil + } + } + + _ = try await store.apply(.toggle(path: "fileEditor.wordWrap"), liveValues: live) + #expect((try value("fileEditor.wordWrap", in: file) as? NSNumber)?.boolValue == false) + + // A key the file does set ignores the live value. + _ = try await store.apply(.toggle(path: "sidebar.showLog"), liveValues: live) + #expect((try value("sidebar.showLog", in: file) as? NSNumber)?.boolValue == false) + + let reading = try store.reading(at: "fileEditor.wordWrap", liveValues: live) + #expect(reading.configured == .bool(false)) + #expect(reading.live == nil) + _ = try await store.apply(.unset(path: "fileEditor.wordWrap")) + let unset = try store.reading(at: "fileEditor.wordWrap", liveValues: live) + #expect(unset.configured == nil) + #expect(unset.live == .bool(true)) + #expect(unset.effective == .bool(true)) + } + + @Test("UserDefaults-backed settings are read in their cmux.json form") + func userDefaultsLiveValues() throws { + let suiteName = "cmux.settings.live-values.\(UUID().uuidString)" + let defaults = try #require(UserDefaults(suiteName: suiteName)) + defer { defaults.removePersistentDomain(forName: suiteName) } + let live = CmuxSettingLiveValues.userDefaults(suiteName: suiteName) + + #expect(live.value(at: "fileEditor.wordWrap") == nil) + defaults.set(true, forKey: SettingCatalog().fileEditor.wordWrap.userDefaultsKey) + #expect(live.value(at: "fileEditor.wordWrap") == .bool(true)) + #expect(live.value(at: "not.a.setting") == nil) + } + + @Test("re-setting a fraction that is already stored is not a change") + func resettingTheSameFractionIsUnchanged() async throws { + let file = try fixture("{ \"terminal\": { \"scrollSpeed\": 1.4 } }\n") + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let before = try Data(contentsOf: file) + + let result = try await JSONConfigStore(fileURL: file) + .apply(.set(path: "terminal.scrollSpeed", value: .number(1.4))) + + #expect(result.receipts.allSatisfy { $0.before == $0.installed }) + #expect(try Data(contentsOf: file) == before) + } + + @Test("stored values that aren't in their cmux.json form are mapped or dropped") + func storedValueMappings() { + let schema = CmuxConfigSchemaPathLookup() + func live(_ path: String, _ stored: Any) -> CmuxSettingValue? { + CmuxSettingLiveValues.liveValue(for: path, storedJSON: stored, schema: schema) + } + #expect(live("fileEditor.wordWrap", true) == .bool(true)) + #expect(live("terminal.scrollSpeed", 1.8) == .number(1.8)) + #expect(live("app.minimalMode", "minimal") == .bool(true)) + #expect(live("app.minimalMode", "standard") == .bool(false)) + #expect(live("app.keepWorkspaceOpenWhenClosingLastSurface", true) == .bool(false)) + #expect(live("terminal.sessionContentMaxWidth", -1) == .bool(false)) + #expect(live("terminal.sessionContentMaxWidth", 980) == .number(980)) + // Lists and maps are often stored as text; never trust them. + #expect(live("browser.hostsToOpenInEmbeddedBrowser", "example.com\nlocalhost") == nil) + #expect(live("notifications.soundOverrides", "{}") == nil) + // A stored type the schema doesn't allow is dropped. + #expect(live("fileEditor.wordWrap", "yes") == nil) + } + + /// Every UserDefaults-backed setting the live resolver would accept must + /// store its value in cmux.json form. A key whose encoded default + /// disagrees with the schema default (an inverted flag, a mode string) + /// needs an entry in `storedValueMappings`, or toggle would start from + /// the wrong value. + @Test("catalog settings the live resolver accepts store their cmux.json form") + func catalogLiveValuesMatchSchemaDefaults() { + let schema = CmuxConfigSchemaPathLookup() + var mismatches: [String] = [] + for key in SettingCatalog().all { + guard CmuxSettingLiveValues.storedValueMappings[key.id] == nil, + let encodedDefault = key.jsonDefaultValue(), + let accepted = CmuxSettingLiveValues.liveValue(for: key.id, storedJSON: encodedDefault, schema: schema), + let schemaDefault = schema.defaultValue(at: key.id.split(separator: ".").map(String.init)), + !(schemaDefault is NSNull), + let expected = CmuxSettingValue(jsonObject: schemaDefault) else { + continue + } + if !CmuxSettingChangePlanner.matches(accepted, expected) { + mismatches.append("\(key.id): stored default \(accepted.jsonText), schema default \(expected.jsonText)") + } + } + #expect(mismatches.isEmpty, "\(mismatches.joined(separator: "; "))") + } + + @Test("a typo under a map keyed by names stays an unknown path") + func typoUnderNamedMapIsUnknown() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + await #expect(throws: CmuxSettingChangeError.unknownPath("workspaceGroups.byCwd.app.colr")) { + _ = try await JSONConfigStore(fileURL: file) + .apply(.set(path: "workspaceGroups.byCwd.app.colr", value: .string("#FFFFFF"))) + } + } + + @Test("a key containing a dot is refused with an explicit reason") + func refusesKeysContainingDots() async throws { + let file = try fixture(""" + { + "settingPresets": { + "webGroup": { "workspaceGroups": { "byCwd": { "~/src/app.web": { "color": "#7A4FD8" } } } } + }, + "workspaceGroups": { "byCwd": { "~/src/app": { "color": "#112233" } } } + } + + """) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + let before = try Data(contentsOf: file) + + // A byCwd key without a dot is an ordinary path. + #expect(try store.reading(at: "workspaceGroups.byCwd.~/src/app.color").configured == .string("#112233")) + + // Split on every ".", this path only resolves if "~/src/app.web" is + // one key, so the refusal names the dot instead of an unknown path. + await #expect(throws: CmuxSettingChangeError.keyContainsDot("workspaceGroups.byCwd.~/src/app.web.color")) { + _ = try await store.apply(.set(path: "workspaceGroups.byCwd.~/src/app.web.color", value: .string("#FFFFFF"))) + } + #expect(throws: CmuxSettingChangeError.keyContainsDot("workspaceGroups.byCwd.~/src/app.web.color")) { + _ = try store.reading(at: "workspaceGroups.byCwd.~/src/app.web.color") + } + await #expect(throws: CmuxSettingChangeError.keyContainsDot("workspaceGroups.byCwd.~/src/app.web.color")) { + _ = try await store.apply(.preset(name: "webGroup")) + } + #expect(try Data(contentsOf: file) == before) + #expect(CmuxSettingChangeError.keyContainsDot("x").errorDescription?.contains("\".\"") == true) + } + + @Test("fractional numbers are written the way they were typed") + func fractionalNumbersKeepTheirShortForm() async throws { + let file = try fixture(""" + { + "settingPresets": { "fast": { "terminal": { "scrollSpeed": 1.8 } } } + } + + """) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + + _ = try await store.apply(.set(path: "terminal.scrollSpeed", value: .number(1.4))) + var text = try String(contentsOf: file, encoding: .utf8) + #expect(text.contains("1.4")) + #expect(!text.contains("1.399")) + + _ = try await store.apply(.preset(name: "fast")) + text = try String(contentsOf: file, encoding: .utf8) + #expect(!text.contains("1.800")) + #expect(!text.contains("1.799")) + #expect((try value("terminal.scrollSpeed", in: file) as? NSNumber)?.doubleValue == 1.8) + + #expect(CmuxSettingValue.number(1.4).jsonText == "1.4") + #expect(CmuxSettingValue.number(-0.25).jsonText == "-0.25") + #expect(CmuxSettingValue.number(2).jsonText == "2") + } + + @Test("each change describes itself as the equivalent cmux config command") + func commandLineDescriptions() { + #expect(CmuxSettingChange.set(path: "terminal.scrollSpeed", value: .number(1.4)).commandLineDescription + == "cmux config set terminal.scrollSpeed 1.4") + #expect(CmuxSettingChange.toggle(path: "fileEditor.wordWrap").commandLineDescription + == "cmux config toggle fileEditor.wordWrap") + #expect(CmuxSettingChange.cycle(path: "app.appearance", values: [.string("light"), .string("dark")]).commandLineDescription + == "cmux config cycle app.appearance \"light\" \"dark\"") + #expect(CmuxSettingChange.unset(path: "terminal.scrollSpeed").commandLineDescription + == "cmux config unset terminal.scrollSpeed") + #expect(CmuxSettingChange.preset(name: "sidebar.quiet").commandLineDescription + == "cmux config preset sidebar.quiet") + } + + @Test("values the schema rejects are refused without writing") + func refusesInvalidValues() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let before = try Data(contentsOf: file) + let error = await #expect(throws: JSONConfigMutationError.self) { + _ = try await JSONConfigStore(fileURL: file) + .apply(.set(path: "terminal.scrollSpeed", value: .number(99))) + } + guard case .invalidCandidate(let issues)? = error else { + Issue.record("expected invalidCandidate, got \(String(describing: error))") + return + } + #expect(issues.contains { $0.path.contains("scrollSpeed") }) + await #expect(throws: JSONConfigMutationError.self) { + _ = try await JSONConfigStore(fileURL: file) + .apply(.set(path: "fileEditor.wordWrap", value: .string("yes"))) + } + #expect(try Data(contentsOf: file) == before) + } + + @Test("unset removes the key so the default applies") + func unsetRemovesKey() async throws { + let file = try fixture(baseConfig) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let result = try await JSONConfigStore(fileURL: file).apply(.unset(path: "terminal.scrollSpeed")) + #expect(result.installedValue(at: "terminal.scrollSpeed") == nil) + #expect(try value("terminal.scrollSpeed", in: file) == nil) + #expect(try String(contentsOf: file, encoding: .utf8).contains("// keep this comment")) + } + + @Test("a preset merges its settings in one write and leaves other keys alone") + func presetMergesLeaves() async throws { + let file = try fixture(""" + { + "settingPresets": { + "sidebar.quiet": { + "sidebar": { "showPorts": false, "showPullRequests": false }, + "terminal": { "rendererRealization": { "maxWarmRenderers": 2 } } + } + }, + "sidebar": { "showLog": true, "showPorts": true }, + "terminal": { "rendererRealization": { "idleSeconds": 30 } } + } + + """) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let result = try await JSONConfigStore(fileURL: file).apply(.preset(name: "sidebar.quiet")) + + #expect(Set(result.receipts.map(\.path)) == [ + "sidebar.showPorts", + "sidebar.showPullRequests", + "terminal.rendererRealization.maxWarmRenderers", + ]) + #expect((try value("sidebar.showPorts", in: file) as? NSNumber)?.boolValue == false) + #expect((try value("sidebar.showPullRequests", in: file) as? NSNumber)?.boolValue == false) + #expect((try value("sidebar.showLog", in: file) as? NSNumber)?.boolValue == true) + #expect((try value("terminal.rendererRealization.maxWarmRenderers", in: file) as? NSNumber)?.intValue == 2) + #expect((try value("terminal.rendererRealization.idleSeconds", in: file) as? NSNumber)?.intValue == 30) + } + + @Test("trusted pack presets can be applied without persisting pack metadata") + func presetOverrideMergesLeaves() async throws { + let file = try fixture(""" + { + "settingPresets": { + "sidebar.quiet": { + "sidebar": { "showPorts": true } + } + }, + "sidebar": { "showLog": true } + } + + """) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + let result = try await store.apply( + .preset(name: "sidebar.quiet"), + presetOverrides: [ + "sidebar.quiet": .object([ + "sidebar": .object(["showPorts": .bool(false)]) + ]) + ] + ) + + #expect(result.receipts.map(\.path) == ["sidebar.showPorts"]) + #expect((try value("sidebar.showPorts", in: file) as? NSNumber)?.boolValue == true) + #expect((try value("settingPresets.sidebar.quiet", in: file)) == nil) + } + + @Test("a missing or structural preset is refused without writing") + func presetRefusals() async throws { + let file = try fixture(""" + { + "settingPresets": { + "sneaky": { "actions": { "x": { "type": "command", "command": "echo" } } }, + "empty": {}, + "hollow": { "sidebar": {} } + } + } + + """) + defer { try? FileManager.default.removeItem(at: file.deletingLastPathComponent()) } + let store = JSONConfigStore(fileURL: file) + let before = try Data(contentsOf: file) + await #expect(throws: CmuxSettingChangeError.unknownPreset("missing")) { + _ = try await store.apply(.preset(name: "missing")) + } + await #expect(throws: CmuxSettingChangeError.notASetting("actions")) { + _ = try await store.apply(.preset(name: "sneaky")) + } + await #expect(throws: CmuxSettingChangeError.invalidPreset("empty")) { + _ = try await store.apply(.preset(name: "empty")) + } + // An empty nested object merges nothing; it must not replace the + // whole sidebar section. + await #expect(throws: CmuxSettingChangeError.invalidPreset("hollow")) { + _ = try await store.apply(.preset(name: "hollow")) + } + #expect(try Data(contentsOf: file) == before) + } + + @Test("command-line values parse as JSON or fall back to a string") + func commandLineValueParsing() { + #expect(CmuxSettingValue(commandLineArgument: "true") == .bool(true)) + #expect(CmuxSettingValue(commandLineArgument: "1.8") == .number(1.8)) + #expect(CmuxSettingValue(commandLineArgument: "\"dark\"") == .string("dark")) + #expect(CmuxSettingValue(commandLineArgument: "dark") == .string("dark")) + #expect(CmuxSettingValue(commandLineArgument: "null") == .null) + #expect(CmuxSettingValue(commandLineArgument: "[\"ctrl+b\",\"c\"]") == .array([.string("ctrl+b"), .string("c")])) + #expect(CmuxSettingValue(commandLineArgument: "2").jsonText == "2") + } +} + +@Suite("Setting readings") +struct CmuxSettingReadingTests { + @Test("reports the configured value, the default, and the effective value") + func readsConfiguredAndDefault() throws { + let dir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + defer { try? FileManager.default.removeItem(at: dir) } + let file = dir.appendingPathComponent("cmux.json") + try Data("{ \"terminal\": { \"scrollSpeed\": 1.8 } }\n".utf8).write(to: file) + let store = JSONConfigStore(fileURL: file) + + let configured = try store.reading(at: "terminal.scrollSpeed") + #expect(configured.configured == .number(1.8)) + #expect(configured.defaultValue == .number(1.0)) + #expect(configured.effective == .number(1.8)) + + let absent = try store.reading(at: "fileEditor.wordWrap") + #expect(absent.configured == nil) + #expect(absent.effective == .bool(false)) + + #expect(throws: CmuxSettingChangeError.notASetting("actions")) { + _ = try store.reading(at: "actions") + } + } +} diff --git a/Resources/Localizable.xcstrings b/Resources/Localizable.xcstrings index a3004ad8b60b..371f314601d2 100644 --- a/Resources/Localizable.xcstrings +++ b/Resources/Localizable.xcstrings @@ -1,478 +1,6 @@ { "sourceLanguage": "en", "strings": { - "browser.omnibar.accessibilityLabel": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Address and search bar" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Adress- und Suchleiste" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Barre d’adresse et de recherche" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شريط العنوان والبحث" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Barra de direcciones y búsqueda" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "網址與搜尋列" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "地址和搜索栏" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "주소 및 검색 막대" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アドレスと検索バー" - } - } - } - }, - "projectPanel.reload": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reload Project" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Projekt neu laden" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Recharger le projet" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "إعادة تحميل المشروع" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Recargar proyecto" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "重新載入專案" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "重新加载项目" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "프로젝트 다시 불러오기" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プロジェクトを再読み込み" - } - } - } - }, - "projectPanel.reloadErrors": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reload returned errors: %@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Beim Neuladen sind Fehler aufgetreten: %@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Le rechargement a renvoyé des erreurs : %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "أعادت إعادة التحميل أخطاء: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La recarga devolvió errores: %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "重新載入時發生錯誤:%@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "重新加载时出现错误:%@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 불러오기 중 오류 발생: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再読み込みでエラーが発生しました: %@" - } - } - } - }, - "projectPanel.dismissReloadErrors": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Dismiss Errors" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Fehler ausblenden" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ignorer les erreurs" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تجاهل الأخطاء" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Descartar errores" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "關閉錯誤" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "关闭错误" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오류 닫기" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "エラーを閉じる" - } - } - } - }, - "projectPanel.scheme": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Scheme" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Schema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Schéma" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "المخطط" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esquema" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "方案" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "方案" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "스킴" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "スキーム" - } - } - } - }, - "projectPanel.configuration": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Configuration" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Konfiguration" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Configuration de build" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "التكوين" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Configuración" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "組態" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "配置" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "구성" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "構成" - } - } - } - }, - "projectPanel.loadingFormat": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Loading %@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%@ wird geladen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Chargement de %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "جارٍ تحميل %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cargando %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "正在載入 %@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "正在加载 %@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@ 불러오는 중" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@ を読み込み中" - } - } - } - }, - "projectPanel.failedFormat": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Failed: %@" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Fehlgeschlagen: %@" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Échec : %@" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "فشل: %@" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Error: %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "失敗:%@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "失败:%@" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "실패: %@" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "失敗: %@" - } - } - } - }, "settings.automation.rules.createFailed.title": { "extractionState": "manual", "localizations": { @@ -176299,71 +175827,6 @@ } } }, - "dialog.close.dontAskAgain": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Don’t ask again" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لا تسأل مرة أخرى" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Nicht mehr fragen" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No volver a preguntar" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ne plus demander" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今後確認しない" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 묻지 않기" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Більше не запитувати" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "不再询问" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "不再詢問" - } - } - } - }, "dialog.closeAnchor.message.lone": { "extractionState": "manual", "localizations": { @@ -228122,65 +227585,6 @@ } } }, - "globalSearch.kind.terminal": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ターミナル" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "터미널" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "طرفية" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "終端" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "终端" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Terminal" - } - } - } - }, "globalSearch.kind.title": { "extractionState": "manual", "localizations": { @@ -230044,23 +229448,6 @@ } } }, - "machines.agent.pi": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Pi" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Pi" - } - } - } - }, "machines.auth.checking": { "extractionState": "manual", "localizations": { @@ -291022,596 +290409,6 @@ } } }, - "settings.app.accentColor": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون التمييز" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Boja naglaska" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Accentfarve" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Akzentfarbe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Accent Color" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color de acento" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur d’accentuation" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Colore di evidenziazione" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アクセントカラー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "강조 색상" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Aksentfarge" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Kolor akcentu" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Cor de destaque" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Цвет акцента" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีเน้น" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Vurgu Rengi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Колір акценту" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "强调色" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "強調色" - } - } - } - }, - "settings.app.accentColor.cmux": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "أزرق cmux" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "cmux plava" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "cmux-blå" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "cmux-Blau" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "cmux Blue" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Azul de cmux" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Bleu cmux" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Blu cmux" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux ブルー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "cmux 파란색" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "cmux-blå" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Niebieski cmux" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Azul do cmux" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Синий cmux" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีน้ำเงิน cmux" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "cmux Mavisi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Синій cmux" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "cmux 蓝" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "cmux 藍" - } - } - } - }, - "settings.app.accentColor.subtitle": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون مساحة العمل المحددة وحلقة التنبيه وحالة الوكيل وإبرازات cmux الأخرى. يتبع خيار النظام لون التمييز في macOS." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Boja odabranog radnog prostora, prstena pažnje, statusa agenta i ostalih cmux istaknutih elemenata. Sistem prati boju naglaska macOS-a." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Farve for det valgte arbejdsområde, opmærksomhedsringen, agentstatus og andre cmux-fremhævninger. System følger macOS-accentfarven." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Farbe des ausgewählten Workspace, des Aufmerksamkeitsrings, des Agentenstatus und anderer cmux-Hervorhebungen. „Systemfarbe“ folgt der macOS-Akzentfarbe." - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Color of the selected workspace, attention ring, agent status, and other cmux highlights. System follows the macOS accent color." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color del espacio de trabajo seleccionado, el anillo de atención, el estado del agente y otros resaltados de cmux. Sistema sigue el color de acento de macOS." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur de l’espace de travail sélectionné, de l’anneau d’attention, de l’état de l’agent et des autres mises en évidence de cmux. Système suit la couleur d’accentuation de macOS." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Colore dell’area di lavoro selezionata, dell’anello di attenzione, dello stato dell’agente e degli altri elementi evidenziati di cmux. Sistema segue il colore di evidenziazione di macOS." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "選択中のワークスペース、注意リング、エージェントの状態など、cmux のハイライトの色です。「システム」は macOS のアクセントカラーに従います。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "선택한 워크스페이스, 주의 링, 에이전트 상태 등 cmux 강조 표시의 색상입니다. 시스템은 macOS 강조 색상을 따릅니다." - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Farge for det valgte arbeidsområdet, oppmerksomhetsringen, agentstatus og andre cmux-uthevinger. System følger macOS-aksentfargen." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Kolor wybranego obszaru roboczego, pierścienia uwagi, stanu agenta i innych wyróżnień cmux. Systemowy podąża za kolorem akcentu macOS." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Cor do espaço de trabalho selecionado, do anel de atenção, do status do agente e de outros destaques do cmux. Sistema segue a cor de destaque do macOS." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Цвет выбранного рабочего пространства, кольца внимания, статуса агента и других выделений cmux. «Системный» следует цвету акцента macOS." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีของพื้นที่ทำงานที่เลือก วงแจ้งเตือน สถานะเอเจนต์ และไฮไลต์อื่นๆ ของ cmux ตัวเลือกระบบจะใช้สีเน้นของ macOS" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Seçili çalışma alanı, dikkat halkası, ajan durumu ve diğer cmux vurgularının rengi. Sistem, macOS vurgu rengini izler." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Колір вибраного робочого простору, кільця уваги, статусу агента та інших виділень cmux. «Системний» використовує колір акценту macOS." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "所选工作区、提醒环、代理状态和其他 cmux 高亮的颜色。“系统”跟随 macOS 强调色。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "所選工作區、提醒環、代理狀態和其他 cmux 醒目提示的顏色。「系統」跟隨 macOS 強調色。" - } - } - } - }, - "settings.app.accentColor.system": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "النظام" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Sistem" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "System" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Systemfarbe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "System" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Sistema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Système" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Sistema" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "システム" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시스템" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "System" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Systemowy" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Sistema" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Системный" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ระบบ" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Sistem" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Системний" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "系统" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "系統" - } - } - } - }, - "settings.app.accentColor.systemToggle": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لون التمييز للنظام" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Sistemska boja naglaska" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Systemets accentfarve" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "System-Akzentfarbe" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "System Accent Color" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Color de acento del sistema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Couleur d’accentuation du système" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Colore di evidenziazione di sistema" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "システムのアクセントカラー" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시스템 강조 색상" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Systemets aksentfarge" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Systemowy kolor akcentu" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Cor de destaque do sistema" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Системный цвет акцента" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สีเน้นของระบบ" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Sistem Vurgu Rengi" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Системний колір акценту" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "系统强调色" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "系統強調色" - } - } - } - }, "settings.app.appearance": { "extractionState": "manual", "localizations": { @@ -343824,65 +342621,6 @@ } } }, - "settings.search.alias.section.themes": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent design designs farbschema farben palette hell dunkel akzent" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent thème thèmes couleurs palette clair sombre accent" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent سمة سمات ألوان لوحة فاتح داكن تمييز" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent tema temas colores paleta claro oscuro acento" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 主題 配色 顏色 調色盤 淺色 深色 強調色" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 主题 配色 颜色 调色板 浅色 深色 强调色" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent 테마 색상 팔레트 라이트 다크 강조색" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "theme themes color scheme colors palette ghostty light dark mode accent テーマ 配色 カラー パレット ライト ダーク アクセント" - } - } - } - }, "settings.search.alias.section.workspaceColors": { "extractionState": "manual", "localizations": { @@ -344240,124 +342978,6 @@ } } }, - "settings.search.alias.setting.app.accent-color": { - "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue لون التمييز أزرق النظام" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue boja naglaska plava sistem" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue accentfarve blå system" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue Akzentfarbe blau System" - } - }, - "en": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue color de acento azul sistema" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue couleur d’accentuation bleu système" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue colore di evidenziazione blu sistema" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue アクセントカラー 青 システム" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 강조 색상 파란색 시스템" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue aksentfarge blå system" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue kolor akcentu niebieski systemowy" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue cor de destaque azul sistema" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue цвет акцента синий системный" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue สีเน้น สีน้ำเงิน ระบบ" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue vurgu rengi mavi sistem" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue колір акценту синій системний" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 强调色 蓝色 系统" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 強調色 藍色 系統" - } - } - } - }, "settings.search.alias.setting.app.appearance": { "extractionState": "manual", "localizations": { @@ -358720,65 +357340,6 @@ } } }, - "settings.section.themes": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Themes" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "السمات" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Designs" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Temas" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Thèmes" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "テーマ" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "테마" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "主题" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "主題" - } - } - } - }, "settings.section.workspaceColors": { "extractionState": "manual", "localizations": { @@ -366342,65 +364903,6 @@ } } }, - "settings.terminal.theme": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Terminal Theme" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "سمة الطرفية" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Terminal-Design" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Tema del terminal" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Thème du terminal" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ターミナルテーマ" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "터미널 테마" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "终端主题" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "終端機主題" - } - } - } - }, "settings.textBox.defaultSubmitAction": { "extractionState": "manual", "localizations": { @@ -547350,6 +545852,377 @@ } } }, + "settingAction.confirm.apply": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Change" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Ändern" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Modifier" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تغيير" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Cambiar" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "變更" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "更改" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "변경" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "変更" + } + } + } + }, + "settingAction.confirm.message": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This action edits your cmux.json:\n\n%@" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diese Aktion bearbeitet deine cmux.json:\n\n%@" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Cette action modifie votre cmux.json :\n\n%@" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يعدّل هذا الإجراء ملف cmux.json:\n\n%@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Esta acción edita tu cmux.json:\n\n%@" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "此動作會編輯你的 cmux.json:\n\n%@" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "此操作会编辑你的 cmux.json:\n\n%@" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 작업은 cmux.json을 편집합니다:\n\n%@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このアクションは cmux.json を編集します:\n\n%@" + } + } + } + }, + "settingAction.confirm.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Change Setting?" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Einstellung ändern?" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Modifier le réglage ?" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "هل تريد تغيير الإعداد؟" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "¿Cambiar el ajuste?" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "要變更設定嗎?" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "要更改设置吗?" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "설정을 변경할까요?" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "設定を変更しますか?" + } + } + } + }, + "settingAction.failed.unreadable": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "cmux couldn't read or save ~/.config/cmux/cmux.json. Check it for a syntax error, then try again." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "cmux konnte ~/.config/cmux/cmux.json nicht lesen oder speichern. Prüfe die Datei auf einen Syntaxfehler und versuche es erneut." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "cmux n'a pas pu lire ou enregistrer ~/.config/cmux/cmux.json. Vérifiez qu'il ne contient pas d'erreur de syntaxe, puis réessayez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تعذّر على cmux قراءة ~/.config/cmux/cmux.json أو حفظه. تحقّق من عدم وجود خطأ في الصياغة، ثم حاول مرة أخرى." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "cmux no pudo leer ni guardar ~/.config/cmux/cmux.json. Revisa si tiene un error de sintaxis y vuelve a intentarlo." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "cmux 無法讀取或儲存 ~/.config/cmux/cmux.json。請檢查是否有語法錯誤,然後再試一次。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "cmux 无法读取或保存 ~/.config/cmux/cmux.json。请检查是否有语法错误,然后重试。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "cmux가 ~/.config/cmux/cmux.json을 읽거나 저장하지 못했습니다. 구문 오류가 있는지 확인한 뒤 다시 시도하세요." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux は ~/.config/cmux/cmux.json を読み込むか保存できませんでした。構文エラーがないか確認してから、もう一度お試しください。" + } + } + } + }, + "settingAction.failed.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Couldn't Change Setting" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تعذّر تغيير الإعداد" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Einstellung konnte nicht geändert werden" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No se pudo cambiar el ajuste" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Impossible de modifier le réglage" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "設定を変更できませんでした" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "설정을 변경할 수 없음" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法更改设置" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "無法更改設定" + } + } + } + }, + "globalSearch.kind.terminal": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ターミナル" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "터미널" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "طرفية" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "終端" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "终端" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Terminal" + } + } + } + }, + "machines.agent.pi": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Pi" + } + } + } + }, "terminal.passwordInput.indicator": { "extractionState": "manual", "localizations": { @@ -548117,25219 +546990,25059 @@ } } }, - "command.shortcutKeymap.title": { + "browser.omnibar.accessibilityLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Base Keymap: %@" + "value": "Address and search bar" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "مخطط المفاتيح الأساسي: %@" + "value": "Adress- und Suchleiste" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Basis-Tastaturbelegung: %@" + "value": "Barre d’adresse et de recherche" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Mapa de teclas base: %@" + "value": "شريط العنوان والبحث" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Disposition de base : %@" + "value": "Barra de direcciones y búsqueda" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ベースキーマップ: %@" + "value": "網址與搜尋列" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "기본 키맵: %@" + "value": "地址和搜索栏" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "基础键位方案:%@" + "value": "주소 및 검색 막대" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "基礎按鍵配置:%@" + "value": "アドレスと検索バー" } } } }, - "settings.shortcuts.baseKeymap": { + "projectPanel.reload": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Base Keymap" + "value": "Reload Project" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "مخطط المفاتيح الأساسي" + "value": "Projekt neu laden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Basis-Tastaturbelegung" + "value": "Recharger le projet" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Mapa de teclas base" + "value": "إعادة تحميل المشروع" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Disposition de base" + "value": "Recargar proyecto" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ベースキーマップ" + "value": "重新載入專案" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "기본 키맵" + "value": "重新加载项目" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "基础键位方案" + "value": "프로젝트 다시 불러오기" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "基礎按鍵配置" + "value": "プロジェクトを再読み込み" } } } }, - "settings.shortcuts.baseKeymap.conflictHint": { + "projectPanel.reloadErrors": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Change or turn off the macOS shortcut in System Settings > Keyboard > Keyboard Shortcuts." + "value": "Reload returned errors: %@" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "غيّر اختصار macOS أو أوقفه في إعدادات النظام > لوحة المفاتيح > اختصارات لوحة المفاتيح." + "value": "Beim Neuladen sind Fehler aufgetreten: %@" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ändern oder deaktivieren Sie das macOS-Tastaturkürzel unter Systemeinstellungen > Tastatur > Tastaturkurzbefehle." + "value": "Le rechargement a renvoyé des erreurs : %@" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cambia o desactiva el atajo de macOS en Ajustes del Sistema > Teclado > Atajos de teclado." + "value": "أعادت إعادة التحميل أخطاء: %@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Modifiez ou désactivez le raccourci macOS dans Réglages Système > Clavier > Raccourcis clavier." + "value": "La recarga devolvió errores: %@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "システム設定 > キーボード > キーボードショートカットで macOS のショートカットを変更するかオフにしてください。" + "value": "重新載入時發生錯誤:%@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "시스템 설정 > 키보드 > 키보드 단축키에서 macOS 단축키를 변경하거나 끄세요." + "value": "重新加载时出现错误:%@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "请在“系统设置”>“键盘”>“键盘快捷键”中更改或关闭该 macOS 快捷键。" + "value": "다시 불러오기 중 오류 발생: %@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "請在「系統設定」>「鍵盤」>「鍵盤快速鍵」中更改或關閉該 macOS 快速鍵。" + "value": "再読み込みでエラーが発生しました: %@" } } } }, - "settings.shortcuts.baseKeymap.custom": { + "projectPanel.dismissReloadErrors": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Custom" + "value": "Dismiss Errors" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "مخصص" + "value": "Fehler ausblenden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Benutzerdefiniert" + "value": "Ignorer les erreurs" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Personalizado" + "value": "تجاهل الأخطاء" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Personnalisée" + "value": "Descartar errores" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "カスタム" + "value": "關閉錯誤" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사용자 지정" + "value": "关闭错误" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "自定义" + "value": "오류 닫기" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "自訂" + "value": "エラーを閉じる" } } } }, - "settings.shortcuts.baseKeymap.subtitle": { + "projectPanel.scheme": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Start from another terminal's shortcuts. Only the differences are written to cmux.json; choose cmux to remove them." + "value": "Scheme" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "ابدأ من اختصارات طرفية أخرى. تُكتب الاختلافات فقط في cmux.json؛ اختر cmux لإزالتها." + "value": "Schema" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mit den Tastaturkürzeln eines anderen Terminals beginnen. Nur die Unterschiede werden in cmux.json geschrieben; wählen Sie cmux, um sie zu entfernen." + "value": "Schéma" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Parte de los atajos de otro terminal. Solo se escriben las diferencias en cmux.json; elige cmux para eliminarlas." + "value": "المخطط" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Partez des raccourcis d’un autre terminal. Seules les différences sont écrites dans cmux.json ; choisissez cmux pour les supprimer." + "value": "Esquema" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "他のターミナルのショートカットから始めます。差分だけが cmux.json に書き込まれ、cmux を選ぶと削除されます。" + "value": "方案" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "다른 터미널의 단축키에서 시작합니다. 차이점만 cmux.json에 기록되며, cmux를 선택하면 제거됩니다." + "value": "方案" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "以其他终端的快捷键为起点。只会将差异写入 cmux.json;选择 cmux 即可移除。" + "value": "스킴" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "以其他終端機的快速鍵為起點。只會將差異寫入 cmux.json;選擇 cmux 即可移除。" + "value": "スキーム" } } } }, - "shortcut.keymap.preset.cmux": { + "projectPanel.configuration": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux (Default)" + "value": "Configuration" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux (الافتراضي)" + "value": "Konfiguration" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux (Standard)" + "value": "Configuration de build" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux (predeterminado)" + "value": "التكوين" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux (par défaut)" + "value": "Configuración" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux(デフォルト)" + "value": "組態" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux (기본값)" + "value": "配置" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux(默认)" + "value": "구성" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux(預設)" + "value": "構成" } } } }, - "shortcut.keymap.preset.iterm2": { + "projectPanel.loadingFormat": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "Loading %@" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "%@ wird geladen" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "Chargement de %@" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "جارٍ تحميل %@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "Cargando %@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "正在載入 %@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "正在加载 %@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "%@ 불러오는 중" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iTerm2" + "value": "%@ を読み込み中" } } } }, - "shortcut.keymap.preset.terminal": { + "projectPanel.failedFormat": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "Failed: %@" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "Fehlgeschlagen: %@" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "Échec : %@" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "فشل: %@" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "Error: %@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "失敗:%@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "失败:%@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "실패: %@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "Terminal.app" + "value": "失敗: %@" } } } }, - "shortcut.keymap.preset.tmux": { + "update.readyWaiting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "tmux-style (Ctrl-B Prefix)" + "value": "Update Ready" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "نمط tmux (البادئة Ctrl-B)" + "value": "Update bereit" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "tmux-Stil (Ctrl-B-Präfix)" + "value": "Mise à jour prête" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Estilo tmux (prefijo Ctrl-B)" + "value": "التحديث جاهز" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Style tmux (préfixe Ctrl-B)" + "value": "Actualización lista" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "tmux 風(Ctrl-B プレフィックス)" + "value": "更新已就緒" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "tmux 스타일 (Ctrl-B 접두사)" + "value": "更新已就绪" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "tmux 风格(Ctrl-B 前缀)" + "value": "업데이트 준비됨" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "tmux 風格(Ctrl-B 前綴)" + "value": "アップデートの準備完了" } } } }, - "shortcut.keymap.summary.change": { + "update.installNow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "Install Now" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "Jetzt installieren" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "Installer maintenant" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "التثبيت الآن" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "Instalar ahora" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "立即安裝" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "立即安装" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "지금 설치" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@ → %3$@" + "value": "今すぐインストール" } } } }, - "shortcut.keymap.summary.conflict": { + "cli.session.usage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ is also a macOS shortcut (%2$@). macOS may handle it before cmux." + "value": "Usage: cmux session move --to [options]\n\nMove a stopped Claude Code session to another machine and resume it there.\nExit the agent first: the move refuses while the session runs on either side.\n\nThe move carries:\n - the cwd's git checkout: HEAD (on the same branch when safe) plus modified,\n deleted and untracked non-ignored files; a worktree is added when the\n repository exists on the destination but the path does not\n - the transcript, its session directory, file history, and the project\n memory directory (merged both ways, newest wins, nothing deleted)\n\nIt then opens a workspace on the destination (`cmux ssh` for a host, a local\nworkspace for `local`) that resumes the session with its recorded launcher.\nWhen the destination home is not at the same absolute path, paths under the\nhome are mapped and the project is re-slugged.\n\nOptions:\n --to SSH destination (user@host or ssh_config alias), or local\n --from Where the session is now (default: where the last move put it, else local)\n --name Workspace title (default: the first 8 characters of the id)\n --no-code Do not carry the git checkout\n --port <n> SSH port\n --identity <path> SSH identity file\n --ssh-option <opt> Extra SSH -o option (repeatable)\n --no-focus Open the workspace without switching to it\n\nExamples:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@ هو أيضًا اختصار في macOS (%2$@). قد يعالجه macOS قبل cmux." + "value": "Verwendung: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nVerschiebt eine beendete Claude Code-Sitzung auf eine andere Maschine und setzt sie dort fort.\nBeende zuerst den Agenten: Die Verschiebung wird abgelehnt, solange die Sitzung auf einer Seite läuft.\n\nDie Verschiebung überträgt:\n - den git-Checkout des cwd: HEAD (auf demselben Branch, wenn das sicher ist) sowie geänderte,\n gelöschte und nicht ignorierte, nicht verfolgte Dateien; ein Worktree wird hinzugefügt, wenn\n das Repository am Ziel existiert, der Pfad aber nicht\n - das Transkript, sein Sitzungsverzeichnis, den Dateiverlauf und das Projektgedächtnis\n (in beide Richtungen zusammengeführt, das Neueste gewinnt, nichts wird gelöscht)\n\nDanach öffnet sie am Ziel einen Workspace (`cmux ssh` für einen Host, einen lokalen Workspace\nfür `local`), der die Sitzung mit ihrem aufgezeichneten Launcher fortsetzt. Liegt das Home-\nVerzeichnis am Ziel nicht unter demselben absoluten Pfad, werden Pfade darunter umgeschrieben\nund das Projekt erhält einen neuen Slug.\n\nOptionen:\n --to <destination> SSH-Ziel (user@host oder ssh_config-Alias) oder local\n --from <destination> Wo die Sitzung jetzt ist (Standard: wohin die letzte Verschiebung sie gebracht hat, sonst local)\n --name <title> Workspace-Titel (Standard: die ersten 8 Zeichen der ID)\n --no-code Den git-Checkout nicht übertragen\n --port <n> SSH-Port\n --identity <path> SSH-Identitätsdatei\n --ssh-option <opt> Zusätzliche SSH-Option -o (wiederholbar)\n --no-focus Workspace öffnen, ohne dorthin zu wechseln\n\nBeispiele:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ ist auch ein macOS-Tastaturkürzel (%2$@). macOS verarbeitet es möglicherweise vor cmux." + "value": "Utilisation: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nDéplace une session Claude Code arrêtée vers une autre machine et la reprend là-bas.\nQuittez d'abord l'agent : le déplacement est refusé tant que la session s'exécute d'un côté ou de l'autre.\n\nLe déplacement transfère :\n - le checkout git du cwd : HEAD (sur la même branche quand c'est sûr) ainsi que les fichiers\n modifiés, supprimés et non suivis non ignorés ; un worktree est ajouté quand le dépôt existe\n sur la destination mais pas le chemin\n - la transcription, son répertoire de session, l'historique des fichiers et la mémoire du\n projet (fusionnée dans les deux sens, le plus récent l'emporte, rien n'est supprimé)\n\nIl ouvre ensuite un espace de travail sur la destination (`cmux ssh` pour un hôte, un espace\nlocal pour `local`) qui reprend la session avec son lanceur enregistré. Quand le dossier\npersonnel de destination n'a pas le même chemin absolu, les chemins qu'il contient sont\nconvertis et le projet reçoit un nouveau slug.\n\nOptions :\n --to <destination> Destination SSH (user@host ou alias ssh_config), ou local\n --from <destination> Où se trouve la session (par défaut : là où l'a mise le dernier déplacement, sinon local)\n --name <title> Titre de l'espace de travail (par défaut : les 8 premiers caractères de l'id)\n --no-code Ne pas transférer le checkout git\n --port <n> Port SSH\n --identity <path> Fichier d'identité SSH\n --ssh-option <opt> Option SSH -o supplémentaire (répétable)\n --no-focus Ouvrir l'espace de travail sans y basculer\n\nExemples :\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@ también es un atajo de macOS (%2$@). macOS puede procesarlo antes que cmux." + "value": "الاستخدام: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nينقل جلسة Claude Code متوقفة إلى جهاز آخر ويستأنفها هناك.\nأغلق الوكيل أولًا: يُرفض النقل ما دامت الجلسة تعمل على أي من الجانبين.\n\nينقل الأمر:\n - checkout الخاص بـ git في cwd: HEAD (على الفرع نفسه عندما يكون ذلك آمنًا) والملفات المعدّلة\n والمحذوفة وغير المتتبعة وغير المتجاهلة؛ ويُضاف worktree عندما يوجد المستودع في الوجهة\n ولا يوجد المسار\n - نص الجلسة ودليل الجلسة وسجل الملفات ودليل ذاكرة المشروع\n (مدمج في الاتجاهين، الأحدث يفوز، ولا يُحذف شيء)\n\nثم يفتح مساحة عمل في الوجهة (`cmux ssh` لمضيف، أو مساحة عمل محلية لـ `local`)\nتستأنف الجلسة بالمشغّل المسجّل لها. عندما لا يكون المجلد الرئيسي في الوجهة\nعلى المسار المطلق نفسه، تُحوَّل المسارات داخله\nويُعاد إنشاء slug للمشروع.\n\nالخيارات:\n --to <destination> وجهة SSH (user@host أو اسم مستعار من ssh_config)، أو local\n --from <destination> مكان الجلسة الآن (الافتراضي: حيث وضعها آخر نقل، وإلا local)\n --name <title> عنوان مساحة العمل (الافتراضي: أول 8 أحرف من المعرّف)\n --no-code لا تنقل checkout الخاص بـ git\n --port <n> منفذ SSH\n --identity <path> ملف هوية SSH\n --ssh-option <opt> خيار SSH إضافي -o (قابل للتكرار)\n --no-focus افتح مساحة العمل دون التبديل إليها\n\nأمثلة:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@ est aussi un raccourci macOS (%2$@). macOS peut le traiter avant cmux." + "value": "Uso: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nMueve una sesión detenida de Claude Code a otra máquina y la reanuda allí.\nSal primero del agente: el movimiento se rechaza mientras la sesión se ejecute en cualquiera de los lados.\n\nEl movimiento lleva:\n - el checkout de git del cwd: HEAD (en la misma rama cuando es seguro) más los archivos\n modificados, eliminados y sin seguimiento no ignorados; se añade un worktree cuando el\n repositorio existe en el destino pero la ruta no\n - la transcripción, su directorio de sesión, el historial de archivos y la memoria del\n proyecto (combinada en ambos sentidos, gana la más reciente, no se borra nada)\n\nDespués abre un espacio de trabajo en el destino (`cmux ssh` para un host, uno local para\n`local`) que reanuda la sesión con su lanzador registrado. Cuando el home del destino no está\nen la misma ruta absoluta, las rutas bajo él se convierten\ny el proyecto recibe un nuevo slug.\n\nOpciones:\n --to <destination> Destino SSH (user@host o alias de ssh_config), o local\n --from <destination> Dónde está la sesión ahora (por defecto: donde la dejó el último movimiento, si no local)\n --name <title> Título del espacio de trabajo (por defecto: los primeros 8 caracteres del id)\n --no-code No llevar el checkout de git\n --port <n> Puerto SSH\n --identity <path> Archivo de identidad SSH\n --ssh-option <opt> Opción SSH -o adicional (repetible)\n --no-focus Abrir el espacio de trabajo sin cambiar a él\n\nEjemplos:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@ は macOS のショートカット(%2$@)でもあります。cmux より先に macOS が処理する場合があります。" + "value": "用法: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n將已停止的 Claude Code 工作階段移到另一台機器並在那裡恢復。\n請先結束代理:只要工作階段仍在任一端執行,移動就會被拒絕。\n\n移動會帶上:\n - cwd 的 git checkout:HEAD(安全時使用同一分支)加上已修改、已刪除\n 和未追蹤且未忽略的檔案;若目的地有儲存庫\n 但沒有該路徑,會新增 worktree\n - 對話紀錄、其工作階段目錄、檔案歷史與專案記憶目錄\n (雙向合併,較新者優先,不刪除任何內容)\n\n接著在目的地開啟工作區(主機用 `cmux ssh`,`local` 則開本機工作區),\n以記錄的啟動器恢復工作階段。\n若目的地的主目錄不在相同的絕對路徑,其下的路徑會被對應,\n專案也會重新產生 slug。\n\n選項:\n --to <destination> SSH 目的地(user@host 或 ssh_config 別名),或 local\n --from <destination> 工作階段目前所在位置(預設:上次移動所放的位置,否則為 local)\n --name <title> 工作區標題(預設:ID 的前 8 個字元)\n --no-code 不帶上 git checkout\n --port <n> SSH 連接埠\n --identity <path> SSH 身分檔案\n --ssh-option <opt> 額外的 SSH -o 選項(可重複)\n --no-focus 開啟工作區但不切換過去\n\n範例:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@은(는) macOS 단축키(%2$@)이기도 합니다. macOS가 cmux보다 먼저 처리할 수 있습니다." + "value": "用法: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n将已停止的 Claude Code 会话移到另一台机器并在那里恢复。\n请先退出代理:只要会话仍在任一端运行,移动就会被拒绝。\n\n移动会带上:\n - cwd 的 git 检出:HEAD(安全时使用同一分支)以及已修改、已删除\n 和未跟踪且未忽略的文件;若目标上有仓库\n 但没有该路径,会添加 worktree\n - 会话记录、其会话目录、文件历史和项目记忆目录\n (双向合并,较新者优先,不删除任何内容)\n\n随后在目标上打开工作区(主机用 `cmux ssh`,`local` 则打开本地工作区),\n用记录的启动器恢复会话。\n若目标的主目录不在相同的绝对路径,其下的路径会被映射,\n项目也会重新生成 slug。\n\n选项:\n --to <destination> SSH 目标(user@host 或 ssh_config 别名),或 local\n --from <destination> 会话当前所在位置(默认:上次移动放置的位置,否则为 local)\n --name <title> 工作区标题(默认:ID 的前 8 个字符)\n --no-code 不带上 git 检出\n --port <n> SSH 端口\n --identity <path> SSH 身份文件\n --ssh-option <opt> 额外的 SSH -o 选项(可重复)\n --no-focus 打开工作区但不切换过去\n\n示例:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@ 也是 macOS 快捷键(%2$@)。macOS 可能会先于 cmux 处理它。" + "value": "사용법: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n중지된 Claude Code 세션을 다른 머신으로 옮기고 그곳에서 재개합니다.\n먼저 에이전트를 종료하세요. 어느 쪽에서든 세션이 실행 중이면 이동이 거부됩니다.\n\n이동하는 항목:\n - cwd의 git 체크아웃: HEAD(안전하면 같은 브랜치)와 수정, 삭제,\n 무시되지 않은 추적 안 된 파일. 대상에 저장소는 있지만\n 경로가 없으면 worktree를 추가합니다\n - 트랜스크립트, 세션 디렉터리, 파일 기록, 프로젝트 메모리 디렉터리\n (양방향 병합, 최신 우선, 삭제 없음)\n\n그런 다음 대상에서 작업 공간(호스트는 `cmux ssh`, `local`은 로컬 작업 공간)을 열고\n기록된 런처로 세션을 재개합니다.\n대상의 홈이 같은 절대 경로에 있지 않으면 홈 아래 경로를 변환하고\n프로젝트 slug를 다시 만듭니다.\n\n옵션:\n --to <destination> SSH 대상(user@host 또는 ssh_config 별칭) 또는 local\n --from <destination> 세션의 현재 위치(기본값: 마지막 이동으로 옮긴 곳, 없으면 local)\n --name <title> 작업 공간 제목(기본값: ID의 처음 8자)\n --no-code git 체크아웃을 옮기지 않음\n --port <n> SSH 포트\n --identity <path> SSH ID 파일\n --ssh-option <opt> 추가 SSH -o 옵션(반복 가능)\n --no-focus 작업 공간으로 전환하지 않고 열기\n\n예시:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@ 也是 macOS 快速鍵(%2$@)。macOS 可能會先於 cmux 處理它。" + "value": "使用方法: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n停止した Claude Code セッションを別のマシンへ移動し、そこで再開します。\n先にエージェントを終了してください。どちらかでセッションが実行中の間は移動を拒否します。\n\n移動する内容:\n - cwd の git チェックアウト: HEAD (安全なら同じブランチ) と、変更・削除されたファイル、\n 無視されていない未追跡ファイル。移動先にリポジトリはあるが\n パスがない場合は worktree を追加します\n - トランスクリプト、セッションディレクトリ、ファイル履歴、プロジェクトのメモリディレクトリ\n (双方向にマージ、新しいほうを優先、削除はしません)\n\nその後、移動先でワークスペース (ホストなら `cmux ssh`、`local` ならローカルのワークスペース) を\n開き、記録されたランチャーでセッションを再開します。\n移動先のホームが同じ絶対パスにない場合は、ホーム配下のパスを変換し、\nプロジェクトの slug を作り直します。\n\nオプション:\n --to <destination> SSH 接続先 (user@host または ssh_config のエイリアス)、または local\n --from <destination> セッションの現在の場所 (既定: 前回の移動先、なければ local)\n --name <title> ワークスペースのタイトル (既定: ID の先頭 8 文字)\n --no-code git チェックアウトを移動しない\n --port <n> SSH ポート\n --identity <path> SSH の ID ファイル\n --ssh-option <opt> 追加の SSH -o オプション (繰り返し可)\n --no-focus ワークスペースに切り替えずに開く\n\n例:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" } } } }, - "shortcut.keymap.summary.kept": { + "settings.notifications.sound.preview": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Kept your own shortcut for %@." + "value": "Preview Sound" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تم الاحتفاظ باختصارك الخاص لـ %@." + "value": "Ton anhören" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ihr eigenes Tastaturkürzel für %@ wurde beibehalten." + "value": "Écouter le son" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Se conservó tu propio atajo para %@." + "value": "معاينة الصوت" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Votre propre raccourci pour %@ a été conservé." + "value": "Escuchar sonido" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ に設定したショートカットはそのまま残しました。" + "value": "試聽音效" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@에 대한 사용자 단축키를 유지했습니다." + "value": "试听声音" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "已保留你为“%@”设置的快捷键。" + "value": "소리 미리 듣기" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "已保留您為「%@」設定的快速鍵。" + "value": "サウンドをプレビュー" } } } }, - "shortcut.keymap.summary.none": { + "cli.session.error.unknownSubcommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No shortcuts changed." + "value": "Unknown session subcommand: %@. Usage: cmux session move <session-id> --to <ssh-destination|local>" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم يتم تغيير أي اختصارات." + "value": "أمر session فرعي غير معروف: %@. الاستخدام: cmux session move <session-id> --to <ssh-destination|local>" } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Tastaturkürzel geändert." + "value": "Unbekannter session-Unterbefehl: %@. Verwendung: cmux session move <session-id> --to <ssh-destination|local>" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se cambió ningún atajo." + "value": "Subcomando de session desconocido: %@. Uso: cmux session move <session-id> --to <ssh-destination|local>" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucun raccourci modifié." + "value": "Sous-commande session inconnue : %@. Utilisation : cmux session move <session-id> --to <ssh-destination|local>" } }, "ja": { "stringUnit": { "state": "translated", - "value": "変更されたショートカットはありません。" + "value": "不明な session サブコマンド: %@。使用方法: cmux session move <session-id> --to <ssh-destination|local>" } }, "ko": { "stringUnit": { "state": "translated", - "value": "변경된 단축키가 없습니다." + "value": "알 수 없는 session 하위 명령: %@. 사용법: cmux session move <session-id> --to <ssh-destination|local>" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未更改任何快捷键。" + "value": "未知的 session 子命令:%@。用法:cmux session move <session-id> --to <ssh-destination|local>" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "未變更任何快速鍵。" + "value": "未知的 session 子命令:%@。用法:cmux session move <session-id> --to <ssh-destination|local>" } } } }, - "shortcut.macos.accessibilityShortcuts": { + "cli.session.move.error.branchDiverged": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Accessibility Shortcuts" + "value": "session move: branch %@ on the destination has commits the session's HEAD does not contain" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار اختصارات تسهيلات الاستخدام" + "value": "session move: الفرع %@ في الوجهة يحتوي على commits غير موجودة في HEAD الخاص بالجلسة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kurzbefehle für Bedienungshilfen anzeigen" + "value": "session move: Der Branch %@ am Ziel enthält Commits, die im HEAD der Sitzung fehlen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar funciones rápidas de accesibilidad" + "value": "session move: la rama %@ en el destino tiene commits que el HEAD de la sesión no contiene" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher les raccourcis d’accessibilité" + "value": "session move : la branche %@ sur la destination contient des commits absents du HEAD de la session" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アクセシビリティのショートカットを表示" + "value": "session move: 移動先のブランチ %@ にセッションの HEAD に含まれないコミットがあります" } }, "ko": { "stringUnit": { "state": "translated", - "value": "손쉬운 사용 단축키 보기" + "value": "session move: 대상의 %@ 브랜치에 세션 HEAD에 없는 커밋이 있습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示辅助功能快捷键" + "value": "session move:目标上的分支 %@ 包含会话 HEAD 中没有的提交" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示輔助使用快速鍵" + "value": "session move:目的地的分支 %@ 含有此工作階段 HEAD 沒有的 commit" } } } }, - "shortcut.macos.appSwitcher": { + "cli.session.move.error.checkoutDirty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch apps" + "value": "session move: %@ on the destination has changes that did not come from this session; commit or stash them there first" } }, "ar": { "stringUnit": { "state": "translated", - "value": "التبديل بين التطبيقات" + "value": "session move: يحتوي %@ في الوجهة على تغييرات لم تأتِ من هذه الجلسة؛ نفّذ commit لها أو stash هناك أولًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zwischen Apps wechseln" + "value": "session move: %@ am Ziel hat Änderungen, die nicht aus dieser Sitzung stammen; committe oder stashe sie dort zuerst" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cambiar de app" + "value": "session move: %@ en el destino tiene cambios que no provienen de esta sesión; haz commit o stash allí primero" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Passer d’une app à l’autre" + "value": "session move : %@ sur la destination contient des modifications qui ne viennent pas de cette session ; validez-les ou mettez-les de côté (stash) d'abord" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アプリを切り替える" + "value": "session move: 移動先の %@ にこのセッション由来ではない変更があります。先にそこでコミットまたは stash してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "앱 전환" + "value": "session move: 대상의 %@에 이 세션에서 오지 않은 변경 사항이 있습니다. 먼저 그곳에서 커밋하거나 stash하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "切换 App" + "value": "session move:目标上的 %@ 有并非来自此会话的更改;请先在那里提交或 stash" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切換 App" + "value": "session move:目的地的 %@ 有不是來自此工作階段的變更;請先在那裡 commit 或 stash" } } } }, - "shortcut.macos.appSwitcherReverse": { + "cli.session.move.error.copyFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch apps backward" + "value": "session move: copying %@ failed: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "التبديل بين التطبيقات للخلف" + "value": "session move: فشل نسخ %1$@: %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Rückwärts zwischen Apps wechseln" + "value": "session move: Kopieren von %1$@ fehlgeschlagen: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cambiar de app hacia atrás" + "value": "session move: no se pudo copiar %1$@: %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Passer d’une app à l’autre en sens inverse" + "value": "session move : échec de la copie de %1$@ : %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アプリを逆順に切り替える" + "value": "session move: %1$@ のコピーに失敗しました: %2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "앱 역방향 전환" + "value": "session move: %1$@ 복사 실패: %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "反向切换 App" + "value": "session move:复制 %1$@ 失败:%2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "反向切換 App" + "value": "session move:複製 %1$@ 失敗:%2$@" } } } }, - "shortcut.macos.applicationWindows": { + "cli.session.move.error.cwdMissing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show application windows" + "value": "session move: %@ does not exist on the destination" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار نوافذ التطبيق" + "value": "session move: %@ غير موجود في الوجهة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Programmfenster anzeigen" + "value": "session move: %@ existiert am Ziel nicht" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar ventanas de la aplicación" + "value": "session move: %@ no existe en el destino" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher les fenêtres d’application" + "value": "session move : %@ n'existe pas sur la destination" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アプリケーションウインドウを表示" + "value": "session move: 移動先に %@ が存在しません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "응용 프로그램 윈도우 보기" + "value": "session move: 대상에 %@이(가) 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示应用程序窗口" + "value": "session move:目标上不存在 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示應用程式視窗" + "value": "session move:目的地上不存在 %@" } } } }, - "shortcut.macos.characterViewer": { + "cli.session.move.error.flagRequiresValue": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Emoji & Symbols" + "value": "session move: %@ requires a value" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار الرموز التعبيرية والرموز" + "value": "session move: يتطلب %@ قيمة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Emoji & Symbole anzeigen" + "value": "session move: %@ benötigt einen Wert" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar emojis y símbolos" + "value": "session move: %@ requiere un valor" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher Emoji et symboles" + "value": "session move : %@ nécessite une valeur" } }, "ja": { "stringUnit": { "state": "translated", - "value": "絵文字と記号を表示" + "value": "session move: %@ には値が必要です" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이모티콘 및 기호 보기" + "value": "session move: %@에는 값이 필요합니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示表情与符号" + "value": "session move:%@ 需要一个值" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示表情符號與符號" + "value": "session move:%@ 需要一個值" } } } }, - "shortcut.macos.finderSearch": { + "cli.session.move.error.gitFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Finder search window" + "value": "session move: git %@ failed: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار نافذة البحث في Finder" + "value": "session move: فشل git %1$@: %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Finder-Suchfenster anzeigen" + "value": "session move: git %1$@ fehlgeschlagen: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar ventana de búsqueda del Finder" + "value": "session move: falló git %1$@: %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher la fenêtre de recherche du Finder" + "value": "session move : échec de git %1$@ : %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Finder の検索ウインドウを表示" + "value": "session move: git %1$@ に失敗しました: %2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Finder 검색 윈도우 보기" + "value": "session move: git %1$@ 실패: %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示“访达”搜索窗口" + "value": "session move:git %1$@ 失败:%2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示 Finder 搜尋視窗" + "value": "session move:git %1$@ 失敗:%2$@" } } } }, - "shortcut.macos.focusDock": { + "cli.session.move.error.invalidSessionID": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Move focus to the Dock" + "value": "session move: '%@' is not a session id" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نقل التركيز إلى Dock" + "value": "session move: '%@' ليس معرّف جلسة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus auf das Dock bewegen" + "value": "session move: „%@“ ist keine Sitzungs-ID" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover el foco al Dock" + "value": "session move: '%@' no es un id de sesión" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Placer le curseur dans le Dock" + "value": "session move : '%@' n'est pas un identifiant de session" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Dock にフォーカスを移動" + "value": "session move: '%@' はセッション ID ではありません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Dock으로 포커스 이동" + "value": "session move: '%@'은(는) 세션 ID가 아닙니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将焦点移到程序坞" + "value": "session move:'%@' 不是会话 ID" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將焦點移至 Dock" + "value": "session move:'%@' 不是工作階段 ID" } } } }, - "shortcut.macos.focusMenuBar": { + "cli.session.move.error.liveOnDestination": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Move focus to the menu bar" + "value": "session move: the session is already running on %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نقل التركيز إلى شريط القائمة" + "value": "session move: الجلسة قيد التشغيل بالفعل على %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus auf die Menüleiste bewegen" + "value": "session move: Die Sitzung läuft bereits auf %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover el foco a la barra de menús" + "value": "session move: la sesión ya se está ejecutando en %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Placer le curseur dans la barre des menus" + "value": "session move : la session s'exécute déjà sur %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メニューバーにフォーカスを移動" + "value": "session move: セッションはすでに %@ で実行中です" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메뉴 막대로 포커스 이동" + "value": "session move: 세션이 이미 %@에서 실행 중입니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将焦点移到菜单栏" + "value": "session move:会话已在 %@ 上运行" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將焦點移至選單列" + "value": "session move:此工作階段已在 %@ 上執行" } } } }, - "shortcut.macos.helpMenuSearch": { + "cli.session.move.error.liveOnSource": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Help menu" + "value": "session move: the session is still running on %@; exit the agent at the end of its turn, then move it" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار قائمة التعليمات" + "value": "session move: الجلسة لا تزال قيد التشغيل على %@؛ أغلق الوكيل عند نهاية دوره ثم انقلها" } }, "de": { "stringUnit": { "state": "translated", - "value": "Menü „Hilfe“ anzeigen" + "value": "session move: Die Sitzung läuft noch auf %@; beende den Agenten am Ende seines Zuges und verschiebe sie dann" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar el menú Ayuda" + "value": "session move: la sesión sigue ejecutándose en %@; sal del agente al final de su turno y luego muévela" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher le menu Aide" + "value": "session move : la session s'exécute encore sur %@ ; quittez l'agent à la fin de son tour, puis déplacez-la" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「ヘルプ」メニューを表示" + "value": "session move: セッションはまだ %@ で実行中です。ターンの終わりにエージェントを終了してから移動してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "도움말 메뉴 보기" + "value": "session move: 세션이 아직 %@에서 실행 중입니다. 에이전트가 턴을 마치면 종료한 뒤 이동하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示“帮助”菜单" + "value": "session move:会话仍在 %@ 上运行;请在代理本轮结束后退出,再移动" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示「輔助說明」選單" + "value": "session move:此工作階段仍在 %@ 上執行;請在代理完成本輪後結束它,再移動" } } } }, - "shortcut.macos.lockScreen": { + "cli.session.move.error.repositoryMissing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Lock Screen" + "value": "session move: no checkout at %@ and no repository at %@ on the destination; clone it there first" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قفل الشاشة" + "value": "session move: لا يوجد checkout في %1$@ ولا مستودع في %2$@ على الوجهة؛ انسخه (clone) هناك أولًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bildschirm sperren" + "value": "session move: Am Ziel gibt es keinen Checkout unter %1$@ und kein Repository unter %2$@; klone es dort zuerst" } }, "es": { "stringUnit": { "state": "translated", - "value": "Bloquear pantalla" + "value": "session move: no hay checkout en %1$@ ni repositorio en %2$@ en el destino; clónalo allí primero" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Verrouiller l’écran" + "value": "session move : aucun checkout à %1$@ et aucun dépôt à %2$@ sur la destination ; clonez-le d'abord" } }, "ja": { "stringUnit": { "state": "translated", - "value": "画面をロック" + "value": "session move: 移動先の %1$@ にチェックアウトがなく、%2$@ にリポジトリもありません。先にそこでクローンしてください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "화면 잠금" + "value": "session move: 대상의 %1$@에 체크아웃이 없고 %2$@에 저장소도 없습니다. 먼저 그곳에 클론하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "锁定屏幕" + "value": "session move:目标上 %1$@ 没有检出,%2$@ 也没有仓库;请先在那里克隆" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "鎖定螢幕" + "value": "session move:目的地的 %1$@ 沒有 checkout,%2$@ 也沒有儲存庫;請先在那裡 clone" } } } }, - "shortcut.macos.logOut": { + "cli.session.move.error.sameEndpoint": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Log Out" + "value": "session move: the session is already there" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسجيل الخروج" + "value": "session move: الجلسة موجودة هناك بالفعل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abmelden" + "value": "session move: Die Sitzung ist bereits dort" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cerrar sesión" + "value": "session move: la sesión ya está allí" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fermer la session" + "value": "session move : la session y est déjà" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ログアウト" + "value": "session move: セッションはすでにそこにあります" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로그아웃" + "value": "session move: 세션이 이미 그곳에 있습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "退出登录" + "value": "session move:会话已经在那里" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "登出" + "value": "session move:此工作階段已經在那裡" } } } }, - "shortcut.macos.lookUp": { + "cli.session.move.error.transcriptNewer": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Look up & data detectors" + "value": "session move: the destination transcript is newer; the session continued there, so move it the other way" } }, "ar": { "stringUnit": { "state": "translated", - "value": "البحث وكاشفات البيانات" + "value": "session move: نص الجلسة في الوجهة أحدث؛ استمرت الجلسة هناك، لذا انقلها في الاتجاه الآخر" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nachschlagen & Datenerkennung" + "value": "session move: Das Transkript am Ziel ist neuer; die Sitzung wurde dort fortgesetzt, verschiebe sie also in die andere Richtung" } }, "es": { "stringUnit": { "state": "translated", - "value": "Consultar y detectores de datos" + "value": "session move: la transcripción del destino es más reciente; la sesión continuó allí, así que muévela en sentido contrario" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Recherche et détecteurs de données" + "value": "session move : la transcription de destination est plus récente ; la session s'y est poursuivie, déplacez-la dans l'autre sens" } }, "ja": { "stringUnit": { "state": "translated", - "value": "調べる/データ検出" + "value": "session move: 移動先のトランスクリプトのほうが新しいです。セッションはそこで続行されたので、逆方向に移動してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "찾아보기 및 데이터 감지기" + "value": "session move: 대상의 트랜스크립트가 더 최신입니다. 세션이 그곳에서 계속되었으니 반대 방향으로 이동하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "查询与数据检测器" + "value": "session move:目标上的记录更新;会话已在那里继续,请反向移动" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "查詢與資料偵測器" + "value": "session move:目的地的對話紀錄較新;工作階段已在那裡繼續,請反向移動" } } } }, - "shortcut.macos.missionControl": { + "cli.session.move.error.transcriptNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Mission Control" + "value": "session move: no Claude transcript for this session on %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار Mission Control" + "value": "session move: لا يوجد نص Claude لهذه الجلسة على %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mission Control anzeigen" + "value": "session move: Kein Claude-Transkript für diese Sitzung auf %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar Mission Control" + "value": "session move: no hay transcripción de Claude para esta sesión en %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher Mission Control" + "value": "session move : aucune transcription Claude pour cette session sur %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Mission Control を表示" + "value": "session move: %@ にこのセッションの Claude トランスクリプトがありません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Mission Control 보기" + "value": "session move: %@에 이 세션의 Claude 트랜스크립트가 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示调度中心" + "value": "session move:%@ 上没有此会话的 Claude 记录" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示「指揮中心」" + "value": "session move:%@ 上沒有此工作階段的 Claude 對話紀錄" } } } }, - "shortcut.macos.nextInputSource": { + "cli.session.move.error.transcriptsDiverged": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Select the next input source" + "value": "session move: the transcripts diverged (the destination copy is not a prefix of the source); resolve by hand" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحديد مصدر الإدخال التالي" + "value": "session move: تباعدت النصوص (نسخة الوجهة ليست بادئة للمصدر)؛ عالج ذلك يدويًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Nächste Eingabequelle auswählen" + "value": "session move: Die Transkripte sind auseinandergelaufen (die Kopie am Ziel ist kein Präfix der Quelle); bitte manuell auflösen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Seleccionar la siguiente fuente de entrada" + "value": "session move: las transcripciones divergieron (la copia del destino no es un prefijo del origen); resuélvelo a mano" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sélectionner la source de saisie suivante" + "value": "session move : les transcriptions ont divergé (la copie de destination n'est pas un préfixe de la source) ; résolvez manuellement" } }, "ja": { "stringUnit": { "state": "translated", - "value": "次の入力ソースを選択" + "value": "session move: トランスクリプトが分岐しました (移動先のコピーが元の先頭部分ではありません)。手動で解決してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다음 입력 소스 선택" + "value": "session move: 트랜스크립트가 갈라졌습니다(대상 사본이 원본의 접두사가 아님). 직접 해결하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择下一个输入法" + "value": "session move:记录已分叉(目标副本不是源的前缀);请手动处理" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選取下一個輸入方式" + "value": "session move:對話紀錄已分歧(目的地的副本不是來源的前綴);請手動處理" } } } }, - "shortcut.macos.nextWindow": { + "cli.session.move.error.unknownFlag": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Move focus to the next window" + "value": "session move: unknown flag '%@'" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نقل التركيز إلى النافذة التالية" + "value": "session move: علم غير معروف '%@'" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus auf das nächste Fenster bewegen" + "value": "session move: unbekanntes Flag „%@“" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover el foco a la siguiente ventana" + "value": "session move: opción desconocida '%@'" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Placer le curseur sur la fenêtre suivante" + "value": "session move : option inconnue '%@'" } }, "ja": { "stringUnit": { "state": "translated", - "value": "次のウインドウにフォーカスを移動" + "value": "session move: 不明なフラグ '%@'" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다음 윈도우로 포커스 이동" + "value": "session move: 알 수 없는 플래그 '%@'" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将焦点移到下一个窗口" + "value": "session move:未知标志 '%@'" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將焦點移至下一個視窗" + "value": "session move:未知的旗標 '%@'" } } } }, - "shortcut.macos.previousInputSource": { + "cli.session.move.error.unknownSource": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Select the previous input source" + "value": "session move: no record of where this session was moved; pass --from <ssh-destination>" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحديد مصدر الإدخال السابق" + "value": "session move: لا يوجد سجل بالمكان الذي نُقلت إليه هذه الجلسة؛ مرّر --from <ssh-destination>" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vorherige Eingabequelle auswählen" + "value": "session move: Kein Eintrag, wohin diese Sitzung verschoben wurde; gib --from <ssh-destination> an" } }, "es": { "stringUnit": { "state": "translated", - "value": "Seleccionar la fuente de entrada anterior" + "value": "session move: no hay registro de adónde se movió esta sesión; pasa --from <ssh-destination>" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sélectionner la source de saisie précédente" + "value": "session move : aucune trace de l'endroit où cette session a été déplacée ; passez --from <ssh-destination>" } }, "ja": { "stringUnit": { "state": "translated", - "value": "前の入力ソースを選択" + "value": "session move: このセッションの移動先の記録がありません。--from <ssh-destination> を指定してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이전 입력 소스 선택" + "value": "session move: 이 세션을 어디로 옮겼는지 기록이 없습니다. --from <ssh-destination>을 지정하세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择上一个输入法" + "value": "session move:没有此会话被移动到何处的记录;请传入 --from <ssh-destination>" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選取上一個輸入方式" + "value": "session move:沒有此工作階段被移到何處的紀錄;請傳入 --from <ssh-destination>" } } } }, - "shortcut.macos.previousWindow": { + "cli.session.move.error.unreachable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Move focus to the previous window" + "value": "session move: cannot reach %@: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نقل التركيز إلى النافذة السابقة" + "value": "session move: تعذّر الوصول إلى %1$@: %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus auf das vorherige Fenster bewegen" + "value": "session move: %1$@ ist nicht erreichbar: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mover el foco a la ventana anterior" + "value": "session move: no se puede acceder a %1$@: %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Placer le curseur sur la fenêtre précédente" + "value": "session move : impossible de joindre %1$@ : %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "前のウインドウにフォーカスを移動" + "value": "session move: %1$@ に接続できません: %2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이전 윈도우로 포커스 이동" + "value": "session move: %1$@에 연결할 수 없습니다: %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将焦点移到上一个窗口" + "value": "session move:无法连接 %1$@:%2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將焦點移至上一個視窗" + "value": "session move:無法連線到 %1$@:%2$@" } } } }, - "shortcut.macos.screenshotScreen": { + "cli.session.move.error.unsupportedPath": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Save picture of screen as a file" + "value": "session move: paths with whitespace are not supported: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حفظ صورة الشاشة كملف" + "value": "session move: المسارات التي تحتوي على مسافات غير مدعومة: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bildschirmfoto als Datei sichern" + "value": "session move: Pfade mit Leerzeichen werden nicht unterstützt: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Guardar imagen de la pantalla como archivo" + "value": "session move: no se admiten rutas con espacios: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Enregistrer une image de l’écran dans un fichier" + "value": "session move : les chemins contenant des espaces ne sont pas pris en charge : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "画面のピクチャをファイルとして保存" + "value": "session move: 空白を含むパスはサポートされていません: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "화면 사진을 파일로 저장" + "value": "session move: 공백이 포함된 경로는 지원하지 않습니다: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将屏幕图片存储为文件" + "value": "session move:不支持包含空白的路径:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將螢幕圖片儲存為檔案" + "value": "session move:不支援含有空白的路徑:%@" } } } }, - "shortcut.macos.screenshotScreenToClipboard": { + "cli.session.move.error.unsupportedRoute": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy picture of screen to the clipboard" + "value": "session move: moves go between this Mac and one host; move the session back with --to local first" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نسخ صورة الشاشة إلى الحافظة" + "value": "session move: يتم النقل بين هذا الـ Mac ومضيف واحد؛ أعد الجلسة أولًا باستخدام --to local" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bildschirmfoto in die Zwischenablage kopieren" + "value": "session move: Verschiebungen laufen zwischen diesem Mac und einem Host; verschiebe die Sitzung zuerst mit --to local zurück" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copiar imagen de la pantalla en el portapapeles" + "value": "session move: los movimientos van entre este Mac y un host; primero devuelve la sesión con --to local" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copier une image de l’écran dans le presse-papiers" + "value": "session move : les déplacements se font entre ce Mac et un hôte ; ramenez d'abord la session avec --to local" } }, "ja": { "stringUnit": { "state": "translated", - "value": "画面のピクチャをクリップボードにコピー" + "value": "session move: 移動はこの Mac と 1 台のホストの間で行います。先に --to local でセッションを戻してください" } }, "ko": { "stringUnit": { "state": "translated", - "value": "화면 사진을 클립보드로 복사" + "value": "session move: 이동은 이 Mac과 한 호스트 사이에서만 가능합니다. 먼저 --to local로 세션을 되돌리세요" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将屏幕图片拷贝到剪贴板" + "value": "session move:移动只在这台 Mac 与一台主机之间进行;请先用 --to local 把会话移回" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將螢幕圖片拷貝到剪貼板" + "value": "session move:移動只在這台 Mac 與一台主機之間進行;請先用 --to local 把工作階段移回來" } } } }, - "shortcut.macos.screenshotSelection": { + "cli.session.move.error.unsupportedSSHTarget": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Save picture of selected area as a file" + "value": "session move: unsupported SSH destination or option for '%@' (use user@host or an ssh_config alias, without whitespace)" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حفظ صورة المنطقة المحددة كملف" + "value": "session move: وجهة أو خيار SSH غير مدعوم لـ '%@' (استخدم user@host أو اسمًا مستعارًا من ssh_config، بدون مسافات)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Foto des ausgewählten Bereichs als Datei sichern" + "value": "session move: nicht unterstütztes SSH-Ziel oder -Option für „%@“ (verwende user@host oder einen ssh_config-Alias, ohne Leerzeichen)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Guardar imagen del área seleccionada como archivo" + "value": "session move: destino u opción SSH no admitidos para '%@' (usa user@host o un alias de ssh_config, sin espacios)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Enregistrer une image de la zone sélectionnée dans un fichier" + "value": "session move : destination ou option SSH non prise en charge pour '%@' (utilisez user@host ou un alias ssh_config, sans espaces)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択部分のピクチャをファイルとして保存" + "value": "session move: '%@' の SSH 接続先またはオプションはサポートされていません (空白なしの user@host か ssh_config のエイリアスを使ってください)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택 영역 사진을 파일로 저장" + "value": "session move: '%@'에 대한 SSH 대상 또는 옵션을 지원하지 않습니다(공백 없이 user@host 또는 ssh_config 별칭 사용)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将所选区域的图片存储为文件" + "value": "session move:'%@' 的 SSH 目标或选项不受支持(请使用 user@host 或 ssh_config 别名,且不含空白)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將所選區域的圖片儲存為檔案" + "value": "session move:'%@' 的 SSH 目的地或選項不受支援(請使用 user@host 或 ssh_config 別名,且不含空白)" } } } }, - "shortcut.macos.screenshotSelectionToClipboard": { + "cli.session.move.error.usage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copy picture of selected area to the clipboard" + "value": "Usage: cmux session move <session-id> --to <ssh-destination|local>" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نسخ صورة المنطقة المحددة إلى الحافظة" + "value": "الاستخدام: cmux session move <session-id> --to <ssh-destination|local>" } }, "de": { "stringUnit": { "state": "translated", - "value": "Foto des ausgewählten Bereichs in die Zwischenablage kopieren" + "value": "Verwendung: cmux session move <session-id> --to <ssh-destination|local>" } }, "es": { "stringUnit": { "state": "translated", - "value": "Copiar imagen del área seleccionada en el portapapeles" + "value": "Uso: cmux session move <session-id> --to <ssh-destination|local>" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Copier une image de la zone sélectionnée dans le presse-papiers" + "value": "Utilisation : cmux session move <session-id> --to <ssh-destination|local>" } }, "ja": { "stringUnit": { "state": "translated", - "value": "選択部分のピクチャをクリップボードにコピー" + "value": "使用方法: cmux session move <session-id> --to <ssh-destination|local>" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택 영역 사진을 클립보드로 복사" + "value": "사용법: cmux session move <session-id> --to <ssh-destination|local>" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将所选区域的图片拷贝到剪贴板" + "value": "用法:cmux session move <session-id> --to <ssh-destination|local>" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將所選區域的圖片拷貝到剪貼板" + "value": "用法:cmux session move <session-id> --to <ssh-destination|local>" } } } }, - "shortcut.macos.screenshotToolbar": { + "cli.session.move.error.workingDirectoryUnknown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Screenshot and recording options" + "value": "session move: the transcript does not record the session's working directory" } }, "ar": { "stringUnit": { "state": "translated", - "value": "خيارات لقطة الشاشة والتسجيل" + "value": "session move: لا يسجّل النص دليل العمل الخاص بالجلسة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bildschirmfoto- und Aufnahmeoptionen" + "value": "session move: Das Transkript enthält kein Arbeitsverzeichnis der Sitzung" } }, "es": { "stringUnit": { "state": "translated", - "value": "Opciones de captura de pantalla y grabación" + "value": "session move: la transcripción no registra el directorio de trabajo de la sesión" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Options de capture d’écran et d’enregistrement" + "value": "session move : la transcription n'indique pas le répertoire de travail de la session" } }, "ja": { "stringUnit": { "state": "translated", - "value": "スクリーンショットと収録のオプション" + "value": "session move: トランスクリプトにセッションの作業ディレクトリが記録されていません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "스크린샷 및 기록 옵션" + "value": "session move: 트랜스크립트에 세션의 작업 디렉터리가 기록되어 있지 않습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "截屏和录制选项" + "value": "session move:记录中没有会话的工作目录" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "截圖和錄製選項" + "value": "session move:對話紀錄沒有記錄工作階段的工作目錄" } } } }, - "shortcut.macos.spaceLeft": { + "cli.session.move.error.worktreeAddFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Move left a space" + "value": "session move: could not add a worktree at %@: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الانتقال مساحة واحدة إلى اليسار" + "value": "session move: تعذّرت إضافة worktree في %1$@: %2$@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einen Space nach links" + "value": "session move: Worktree unter %1$@ konnte nicht hinzugefügt werden: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ir un espacio a la izquierda" + "value": "session move: no se pudo añadir un worktree en %1$@: %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aller un espace à gauche" + "value": "session move : impossible d'ajouter un worktree à %1$@ : %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "左の操作スペースへ移動" + "value": "session move: %1$@ に worktree を追加できませんでした: %2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "왼쪽 스페이스로 이동" + "value": "session move: %1$@에 worktree를 추가할 수 없습니다: %2$@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向左移动一个空间" + "value": "session move:无法在 %1$@ 添加 worktree:%2$@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "向左移動一個空間" + "value": "session move:無法在 %1$@ 新增 worktree:%2$@" } } } }, - "shortcut.macos.spaceRight": { + "cli.session.move.output.code": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Move right a space" + "value": "Code: %@ at %@ (%@) with working tree snapshot %@." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الانتقال مساحة واحدة إلى اليمين" + "value": "الكود: %1$@ عند %2$@ (%3$@) مع لقطة شجرة العمل %4$@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Einen Space nach rechts" + "value": "Code: %1$@ auf %2$@ (%3$@) mit Snapshot des Arbeitsverzeichnisses %4$@." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ir un espacio a la derecha" + "value": "Código: %1$@ en %2$@ (%3$@) con la instantánea del árbol de trabajo %4$@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aller un espace à droite" + "value": "Code : %1$@ à %2$@ (%3$@) avec l'instantané de l'arbre de travail %4$@." } }, "ja": { "stringUnit": { "state": "translated", - "value": "右の操作スペースへ移動" + "value": "コード: %1$@ は %2$@ (%3$@)、作業ツリーのスナップショット %4$@。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오른쪽 스페이스로 이동" + "value": "코드: %1$@, %2$@ (%3$@), 작업 트리 스냅샷 %4$@." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向右移动一个空间" + "value": "代码:%1$@ 位于 %2$@(%3$@),含工作树快照 %4$@。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "向右移動一個空間" + "value": "程式碼:%1$@ 位於 %2$@(%3$@),含工作樹快照 %4$@。" } } } }, - "shortcut.macos.spotlight": { + "cli.session.move.output.detached": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Spotlight search" + "value": "detached" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار بحث Spotlight" + "value": "منفصل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Spotlight-Suche anzeigen" + "value": "losgelöst" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar búsqueda de Spotlight" + "value": "desacoplado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher la recherche Spotlight" + "value": "détaché" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Spotlight 検索を表示" + "value": "デタッチ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Spotlight 검색 보기" + "value": "분리됨" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示“聚焦”搜索" + "value": "分离" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示 Spotlight 搜尋" + "value": "分離" } } } }, - "shortcut.macos.toggleDockHiding": { + "cli.session.move.output.moved": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Turn Dock hiding on or off" + "value": "Moved session %@ to %@ (cwd %@)." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تشغيل أو إيقاف إخفاء Dock" + "value": "تم نقل الجلسة %1$@ إلى %2$@ (cwd %3$@)." } }, "de": { "stringUnit": { "state": "translated", - "value": "Automatisches Ausblenden des Docks ein- oder ausschalten" + "value": "Sitzung %1$@ nach %2$@ verschoben (cwd %3$@)." } }, "es": { "stringUnit": { "state": "translated", - "value": "Activar o desactivar la ocultación del Dock" + "value": "Sesión %1$@ movida a %2$@ (cwd %3$@)." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activer ou désactiver le masquage du Dock" + "value": "Session %1$@ déplacée vers %2$@ (cwd %3$@)." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Dock を自動的に表示/非表示のオン/オフ" + "value": "セッション %1$@ を %2$@ に移動しました (cwd %3$@)。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Dock 가리기 켜기 또는 끄기" + "value": "세션 %1$@을(를) %2$@(으)로 이동했습니다 (cwd %3$@)." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开或关闭程序坞隐藏" + "value": "已将会话 %1$@ 移到 %2$@(cwd %3$@)。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟或關閉 Dock 隱藏" + "value": "已將工作階段 %1$@ 移到 %2$@(cwd %3$@)。" } } } }, - "shortcut.macos.voiceOver": { + "cli.session.move.output.notGit": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Turn VoiceOver on or off" + "value": "Code: %@ is not a git checkout; no files were moved." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تشغيل VoiceOver أو إيقافه" + "value": "الكود: %@ ليس checkout لـ git؛ لم يتم نقل أي ملفات." } }, "de": { "stringUnit": { "state": "translated", - "value": "VoiceOver ein- oder ausschalten" + "value": "Code: %@ ist kein git-Checkout; es wurden keine Dateien verschoben." } }, "es": { "stringUnit": { "state": "translated", - "value": "Activar o desactivar VoiceOver" + "value": "Código: %@ no es un checkout de git; no se movió ningún archivo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activer ou désactiver VoiceOver" + "value": "Code : %@ n'est pas un checkout git ; aucun fichier n'a été déplacé." } }, "ja": { "stringUnit": { "state": "translated", - "value": "VoiceOver のオン/オフ" + "value": "コード: %@ は git のチェックアウトではないため、ファイルは移動していません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "VoiceOver 켜기 또는 끄기" + "value": "코드: %@은(는) git 체크아웃이 아니므로 파일을 옮기지 않았습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开或关闭旁白" + "value": "代码:%@ 不是 git 检出;未移动任何文件。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟或關閉「旁白」" + "value": "程式碼:%@ 不是 git checkout;未移動任何檔案。" } } } }, - "settings.search.alias.setting.keyboardShortcuts.base-keymap": { + "cli.session.move.output.pathsRewritten": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "base keymap preset iterm iterm2 terminal app tmux prefix keybindings coming from another terminal" + "value": "Paths were rewritten: %@ -> %@. Absolute paths inside the transcript still name the old home." } }, "ar": { "stringUnit": { "state": "translated", - "value": "مخطط المفاتيح الأساسي إعداد مسبق iterm iterm2 terminal app tmux بادئة اختصارات طرفية أخرى" + "value": "تمت إعادة كتابة المسارات: %1$@ -> %2$@. لا تزال المسارات المطلقة داخل النص تشير إلى المجلد الرئيسي القديم." } }, "de": { "stringUnit": { "state": "translated", - "value": "Basis Tastaturbelegung Vorlage iterm iterm2 terminal app tmux Präfix Tastenbelegung anderes Terminal" + "value": "Pfade wurden umgeschrieben: %1$@ -> %2$@. Absolute Pfade im Transkript nennen weiterhin das alte Home-Verzeichnis." } }, "es": { "stringUnit": { "state": "translated", - "value": "mapa de teclas base preajuste iterm iterm2 terminal app tmux prefijo atajos otro terminal" + "value": "Se reescribieron las rutas: %1$@ -> %2$@. Las rutas absolutas dentro de la transcripción aún nombran el home anterior." } }, "fr": { "stringUnit": { "state": "translated", - "value": "disposition de base préréglage iterm iterm2 terminal app tmux préfixe raccourcis autre terminal" + "value": "Chemins réécrits : %1$@ -> %2$@. Les chemins absolus de la transcription désignent encore l'ancien dossier personnel." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ベースキーマップ プリセット iterm iterm2 terminal app tmux プレフィックス ショートカット 他のターミナル" + "value": "パスを書き換えました: %1$@ -> %2$@。トランスクリプト内の絶対パスは古いホームのままです。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기본 키맵 프리셋 iterm iterm2 terminal app tmux 접두사 단축키 다른 터미널" + "value": "경로를 다시 썼습니다: %1$@ -> %2$@. 트랜스크립트 안의 절대 경로는 여전히 이전 홈을 가리킵니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "基础键位方案 预设 iterm iterm2 terminal app tmux 前缀 快捷键 其他终端" + "value": "已改写路径:%1$@ -> %2$@。记录中的绝对路径仍指向旧的主目录。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "基礎按鍵配置 預設組合 iterm iterm2 terminal app tmux 前綴 快速鍵 其他終端機" + "value": "已改寫路徑:%1$@ -> %2$@。對話紀錄中的絕對路徑仍指向舊的主目錄。" } } } }, - "settings.shortcuts.baseKeymap.apply": { + "cli.session.move.output.sourceKept": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Apply Keymap" + "value": "The copy on %@ stays; do not resume it there too." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تطبيق مخطط المفاتيح" + "value": "تبقى النسخة على %@؛ لا تستأنفها هناك أيضًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "Tastaturbelegung anwenden" + "value": "Die Kopie auf %@ bleibt erhalten; setze sie dort nicht ebenfalls fort." } }, "es": { "stringUnit": { "state": "translated", - "value": "Aplicar mapa de teclas" + "value": "La copia en %@ se conserva; no la reanudes también allí." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appliquer la disposition" + "value": "La copie sur %@ est conservée ; ne la reprenez pas aussi là-bas." } }, "ja": { "stringUnit": { "state": "translated", - "value": "キーマップを適用" + "value": "%@ のコピーは残ります。そちらでも再開しないでください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "키맵 적용" + "value": "%@의 사본은 그대로 남습니다. 그곳에서도 재개하지 마세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "应用键位方案" + "value": "%@ 上的副本会保留;请勿也在那里恢复它。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "套用按鍵配置" + "value": "%@ 上的副本會保留;請勿也在那裡恢復它。" } } } }, - "shortcut.keymap.summary.iterm2Numbers": { + "cli.session.move.progress.addingWorktree": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "⌘1…9 will select tabs in the focused pane instead of workspaces. Workspaces move to ⌥⌘1…9." + "value": "session move: adding worktree %@ on the destination" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سيحدد ⌘1…9 علامات التبويب في الجزء المحدد بدلًا من مساحات العمل. تنتقل مساحات العمل إلى ⌥⌘1…9." + "value": "session move: جارٍ إضافة worktree %@ في الوجهة" } }, "de": { "stringUnit": { "state": "translated", - "value": "⌘1…9 wählt dann Tabs im fokussierten Bereich statt Arbeitsbereiche aus. Arbeitsbereiche wechseln zu ⌥⌘1…9." + "value": "session move: Worktree %@ wird am Ziel hinzugefügt" } }, "es": { "stringUnit": { "state": "translated", - "value": "⌘1…9 seleccionará pestañas del panel enfocado en lugar de espacios de trabajo. Los espacios de trabajo pasan a ⌥⌘1…9." + "value": "session move: añadiendo el worktree %@ en el destino" } }, "fr": { "stringUnit": { "state": "translated", - "value": "⌘1…9 sélectionnera les onglets du panneau actif au lieu des espaces de travail. Les espaces de travail passent à ⌥⌘1…9." + "value": "session move : ajout du worktree %@ sur la destination" } }, "ja": { "stringUnit": { "state": "translated", - "value": "⌘1…9 はワークスペースではなく、フォーカス中のペインのタブを選択するようになります。ワークスペースは ⌥⌘1…9 に移ります。" + "value": "session move: 移動先に worktree %@ を追加しています" } }, "ko": { "stringUnit": { "state": "translated", - "value": "⌘1…9는 작업 공간 대신 포커스된 패널의 탭을 선택합니다. 작업 공간은 ⌥⌘1…9로 이동합니다." + "value": "session move: 대상에 worktree %@을(를) 추가하는 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "⌘1…9 将选择当前窗格中的标签页,而不是工作区。工作区改用 ⌥⌘1…9。" + "value": "session move:正在目标上添加 worktree %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "⌘1…9 將選取目前窗格中的分頁,而不是工作區。工作區改用 ⌥⌘1…9。" + "value": "session move:正在目的地新增 worktree %@" } } } }, - "cli.help.send": { + "cli.session.help": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux send [flags] [--] <text>\n\nيرسل نصًا إلى سطح طرفية كضغطات مفاتيح. تسلسلات الهروب: \\n و\\r ترسلان Enter، و\\t ترسل Tab.\n\nللنصوص الكبيرة (مثلًا أكثر من 4 كيلوبايت، أو عدة أسطر موجهة إلى وكيل)، استخدم --paste أو cmux paste. تضغط ضغطات المفاتيح Enter عند كل سطر جديد، مما قد يرسل كل سطر بمفرده.\n\nمع --paste، يمر النص دون تغيير عبر مسار اللصق نفسه الذي يستخدمه cmux paste وCmd+V: لا تُفسَّر تسلسلات الهروب مثل \\n، وتُستبدل أحرف التحكم مثل Esc وCtrl-C بمسافات. يجب أن يأتي --paste قبل النص.\n\nالخيارات:\n --workspace <id|ref|index> مساحة العمل المستهدفة (الافتراضي: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> السطح المستهدف (الافتراضي: $CMUX_SURFACE_ID)\n --window <id|ref|index> سياق النافذة لمراجع وفهارس مساحة العمل/السطح\n --paste يلصق النص بدلًا من كتابته\n\nمثال:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "Usage: cmux session restore [--list] [--session <id>]...\n\nReopen Claude sessions that were running when cmux last quit unexpectedly.\ncmux finds them in the agent journal, skips any that are running or already\nopen, and resumes each in its own workspace through the launcher that started\nit.\n\nWithout --session, restore acts only after an unexpected quit.\n\nOptions:\n --list Show the sessions without restoring them.\n --session <id> Restore only this session (repeatable)." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux send [flags] [--] <text>\n\nSendet Text als Tastatureingaben an eine Terminal-Oberfläche. Escape-Sequenzen: \\n und \\r senden Enter, \\t sendet Tab.\n\nFür große Texte (zum Beispiel über 4 KB oder mehrere Zeilen an einen Agenten) --paste oder cmux paste verwenden. Tastatureingaben drücken bei jedem Zeilenumbruch Enter, wodurch jede Zeile einzeln abgesendet werden kann.\n\nMit --paste geht der Text unverändert über denselben Einfügepfad wie cmux paste und Cmd+V: Escape-Sequenzen wie \\n werden nicht interpretiert, und Steuerzeichen wie Esc und Strg-C werden durch Leerzeichen ersetzt. --paste muss vor dem Text stehen.\n\nFlags:\n --workspace <id|ref|index> Ziel-Workspace (Standard: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Ziel-Oberfläche (Standard: $CMUX_SURFACE_ID)\n --window <id|ref|index> Fensterkontext für Workspace-/Oberflächen-Refs und -Indizes\n --paste Fügt den Text ein, statt ihn zu tippen\n\nBeispiel:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "Verwendung: cmux session restore [--list] [--session <id>]...\n\nÖffnet Claude-Sitzungen erneut, die liefen, als cmux zuletzt unerwartet beendet wurde.\ncmux findet sie im Agent-Journal, überspringt laufende oder bereits geöffnete\nund setzt jede in einem eigenen Workspace\nüber den Launcher fort, der sie gestartet hat.\n\nOhne --session stellt restore nur nach einem unerwarteten Beenden wieder her.\n\nOptionen:\n --list Sitzungen anzeigen, ohne sie wiederherzustellen.\n --session <id> Nur diese Sitzung wiederherstellen (wiederholbar)." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Usage: cmux send [flags] [--] <text>\n\nSend text to a terminal surface as keystrokes. Escape sequences: \\n and \\r send Enter, \\t sends Tab.\n\nFor large text (for example over 4 KB, or several lines going to an agent), use --paste or cmux paste. Keystrokes press Enter at every newline, which can submit each line on its own.\n\nWith --paste, the text goes through the same paste path as cmux paste and Cmd+V, unchanged: escape sequences such as \\n are not interpreted, and control characters such as Esc and Ctrl-C are replaced with spaces. --paste must come before the text.\n\nFlags:\n --workspace <id|ref|index> Target workspace (default: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Target surface (default: $CMUX_SURFACE_ID)\n --window <id|ref|index> Window context for workspace/surface refs and indexes\n --paste Paste the text instead of typing it\n\nExample:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "Utilisation : cmux session restore [--list] [--session <id>]...\n\nRouvre les sessions Claude en cours lorsque cmux s’est fermé de façon inattendue.\ncmux les trouve dans le journal des agents, ignore celles qui tournent ou sont déjà\nouvertes, et reprend chacune dans son propre espace de travail via le lanceur qui l’a\ndémarrée.\n\nSans --session, restore n’agit qu’après une fermeture inattendue.\n\nOptions :\n --list Afficher les sessions sans les restaurer.\n --session <id> Restaurer uniquement cette session (répétable)." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Uso: cmux send [flags] [--] <text>\n\nEnvía texto a una superficie de terminal como pulsaciones de teclas. Secuencias de escape: \\n y \\r envían Intro, \\t envía Tab.\n\nPara textos grandes (por ejemplo, más de 4 KB o varias líneas dirigidas a un agente), usa --paste o cmux paste. Las pulsaciones presionan Intro en cada salto de línea, lo que puede enviar cada línea por separado.\n\nCon --paste, el texto pasa sin cambios por la misma ruta de pegado que cmux paste y Cmd+V: las secuencias de escape como \\n no se interpretan y los caracteres de control como Esc y Ctrl-C se reemplazan por espacios. --paste debe ir antes del texto.\n\nOpciones:\n --workspace <id|ref|index> Espacio de trabajo de destino (predeterminado: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Superficie de destino (predeterminada: $CMUX_SURFACE_ID)\n --window <id|ref|index> Contexto de ventana para referencias e índices de espacio de trabajo/superficie\n --paste Pega el texto en lugar de escribirlo\n\nEjemplo:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "الاستخدام: cmux session restore [--list] [--session <id>]...\n\nيعيد فتح جلسات Claude التي كانت قيد التشغيل عندما أُغلق cmux بشكل غير متوقع آخر مرة.\nيعثر cmux عليها في سجل الوكيل، ويتخطى ما يعمل منها أو المفتوح بالفعل،\nويستأنف كل جلسة في مساحة عمل خاصة بها\nعبر المشغّل الذي بدأها.\n\nبدون --session، لا تعمل الاستعادة إلا بعد إغلاق غير متوقع.\n\nالخيارات:\n --list عرض الجلسات دون استعادتها.\n --session <id> استعادة هذه الجلسة فقط (قابل للتكرار)." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux send [flags] [--] <text>\n\nEnvoie du texte à une surface de terminal sous forme de frappes. Séquences d’échappement : \\n et \\r envoient Entrée, \\t envoie Tab.\n\nPour un texte volumineux (par exemple plus de 4 Ko, ou plusieurs lignes destinées à un agent), utilisez --paste ou cmux paste. Les frappes appuient sur Entrée à chaque saut de ligne, ce qui peut envoyer chaque ligne séparément.\n\nAvec --paste, le texte passe tel quel par le même chemin de collage que cmux paste et Cmd+V : les séquences d’échappement comme \\n ne sont pas interprétées, et les caractères de contrôle comme Échap et Ctrl-C sont remplacés par des espaces. --paste doit précéder le texte.\n\nOptions :\n --workspace <id|ref|index> Espace de travail cible (par défaut : $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Surface cible (par défaut : $CMUX_SURFACE_ID)\n --window <id|ref|index> Contexte de fenêtre pour les références et index d’espace de travail/surface\n --paste Colle le texte au lieu de le taper\n\nExemple :\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "Uso: cmux session restore [--list] [--session <id>]...\n\nVuelve a abrir las sesiones de Claude que estaban en ejecución cuando cmux se cerró inesperadamente.\ncmux las encuentra en el diario de agentes, omite las que están en ejecución o ya\nabiertas, y reanuda cada una en su propio espacio de trabajo mediante el lanzador que\nla inició.\n\nSin --session, restore solo actúa tras un cierre inesperado.\n\nOpciones:\n --list Mostrar las sesiones sin restaurarlas.\n --session <id> Restaurar solo esta sesión (repetible)." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux send [flags] [--] <text>\n\nテキストをキー入力としてターミナルサーフェスに送信します。エスケープシーケンス: \\n と \\r は Enter、\\t は Tab を送信します。\n\n大きなテキスト(たとえば 4 KB を超えるもの、またはエージェントに送る複数行)には --paste または cmux paste を使ってください。キー入力では改行ごとに Enter が押されるため、各行が個別に送信されることがあります。\n\n--paste を使うと、テキストはそのまま cmux paste や Cmd+V と同じ貼り付け経路で送られます。\\n などのエスケープシーケンスは解釈されず、Esc や Ctrl-C などの制御文字はスペースに置き換えられます。--paste はテキストより前に指定してください。\n\nフラグ:\n --workspace <id|ref|index> 対象ワークスペース(既定: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 対象サーフェス(既定: $CMUX_SURFACE_ID)\n --window <id|ref|index> ワークスペース/サーフェスの参照とインデックスに使うウィンドウコンテキスト\n --paste テキストを入力する代わりに貼り付けます\n\n例:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "用法: cmux session restore [--list] [--session <id>]...\n\n重新開啟 cmux 上次意外結束時仍在執行的 Claude 工作階段。\ncmux 會從代理日誌中找出它們,略過仍在執行或已開啟的工作階段,\n並透過原本啟動它的啟動器\n在各自的工作區中繼續。\n\n未指定 --session 時,restore 只會在意外結束後執行。\n\n選項:\n --list 只列出工作階段,不還原。\n --session <id> 只還原此工作階段(可重複)。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사용법: cmux send [flags] [--] <text>\n\n텍스트를 키 입력으로 터미널 서피스에 보냅니다. 이스케이프 시퀀스: \\n과 \\r은 Enter, \\t는 Tab을 보냅니다.\n\n큰 텍스트(예: 4 KB 초과 또는 에이전트로 보내는 여러 줄)에는 --paste 또는 cmux paste를 사용하세요. 키 입력은 줄바꿈마다 Enter를 누르므로 각 줄이 따로 제출될 수 있습니다.\n\n--paste를 쓰면 텍스트가 변경 없이 cmux paste 및 Cmd+V와 같은 붙여넣기 경로로 전달됩니다. \\n 같은 이스케이프 시퀀스는 해석되지 않으며, Esc와 Ctrl-C 같은 제어 문자는 공백으로 바뀝니다. --paste는 텍스트보다 앞에 와야 합니다.\n\n플래그:\n --workspace <id|ref|index> 대상 워크스페이스 (기본값: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 대상 서피스 (기본값: $CMUX_SURFACE_ID)\n --window <id|ref|index> 워크스페이스/서피스 참조와 인덱스에 사용할 창 컨텍스트\n --paste 텍스트를 입력하는 대신 붙여넣습니다\n\n예:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "用法: cmux session restore [--list] [--session <id>]...\n\n重新打开 cmux 上次意外退出时仍在运行的 Claude 会话。\ncmux 会从代理日志中找到它们,跳过仍在运行或已打开的会话,\n并通过最初启动它的启动器\n在各自的工作区中继续。\n\n未指定 --session 时,restore 只会在意外退出后执行。\n\n选项:\n --list 只列出会话,不恢复。\n --session <id> 只恢复此会话(可重复)。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "用法:cmux send [flags] [--] <text>\n\n以按键方式将文本发送到终端表面。转义序列:\\n 和 \\r 发送 Enter,\\t 发送 Tab。\n\n对于大量文本(例如超过 4 KB,或要发给代理的多行文本),请使用 --paste 或 cmux paste。按键方式会在每个换行处按下 Enter,可能让每一行单独提交。\n\n使用 --paste 时,文本会原样通过与 cmux paste 和 Cmd+V 相同的粘贴路径发送:不会解释 \\n 等转义序列,Esc 和 Ctrl-C 等控制字符会被替换为空格。--paste 必须放在文本之前。\n\n标志:\n --workspace <id|ref|index> 目标工作区(默认:$CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 目标表面(默认:$CMUX_SURFACE_ID)\n --window <id|ref|index> 工作区/表面引用与索引的窗口上下文\n --paste 粘贴文本,而不是逐键输入\n\n示例:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "사용법: cmux session restore [--list] [--session <id>]...\n\ncmux가 마지막으로 예기치 않게 종료될 때 실행 중이던 Claude 세션을 다시 엽니다.\ncmux는 에이전트 저널에서 세션을 찾고, 실행 중이거나 이미 열려 있는 세션은 건너뛰며,\n각 세션을 시작한 런처를 통해\n자체 워크스페이스에서 이어갑니다.\n\n--session이 없으면 restore는 예기치 않은 종료 후에만 동작합니다.\n\n옵션:\n --list 복원하지 않고 세션만 표시합니다.\n --session <id> 이 세션만 복원합니다(반복 가능)." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "用法:cmux send [flags] [--] <text>\n\n以按鍵方式將文字傳送到終端機表面。跳脫序列:\\n 和 \\r 送出 Enter,\\t 送出 Tab。\n\n若是大量文字(例如超過 4 KB,或要送給代理的多行文字),請使用 --paste 或 cmux paste。按鍵方式會在每個換行處按下 Enter,可能讓每一行各自送出。\n\n使用 --paste 時,文字會原封不動地透過與 cmux paste 和 Cmd+V 相同的貼上路徑送出:不會解譯 \\n 等跳脫序列,Esc 和 Ctrl-C 等控制字元會被替換為空格。--paste 必須放在文字之前。\n\n旗標:\n --workspace <id|ref|index> 目標工作區(預設:$CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 目標表面(預設:$CMUX_SURFACE_ID)\n --window <id|ref|index> 工作區/表面參照與索引所用的視窗上下文\n --paste 貼上文字,而不是逐鍵輸入\n\n範例:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" + "value": "使用法: cmux session restore [--list] [--session <id>]...\n\ncmux が前回予期せず終了したときに実行中だった Claude セッションを再び開きます。\ncmux はエージェントジャーナルからセッションを見つけ、実行中または既に開いている\nものはスキップし、それぞれを起動したランチャー経由で\n専用のワークスペースで再開します。\n\n--session を指定しない場合、restore は予期しない終了の後にのみ動作します。\n\nオプション:\n --list 復元せずにセッションを表示します。\n --session <id> このセッションのみ復元します(複数指定可)。" } } } }, - "cli.send.hint.usePaste": { + "cli.session.error.expectedRestore": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "تلميح: كُتب كل سطر جديد كضغطة Enter؛ للنصوص الكبيرة متعددة الأسطر استخدم cmux send --paste أو cmux paste لإرسالها كلصقة واحدة" + "value": "session: expected 'restore' (see cmux help session)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Hinweis: Jeder Zeilenumbruch wurde als Enter getippt; für große mehrzeilige Texte cmux send --paste oder cmux paste verwenden, um sie als ein einziges Einfügen zu senden" + "value": "session: 'restore' erwartet (siehe cmux help session)" } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "hint: each newline was typed as Enter; for large multi-line text use cmux send --paste or cmux paste to deliver it as one paste" + "value": "session : « restore » attendu (voir cmux help session)" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "sugerencia: cada salto de línea se escribió como Intro; para textos grandes de varias líneas usa cmux send --paste o cmux paste para enviarlos como un solo pegado" + "value": "session: كان المتوقع 'restore' (راجع cmux help session)" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "astuce : chaque saut de ligne a été tapé comme Entrée ; pour un texte volumineux sur plusieurs lignes, utilisez cmux send --paste ou cmux paste pour l’envoyer en un seul collage" + "value": "session: se esperaba 'restore' (consulta cmux help session)" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ヒント: 各改行は Enter として入力されました。大きな複数行テキストは cmux send --paste または cmux paste を使うと 1 回の貼り付けとして送れます" + "value": "session:應為 'restore'(請參閱 cmux help session)" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "힌트: 각 줄바꿈이 Enter로 입력되었습니다. 큰 여러 줄 텍스트는 cmux send --paste 또는 cmux paste를 사용해 한 번의 붙여넣기로 보내세요" + "value": "session:应为 'restore'(请参阅 cmux help session)" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "提示:每个换行都作为 Enter 输入;对于大量多行文本,请使用 cmux send --paste 或 cmux paste 以一次粘贴发送" + "value": "session: 'restore'가 필요합니다(cmux help session 참조)" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "提示:每個換行都以 Enter 輸入;若是大量多行文字,請使用 cmux send --paste 或 cmux paste 以單次貼上送出" + "value": "session: 'restore' が必要です(cmux help session を参照)" } } } }, - "settings.computerUse.enabled.subtitle": { + "cli.session.error.sessionRequiresId": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Lets supported agents see and control apps on this Mac. An agent's first Computer Use request starts setup automatically." + "value": "session restore: --session requires an id" } }, "de": { "stringUnit": { "state": "translated", - "value": "Unterstützte Agenten können Apps auf diesem Mac sehen und steuern. Die erste Computer-Use-Anfrage eines Agenten startet die Einrichtung automatisch." + "value": "session restore: --session erfordert eine ID" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les agents pris en charge peuvent voir et contrôler les apps de ce Mac. La première requête Computer Use d’un agent lance automatiquement la configuration." + "value": "session restore : --session nécessite un identifiant" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يمكن للوكلاء المدعومين رؤية التطبيقات على جهاز Mac هذا والتحكم فيها. ويبدأ الإعداد تلقائيًا عند أول طلب Computer Use من أحد الوكلاء." + "value": "session restore: يتطلب --session معرّفًا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los agentes compatibles pueden ver y controlar apps en este Mac. La primera solicitud de Computer Use de un agente inicia la configuración automáticamente." + "value": "session restore: --session requiere un id" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "允許支援的代理程式查看及操作此 Mac 上的 App。代理程式第一次發出 Computer Use 要求時會自動開始設定。" + "value": "session restore:--session 需要一個 ID" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "允许受支持的代理查看并控制这台 Mac 上的 App。代理第一次发出 Computer Use 请求时会自动开始设置。" + "value": "session restore:--session 需要一个 ID" } }, "ko": { "stringUnit": { "state": "translated", - "value": "지원되는 에이전트가 이 Mac의 앱을 보고 제어할 수 있게 합니다. 에이전트가 처음 Computer Use를 요청하면 설정이 자동으로 시작됩니다." + "value": "session restore: --session에는 ID가 필요합니다" } }, "ja": { "stringUnit": { "state": "translated", - "value": "対応するエージェントが、この Mac のアプリの画面を見て操作できるようにします。エージェントが最初に Computer Use を要求すると、セットアップが自動的に始まります。" + "value": "session restore: --session には ID が必要です" } } } }, - "settings.app.closeWorkspaceOnLastSurfaceShortcut.subtitle": { + "cli.session.error.unknownArgument": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Closing the last surface in a workspace keeps the workspace open." + "value": "session restore: unknown argument '%@'" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Arbeitsbereich bleibt geöffnet, auch wenn seine letzte Oberfläche geschlossen wird." + "value": "session restore: unbekanntes Argument '%@'" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’espace de travail reste ouvert après la fermeture de sa dernière surface d’affichage." + "value": "session restore : argument inconnu « %@ »" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تبقى مساحة العمل مفتوحة عند إغلاق آخر سطح فيها." + "value": "session restore: وسيط غير معروف '%@'" } }, "es": { "stringUnit": { "state": "translated", - "value": "El espacio de trabajo permanece abierto aunque se cierre su última superficie." + "value": "session restore: argumento desconocido '%@'" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "即使關閉最後一個介面,工作區仍會保持開啟。" + "value": "session restore:未知的參數 '%@'" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "即使关闭最后一个表面,工作区也会保持打开。" + "value": "session restore:未知参数 '%@'" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마지막 서피스를 닫아도 워크스페이스는 닫히지 않습니다." + "value": "session restore: 알 수 없는 인수 '%@'" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最後のサーフェスを閉じても、ワークスペースは閉じません。" + "value": "session restore: 不明な引数 '%@'" } } } }, - "settings.app.commandPaletteSearchAllSurfaces.subtitle": { + "cli.session.list.empty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Includes terminal, browser, and Markdown surfaces from every workspace in command palette results." + "value": "No agent sessions to restore." } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Befehlspalette findet auch Terminal-, Browser- und Markdown-Oberflächen in allen Arbeitsbereichen." + "value": "Keine Agent-Sitzungen zum Wiederherstellen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La palette de commandes affiche aussi les surfaces d’affichage de terminal, de navigateur et Markdown de tous les espaces de travail." + "value": "Aucune session d’agent à restaurer." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعرض نتائج لوحة الأوامر أسطح الطرفية والمتصفح وMarkdown من جميع مساحات العمل." + "value": "لا توجد جلسات وكيل لاستعادتها." } }, "es": { "stringUnit": { "state": "translated", - "value": "La paleta de comandos también muestra las superficies de terminal, navegador y Markdown de todos los espacios de trabajo." + "value": "No hay sesiones de agente para restaurar." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在命令面板中也能找到所有工作區的終端機、瀏覽器和 Markdown 介面。" + "value": "沒有可還原的代理工作階段。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在命令面板中也能找到所有工作区的终端、浏览器和 Markdown 表面。" + "value": "没有可恢复的代理会话。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "명령어 팔레트에서 모든 워크스페이스의 터미널, 브라우저, Markdown 서피스도 찾을 수 있습니다." + "value": "복원할 에이전트 세션이 없습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "コマンドパレットで、すべてのワークスペースのターミナル、ブラウザ、Markdown のサーフェスも検索できます。" + "value": "復元するエージェントセッションはありません。" } } } }, - "settings.app.fileDrop.defaultBehavior.subtitle": { + "cli.session.restore.cleanQuit": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Choose what dropping files on a terminal or editor does. Holding Shift while dragging does the other." + "value": "No agent sessions restored: cmux last quit normally. To restore one anyway, pass --session <id> from --list." } }, "de": { "stringUnit": { "state": "translated", - "value": "Wählen Sie, was beim Ablegen von Dateien auf einem Terminal oder Editor passiert. Wenn Sie beim Ziehen die Umschalttaste gedrückt halten, gilt die andere Option." + "value": "Keine Agent-Sitzungen wiederhergestellt: cmux wurde zuletzt normal beendet. Um trotzdem eine wiederherzustellen, übergib --session <id> aus --list." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Choisissez ce qui se passe lorsque vous déposez des fichiers sur un terminal ou un éditeur. Si vous maintenez la touche Maj enfoncée pendant le glissement, l’autre option s’applique." + "value": "Aucune session d’agent restaurée : cmux s’est fermé normalement la dernière fois. Pour en restaurer une quand même, passez --session <id> depuis --list." } }, "ar": { "stringUnit": { "state": "translated", - "value": "اختر ما يحدث عند إفلات الملفات على طرفية أو محرر. يؤدي الضغط مع الاستمرار على مفتاح Shift أثناء السحب إلى تطبيق الخيار الآخر." + "value": "لم تتم استعادة أي جلسات وكيل: أُغلق cmux بشكل طبيعي آخر مرة. لاستعادة جلسة على أي حال، مرّر --session <id> من --list." } }, "es": { "stringUnit": { "state": "translated", - "value": "Elige qué ocurre al soltar archivos en una terminal o un editor. Si mantienes pulsada la tecla Mayúsculas al arrastrar, se usa la otra opción." + "value": "No se restauró ninguna sesión de agente: cmux se cerró normalmente la última vez. Para restaurar una de todos modos, pasa --session <id> de --list." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選擇將檔案拖放到終端機或編輯器時要執行的動作。拖移時按住 Shift 鍵可改用另一個動作。" + "value": "未還原任何代理工作階段:cmux 上次是正常結束。若仍要還原,請傳入 --list 中的 --session <id>。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择将文件拖放到终端或编辑器时执行的操作。拖动时按住 Shift 键可改用另一种操作。" + "value": "未恢复任何代理会话:cmux 上次是正常退出。若仍要恢复,请传入 --list 中的 --session <id>。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파일을 터미널이나 편집기에 드롭했을 때 수행할 동작을 선택합니다. 드래그 중에 Shift 키를 누르고 있으면 다른 쪽 동작을 수행합니다." + "value": "복원된 에이전트 세션이 없습니다. cmux가 마지막에 정상적으로 종료되었습니다. 그래도 복원하려면 --list에서 확인한 --session <id>를 전달하세요." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ファイルをターミナルやエディタにドロップしたときの動作を選択します。ドラッグ中に Shift キーを押したままにすると、もう一方の動作になります。" + "value": "エージェントセッションは復元されませんでした。cmux は前回正常に終了しています。それでも復元する場合は、--list の --session <id> を指定してください。" } } } }, - "settings.app.focusHistoryIncludesPanesAndTabs.subtitle": { + "cli.session.restore.empty": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Using Back and Forward also returns to previous panes and tabs." + "value": "No agent sessions restored." } }, "de": { "stringUnit": { "state": "translated", - "value": "Mit „Zurück“ und „Vor“ kehren Sie auch zu vorherigen Teilfenstern und Tabs zurück." + "value": "Keine Agent-Sitzungen wiederhergestellt." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Précédent et Suivant ramènent aussi aux volets et aux onglets précédents." + "value": "Aucune session d’agent restaurée." } }, "ar": { "stringUnit": { "state": "translated", - "value": "ينتقل «رجوع» و«تقدم» أيضًا إلى الأجزاء وعلامات التبويب السابقة." + "value": "لم تتم استعادة أي جلسات وكيل." } }, "es": { "stringUnit": { "state": "translated", - "value": "Atrás y Adelante también vuelven a los paneles y pestañas anteriores." + "value": "No se restauró ninguna sesión de agente." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "使用「返回」與「前進」時,也會回到先前的窗格與標籤頁。" + "value": "未還原任何代理工作階段。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "“后退”和“前进”也会回到之前的窗格和标签页。" + "value": "未恢复任何代理会话。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "뒤로 가기와 앞으로 가기로 이전 분할 창과 탭에도 돌아갈 수 있습니다." + "value": "복원된 에이전트 세션이 없습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "「戻る」と「進む」で、以前のペインやタブにも戻れます。" + "value": "エージェントセッションは復元されませんでした。" } } } }, - "settings.app.globalFontMagnification.subtitle": { + "cli.session.restore.done": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Scales all text in cmux. Command-Plus and Command-Minus still zoom the focused pane." + "value": "Agent sessions restored: %lld" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ändert die Größe des gesamten Texts in cmux. Mit Befehlstaste-Plus und Befehlstaste-Minus lässt sich das fokussierte Teilfenster weiterhin zoomen." + "value": "Wiederhergestellte Agent-Sitzungen: %lld" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Modifie la taille de tout le texte de cmux. Commande + Plus et Commande + Moins continuent de régler le zoom du volet actif." + "value": "Sessions d’agent restaurées : %lld" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يغيّر حجم جميع النصوص في cmux. ولا يزال الاختصاران Command-علامة الجمع وCommand-علامة الطرح يكبّران الجزء المركّز عليه ويصغّرانه." + "value": "جلسات الوكيل المستعادة: %lld" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cambia el tamaño de todo el texto de cmux. Comando + Más y Comando + Menos siguen ajustando el zoom del panel enfocado." + "value": "Sesiones de agente restauradas: %lld" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "調整 cmux 中所有文字的大小。Command + 加號和 Command + 減號仍可用來縮放目前聚焦的窗格。" + "value": "已還原的代理工作階段:%lld" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "调整 cmux 中所有文本的大小。Command + 加号和 Command + 减号仍可用于缩放当前聚焦的窗格。" + "value": "已恢复的代理会话:%lld" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux의 모든 텍스트 크기를 조절합니다. 포커스된 분할 창은 계속 Command-더하기와 Command-빼기로 확대/축소할 수 있습니다." + "value": "복원된 에이전트 세션: %lld" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux 内のすべてのテキストの大きさを変更します。フォーカス中のペインは、これまでどおり Command + プラスと Command + マイナスで拡大縮小できます。" + "value": "復元したエージェントセッション: %lld" } } } }, - "settings.app.hideAllSidebarDetails.subtitle": { + "agentRecovery.alert.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows only workspace titles in the sidebar." + "value": "Restore agent sessions?" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeigt in der Seitenleiste nur die Titel der Arbeitsbereiche an." + "value": "Agent-Sitzungen wiederherstellen?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Affiche uniquement les titres des espaces de travail dans la barre latérale." + "value": "Restaurer les sessions d’agent ?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يعرض عناوين مساحات العمل فقط في الشريط الجانبي." + "value": "هل تريد استعادة جلسات الوكيل؟" } }, "es": { "stringUnit": { "state": "translated", - "value": "Muestra solo los títulos de los espacios de trabajo en la barra lateral." + "value": "¿Restaurar las sesiones de agente?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "側邊欄只顯示工作區標題。" + "value": "要還原代理工作階段嗎?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "侧边栏只显示工作区标题。" + "value": "要恢复代理会话吗?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사이드바에 워크스페이스 제목만 표시합니다." + "value": "에이전트 세션을 복원할까요?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイドバーにワークスペースのタイトルだけを表示します。" + "value": "エージェントセッションを復元しますか?" } } } }, - "settings.app.hideTabCloseButton.subtitle": { + "agentRecovery.alert.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Removes the close button from tabs." + "value": "cmux quit unexpectedly while agent sessions were running. Sessions to restore: %lld. Each one reopens in its own workspace and resumes where it left off." } }, "de": { "stringUnit": { "state": "translated", - "value": "Tabs werden ohne Schließen-Taste angezeigt." + "value": "cmux wurde unerwartet beendet, während Agent-Sitzungen liefen. Wiederherzustellende Sitzungen: %lld. Jede wird in einem eigenen Workspace geöffnet und dort fortgesetzt, wo sie aufgehört hat." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les onglets s’affichent sans bouton de fermeture." + "value": "cmux s’est fermé de façon inattendue pendant que des sessions d’agent étaient en cours. Sessions à restaurer : %lld. Chacune rouvre dans son propre espace de travail et reprend là où elle s’était arrêtée." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تظهر علامات التبويب دون زر إغلاق." + "value": "أُغلق cmux بشكل غير متوقع أثناء تشغيل جلسات الوكيل. الجلسات المطلوب استعادتها: %lld. تُفتح كل جلسة في مساحة عمل خاصة بها وتُستأنف من حيث توقفت." } }, "es": { "stringUnit": { "state": "translated", - "value": "Las pestañas se muestran sin el botón de cerrar." + "value": "cmux se cerró inesperadamente mientras había sesiones de agente en ejecución. Sesiones por restaurar: %lld. Cada una se abre en su propio espacio de trabajo y continúa donde se quedó." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "標籤頁上不顯示關閉按鈕。" + "value": "cmux 在代理工作階段執行時意外結束。要還原的工作階段:%lld。每個工作階段都會在各自的工作區重新開啟,並從中斷處繼續。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "标签页上不显示关闭按钮。" + "value": "cmux 在代理会话运行时意外退出。要恢复的会话:%lld。每个会话都会在各自的工作区重新打开,并从中断处继续。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "탭에 닫기 버튼을 표시하지 않습니다." + "value": "에이전트 세션이 실행 중일 때 cmux가 예기치 않게 종료되었습니다. 복원할 세션: %lld. 각 세션은 자체 워크스페이스에서 다시 열리고 중단된 곳에서 이어집니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブの閉じるボタンを非表示にします。" + "value": "エージェントセッションの実行中に cmux が予期せず終了しました。復元するセッション: %lld。各セッションは専用のワークスペースで再び開き、中断したところから再開します。" } } } }, - "settings.app.minimalMode.subtitle": { + "agentRecovery.alert.restore": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hides the workspace title bar and shows its controls in the sidebar." + "value": "Restore Agent Sessions" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blendet die Titelleiste des Arbeitsbereichs aus und zeigt ihre Steuerelemente in der Seitenleiste an." + "value": "Agent-Sitzungen wiederherstellen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Masque la barre de titre de l’espace de travail et affiche ses commandes dans la barre latérale." + "value": "Restaurer les sessions d’agent" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يخفي شريط عنوان مساحة العمل ويعرض عناصر التحكم الخاصة به في الشريط الجانبي." + "value": "استعادة جلسات الوكيل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Oculta la barra de título del espacio de trabajo y muestra sus controles en la barra lateral." + "value": "Restaurar sesiones de agente" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "隱藏工作區標題列,改在側邊欄中顯示其控制項。" + "value": "還原代理工作階段" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "隐藏工作区标题栏,改为在侧边栏中显示其控件。" + "value": "恢复代理会话" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스 제목 막대를 숨기고, 제목 막대의 컨트롤을 사이드바에 표시합니다." + "value": "에이전트 세션 복원" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのタイトルバーを非表示にし、そのコントロールをサイドバーに表示します。" + "value": "エージェントセッションを復元" } } } }, - "settings.app.newWorkspacePlacement.subtitle": { + "agentRecovery.alert.notNow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Choose where new workspaces appear in the sidebar." + "value": "Not Now" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wählen Sie, wo neue Arbeitsbereiche in der Seitenleiste erscheinen." + "value": "Nicht jetzt" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Choisissez où les nouveaux espaces de travail apparaissent dans la barre latérale." + "value": "Pas maintenant" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اختر مكان ظهور مساحات العمل الجديدة في الشريط الجانبي." + "value": "ليس الآن" } }, "es": { "stringUnit": { "state": "translated", - "value": "Elige dónde aparecen los nuevos espacios de trabajo en la barra lateral." + "value": "Ahora no" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選擇新工作區要顯示在側邊欄的哪個位置。" + "value": "稍後" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择新工作区在侧边栏中的显示位置。" + "value": "以后再说" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 작업 공간을 사이드바의 어디에 표시할지 선택합니다." + "value": "나중에" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新しいワークスペースをサイドバーのどこに表示するかを選択します。" + "value": "後で" } } } }, - "settings.app.openSidebarPRLinks.subtitle": { + "settings.notifications.soundWhenFocused.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Clicking a pull request link in the sidebar opens it in the cmux browser." + "value": "Play the notification sound even when the pane that notified is already focused. When off, a focused pane shows its ring without a sound." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Pull-Request-Links in der Seitenleiste werden per Klick im cmux-Browser geöffnet." + "value": "شغّل صوت الإشعار حتى عندما تكون اللوحة التي أرسلت الإشعار في موضع التركيز بالفعل. عند إيقافه، تعرض اللوحة المُركَّز عليها حلقتها دون صوت." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Un clic sur un lien de pull request de la barre latérale l’ouvre dans le navigateur cmux." + "value": "Den Benachrichtigungston auch abspielen, wenn der benachrichtigende Bereich bereits fokussiert ist. Wenn aus, zeigt ein fokussierter Bereich seinen Ring ohne Ton." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تُفتح روابط طلبات السحب في الشريط الجانبي في متصفح cmux عند النقر عليها." + "value": "Reproduce el sonido de notificación incluso cuando el panel que notificó ya tiene el foco. Si está desactivado, un panel con foco muestra su anillo sin sonido." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Los enlaces de pull request de la barra lateral se abren en el navegador de cmux al hacer clic en ellos." + "value": "Jouer le son de notification même lorsque le panneau à l’origine de la notification a déjà le focus. Désactivé, un panneau actif affiche son anneau sans son." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "側邊欄中的 PR 連結會在 cmux 瀏覽器中開啟。" + "value": "通知を送ったペインがすでにフォーカスされている場合でも通知音を鳴らします。オフの場合、フォーカス中のペインは音を鳴らさずにリングを表示します。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "侧边栏中的 PR 链接会在 cmux 浏览器中打开。" + "value": "알림을 보낸 패널이 이미 포커스된 상태여도 알림음을 재생합니다. 끄면 포커스된 패널은 소리 없이 링만 표시합니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사이드바의 풀 리퀘스트 링크를 클릭하면 cmux 브라우저에서 열립니다." + "value": "即使发出通知的窗格已处于焦点状态,也播放通知声音。关闭时,处于焦点的窗格会显示光环但不发出声音。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サイドバーのプルリクエストのリンクをクリックすると、cmuxブラウザで開きます。" + "value": "即使發出通知的窗格已在焦點中,也播放通知聲音。關閉時,焦點中的窗格會顯示光環但不發出聲音。" } } } }, - "settings.app.openSidebarPortLinks.subtitle": { + "settings.notifications.soundWhenFocused.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Clicking a port link in the sidebar opens it in the cmux browser." + "value": "Sound for Focused Pane" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Port-Links in der Seitenleiste werden per Klick im cmux-Browser geöffnet." + "value": "صوت للوحة المُركَّز عليها" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Un clic sur un lien de port de la barre latérale l’ouvre dans le navigateur cmux." + "value": "Ton für fokussierten Bereich" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تُفتح روابط المنافذ في الشريط الجانبي في متصفح cmux عند النقر عليها." + "value": "Sonido para el panel con foco" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Los enlaces de puerto de la barra lateral se abren en el navegador de cmux al hacer clic en ellos." + "value": "Son pour le panneau actif" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "側邊欄中的連接埠連結會在 cmux 瀏覽器中開啟。" + "value": "フォーカス中のペインの通知音" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "侧边栏中的端口链接会在 cmux 浏览器中打开。" + "value": "포커스된 패널 소리" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사이드바의 포트 링크를 클릭하면 cmux 브라우저에서 열립니다." + "value": "焦点窗格的声音" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サイドバーのポートリンクをクリックすると、cmuxブラウザで開きます。" + "value": "焦點窗格的聲音" } } } }, - "settings.app.paneFirstClickFocus.subtitle": { + "dialog.close.dontAskAgain": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Clicking a pane while cmux is in the background focuses that pane right away." + "value": "Don’t ask again" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لا تسأل مرة أخرى" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ist cmux im Hintergrund, wird ein Teilfenster schon beim ersten Klick fokussiert." + "value": "Nicht mehr fragen" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Lorsque cmux est en arrière-plan, un clic sur un volet l’active immédiatement." + "value": "No volver a preguntar" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "عندما يكون cmux في الخلفية، يكفي النقر على جزء للتركيز عليه فورًا." + "value": "Ne plus demander" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Si cmux está en segundo plano, un clic en un panel lo enfoca de inmediato." + "value": "今後確認しない" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "即使 cmux 在背景執行,按一下窗格也會立即將焦點移到該窗格。" + "value": "다시 묻지 않기" } }, - "zh-Hans": { + "uk": { "stringUnit": { "state": "translated", - "value": "即使 cmux 在后台,点按窗格也会立即将焦点移到该窗格。" + "value": "Більше не запитувати" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux가 백그라운드에 있어도 분할 창을 클릭하면 바로 그 분할 창에 포커스가 이동합니다." + "value": "不再询问" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux がバックグラウンドにあっても、ペインをクリックするとすぐにそのペインにフォーカスが移ります。" + "value": "不再詢問" } } } }, - "settings.app.pathLastSegmentOnly.subtitle": { - "extractionState": "manual", + "settings.app.accentColor": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Shortens long paths from the start to keep their end visible." + "value": "لون التمييز" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Kürzt lange Pfade am Anfang, damit ihr Ende sichtbar bleibt." + "value": "Boja naglaska" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "Raccourcit les chemins longs par le début pour que leur fin reste visible." + "value": "Accentfarve" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يختصر المسارات الطويلة من بدايتها لتبقى نهايتها ظاهرة." + "value": "Akzentfarbe" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Acorta las rutas largas por el inicio para que su final siga visible." + "value": "Accent Color" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "長路徑會省略開頭,保留結尾部分。" + "value": "Color de acento" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "长路径会省略开头,保留结尾部分。" + "value": "Couleur d’accentuation" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "긴 경로는 앞부분을 생략하여 끝부분이 보이게 합니다." + "value": "Colore di evidenziazione" } }, "ja": { "stringUnit": { "state": "translated", - "value": "長いパスは先頭を省略して、末尾が見えるようにします。" + "value": "アクセントカラー" } - } - } - }, - "settings.app.renameSelectsName.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Renaming from the command palette selects the current name." + "value": "강조 색상" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Beim Umbenennen über die Befehlspalette ist der aktuelle Name bereits ausgewählt." + "value": "Aksentfarge" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Lors d’un renommage depuis la palette de commandes, le nom actuel est sélectionné." + "value": "Kolor akcentu" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "عند إعادة التسمية من لوحة الأوامر، يكون الاسم الحالي محددًا." + "value": "Cor de destaque" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Al cambiar el nombre desde la paleta de comandos, el nombre actual aparece seleccionado." + "value": "Цвет акцента" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "從命令面板重新命名時,會選取目前的名稱。" + "value": "สีเน้น" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "从命令面板重命名时,会选中当前名称。" + "value": "Vurgu Rengi" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "명령어 팔레트에서 이름을 변경할 때 현재 이름이 선택된 상태로 표시됩니다." + "value": "Колір акценту" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "コマンドパレットで名前を変更するとき、現在の名前が選択された状態になります。" + "value": "强调色" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "強調色" } } } }, - "settings.app.sidebarBranchLayout.subtitle": { - "extractionState": "manual", + "settings.app.accentColor.cmux": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Choose whether branches share one line or each get their own line." + "value": "أزرق cmux" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Wählen Sie, ob sich Branches eine Zeile teilen oder jeweils eine eigene Zeile erhalten." + "value": "cmux plava" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "Choisissez si les branches partagent une même ligne ou ont chacune leur propre ligne." + "value": "cmux-blå" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "اختر ما إذا كانت الفروع تتشارك سطرًا واحدًا أو يحصل كل منها على سطر خاص به." + "value": "cmux-Blau" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Elige si las ramas comparten una sola línea o cada una ocupa su propia línea." + "value": "cmux Blue" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "選擇分支要共用一行,還是各自獨立一行。" + "value": "Azul de cmux" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "选择分支是共用一行,还是各占一行。" + "value": "Bleu cmux" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "브랜치를 한 줄에 함께 표시할지, 각각 별도의 줄에 표시할지 선택합니다." + "value": "Blu cmux" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブランチを 1 行にまとめて表示するか、それぞれ別の行に表示するかを選択します。" + "value": "cmux ブルー" } - } - } - }, - "settings.app.stackBranchDirectory.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Shows the branch and directory on separate lines." + "value": "cmux 파란색" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Zeigt Branch und Verzeichnis in getrennten Zeilen an." + "value": "cmux-blå" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Affiche la branche et le répertoire sur des lignes distinctes." + "value": "Niebieski cmux" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "يعرض الفرع والدليل في سطرين منفصلين." + "value": "Azul do cmux" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Muestra la rama y el directorio en líneas separadas." + "value": "Синий cmux" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "分支與目錄分行顯示。" + "value": "สีน้ำเงิน cmux" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "分支和目录分行显示。" + "value": "cmux Mavisi" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "브랜치와 디렉터리를 각각 다른 줄에 표시합니다." + "value": "Синій cmux" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ブランチとディレクトリを別々の行に表示します。" + "value": "cmux 蓝" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "cmux 藍" } } } }, - "settings.app.warnBeforeClosingTab.subtitle": { - "extractionState": "manual", + "settings.app.accentColor.subtitle": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Closing a tab asks for confirmation first." + "value": "لون مساحة العمل المحددة وحلقة التنبيه وحالة الوكيل وإبرازات cmux الأخرى. يتبع خيار النظام لون التمييز في macOS." } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Beim Schließen eines Tabs wird zuerst nach einer Bestätigung gefragt." + "value": "Boja odabranog radnog prostora, prstena pažnje, statusa agenta i ostalih cmux istaknutih elemenata. Sistem prati boju naglaska macOS-a." } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "Une confirmation est demandée avant la fermeture d’un onglet." + "value": "Farve for det valgte arbejdsområde, opmærksomhedsringen, agentstatus og andre cmux-fremhævninger. System følger macOS-accentfarven." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يُطلب التأكيد قبل إغلاق علامة التبويب." + "value": "Farbe des ausgewählten Workspace, des Aufmerksamkeitsrings, des Agentenstatus und anderer cmux-Hervorhebungen. „Systemfarbe“ folgt der macOS-Akzentfarbe." } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Se pide confirmación antes de cerrar una pestaña." + "value": "Color of the selected workspace, attention ring, agent status, and other cmux highlights. System follows the macOS accent color." } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "關閉標籤頁前先要求確認。" + "value": "Color del espacio de trabajo seleccionado, el anillo de atención, el estado del agente y otros resaltados de cmux. Sistema sigue el color de acento de macOS." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "关闭标签页前先要求确认。" + "value": "Couleur de l’espace de travail sélectionné, de l’anneau d’attention, de l’état de l’agent et des autres mises en évidence de cmux. Système suit la couleur d’accentuation de macOS." } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "탭을 닫기 전에 확인을 요청합니다." + "value": "Colore dell’area di lavoro selezionata, dell’anello di attenzione, dello stato dell’agente e degli altri elementi evidenziati di cmux. Sistema segue il colore di evidenziazione di macOS." } }, "ja": { "stringUnit": { "state": "translated", - "value": "タブを閉じる前に確認します。" + "value": "選択中のワークスペース、注意リング、エージェントの状態など、cmux のハイライトの色です。「システム」は macOS のアクセントカラーに従います。" } - } - } - }, - "settings.app.warnBeforeClosingTabXButton.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Clicking a tab's close button asks for confirmation first." + "value": "선택한 워크스페이스, 주의 링, 에이전트 상태 등 cmux 강조 표시의 색상입니다. 시스템은 macOS 강조 색상을 따릅니다." } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Beim Klicken auf die Schließen-Taste eines Tabs wird zuerst nach einer Bestätigung gefragt." + "value": "Farge for det valgte arbeidsområdet, oppmerksomhetsringen, agentstatus og andre cmux-uthevinger. System følger macOS-aksentfargen." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Une confirmation est demandée avant la fermeture d’un onglet avec son bouton de fermeture." + "value": "Kolor wybranego obszaru roboczego, pierścienia uwagi, stanu agenta i innych wyróżnień cmux. Systemowy podąża za kolorem akcentu macOS." } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "يُطلب التأكيد قبل إغلاق علامة التبويب بالنقر على زر الإغلاق الخاص بها." + "value": "Cor do espaço de trabalho selecionado, do anel de atenção, do status do agente e de outros destaques do cmux. Sistema segue a cor de destaque do macOS." } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Se pide confirmación antes de cerrar una pestaña con su botón de cerrar." + "value": "Цвет выбранного рабочего пространства, кольца внимания, статуса агента и других выделений cmux. «Системный» следует цвету акцента macOS." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "按一下標籤頁上的關閉按鈕後,會先要求確認再關閉。" + "value": "สีของพื้นที่ทำงานที่เลือก วงแจ้งเตือน สถานะเอเจนต์ และไฮไลต์อื่นๆ ของ cmux ตัวเลือกระบบจะใช้สีเน้นของ macOS" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "点按标签页上的关闭按钮后,会先要求确认再关闭。" + "value": "Seçili çalışma alanı, dikkat halkası, ajan durumu ve diğer cmux vurgularının rengi. Sistem, macOS vurgu rengini izler." } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "탭의 닫기 버튼을 클릭하면 탭을 닫기 전에 확인을 요청합니다." + "value": "Колір вибраного робочого простору, кільця уваги, статусу агента та інших виділень cmux. «Системний» використовує колір акценту macOS." } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "タブの閉じるボタンをクリックしたとき、閉じる前に確認します。" + "value": "所选工作区、提醒环、代理状态和其他 cmux 高亮的颜色。“系统”跟随 macOS 强调色。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "所選工作區、提醒環、代理狀態和其他 cmux 醒目提示的顏色。「系統」跟隨 macOS 強調色。" } } } }, - "settings.app.warnBeforeQuit.subtitle": { - "extractionState": "manual", + "settings.app.accentColor.system": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Choose when quitting with Command-Q asks for confirmation. Dirty Only asks only when a workspace would ask before closing." + "value": "النظام" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Wählen Sie, wann beim Beenden mit Befehlstaste-Q nach einer Bestätigung gefragt wird. „Nur bei Bedarf“ fragt nur, wenn ein Arbeitsbereich vor dem Schließen nachfragen würde." + "value": "Sistem" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "Choisissez quand une confirmation est demandée pour quitter avec Commande + Q. « Si nécessaire » ne la demande que si un espace de travail la demanderait avant sa fermeture." + "value": "System" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "اختر متى يُطلب التأكيد عند الإنهاء باستخدام Command-Q. يطلب خيار «عند الحاجة فقط» التأكيد فقط عندما تطلبه مساحة عمل قبل إغلاقها." + "value": "Systemfarbe" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Elige cuándo se pide confirmación al salir con Comando + Q. «Solo si hace falta» solo la pide cuando un espacio de trabajo la pediría antes de cerrarse." + "value": "System" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "選擇按 Command + Q 結束時,在什麼情況下要求確認。「僅在需要時」只會在某個工作區關閉前需要確認時才詢問。" + "value": "Sistema" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "选择按 Command + Q 退出时,在什么情况下要求确认。“仅在需要时”只会在某个工作区关闭前需要确认时才询问。" + "value": "Système" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "Command-Q로 종료할 때 확인을 요청할 조건을 선택합니다. ‘필요 시에만’은 닫기 전에 확인이 필요한 작업 공간이 있을 때만 확인을 요청합니다." + "value": "Sistema" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Command + Q で終了するときに、どのような場合に確認するかを選択します。「必要時のみ」では、閉じる前に確認が必要なワークスペースがある場合だけ確認します。" + "value": "システム" } - } - } - }, - "settings.app.workspaceInheritWorkingDirectory.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Starts new workspaces in the working directory of the current workspace." + "value": "시스템" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Startet neue Arbeitsbereiche im Arbeitsverzeichnis des aktuellen Arbeitsbereichs." + "value": "System" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Ouvre les nouveaux espaces de travail dans le répertoire de travail de l’espace de travail actuel." + "value": "Systemowy" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "يبدأ مساحات العمل الجديدة في دليل العمل الخاص بمساحة العمل الحالية." + "value": "Sistema" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Inicia los nuevos espacios de trabajo en el directorio de trabajo del espacio de trabajo actual." + "value": "Системный" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "新工作區會沿用目前工作區的工作目錄。" + "value": "ระบบ" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "新工作区会沿用当前工作区的工作目录。" + "value": "Sistem" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "새 작업 공간은 현재 작업 공간의 작업 디렉터리에서 시작됩니다." + "value": "Системний" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新しいワークスペースは、現在のワークスペースと同じ作業ディレクトリで開始します。" + "value": "系统" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "系統" } } } }, - "settings.app.wrapWorkspaceTitles.subtitle": { - "extractionState": "manual", + "settings.app.accentColor.systemToggle": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Shows long workspace titles in full on multiple lines." + "value": "لون التمييز للنظام" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Zeigt lange Arbeitsbereichstitel vollständig in mehreren Zeilen an." + "value": "Sistemska boja naglaska" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "Affiche en entier les titres longs des espaces de travail sur plusieurs lignes." + "value": "Systemets accentfarve" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يعرض عناوين مساحات العمل الطويلة كاملةً على عدة أسطر." + "value": "System-Akzentfarbe" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Muestra completos los títulos largos de los espacios de trabajo en varias líneas." + "value": "System Accent Color" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "較長的工作區標題會換行完整顯示。" + "value": "Color de acento del sistema" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "较长的工作区标题会换行完整显示。" + "value": "Couleur d’accentuation du système" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "긴 워크스페이스 제목을 줄바꿈하여 모두 표시합니다." + "value": "Colore di evidenziazione di sistema" } }, "ja": { "stringUnit": { "state": "translated", - "value": "長いワークスペースタイトルを省略せずに複数行で表示します。" + "value": "システムのアクセントカラー" } - } - } - }, - "settings.automation.amp.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Shows Amp status and notifications in the sidebar." + "value": "시스템 강조 색상" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Zeigt den Status und die Benachrichtigungen von Amp in der Seitenleiste an." + "value": "Systemets aksentfarge" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Affiche l’état et les notifications d’Amp dans la barre latérale." + "value": "Systemowy kolor akcentu" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "يعرض حالة Amp وإشعاراته في الشريط الجانبي." + "value": "Cor de destaque do sistema" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Muestra el estado y las notificaciones de Amp en la barra lateral." + "value": "Системный цвет акцента" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "在側邊欄中顯示 Amp 的狀態與通知。" + "value": "สีเน้นของระบบ" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "在侧边栏中显示 Amp 的状态和通知。" + "value": "Sistem Vurgu Rengi" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "사이드바에 Amp 상태와 알림을 표시합니다." + "value": "Системний колір акценту" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "サイドバーにAmpのステータスと通知を表示します。" + "value": "系统强调色" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "系統強調色" } } } }, - "settings.automation.autoNamingAgent.subtitle": { - "extractionState": "manual", + "settings.search.alias.setting.app.accent-color": { "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Automatic uses each session's own agent. Other supported agents need their command-line tool on the PATH." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue لون التمييز أزرق النظام" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "„Automatisch“ verwendet den Agenten der jeweiligen Sitzung. Andere unterstützte Agenten benötigen ihr Befehlszeilentool im PATH." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue boja naglaska plava sistem" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "« Automatique » utilise l’agent propre à chaque session. Les autres agents pris en charge nécessitent que leur outil en ligne de commande soit dans le PATH." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue accentfarve blå system" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يستخدم خيار «تلقائي» الوكيل الخاص بكل جلسة. يحتاج الوكلاء المدعومون الآخرون إلى وجود أداة سطر الأوامر الخاصة بهم في PATH." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue Akzentfarbe blau System" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "«Automático» usa el agente de cada sesión. Los demás agentes compatibles necesitan su herramienta de línea de comandos en el PATH." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "「自動」會使用各工作階段本身的代理。若要使用其他支援的代理,其命令列工具必須位於 PATH 中。" + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue color de acento azul sistema" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "“自动”会使用各会话自身的代理。要使用其他受支持的代理,其命令行工具必须位于 PATH 中。" + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue couleur d’accentuation bleu système" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "‘자동’은 세션마다 해당 세션의 에이전트를 사용합니다. 지원되는 다른 에이전트를 사용하려면 해당 명령줄 도구가 PATH에 있어야 합니다." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue colore di evidenziazione blu sistema" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「自動」では、各セッションのエージェントを使用します。ほかの対応エージェントを使うには、そのコマンドラインツールが PATH に含まれている必要があります。" + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue アクセントカラー 青 システム" } - } - } - }, - "settings.automation.claudeCode.subtitle": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Shows Claude Code status and notifications in the sidebar." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 강조 색상 파란색 시스템" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Zeigt den Status und die Benachrichtigungen von Claude Code in der Seitenleiste an." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue aksentfarge blå system" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Affiche l’état et les notifications de Claude Code dans la barre latérale." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue kolor akcentu niebieski systemowy" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "يعرض حالة Claude Code وإشعاراته في الشريط الجانبي." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue cor de destaque azul sistema" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Muestra el estado y las notificaciones de Claude Code en la barra lateral." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue цвет акцента синий системный" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "在側邊欄中顯示 Claude Code 的狀態與通知。" + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue สีเน้น สีน้ำเงิน ระบบ" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "在侧边栏中显示 Claude Code 的状态和通知。" + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue vurgu rengi mavi sistem" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "사이드바에 Claude Code 상태와 알림을 표시합니다." + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue колір акценту синій системний" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "サイドバーにClaude Codeのステータスと通知を表示します。" + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 强调色 蓝色 系统" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "app.accentColor accent color highlight tint blue purple system accent macOS accent cmux blue 強調色 藍色 系統" } } } }, - "settings.automation.codex.subtitle": { + "command.shortcutKeymap.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows Codex status and notifications in the sidebar." + "value": "Base Keymap: %@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt den Status und die Benachrichtigungen von Codex in der Seitenleiste an." + "value": "مخطط المفاتيح الأساسي: %@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Affiche l’état et les notifications de Codex dans la barre latérale." + "value": "Basis-Tastaturbelegung: %@" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعرض حالة Codex وإشعاراته في الشريط الجانبي." + "value": "Mapa de teclas base: %@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Muestra el estado y las notificaciones de Codex en la barra lateral." + "value": "Disposition de base : %@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在側邊欄中顯示 Codex 的狀態與通知。" + "value": "ベースキーマップ: %@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在侧边栏中显示 Codex 的状态和通知。" + "value": "기본 키맵: %@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사이드바에 Codex 상태와 알림을 표시합니다." + "value": "基础键位方案:%@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サイドバーにCodexのステータスと通知を表示します。" + "value": "基礎按鍵配置:%@" } } } }, - "settings.automation.cursor.subtitle": { + "settings.shortcuts.baseKeymap": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows Cursor status and notifications in the sidebar." + "value": "Base Keymap" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt den Status und die Benachrichtigungen von Cursor in der Seitenleiste an." + "value": "مخطط المفاتيح الأساسي" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Affiche l’état et les notifications de Cursor dans la barre latérale." + "value": "Basis-Tastaturbelegung" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعرض حالة Cursor وإشعاراته في الشريط الجانبي." + "value": "Mapa de teclas base" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Muestra el estado y las notificaciones de Cursor en la barra lateral." + "value": "Disposition de base" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在側邊欄中顯示 Cursor 的狀態與通知。" + "value": "ベースキーマップ" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在侧边栏中显示 Cursor 的状态和通知。" + "value": "기본 키맵" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사이드바에 Cursor 상태와 알림을 표시합니다." + "value": "基础键位方案" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サイドバーにCursorのステータスと通知を表示します。" + "value": "基礎按鍵配置" } } } }, - "settings.automation.gemini.subtitle": { + "settings.shortcuts.baseKeymap.conflictHint": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows Gemini CLI status and notifications in the sidebar." + "value": "Change or turn off the macOS shortcut in System Settings > Keyboard > Keyboard Shortcuts." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt den Status und die Benachrichtigungen von Gemini CLI in der Seitenleiste an." + "value": "غيّر اختصار macOS أو أوقفه في إعدادات النظام > لوحة المفاتيح > اختصارات لوحة المفاتيح." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Affiche l’état et les notifications de Gemini CLI dans la barre latérale." + "value": "Ändern oder deaktivieren Sie das macOS-Tastaturkürzel unter Systemeinstellungen > Tastatur > Tastaturkurzbefehle." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعرض حالة Gemini CLI وإشعاراته في الشريط الجانبي." + "value": "Cambia o desactiva el atajo de macOS en Ajustes del Sistema > Teclado > Atajos de teclado." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Muestra el estado y las notificaciones de Gemini CLI en la barra lateral." + "value": "Modifiez ou désactivez le raccourci macOS dans Réglages Système > Clavier > Raccourcis clavier." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在側邊欄中顯示 Gemini CLI 的狀態與通知。" + "value": "システム設定 > キーボード > キーボードショートカットで macOS のショートカットを変更するかオフにしてください。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在侧边栏中显示 Gemini CLI 的状态和通知。" + "value": "시스템 설정 > 키보드 > 키보드 단축키에서 macOS 단축키를 변경하거나 끄세요." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사이드바에 Gemini CLI 상태와 알림을 표시합니다." + "value": "请在“系统设置”>“键盘”>“键盘快捷键”中更改或关闭该 macOS 快捷键。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サイドバーにGemini CLIのステータスと通知を表示します。" + "value": "請在「系統設定」>「鍵盤」>「鍵盤快速鍵」中更改或關閉該 macOS 快速鍵。" } } } }, - "settings.automation.kiro.subtitle": { + "settings.shortcuts.baseKeymap.custom": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows Kiro CLI status and notifications in the sidebar, and its tool events in Feed." + "value": "Custom" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt den Status und die Benachrichtigungen von Kiro CLI in der Seitenleiste und seine Tool-Ereignisse im Feed an." + "value": "مخصص" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Affiche l’état et les notifications de Kiro CLI dans la barre latérale, et ses événements d’outils dans le Flux." + "value": "Benutzerdefiniert" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعرض حالة Kiro CLI وإشعاراته في الشريط الجانبي، وأحداث أدواته في Feed." + "value": "Personalizado" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Muestra el estado y las notificaciones de Kiro CLI en la barra lateral, y sus eventos de herramientas en el Feed." + "value": "Personnalisée" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在側邊欄中顯示 Kiro CLI 的狀態與通知,並在 Feed 中顯示其工具事件。" + "value": "カスタム" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在侧边栏中显示 Kiro CLI 的状态和通知,并在 Feed 中显示其工具事件。" + "value": "사용자 지정" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사이드바에 Kiro CLI 상태와 알림을 표시하고, 피드에 해당 도구 이벤트를 표시합니다." + "value": "自定义" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サイドバーにKiro CLIのステータスと通知を、フィードにそのツールイベントを表示します。" + "value": "自訂" } } } }, - "settings.automation.socketMode.subtitle": { + "settings.shortcuts.baseKeymap.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Choose which local processes can control cmux." + "value": "Start from another terminal's shortcuts. Only the differences are written to cmux.json; choose cmux to remove them." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wählen Sie, welche lokalen Prozesse cmux steuern können." + "value": "ابدأ من اختصارات طرفية أخرى. تُكتب الاختلافات فقط في cmux.json؛ اختر cmux لإزالتها." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Choisissez quels processus locaux peuvent contrôler cmux." + "value": "Mit den Tastaturkürzeln eines anderen Terminals beginnen. Nur die Unterschiede werden in cmux.json geschrieben; wählen Sie cmux, um sie zu entfernen." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "اختر العمليات المحلية التي يمكنها التحكم في cmux." + "value": "Parte de los atajos de otro terminal. Solo se escriben las diferencias en cmux.json; elige cmux para eliminarlas." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Elige qué procesos locales pueden controlar cmux." + "value": "Partez des raccourcis d’un autre terminal. Seules les différences sont écrites dans cmux.json ; choisissez cmux pour les supprimer." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "選擇哪些本機程序可以控制 cmux。" + "value": "他のターミナルのショートカットから始めます。差分だけが cmux.json に書き込まれ、cmux を選ぶと削除されます。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "选择哪些本地进程可以控制 cmux。" + "value": "다른 터미널의 단축키에서 시작합니다. 차이점만 cmux.json에 기록되며, cmux를 선택하면 제거됩니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux를 제어할 수 있는 로컬 프로세스를 선택합니다." + "value": "以其他终端的快捷键为起点。只会将差异写入 cmux.json;选择 cmux 即可移除。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux を制御できるローカルプロセスを選択します。" + "value": "以其他終端機的快速鍵為起點。只會將差異寫入 cmux.json;選擇 cmux 即可移除。" } } } }, - "settings.automation.suppressSubagentNotifications.subtitle": { + "shortcut.keymap.preset.cmux": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Lists subagent completions in Feed without sending notifications." + "value": "cmux (Default)" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abgeschlossene Subagenten erscheinen im Feed, ohne dass Benachrichtigungen gesendet werden." + "value": "cmux (الافتراضي)" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Les sous-agents terminés apparaissent dans le Flux, sans notification." + "value": "cmux (Standard)" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يظهر اكتمال مهام الوكلاء الفرعيين في Feed دون إرسال إشعارات." + "value": "cmux (predeterminado)" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Los subagentes finalizados aparecen en el Feed sin enviar notificaciones." + "value": "cmux (par défaut)" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "子代理完成時只會列在 Feed 中,不會傳送通知。" + "value": "cmux(デフォルト)" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "子代理完成时只会列在 Feed 中,不会发送通知。" + "value": "cmux (기본값)" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "하위 에이전트가 완료되면 알림을 보내지 않고 피드에만 표시합니다." + "value": "cmux(默认)" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "サブエージェントが完了しても通知は送らず、フィードにのみ表示します。" + "value": "cmux(預設)" } } } }, - "settings.automation.workspaceAutoNaming.subtitle": { + "shortcut.keymap.preset.iterm2": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Generates workspace and tab titles from agent conversations." + "value": "iTerm2" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Benennt Arbeitsbereiche und Tabs anhand von Agentengesprächen." + "value": "iTerm2" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Nomme les espaces de travail et les onglets d’après les conversations des agents." + "value": "iTerm2" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يسمّي مساحات العمل وعلامات التبويب بناءً على محادثات الوكلاء." + "value": "iTerm2" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Pone nombre a los espacios de trabajo y las pestañas según las conversaciones de los agentes." + "value": "iTerm2" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "根據代理對話產生工作區和標籤頁標題。" + "value": "iTerm2" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "根据代理对话生成工作区和标签页标题。" + "value": "iTerm2" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "에이전트 대화를 바탕으로 작업 공간과 탭 제목을 생성합니다." + "value": "iTerm2" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "エージェントの会話からワークスペースとタブのタイトルを生成します。" + "value": "iTerm2" } } } }, - "settings.betaFeatures.cloudMachines.subtitle": { + "shortcut.keymap.preset.terminal": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Adds Cloud Machines to the right sidebar, Settings, the command palette, and the new workspace menu. Cloud Machines also require a remote rollout; with this off, the Cloud tunnel and fleet polling stay off." + "value": "Terminal.app" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fügt Cloud-Maschinen zur rechten Seitenleiste, zu den Einstellungen, zur Befehlspalette und zum Menü für neue Arbeitsbereiche hinzu. Cloud-Maschinen erfordern außerdem ein Remote-Rollout; solange diese Option deaktiviert ist, bleiben Cloud-Tunnel und Flottenabfrage aus." + "value": "Terminal.app" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Ajoute les machines cloud à la barre latérale droite, aux Réglages, à la palette de commandes et au menu de nouvel espace de travail. Les machines cloud nécessitent aussi un déploiement à distance ; si cette option est désactivée, le tunnel Cloud et l’interrogation de la flotte restent arrêtés." + "value": "Terminal.app" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يضيف الأجهزة السحابية إلى الشريط الجانبي الأيمن والإعدادات ولوحة الأوامر وقائمة مساحة العمل الجديدة. وتتطلب الأجهزة السحابية أيضًا طرحًا عن بُعد؛ وعند إيقاف هذا الخيار يظل نفق Cloud واستطلاع الأسطول متوقفين." + "value": "Terminal.app" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Añade las máquinas en la nube a la barra lateral derecha, a Ajustes, a la paleta de comandos y al menú de nuevo espacio de trabajo. Las máquinas en la nube también requieren un despliegue remoto; con esta opción desactivada, el túnel de Cloud y el sondeo de la flota permanecen desactivados." + "value": "Terminal.app" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在右側邊欄、設定、命令面板和新增工作區選單中加入雲端機器。雲端機器也需要遠端推出才能使用;關閉此選項時,Cloud 通道和機群輪詢都會保持停用。" + "value": "Terminal.app" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在右侧边栏、设置、命令面板和新建工作区菜单中添加云主机。云主机还需要远程推出才能使用;关闭此选项时,Cloud 隧道和机群轮询都会保持停用。" + "value": "Terminal.app" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "오른쪽 사이드바, 설정, 명령어 팔레트, 새 작업 공간 메뉴에 클라우드 머신을 추가합니다. 클라우드 머신은 원격 출시도 필요하며, 이 옵션이 꺼져 있으면 Cloud 터널과 플릿 폴링도 꺼진 상태로 유지됩니다." + "value": "Terminal.app" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "右サイドバー、設定、コマンドパレット、新規ワークスペースメニューにクラウドマシンを追加します。クラウドマシンにはリモートでの提供開始も必要です。この設定がオフの間は、Cloud トンネルとフリートのポーリングも停止したままです。" + "value": "Terminal.app" } } } }, - "settings.betaFeatures.customSidebars.subtitle": { + "shortcut.keymap.preset.tmux": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Adds sidebars from ~/.config/cmux/sidebars to the sidebar picker." + "value": "tmux-style (Ctrl-B Prefix)" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fügt Seitenleisten aus ~/.config/cmux/sidebars zur Seitenleistenauswahl hinzu." + "value": "نمط tmux (البادئة Ctrl-B)" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Ajoute les barres latérales de ~/.config/cmux/sidebars au sélecteur de barre latérale." + "value": "tmux-Stil (Ctrl-B-Präfix)" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يضيف الأشرطة الجانبية من ~/.config/cmux/sidebars إلى منتقي الشريط الجانبي." + "value": "Estilo tmux (prefijo Ctrl-B)" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Añade las barras laterales de ~/.config/cmux/sidebars al selector de barra lateral." + "value": "Style tmux (préfixe Ctrl-B)" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在側邊欄選取器中加入 ~/.config/cmux/sidebars 裡的側邊欄。" + "value": "tmux 風(Ctrl-B プレフィックス)" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在侧边栏选择器中添加 ~/.config/cmux/sidebars 里的侧边栏。" + "value": "tmux 스타일 (Ctrl-B 접두사)" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "~/.config/cmux/sidebars의 사이드바를 사이드바 선택기에 추가합니다." + "value": "tmux 风格(Ctrl-B 前缀)" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "~/.config/cmux/sidebars のサイドバーをサイドバーピッカーに追加します。" + "value": "tmux 風格(Ctrl-B 前綴)" } } } }, - "settings.betaFeatures.extensions.subtitle": { + "shortcut.keymap.summary.change": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Adds the extensions button and lets cmux install and run sidebar extensions." + "value": "%1$@: %2$@ → %3$@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fügt die Taste „Erweiterungen“ hinzu und erlaubt cmux, Seitenleisten-Erweiterungen zu installieren und auszuführen." + "value": "%1$@: %2$@ → %3$@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Ajoute le bouton des extensions et permet à cmux d’installer et d’exécuter des extensions de barre latérale." + "value": "%1$@: %2$@ → %3$@" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يضيف زر الامتدادات ويتيح لـ cmux تثبيت امتدادات الشريط الجانبي وتشغيلها." + "value": "%1$@: %2$@ → %3$@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Añade el botón de extensiones y permite que cmux instale y ejecute extensiones de barra lateral." + "value": "%1$@: %2$@ → %3$@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "加入擴充功能按鈕,並讓 cmux 可安裝及執行側邊欄擴充功能。" + "value": "%1$@: %2$@ → %3$@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "添加扩展按钮,并允许 cmux 安装和运行侧边栏扩展。" + "value": "%1$@: %2$@ → %3$@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "확장 기능 버튼을 추가하고 cmux가 사이드바 확장 기능을 설치하고 실행할 수 있게 합니다." + "value": "%1$@: %2$@ → %3$@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "エクステンションボタンを追加し、cmuxでサイドバーエクステンションをインストールして実行できるようにします。" + "value": "%1$@: %2$@ → %3$@" } } } }, - "settings.betaFeatures.feed.subtitle": { + "shortcut.keymap.summary.conflict": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Adds Feed to the right sidebar for answering agent requests." + "value": "%1$@ is also a macOS shortcut (%2$@). macOS may handle it before cmux." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fügt der rechten Seitenleiste den Feed zum Beantworten von Agentenanfragen hinzu." + "value": "%1$@ هو أيضًا اختصار في macOS (%2$@). قد يعالجه macOS قبل cmux." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Ajoute le Flux à la barre latérale droite pour répondre aux demandes des agents." + "value": "%1$@ ist auch ein macOS-Tastaturkürzel (%2$@). macOS verarbeitet es möglicherweise vor cmux." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يضيف Feed إلى الشريط الجانبي الأيمن للرد على طلبات الوكلاء." + "value": "%1$@ también es un atajo de macOS (%2$@). macOS puede procesarlo antes que cmux." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Añade el Feed a la barra lateral derecha para responder a las solicitudes de los agentes." + "value": "%1$@ est aussi un raccourci macOS (%2$@). macOS peut le traiter avant cmux." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在右側邊欄加入 Feed,用於回覆代理程式的請求。" + "value": "%1$@ は macOS のショートカット(%2$@)でもあります。cmux より先に macOS が処理する場合があります。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在右侧边栏添加 Feed,用于回复代理请求。" + "value": "%1$@은(는) macOS 단축키(%2$@)이기도 합니다. macOS가 cmux보다 먼저 처리할 수 있습니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "오른쪽 사이드바에 피드를 추가해 에이전트 요청에 응답할 수 있습니다." + "value": "%1$@ 也是 macOS 快捷键(%2$@)。macOS 可能会先于 cmux 处理它。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "右サイドバーにフィードを追加し、エージェントからのリクエストに応答できるようにします。" + "value": "%1$@ 也是 macOS 快速鍵(%2$@)。macOS 可能會先於 cmux 處理它。" } } } }, - "settings.betaFeatures.remoteTmux.subtitle": { + "shortcut.keymap.summary.kept": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows tmux sessions on remote hosts as workspaces in the sidebar. The sessions keep running after cmux quits." + "value": "Kept your own shortcut for %@." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt tmux-Sitzungen auf Remote-Hosts als Arbeitsbereiche in der Seitenleiste an. Die Sitzungen laufen auch nach dem Beenden von cmux weiter." + "value": "تم الاحتفاظ باختصارك الخاص لـ %@." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Affiche les sessions tmux des hôtes distants comme des espaces de travail dans la barre latérale. Les sessions continuent de s’exécuter après la fermeture de cmux." + "value": "Ihr eigenes Tastaturkürzel für %@ wurde beibehalten." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعرض جلسات tmux على المضيفين البعيدين كمساحات عمل في الشريط الجانبي. وتستمر الجلسات في العمل حتى بعد إنهاء cmux." + "value": "Se conservó tu propio atajo para %@." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Muestra las sesiones de tmux de hosts remotos como espacios de trabajo en la barra lateral. Las sesiones siguen ejecutándose al salir de cmux." + "value": "Votre propre raccourci pour %@ a été conservé." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在側邊欄中將遠端主機上的 tmux 工作階段顯示為工作區。結束 cmux 後,這些工作階段仍會繼續執行。" + "value": "%@ に設定したショートカットはそのまま残しました。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在侧边栏中将远程主机上的 tmux 会话显示为工作区。退出 cmux 后,这些会话仍会继续运行。" + "value": "%@에 대한 사용자 단축키를 유지했습니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "원격 호스트의 tmux 세션을 사이드바에 작업 공간으로 표시합니다. cmux를 종료해도 세션은 계속 실행됩니다." + "value": "已保留你为“%@”设置的快捷键。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "リモートホストの tmux セッションをサイドバーにワークスペースとして表示します。cmux を終了してもセッションは動作し続けます。" + "value": "已保留您為「%@」設定的快速鍵。" } } } }, - "settings.betaFeatures.workspaceTodoControls.subtitle": { + "shortcut.keymap.summary.none": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows Add Checklist Item and status controls on workspaces. A remote rollout can turn them on even while this is off." + "value": "No shortcuts changed." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt „Checklisten-Eintrag hinzufügen“ und Statussteuerelemente bei Arbeitsbereichen an. Ein Remote-Rollout kann sie auch dann aktivieren, wenn diese Option deaktiviert ist." + "value": "لم يتم تغيير أي اختصارات." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Affiche « Ajouter un élément à la liste de contrôle » et les commandes d’état sur les espaces de travail. Un déploiement à distance peut les activer même si cette option est désactivée." + "value": "Keine Tastaturkürzel geändert." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعرض «إضافة عنصر قائمة تحقق» وعناصر التحكم في الحالة على مساحات العمل. ويمكن لطرح عن بُعد تفعيلها حتى عند إيقاف هذا الخيار." + "value": "No se cambió ningún atajo." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Muestra «Añadir elemento a la lista de verificación» y los controles de estado en los espacios de trabajo. Un despliegue remoto puede activarlos aunque esta opción esté desactivada." + "value": "Aucun raccourci modifié." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在工作區上顯示「新增檢查清單項目」和狀態控制項。即使關閉此選項,遠端推出仍可能啟用這些控制項。" + "value": "変更されたショートカットはありません。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在工作区上显示“添加清单项”和状态控件。即使关闭此选项,远程推出仍可能启用这些控件。" + "value": "변경된 단축키가 없습니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "작업 공간에 ‘체크리스트 항목 추가’ 및 상태 컨트롤을 표시합니다. 이 옵션이 꺼져 있어도 원격 출시로 이 컨트롤이 켜질 수 있습니다." + "value": "未更改任何快捷键。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ワークスペースに「チェックリスト項目を追加」とステータスコントロールを表示します。この設定がオフでも、リモートでの提供開始によって有効になることがあります。" + "value": "未變更任何快速鍵。" } } } }, - "settings.betaFeatures.workspaceTodosChecklistStyle.subtitle": { + "shortcut.macos.accessibilityShortcuts": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Choose whether clicking a workspace checklist opens a popover or expands it under the row." + "value": "Show Accessibility Shortcuts" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wählen Sie, ob sich beim Klicken auf die Checkliste eines Arbeitsbereichs ein Popover öffnet oder die Checkliste unter der Zeile aufklappt." + "value": "إظهار اختصارات تسهيلات الاستخدام" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Choisissez si un clic sur la liste de contrôle d’un espace de travail ouvre une fenêtre contextuelle ou la déplie sous la ligne." + "value": "Kurzbefehle für Bedienungshilfen anzeigen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "اختر ما إذا كان النقر على قائمة التحقق الخاصة بمساحة العمل يفتح نافذة منبثقة أو يوسّعها أسفل الصف." + "value": "Mostrar funciones rápidas de accesibilidad" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Elige si al hacer clic en la lista de verificación de un espacio de trabajo se abre un popover o se despliega bajo la fila." + "value": "Afficher les raccourcis d’accessibilité" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "選擇按一下工作區檢查清單時,要在彈出視窗中開啟,還是在該列下方展開。" + "value": "アクセシビリティのショートカットを表示" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "选择点按工作区清单时,是在浮层中打开,还是在该行下方展开。" + "value": "손쉬운 사용 단축키 보기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "작업 공간 체크리스트를 클릭했을 때 팝오버로 열지, 행 아래에 펼칠지 선택합니다." + "value": "显示辅助功能快捷键" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ワークスペースのチェックリストをクリックしたときに、ポップオーバーで開くか、行の下に展開するかを選択します。" + "value": "顯示輔助使用快速鍵" } } } }, - "settings.browser.enabled.subtitle": { + "shortcut.macos.appSwitcher": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Opens browser tabs and links from terminals in the cmux browser." + "value": "Switch apps" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Browser-Tabs und Links aus Terminals werden im cmux-Browser geöffnet." + "value": "التبديل بين التطبيقات" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Ouvre les onglets de navigateur et les liens des terminaux dans le navigateur cmux." + "value": "Zwischen Apps wechseln" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يفتح علامات تبويب المتصفح والروابط من الطرفيات في متصفح cmux." + "value": "Cambiar de app" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Abre pestañas del navegador y enlaces de las terminales en el navegador de cmux." + "value": "Passer d’une app à l’autre" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "瀏覽器標籤頁和從終端機開啟的連結都會在 cmux 瀏覽器中開啟。" + "value": "アプリを切り替える" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "浏览器标签页和从终端打开的链接都会在 cmux 浏览器中打开。" + "value": "앱 전환" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "브라우저 탭과 터미널에서 연 링크를 cmux 브라우저에서 엽니다." + "value": "切换 App" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ブラウザタブとターミナルから開いたリンクをcmuxブラウザで開きます。" + "value": "切換 App" } } } }, - "settings.browser.hiddenWebViewDiscard.subtitle": { + "shortcut.macos.appSwitcherReverse": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Frees memory from browser tabs hidden longer than the delay. They reload when shown again." + "value": "Switch apps backward" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Browser-Tabs, die länger als die festgelegte Zeit ausgeblendet sind, geben ihren Speicher frei und werden beim erneuten Anzeigen neu geladen." + "value": "التبديل بين التطبيقات للخلف" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Libère la mémoire des onglets de navigateur masqués depuis plus longtemps que le délai défini. Ils se rechargent lorsqu’ils réapparaissent." + "value": "Rückwärts zwischen Apps wechseln" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يحرر ذاكرة علامات تبويب المتصفح المخفية لمدة تتجاوز المهلة المحددة، ويُعاد تحميلها عند عرضها مجددًا." + "value": "Cambiar de app hacia atrás" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Libera la memoria de las pestañas del navegador que llevan ocultas más tiempo del indicado. Se vuelven a cargar al mostrarse de nuevo." + "value": "Passer d’une app à l’autre en sens inverse" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "瀏覽器標籤頁隱藏超過延遲時間後,會釋放其記憶體。再次顯示時會重新載入。" + "value": "アプリを逆順に切り替える" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "浏览器标签页隐藏超过延迟时间后,会释放其内存。再次显示时会重新加载。" + "value": "앱 역방향 전환" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "브라우저 탭이 지연 시간보다 오래 숨겨져 있으면 메모리를 해제합니다. 탭을 다시 표시하면 새로 고칩니다." + "value": "反向切换 App" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "非表示の時間が遅延時間を超えたブラウザタブのメモリを解放します。タブは再び表示したときに再読み込みされます。" + "value": "反向切換 App" } } } }, - "settings.browser.theme.subtitle": { + "shortcut.macos.applicationWindows": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Choose light or dark pages for sites that support both. System matches the app appearance." + "value": "Show application windows" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wählen Sie helle oder dunkle Seiten für Websites, die beides unterstützen. „System“ folgt dem Erscheinungsbild der App." + "value": "إظهار نوافذ التطبيق" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Choisissez des pages claires ou sombres pour les sites qui prennent en charge les deux. « Système » suit l’apparence de l’app." + "value": "Programmfenster anzeigen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "اختر الصفحات الفاتحة أو الداكنة للمواقع التي تدعم الوضعين. يتبع خيار «النظام» مظهر التطبيق." + "value": "Mostrar ventanas de la aplicación" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Elige páginas claras u oscuras para los sitios compatibles con ambos modos. «Sistema» sigue el aspecto de la app." + "value": "Afficher les fenêtres d’application" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "網站同時支援淺色與深色時,選擇要使用淺色或深色頁面。「系統」會跟隨 App 的外觀。" + "value": "アプリケーションウインドウを表示" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "网站同时支持浅色和深色时,选择使用浅色还是深色页面。“系统”会跟随应用外观。" + "value": "응용 프로그램 윈도우 보기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "라이트와 다크를 모두 지원하는 사이트에서 표시할 페이지 모드를 선택합니다. ‘시스템’은 앱의 외관 설정을 따릅니다." + "value": "显示应用程序窗口" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ライトとダークの両方に対応したサイトで、どちらのページを表示するかを選択します。「システム」はアプリの外観に合わせます。" + "value": "顯示應用程式視窗" } } } }, - "settings.customSidebars.enabled.subtitle": { + "shortcut.macos.characterViewer": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Adds sidebars from ~/.config/cmux/sidebars to the sidebar picker." + "value": "Show Emoji & Symbols" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fügt Seitenleisten aus ~/.config/cmux/sidebars zur Seitenleistenauswahl hinzu." + "value": "إظهار الرموز التعبيرية والرموز" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Ajoute les barres latérales de ~/.config/cmux/sidebars au sélecteur de barre latérale." + "value": "Emoji & Symbole anzeigen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يضيف الأشرطة الجانبية من ~/.config/cmux/sidebars إلى منتقي الشريط الجانبي." + "value": "Mostrar emojis y símbolos" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Añade las barras laterales de ~/.config/cmux/sidebars al selector de barra lateral." + "value": "Afficher Emoji et symboles" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在側邊欄選取器中加入 ~/.config/cmux/sidebars 裡的側邊欄。" + "value": "絵文字と記号を表示" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在侧边栏选择器中添加 ~/.config/cmux/sidebars 里的侧边栏。" + "value": "이모티콘 및 기호 보기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "~/.config/cmux/sidebars의 사이드바를 사이드바 선택기에 추가합니다." + "value": "显示表情与符号" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "~/.config/cmux/sidebars のサイドバーをサイドバーピッカーに追加します。" + "value": "顯示表情符號與符號" } } } }, - "settings.customSidebars.renderer.subtitle": { + "shortcut.macos.finderSearch": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Isolated process protects cmux from a faulty sidebar but accepts clicks only. In-app also accepts hover, focus, and typing." + "value": "Show Finder search window" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "„Isolierter Prozess“ schützt cmux vor einer fehlerhaften Seitenleiste, unterstützt aber nur Klicks. „In-App“ unterstützt zusätzlich Hover, Fokus und Texteingabe." + "value": "إظهار نافذة البحث في Finder" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "« Processus isolé » protège cmux d’une barre latérale défectueuse, mais n’accepte que les clics. « Dans l’application » accepte aussi le survol, le focus et la saisie." + "value": "Finder-Suchfenster anzeigen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يحمي خيار «عملية معزولة» cmux من الشريط الجانبي المعيب، لكنه لا يقبل سوى النقرات. أما خيار «داخل التطبيق» فيقبل أيضًا تمرير المؤشر والتركيز والكتابة." + "value": "Mostrar ventana de búsqueda del Finder" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "«Proceso aislado» protege cmux de una barra lateral defectuosa, pero solo admite clics. «En la aplicación» también admite pasar el puntero por encima, enfocar y escribir." + "value": "Afficher la fenêtre de recherche du Finder" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "「隔離程序」可保護 cmux 不受有問題的側邊欄影響,但只接受點擊。「應用程式內」還接受游標停留、聚焦和輸入。" + "value": "Finder の検索ウインドウを表示" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "“隔离进程”可保护 cmux 不受有问题的侧边栏影响,但只接受点击。“应用内”还接受悬停、聚焦和输入。" + "value": "Finder 검색 윈도우 보기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "‘격리된 프로세스’는 결함이 있는 사이드바로부터 cmux를 보호하지만 클릭만 허용합니다. ‘앱 내부’는 포인터 올려놓기, 포커스, 키보드 입력도 허용합니다." + "value": "显示“访达”搜索窗口" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "「分離プロセス」は問題のあるサイドバーから cmux を保護しますが、クリックしか受け付けません。「アプリ内」では、ホバー、フォーカス、入力も受け付けます。" + "value": "顯示 Finder 搜尋視窗" } } } }, - "settings.globalHotkey.enable.subtitle": { + "shortcut.macos.focusDock": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Pressing the shortcut in any app shows or hides all cmux windows." + "value": "Move focus to the Dock" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Das Tastaturkürzel blendet in jeder App alle cmux-Fenster ein oder aus." + "value": "نقل التركيز إلى Dock" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le raccourci affiche ou masque toutes les fenêtres cmux, quelle que soit l’app active." + "value": "Fokus auf das Dock bewegen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يُظهر الاختصار جميع نوافذ cmux أو يخفيها من أي تطبيق." + "value": "Mover el foco al Dock" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El atajo muestra u oculta todas las ventanas de cmux desde cualquier app." + "value": "Placer le curseur dans le Dock" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在任何 App 中按下快速鍵,即可顯示或隱藏所有 cmux 視窗。" + "value": "Dock にフォーカスを移動" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在任意 App 中按下快捷键,即可显示或隐藏所有 cmux 窗口。" + "value": "Dock으로 포커스 이동" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "어느 앱에서든 단축키를 눌러 모든 cmux 윈도우를 표시하거나 숨길 수 있습니다." + "value": "将焦点移到程序坞" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "どのアプリを使用中でも、ショートカットを押すと cmux のすべてのウィンドウを表示または非表示にできます。" + "value": "將焦點移至 Dock" } } } }, - "settings.mobile.artifactFolderAccess.subtitle": { + "shortcut.macos.focusMenuBar": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Choose how much of a folder iPhone and iPad can browse. One Level shows only the items directly inside it." + "value": "Move focus to the menu bar" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wählen Sie, wie tief iPhone und iPad einen Ordner durchsuchen können. „Eine Ebene“ zeigt nur die Objekte direkt darin." + "value": "نقل التركيز إلى شريط القائمة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Choisissez jusqu’où l’iPhone et l’iPad peuvent parcourir un dossier. « Un niveau » n’affiche que les éléments qui s’y trouvent directement." + "value": "Fokus auf die Menüleiste bewegen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "اختر مدى عمق تصفح iPhone وiPad داخل المجلد. يعرض خيار «مستوى واحد» العناصر الموجودة مباشرةً داخله فقط." + "value": "Mover el foco a la barra de menús" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Elige hasta qué nivel pueden explorar una carpeta el iPhone y el iPad. «Un nivel» solo muestra los elementos que contiene directamente." + "value": "Placer le curseur dans la barre des menus" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "選擇 iPhone 和 iPad 可瀏覽資料夾的範圍。「單一層級」只顯示該資料夾第一層的項目。" + "value": "メニューバーにフォーカスを移動" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "选择 iPhone 和 iPad 可浏览文件夹的范围。“一层”只显示该文件夹第一层的项目。" + "value": "메뉴 막대로 포커스 이동" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iPhone 및 iPad에서 폴더를 어디까지 탐색할 수 있는지 선택합니다. ‘한 단계’는 폴더 바로 아래에 있는 항목만 표시합니다." + "value": "将焦点移到菜单栏" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iPhone と iPad からフォルダをどこまで参照できるかを選択します。「1 階層」では、そのフォルダの直下にある項目のみが表示されます。" + "value": "將焦點移至選單列" } } } }, - "settings.mobile.iOSPairingHost.subtitle": { + "shortcut.macos.helpMenuSearch": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Lets iPhone and iPad pair with and connect to this Mac." + "value": "Show Help menu" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "iPhone und iPad können sich mit diesem Mac koppeln und verbinden." + "value": "إظهار قائمة التعليمات" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "L’iPhone et l’iPad peuvent se jumeler avec ce Mac et s’y connecter." + "value": "Menü „Hilfe“ anzeigen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يمكن لـ iPhone وiPad الاقتران بجهاز Mac هذا والاتصال به." + "value": "Mostrar el menú Ayuda" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El iPhone y el iPad pueden emparejarse con este Mac y conectarse a él." + "value": "Afficher le menu Aide" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "允許 iPhone 和 iPad 與此 Mac 配對及連線。" + "value": "「ヘルプ」メニューを表示" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许 iPhone 和 iPad 与这台 Mac 配对并连接。" + "value": "도움말 메뉴 보기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iPhone과 iPad가 이 Mac과 페어링하고 연결할 수 있게 합니다." + "value": "显示“帮助”菜单" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iPhone と iPad がこの Mac とペアリングして接続できるようにします。" + "value": "顯示「輔助說明」選單" } } } }, - "settings.mobile.phonePush.forwarding.subtitle": { + "shortcut.macos.lockScreen": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sends agent notifications from this Mac to cmux on iPhone and iPad." + "value": "Lock Screen" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Leitet Agentenbenachrichtigungen von diesem Mac an cmux auf iPhone und iPad weiter." + "value": "قفل الشاشة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Transfère les notifications des agents de ce Mac vers cmux sur iPhone et iPad." + "value": "Bildschirm sperren" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يوجّه إشعارات الوكلاء من جهاز Mac هذا إلى cmux على iPhone وiPad." + "value": "Bloquear pantalla" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Reenvía las notificaciones de agentes de este Mac a cmux en iPhone y iPad." + "value": "Verrouiller l’écran" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "將此 Mac 上的代理程式通知傳送至 iPhone 和 iPad 上的 cmux。" + "value": "画面をロック" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "将这台 Mac 上的代理通知发送到 iPhone 和 iPad 上的 cmux。" + "value": "화면 잠금" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 Mac의 에이전트 알림을 iPhone 및 iPad의 cmux로 보냅니다." + "value": "锁定屏幕" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "この Mac からエージェントの通知を iPhone と iPad の cmux に送信します。" + "value": "鎖定螢幕" } } } }, - "settings.shortcuts.showModifierHoldHints.subtitle": { + "shortcut.macos.logOut": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Holding Command or Control shows shortcut hints." + "value": "Log Out" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Hinweise zu Tastaturkürzeln erscheinen, solange die Befehlstaste oder die Control-Taste gedrückt ist." + "value": "تسجيل الخروج" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Les indices de raccourcis apparaissent tant que la touche Commande ou Contrôle est maintenue enfoncée." + "value": "Abmelden" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تظهر تلميحات الاختصارات عند الضغط مع الاستمرار على Command أو Control." + "value": "Cerrar sesión" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Las sugerencias de atajos aparecen mientras se mantiene presionada la tecla Comando o Control." + "value": "Fermer la session" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "按住 Command 或 Control 鍵時,會顯示快速鍵提示。" + "value": "ログアウト" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "按住 Command 或 Control 键时,会显示快捷键提示。" + "value": "로그아웃" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Command 또는 Control 키를 누르고 있으면 단축키 힌트가 표시됩니다." + "value": "退出登录" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Command キーまたは Control キーを押したままにすると、ショートカットヒントが表示されます。" + "value": "登出" } } } }, - "settings.sidebar.rightMaxWidth.subtitle": { + "shortcut.macos.lookUp": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Lets the Dock in the right sidebar grow up to this width while leaving room for terminals." + "value": "Look up & data detectors" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Das Dock in der rechten Seitenleiste kann bis zu dieser Breite wachsen, lässt aber Platz für Terminals." + "value": "البحث وكاشفات البيانات" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le Dock de la barre latérale droite peut s’élargir jusqu’à cette largeur tout en laissant de la place aux terminaux." + "value": "Nachschlagen & Datenerkennung" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يمكن أن يتسع Dock في الشريط الجانبي الأيمن حتى هذا العرض مع ترك مساحة للطرفيات." + "value": "Consultar y detectores de datos" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El Dock de la barra lateral derecha puede ampliarse hasta este ancho, pero deja espacio para las terminales." + "value": "Recherche et détecteurs de données" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "右側邊欄中的 Dock 最寬可擴展至此寬度,並為終端機保留空間。" + "value": "調べる/データ検出" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "右侧边栏中的 Dock 最宽可扩展到此宽度,同时为终端保留空间。" + "value": "찾아보기 및 데이터 감지기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "오른쪽 사이드바의 Dock은 터미널 공간을 남겨 둔 채 이 너비까지 넓어질 수 있습니다." + "value": "查询与数据检测器" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "右サイドバーの Dock は、ターミナルの領域を残したまま、この幅まで広げられます。" + "value": "查詢與資料偵測器" } } } }, - "settings.terminal.adaptiveDefaultTheme.subtitle": { + "shortcut.macos.missionControl": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Matches terminal colors to the light or dark appearance when no Ghostty theme or colors are set." + "value": "Show Mission Control" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Passt die Terminalfarben an das helle oder dunkle Erscheinungsbild an, wenn in Ghostty kein Theme und keine Farben festgelegt sind." + "value": "إظهار Mission Control" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Si aucun thème ni aucune couleur Ghostty n’est défini, les couleurs du terminal suivent l’apparence claire ou sombre." + "value": "Mission Control anzeigen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "عندما لا تكون هناك سمة أو ألوان محددة في Ghostty، تتوافق ألوان الطرفية مع المظهر الفاتح أو الداكن." + "value": "Mostrar Mission Control" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Si no hay ningún tema ni colores de Ghostty definidos, los colores de la terminal siguen la apariencia clara u oscura." + "value": "Afficher Mission Control" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "未設定 Ghostty 主題或顏色時,終端機顏色會配合淺色或深色外觀。" + "value": "Mission Control を表示" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "未设置 Ghostty 主题或颜色时,终端颜色会随浅色或深色外观变化。" + "value": "Mission Control 보기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ghostty 테마나 색상이 설정되어 있지 않으면 터미널 색상을 라이트 또는 다크 모드에 맞춥니다." + "value": "显示调度中心" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ghostty のテーマや色が設定されていない場合、ターミナルの色をライトまたはダークの外観に合わせます。" + "value": "顯示「指揮中心」" } } } }, - "settings.terminal.agentAutoResume.subtitle": { + "shortcut.macos.nextInputSource": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reopening cmux resumes agent sessions automatically." + "value": "Select the next input source" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Beim erneuten Öffnen von cmux werden Agenten-Sitzungen automatisch fortgesetzt." + "value": "تحديد مصدر الإدخال التالي" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Les sessions d’agent reprennent automatiquement à la réouverture de cmux." + "value": "Nächste Eingabequelle auswählen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تُستأنف جلسات الوكلاء تلقائيًا عند إعادة فتح cmux." + "value": "Seleccionar la siguiente fuente de entrada" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Las sesiones de agentes se reanudan automáticamente al volver a abrir cmux." + "value": "Sélectionner la source de saisie suivante" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "重新開啟 cmux 時,自動繼續先前的代理工作階段。" + "value": "次の入力ソースを選択" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "重新打开 cmux 时,自动恢复之前的代理会话。" + "value": "다음 입력 소스 선택" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux를 다시 열면 에이전트 세션이 자동으로 재개됩니다." + "value": "选择下一个输入法" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux を開き直すと、エージェントのセッションが自動的に再開されます。" + "value": "選取下一個輸入方式" } } } }, - "settings.terminal.agentHibernation.subtitle": { + "shortcut.macos.nextWindow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hibernates idle background agent terminals above the live terminal limit. Even when this is off, cmux may hibernate them under memory pressure." + "value": "Move focus to the next window" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Versetzt inaktive Agenten-Terminals im Hintergrund in den Ruhezustand, sobald das Limit für aktive Terminals überschritten ist. Auch wenn diese Option deaktiviert ist, kann cmux sie bei hoher Speicherauslastung in den Ruhezustand versetzen." + "value": "نقل التركيز إلى النافذة التالية" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Met en hibernation les terminaux d’agent inactifs en arrière-plan au-delà de la limite de terminaux actifs. Même si cette option est désactivée, cmux peut les mettre en hibernation en cas de pression mémoire." + "value": "Fokus auf das nächste Fenster bewegen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يُدخل طرفيات الوكلاء الخاملة في الخلفية في السبات عند تجاوز حد الطرفيات النشطة. وحتى عند إيقاف هذا الخيار، قد يُدخلها cmux في السبات عند ضغط الذاكرة." + "value": "Mover el foco a la siguiente ventana" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Pone en hibernación las terminales de agentes inactivas en segundo plano que superan el límite de terminales activas. Aunque esta opción esté desactivada, cmux puede ponerlas en hibernación si hay presión de memoria." + "value": "Placer le curseur sur la fenêtre suivante" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "作用中終端機超過上限時,閒置的背景代理終端機會進入休眠。即使關閉此選項,cmux 仍可能在記憶體吃緊時讓它們休眠。" + "value": "次のウインドウにフォーカスを移動" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "活动终端超过上限时,空闲的后台代理终端会进入休眠。即使关闭此选项,cmux 仍可能在内存紧张时让它们休眠。" + "value": "다음 윈도우로 포커스 이동" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "활성 터미널 수가 한도를 넘으면 백그라운드에서 유휴 상태인 에이전트 터미널을 최대 절전 모드로 전환합니다. 이 옵션을 꺼도 메모리가 부족하면 cmux가 해당 터미널을 최대 절전 모드로 전환할 수 있습니다." + "value": "将焦点移到下一个窗口" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "実行中のターミナル数が上限を超えると、アイドル状態のバックグラウンドエージェントのターミナルを休止させます。この設定がオフでも、メモリが逼迫している場合は cmux がこれらを休止させることがあります。" + "value": "將焦點移至下一個視窗" } } } }, - "settings.terminal.copyOnSelect.subtitle": { + "shortcut.macos.previousInputSource": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Selecting text in a terminal copies it to the clipboard." + "value": "Select the previous input source" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Im Terminal ausgewählter Text wird in die Zwischenablage kopiert." + "value": "تحديد مصدر الإدخال السابق" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le texte sélectionné dans un terminal est copié dans le presse-papiers." + "value": "Vorherige Eingabequelle auswählen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يُنسخ النص المحدد في الطرفية إلى الحافظة." + "value": "Seleccionar la fuente de entrada anterior" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El texto seleccionado en una terminal se copia al portapapeles." + "value": "Sélectionner la source de saisie précédente" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在終端機中選取文字時,會將文字複製到剪貼簿。" + "value": "前の入力ソースを選択" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在终端中选择文本时,会将文本复制到剪贴板。" + "value": "이전 입력 소스 선택" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "터미널에서 텍스트를 선택하면 클립보드에 복사됩니다." + "value": "选择上一个输入法" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ターミナルでテキストを選択すると、クリップボードにコピーされます。" + "value": "選取上一個輸入方式" } } } }, - "settings.terminal.reflowHardWrapOnCopy.subtitle": { + "shortcut.macos.previousWindow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Copying text also joins line breaks a program printed at the full terminal width and drops a short continuation indent. Soft-wrapped lines always copy as one line." + "value": "Move focus to the previous window" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Beim Kopieren werden auch Zeilenumbrüche zusammengefügt, die ein Programm bei voller Terminalbreite ausgegeben hat, und ein kurzer Fortsetzungseinzug wird entfernt. Weich umbrochene Zeilen werden immer als eine Zeile kopiert." + "value": "نقل التركيز إلى النافذة السابقة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Lors de la copie, les sauts de ligne qu’un programme a insérés à pleine largeur du terminal sont aussi supprimés, ainsi qu’un court retrait de continuation. Les lignes à retour automatique sont toujours copiées sur une seule ligne." + "value": "Fokus auf das vorherige Fenster bewegen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "عند النسخ، تُدمج أيضًا فواصل الأسطر التي طبعها برنامج عند العرض الكامل للطرفية، وتُحذف مسافة البادئة القصيرة للسطر التالي. أما الأسطر الملتفّة تلقائيًا فتُنسخ دائمًا كسطر واحد." + "value": "Mover el foco a la ventana anterior" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Al copiar, también se unen los saltos de línea que un programa imprimió al ancho completo de la terminal y se quita una sangría de continuación corta. Las líneas con ajuste automático siempre se copian como una sola línea." + "value": "Placer le curseur sur la fenêtre précédente" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "複製文字時,也會合併程式在終端機滿寬處輸出的換行,並移除較短的續行縮排。自動換行的行一律會複製為一行。" + "value": "前のウインドウにフォーカスを移動" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "复制文本时,也会合并程序在终端满宽处输出的换行,并移除较短的续行缩进。自动换行的行始终会复制为一行。" + "value": "이전 윈도우로 포커스 이동" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "텍스트를 복사할 때 프로그램이 터미널 전체 너비에서 넣은 줄바꿈도 합치고 짧은 연속 들여쓰기를 제거합니다. 자동 줄바꿈된 줄은 항상 한 줄로 복사됩니다." + "value": "将焦点移到上一个窗口" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "テキストをコピーするとき、プログラムがターミナルの幅いっぱいで出力した改行もつなげ、短い継続インデントを取り除きます。ソフトラップされた行は常に 1 行としてコピーされます。" + "value": "將焦點移至上一個視窗" } } } }, - "settings.terminal.importFromTerminal": { + "shortcut.macos.screenshotScreen": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Import from Another Terminal" + "value": "Save picture of screen as a file" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "別のターミナルから読み込む" + "value": "حفظ صورة الشاشة كملف" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "从其他终端导入" + "value": "Bildschirmfoto als Datei sichern" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Aus anderem Terminal importieren" + "value": "Guardar imagen de la pantalla como archivo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Importer depuis un autre terminal" + "value": "Enregistrer une image de l’écran dans un fichier" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "استيراد من طرفية أخرى" + "value": "画面のピクチャをファイルとして保存" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Importar desde otra terminal" + "value": "화면 사진을 파일로 저장" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "從其他終端機匯入" + "value": "将屏幕图片存储为文件" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "다른 터미널에서 가져오기" + "value": "將螢幕圖片儲存為檔案" } } } }, - "settings.terminal.importFromTerminal.button": { + "shortcut.macos.screenshotScreenToClipboard": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Import…" + "value": "Copy picture of screen to the clipboard" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "読み込む…" + "value": "نسخ صورة الشاشة إلى الحافظة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "导入…" + "value": "Bildschirmfoto in die Zwischenablage kopieren" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Importieren…" + "value": "Copiar imagen de la pantalla en el portapapeles" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Importer…" + "value": "Copier une image de l’écran dans le presse-papiers" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "استيراد…" + "value": "画面のピクチャをクリップボードにコピー" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Importar…" + "value": "화면 사진을 클립보드로 복사" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "匯入…" + "value": "将屏幕图片拷贝到剪贴板" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "가져오기…" + "value": "將螢幕圖片拷貝到剪貼板" } } } }, - "settings.terminal.importFromTerminal.subtitle": { + "shortcut.macos.screenshotSelection": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Bring over your font, colors, cursor and more from iTerm2, Terminal, Alacritty, Kitty, WezTerm or Warp." + "value": "Save picture of selected area as a file" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "iTerm2、ターミナル、Alacritty、Kitty、WezTerm、Warp からフォント、カラー、カーソルなどを引き継ぎます。" + "value": "حفظ صورة المنطقة المحددة كملف" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "从 iTerm2、终端、Alacritty、Kitty、WezTerm 或 Warp 导入字体、颜色、光标等设置。" + "value": "Foto des ausgewählten Bereichs als Datei sichern" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Übernimmt Schrift, Farben, Cursor und mehr aus iTerm2, Terminal, Alacritty, Kitty, WezTerm oder Warp." + "value": "Guardar imagen del área seleccionada como archivo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Reprend la police, les couleurs, le curseur et plus encore depuis iTerm2, Terminal, Alacritty, Kitty, WezTerm ou Warp." + "value": "Enregistrer une image de la zone sélectionnée dans un fichier" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "انقل الخط والألوان والمؤشر وغيرها من iTerm2 أو Terminal أو Alacritty أو Kitty أو WezTerm أو Warp." + "value": "選択部分のピクチャをファイルとして保存" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Trae la fuente, los colores, el cursor y más desde iTerm2, Terminal, Alacritty, Kitty, WezTerm o Warp." + "value": "선택 영역 사진을 파일로 저장" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "從 iTerm2、終端機、Alacritty、Kitty、WezTerm 或 Warp 匯入字體、顏色、游標等設定。" + "value": "将所选区域的图片存储为文件" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iTerm2, 터미널, Alacritty, Kitty, WezTerm, Warp에서 글꼴, 색상, 커서 등을 가져옵니다." + "value": "將所選區域的圖片儲存為檔案" } } } }, - "settings.terminal.memoryGuardrail.subtitle": { + "shortcut.macos.screenshotSelectionToClipboard": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Warns when the processes in one pane use too much memory." + "value": "Copy picture of selected area to the clipboard" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Warnt, wenn die Prozesse in einem Teilfenster zu viel Speicher verbrauchen." + "value": "نسخ صورة المنطقة المحددة إلى الحافظة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Avertit lorsque les processus d’un volet utilisent trop de mémoire." + "value": "Foto des ausgewählten Bereichs in die Zwischenablage kopieren" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "ينبّه عندما تستهلك العمليات في جزء واحد ذاكرة أكثر من اللازم." + "value": "Copiar imagen del área seleccionada en el portapapeles" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Avisa cuando los procesos de un panel usan demasiada memoria." + "value": "Copier une image de la zone sélectionnée dans le presse-papiers" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "單一窗格中的處理程序使用過多記憶體時發出警告。" + "value": "選択部分のピクチャをクリップボードにコピー" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "某个窗格中的进程占用过多内存时发出警告。" + "value": "선택 영역 사진을 클립보드로 복사" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "한 분할 창의 프로세스가 메모리를 너무 많이 사용하면 경고합니다." + "value": "将所选区域的图片拷贝到剪贴板" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "1 つのペインのプロセスがメモリを使いすぎると警告します。" + "value": "將所選區域的圖片拷貝到剪貼板" } } } }, - "settings.terminal.rendererRealization.subtitle": { + "shortcut.macos.screenshotToolbar": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Frees graphics memory from terminals that are out of view. Their processes keep running." + "value": "Screenshot and recording options" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Gibt den Grafikspeicher nicht sichtbarer Terminals frei. Ihre Prozesse laufen weiter." + "value": "خيارات لقطة الشاشة والتسجيل" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Libère la mémoire graphique des terminaux hors de vue. Leurs processus continuent de s’exécuter." + "value": "Bildschirmfoto- und Aufnahmeoptionen" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يحرر ذاكرة الرسومات للطرفيات غير الظاهرة، مع استمرار تشغيل عملياتها." + "value": "Opciones de captura de pantalla y grabación" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Libera la memoria gráfica de las terminales fuera de la vista. Sus procesos siguen ejecutándose." + "value": "Options de capture d’écran et d’enregistrement" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "釋放不在畫面上的終端機所使用的圖形記憶體,其處理程序仍會繼續執行。" + "value": "スクリーンショットと収録のオプション" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "释放不在屏幕上的终端所占用的图形内存,其进程仍会继续运行。" + "value": "스크린샷 및 기록 옵션" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "화면에 보이지 않는 터미널의 그래픽 메모리를 해제합니다. 해당 프로세스는 계속 실행됩니다." + "value": "截屏和录制选项" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "表示されていないターミナルのグラフィックスメモリを解放します。プロセスは動作し続けます。" + "value": "截圖和錄製選項" } } } }, - "settings.terminal.scrollBar.subtitle": { + "shortcut.macos.spaceLeft": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows a scroll bar in terminals, except in full-screen apps." + "value": "Move left a space" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Zeigt in Terminals eine Bildlaufleiste an, außer in Vollbild-Apps." + "value": "الانتقال مساحة واحدة إلى اليسار" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Affiche une barre de défilement dans les terminaux, sauf dans les apps en plein écran." + "value": "Einen Space nach links" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يعرض شريط تمرير في الطرفيات، إلا في التطبيقات بملء الشاشة." + "value": "Ir un espacio a la izquierda" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Muestra una barra de desplazamiento en las terminales, excepto en las apps a pantalla completa." + "value": "Aller un espace à gauche" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在終端機中顯示捲軸(全螢幕 App 除外)。" + "value": "左の操作スペースへ移動" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "在终端中显示滚动条(全屏 App 除外)。" + "value": "왼쪽 스페이스로 이동" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "터미널에 스크롤 바를 표시합니다(전체 화면 앱 제외)." + "value": "向左移动一个空间" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ターミナルにスクロールバーを表示します(フルスクリーンアプリを除く)。" + "value": "向左移動一個空間" } } } }, - "settings.terminal.sessionContentWidth.subtitle": { + "shortcut.macos.spaceRight": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wraps terminal and agent chat content at this width. Narrow panes still use their full width." + "value": "Move right a space" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Terminal- und Agenten-Chat-Inhalte werden bei dieser Breite umbrochen. Schmalere Teilfenster nutzen weiterhin ihre volle Breite." + "value": "الانتقال مساحة واحدة إلى اليمين" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le contenu du terminal et du chat de l’agent revient à la ligne à cette largeur. Les volets plus étroits conservent toute leur largeur." + "value": "Einen Space nach rechts" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يلتف محتوى الطرفية ودردشة الوكيل عند هذا العرض. أما الأجزاء الأضيق فتستخدم عرضها الكامل." + "value": "Ir un espacio a la derecha" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El contenido de la terminal y del chat de agentes se ajusta a este ancho. Los paneles más estrechos siguen usando todo su ancho." + "value": "Aller un espace à droite" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "終端機和代理對話的內容會在此寬度換行。較窄的窗格仍使用完整寬度。" + "value": "右の操作スペースへ移動" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "终端和代理对话的内容会在此宽度处换行。较窄的窗格仍使用全部宽度。" + "value": "오른쪽 스페이스로 이동" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "터미널과 에이전트 채팅 내용을 이 너비에서 줄바꿈합니다. 이보다 좁은 분할 창에서는 전체 너비를 사용합니다." + "value": "向右移动一个空间" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ターミナルとエージェントチャットの内容をこの幅で折り返します。これより狭いペインでは、ペインの幅いっぱいに表示します。" + "value": "向右移動一個空間" } } } }, - "settings.terminal.textEditingGestures.subtitle": { + "shortcut.macos.spotlight": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Command and Option arrow and delete keys move and delete by line and word at the shell prompt." + "value": "Show Spotlight search" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "シェルのプロンプトでは、Command と Option の矢印キー・削除キーで行単位・単語単位に移動・削除します。" + "value": "إظهار بحث Spotlight" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "在 shell 提示符下,Command 和 Option 加方向键和删除键按行和按词移动和删除。" + "value": "Spotlight-Suche anzeigen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Befehls- und Wahltaste mit Pfeil- und Löschtasten bewegen und löschen an der Shell-Eingabeaufforderung zeilen- und wortweise." + "value": "Mostrar búsqueda de Spotlight" } }, "fr": { "stringUnit": { "state": "translated", - "value": "À l'invite du shell, les flèches et la touche Supprimer avec Commande et Option déplacent et suppriment par ligne et par mot." + "value": "Afficher la recherche Spotlight" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "في موجه الصدفة، تنقل مفاتيح الأسهم والحذف مع Command وOption وتحذف حسب السطر والكلمة." + "value": "Spotlight 検索を表示" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "En el prompt de la shell, las flechas y la tecla Eliminar con Comando y Opción mueven y borran por línea y por palabra." + "value": "Spotlight 검색 보기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在 shell 提示字元下,Command 與 Option 加方向鍵與刪除鍵會依行與依字移動與刪除。" + "value": "显示“聚焦”搜索" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "셸 프롬프트에서 Command 및 Option 화살표와 삭제 키가 줄 및 단어 단위로 이동하고 삭제합니다." + "value": "顯示 Spotlight 搜尋" } } } }, - "settings.textBox.focusOnNewTerminals.subtitle": { + "shortcut.macos.toggleDockHiding": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Opening a terminal tab, split, or workspace puts keyboard focus in the TextBox." + "value": "Turn Dock hiding on or off" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wenn ein Terminal-Tab, eine Teilung oder ein Arbeitsbereich geöffnet wird, liegt der Tastaturfokus in der TextBox." + "value": "تشغيل أو إيقاف إخفاء Dock" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "À l’ouverture d’un onglet, d’une division ou d’un espace de travail de terminal, le focus du clavier est placé dans la TextBox." + "value": "Automatisches Ausblenden des Docks ein- oder ausschalten" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "عند فتح علامة تبويب طرفية أو تقسيم أو مساحة عمل، ينتقل تركيز لوحة المفاتيح إلى TextBox." + "value": "Activar o desactivar la ocultación del Dock" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Al abrir una pestaña de terminal, una división o un espacio de trabajo, el enfoque del teclado se sitúa en el TextBox." + "value": "Activer ou désactiver le masquage du Dock" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "開啟終端機標籤頁、分割或工作區時,將鍵盤焦點移到 TextBox。" + "value": "Dock を自動的に表示/非表示のオン/オフ" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "打开终端标签页、分屏或工作区时,将键盘焦点移到 TextBox。" + "value": "Dock 가리기 켜기 또는 끄기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "터미널 탭, 분할 또는 작업 공간을 열면 키보드 포커스가 TextBox로 이동합니다." + "value": "打开或关闭程序坞隐藏" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ターミナルタブ、分割、またはワークスペースを開くと、キーボードフォーカスが TextBox に移動します。" + "value": "開啟或關閉 Dock 隱藏" } } } }, - "settings.textBox.showOnNewTerminals.subtitle": { + "shortcut.macos.voiceOver": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Opening a terminal tab, split, or workspace shows the TextBox." + "value": "Turn VoiceOver on or off" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Beim Öffnen eines Terminal-Tabs, einer Teilung oder eines Arbeitsbereichs erscheint die TextBox." + "value": "تشغيل VoiceOver أو إيقافه" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "À l’ouverture d’un onglet, d’une division ou d’un espace de travail de terminal, la TextBox s’affiche." + "value": "VoiceOver ein- oder ausschalten" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "عند فتح علامة تبويب طرفية أو تقسيم أو مساحة عمل، يظهر TextBox." + "value": "Activar o desactivar VoiceOver" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Al abrir una pestaña de terminal, una división o un espacio de trabajo, se muestra el TextBox." + "value": "Activer ou désactiver VoiceOver" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "開啟終端機標籤頁、分割或工作區時顯示 TextBox。" + "value": "VoiceOver のオン/オフ" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "打开终端标签页、分屏或工作区时显示 TextBox。" + "value": "VoiceOver 켜기 또는 끄기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "터미널 탭, 분할 또는 작업 공간을 열면 TextBox가 표시됩니다." + "value": "打开或关闭旁白" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ターミナルタブ、分割、またはワークスペースを開くと、TextBox が表示されます。" + "value": "開啟或關閉「旁白」" } } } }, - "workspaceGroup.error.customColorIsNotAnInputKey": { + "settings.search.alias.setting.keyboardShortcuts.base-keymap": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "unknown key custom_color; set_color accepts hex or color" + "value": "base keymap preset iterm iterm2 terminal app tmux prefix keybindings coming from another terminal" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "不明なキー custom_color です。set_color は hex または color を受け付けます" + "value": "مخطط المفاتيح الأساسي إعداد مسبق iterm iterm2 terminal app tmux بادئة اختصارات طرفية أخرى" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "未知的键 custom_color;set_color 接受 hex 或 color" + "value": "Basis Tastaturbelegung Vorlage iterm iterm2 terminal app tmux Präfix Tastenbelegung anderes Terminal" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Unbekannter Schlüssel custom_color; set_color akzeptiert hex oder color" + "value": "mapa de teclas base preajuste iterm iterm2 terminal app tmux prefijo atajos otro terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Clé inconnue custom_color ; set_color accepte hex ou color" + "value": "disposition de base préréglage iterm iterm2 terminal app tmux préfixe raccourcis autre terminal" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "مفتاح غير معروف custom_color؛ يقبل set_color المفتاح hex أو color" + "value": "ベースキーマップ プリセット iterm iterm2 terminal app tmux プレフィックス ショートカット 他のターミナル" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Clave desconocida custom_color; set_color acepta hex o color" + "value": "기본 키맵 프리셋 iterm iterm2 terminal app tmux 접두사 단축키 다른 터미널" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未知的鍵 custom_color;set_color 接受 hex 或 color" + "value": "基础键位方案 预设 iterm iterm2 terminal app tmux 前缀 快捷键 其他终端" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "알 수 없는 키 custom_color입니다. set_color는 hex 또는 color를 받습니다" + "value": "基礎按鍵配置 預設組合 iterm iterm2 terminal app tmux 前綴 快速鍵 其他終端機" } } } }, - "workspaceGroup.error.colorMustBeHex": { + "settings.shortcuts.baseKeymap.apply": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "color must be a 6-digit hex color like #FF3EA5 (leading # optional)" + "value": "Apply Keymap" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "color は #FF3EA5 のような 6 桁の 16 進カラーである必要があります(先頭の # は省略可)" + "value": "تطبيق مخطط المفاتيح" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "color 必须是 6 位十六进制颜色,例如 #FF3EA5(开头的 # 可省略)" + "value": "Tastaturbelegung anwenden" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "color muss eine 6-stellige Hex-Farbe wie #FF3EA5 sein (führendes # optional)" + "value": "Aplicar mapa de teclas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "color doit être une couleur hexadécimale à 6 chiffres comme #FF3EA5 (# initial facultatif)" + "value": "Appliquer la disposition" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يجب أن تكون قيمة color لونًا سداسيًا عشريًا من 6 خانات مثل #FF3EA5 (الرمز # في البداية اختياري)" + "value": "キーマップを適用" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "color debe ser un color hexadecimal de 6 dígitos como #FF3EA5 (el # inicial es opcional)" + "value": "키맵 적용" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "color 必須是 6 位十六進位顏色,例如 #FF3EA5(開頭的 # 可省略)" + "value": "应用键位方案" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "color는 #FF3EA5 같은 6자리 16진수 색상이어야 합니다(앞의 #는 생략 가능)" + "value": "套用按鍵配置" } } } }, - "workspaceGroup.error.colorMustBeString": { + "shortcut.keymap.summary.iterm2Numbers": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "color must be a string holding a hex color" + "value": "⌘1…9 will select tabs in the focused pane instead of workspaces. Workspaces move to ⌥⌘1…9." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "color は 16 進カラーを含む文字列である必要があります" + "value": "سيحدد ⌘1…9 علامات التبويب في الجزء المحدد بدلًا من مساحات العمل. تنتقل مساحات العمل إلى ⌥⌘1…9." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "color 必须是包含十六进制颜色的字符串" + "value": "⌘1…9 wählt dann Tabs im fokussierten Bereich statt Arbeitsbereiche aus. Arbeitsbereiche wechseln zu ⌥⌘1…9." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "color muss ein String mit einer Hex-Farbe sein" + "value": "⌘1…9 seleccionará pestañas del panel enfocado en lugar de espacios de trabajo. Los espacios de trabajo pasan a ⌥⌘1…9." } }, "fr": { "stringUnit": { "state": "translated", - "value": "color doit être une chaîne contenant une couleur hexadécimale" + "value": "⌘1…9 sélectionnera les onglets du panneau actif au lieu des espaces de travail. Les espaces de travail passent à ⌥⌘1…9." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يجب أن تكون قيمة color سلسلة نصية تحتوي على لون سداسي عشري" + "value": "⌘1…9 はワークスペースではなく、フォーカス中のペインのタブを選択するようになります。ワークスペースは ⌥⌘1…9 に移ります。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "color debe ser una cadena de texto con un color hexadecimal" + "value": "⌘1…9는 작업 공간 대신 포커스된 패널의 탭을 선택합니다. 작업 공간은 ⌥⌘1…9로 이동합니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "color 必須是包含十六進位顏色的字串" + "value": "⌘1…9 将选择当前窗格中的标签页,而不是工作区。工作区改用 ⌥⌘1…9。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "color는 16진수 색상을 담은 문자열이어야 합니다" + "value": "⌘1…9 將選取目前窗格中的分頁,而不是工作區。工作區改用 ⌥⌘1…9。" } } } }, - "workspaceGroup.error.iconSymbolIsNotAnInputKey": { + "cli.help.send": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "unknown key icon_symbol; set_icon accepts symbol or icon" + "value": "الاستخدام: cmux send [flags] [--] <text>\n\nيرسل نصًا إلى سطح طرفية كضغطات مفاتيح. تسلسلات الهروب: \\n و\\r ترسلان Enter، و\\t ترسل Tab.\n\nللنصوص الكبيرة (مثلًا أكثر من 4 كيلوبايت، أو عدة أسطر موجهة إلى وكيل)، استخدم --paste أو cmux paste. تضغط ضغطات المفاتيح Enter عند كل سطر جديد، مما قد يرسل كل سطر بمفرده.\n\nمع --paste، يمر النص دون تغيير عبر مسار اللصق نفسه الذي يستخدمه cmux paste وCmd+V: لا تُفسَّر تسلسلات الهروب مثل \\n، وتُستبدل أحرف التحكم مثل Esc وCtrl-C بمسافات. يجب أن يأتي --paste قبل النص.\n\nالخيارات:\n --workspace <id|ref|index> مساحة العمل المستهدفة (الافتراضي: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> السطح المستهدف (الافتراضي: $CMUX_SURFACE_ID)\n --window <id|ref|index> سياق النافذة لمراجع وفهارس مساحة العمل/السطح\n --paste يلصق النص بدلًا من كتابته\n\nمثال:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "不明なキー icon_symbol です。set_icon は symbol または icon を受け付けます" + "value": "Verwendung: cmux send [flags] [--] <text>\n\nSendet Text als Tastatureingaben an eine Terminal-Oberfläche. Escape-Sequenzen: \\n und \\r senden Enter, \\t sendet Tab.\n\nFür große Texte (zum Beispiel über 4 KB oder mehrere Zeilen an einen Agenten) --paste oder cmux paste verwenden. Tastatureingaben drücken bei jedem Zeilenumbruch Enter, wodurch jede Zeile einzeln abgesendet werden kann.\n\nMit --paste geht der Text unverändert über denselben Einfügepfad wie cmux paste und Cmd+V: Escape-Sequenzen wie \\n werden nicht interpretiert, und Steuerzeichen wie Esc und Strg-C werden durch Leerzeichen ersetzt. --paste muss vor dem Text stehen.\n\nFlags:\n --workspace <id|ref|index> Ziel-Workspace (Standard: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Ziel-Oberfläche (Standard: $CMUX_SURFACE_ID)\n --window <id|ref|index> Fensterkontext für Workspace-/Oberflächen-Refs und -Indizes\n --paste Fügt den Text ein, statt ihn zu tippen\n\nBeispiel:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "未知的键 icon_symbol;set_icon 接受 symbol 或 icon" + "value": "Usage: cmux send [flags] [--] <text>\n\nSend text to a terminal surface as keystrokes. Escape sequences: \\n and \\r send Enter, \\t sends Tab.\n\nFor large text (for example over 4 KB, or several lines going to an agent), use --paste or cmux paste. Keystrokes press Enter at every newline, which can submit each line on its own.\n\nWith --paste, the text goes through the same paste path as cmux paste and Cmd+V, unchanged: escape sequences such as \\n are not interpreted, and control characters such as Esc and Ctrl-C are replaced with spaces. --paste must come before the text.\n\nFlags:\n --workspace <id|ref|index> Target workspace (default: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Target surface (default: $CMUX_SURFACE_ID)\n --window <id|ref|index> Window context for workspace/surface refs and indexes\n --paste Paste the text instead of typing it\n\nExample:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Unbekannter Schlüssel icon_symbol; set_icon akzeptiert symbol oder icon" + "value": "Uso: cmux send [flags] [--] <text>\n\nEnvía texto a una superficie de terminal como pulsaciones de teclas. Secuencias de escape: \\n y \\r envían Intro, \\t envía Tab.\n\nPara textos grandes (por ejemplo, más de 4 KB o varias líneas dirigidas a un agente), usa --paste o cmux paste. Las pulsaciones presionan Intro en cada salto de línea, lo que puede enviar cada línea por separado.\n\nCon --paste, el texto pasa sin cambios por la misma ruta de pegado que cmux paste y Cmd+V: las secuencias de escape como \\n no se interpretan y los caracteres de control como Esc y Ctrl-C se reemplazan por espacios. --paste debe ir antes del texto.\n\nOpciones:\n --workspace <id|ref|index> Espacio de trabajo de destino (predeterminado: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Superficie de destino (predeterminada: $CMUX_SURFACE_ID)\n --window <id|ref|index> Contexto de ventana para referencias e índices de espacio de trabajo/superficie\n --paste Pega el texto en lugar de escribirlo\n\nEjemplo:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Clé inconnue icon_symbol ; set_icon accepte symbol ou icon" + "value": "Utilisation : cmux send [flags] [--] <text>\n\nEnvoie du texte à une surface de terminal sous forme de frappes. Séquences d’échappement : \\n et \\r envoient Entrée, \\t envoie Tab.\n\nPour un texte volumineux (par exemple plus de 4 Ko, ou plusieurs lignes destinées à un agent), utilisez --paste ou cmux paste. Les frappes appuient sur Entrée à chaque saut de ligne, ce qui peut envoyer chaque ligne séparément.\n\nAvec --paste, le texte passe tel quel par le même chemin de collage que cmux paste et Cmd+V : les séquences d’échappement comme \\n ne sont pas interprétées, et les caractères de contrôle comme Échap et Ctrl-C sont remplacés par des espaces. --paste doit précéder le texte.\n\nOptions :\n --workspace <id|ref|index> Espace de travail cible (par défaut : $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> Surface cible (par défaut : $CMUX_SURFACE_ID)\n --window <id|ref|index> Contexte de fenêtre pour les références et index d’espace de travail/surface\n --paste Colle le texte au lieu de le taper\n\nExemple :\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "مفتاح غير معروف icon_symbol؛ يقبل set_icon المفتاح symbol أو icon" + "value": "使用方法: cmux send [flags] [--] <text>\n\nテキストをキー入力としてターミナルサーフェスに送信します。エスケープシーケンス: \\n と \\r は Enter、\\t は Tab を送信します。\n\n大きなテキスト(たとえば 4 KB を超えるもの、またはエージェントに送る複数行)には --paste または cmux paste を使ってください。キー入力では改行ごとに Enter が押されるため、各行が個別に送信されることがあります。\n\n--paste を使うと、テキストはそのまま cmux paste や Cmd+V と同じ貼り付け経路で送られます。\\n などのエスケープシーケンスは解釈されず、Esc や Ctrl-C などの制御文字はスペースに置き換えられます。--paste はテキストより前に指定してください。\n\nフラグ:\n --workspace <id|ref|index> 対象ワークスペース(既定: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 対象サーフェス(既定: $CMUX_SURFACE_ID)\n --window <id|ref|index> ワークスペース/サーフェスの参照とインデックスに使うウィンドウコンテキスト\n --paste テキストを入力する代わりに貼り付けます\n\n例:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Clave desconocida icon_symbol; set_icon acepta symbol o icon" + "value": "사용법: cmux send [flags] [--] <text>\n\n텍스트를 키 입력으로 터미널 서피스에 보냅니다. 이스케이프 시퀀스: \\n과 \\r은 Enter, \\t는 Tab을 보냅니다.\n\n큰 텍스트(예: 4 KB 초과 또는 에이전트로 보내는 여러 줄)에는 --paste 또는 cmux paste를 사용하세요. 키 입력은 줄바꿈마다 Enter를 누르므로 각 줄이 따로 제출될 수 있습니다.\n\n--paste를 쓰면 텍스트가 변경 없이 cmux paste 및 Cmd+V와 같은 붙여넣기 경로로 전달됩니다. \\n 같은 이스케이프 시퀀스는 해석되지 않으며, Esc와 Ctrl-C 같은 제어 문자는 공백으로 바뀝니다. --paste는 텍스트보다 앞에 와야 합니다.\n\n플래그:\n --workspace <id|ref|index> 대상 워크스페이스 (기본값: $CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 대상 서피스 (기본값: $CMUX_SURFACE_ID)\n --window <id|ref|index> 워크스페이스/서피스 참조와 인덱스에 사용할 창 컨텍스트\n --paste 텍스트를 입력하는 대신 붙여넣습니다\n\n예:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未知的鍵 icon_symbol;set_icon 接受 symbol 或 icon" + "value": "用法:cmux send [flags] [--] <text>\n\n以按键方式将文本发送到终端表面。转义序列:\\n 和 \\r 发送 Enter,\\t 发送 Tab。\n\n对于大量文本(例如超过 4 KB,或要发给代理的多行文本),请使用 --paste 或 cmux paste。按键方式会在每个换行处按下 Enter,可能让每一行单独提交。\n\n使用 --paste 时,文本会原样通过与 cmux paste 和 Cmd+V 相同的粘贴路径发送:不会解释 \\n 等转义序列,Esc 和 Ctrl-C 等控制字符会被替换为空格。--paste 必须放在文本之前。\n\n标志:\n --workspace <id|ref|index> 目标工作区(默认:$CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 目标表面(默认:$CMUX_SURFACE_ID)\n --window <id|ref|index> 工作区/表面引用与索引的窗口上下文\n --paste 粘贴文本,而不是逐键输入\n\n示例:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "알 수 없는 키 icon_symbol입니다. set_icon은 symbol 또는 icon을 받습니다" + "value": "用法:cmux send [flags] [--] <text>\n\n以按鍵方式將文字傳送到終端機表面。跳脫序列:\\n 和 \\r 送出 Enter,\\t 送出 Tab。\n\n若是大量文字(例如超過 4 KB,或要送給代理的多行文字),請使用 --paste 或 cmux paste。按鍵方式會在每個換行處按下 Enter,可能讓每一行各自送出。\n\n使用 --paste 時,文字會原封不動地透過與 cmux paste 和 Cmd+V 相同的貼上路徑送出:不會解譯 \\n 等跳脫序列,Esc 和 Ctrl-C 等控制字元會被替換為空格。--paste 必須放在文字之前。\n\n旗標:\n --workspace <id|ref|index> 目標工作區(預設:$CMUX_WORKSPACE_ID)\n --surface <id|ref|index> 目標表面(預設:$CMUX_SURFACE_ID)\n --window <id|ref|index> 工作區/表面參照與索引所用的視窗上下文\n --paste 貼上文字,而不是逐鍵輸入\n\n範例:\n cmux send \"echo hello\"\n cmux send --surface surface:2 \"ls -la\\n\"\n cmux send --paste --surface surface:2 \"$(cat notes.md)\"" } } } }, - "workspaceGroup.error.symbolMustBeString": { + "cli.send.hint.usePaste": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "symbol must be a string" + "value": "تلميح: كُتب كل سطر جديد كضغطة Enter؛ للنصوص الكبيرة متعددة الأسطر استخدم cmux send --paste أو cmux paste لإرسالها كلصقة واحدة" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "symbol は文字列である必要があります" + "value": "Hinweis: Jeder Zeilenumbruch wurde als Enter getippt; für große mehrzeilige Texte cmux send --paste oder cmux paste verwenden, um sie als ein einziges Einfügen zu senden" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "symbol 必须是字符串" + "value": "hint: each newline was typed as Enter; for large multi-line text use cmux send --paste or cmux paste to deliver it as one paste" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "symbol muss ein String sein" + "value": "sugerencia: cada salto de línea se escribió como Intro; para textos grandes de varias líneas usa cmux send --paste o cmux paste para enviarlos como un solo pegado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "symbol doit être une chaîne de caractères" + "value": "astuce : chaque saut de ligne a été tapé comme Entrée ; pour un texte volumineux sur plusieurs lignes, utilisez cmux send --paste ou cmux paste pour l’envoyer en un seul collage" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يجب أن تكون قيمة symbol سلسلة نصية" + "value": "ヒント: 各改行は Enter として入力されました。大きな複数行テキストは cmux send --paste または cmux paste を使うと 1 回の貼り付けとして送れます" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "symbol debe ser una cadena de texto" + "value": "힌트: 각 줄바꿈이 Enter로 입력되었습니다. 큰 여러 줄 텍스트는 cmux send --paste 또는 cmux paste를 사용해 한 번의 붙여넣기로 보내세요" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "symbol 必須是字串" + "value": "提示:每个换行都作为 Enter 输入;对于大量多行文本,请使用 cmux send --paste 或 cmux paste 以一次粘贴发送" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "symbol은 문자열이어야 합니다" + "value": "提示:每個換行都以 Enter 輸入;若是大量多行文字,請使用 cmux send --paste 或 cmux paste 以單次貼上送出" } } } }, - "settings.betaFeatures.predictedEcho.subtitle": { + "settings.computerUse.enabled.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows typed characters right away on slow remote connections. They stay underlined until the remote host confirms them. Password prompts and full-screen apps are excluded." + "value": "Lets supported agents see and control apps on this Mac. An agent's first Computer Use request starts setup automatically." } }, "de": { "stringUnit": { "state": "translated", - "value": "Getippte Zeichen erscheinen bei langsamen Remoteverbindungen sofort. Sie bleiben unterstrichen, bis der Remote-Host sie bestätigt. Ausgenommen sind Passwortabfragen und Vollbild-Apps." + "value": "Unterstützte Agenten können Apps auf diesem Mac sehen und steuern. Die erste Computer-Use-Anfrage eines Agenten startet die Einrichtung automatisch." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les caractères saisis s’affichent immédiatement sur les connexions distantes lentes. Ils restent soulignés jusqu’à ce que l’hôte distant les confirme. Cela ne s’applique ni aux invites de mot de passe ni aux apps en plein écran." + "value": "Les agents pris en charge peuvent voir et contrôler les apps de ce Mac. La première requête Computer Use d’un agent lance automatiquement la configuration." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تظهر الأحرف المكتوبة فورًا في الاتصالات البعيدة البطيئة، وتبقى مسطّرة حتى يؤكدها المضيف البعيد. ولا ينطبق ذلك على مطالبات كلمة المرور والتطبيقات بملء الشاشة." + "value": "يمكن للوكلاء المدعومين رؤية التطبيقات على جهاز Mac هذا والتحكم فيها. ويبدأ الإعداد تلقائيًا عند أول طلب Computer Use من أحد الوكلاء." } }, "es": { "stringUnit": { "state": "translated", - "value": "Los caracteres escritos aparecen al instante en conexiones remotas lentas y permanecen subrayados hasta que el host remoto los confirma. No se aplica a solicitudes de contraseña ni a apps a pantalla completa." + "value": "Los agentes compatibles pueden ver y controlar apps en este Mac. La primera solicitud de Computer Use de un agente inicia la configuración automáticamente." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "遠端連線較慢時,輸入的字元會立即顯示並加上底線,直到遠端主機確認為止。密碼提示和全螢幕 App 不適用此功能。" + "value": "允許支援的代理程式查看及操作此 Mac 上的 App。代理程式第一次發出 Computer Use 要求時會自動開始設定。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "远程连接较慢时,输入的字符会立即显示并带有下划线,直到远程主机确认为止。密码提示和全屏 App 不适用此功能。" + "value": "允许受支持的代理查看并控制这台 Mac 上的 App。代理第一次发出 Computer Use 请求时会自动开始设置。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "원격 연결이 느릴 때 입력한 문자를 바로 표시하고, 원격 호스트가 확인할 때까지 밑줄로 표시합니다. 비밀번호 프롬프트와 전체 화면 앱에는 적용되지 않습니다." + "value": "지원되는 에이전트가 이 Mac의 앱을 보고 제어할 수 있게 합니다. 에이전트가 처음 Computer Use를 요청하면 설정이 자동으로 시작됩니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "リモート接続が遅いとき、入力した文字をすぐに表示し、リモートホストが確認するまで下線を付けます。パスワードの入力やフルスクリーンアプリには適用されません。" + "value": "対応するエージェントが、この Mac のアプリの画面を見て操作できるようにします。エージェントが最初に Computer Use を要求すると、セットアップが自動的に始まります。" } } } }, - "settings.app.equalizeSplitsOnCreate.subtitle": { + "settings.app.closeWorkspaceOnLastSurfaceShortcut.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Splitting a pane makes the panes in that direction equal in size." + "value": "Closing the last surface in a workspace keeps the workspace open." } }, "de": { "stringUnit": { "state": "translated", - "value": "Wird ein Teilfenster geteilt, werden alle Teilfenster in dieser Richtung gleich groß." + "value": "Der Arbeitsbereich bleibt geöffnet, auch wenn seine letzte Oberfläche geschlossen wird." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Lorsqu’un volet est divisé, les volets dans cette direction prennent la même taille." + "value": "L’espace de travail reste ouvert après la fermeture de sa dernière surface d’affichage." } }, "ar": { "stringUnit": { "state": "translated", - "value": "عند تقسيم جزء، تصبح الأجزاء في ذلك الاتجاه متساوية الحجم." + "value": "تبقى مساحة العمل مفتوحة عند إغلاق آخر سطح فيها." } }, "es": { "stringUnit": { "state": "translated", - "value": "Al dividir un panel, los paneles en esa dirección se ajustan al mismo tamaño." + "value": "El espacio de trabajo permanece abierto aunque se cierre su última superficie." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "分割窗格時,同一方向的窗格會調整為相同大小。" + "value": "即使關閉最後一個介面,工作區仍會保持開啟。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "拆分窗格时,同一方向的窗格会调整为相同大小。" + "value": "即使关闭最后一个表面,工作区也会保持打开。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "창을 분할하면 같은 방향의 분할 창이 모두 같은 크기가 됩니다." + "value": "마지막 서피스를 닫아도 워크스페이스는 닫히지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペインを分割すると、その方向のペインが同じサイズになります。" + "value": "最後のサーフェスを閉じても、ワークスペースは閉じません。" } } } }, - "settings.terminal.showPasswordInputIndicator.subtitle": { + "settings.app.commandPaletteSearchAllSurfaces.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows a lock badge in the terminal corner while a program such as sudo or ssh reads a password with echo off. Only local prompts are detected: ssh's own password prompt counts, but sudo inside an ssh session does not." + "value": "Includes terminal, browser, and Markdown surfaces from every workspace in command palette results." } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeigt in der Terminalecke ein Schloss-Symbol an, während ein Programm wie sudo oder ssh ein Passwort ohne Echo einliest. Nur lokale Abfragen werden erkannt: Die Passwortabfrage von ssh selbst zählt, sudo innerhalb einer ssh-Sitzung nicht." + "value": "Die Befehlspalette findet auch Terminal-, Browser- und Markdown-Oberflächen in allen Arbeitsbereichen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Affiche un badge de cadenas dans le coin du terminal pendant qu'un programme comme sudo ou ssh lit un mot de passe sans écho. Seules les invites locales sont détectées : l'invite de mot de passe de ssh compte, mais pas sudo dans une session ssh." + "value": "La palette de commandes affiche aussi les surfaces d’affichage de terminal, de navigateur et Markdown de tous les espaces de travail." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يعرض شارة قفل في زاوية الطرفية أثناء قراءة برنامج مثل sudo أو ssh لكلمة مرور مع إيقاف الصدى. تُكتشف المطالبات المحلية فقط: تُحتسب مطالبة كلمة مرور ssh نفسها، أما sudo داخل جلسة ssh فلا." + "value": "تعرض نتائج لوحة الأوامر أسطح الطرفية والمتصفح وMarkdown من جميع مساحات العمل." } }, "es": { "stringUnit": { "state": "translated", - "value": "Muestra una insignia de candado en la esquina del terminal mientras un programa como sudo o ssh lee una contraseña sin eco. Solo se detectan las solicitudes locales: la solicitud de contraseña de ssh cuenta, pero sudo dentro de una sesión ssh no." + "value": "La paleta de comandos también muestra las superficies de terminal, navegador y Markdown de todos los espacios de trabajo." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "當 sudo 或 ssh 等程式在關閉回顯的情況下讀取密碼時,在終端機角落顯示鎖頭標記。僅偵測本機提示:ssh 本身的密碼提示會被偵測,但 ssh 工作階段中的 sudo 不會。" + "value": "在命令面板中也能找到所有工作區的終端機、瀏覽器和 Markdown 介面。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "当 sudo 或 ssh 等程序在关闭回显的情况下读取密码时,在终端角落显示锁形标记。仅检测本地提示:ssh 自身的密码提示会被检测,但 ssh 会话中的 sudo 不会。" + "value": "在命令面板中也能找到所有工作区的终端、浏览器和 Markdown 表面。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "sudo나 ssh 같은 프로그램이 에코를 끈 상태로 비밀번호를 읽는 동안 터미널 모서리에 자물쇠 배지를 표시합니다. 로컬 프롬프트만 감지됩니다. ssh 자체의 비밀번호 프롬프트는 포함되지만 ssh 세션 안의 sudo는 포함되지 않습니다." + "value": "명령어 팔레트에서 모든 워크스페이스의 터미널, 브라우저, Markdown 서피스도 찾을 수 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "sudo や ssh などのプログラムがエコーをオフにしてパスワードを読み取っている間、ターミナルの隅に鍵のバッジを表示します。検出されるのはローカルのプロンプトだけです。ssh 自体のパスワード入力は対象ですが、ssh セッション内の sudo は対象外です。" + "value": "コマンドパレットで、すべてのワークスペースのターミナル、ブラウザ、Markdown のサーフェスも検索できます。" } } } }, - "settings.terminal.showPasswordInputDots.subtitle": { + "settings.app.fileDrop.defaultBehavior.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Shows one dot in the badge per typed character. cmux keeps only a count, never the characters. Pasted text is not counted." + "value": "Choose what dropping files on a terminal or editor does. Holding Shift while dragging does the other." } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeigt im Symbol einen Punkt pro eingegebenem Zeichen. cmux speichert nur die Anzahl, niemals die Zeichen. Eingefügter Text wird nicht gezählt." + "value": "Wählen Sie, was beim Ablegen von Dateien auf einem Terminal oder Editor passiert. Wenn Sie beim Ziehen die Umschalttaste gedrückt halten, gilt die andere Option." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Affiche dans le badge un point par caractère saisi. cmux ne conserve qu'un compteur, jamais les caractères. Le texte collé n'est pas compté." + "value": "Choisissez ce qui se passe lorsque vous déposez des fichiers sur un terminal ou un éditeur. Si vous maintenez la touche Maj enfoncée pendant le glissement, l’autre option s’applique." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يعرض في الشارة نقطة واحدة لكل حرف مكتوب. يحتفظ cmux بالعدد فقط، ولا يحتفظ بالأحرف أبدًا. لا يُحتسب النص الملصق." + "value": "اختر ما يحدث عند إفلات الملفات على طرفية أو محرر. يؤدي الضغط مع الاستمرار على مفتاح Shift أثناء السحب إلى تطبيق الخيار الآخر." } }, "es": { "stringUnit": { "state": "translated", - "value": "Muestra en la insignia un punto por cada carácter escrito. cmux solo guarda un recuento, nunca los caracteres. El texto pegado no se cuenta." + "value": "Elige qué ocurre al soltar archivos en una terminal o un editor. Si mantienes pulsada la tecla Mayúsculas al arrastrar, se usa la otra opción." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在標記中為每個已輸入的字元顯示一個圓點。cmux 只保留數量,絕不保留字元本身。貼上的文字不計入。" + "value": "選擇將檔案拖放到終端機或編輯器時要執行的動作。拖移時按住 Shift 鍵可改用另一個動作。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在标记中为每个已输入的字符显示一个圆点。cmux 只保留数量,绝不保留字符本身。粘贴的文本不计入。" + "value": "选择将文件拖放到终端或编辑器时执行的操作。拖动时按住 Shift 键可改用另一种操作。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "배지에 입력한 문자마다 점을 하나씩 표시합니다. cmux는 개수만 유지하며 문자는 절대 보관하지 않습니다. 붙여넣은 텍스트는 세지 않습니다." + "value": "파일을 터미널이나 편집기에 드롭했을 때 수행할 동작을 선택합니다. 드래그 중에 Shift 키를 누르고 있으면 다른 쪽 동작을 수행합니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "入力した文字ごとにバッジにドットを 1 つ表示します。cmux が保持するのは数だけで、文字そのものは保持しません。貼り付けたテキストは数えません。" + "value": "ファイルをターミナルやエディタにドロップしたときの動作を選択します。ドラッグ中に Shift キーを押したままにすると、もう一方の動作になります。" } } } }, - "cli.session.usage": { + "settings.app.focusHistoryIncludesPanesAndTabs.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nMove a stopped Claude Code session to another machine and resume it there.\nExit the agent first: the move refuses while the session runs on either side.\n\nThe move carries:\n - the cwd's git checkout: HEAD (on the same branch when safe) plus modified,\n deleted and untracked non-ignored files; a worktree is added when the\n repository exists on the destination but the path does not\n - the transcript, its session directory, file history, and the project\n memory directory (merged both ways, newest wins, nothing deleted)\n\nIt then opens a workspace on the destination (`cmux ssh` for a host, a local\nworkspace for `local`) that resumes the session with its recorded launcher.\nWhen the destination home is not at the same absolute path, paths under the\nhome are mapped and the project is re-slugged.\n\nOptions:\n --to <destination> SSH destination (user@host or ssh_config alias), or local\n --from <destination> Where the session is now (default: where the last move put it, else local)\n --name <title> Workspace title (default: the first 8 characters of the id)\n --no-code Do not carry the git checkout\n --port <n> SSH port\n --identity <path> SSH identity file\n --ssh-option <opt> Extra SSH -o option (repeatable)\n --no-focus Open the workspace without switching to it\n\nExamples:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "Using Back and Forward also returns to previous panes and tabs." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nVerschiebt eine beendete Claude Code-Sitzung auf eine andere Maschine und setzt sie dort fort.\nBeende zuerst den Agenten: Die Verschiebung wird abgelehnt, solange die Sitzung auf einer Seite läuft.\n\nDie Verschiebung überträgt:\n - den git-Checkout des cwd: HEAD (auf demselben Branch, wenn das sicher ist) sowie geänderte,\n gelöschte und nicht ignorierte, nicht verfolgte Dateien; ein Worktree wird hinzugefügt, wenn\n das Repository am Ziel existiert, der Pfad aber nicht\n - das Transkript, sein Sitzungsverzeichnis, den Dateiverlauf und das Projektgedächtnis\n (in beide Richtungen zusammengeführt, das Neueste gewinnt, nichts wird gelöscht)\n\nDanach öffnet sie am Ziel einen Workspace (`cmux ssh` für einen Host, einen lokalen Workspace\nfür `local`), der die Sitzung mit ihrem aufgezeichneten Launcher fortsetzt. Liegt das Home-\nVerzeichnis am Ziel nicht unter demselben absoluten Pfad, werden Pfade darunter umgeschrieben\nund das Projekt erhält einen neuen Slug.\n\nOptionen:\n --to <destination> SSH-Ziel (user@host oder ssh_config-Alias) oder local\n --from <destination> Wo die Sitzung jetzt ist (Standard: wohin die letzte Verschiebung sie gebracht hat, sonst local)\n --name <title> Workspace-Titel (Standard: die ersten 8 Zeichen der ID)\n --no-code Den git-Checkout nicht übertragen\n --port <n> SSH-Port\n --identity <path> SSH-Identitätsdatei\n --ssh-option <opt> Zusätzliche SSH-Option -o (wiederholbar)\n --no-focus Workspace öffnen, ohne dorthin zu wechseln\n\nBeispiele:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "Mit „Zurück“ und „Vor“ kehren Sie auch zu vorherigen Teilfenstern und Tabs zurück." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nDéplace une session Claude Code arrêtée vers une autre machine et la reprend là-bas.\nQuittez d'abord l'agent : le déplacement est refusé tant que la session s'exécute d'un côté ou de l'autre.\n\nLe déplacement transfère :\n - le checkout git du cwd : HEAD (sur la même branche quand c'est sûr) ainsi que les fichiers\n modifiés, supprimés et non suivis non ignorés ; un worktree est ajouté quand le dépôt existe\n sur la destination mais pas le chemin\n - la transcription, son répertoire de session, l'historique des fichiers et la mémoire du\n projet (fusionnée dans les deux sens, le plus récent l'emporte, rien n'est supprimé)\n\nIl ouvre ensuite un espace de travail sur la destination (`cmux ssh` pour un hôte, un espace\nlocal pour `local`) qui reprend la session avec son lanceur enregistré. Quand le dossier\npersonnel de destination n'a pas le même chemin absolu, les chemins qu'il contient sont\nconvertis et le projet reçoit un nouveau slug.\n\nOptions :\n --to <destination> Destination SSH (user@host ou alias ssh_config), ou local\n --from <destination> Où se trouve la session (par défaut : là où l'a mise le dernier déplacement, sinon local)\n --name <title> Titre de l'espace de travail (par défaut : les 8 premiers caractères de l'id)\n --no-code Ne pas transférer le checkout git\n --port <n> Port SSH\n --identity <path> Fichier d'identité SSH\n --ssh-option <opt> Option SSH -o supplémentaire (répétable)\n --no-focus Ouvrir l'espace de travail sans y basculer\n\nExemples :\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "Précédent et Suivant ramènent aussi aux volets et aux onglets précédents." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nينقل جلسة Claude Code متوقفة إلى جهاز آخر ويستأنفها هناك.\nأغلق الوكيل أولًا: يُرفض النقل ما دامت الجلسة تعمل على أي من الجانبين.\n\nينقل الأمر:\n - checkout الخاص بـ git في cwd: HEAD (على الفرع نفسه عندما يكون ذلك آمنًا) والملفات المعدّلة\n والمحذوفة وغير المتتبعة وغير المتجاهلة؛ ويُضاف worktree عندما يوجد المستودع في الوجهة\n ولا يوجد المسار\n - نص الجلسة ودليل الجلسة وسجل الملفات ودليل ذاكرة المشروع\n (مدمج في الاتجاهين، الأحدث يفوز، ولا يُحذف شيء)\n\nثم يفتح مساحة عمل في الوجهة (`cmux ssh` لمضيف، أو مساحة عمل محلية لـ `local`)\nتستأنف الجلسة بالمشغّل المسجّل لها. عندما لا يكون المجلد الرئيسي في الوجهة\nعلى المسار المطلق نفسه، تُحوَّل المسارات داخله\nويُعاد إنشاء slug للمشروع.\n\nالخيارات:\n --to <destination> وجهة SSH (user@host أو اسم مستعار من ssh_config)، أو local\n --from <destination> مكان الجلسة الآن (الافتراضي: حيث وضعها آخر نقل، وإلا local)\n --name <title> عنوان مساحة العمل (الافتراضي: أول 8 أحرف من المعرّف)\n --no-code لا تنقل checkout الخاص بـ git\n --port <n> منفذ SSH\n --identity <path> ملف هوية SSH\n --ssh-option <opt> خيار SSH إضافي -o (قابل للتكرار)\n --no-focus افتح مساحة العمل دون التبديل إليها\n\nأمثلة:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "ينتقل «رجوع» و«تقدم» أيضًا إلى الأجزاء وعلامات التبويب السابقة." } }, "es": { "stringUnit": { "state": "translated", - "value": "Uso: cmux session move <session-id> --to <ssh-destination|local> [options]\n\nMueve una sesión detenida de Claude Code a otra máquina y la reanuda allí.\nSal primero del agente: el movimiento se rechaza mientras la sesión se ejecute en cualquiera de los lados.\n\nEl movimiento lleva:\n - el checkout de git del cwd: HEAD (en la misma rama cuando es seguro) más los archivos\n modificados, eliminados y sin seguimiento no ignorados; se añade un worktree cuando el\n repositorio existe en el destino pero la ruta no\n - la transcripción, su directorio de sesión, el historial de archivos y la memoria del\n proyecto (combinada en ambos sentidos, gana la más reciente, no se borra nada)\n\nDespués abre un espacio de trabajo en el destino (`cmux ssh` para un host, uno local para\n`local`) que reanuda la sesión con su lanzador registrado. Cuando el home del destino no está\nen la misma ruta absoluta, las rutas bajo él se convierten\ny el proyecto recibe un nuevo slug.\n\nOpciones:\n --to <destination> Destino SSH (user@host o alias de ssh_config), o local\n --from <destination> Dónde está la sesión ahora (por defecto: donde la dejó el último movimiento, si no local)\n --name <title> Título del espacio de trabajo (por defecto: los primeros 8 caracteres del id)\n --no-code No llevar el checkout de git\n --port <n> Puerto SSH\n --identity <path> Archivo de identidad SSH\n --ssh-option <opt> Opción SSH -o adicional (repetible)\n --no-focus Abrir el espacio de trabajo sin cambiar a él\n\nEjemplos:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "Atrás y Adelante también vuelven a los paneles y pestañas anteriores." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "用法: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n將已停止的 Claude Code 工作階段移到另一台機器並在那裡恢復。\n請先結束代理:只要工作階段仍在任一端執行,移動就會被拒絕。\n\n移動會帶上:\n - cwd 的 git checkout:HEAD(安全時使用同一分支)加上已修改、已刪除\n 和未追蹤且未忽略的檔案;若目的地有儲存庫\n 但沒有該路徑,會新增 worktree\n - 對話紀錄、其工作階段目錄、檔案歷史與專案記憶目錄\n (雙向合併,較新者優先,不刪除任何內容)\n\n接著在目的地開啟工作區(主機用 `cmux ssh`,`local` 則開本機工作區),\n以記錄的啟動器恢復工作階段。\n若目的地的主目錄不在相同的絕對路徑,其下的路徑會被對應,\n專案也會重新產生 slug。\n\n選項:\n --to <destination> SSH 目的地(user@host 或 ssh_config 別名),或 local\n --from <destination> 工作階段目前所在位置(預設:上次移動所放的位置,否則為 local)\n --name <title> 工作區標題(預設:ID 的前 8 個字元)\n --no-code 不帶上 git checkout\n --port <n> SSH 連接埠\n --identity <path> SSH 身分檔案\n --ssh-option <opt> 額外的 SSH -o 選項(可重複)\n --no-focus 開啟工作區但不切換過去\n\n範例:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "使用「返回」與「前進」時,也會回到先前的窗格與標籤頁。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n将已停止的 Claude Code 会话移到另一台机器并在那里恢复。\n请先退出代理:只要会话仍在任一端运行,移动就会被拒绝。\n\n移动会带上:\n - cwd 的 git 检出:HEAD(安全时使用同一分支)以及已修改、已删除\n 和未跟踪且未忽略的文件;若目标上有仓库\n 但没有该路径,会添加 worktree\n - 会话记录、其会话目录、文件历史和项目记忆目录\n (双向合并,较新者优先,不删除任何内容)\n\n随后在目标上打开工作区(主机用 `cmux ssh`,`local` 则打开本地工作区),\n用记录的启动器恢复会话。\n若目标的主目录不在相同的绝对路径,其下的路径会被映射,\n项目也会重新生成 slug。\n\n选项:\n --to <destination> SSH 目标(user@host 或 ssh_config 别名),或 local\n --from <destination> 会话当前所在位置(默认:上次移动放置的位置,否则为 local)\n --name <title> 工作区标题(默认:ID 的前 8 个字符)\n --no-code 不带上 git 检出\n --port <n> SSH 端口\n --identity <path> SSH 身份文件\n --ssh-option <opt> 额外的 SSH -o 选项(可重复)\n --no-focus 打开工作区但不切换过去\n\n示例:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "“后退”和“前进”也会回到之前的窗格和标签页。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용법: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n중지된 Claude Code 세션을 다른 머신으로 옮기고 그곳에서 재개합니다.\n먼저 에이전트를 종료하세요. 어느 쪽에서든 세션이 실행 중이면 이동이 거부됩니다.\n\n이동하는 항목:\n - cwd의 git 체크아웃: HEAD(안전하면 같은 브랜치)와 수정, 삭제,\n 무시되지 않은 추적 안 된 파일. 대상에 저장소는 있지만\n 경로가 없으면 worktree를 추가합니다\n - 트랜스크립트, 세션 디렉터리, 파일 기록, 프로젝트 메모리 디렉터리\n (양방향 병합, 최신 우선, 삭제 없음)\n\n그런 다음 대상에서 작업 공간(호스트는 `cmux ssh`, `local`은 로컬 작업 공간)을 열고\n기록된 런처로 세션을 재개합니다.\n대상의 홈이 같은 절대 경로에 있지 않으면 홈 아래 경로를 변환하고\n프로젝트 slug를 다시 만듭니다.\n\n옵션:\n --to <destination> SSH 대상(user@host 또는 ssh_config 별칭) 또는 local\n --from <destination> 세션의 현재 위치(기본값: 마지막 이동으로 옮긴 곳, 없으면 local)\n --name <title> 작업 공간 제목(기본값: ID의 처음 8자)\n --no-code git 체크아웃을 옮기지 않음\n --port <n> SSH 포트\n --identity <path> SSH ID 파일\n --ssh-option <opt> 추가 SSH -o 옵션(반복 가능)\n --no-focus 작업 공간으로 전환하지 않고 열기\n\n예시:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "뒤로 가기와 앞으로 가기로 이전 분할 창과 탭에도 돌아갈 수 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux session move <session-id> --to <ssh-destination|local> [options]\n\n停止した Claude Code セッションを別のマシンへ移動し、そこで再開します。\n先にエージェントを終了してください。どちらかでセッションが実行中の間は移動を拒否します。\n\n移動する内容:\n - cwd の git チェックアウト: HEAD (安全なら同じブランチ) と、変更・削除されたファイル、\n 無視されていない未追跡ファイル。移動先にリポジトリはあるが\n パスがない場合は worktree を追加します\n - トランスクリプト、セッションディレクトリ、ファイル履歴、プロジェクトのメモリディレクトリ\n (双方向にマージ、新しいほうを優先、削除はしません)\n\nその後、移動先でワークスペース (ホストなら `cmux ssh`、`local` ならローカルのワークスペース) を\n開き、記録されたランチャーでセッションを再開します。\n移動先のホームが同じ絶対パスにない場合は、ホーム配下のパスを変換し、\nプロジェクトの slug を作り直します。\n\nオプション:\n --to <destination> SSH 接続先 (user@host または ssh_config のエイリアス)、または local\n --from <destination> セッションの現在の場所 (既定: 前回の移動先、なければ local)\n --name <title> ワークスペースのタイトル (既定: ID の先頭 8 文字)\n --no-code git チェックアウトを移動しない\n --port <n> SSH ポート\n --identity <path> SSH の ID ファイル\n --ssh-option <opt> 追加の SSH -o オプション (繰り返し可)\n --no-focus ワークスペースに切り替えずに開く\n\n例:\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to dev@my-host\n cmux session move 0b7a1e7c-3f0a-4c6e-9d59-8a0d8f7c2b11 --to local" + "value": "「戻る」と「進む」で、以前のペインやタブにも戻れます。" } } } }, - "settings.notifications.sound.preview": { + "settings.app.globalFontMagnification.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Preview Sound" + "value": "Scales all text in cmux. Command-Plus and Command-Minus still zoom the focused pane." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ton anhören" + "value": "Ändert die Größe des gesamten Texts in cmux. Mit Befehlstaste-Plus und Befehlstaste-Minus lässt sich das fokussierte Teilfenster weiterhin zoomen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Écouter le son" + "value": "Modifie la taille de tout le texte de cmux. Commande + Plus et Commande + Moins continuent de régler le zoom du volet actif." } }, "ar": { "stringUnit": { "state": "translated", - "value": "معاينة الصوت" + "value": "يغيّر حجم جميع النصوص في cmux. ولا يزال الاختصاران Command-علامة الجمع وCommand-علامة الطرح يكبّران الجزء المركّز عليه ويصغّرانه." } }, "es": { "stringUnit": { "state": "translated", - "value": "Escuchar sonido" + "value": "Cambia el tamaño de todo el texto de cmux. Comando + Más y Comando + Menos siguen ajustando el zoom del panel enfocado." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "試聽音效" + "value": "調整 cmux 中所有文字的大小。Command + 加號和 Command + 減號仍可用來縮放目前聚焦的窗格。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "试听声音" + "value": "调整 cmux 中所有文本的大小。Command + 加号和 Command + 减号仍可用于缩放当前聚焦的窗格。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "소리 미리 듣기" + "value": "cmux의 모든 텍스트 크기를 조절합니다. 포커스된 분할 창은 계속 Command-더하기와 Command-빼기로 확대/축소할 수 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "サウンドをプレビュー" + "value": "cmux 内のすべてのテキストの大きさを変更します。フォーカス中のペインは、これまでどおり Command + プラスと Command + マイナスで拡大縮小できます。" } } } }, - "cli.session.error.unknownSubcommand": { + "settings.app.hideAllSidebarDetails.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Unknown session subcommand: %@. Usage: cmux session move <session-id> --to <ssh-destination|local>" + "value": "Shows only workspace titles in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أمر session فرعي غير معروف: %@. الاستخدام: cmux session move <session-id> --to <ssh-destination|local>" + "value": "Zeigt in der Seitenleiste nur die Titel der Arbeitsbereiche an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Unbekannter session-Unterbefehl: %@. Verwendung: cmux session move <session-id> --to <ssh-destination|local>" + "value": "Affiche uniquement les titres des espaces de travail dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Subcomando de session desconocido: %@. Uso: cmux session move <session-id> --to <ssh-destination|local>" + "value": "يعرض عناوين مساحات العمل فقط في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Sous-commande session inconnue : %@. Utilisation : cmux session move <session-id> --to <ssh-destination|local>" + "value": "Muestra solo los títulos de los espacios de trabajo en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "不明な session サブコマンド: %@。使用方法: cmux session move <session-id> --to <ssh-destination|local>" + "value": "側邊欄只顯示工作區標題。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "알 수 없는 session 하위 명령: %@. 사용법: cmux session move <session-id> --to <ssh-destination|local>" + "value": "侧边栏只显示工作区标题。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "未知的 session 子命令:%@。用法:cmux session move <session-id> --to <ssh-destination|local>" + "value": "사이드바에 워크스페이스 제목만 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "未知的 session 子命令:%@。用法:cmux session move <session-id> --to <ssh-destination|local>" + "value": "サイドバーにワークスペースのタイトルだけを表示します。" } } } }, - "cli.session.move.error.branchDiverged": { + "settings.app.hideTabCloseButton.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: branch %@ on the destination has commits the session's HEAD does not contain" + "value": "Removes the close button from tabs." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: الفرع %@ في الوجهة يحتوي على commits غير موجودة في HEAD الخاص بالجلسة" + "value": "Tabs werden ohne Schließen-Taste angezeigt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Der Branch %@ am Ziel enthält Commits, die im HEAD der Sitzung fehlen" + "value": "Les onglets s’affichent sans bouton de fermeture." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: la rama %@ en el destino tiene commits que el HEAD de la sesión no contiene" + "value": "تظهر علامات التبويب دون زر إغلاق." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : la branche %@ sur la destination contient des commits absents du HEAD de la session" + "value": "Las pestañas se muestran sin el botón de cerrar." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 移動先のブランチ %@ にセッションの HEAD に含まれないコミットがあります" + "value": "標籤頁上不顯示關閉按鈕。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 대상의 %@ 브랜치에 세션 HEAD에 없는 커밋이 있습니다" + "value": "标签页上不显示关闭按钮。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:目标上的分支 %@ 包含会话 HEAD 中没有的提交" + "value": "탭에 닫기 버튼을 표시하지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:目的地的分支 %@ 含有此工作階段 HEAD 沒有的 commit" + "value": "タブの閉じるボタンを非表示にします。" } } } }, - "cli.session.move.error.checkoutDirty": { + "settings.app.minimalMode.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: %@ on the destination has changes that did not come from this session; commit or stash them there first" + "value": "Hides the workspace title bar and shows its controls in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: يحتوي %@ في الوجهة على تغييرات لم تأتِ من هذه الجلسة؛ نفّذ commit لها أو stash هناك أولًا" + "value": "Blendet die Titelleiste des Arbeitsbereichs aus und zeigt ihre Steuerelemente in der Seitenleiste an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: %@ am Ziel hat Änderungen, die nicht aus dieser Sitzung stammen; committe oder stashe sie dort zuerst" + "value": "Masque la barre de titre de l’espace de travail et affiche ses commandes dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: %@ en el destino tiene cambios que no provienen de esta sesión; haz commit o stash allí primero" + "value": "يخفي شريط عنوان مساحة العمل ويعرض عناصر التحكم الخاصة به في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : %@ sur la destination contient des modifications qui ne viennent pas de cette session ; validez-les ou mettez-les de côté (stash) d'abord" + "value": "Oculta la barra de título del espacio de trabajo y muestra sus controles en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 移動先の %@ にこのセッション由来ではない変更があります。先にそこでコミットまたは stash してください" + "value": "隱藏工作區標題列,改在側邊欄中顯示其控制項。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 대상의 %@에 이 세션에서 오지 않은 변경 사항이 있습니다. 먼저 그곳에서 커밋하거나 stash하세요" + "value": "隐藏工作区标题栏,改为在侧边栏中显示其控件。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:目标上的 %@ 有并非来自此会话的更改;请先在那里提交或 stash" + "value": "워크스페이스 제목 막대를 숨기고, 제목 막대의 컨트롤을 사이드바에 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:目的地的 %@ 有不是來自此工作階段的變更;請先在那裡 commit 或 stash" + "value": "ワークスペースのタイトルバーを非表示にし、そのコントロールをサイドバーに表示します。" } } } }, - "cli.session.move.error.copyFailed": { + "settings.app.newWorkspacePlacement.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: copying %@ failed: %@" + "value": "Choose where new workspaces appear in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: فشل نسخ %1$@: %2$@" + "value": "Wählen Sie, wo neue Arbeitsbereiche in der Seitenleiste erscheinen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Kopieren von %1$@ fehlgeschlagen: %2$@" + "value": "Choisissez où les nouveaux espaces de travail apparaissent dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: no se pudo copiar %1$@: %2$@" + "value": "اختر مكان ظهور مساحات العمل الجديدة في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : échec de la copie de %1$@ : %2$@" + "value": "Elige dónde aparecen los nuevos espacios de trabajo en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: %1$@ のコピーに失敗しました: %2$@" + "value": "選擇新工作區要顯示在側邊欄的哪個位置。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: %1$@ 복사 실패: %2$@" + "value": "选择新工作区在侧边栏中的显示位置。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:复制 %1$@ 失败:%2$@" + "value": "새 작업 공간을 사이드바의 어디에 표시할지 선택합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:複製 %1$@ 失敗:%2$@" + "value": "新しいワークスペースをサイドバーのどこに表示するかを選択します。" } } } }, - "cli.session.move.error.cwdMissing": { + "settings.app.openSidebarPRLinks.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: %@ does not exist on the destination" + "value": "Clicking a pull request link in the sidebar opens it in the cmux browser." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: %@ غير موجود في الوجهة" + "value": "Pull-Request-Links in der Seitenleiste werden per Klick im cmux-Browser geöffnet." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: %@ existiert am Ziel nicht" + "value": "Un clic sur un lien de pull request de la barre latérale l’ouvre dans le navigateur cmux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: %@ no existe en el destino" + "value": "تُفتح روابط طلبات السحب في الشريط الجانبي في متصفح cmux عند النقر عليها." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : %@ n'existe pas sur la destination" + "value": "Los enlaces de pull request de la barra lateral se abren en el navegador de cmux al hacer clic en ellos." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 移動先に %@ が存在しません" + "value": "側邊欄中的 PR 連結會在 cmux 瀏覽器中開啟。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 대상에 %@이(가) 없습니다" + "value": "侧边栏中的 PR 链接会在 cmux 浏览器中打开。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:目标上不存在 %@" + "value": "사이드바의 풀 리퀘스트 링크를 클릭하면 cmux 브라우저에서 열립니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:目的地上不存在 %@" + "value": "サイドバーのプルリクエストのリンクをクリックすると、cmuxブラウザで開きます。" } } } }, - "cli.session.move.error.flagRequiresValue": { + "settings.app.openSidebarPortLinks.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: %@ requires a value" + "value": "Clicking a port link in the sidebar opens it in the cmux browser." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: يتطلب %@ قيمة" + "value": "Port-Links in der Seitenleiste werden per Klick im cmux-Browser geöffnet." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: %@ benötigt einen Wert" + "value": "Un clic sur un lien de port de la barre latérale l’ouvre dans le navigateur cmux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: %@ requiere un valor" + "value": "تُفتح روابط المنافذ في الشريط الجانبي في متصفح cmux عند النقر عليها." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : %@ nécessite une valeur" + "value": "Los enlaces de puerto de la barra lateral se abren en el navegador de cmux al hacer clic en ellos." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: %@ には値が必要です" + "value": "側邊欄中的連接埠連結會在 cmux 瀏覽器中開啟。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: %@에는 값이 필요합니다" + "value": "侧边栏中的端口链接会在 cmux 浏览器中打开。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:%@ 需要一个值" + "value": "사이드바의 포트 링크를 클릭하면 cmux 브라우저에서 열립니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:%@ 需要一個值" + "value": "サイドバーのポートリンクをクリックすると、cmuxブラウザで開きます。" } } } }, - "cli.session.move.error.gitFailed": { + "settings.app.paneFirstClickFocus.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: git %@ failed: %@" + "value": "Clicking a pane while cmux is in the background focuses that pane right away." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: فشل git %1$@: %2$@" + "value": "Ist cmux im Hintergrund, wird ein Teilfenster schon beim ersten Klick fokussiert." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: git %1$@ fehlgeschlagen: %2$@" + "value": "Lorsque cmux est en arrière-plan, un clic sur un volet l’active immédiatement." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: falló git %1$@: %2$@" + "value": "عندما يكون cmux في الخلفية، يكفي النقر على جزء للتركيز عليه فورًا." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : échec de git %1$@ : %2$@" + "value": "Si cmux está en segundo plano, un clic en un panel lo enfoca de inmediato." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: git %1$@ に失敗しました: %2$@" + "value": "即使 cmux 在背景執行,按一下窗格也會立即將焦點移到該窗格。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: git %1$@ 실패: %2$@" + "value": "即使 cmux 在后台,点按窗格也会立即将焦点移到该窗格。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:git %1$@ 失败:%2$@" + "value": "cmux가 백그라운드에 있어도 분할 창을 클릭하면 바로 그 분할 창에 포커스가 이동합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:git %1$@ 失敗:%2$@" + "value": "cmux がバックグラウンドにあっても、ペインをクリックするとすぐにそのペインにフォーカスが移ります。" } } } }, - "cli.session.move.error.invalidSessionID": { + "settings.app.pathLastSegmentOnly.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: '%@' is not a session id" + "value": "Shortens long paths from the start to keep their end visible." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: '%@' ليس معرّف جلسة" + "value": "Kürzt lange Pfade am Anfang, damit ihr Ende sichtbar bleibt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: „%@“ ist keine Sitzungs-ID" + "value": "Raccourcit les chemins longs par le début pour que leur fin reste visible." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: '%@' no es un id de sesión" + "value": "يختصر المسارات الطويلة من بدايتها لتبقى نهايتها ظاهرة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : '%@' n'est pas un identifiant de session" + "value": "Acorta las rutas largas por el inicio para que su final siga visible." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: '%@' はセッション ID ではありません" + "value": "長路徑會省略開頭,保留結尾部分。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: '%@'은(는) 세션 ID가 아닙니다" + "value": "长路径会省略开头,保留结尾部分。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:'%@' 不是会话 ID" + "value": "긴 경로는 앞부분을 생략하여 끝부분이 보이게 합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:'%@' 不是工作階段 ID" + "value": "長いパスは先頭を省略して、末尾が見えるようにします。" } } } }, - "cli.session.move.error.liveOnDestination": { + "settings.app.renameSelectsName.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: the session is already running on %@" + "value": "Renaming from the command palette selects the current name." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: الجلسة قيد التشغيل بالفعل على %@" + "value": "Beim Umbenennen über die Befehlspalette ist der aktuelle Name bereits ausgewählt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Die Sitzung läuft bereits auf %@" + "value": "Lors d’un renommage depuis la palette de commandes, le nom actuel est sélectionné." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: la sesión ya se está ejecutando en %@" + "value": "عند إعادة التسمية من لوحة الأوامر، يكون الاسم الحالي محددًا." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : la session s'exécute déjà sur %@" + "value": "Al cambiar el nombre desde la paleta de comandos, el nombre actual aparece seleccionado." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: セッションはすでに %@ で実行中です" + "value": "從命令面板重新命名時,會選取目前的名稱。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 세션이 이미 %@에서 실행 중입니다" + "value": "从命令面板重命名时,会选中当前名称。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:会话已在 %@ 上运行" + "value": "명령어 팔레트에서 이름을 변경할 때 현재 이름이 선택된 상태로 표시됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:此工作階段已在 %@ 上執行" + "value": "コマンドパレットで名前を変更するとき、現在の名前が選択された状態になります。" } } } }, - "cli.session.move.error.liveOnSource": { + "settings.app.sidebarBranchLayout.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: the session is still running on %@; exit the agent at the end of its turn, then move it" + "value": "Choose whether branches share one line or each get their own line." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: الجلسة لا تزال قيد التشغيل على %@؛ أغلق الوكيل عند نهاية دوره ثم انقلها" + "value": "Wählen Sie, ob sich Branches eine Zeile teilen oder jeweils eine eigene Zeile erhalten." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Die Sitzung läuft noch auf %@; beende den Agenten am Ende seines Zuges und verschiebe sie dann" + "value": "Choisissez si les branches partagent une même ligne ou ont chacune leur propre ligne." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: la sesión sigue ejecutándose en %@; sal del agente al final de su turno y luego muévela" + "value": "اختر ما إذا كانت الفروع تتشارك سطرًا واحدًا أو يحصل كل منها على سطر خاص به." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : la session s'exécute encore sur %@ ; quittez l'agent à la fin de son tour, puis déplacez-la" + "value": "Elige si las ramas comparten una sola línea o cada una ocupa su propia línea." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: セッションはまだ %@ で実行中です。ターンの終わりにエージェントを終了してから移動してください" + "value": "選擇分支要共用一行,還是各自獨立一行。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 세션이 아직 %@에서 실행 중입니다. 에이전트가 턴을 마치면 종료한 뒤 이동하세요" + "value": "选择分支是共用一行,还是各占一行。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:会话仍在 %@ 上运行;请在代理本轮结束后退出,再移动" + "value": "브랜치를 한 줄에 함께 표시할지, 각각 별도의 줄에 표시할지 선택합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:此工作階段仍在 %@ 上執行;請在代理完成本輪後結束它,再移動" + "value": "ブランチを 1 行にまとめて表示するか、それぞれ別の行に表示するかを選択します。" } } } }, - "cli.session.move.error.repositoryMissing": { + "settings.app.stackBranchDirectory.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: no checkout at %@ and no repository at %@ on the destination; clone it there first" + "value": "Shows the branch and directory on separate lines." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: لا يوجد checkout في %1$@ ولا مستودع في %2$@ على الوجهة؛ انسخه (clone) هناك أولًا" + "value": "Zeigt Branch und Verzeichnis in getrennten Zeilen an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Am Ziel gibt es keinen Checkout unter %1$@ und kein Repository unter %2$@; klone es dort zuerst" + "value": "Affiche la branche et le répertoire sur des lignes distinctes." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: no hay checkout en %1$@ ni repositorio en %2$@ en el destino; clónalo allí primero" + "value": "يعرض الفرع والدليل في سطرين منفصلين." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : aucun checkout à %1$@ et aucun dépôt à %2$@ sur la destination ; clonez-le d'abord" + "value": "Muestra la rama y el directorio en líneas separadas." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 移動先の %1$@ にチェックアウトがなく、%2$@ にリポジトリもありません。先にそこでクローンしてください" + "value": "分支與目錄分行顯示。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 대상의 %1$@에 체크아웃이 없고 %2$@에 저장소도 없습니다. 먼저 그곳에 클론하세요" + "value": "分支和目录分行显示。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:目标上 %1$@ 没有检出,%2$@ 也没有仓库;请先在那里克隆" + "value": "브랜치와 디렉터리를 각각 다른 줄에 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:目的地的 %1$@ 沒有 checkout,%2$@ 也沒有儲存庫;請先在那裡 clone" + "value": "ブランチとディレクトリを別々の行に表示します。" } } } }, - "cli.session.move.error.sameEndpoint": { + "settings.app.warnBeforeClosingTab.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: the session is already there" + "value": "Closing a tab asks for confirmation first." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: الجلسة موجودة هناك بالفعل" + "value": "Beim Schließen eines Tabs wird zuerst nach einer Bestätigung gefragt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Die Sitzung ist bereits dort" + "value": "Une confirmation est demandée avant la fermeture d’un onglet." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: la sesión ya está allí" + "value": "يُطلب التأكيد قبل إغلاق علامة التبويب." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : la session y est déjà" + "value": "Se pide confirmación antes de cerrar una pestaña." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: セッションはすでにそこにあります" + "value": "關閉標籤頁前先要求確認。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 세션이 이미 그곳에 있습니다" + "value": "关闭标签页前先要求确认。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:会话已经在那里" + "value": "탭을 닫기 전에 확인을 요청합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:此工作階段已經在那裡" + "value": "タブを閉じる前に確認します。" } } } }, - "cli.session.move.error.transcriptNewer": { + "settings.app.warnBeforeClosingTabXButton.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: the destination transcript is newer; the session continued there, so move it the other way" + "value": "Clicking a tab's close button asks for confirmation first." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: نص الجلسة في الوجهة أحدث؛ استمرت الجلسة هناك، لذا انقلها في الاتجاه الآخر" + "value": "Beim Klicken auf die Schließen-Taste eines Tabs wird zuerst nach einer Bestätigung gefragt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Das Transkript am Ziel ist neuer; die Sitzung wurde dort fortgesetzt, verschiebe sie also in die andere Richtung" + "value": "Une confirmation est demandée avant la fermeture d’un onglet avec son bouton de fermeture." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: la transcripción del destino es más reciente; la sesión continuó allí, así que muévela en sentido contrario" + "value": "يُطلب التأكيد قبل إغلاق علامة التبويب بالنقر على زر الإغلاق الخاص بها." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : la transcription de destination est plus récente ; la session s'y est poursuivie, déplacez-la dans l'autre sens" + "value": "Se pide confirmación antes de cerrar una pestaña con su botón de cerrar." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 移動先のトランスクリプトのほうが新しいです。セッションはそこで続行されたので、逆方向に移動してください" + "value": "按一下標籤頁上的關閉按鈕後,會先要求確認再關閉。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 대상의 트랜스크립트가 더 최신입니다. 세션이 그곳에서 계속되었으니 반대 방향으로 이동하세요" + "value": "点按标签页上的关闭按钮后,会先要求确认再关闭。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:目标上的记录更新;会话已在那里继续,请反向移动" + "value": "탭의 닫기 버튼을 클릭하면 탭을 닫기 전에 확인을 요청합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:目的地的對話紀錄較新;工作階段已在那裡繼續,請反向移動" + "value": "タブの閉じるボタンをクリックしたとき、閉じる前に確認します。" } } } }, - "cli.session.move.error.transcriptNotFound": { + "settings.app.warnBeforeQuit.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: no Claude transcript for this session on %@" + "value": "Choose when quitting with Command-Q asks for confirmation. Dirty Only asks only when a workspace would ask before closing." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: لا يوجد نص Claude لهذه الجلسة على %@" + "value": "Wählen Sie, wann beim Beenden mit Befehlstaste-Q nach einer Bestätigung gefragt wird. „Nur bei Bedarf“ fragt nur, wenn ein Arbeitsbereich vor dem Schließen nachfragen würde." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Kein Claude-Transkript für diese Sitzung auf %@" + "value": "Choisissez quand une confirmation est demandée pour quitter avec Commande + Q. « Si nécessaire » ne la demande que si un espace de travail la demanderait avant sa fermeture." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: no hay transcripción de Claude para esta sesión en %@" + "value": "اختر متى يُطلب التأكيد عند الإنهاء باستخدام Command-Q. يطلب خيار «عند الحاجة فقط» التأكيد فقط عندما تطلبه مساحة عمل قبل إغلاقها." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : aucune transcription Claude pour cette session sur %@" + "value": "Elige cuándo se pide confirmación al salir con Comando + Q. «Solo si hace falta» solo la pide cuando un espacio de trabajo la pediría antes de cerrarse." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: %@ にこのセッションの Claude トランスクリプトがありません" + "value": "選擇按 Command + Q 結束時,在什麼情況下要求確認。「僅在需要時」只會在某個工作區關閉前需要確認時才詢問。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: %@에 이 세션의 Claude 트랜스크립트가 없습니다" + "value": "选择按 Command + Q 退出时,在什么情况下要求确认。“仅在需要时”只会在某个工作区关闭前需要确认时才询问。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:%@ 上没有此会话的 Claude 记录" + "value": "Command-Q로 종료할 때 확인을 요청할 조건을 선택합니다. ‘필요 시에만’은 닫기 전에 확인이 필요한 작업 공간이 있을 때만 확인을 요청합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:%@ 上沒有此工作階段的 Claude 對話紀錄" + "value": "Command + Q で終了するときに、どのような場合に確認するかを選択します。「必要時のみ」では、閉じる前に確認が必要なワークスペースがある場合だけ確認します。" } } } }, - "cli.session.move.error.transcriptsDiverged": { + "settings.app.workspaceInheritWorkingDirectory.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: the transcripts diverged (the destination copy is not a prefix of the source); resolve by hand" + "value": "Starts new workspaces in the working directory of the current workspace." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: تباعدت النصوص (نسخة الوجهة ليست بادئة للمصدر)؛ عالج ذلك يدويًا" + "value": "Startet neue Arbeitsbereiche im Arbeitsverzeichnis des aktuellen Arbeitsbereichs." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Die Transkripte sind auseinandergelaufen (die Kopie am Ziel ist kein Präfix der Quelle); bitte manuell auflösen" + "value": "Ouvre les nouveaux espaces de travail dans le répertoire de travail de l’espace de travail actuel." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: las transcripciones divergieron (la copia del destino no es un prefijo del origen); resuélvelo a mano" + "value": "يبدأ مساحات العمل الجديدة في دليل العمل الخاص بمساحة العمل الحالية." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : les transcriptions ont divergé (la copie de destination n'est pas un préfixe de la source) ; résolvez manuellement" + "value": "Inicia los nuevos espacios de trabajo en el directorio de trabajo del espacio de trabajo actual." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: トランスクリプトが分岐しました (移動先のコピーが元の先頭部分ではありません)。手動で解決してください" + "value": "新工作區會沿用目前工作區的工作目錄。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 트랜스크립트가 갈라졌습니다(대상 사본이 원본의 접두사가 아님). 직접 해결하세요" + "value": "新工作区会沿用当前工作区的工作目录。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:记录已分叉(目标副本不是源的前缀);请手动处理" + "value": "새 작업 공간은 현재 작업 공간의 작업 디렉터리에서 시작됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:對話紀錄已分歧(目的地的副本不是來源的前綴);請手動處理" + "value": "新しいワークスペースは、現在のワークスペースと同じ作業ディレクトリで開始します。" } } } }, - "cli.session.move.error.unknownFlag": { + "settings.app.wrapWorkspaceTitles.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: unknown flag '%@'" + "value": "Shows long workspace titles in full on multiple lines." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: علم غير معروف '%@'" + "value": "Zeigt lange Arbeitsbereichstitel vollständig in mehreren Zeilen an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: unbekanntes Flag „%@“" + "value": "Affiche en entier les titres longs des espaces de travail sur plusieurs lignes." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: opción desconocida '%@'" + "value": "يعرض عناوين مساحات العمل الطويلة كاملةً على عدة أسطر." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : option inconnue '%@'" + "value": "Muestra completos los títulos largos de los espacios de trabajo en varias líneas." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 不明なフラグ '%@'" + "value": "較長的工作區標題會換行完整顯示。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 알 수 없는 플래그 '%@'" + "value": "较长的工作区标题会换行完整显示。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:未知标志 '%@'" + "value": "긴 워크스페이스 제목을 줄바꿈하여 모두 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:未知的旗標 '%@'" + "value": "長いワークスペースタイトルを省略せずに複数行で表示します。" } } } }, - "cli.session.move.error.unknownSource": { + "settings.automation.amp.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: no record of where this session was moved; pass --from <ssh-destination>" + "value": "Shows Amp status and notifications in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: لا يوجد سجل بالمكان الذي نُقلت إليه هذه الجلسة؛ مرّر --from <ssh-destination>" + "value": "Zeigt den Status und die Benachrichtigungen von Amp in der Seitenleiste an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Kein Eintrag, wohin diese Sitzung verschoben wurde; gib --from <ssh-destination> an" + "value": "Affiche l’état et les notifications d’Amp dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: no hay registro de adónde se movió esta sesión; pasa --from <ssh-destination>" + "value": "يعرض حالة Amp وإشعاراته في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : aucune trace de l'endroit où cette session a été déplacée ; passez --from <ssh-destination>" + "value": "Muestra el estado y las notificaciones de Amp en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: このセッションの移動先の記録がありません。--from <ssh-destination> を指定してください" + "value": "在側邊欄中顯示 Amp 的狀態與通知。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 이 세션을 어디로 옮겼는지 기록이 없습니다. --from <ssh-destination>을 지정하세요" + "value": "在侧边栏中显示 Amp 的状态和通知。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:没有此会话被移动到何处的记录;请传入 --from <ssh-destination>" + "value": "사이드바에 Amp 상태와 알림을 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:沒有此工作階段被移到何處的紀錄;請傳入 --from <ssh-destination>" + "value": "サイドバーにAmpのステータスと通知を表示します。" } } } }, - "cli.session.move.error.unreachable": { + "settings.automation.autoNamingAgent.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: cannot reach %@: %@" + "value": "Automatic uses each session's own agent. Other supported agents need their command-line tool on the PATH." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: تعذّر الوصول إلى %1$@: %2$@" + "value": "„Automatisch“ verwendet den Agenten der jeweiligen Sitzung. Andere unterstützte Agenten benötigen ihr Befehlszeilentool im PATH." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: %1$@ ist nicht erreichbar: %2$@" + "value": "« Automatique » utilise l’agent propre à chaque session. Les autres agents pris en charge nécessitent que leur outil en ligne de commande soit dans le PATH." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: no se puede acceder a %1$@: %2$@" + "value": "يستخدم خيار «تلقائي» الوكيل الخاص بكل جلسة. يحتاج الوكلاء المدعومون الآخرون إلى وجود أداة سطر الأوامر الخاصة بهم في PATH." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : impossible de joindre %1$@ : %2$@" + "value": "«Automático» usa el agente de cada sesión. Los demás agentes compatibles necesitan su herramienta de línea de comandos en el PATH." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: %1$@ に接続できません: %2$@" + "value": "「自動」會使用各工作階段本身的代理。若要使用其他支援的代理,其命令列工具必須位於 PATH 中。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: %1$@에 연결할 수 없습니다: %2$@" + "value": "“自动”会使用各会话自身的代理。要使用其他受支持的代理,其命令行工具必须位于 PATH 中。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:无法连接 %1$@:%2$@" + "value": "‘자동’은 세션마다 해당 세션의 에이전트를 사용합니다. 지원되는 다른 에이전트를 사용하려면 해당 명령줄 도구가 PATH에 있어야 합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:無法連線到 %1$@:%2$@" + "value": "「自動」では、各セッションのエージェントを使用します。ほかの対応エージェントを使うには、そのコマンドラインツールが PATH に含まれている必要があります。" } } } }, - "cli.session.move.error.unsupportedPath": { + "settings.automation.claudeCode.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: paths with whitespace are not supported: %@" + "value": "Shows Claude Code status and notifications in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: المسارات التي تحتوي على مسافات غير مدعومة: %@" + "value": "Zeigt den Status und die Benachrichtigungen von Claude Code in der Seitenleiste an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Pfade mit Leerzeichen werden nicht unterstützt: %@" + "value": "Affiche l’état et les notifications de Claude Code dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: no se admiten rutas con espacios: %@" + "value": "يعرض حالة Claude Code وإشعاراته في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : les chemins contenant des espaces ne sont pas pris en charge : %@" + "value": "Muestra el estado y las notificaciones de Claude Code en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 空白を含むパスはサポートされていません: %@" + "value": "在側邊欄中顯示 Claude Code 的狀態與通知。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 공백이 포함된 경로는 지원하지 않습니다: %@" + "value": "在侧边栏中显示 Claude Code 的状态和通知。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:不支持包含空白的路径:%@" + "value": "사이드바에 Claude Code 상태와 알림을 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:不支援含有空白的路徑:%@" + "value": "サイドバーにClaude Codeのステータスと通知を表示します。" } } } }, - "cli.session.move.error.unsupportedRoute": { + "settings.automation.codex.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: moves go between this Mac and one host; move the session back with --to local first" + "value": "Shows Codex status and notifications in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: يتم النقل بين هذا الـ Mac ومضيف واحد؛ أعد الجلسة أولًا باستخدام --to local" + "value": "Zeigt den Status und die Benachrichtigungen von Codex in der Seitenleiste an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Verschiebungen laufen zwischen diesem Mac und einem Host; verschiebe die Sitzung zuerst mit --to local zurück" + "value": "Affiche l’état et les notifications de Codex dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: los movimientos van entre este Mac y un host; primero devuelve la sesión con --to local" + "value": "يعرض حالة Codex وإشعاراته في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : les déplacements se font entre ce Mac et un hôte ; ramenez d'abord la session avec --to local" + "value": "Muestra el estado y las notificaciones de Codex en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 移動はこの Mac と 1 台のホストの間で行います。先に --to local でセッションを戻してください" + "value": "在側邊欄中顯示 Codex 的狀態與通知。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 이동은 이 Mac과 한 호스트 사이에서만 가능합니다. 먼저 --to local로 세션을 되돌리세요" + "value": "在侧边栏中显示 Codex 的状态和通知。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:移动只在这台 Mac 与一台主机之间进行;请先用 --to local 把会话移回" + "value": "사이드바에 Codex 상태와 알림을 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:移動只在這台 Mac 與一台主機之間進行;請先用 --to local 把工作階段移回來" + "value": "サイドバーにCodexのステータスと通知を表示します。" } } } }, - "cli.session.move.error.unsupportedSSHTarget": { + "settings.automation.cursor.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: unsupported SSH destination or option for '%@' (use user@host or an ssh_config alias, without whitespace)" + "value": "Shows Cursor status and notifications in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: وجهة أو خيار SSH غير مدعوم لـ '%@' (استخدم user@host أو اسمًا مستعارًا من ssh_config، بدون مسافات)" + "value": "Zeigt den Status und die Benachrichtigungen von Cursor in der Seitenleiste an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: nicht unterstütztes SSH-Ziel oder -Option für „%@“ (verwende user@host oder einen ssh_config-Alias, ohne Leerzeichen)" + "value": "Affiche l’état et les notifications de Cursor dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: destino u opción SSH no admitidos para '%@' (usa user@host o un alias de ssh_config, sin espacios)" + "value": "يعرض حالة Cursor وإشعاراته في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : destination ou option SSH non prise en charge pour '%@' (utilisez user@host ou un alias ssh_config, sans espaces)" + "value": "Muestra el estado y las notificaciones de Cursor en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: '%@' の SSH 接続先またはオプションはサポートされていません (空白なしの user@host か ssh_config のエイリアスを使ってください)" + "value": "在側邊欄中顯示 Cursor 的狀態與通知。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: '%@'에 대한 SSH 대상 또는 옵션을 지원하지 않습니다(공백 없이 user@host 또는 ssh_config 별칭 사용)" + "value": "在侧边栏中显示 Cursor 的状态和通知。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:'%@' 的 SSH 目标或选项不受支持(请使用 user@host 或 ssh_config 别名,且不含空白)" + "value": "사이드바에 Cursor 상태와 알림을 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:'%@' 的 SSH 目的地或選項不受支援(請使用 user@host 或 ssh_config 別名,且不含空白)" + "value": "サイドバーにCursorのステータスと通知を表示します。" } } } }, - "cli.session.move.error.usage": { + "settings.automation.gemini.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux session move <session-id> --to <ssh-destination|local>" + "value": "Shows Gemini CLI status and notifications in the sidebar." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux session move <session-id> --to <ssh-destination|local>" + "value": "Zeigt den Status und die Benachrichtigungen von Gemini CLI in der Seitenleiste an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux session move <session-id> --to <ssh-destination|local>" + "value": "Affiche l’état et les notifications de Gemini CLI dans la barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Uso: cmux session move <session-id> --to <ssh-destination|local>" + "value": "يعرض حالة Gemini CLI وإشعاراته في الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux session move <session-id> --to <ssh-destination|local>" + "value": "Muestra el estado y las notificaciones de Gemini CLI en la barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "使用方法: cmux session move <session-id> --to <ssh-destination|local>" + "value": "在側邊欄中顯示 Gemini CLI 的狀態與通知。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "사용법: cmux session move <session-id> --to <ssh-destination|local>" + "value": "在侧边栏中显示 Gemini CLI 的状态和通知。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "用法:cmux session move <session-id> --to <ssh-destination|local>" + "value": "사이드바에 Gemini CLI 상태와 알림을 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "用法:cmux session move <session-id> --to <ssh-destination|local>" + "value": "サイドバーにGemini CLIのステータスと通知を表示します。" } } } }, - "cli.session.move.error.workingDirectoryUnknown": { + "settings.automation.kiro.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: the transcript does not record the session's working directory" + "value": "Shows Kiro CLI status and notifications in the sidebar, and its tool events in Feed." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: لا يسجّل النص دليل العمل الخاص بالجلسة" + "value": "Zeigt den Status und die Benachrichtigungen von Kiro CLI in der Seitenleiste und seine Tool-Ereignisse im Feed an." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Das Transkript enthält kein Arbeitsverzeichnis der Sitzung" + "value": "Affiche l’état et les notifications de Kiro CLI dans la barre latérale, et ses événements d’outils dans le Flux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: la transcripción no registra el directorio de trabajo de la sesión" + "value": "يعرض حالة Kiro CLI وإشعاراته في الشريط الجانبي، وأحداث أدواته في Feed." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : la transcription n'indique pas le répertoire de travail de la session" + "value": "Muestra el estado y las notificaciones de Kiro CLI en la barra lateral, y sus eventos de herramientas en el Feed." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: トランスクリプトにセッションの作業ディレクトリが記録されていません" + "value": "在側邊欄中顯示 Kiro CLI 的狀態與通知,並在 Feed 中顯示其工具事件。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 트랜스크립트에 세션의 작업 디렉터리가 기록되어 있지 않습니다" + "value": "在侧边栏中显示 Kiro CLI 的状态和通知,并在 Feed 中显示其工具事件。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:记录中没有会话的工作目录" + "value": "사이드바에 Kiro CLI 상태와 알림을 표시하고, 피드에 해당 도구 이벤트를 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:對話紀錄沒有記錄工作階段的工作目錄" + "value": "サイドバーにKiro CLIのステータスと通知を、フィードにそのツールイベントを表示します。" } } } }, - "cli.session.move.error.worktreeAddFailed": { + "settings.automation.socketMode.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: could not add a worktree at %@: %@" + "value": "Choose which local processes can control cmux." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: تعذّرت إضافة worktree في %1$@: %2$@" + "value": "Wählen Sie, welche lokalen Prozesse cmux steuern können." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Worktree unter %1$@ konnte nicht hinzugefügt werden: %2$@" + "value": "Choisissez quels processus locaux peuvent contrôler cmux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: no se pudo añadir un worktree en %1$@: %2$@" + "value": "اختر العمليات المحلية التي يمكنها التحكم في cmux." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : impossible d'ajouter un worktree à %1$@ : %2$@" + "value": "Elige qué procesos locales pueden controlar cmux." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: %1$@ に worktree を追加できませんでした: %2$@" + "value": "選擇哪些本機程序可以控制 cmux。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: %1$@에 worktree를 추가할 수 없습니다: %2$@" + "value": "选择哪些本地进程可以控制 cmux。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:无法在 %1$@ 添加 worktree:%2$@" + "value": "cmux를 제어할 수 있는 로컬 프로세스를 선택합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:無法在 %1$@ 新增 worktree:%2$@" + "value": "cmux を制御できるローカルプロセスを選択します。" } } } }, - "cli.session.move.output.code": { + "settings.automation.suppressSubagentNotifications.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Code: %@ at %@ (%@) with working tree snapshot %@." + "value": "Lists subagent completions in Feed without sending notifications." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الكود: %1$@ عند %2$@ (%3$@) مع لقطة شجرة العمل %4$@." + "value": "Abgeschlossene Subagenten erscheinen im Feed, ohne dass Benachrichtigungen gesendet werden." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Code: %1$@ auf %2$@ (%3$@) mit Snapshot des Arbeitsverzeichnisses %4$@." + "value": "Les sous-agents terminés apparaissent dans le Flux, sans notification." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Código: %1$@ en %2$@ (%3$@) con la instantánea del árbol de trabajo %4$@." + "value": "يظهر اكتمال مهام الوكلاء الفرعيين في Feed دون إرسال إشعارات." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Code : %1$@ à %2$@ (%3$@) avec l'instantané de l'arbre de travail %4$@." + "value": "Los subagentes finalizados aparecen en el Feed sin enviar notificaciones." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "コード: %1$@ は %2$@ (%3$@)、作業ツリーのスナップショット %4$@。" + "value": "子代理完成時只會列在 Feed 中,不會傳送通知。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "코드: %1$@, %2$@ (%3$@), 작업 트리 스냅샷 %4$@." + "value": "子代理完成时只会列在 Feed 中,不会发送通知。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "代码:%1$@ 位于 %2$@(%3$@),含工作树快照 %4$@。" + "value": "하위 에이전트가 완료되면 알림을 보내지 않고 피드에만 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "程式碼:%1$@ 位於 %2$@(%3$@),含工作樹快照 %4$@。" + "value": "サブエージェントが完了しても通知は送らず、フィードにのみ表示します。" } } } }, - "cli.session.move.output.detached": { + "settings.automation.workspaceAutoNaming.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "detached" + "value": "Generates workspace and tab titles from agent conversations." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "منفصل" + "value": "Benennt Arbeitsbereiche und Tabs anhand von Agentengesprächen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "losgelöst" + "value": "Nomme les espaces de travail et les onglets d’après les conversations des agents." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "desacoplado" + "value": "يسمّي مساحات العمل وعلامات التبويب بناءً على محادثات الوكلاء." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "détaché" + "value": "Pone nombre a los espacios de trabajo y las pestañas según las conversaciones de los agentes." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "デタッチ" + "value": "根據代理對話產生工作區和標籤頁標題。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "분리됨" + "value": "根据代理对话生成工作区和标签页标题。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "分离" + "value": "에이전트 대화를 바탕으로 작업 공간과 탭 제목을 생성합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "分離" + "value": "エージェントの会話からワークスペースとタブのタイトルを生成します。" } } } }, - "cli.session.move.output.moved": { + "settings.betaFeatures.cloudMachines.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Moved session %@ to %@ (cwd %@)." + "value": "Adds Cloud Machines to the right sidebar, Settings, the command palette, and the new workspace menu. Cloud Machines also require a remote rollout; with this off, the Cloud tunnel and fleet polling stay off." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تم نقل الجلسة %1$@ إلى %2$@ (cwd %3$@)." + "value": "Fügt Cloud-Maschinen zur rechten Seitenleiste, zu den Einstellungen, zur Befehlspalette und zum Menü für neue Arbeitsbereiche hinzu. Cloud-Maschinen erfordern außerdem ein Remote-Rollout; solange diese Option deaktiviert ist, bleiben Cloud-Tunnel und Flottenabfrage aus." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Sitzung %1$@ nach %2$@ verschoben (cwd %3$@)." + "value": "Ajoute les machines cloud à la barre latérale droite, aux Réglages, à la palette de commandes et au menu de nouvel espace de travail. Les machines cloud nécessitent aussi un déploiement à distance ; si cette option est désactivée, le tunnel Cloud et l’interrogation de la flotte restent arrêtés." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Sesión %1$@ movida a %2$@ (cwd %3$@)." + "value": "يضيف الأجهزة السحابية إلى الشريط الجانبي الأيمن والإعدادات ولوحة الأوامر وقائمة مساحة العمل الجديدة. وتتطلب الأجهزة السحابية أيضًا طرحًا عن بُعد؛ وعند إيقاف هذا الخيار يظل نفق Cloud واستطلاع الأسطول متوقفين." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Session %1$@ déplacée vers %2$@ (cwd %3$@)." + "value": "Añade las máquinas en la nube a la barra lateral derecha, a Ajustes, a la paleta de comandos y al menú de nuevo espacio de trabajo. Las máquinas en la nube también requieren un despliegue remoto; con esta opción desactivada, el túnel de Cloud y el sondeo de la flota permanecen desactivados." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "セッション %1$@ を %2$@ に移動しました (cwd %3$@)。" + "value": "在右側邊欄、設定、命令面板和新增工作區選單中加入雲端機器。雲端機器也需要遠端推出才能使用;關閉此選項時,Cloud 通道和機群輪詢都會保持停用。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "세션 %1$@을(를) %2$@(으)로 이동했습니다 (cwd %3$@)." + "value": "在右侧边栏、设置、命令面板和新建工作区菜单中添加云主机。云主机还需要远程推出才能使用;关闭此选项时,Cloud 隧道和机群轮询都会保持停用。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "已将会话 %1$@ 移到 %2$@(cwd %3$@)。" + "value": "오른쪽 사이드바, 설정, 명령어 팔레트, 새 작업 공간 메뉴에 클라우드 머신을 추가합니다. 클라우드 머신은 원격 출시도 필요하며, 이 옵션이 꺼져 있으면 Cloud 터널과 플릿 폴링도 꺼진 상태로 유지됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "已將工作階段 %1$@ 移到 %2$@(cwd %3$@)。" + "value": "右サイドバー、設定、コマンドパレット、新規ワークスペースメニューにクラウドマシンを追加します。クラウドマシンにはリモートでの提供開始も必要です。この設定がオフの間は、Cloud トンネルとフリートのポーリングも停止したままです。" } } } }, - "cli.session.move.output.notGit": { + "settings.betaFeatures.customSidebars.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Code: %@ is not a git checkout; no files were moved." + "value": "Adds sidebars from ~/.config/cmux/sidebars to the sidebar picker." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الكود: %@ ليس checkout لـ git؛ لم يتم نقل أي ملفات." + "value": "Fügt Seitenleisten aus ~/.config/cmux/sidebars zur Seitenleistenauswahl hinzu." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Code: %@ ist kein git-Checkout; es wurden keine Dateien verschoben." + "value": "Ajoute les barres latérales de ~/.config/cmux/sidebars au sélecteur de barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Código: %@ no es un checkout de git; no se movió ningún archivo." + "value": "يضيف الأشرطة الجانبية من ~/.config/cmux/sidebars إلى منتقي الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Code : %@ n'est pas un checkout git ; aucun fichier n'a été déplacé." + "value": "Añade las barras laterales de ~/.config/cmux/sidebars al selector de barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "コード: %@ は git のチェックアウトではないため、ファイルは移動していません。" + "value": "在側邊欄選取器中加入 ~/.config/cmux/sidebars 裡的側邊欄。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "코드: %@은(는) git 체크아웃이 아니므로 파일을 옮기지 않았습니다." + "value": "在侧边栏选择器中添加 ~/.config/cmux/sidebars 里的侧边栏。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "代码:%@ 不是 git 检出;未移动任何文件。" + "value": "~/.config/cmux/sidebars의 사이드바를 사이드바 선택기에 추가합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "程式碼:%@ 不是 git checkout;未移動任何檔案。" + "value": "~/.config/cmux/sidebars のサイドバーをサイドバーピッカーに追加します。" } } } }, - "cli.session.move.output.pathsRewritten": { + "settings.betaFeatures.extensions.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Paths were rewritten: %@ -> %@. Absolute paths inside the transcript still name the old home." + "value": "Adds the extensions button and lets cmux install and run sidebar extensions." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تمت إعادة كتابة المسارات: %1$@ -> %2$@. لا تزال المسارات المطلقة داخل النص تشير إلى المجلد الرئيسي القديم." + "value": "Fügt die Taste „Erweiterungen“ hinzu und erlaubt cmux, Seitenleisten-Erweiterungen zu installieren und auszuführen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Pfade wurden umgeschrieben: %1$@ -> %2$@. Absolute Pfade im Transkript nennen weiterhin das alte Home-Verzeichnis." + "value": "Ajoute le bouton des extensions et permet à cmux d’installer et d’exécuter des extensions de barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Se reescribieron las rutas: %1$@ -> %2$@. Las rutas absolutas dentro de la transcripción aún nombran el home anterior." + "value": "يضيف زر الامتدادات ويتيح لـ cmux تثبيت امتدادات الشريط الجانبي وتشغيلها." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Chemins réécrits : %1$@ -> %2$@. Les chemins absolus de la transcription désignent encore l'ancien dossier personnel." + "value": "Añade el botón de extensiones y permite que cmux instale y ejecute extensiones de barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "パスを書き換えました: %1$@ -> %2$@。トランスクリプト内の絶対パスは古いホームのままです。" + "value": "加入擴充功能按鈕,並讓 cmux 可安裝及執行側邊欄擴充功能。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "경로를 다시 썼습니다: %1$@ -> %2$@. 트랜스크립트 안의 절대 경로는 여전히 이전 홈을 가리킵니다." + "value": "添加扩展按钮,并允许 cmux 安装和运行侧边栏扩展。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "已改写路径:%1$@ -> %2$@。记录中的绝对路径仍指向旧的主目录。" + "value": "확장 기능 버튼을 추가하고 cmux가 사이드바 확장 기능을 설치하고 실행할 수 있게 합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "已改寫路徑:%1$@ -> %2$@。對話紀錄中的絕對路徑仍指向舊的主目錄。" + "value": "エクステンションボタンを追加し、cmuxでサイドバーエクステンションをインストールして実行できるようにします。" } } } }, - "cli.session.move.output.sourceKept": { + "settings.betaFeatures.feed.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The copy on %@ stays; do not resume it there too." + "value": "Adds Feed to the right sidebar for answering agent requests." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تبقى النسخة على %@؛ لا تستأنفها هناك أيضًا." + "value": "Fügt der rechten Seitenleiste den Feed zum Beantworten von Agentenanfragen hinzu." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Kopie auf %@ bleibt erhalten; setze sie dort nicht ebenfalls fort." + "value": "Ajoute le Flux à la barre latérale droite pour répondre aux demandes des agents." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "La copia en %@ se conserva; no la reanudes también allí." + "value": "يضيف Feed إلى الشريط الجانبي الأيمن للرد على طلبات الوكلاء." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "La copie sur %@ est conservée ; ne la reprenez pas aussi là-bas." + "value": "Añade el Feed a la barra lateral derecha para responder a las solicitudes de los agentes." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ のコピーは残ります。そちらでも再開しないでください。" + "value": "在右側邊欄加入 Feed,用於回覆代理程式的請求。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@의 사본은 그대로 남습니다. 그곳에서도 재개하지 마세요." + "value": "在右侧边栏添加 Feed,用于回复代理请求。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@ 上的副本会保留;请勿也在那里恢复它。" + "value": "오른쪽 사이드바에 피드를 추가해 에이전트 요청에 응답할 수 있습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ 上的副本會保留;請勿也在那裡恢復它。" + "value": "右サイドバーにフィードを追加し、エージェントからのリクエストに応答できるようにします。" } } } }, - "cli.session.move.progress.addingWorktree": { + "settings.betaFeatures.remoteTmux.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session move: adding worktree %@ on the destination" + "value": "Shows tmux sessions on remote hosts as workspaces in the sidebar. The sessions keep running after cmux quits." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "session move: جارٍ إضافة worktree %@ في الوجهة" + "value": "Zeigt tmux-Sitzungen auf Remote-Hosts als Arbeitsbereiche in der Seitenleiste an. Die Sitzungen laufen auch nach dem Beenden von cmux weiter." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "session move: Worktree %@ wird am Ziel hinzugefügt" + "value": "Affiche les sessions tmux des hôtes distants comme des espaces de travail dans la barre latérale. Les sessions continuent de s’exécuter après la fermeture de cmux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "session move: añadiendo el worktree %@ en el destino" + "value": "يعرض جلسات tmux على المضيفين البعيدين كمساحات عمل في الشريط الجانبي. وتستمر الجلسات في العمل حتى بعد إنهاء cmux." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "session move : ajout du worktree %@ sur la destination" + "value": "Muestra las sesiones de tmux de hosts remotos como espacios de trabajo en la barra lateral. Las sesiones siguen ejecutándose al salir de cmux." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session move: 移動先に worktree %@ を追加しています" + "value": "在側邊欄中將遠端主機上的 tmux 工作階段顯示為工作區。結束 cmux 後,這些工作階段仍會繼續執行。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "session move: 대상에 worktree %@을(를) 추가하는 중" + "value": "在侧边栏中将远程主机上的 tmux 会话显示为工作区。退出 cmux 后,这些会话仍会继续运行。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session move:正在目标上添加 worktree %@" + "value": "원격 호스트의 tmux 세션을 사이드바에 작업 공간으로 표시합니다. cmux를 종료해도 세션은 계속 실행됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "session move:正在目的地新增 worktree %@" + "value": "リモートホストの tmux セッションをサイドバーにワークスペースとして表示します。cmux を終了してもセッションは動作し続けます。" } } } }, - "update.readyWaiting": { + "settings.betaFeatures.workspaceTodoControls.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Update Ready" + "value": "Shows Add Checklist Item and status controls on workspaces. A remote rollout can turn them on even while this is off." } }, "de": { "stringUnit": { "state": "translated", - "value": "Update bereit" + "value": "Zeigt „Checklisten-Eintrag hinzufügen“ und Statussteuerelemente bei Arbeitsbereichen an. Ein Remote-Rollout kann sie auch dann aktivieren, wenn diese Option deaktiviert ist." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Mise à jour prête" + "value": "Affiche « Ajouter un élément à la liste de contrôle » et les commandes d’état sur les espaces de travail. Un déploiement à distance peut les activer même si cette option est désactivée." } }, "ar": { "stringUnit": { "state": "translated", - "value": "التحديث جاهز" + "value": "يعرض «إضافة عنصر قائمة تحقق» وعناصر التحكم في الحالة على مساحات العمل. ويمكن لطرح عن بُعد تفعيلها حتى عند إيقاف هذا الخيار." } }, "es": { "stringUnit": { "state": "translated", - "value": "Actualización lista" + "value": "Muestra «Añadir elemento a la lista de verificación» y los controles de estado en los espacios de trabajo. Un despliegue remoto puede activarlos aunque esta opción esté desactivada." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "更新已就緒" + "value": "在工作區上顯示「新增檢查清單項目」和狀態控制項。即使關閉此選項,遠端推出仍可能啟用這些控制項。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "更新已就绪" + "value": "在工作区上显示“添加清单项”和状态控件。即使关闭此选项,远程推出仍可能启用这些控件。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "업데이트 준비됨" + "value": "작업 공간에 ‘체크리스트 항목 추가’ 및 상태 컨트롤을 표시합니다. 이 옵션이 꺼져 있어도 원격 출시로 이 컨트롤이 켜질 수 있습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップデートの準備完了" + "value": "ワークスペースに「チェックリスト項目を追加」とステータスコントロールを表示します。この設定がオフでも、リモートでの提供開始によって有効になることがあります。" } } } }, - "update.installNow": { + "settings.betaFeatures.workspaceTodosChecklistStyle.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Install Now" + "value": "Choose whether clicking a workspace checklist opens a popover or expands it under the row." } }, "de": { "stringUnit": { "state": "translated", - "value": "Jetzt installieren" + "value": "Wählen Sie, ob sich beim Klicken auf die Checkliste eines Arbeitsbereichs ein Popover öffnet oder die Checkliste unter der Zeile aufklappt." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Installer maintenant" + "value": "Choisissez si un clic sur la liste de contrôle d’un espace de travail ouvre une fenêtre contextuelle ou la déplie sous la ligne." } }, "ar": { "stringUnit": { "state": "translated", - "value": "التثبيت الآن" + "value": "اختر ما إذا كان النقر على قائمة التحقق الخاصة بمساحة العمل يفتح نافذة منبثقة أو يوسّعها أسفل الصف." } }, "es": { "stringUnit": { "state": "translated", - "value": "Instalar ahora" + "value": "Elige si al hacer clic en la lista de verificación de un espacio de trabajo se abre un popover o se despliega bajo la fila." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "立即安裝" + "value": "選擇按一下工作區檢查清單時,要在彈出視窗中開啟,還是在該列下方展開。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "立即安装" + "value": "选择点按工作区清单时,是在浮层中打开,还是在该行下方展开。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "지금 설치" + "value": "작업 공간 체크리스트를 클릭했을 때 팝오버로 열지, 행 아래에 펼칠지 선택합니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "今すぐインストール" + "value": "ワークスペースのチェックリストをクリックしたときに、ポップオーバーで開くか、行の下に展開するかを選択します。" } } } }, - "terminal.paste.notice.imageTooLarge": { + "settings.browser.enabled.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "الصورة أكبر من 10 ميغابايت" + "value": "Opens browser tabs and links from terminals in the cmux browser." } }, "de": { "stringUnit": { "state": "translated", - "value": "Bild ist größer als 10 MB" + "value": "Browser-Tabs und Links aus Terminals werden im cmux-Browser geöffnet." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Image is larger than 10 MB" + "value": "Ouvre les onglets de navigateur et les liens des terminaux dans le navigateur cmux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "La imagen supera los 10 MB" + "value": "يفتح علامات تبويب المتصفح والروابط من الطرفيات في متصفح cmux." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "L’image dépasse 10 Mo" + "value": "Abre pestañas del navegador y enlaces de las terminales en el navegador de cmux." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "画像が 10 MB を超えています" + "value": "瀏覽器標籤頁和從終端機開啟的連結都會在 cmux 瀏覽器中開啟。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이미지가 10MB보다 큽니다" + "value": "浏览器标签页和从终端打开的链接都会在 cmux 浏览器中打开。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "图片大于 10 MB" + "value": "브라우저 탭과 터미널에서 연 링크를 cmux 브라우저에서 엽니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "圖片大於 10 MB" + "value": "ブラウザタブとターミナルから開いたリンクをcmuxブラウザで開きます。" } } } }, - "terminal.paste.notice.timedOut": { + "settings.browser.hiddenWebViewDiscard.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "انتهت مهلة اللصق" + "value": "Frees memory from browser tabs hidden longer than the delay. They reload when shown again." } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeitüberschreitung beim Einfügen" + "value": "Browser-Tabs, die länger als die festgelegte Zeit ausgeblendet sind, geben ihren Speicher frei und werden beim erneuten Anzeigen neu geladen." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Paste timed out" + "value": "Libère la mémoire des onglets de navigateur masqués depuis plus longtemps que le délai défini. Ils se rechargent lorsqu’ils réapparaissent." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Se agotó el tiempo para pegar" + "value": "يحرر ذاكرة علامات تبويب المتصفح المخفية لمدة تتجاوز المهلة المحددة، ويُعاد تحميلها عند عرضها مجددًا." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Le collage a expiré" + "value": "Libera la memoria de las pestañas del navegador que llevan ocultas más tiempo del indicado. Se vuelven a cargar al mostrarse de nuevo." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "貼り付けがタイムアウトしました" + "value": "瀏覽器標籤頁隱藏超過延遲時間後,會釋放其記憶體。再次顯示時會重新載入。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "붙여넣기 시간이 초과되었습니다" + "value": "浏览器标签页隐藏超过延迟时间后,会释放其内存。再次显示时会重新加载。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "粘贴超时" + "value": "브라우저 탭이 지연 시간보다 오래 숨겨져 있으면 메모리를 해제합니다. 탭을 다시 표시하면 새로 고칩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "貼上逾時" + "value": "非表示の時間が遅延時間を超えたブラウザタブのメモリを解放します。タブは再び表示したときに再読み込みされます。" } } } }, - "shortcut.pasteLastScreenshot.label": { + "settings.browser.theme.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Paste Last Screenshot" + "value": "Choose light or dark pages for sites that support both. System matches the app appearance." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لصق آخر لقطة شاشة" + "value": "Wählen Sie helle oder dunkle Seiten für Websites, die beides unterstützen. „System“ folgt dem Erscheinungsbild der App." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Letzten Screenshot einfügen" + "value": "Choisissez des pages claires ou sombres pour les sites qui prennent en charge les deux. « Système » suit l’apparence de l’app." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Pegar la última captura de pantalla" + "value": "اختر الصفحات الفاتحة أو الداكنة للمواقع التي تدعم الوضعين. يتبع خيار «النظام» مظهر التطبيق." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Coller la dernière capture d’écran" + "value": "Elige páginas claras u oscuras para los sitios compatibles con ambos modos. «Sistema» sigue el aspecto de la app." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最新のスクリーンショットを貼り付け" + "value": "網站同時支援淺色與深色時,選擇要使用淺色或深色頁面。「系統」會跟隨 App 的外觀。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "마지막 스크린샷 붙여넣기" + "value": "网站同时支持浅色和深色时,选择使用浅色还是深色页面。“系统”会跟随应用外观。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "粘贴最新的截图" + "value": "라이트와 다크를 모두 지원하는 사이트에서 표시할 페이지 모드를 선택합니다. ‘시스템’은 앱의 외관 설정을 따릅니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "貼上最新的螢幕截圖" + "value": "ライトとダークの両方に対応したサイトで、どちらのページを表示するかを選択します。「システム」はアプリの外観に合わせます。" } } } }, - "command.terminalPasteLastScreenshot.title": { + "settings.customSidebars.enabled.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Paste Last Screenshot" + "value": "Adds sidebars from ~/.config/cmux/sidebars to the sidebar picker." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لصق آخر لقطة شاشة" + "value": "Fügt Seitenleisten aus ~/.config/cmux/sidebars zur Seitenleistenauswahl hinzu." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Letzten Screenshot einfügen" + "value": "Ajoute les barres latérales de ~/.config/cmux/sidebars au sélecteur de barre latérale." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Pegar la última captura de pantalla" + "value": "يضيف الأشرطة الجانبية من ~/.config/cmux/sidebars إلى منتقي الشريط الجانبي." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Coller la dernière capture d’écran" + "value": "Añade las barras laterales de ~/.config/cmux/sidebars al selector de barra lateral." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最新のスクリーンショットを貼り付け" + "value": "在側邊欄選取器中加入 ~/.config/cmux/sidebars 裡的側邊欄。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "마지막 스크린샷 붙여넣기" + "value": "在侧边栏选择器中添加 ~/.config/cmux/sidebars 里的侧边栏。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "粘贴最新的截图" + "value": "~/.config/cmux/sidebars의 사이드바를 사이드바 선택기에 추가합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "貼上最新的螢幕截圖" + "value": "~/.config/cmux/sidebars のサイドバーをサイドバーピッカーに追加します。" } } } }, - "terminal.unsafePasteConfirmation.message": { + "settings.customSidebars.renderer.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "قد ينفّذ هذا النص أوامر فور لصقه، مثلًا لأنه يحتوي على فاصل أسطر. الصقه فقط إذا كنت تثق به." + "value": "Isolated process protects cmux from a faulty sidebar but accepts clicks only. In-app also accepts hover, focus, and typing." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Text könnte beim Einfügen sofort Befehle ausführen, zum Beispiel weil er einen Zeilenumbruch enthält. Füge ihn nur ein, wenn du ihm vertraust." + "value": "„Isolierter Prozess“ schützt cmux vor einer fehlerhaften Seitenleiste, unterstützt aber nur Klicks. „In-App“ unterstützt zusätzlich Hover, Fokus und Texteingabe." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "This text could run commands as soon as it is pasted, for example because it contains a line break. Paste it only if you trust it." + "value": "« Processus isolé » protège cmux d’une barre latérale défectueuse, mais n’accepte que les clics. « Dans l’application » accepte aussi le survol, le focus et la saisie." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Este texto podría ejecutar comandos en cuanto se pegue, por ejemplo porque contiene un salto de línea. Pégalo solo si confías en él." + "value": "يحمي خيار «عملية معزولة» cmux من الشريط الجانبي المعيب، لكنه لا يقبل سوى النقرات. أما خيار «داخل التطبيق» فيقبل أيضًا تمرير المؤشر والتركيز والكتابة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Ce texte pourrait exécuter des commandes dès qu’il est collé, par exemple parce qu’il contient un saut de ligne. Ne le collez que si vous lui faites confiance." + "value": "«Proceso aislado» protege cmux de una barra lateral defectuosa, pero solo admite clics. «En la aplicación» también admite pasar el puntero por encima, enfocar y escribir." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このテキストには改行が含まれているなどの理由で、貼り付けた直後にコマンドが実行される可能性があります。信頼できる場合にのみ貼り付けてください。" + "value": "「隔離程序」可保護 cmux 不受有問題的側邊欄影響,但只接受點擊。「應用程式內」還接受游標停留、聚焦和輸入。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 텍스트는 줄바꿈이 들어 있는 등의 이유로 붙여넣는 즉시 명령을 실행할 수 있습니다. 신뢰할 수 있을 때만 붙여넣으세요." + "value": "“隔离进程”可保护 cmux 不受有问题的侧边栏影响,但只接受点击。“应用内”还接受悬停、聚焦和输入。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "这段文本可能在粘贴后立即运行命令,例如因为其中包含换行。只有在你信任它时才粘贴。" + "value": "‘격리된 프로세스’는 결함이 있는 사이드바로부터 cmux를 보호하지만 클릭만 허용합니다. ‘앱 내부’는 포인터 올려놓기, 포커스, 키보드 입력도 허용합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "這段文字可能在貼上後立即執行指令,例如因為其中包含換行。只有在你信任它時才貼上。" + "value": "「分離プロセス」は問題のあるサイドバーから cmux を保護しますが、クリックしか受け付けません。「アプリ内」では、ホバー、フォーカス、入力も受け付けます。" } } } }, - "terminal.unsafePasteConfirmation.paste": { + "settings.globalHotkey.enable.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "لصق" + "value": "Pressing the shortcut in any app shows or hides all cmux windows." } }, "de": { "stringUnit": { "state": "translated", - "value": "Einfügen" + "value": "Das Tastaturkürzel blendet in jeder App alle cmux-Fenster ein oder aus." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Paste" + "value": "Le raccourci affiche ou masque toutes les fenêtres cmux, quelle que soit l’app active." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Pegar" + "value": "يُظهر الاختصار جميع نوافذ cmux أو يخفيها من أي تطبيق." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Coller" + "value": "El atajo muestra u oculta todas las ventanas de cmux desde cualquier app." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "貼り付け" + "value": "在任何 App 中按下快速鍵,即可顯示或隱藏所有 cmux 視窗。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "붙여넣기" + "value": "在任意 App 中按下快捷键,即可显示或隐藏所有 cmux 窗口。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "粘贴" + "value": "어느 앱에서든 단축키를 눌러 모든 cmux 윈도우를 표시하거나 숨길 수 있습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "貼上" + "value": "どのアプリを使用中でも、ショートカットを押すと cmux のすべてのウィンドウを表示または非表示にできます。" } } } }, - "terminal.unsafePasteConfirmation.title": { + "settings.mobile.artifactFolderAccess.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "هل تريد لصق نص قد يكون غير آمن؟" + "value": "Choose how much of a folder iPhone and iPad can browse. One Level shows only the items directly inside it." } }, "de": { "stringUnit": { "state": "translated", - "value": "Möglicherweise unsicheren Text einfügen?" + "value": "Wählen Sie, wie tief iPhone und iPad einen Ordner durchsuchen können. „Eine Ebene“ zeigt nur die Objekte direkt darin." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Paste Potentially Unsafe Text?" + "value": "Choisissez jusqu’où l’iPhone et l’iPad peuvent parcourir un dossier. « Un niveau » n’affiche que les éléments qui s’y trouvent directement." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "¿Pegar texto potencialmente no seguro?" + "value": "اختر مدى عمق تصفح iPhone وiPad داخل المجلد. يعرض خيار «مستوى واحد» العناصر الموجودة مباشرةً داخله فقط." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Coller un texte potentiellement dangereux ?" + "value": "Elige hasta qué nivel pueden explorar una carpeta el iPhone y el iPad. «Un nivel» solo muestra los elementos que contiene directamente." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "安全でない可能性のあるテキストを貼り付けますか?" + "value": "選擇 iPhone 和 iPad 可瀏覽資料夾的範圍。「單一層級」只顯示該資料夾第一層的項目。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "안전하지 않을 수 있는 텍스트를 붙여넣을까요?" + "value": "选择 iPhone 和 iPad 可浏览文件夹的范围。“一层”只显示该文件夹第一层的项目。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "要粘贴可能不安全的文本吗?" + "value": "iPhone 및 iPad에서 폴더를 어디까지 탐색할 수 있는지 선택합니다. ‘한 단계’는 폴더 바로 아래에 있는 항목만 표시합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "要貼上可能不安全的文字嗎?" + "value": "iPhone と iPad からフォルダをどこまで参照できるかを選択します。「1 階層」では、そのフォルダの直下にある項目のみが表示されます。" } } } }, - "settings.terminal.confirmUnsafePaste": { + "settings.mobile.iOSPairingHost.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "تأكيد اللصق غير الآمن" + "value": "Lets iPhone and iPad pair with and connect to this Mac." } }, "de": { "stringUnit": { "state": "translated", - "value": "Unsicheres Einfügen bestätigen" + "value": "iPhone und iPad können sich mit diesem Mac koppeln und verbinden." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Confirm Unsafe Pastes" + "value": "L’iPhone et l’iPad peuvent se jumeler avec ce Mac et s’y connecter." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Confirmar pegados no seguros" + "value": "يمكن لـ iPhone وiPad الاقتران بجهاز Mac هذا والاتصال به." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Confirmer les collages non sûrs" + "value": "El iPhone y el iPad pueden emparejarse con este Mac y conectarse a él." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "安全でない貼り付けを確認" + "value": "允許 iPhone 和 iPad 與此 Mac 配對及連線。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "안전하지 않은 붙여넣기 확인" + "value": "允许 iPhone 和 iPad 与这台 Mac 配对并连接。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "确认不安全的粘贴" + "value": "iPhone과 iPad가 이 Mac과 페어링하고 연결할 수 있게 합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "確認不安全的貼上" + "value": "iPhone と iPad がこの Mac とペアリングして接続できるようにします。" } } } }, - "settings.terminal.confirmUnsafePaste.subtitleOff": { + "settings.mobile.phonePush.forwarding.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "يتم اللصق الذي يصنّفه Ghostty على أنه غير آمن دون سؤال." + "value": "Sends agent notifications from this Mac to cmux on iPhone and iPad." } }, "de": { "stringUnit": { "state": "translated", - "value": "Von Ghostty als unsicher markierte Einfügungen werden ohne Nachfrage ausgeführt." + "value": "Leitet Agentenbenachrichtigungen von diesem Mac an cmux auf iPhone und iPad weiter." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "Pastes Ghostty flags as unsafe go through without asking." + "value": "Transfère les notifications des agents de ce Mac vers cmux sur iPhone et iPad." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Los pegados que Ghostty marca como no seguros se realizan sin preguntar." + "value": "يوجّه إشعارات الوكلاء من جهاز Mac هذا إلى cmux على iPhone وiPad." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Les collages que Ghostty signale comme non sûrs sont effectués sans demander." + "value": "Reenvía las notificaciones de agentes de este Mac a cmux en iPhone y iPad." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ghostty が安全でないと判定した貼り付けも、確認せずに実行します。" + "value": "將此 Mac 上的代理程式通知傳送至 iPhone 和 iPad 上的 cmux。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ghostty가 안전하지 않다고 표시한 붙여넣기도 묻지 않고 진행합니다." + "value": "将这台 Mac 上的代理通知发送到 iPhone 和 iPad 上的 cmux。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "Ghostty 标记为不安全的粘贴会直接执行,不会询问。" + "value": "이 Mac의 에이전트 알림을 iPhone 및 iPad의 cmux로 보냅니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ghostty 標記為不安全的貼上會直接執行,不會詢問。" + "value": "この Mac からエージェントの通知を iPhone と iPad の cmux に送信します。" } } } }, - "settings.terminal.confirmUnsafePaste.subtitleOn": { + "settings.shortcuts.showModifierHoldHints.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "ينتظر اللصق الذي يصنّفه Ghostty على أنه غير آمن، مثل عدة أسطر في برنامج لا يستخدم اللصق المحاط (bracketed paste)، تأكيدك في ورقة مرفقة بالنافذة." + "value": "Holding Command or Control shows shortcut hints." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Einfügen, das Ghostty als unsicher markiert, etwa mehrere Zeilen in ein Programm ohne Bracketed Paste, wartet auf deine Bestätigung in einem Sheet am Fenster." + "value": "Hinweise zu Tastaturkürzeln erscheinen, solange die Befehlstaste oder die Control-Taste gedrückt ist." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "A paste Ghostty flags as unsafe, such as several lines into a program without bracketed paste, waits for you to confirm it in a sheet on the window." + "value": "Les indices de raccourcis apparaissent tant que la touche Commande ou Contrôle est maintenue enfoncée." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Un pegado que Ghostty marca como no seguro, como varias líneas en un programa sin pegado entre corchetes (bracketed paste), espera tu confirmación en una hoja de la ventana." + "value": "تظهر تلميحات الاختصارات عند الضغط مع الاستمرار على Command أو Control." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Un collage que Ghostty signale comme non sûr, par exemple plusieurs lignes dans un programme sans collage entre crochets (bracketed paste), attend votre confirmation dans une feuille attachée à la fenêtre." + "value": "Las sugerencias de atajos aparecen mientras se mantiene presionada la tecla Comando o Control." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ghostty が安全でないと判定した貼り付け(ブラケットペーストを使わないプログラムへの複数行の貼り付けなど)は、ウインドウのシートで確認するまで待機します。" + "value": "按住 Command 或 Control 鍵時,會顯示快速鍵提示。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ghostty가 안전하지 않다고 표시한 붙여넣기(예: 브래킷 붙여넣기를 쓰지 않는 프로그램에 여러 줄 붙여넣기)는 창에 붙은 시트에서 확인할 때까지 기다립니다." + "value": "按住 Command 或 Control 键时,会显示快捷键提示。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "Ghostty 标记为不安全的粘贴(例如将多行文本粘贴到未启用括号粘贴的程序中)会先在窗口上的表单中等待你确认。" + "value": "Command 또는 Control 키를 누르고 있으면 단축키 힌트가 표시됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ghostty 標記為不安全的貼上(例如將多行文字貼到未啟用括號貼上的程式中)會先在視窗上的表單中等待你確認。" + "value": "Command キーまたは Control キーを押したままにすると、ショートカットヒントが表示されます。" } } } }, - "settings.search.alias.setting.terminal.confirm-unsafe-paste": { + "settings.sidebar.rightMaxWidth.subtitle": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet لصق غير آمن تأكيد تحذير عدة أسطر فاصل أسطر حافظة" + "value": "Lets the Dock in the right sidebar grow up to this width while leaving room for terminals." } }, "de": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet unsicher einfügen bestätigen warnung mehrzeilig zeilenumbruch zwischenablage" + "value": "Das Dock in der rechten Seitenleiste kann bis zu dieser Breite wachsen, lässt aber Platz für Terminals." } }, - "en": { + "fr": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet" + "value": "Le Dock de la barre latérale droite peut s’élargir jusqu’à cette largeur tout en laissant de la place aux terminaux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet pegar no seguro confirmar advertencia varias líneas salto de línea portapapeles" + "value": "يمكن أن يتسع Dock في الشريط الجانبي الأيمن حتى هذا العرض مع ترك مساحة للطرفيات." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet coller non sûr confirmer avertissement plusieurs lignes saut de ligne presse-papiers" + "value": "El Dock de la barra lateral derecha puede ampliarse hasta este ancho, pero deja espacio para las terminales." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 貼り付け ペースト 安全でない 確認 警告 複数行 改行 クリップボード" + "value": "右側邊欄中的 Dock 最寬可擴展至此寬度,並為終端機保留空間。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 붙여넣기 안전하지 않음 확인 경고 여러 줄 줄바꿈 클립보드" + "value": "右侧边栏中的 Dock 最宽可扩展到此宽度,同时为终端保留空间。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 粘贴 不安全 确认 警告 多行 换行 剪贴板" + "value": "오른쪽 사이드바의 Dock은 터미널 공간을 남겨 둔 채 이 너비까지 넓어질 수 있습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 貼上 不安全 確認 警告 多行 換行 剪貼簿" + "value": "右サイドバーの Dock は、ターミナルの領域を残したまま、この幅まで広げられます。" } } } }, - "appChannelSwitch.action.nightly": { + "settings.terminal.adaptiveDefaultTheme.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch to Nightly" + "value": "Matches terminal colors to the light or dark appearance when no Ghostty theme or colors are set." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "التبديل إلى Nightly" + "value": "Passt die Terminalfarben an das helle oder dunkle Erscheinungsbild an, wenn in Ghostty kein Theme und keine Farben festgelegt sind." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Zu Nightly wechseln" + "value": "Si aucun thème ni aucune couleur Ghostty n’est défini, les couleurs du terminal suivent l’apparence claire ou sombre." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cambiar a Nightly" + "value": "عندما لا تكون هناك سمة أو ألوان محددة في Ghostty، تتوافق ألوان الطرفية مع المظهر الفاتح أو الداكن." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Passer à Nightly" + "value": "Si no hay ningún tema ni colores de Ghostty definidos, los colores de la terminal siguen la apariencia clara u oscura." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Nightly に切り替える" + "value": "未設定 Ghostty 主題或顏色時,終端機顏色會配合淺色或深色外觀。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Nightly로 전환" + "value": "未设置 Ghostty 主题或颜色时,终端颜色会随浅色或深色外观变化。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "切换到 Nightly" + "value": "Ghostty 테마나 색상이 설정되어 있지 않으면 터미널 색상을 라이트 또는 다크 모드에 맞춥니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "切換至 Nightly" + "value": "Ghostty のテーマや色が設定されていない場合、ターミナルの色をライトまたはダークの外観に合わせます。" } } } }, - "appChannelSwitch.action.stable": { + "settings.terminal.agentAutoResume.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch to Stable" + "value": "Reopening cmux resumes agent sessions automatically." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "التبديل إلى الإصدار المستقر" + "value": "Beim erneuten Öffnen von cmux werden Agenten-Sitzungen automatisch fortgesetzt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Zu Stable wechseln" + "value": "Les sessions d’agent reprennent automatiquement à la réouverture de cmux." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cambiar a Stable" + "value": "تُستأنف جلسات الوكلاء تلقائيًا عند إعادة فتح cmux." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Passer à Stable" + "value": "Las sesiones de agentes se reanudan automáticamente al volver a abrir cmux." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "安定版に切り替える" + "value": "重新開啟 cmux 時,自動繼續先前的代理工作階段。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "안정 버전으로 전환" + "value": "重新打开 cmux 时,自动恢复之前的代理会话。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "切换到稳定版" + "value": "cmux를 다시 열면 에이전트 세션이 자동으로 재개됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "切換至穩定版" + "value": "cmux を開き直すと、エージェントのセッションが自動的に再開されます。" } } } }, - "appChannelSwitch.failed.appMissing": { + "settings.terminal.agentHibernation.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The downloaded disk image does not contain the expected app." + "value": "Hibernates idle background agent terminals above the live terminal limit. Even when this is off, cmux may hibernate them under memory pressure." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لا تحتوي صورة القرص التي تم تنزيلها على التطبيق المتوقع." + "value": "Versetzt inaktive Agenten-Terminals im Hintergrund in den Ruhezustand, sobald das Limit für aktive Terminals überschritten ist. Auch wenn diese Option deaktiviert ist, kann cmux sie bei hoher Speicherauslastung in den Ruhezustand versetzen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Das heruntergeladene Disk-Image enthält nicht die erwartete App." + "value": "Met en hibernation les terminaux d’agent inactifs en arrière-plan au-delà de la limite de terminaux actifs. Même si cette option est désactivée, cmux peut les mettre en hibernation en cas de pression mémoire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "La imagen de disco descargada no contiene la app esperada." + "value": "يُدخل طرفيات الوكلاء الخاملة في الخلفية في السبات عند تجاوز حد الطرفيات النشطة. وحتى عند إيقاف هذا الخيار، قد يُدخلها cmux في السبات عند ضغط الذاكرة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "L’image disque téléchargée ne contient pas l’app attendue." + "value": "Pone en hibernación las terminales de agentes inactivas en segundo plano que superan el límite de terminales activas. Aunque esta opción esté desactivada, cmux puede ponerlas en hibernación si hay presión de memoria." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ダウンロードしたディスクイメージに目的のアプリが含まれていません。" + "value": "作用中終端機超過上限時,閒置的背景代理終端機會進入休眠。即使關閉此選項,cmux 仍可能在記憶體吃緊時讓它們休眠。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "다운로드한 디스크 이미지에 예상한 앱이 없습니다." + "value": "活动终端超过上限时,空闲的后台代理终端会进入休眠。即使关闭此选项,cmux 仍可能在内存紧张时让它们休眠。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "下载的磁盘映像不包含预期的应用。" + "value": "활성 터미널 수가 한도를 넘으면 백그라운드에서 유휴 상태인 에이전트 터미널을 최대 절전 모드로 전환합니다. 이 옵션을 꺼도 메모리가 부족하면 cmux가 해당 터미널을 최대 절전 모드로 전환할 수 있습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "下載的磁碟映像檔不包含預期的 App。" + "value": "実行中のターミナル数が上限を超えると、アイドル状態のバックグラウンドエージェントのターミナルを休止させます。この設定がオフでも、メモリが逼迫している場合は cmux がこれらを休止させることがあります。" } } } }, - "appChannelSwitch.failed.close": { + "settings.terminal.copyOnSelect.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Close" + "value": "Selecting text in a terminal copies it to the clipboard." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إغلاق" + "value": "Im Terminal ausgewählter Text wird in die Zwischenablage kopiert." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Schließen" + "value": "Le texte sélectionné dans un terminal est copié dans le presse-papiers." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cerrar" + "value": "يُنسخ النص المحدد في الطرفية إلى الحافظة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fermer" + "value": "El texto seleccionado en una terminal se copia al portapapeles." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "閉じる" + "value": "在終端機中選取文字時,會將文字複製到剪貼簿。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "닫기" + "value": "在终端中选择文本时,会将文本复制到剪贴板。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "터미널에서 텍스트를 선택하면 클립보드에 복사됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "ターミナルでテキストを選択すると、クリップボードにコピーされます。" } } } }, - "appChannelSwitch.failed.download": { + "settings.terminal.reflowHardWrapOnCopy.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Download Manually" + "value": "Copying text also joins line breaks a program printed at the full terminal width and drops a short continuation indent. Soft-wrapped lines always copy as one line." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "التنزيل يدويًا" + "value": "Beim Kopieren werden auch Zeilenumbrüche zusammengefügt, die ein Programm bei voller Terminalbreite ausgegeben hat, und ein kurzer Fortsetzungseinzug wird entfernt. Weich umbrochene Zeilen werden immer als eine Zeile kopiert." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Manuell laden" + "value": "Lors de la copie, les sauts de ligne qu’un programme a insérés à pleine largeur du terminal sont aussi supprimés, ainsi qu’un court retrait de continuation. Les lignes à retour automatique sont toujours copiées sur une seule ligne." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Descargar manualmente" + "value": "عند النسخ، تُدمج أيضًا فواصل الأسطر التي طبعها برنامج عند العرض الكامل للطرفية، وتُحذف مسافة البادئة القصيرة للسطر التالي. أما الأسطر الملتفّة تلقائيًا فتُنسخ دائمًا كسطر واحد." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Télécharger manuellement" + "value": "Al copiar, también se unen los saltos de línea que un programa imprimió al ancho completo de la terminal y se quita una sangría de continuación corta. Las líneas con ajuste automático siempre se copian como una sola línea." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "手動でダウンロード" + "value": "複製文字時,也會合併程式在終端機滿寬處輸出的換行,並移除較短的續行縮排。自動換行的行一律會複製為一行。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "수동으로 다운로드" + "value": "复制文本时,也会合并程序在终端满宽处输出的换行,并移除较短的续行缩进。自动换行的行始终会复制为一行。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "手动下载" + "value": "텍스트를 복사할 때 프로그램이 터미널 전체 너비에서 넣은 줄바꿈도 합치고 짧은 연속 들여쓰기를 제거합니다. 자동 줄바꿈된 줄은 항상 한 줄로 복사됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "手動下載" + "value": "テキストをコピーするとき、プログラムがターミナルの幅いっぱいで出力した改行もつなげ、短い継続インデントを取り除きます。ソフトラップされた行は常に 1 行としてコピーされます。" } } } }, - "appChannelSwitch.failed.downloadDetail": { + "settings.terminal.importFromTerminal": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The download failed: %@" + "value": "Import from Another Terminal" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فشل التنزيل: %@" + "value": "別のターミナルから読み込む" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Der Download ist fehlgeschlagen: %@" + "value": "从其他终端导入" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "La descarga falló: %@" + "value": "Aus anderem Terminal importieren" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le téléchargement a échoué : %@" + "value": "Importer depuis un autre terminal" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "ダウンロードに失敗しました: %@" + "value": "استيراد من طرفية أخرى" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "다운로드 실패: %@" + "value": "Importar desde otra terminal" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "下载失败:%@" + "value": "從其他終端機匯入" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "下載失敗:%@" + "value": "다른 터미널에서 가져오기" } } } }, - "appChannelSwitch.failed.installDetail": { + "settings.terminal.importFromTerminal.button": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The app could not be installed: %@" + "value": "Import…" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تعذّر تثبيت التطبيق: %@" + "value": "読み込む…" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Die App konnte nicht installiert werden: %@" + "value": "导入…" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "No se pudo instalar la app: %@" + "value": "Importieren…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible d’installer l’app : %@" + "value": "Importer…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "アプリをインストールできませんでした: %@" + "value": "استيراد…" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "앱을 설치할 수 없습니다: %@" + "value": "Importar…" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "无法安装应用:%@" + "value": "匯入…" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "無法安裝 App:%@" + "value": "가져오기…" } } } }, - "appChannelSwitch.failed.launchDetail": { + "settings.terminal.importFromTerminal.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The app could not be opened: %@" + "value": "Bring over your font, colors, cursor and more from iTerm2, Terminal, Alacritty, Kitty, WezTerm or Warp." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تعذّر فتح التطبيق: %@" + "value": "iTerm2、ターミナル、Alacritty、Kitty、WezTerm、Warp からフォント、カラー、カーソルなどを引き継ぎます。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Die App konnte nicht geöffnet werden: %@" + "value": "从 iTerm2、终端、Alacritty、Kitty、WezTerm 或 Warp 导入字体、颜色、光标等设置。" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "No se pudo abrir la app: %@" + "value": "Übernimmt Schrift, Farben, Cursor und mehr aus iTerm2, Terminal, Alacritty, Kitty, WezTerm oder Warp." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible d’ouvrir l’app : %@" + "value": "Reprend la police, les couleurs, le curseur et plus encore depuis iTerm2, Terminal, Alacritty, Kitty, WezTerm ou Warp." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "アプリを開けませんでした: %@" + "value": "انقل الخط والألوان والمؤشر وغيرها من iTerm2 أو Terminal أو Alacritty أو Kitty أو WezTerm أو Warp." } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "앱을 열 수 없습니다: %@" + "value": "Trae la fuente, los colores, el cursor y más desde iTerm2, Terminal, Alacritty, Kitty, WezTerm o Warp." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "无法打开应用:%@" + "value": "從 iTerm2、終端機、Alacritty、Kitty、WezTerm 或 Warp 匯入字體、顏色、游標等設定。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "無法開啟 App:%@" + "value": "iTerm2, 터미널, Alacritty, Kitty, WezTerm, Warp에서 글꼴, 색상, 커서 등을 가져옵니다." } } } }, - "appChannelSwitch.failed.mountDetail": { + "settings.terminal.memoryGuardrail.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The disk image could not be opened: %@" + "value": "Warns when the processes in one pane use too much memory." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذّر فتح صورة القرص: %@" + "value": "Warnt, wenn die Prozesse in einem Teilfenster zu viel Speicher verbrauchen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Das Disk-Image konnte nicht geöffnet werden: %@" + "value": "Avertit lorsque les processus d’un volet utilisent trop de mémoire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "No se pudo abrir la imagen de disco: %@" + "value": "ينبّه عندما تستهلك العمليات في جزء واحد ذاكرة أكثر من اللازم." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Impossible d’ouvrir l’image disque : %@" + "value": "Avisa cuando los procesos de un panel usan demasiada memoria." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ディスクイメージを開けませんでした: %@" + "value": "單一窗格中的處理程序使用過多記憶體時發出警告。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "디스크 이미지를 열 수 없습니다: %@" + "value": "某个窗格中的进程占用过多内存时发出警告。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "无法打开磁盘映像:%@" + "value": "한 분할 창의 프로세스가 메모리를 너무 많이 사용하면 경고합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無法開啟磁碟映像檔:%@" + "value": "1 つのペインのプロセスがメモリを使いすぎると警告します。" } } } }, - "appChannelSwitch.failed.occupied": { + "settings.terminal.rendererRealization.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Another app is already installed at %@." + "value": "Frees graphics memory from terminals that are out of view. Their processes keep running." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يوجد تطبيق آخر مثبت بالفعل في %@." + "value": "Gibt den Grafikspeicher nicht sichtbarer Terminals frei. Ihre Prozesse laufen weiter." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Unter %@ ist bereits eine andere App installiert." + "value": "Libère la mémoire graphique des terminaux hors de vue. Leurs processus continuent de s’exécuter." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ya hay otra app instalada en %@." + "value": "يحرر ذاكرة الرسومات للطرفيات غير الظاهرة، مع استمرار تشغيل عملياتها." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Une autre app est déjà installée à l’emplacement %@." + "value": "Libera la memoria gráfica de las terminales fuera de la vista. Sus procesos siguen ejecutándose." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ には別のアプリがすでにインストールされています。" + "value": "釋放不在畫面上的終端機所使用的圖形記憶體,其處理程序仍會繼續執行。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@에 이미 다른 앱이 설치되어 있습니다." + "value": "释放不在屏幕上的终端所占用的图形内存,其进程仍会继续运行。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@ 已安装其他应用。" + "value": "화면에 보이지 않는 터미널의 그래픽 메모리를 해제합니다. 해당 프로세스는 계속 실행됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ 已安裝其他 App。" + "value": "表示されていないターミナルのグラフィックスメモリを解放します。プロセスは動作し続けます。" } } } }, - "appChannelSwitch.failed.title": { + "settings.terminal.scrollBar.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Couldn't switch to %@" + "value": "Shows a scroll bar in terminals, except in full-screen apps." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذّر التبديل إلى %@" + "value": "Zeigt in Terminals eine Bildlaufleiste an, außer in Vollbild-Apps." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Wechsel zu %@ nicht möglich" + "value": "Affiche une barre de défilement dans les terminaux, sauf dans les apps en plein écran." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "No se pudo cambiar a %@" + "value": "يعرض شريط تمرير في الطرفيات، إلا في التطبيقات بملء الشاشة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Impossible de passer à %@" + "value": "Muestra una barra de desplazamiento en las terminales, excepto en las apps a pantalla completa." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ に切り替えられませんでした" + "value": "在終端機中顯示捲軸(全螢幕 App 除外)。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@(으)로 전환할 수 없습니다" + "value": "在终端中显示滚动条(全屏 App 除外)。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "无法切换到 %@" + "value": "터미널에 스크롤 바를 표시합니다(전체 화면 앱 제외)." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無法切換至 %@" + "value": "ターミナルにスクロールバーを表示します(フルスクリーンアプリを除く)。" } } } }, - "appChannelSwitch.failed.verification": { + "settings.terminal.sessionContentWidth.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The downloaded app did not pass code signature verification, so it was not installed." + "value": "Wraps terminal and agent chat content at this width. Narrow panes still use their full width." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لم يجتز التطبيق الذي تم تنزيله التحقق من توقيع الشيفرة، لذا لم يتم تثبيته." + "value": "Terminal- und Agenten-Chat-Inhalte werden bei dieser Breite umbrochen. Schmalere Teilfenster nutzen weiterhin ihre volle Breite." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die heruntergeladene App hat die Prüfung der Codesignatur nicht bestanden und wurde nicht installiert." + "value": "Le contenu du terminal et du chat de l’agent revient à la ligne à cette largeur. Les volets plus étroits conservent toute leur largeur." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "La app descargada no superó la verificación de la firma de código, así que no se instaló." + "value": "يلتف محتوى الطرفية ودردشة الوكيل عند هذا العرض. أما الأجزاء الأضيق فتستخدم عرضها الكامل." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "L’app téléchargée n’a pas passé la vérification de la signature du code ; elle n’a donc pas été installée." + "value": "El contenido de la terminal y del chat de agentes se ajusta a este ancho. Los paneles más estrechos siguen usando todo su ancho." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ダウンロードしたアプリはコード署名の検証に合格しなかったため、インストールされませんでした。" + "value": "終端機和代理對話的內容會在此寬度換行。較窄的窗格仍使用完整寬度。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "다운로드한 앱이 코드 서명 확인을 통과하지 못해 설치하지 않았습니다." + "value": "终端和代理对话的内容会在此宽度处换行。较窄的窗格仍使用全部宽度。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "下载的应用未通过代码签名验证,因此未安装。" + "value": "터미널과 에이전트 채팅 내용을 이 너비에서 줄바꿈합니다. 이보다 좁은 분할 창에서는 전체 너비를 사용합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "下載的 App 未通過程式碼簽章驗證,因此未安裝。" + "value": "ターミナルとエージェントチャットの内容をこの幅で折り返します。これより狭いペインでは、ペインの幅いっぱいに表示します。" } } } }, - "appChannelSwitch.menu.nightly": { + "settings.terminal.textEditingGestures.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch to Nightly…" + "value": "Command and Option arrow and delete keys move and delete by line and word at the shell prompt." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "التبديل إلى Nightly…" + "value": "シェルのプロンプトでは、Command と Option の矢印キー・削除キーで行単位・単語単位に移動・削除します。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Zu Nightly wechseln…" + "value": "在 shell 提示符下,Command 和 Option 加方向键和删除键按行和按词移动和删除。" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Cambiar a Nightly…" + "value": "Befehls- und Wahltaste mit Pfeil- und Löschtasten bewegen und löschen an der Shell-Eingabeaufforderung zeilen- und wortweise." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Passer à Nightly…" + "value": "À l'invite du shell, les flèches et la touche Supprimer avec Commande et Option déplacent et suppriment par ligne et par mot." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "Nightly に切り替える…" + "value": "في موجه الصدفة، تنقل مفاتيح الأسهم والحذف مع Command وOption وتحذف حسب السطر والكلمة." } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "Nightly로 전환…" + "value": "En el prompt de la shell, las flechas y la tecla Eliminar con Comando y Opción mueven y borran por línea y por palabra." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切换到 Nightly…" + "value": "在 shell 提示字元下,Command 與 Option 加方向鍵與刪除鍵會依行與依字移動與刪除。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "切換至 Nightly…" + "value": "셸 프롬프트에서 Command 및 Option 화살표와 삭제 키가 줄 및 단어 단위로 이동하고 삭제합니다." } } } }, - "appChannelSwitch.menu.stable": { + "settings.textBox.focusOnNewTerminals.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switch to Stable…" + "value": "Opening a terminal tab, split, or workspace puts keyboard focus in the TextBox." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "التبديل إلى الإصدار المستقر…" + "value": "Wenn ein Terminal-Tab, eine Teilung oder ein Arbeitsbereich geöffnet wird, liegt der Tastaturfokus in der TextBox." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Zu Stable wechseln…" + "value": "À l’ouverture d’un onglet, d’une division ou d’un espace de travail de terminal, le focus du clavier est placé dans la TextBox." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cambiar a Stable…" + "value": "عند فتح علامة تبويب طرفية أو تقسيم أو مساحة عمل، ينتقل تركيز لوحة المفاتيح إلى TextBox." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Passer à Stable…" + "value": "Al abrir una pestaña de terminal, una división o un espacio de trabajo, el enfoque del teclado se sitúa en el TextBox." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "安定版に切り替える…" + "value": "開啟終端機標籤頁、分割或工作區時,將鍵盤焦點移到 TextBox。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "안정 버전으로 전환…" + "value": "打开终端标签页、分屏或工作区时,将键盘焦点移到 TextBox。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "切换到稳定版…" + "value": "터미널 탭, 분할 또는 작업 공간을 열면 키보드 포커스가 TextBox로 이동합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "切換至穩定版…" + "value": "ターミナルタブ、分割、またはワークスペースを開くと、キーボードフォーカスが TextBox に移動します。" } } } }, - "appChannelSwitch.opened.detail": { + "settings.textBox.showOnNewTerminals.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Both apps can run side by side. Quit this one now?" + "value": "Opening a terminal tab, split, or workspace shows the TextBox." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يمكن تشغيل التطبيقين جنبًا إلى جنب. هل تريد إنهاء هذا التطبيق الآن؟" + "value": "Beim Öffnen eines Terminal-Tabs, einer Teilung oder eines Arbeitsbereichs erscheint die TextBox." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Beide Apps können parallel laufen. Diese App jetzt beenden?" + "value": "À l’ouverture d’un onglet, d’une division ou d’un espace de travail de terminal, la TextBox s’affiche." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ambas apps pueden ejecutarse a la vez. ¿Salir de esta ahora?" + "value": "عند فتح علامة تبويب طرفية أو تقسيم أو مساحة عمل، يظهر TextBox." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Les deux apps peuvent fonctionner côte à côte. Quitter celle-ci maintenant ?" + "value": "Al abrir una pestaña de terminal, una división o un espacio de trabajo, se muestra el TextBox." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "両方のアプリを同時に実行できます。このアプリを今すぐ終了しますか?" + "value": "開啟終端機標籤頁、分割或工作區時顯示 TextBox。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "두 앱을 동시에 실행할 수 있습니다. 지금 이 앱을 종료할까요?" + "value": "打开终端标签页、分屏或工作区时显示 TextBox。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "两个应用可以同时运行。要现在退出此应用吗?" + "value": "터미널 탭, 분할 또는 작업 공간을 열면 TextBox가 표시됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "兩個 App 可以同時執行。要現在結束此 App 嗎?" + "value": "ターミナルタブ、分割、またはワークスペースを開くと、TextBox が表示されます。" } } } }, - "appChannelSwitch.opened.keep": { + "workspaceGroup.error.customColorIsNotAnInputKey": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Keep Open" + "value": "unknown key custom_color; set_color accepts hex or color" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إبقاؤه مفتوحًا" + "value": "不明なキー custom_color です。set_color は hex または color を受け付けます" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Geöffnet lassen" + "value": "未知的键 custom_color;set_color 接受 hex 或 color" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Mantener abierta" + "value": "Unbekannter Schlüssel custom_color; set_color akzeptiert hex oder color" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Garder ouverte" + "value": "Clé inconnue custom_color ; set_color accepte hex ou color" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "開いたままにする" + "value": "مفتاح غير معروف custom_color؛ يقبل set_color المفتاح hex أو color" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "열어 두기" + "value": "Clave desconocida custom_color; set_color acepta hex o color" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "保持打开" + "value": "未知的鍵 custom_color;set_color 接受 hex 或 color" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "保持開啟" + "value": "알 수 없는 키 custom_color입니다. set_color는 hex 또는 color를 받습니다" } } } }, - "appChannelSwitch.opened.quit": { + "workspaceGroup.error.colorMustBeHex": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Quit This App" + "value": "color must be a 6-digit hex color like #FF3EA5 (leading # optional)" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إنهاء هذا التطبيق" + "value": "color は #FF3EA5 のような 6 桁の 16 進カラーである必要があります(先頭の # は省略可)" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Diese App beenden" + "value": "color 必须是 6 位十六进制颜色,例如 #FF3EA5(开头的 # 可省略)" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Salir de esta app" + "value": "color muss eine 6-stellige Hex-Farbe wie #FF3EA5 sein (führendes # optional)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Quitter cette app" + "value": "color doit être une couleur hexadécimale à 6 chiffres comme #FF3EA5 (# initial facultatif)" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このアプリを終了" + "value": "يجب أن تكون قيمة color لونًا سداسيًا عشريًا من 6 خانات مثل #FF3EA5 (الرمز # في البداية اختياري)" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "이 앱 종료" + "value": "color debe ser un color hexadecimal de 6 dígitos como #FF3EA5 (el # inicial es opcional)" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "退出此应用" + "value": "color 必須是 6 位十六進位顏色,例如 #FF3EA5(開頭的 # 可省略)" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "結束此 App" + "value": "color는 #FF3EA5 같은 6자리 16진수 색상이어야 합니다(앞의 #는 생략 가능)" } } } }, - "appChannelSwitch.opened.title": { + "workspaceGroup.error.colorMustBeString": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ is open" + "value": "color must be a string holding a hex color" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ مفتوح" + "value": "color は 16 進カラーを含む文字列である必要があります" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ ist geöffnet" + "value": "color 必须是包含十六进制颜色的字符串" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "%@ está abierta" + "value": "color muss ein String mit einer Hex-Farbe sein" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%@ est ouverte" + "value": "color doit être une chaîne contenant une couleur hexadécimale" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ が開きました" + "value": "يجب أن تكون قيمة color سلسلة نصية تحتوي على لون سداسي عشري" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "%@이(가) 열렸습니다" + "value": "color debe ser una cadena de texto con un color hexadecimal" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ 已打开" + "value": "color 必須是包含十六進位顏色的字串" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@ 已開啟" + "value": "color는 16진수 색상을 담은 문자열이어야 합니다" } } } }, - "appChannelSwitch.progress.cancel": { + "workspaceGroup.error.iconSymbolIsNotAnInputKey": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "unknown key icon_symbol; set_icon accepts symbol or icon" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "不明なキー icon_symbol です。set_icon は symbol または icon を受け付けます" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "未知的键 icon_symbol;set_icon 接受 symbol 或 icon" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Unbekannter Schlüssel icon_symbol; set_icon akzeptiert symbol oder icon" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "Clé inconnue icon_symbol ; set_icon accepte symbol ou icon" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "مفتاح غير معروف icon_symbol؛ يقبل set_icon المفتاح symbol أو icon" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "Clave desconocida icon_symbol; set_icon acepta symbol o icon" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "未知的鍵 icon_symbol;set_icon 接受 symbol 或 icon" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "알 수 없는 키 icon_symbol입니다. set_icon은 symbol 또는 icon을 받습니다" } } } }, - "appChannelSwitch.progress.downloading": { + "workspaceGroup.error.symbolMustBeString": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Downloading %@…" + "value": "symbol must be a string" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "جارٍ تنزيل %@…" + "value": "symbol は文字列である必要があります" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ wird geladen…" + "value": "symbol 必须是字符串" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Descargando %@…" + "value": "symbol muss ein String sein" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Téléchargement de %@…" + "value": "symbol doit être une chaîne de caractères" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ をダウンロード中…" + "value": "يجب أن تكون قيمة symbol سلسلة نصية" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ 다운로드 중…" + "value": "symbol debe ser una cadena de texto" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在下载 %@…" + "value": "symbol 必須是字串" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在下載 %@…" + "value": "symbol은 문자열이어야 합니다" } } } }, - "appChannelSwitch.progress.installing": { + "settings.betaFeatures.predictedEcho.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Installing…" + "value": "Shows typed characters right away on slow remote connections. They stay underlined until the remote host confirms them. Password prompts and full-screen apps are excluded." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ التثبيت…" + "value": "Getippte Zeichen erscheinen bei langsamen Remoteverbindungen sofort. Sie bleiben unterstrichen, bis der Remote-Host sie bestätigt. Ausgenommen sind Passwortabfragen und Vollbild-Apps." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Wird installiert…" + "value": "Les caractères saisis s’affichent immédiatement sur les connexions distantes lentes. Ils restent soulignés jusqu’à ce que l’hôte distant les confirme. Cela ne s’applique ni aux invites de mot de passe ni aux apps en plein écran." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Instalando…" + "value": "تظهر الأحرف المكتوبة فورًا في الاتصالات البعيدة البطيئة، وتبقى مسطّرة حتى يؤكدها المضيف البعيد. ولا ينطبق ذلك على مطالبات كلمة المرور والتطبيقات بملء الشاشة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Installation…" + "value": "Los caracteres escritos aparecen al instante en conexiones remotas lentas y permanecen subrayados hasta que el host remoto los confirma. No se aplica a solicitudes de contraseña ni a apps a pantalla completa." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "インストール中…" + "value": "遠端連線較慢時,輸入的字元會立即顯示並加上底線,直到遠端主機確認為止。密碼提示和全螢幕 App 不適用此功能。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "설치 중…" + "value": "远程连接较慢时,输入的字符会立即显示并带有下划线,直到远程主机确认为止。密码提示和全屏 App 不适用此功能。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在安装…" + "value": "원격 연결이 느릴 때 입력한 문자를 바로 표시하고, 원격 호스트가 확인할 때까지 밑줄로 표시합니다. 비밀번호 프롬프트와 전체 화면 앱에는 적용되지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在安裝…" + "value": "リモート接続が遅いとき、入力した文字をすぐに表示し、リモートホストが確認するまで下線を付けます。パスワードの入力やフルスクリーンアプリには適用されません。" } } } }, - "appChannelSwitch.progress.launching": { + "settings.app.equalizeSplitsOnCreate.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Opening %@…" + "value": "Splitting a pane makes the panes in that direction equal in size." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ فتح %@…" + "value": "Wird ein Teilfenster geteilt, werden alle Teilfenster in dieser Richtung gleich groß." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ wird geöffnet…" + "value": "Lorsqu’un volet est divisé, les volets dans cette direction prennent la même taille." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abriendo %@…" + "value": "عند تقسيم جزء، تصبح الأجزاء في ذلك الاتجاه متساوية الحجم." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Ouverture de %@…" + "value": "Al dividir un panel, los paneles en esa dirección se ajustan al mismo tamaño." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ を開いています…" + "value": "分割窗格時,同一方向的窗格會調整為相同大小。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ 여는 중…" + "value": "拆分窗格时,同一方向的窗格会调整为相同大小。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在打开 %@…" + "value": "창을 분할하면 같은 방향의 분할 창이 모두 같은 크기가 됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在開啟 %@…" + "value": "ペインを分割すると、その方向のペインが同じサイズになります。" } } } }, - "appChannelSwitch.progress.title": { + "settings.terminal.showPasswordInputIndicator.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switching to %@" + "value": "Shows a lock badge in the terminal corner while a program such as sudo or ssh reads a password with echo off. Only local prompts are detected: ssh's own password prompt counts, but sudo inside an ssh session does not." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ التبديل إلى %@" + "value": "Zeigt in der Terminalecke ein Schloss-Symbol an, während ein Programm wie sudo oder ssh ein Passwort ohne Echo einliest. Nur lokale Abfragen werden erkannt: Die Passwortabfrage von ssh selbst zählt, sudo innerhalb einer ssh-Sitzung nicht." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Wechsel zu %@" + "value": "Affiche un badge de cadenas dans le coin du terminal pendant qu'un programme comme sudo ou ssh lit un mot de passe sans écho. Seules les invites locales sont détectées : l'invite de mot de passe de ssh compte, mais pas sudo dans une session ssh." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cambiando a %@" + "value": "يعرض شارة قفل في زاوية الطرفية أثناء قراءة برنامج مثل sudo أو ssh لكلمة مرور مع إيقاف الصدى. تُكتشف المطالبات المحلية فقط: تُحتسب مطالبة كلمة مرور ssh نفسها، أما sudo داخل جلسة ssh فلا." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Passage à %@" + "value": "Muestra una insignia de candado en la esquina del terminal mientras un programa como sudo o ssh lee una contraseña sin eco. Solo se detectan las solicitudes locales: la solicitud de contraseña de ssh cuenta, pero sudo dentro de una sesión ssh no." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ に切り替え中" + "value": "當 sudo 或 ssh 等程式在關閉回顯的情況下讀取密碼時,在終端機角落顯示鎖頭標記。僅偵測本機提示:ssh 本身的密碼提示會被偵測,但 ssh 工作階段中的 sudo 不會。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@(으)로 전환 중" + "value": "当 sudo 或 ssh 等程序在关闭回显的情况下读取密码时,在终端角落显示锁形标记。仅检测本地提示:ssh 自身的密码提示会被检测,但 ssh 会话中的 sudo 不会。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在切换到 %@" + "value": "sudo나 ssh 같은 프로그램이 에코를 끈 상태로 비밀번호를 읽는 동안 터미널 모서리에 자물쇠 배지를 표시합니다. 로컬 프롬프트만 감지됩니다. ssh 자체의 비밀번호 프롬프트는 포함되지만 ssh 세션 안의 sudo는 포함되지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在切換至 %@" + "value": "sudo や ssh などのプログラムがエコーをオフにしてパスワードを読み取っている間、ターミナルの隅に鍵のバッジを表示します。検出されるのはローカルのプロンプトだけです。ssh 自体のパスワード入力は対象ですが、ssh セッション内の sudo は対象外です。" } } } }, - "appChannelSwitch.progress.verifying": { + "settings.terminal.showPasswordInputDots.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Verifying the code signature…" + "value": "Shows one dot in the badge per typed character. cmux keeps only a count, never the characters. Pasted text is not counted." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ التحقق من توقيع الشيفرة…" + "value": "Zeigt im Symbol einen Punkt pro eingegebenem Zeichen. cmux speichert nur die Anzahl, niemals die Zeichen. Eingefügter Text wird nicht gezählt." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Codesignatur wird geprüft…" + "value": "Affiche dans le badge un point par caractère saisi. cmux ne conserve qu'un compteur, jamais les caractères. Le texte collé n'est pas compté." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Verificando la firma de código…" + "value": "يعرض في الشارة نقطة واحدة لكل حرف مكتوب. يحتفظ cmux بالعدد فقط، ولا يحتفظ بالأحرف أبدًا. لا يُحتسب النص الملصق." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Vérification de la signature du code…" + "value": "Muestra en la insignia un punto por cada carácter escrito. cmux solo guarda un recuento, nunca los caracteres. El texto pegado no se cuenta." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "コード署名を検証中…" + "value": "在標記中為每個已輸入的字元顯示一個圓點。cmux 只保留數量,絕不保留字元本身。貼上的文字不計入。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "코드 서명 확인 중…" + "value": "在标记中为每个已输入的字符显示一个圆点。cmux 只保留数量,绝不保留字符本身。粘贴的文本不计入。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在验证代码签名…" + "value": "배지에 입력한 문자마다 점을 하나씩 표시합니다. cmux는 개수만 유지하며 문자는 절대 보관하지 않습니다. 붙여넣은 텍스트는 세지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在驗證程式碼簽章…" + "value": "入力した文字ごとにバッジにドットを 1 つ表示します。cmux が保持するのは数だけで、文字そのものは保持しません。貼り付けたテキストは数えません。" } } } }, - "settings.search.alias.setting.workspaceColors.subtle-selection": { + "terminal.paste.notice.imageTooLarge": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent" + "value": "الصورة أكبر من 10 ميغابايت" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 控えめ 選択 ハイライト 淡い 枠線" + "value": "Bild ist größer als 10 MB" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 柔和 选中 高亮 淡色 边框" + "value": "Image is larger than 10 MB" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 柔和 選取 高亮 淡色 邊框" + "value": "La imagen supera los 10 MB" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 은은한 선택 하이라이트 옅은 테두리" + "value": "L’image dépasse 10 Mo" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent dezent Auswahl Hervorhebung Akzent Rand" + "value": "画像が 10 MB を超えています" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent sutil selección resaltado acento borde" + "value": "이미지가 10MB보다 큽니다" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent discret sélection surlignage accent bordure" + "value": "图片大于 10 MB" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent هادئ تحديد تمييز لون حافة" + "value": "圖片大於 10 MB" } } } }, - "settings.workspaceColors.subtleSelection": { + "terminal.paste.notice.timedOut": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Subtle Selection Highlight" + "value": "انتهت مهلة اللصق" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "控えめな選択ハイライト" + "value": "Zeitüberschreitung beim Einfügen" } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "柔和的选中高亮" + "value": "Paste timed out" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "柔和的選取高亮" + "value": "Se agotó el tiempo para pegar" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "은은한 선택 하이라이트" + "value": "Le collage a expiré" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Dezente Auswahlhervorhebung" + "value": "貼り付けがタイムアウトしました" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Resaltado de selección sutil" + "value": "붙여넣기 시간이 초과되었습니다" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Surlignage de la sélection discret" + "value": "粘贴超时" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "تمييز تحديد هادئ" + "value": "貼上逾時" } } } }, - "settings.workspaceColors.subtleSelection.subtitle": { + "shortcut.pasteLastScreenshot.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show the selected workspace as a faint accent tint with a thin edge instead of a solid fill. A custom Selection Highlight color still uses a solid fill." + "value": "Paste Last Screenshot" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "選択中のワークスペースを、塗りつぶしではなく淡いアクセントカラーと細い枠線で表示します。カスタムの選択ハイライト色を設定している場合は塗りつぶしのままです。" + "value": "لصق آخر لقطة شاشة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "用淡淡的强调色和细边框显示选中的工作区,而不是实色填充。设置了自定义选中高亮颜色时仍使用实色填充。" + "value": "Letzten Screenshot einfügen" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "以淡淡的強調色和細邊框顯示選取的工作區,而非實色填滿。設定了自訂選取高亮顏色時仍使用實色填滿。" + "value": "Pegar la última captura de pantalla" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "선택한 작업 공간을 단색 채우기 대신 옅은 강조 색상과 얇은 테두리로 표시합니다. 사용자 지정 선택 하이라이트 색상은 계속 단색으로 채웁니다." + "value": "Coller la dernière capture d’écran" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Zeigt den ausgewählten Arbeitsbereich als zarte Akzentfarbe mit feinem Rand statt als volle Füllung. Eine eigene Farbe für die Auswahlhervorhebung bleibt eine volle Füllung." + "value": "最新のスクリーンショットを貼り付け" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Muestra el espacio de trabajo seleccionado con un tono de acento suave y un borde fino en lugar de un relleno sólido. Un color de resaltado de selección personalizado sigue usando relleno sólido." + "value": "마지막 스크린샷 붙여넣기" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Affiche l’espace de travail sélectionné avec une légère teinte d’accentuation et une fine bordure au lieu d’un remplissage plein. Une couleur de surlignage de la sélection personnalisée reste un remplissage plein." + "value": "粘贴最新的截图" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "يعرض مساحة العمل المحددة بلون تمييز خفيف وحافة رفيعة بدلاً من تعبئة كاملة. يظل لون تمييز التحديد المخصص يستخدم تعبئة كاملة." + "value": "貼上最新的螢幕截圖" } } } }, - "ghosttyConfigDiagnostics.notice.dismiss": { + "command.terminalPasteLastScreenshot.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Dismiss" + "value": "Paste Last Screenshot" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تجاهل" + "value": "لصق آخر لقطة شاشة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schließen" + "value": "Letzten Screenshot einfügen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Descartar" + "value": "Pegar la última captura de pantalla" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ignorer" + "value": "Coller la dernière capture d’écran" } }, "ja": { "stringUnit": { "state": "translated", - "value": "閉じる" + "value": "最新のスクリーンショットを貼り付け" } }, "ko": { "stringUnit": { "state": "translated", - "value": "닫기" + "value": "마지막 스크린샷 붙여넣기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "粘贴最新的截图" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "貼上最新的螢幕截圖" } } } }, - "ghosttyConfigDiagnostics.notice.hint": { + "terminal.unsafePasteConfirmation.message": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fix the file and save it; cmux reloads the config automatically." + "value": "قد ينفّذ هذا النص أوامر فور لصقه، مثلًا لأنه يحتوي على فاصل أسطر. الصقه فقط إذا كنت تثق به." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أصلح الملف واحفظه؛ يعيد cmux تحميل الإعدادات تلقائيًا." + "value": "Dieser Text könnte beim Einfügen sofort Befehle ausführen, zum Beispiel weil er einen Zeilenumbruch enthält. Füge ihn nur ein, wenn du ihm vertraust." } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Korrigiere die Datei und speichere sie; cmux lädt die Konfiguration automatisch neu." + "value": "This text could run commands as soon as it is pasted, for example because it contains a line break. Paste it only if you trust it." } }, "es": { "stringUnit": { "state": "translated", - "value": "Corrige el archivo y guárdalo; cmux vuelve a cargar la configuración automáticamente." + "value": "Este texto podría ejecutar comandos en cuanto se pegue, por ejemplo porque contiene un salto de línea. Pégalo solo si confías en él." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Corrigez le fichier et enregistrez-le ; cmux recharge automatiquement la configuration." + "value": "Ce texte pourrait exécuter des commandes dès qu’il est collé, par exemple parce qu’il contient un saut de ligne. Ne le collez que si vous lui faites confiance." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ファイルを修正して保存すると、cmux が設定を自動的に再読み込みします。" + "value": "このテキストには改行が含まれているなどの理由で、貼り付けた直後にコマンドが実行される可能性があります。信頼できる場合にのみ貼り付けてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파일을 수정하고 저장하면 cmux가 설정을 자동으로 다시 불러옵니다." + "value": "이 텍스트는 줄바꿈이 들어 있는 등의 이유로 붙여넣는 즉시 명령을 실행할 수 있습니다. 신뢰할 수 있을 때만 붙여넣으세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "修正文件并保存;cmux 会自动重新加载配置。" + "value": "这段文本可能在粘贴后立即运行命令,例如因为其中包含换行。只有在你信任它时才粘贴。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "修正檔案並儲存;cmux 會自動重新載入設定。" + "value": "這段文字可能在貼上後立即執行指令,例如因為其中包含換行。只有在你信任它時才貼上。" } } } }, - "ghosttyConfigDiagnostics.notice.more": { + "terminal.unsafePasteConfirmation.paste": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "More errors are not shown." + "value": "لصق" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "لا تُعرض أخطاء أخرى." + "value": "Einfügen" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Weitere Fehler werden nicht angezeigt." + "value": "Paste" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hay más errores que no se muestran." + "value": "Pegar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "D’autres erreurs ne sont pas affichées." + "value": "Coller" } }, "ja": { "stringUnit": { "state": "translated", - "value": "表示されていないエラーが他にもあります。" + "value": "貼り付け" } }, "ko": { "stringUnit": { "state": "translated", - "value": "표시되지 않은 오류가 더 있습니다." + "value": "붙여넣기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "还有其他错误未显示。" + "value": "粘贴" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尚有其他錯誤未顯示。" + "value": "貼上" } } } }, - "ghosttyConfigDiagnostics.notice.open": { + "terminal.unsafePasteConfirmation.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Open Config" + "value": "هل تريد لصق نص قد يكون غير آمن؟" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "فتح الإعدادات" + "value": "Möglicherweise unsicheren Text einfügen?" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Konfiguration öffnen" + "value": "Paste Potentially Unsafe Text?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir configuración" + "value": "¿Pegar texto potencialmente no seguro?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir la configuration" + "value": "Coller un texte potentiellement dangereux ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定を開く" + "value": "安全でない可能性のあるテキストを貼り付けますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "설정 열기" + "value": "안전하지 않을 수 있는 텍스트를 붙여넣을까요?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开配置" + "value": "要粘贴可能不安全的文本吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟設定" + "value": "要貼上可能不安全的文字嗎?" } } } }, - "ghosttyConfigDiagnostics.notice.title": { + "settings.terminal.confirmUnsafePaste": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ghostty config errors" + "value": "تأكيد اللصق غير الآمن" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أخطاء في إعدادات Ghostty" + "value": "Unsicheres Einfügen bestätigen" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Fehler in der Ghostty-Konfiguration" + "value": "Confirm Unsafe Pastes" } }, "es": { "stringUnit": { "state": "translated", - "value": "Errores en la configuración de Ghostty" + "value": "Confirmar pegados no seguros" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Erreurs dans la configuration Ghostty" + "value": "Confirmer les collages non sûrs" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Ghostty 設定のエラー" + "value": "安全でない貼り付けを確認" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Ghostty 설정 오류" + "value": "안전하지 않은 붙여넣기 확인" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ghostty 配置错误" + "value": "确认不安全的粘贴" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ghostty 設定錯誤" + "value": "確認不安全的貼上" } } } }, - "command.openTerminalChatView.title": { + "settings.terminal.confirmUnsafePaste.subtitleOff": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Open terminal as chat" + "value": "يتم اللصق الذي يصنّفه Ghostty على أنه غير آمن دون سؤال." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "ターミナルをチャットで表示" + "value": "Von Ghostty als unsicher markierte Einfügungen werden ohne Nachfrage ausgeführt." } }, - "zh-Hans": { + "en": { "stringUnit": { "state": "translated", - "value": "以对话形式查看终端" + "value": "Pastes Ghostty flags as unsafe go through without asking." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Terminal als Chat öffnen" + "value": "Los pegados que Ghostty marca como no seguros se realizan sin preguntar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir le terminal en discussion" + "value": "Les collages que Ghostty signale comme non sûrs sont effectués sans demander." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فتح الطرفية كدردشة" + "value": "Ghostty が安全でないと判定した貼り付けも、確認せずに実行します。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Abrir la terminal como chat" + "value": "Ghostty가 안전하지 않다고 표시한 붙여넣기도 묻지 않고 진행합니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "以對話形式檢視終端機" + "value": "Ghostty 标记为不安全的粘贴会直接执行,不会询问。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "터미널을 채팅으로 열기" + "value": "Ghostty 標記為不安全的貼上會直接執行,不會詢問。" } } } }, - "settings.app.warnBeforeClosingWindow": { + "settings.terminal.confirmUnsafePaste.subtitleOn": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Warn Before Closing Window" + "value": "ينتظر اللصق الذي يصنّفه Ghostty على أنه غير آمن، مثل عدة أسطر في برنامج لا يستخدم اللصق المحاط (bracketed paste)، تأكيدك في ورقة مرفقة بالنافذة." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "التحذير قبل إغلاق النافذة" + "value": "Ein Einfügen, das Ghostty als unsicher markiert, etwa mehrere Zeilen in ein Programm ohne Bracketed Paste, wartet auf deine Bestätigung in einem Sheet am Fenster." } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Vor dem Schließen eines Fensters warnen" + "value": "A paste Ghostty flags as unsafe, such as several lines into a program without bracketed paste, waits for you to confirm it in a sheet on the window." } }, "es": { "stringUnit": { "state": "translated", - "value": "Advertir antes de cerrar una ventana" + "value": "Un pegado que Ghostty marca como no seguro, como varias líneas en un programa sin pegado entre corchetes (bracketed paste), espera tu confirmación en una hoja de la ventana." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Avertir avant de fermer une fenêtre" + "value": "Un collage que Ghostty signale comme non sûr, par exemple plusieurs lignes dans un programme sans collage entre crochets (bracketed paste), attend votre confirmation dans une feuille attachée à la fenêtre." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウィンドウを閉じる前に警告" + "value": "Ghostty が安全でないと判定した貼り付け(ブラケットペーストを使わないプログラムへの複数行の貼り付けなど)は、ウインドウのシートで確認するまで待機します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "윈도우를 닫기 전에 경고" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Попереджати перед закриттям вікна" + "value": "Ghostty가 안전하지 않다고 표시한 붙여넣기(예: 브래킷 붙여넣기를 쓰지 않는 프로그램에 여러 줄 붙여넣기)는 창에 붙은 시트에서 확인할 때까지 기다립니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭窗口前警告" + "value": "Ghostty 标记为不安全的粘贴(例如将多行文本粘贴到未启用括号粘贴的程序中)会先在窗口上的表单中等待你确认。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉視窗前發出警告" + "value": "Ghostty 標記為不安全的貼上(例如將多行文字貼到未啟用括號貼上的程式中)會先在視窗上的表單中等待你確認。" } } } }, - "settings.app.warnBeforeClosingWindow.subtitleOff": { + "settings.search.alias.setting.terminal.confirm-unsafe-paste": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Windows close immediately without confirmation." + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet لصق غير آمن تأكيد تحذير عدة أسطر فاصل أسطر حافظة" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تُغلق النوافذ فورًا دون تأكيد." + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet unsicher einfügen bestätigen warnung mehrzeilig zeilenumbruch zwischenablage" } }, - "de": { + "en": { "stringUnit": { "state": "translated", - "value": "Fenster werden sofort und ohne Bestätigung geschlossen." + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet" } }, "es": { "stringUnit": { "state": "translated", - "value": "Las ventanas se cierran inmediatamente sin confirmación." + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet pegar no seguro confirmar advertencia varias líneas salto de línea portapapeles" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les fenêtres se ferment immédiatement sans confirmation." + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet coller non sûr confirmer avertissement plusieurs lignes saut de ligne presse-papiers" } }, "ja": { "stringUnit": { "state": "translated", - "value": "確認なしにすぐウィンドウを閉じます。" + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 貼り付け ペースト 安全でない 確認 警告 複数行 改行 クリップボード" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인 창 없이 윈도우가 즉시 닫힙니다." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Вікна закриваються одразу без підтвердження." + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 붙여넣기 안전하지 않음 확인 경고 여러 줄 줄바꿈 클립보드" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "窗口会直接关闭,不做确认。" + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 粘贴 不安全 确认 警告 多行 换行 剪贴板" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "視窗將立即關閉,無需確認。" + "value": "terminal.confirmUnsafePaste confirm unsafe paste protection warning multi-line newline clipboard sheet 貼上 不安全 確認 警告 多行 換行 剪貼簿" } } } }, - "settings.app.warnBeforeClosingWindow.subtitleOn": { + "appChannelSwitch.action.nightly": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show a confirmation before closing a window with a running process, or all of a window's workspaces at once." + "value": "Switch to Nightly" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار تأكيد قبل إغلاق نافذة بها عملية قيد التشغيل، أو إغلاق جميع مساحات العمل في نافذة دفعة واحدة." + "value": "التبديل إلى Nightly" } }, "de": { "stringUnit": { "state": "translated", - "value": "Eine Bestätigung anzeigen, bevor ein Fenster mit einem laufenden Prozess oder alle Arbeitsbereiche eines Fensters auf einmal geschlossen werden." + "value": "Zu Nightly wechseln" } }, "es": { "stringUnit": { "state": "translated", - "value": "Muestra una confirmación antes de cerrar una ventana con un proceso en ejecución, o todos los espacios de trabajo de una ventana a la vez." + "value": "Cambiar a Nightly" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher une confirmation avant de fermer une fenêtre avec un processus en cours, ou tous les espaces de travail d'une fenêtre à la fois." + "value": "Passer à Nightly" } }, "ja": { "stringUnit": { "state": "translated", - "value": "実行中のプロセスがあるウィンドウ、またはウィンドウ内のすべてのワークスペースをまとめて閉じる前に確認を表示します。" + "value": "Nightly に切り替える" } }, "ko": { "stringUnit": { "state": "translated", - "value": "실행 중인 프로세스가 있는 윈도우나 윈도우의 모든 워크스페이스를 한 번에 닫기 전에 확인 창을 표시합니다." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Показувати підтвердження перед закриттям вікна із запущеним процесом або всіх робочих областей вікна одночасно." + "value": "Nightly로 전환" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭有正在运行进程的窗口,或一次关闭窗口中所有工作区前显示确认。" + "value": "切换到 Nightly" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉有執行中程序的視窗,或一次關閉視窗中所有工作區前顯示確認。" + "value": "切換至 Nightly" } } } }, - "settings.app.warnBeforeClosingWorkspace": { + "appChannelSwitch.action.stable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Warn Before Closing Workspace" + "value": "Switch to Stable" } }, "ar": { "stringUnit": { "state": "translated", - "value": "التحذير قبل إغلاق مساحة العمل" + "value": "التبديل إلى الإصدار المستقر" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vor dem Schließen eines Arbeitsbereichs warnen" + "value": "Zu Stable wechseln" } }, "es": { "stringUnit": { "state": "translated", - "value": "Advertir antes de cerrar un espacio de trabajo" + "value": "Cambiar a Stable" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Avertir avant de fermer un espace de travail" + "value": "Passer à Stable" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースを閉じる前に警告" + "value": "安定版に切り替える" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스를 닫기 전에 경고" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Попереджати перед закриттям робочої області" + "value": "안정 버전으로 전환" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭工作区前警告" + "value": "切换到稳定版" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉工作區前發出警告" + "value": "切換至穩定版" } } } }, - "settings.app.warnBeforeClosingWorkspace.subtitleOff": { + "appChannelSwitch.failed.appMissing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Workspaces close immediately without confirmation. Pinned workspaces still ask." + "value": "The downloaded disk image does not contain the expected app." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تُغلق مساحات العمل فورًا دون تأكيد. لا تزال مساحات العمل المثبتة تطلب التأكيد." + "value": "لا تحتوي صورة القرص التي تم تنزيلها على التطبيق المتوقع." } }, "de": { "stringUnit": { "state": "translated", - "value": "Arbeitsbereiche werden sofort und ohne Bestätigung geschlossen. Angepinnte Arbeitsbereiche fragen weiterhin nach." + "value": "Das heruntergeladene Disk-Image enthält nicht die erwartete App." } }, "es": { "stringUnit": { "state": "translated", - "value": "Los espacios de trabajo se cierran inmediatamente sin confirmación. Los espacios de trabajo fijados siguen pidiendo confirmación." + "value": "La imagen de disco descargada no contiene la app esperada." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les espaces de travail se ferment immédiatement sans confirmation. Les espaces de travail épinglés demandent toujours." + "value": "L’image disque téléchargée ne contient pas l’app attendue." } }, "ja": { "stringUnit": { "state": "translated", - "value": "確認なしにすぐワークスペースを閉じます。ピン留めされたワークスペースは引き続き確認します。" + "value": "ダウンロードしたディスクイメージに目的のアプリが含まれていません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "확인 창 없이 워크스페이스가 즉시 닫힙니다. 고정된 워크스페이스는 계속 확인합니다." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Робочі області закриваються одразу без підтвердження. Закріплені робочі області все одно запитують." + "value": "다운로드한 디스크 이미지에 예상한 앱이 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区会直接关闭,不做确认。已固定的工作区仍会确认。" + "value": "下载的磁盘映像不包含预期的应用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區將立即關閉,無需確認。釘選的工作區仍會確認。" + "value": "下載的磁碟映像檔不包含預期的 App。" } } } }, - "settings.app.warnBeforeClosingWorkspace.subtitleOn": { + "appChannelSwitch.failed.close": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show a confirmation before closing a workspace with a running process, or several workspaces at once." + "value": "Close" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار تأكيد قبل إغلاق مساحة عمل بها عملية قيد التشغيل، أو عدة مساحات عمل دفعة واحدة." + "value": "إغلاق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Eine Bestätigung anzeigen, bevor ein Arbeitsbereich mit einem laufenden Prozess oder mehrere Arbeitsbereiche auf einmal geschlossen werden." + "value": "Schließen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Muestra una confirmación antes de cerrar un espacio de trabajo con un proceso en ejecución, o varios espacios de trabajo a la vez." + "value": "Cerrar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher une confirmation avant de fermer un espace de travail avec un processus en cours, ou plusieurs espaces de travail à la fois." + "value": "Fermer" } }, "ja": { "stringUnit": { "state": "translated", - "value": "実行中のプロセスがあるワークスペース、または複数のワークスペースをまとめて閉じる前に確認を表示します。" + "value": "閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "실행 중인 프로세스가 있는 워크스페이스나 여러 워크스페이스를 한 번에 닫기 전에 확인 창을 표시합니다." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Показувати підтвердження перед закриттям робочої області із запущеним процесом або кількох робочих областей одночасно." + "value": "닫기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭有正在运行进程的工作区,或一次关闭多个工作区前显示确认。" + "value": "关闭" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉有執行中程序的工作區,或一次關閉多個工作區前顯示確認。" + "value": "關閉" } } } }, - "settings.search.alias.setting.app.warn-before-closing-window": { + "appChannelSwitch.failed.download": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process" + "value": "Download Manually" } }, "ar": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process إغلاق النافذة تأكيد تحذير عملية قيد التشغيل" + "value": "التنزيل يدويًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process fenster schließen bestätigung warnung laufender prozess" + "value": "Manuell laden" } }, "es": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process cerrar ventana confirmación advertencia proceso en ejecución" + "value": "Descargar manualmente" } }, "fr": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process fermer fenêtre confirmation avertissement processus en cours" + "value": "Télécharger manuellement" } }, "ja": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process ウィンドウを閉じる 確認 警告 実行中のプロセス" + "value": "手動でダウンロード" } }, "ko": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process 윈도우 닫기 확인 경고 실행 중인 프로세스" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process закрити вікно підтвердження попередження запущений процес" + "value": "수동으로 다운로드" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process 关闭窗口 确认 警告 正在运行的进程" + "value": "手动下载" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process 關閉視窗 確認 警告 執行中的程序" + "value": "手動下載" } } } }, - "settings.search.alias.setting.app.warn-before-closing-workspace": { + "appChannelSwitch.failed.downloadDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent" + "value": "The download failed: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent إغلاق مساحة العمل تأكيد تحذير عملية قيد التشغيل" + "value": "فشل التنزيل: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent arbeitsbereich schließen bestätigung warnung laufender prozess" + "value": "Der Download ist fehlgeschlagen: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent cerrar espacio de trabajo confirmación advertencia proceso en ejecución" + "value": "La descarga falló: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent fermer espace de travail confirmation avertissement processus en cours" + "value": "Le téléchargement a échoué : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent ワークスペースを閉じる 確認 警告 実行中のプロセス" + "value": "ダウンロードに失敗しました: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent 워크스페이스 닫기 확인 경고 실행 중인 프로세스" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent закрити робочу область підтвердження попередження запущений процес" + "value": "다운로드 실패: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent 关闭工作区 确认 警告 正在运行的进程" + "value": "下载失败:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent 關閉工作區 確認 警告 執行中的程序" + "value": "下載失敗:%@" } } } }, - "settings.terminal.ghostty.backgroundBlur": { + "appChannelSwitch.failed.installDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Background Blur" + "value": "The app could not be installed: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تمويه الخلفية" + "value": "تعذّر تثبيت التطبيق: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Hintergrundunschärfe" + "value": "Die App konnte nicht installiert werden: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desenfoque del fondo" + "value": "No se pudo instalar la app: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Flou de l'arrière-plan" + "value": "Impossible d’installer l’app : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "背景のぼかし" + "value": "アプリをインストールできませんでした: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "배경 흐림" + "value": "앱을 설치할 수 없습니다: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "背景模糊" + "value": "无法安装应用:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "背景模糊" + "value": "無法安裝 App:%@" } } } }, - "settings.terminal.ghostty.backgroundOpacity": { + "appChannelSwitch.failed.launchDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Background Opacity" + "value": "The app could not be opened: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عتامة الخلفية" + "value": "تعذّر فتح التطبيق: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Hintergrunddeckkraft" + "value": "Die App konnte nicht geöffnet werden: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Opacidad del fondo" + "value": "No se pudo abrir la app: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Opacité de l'arrière-plan" + "value": "Impossible d’ouvrir l’app : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "背景の不透明度" + "value": "アプリを開けませんでした: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "배경 불투명도" + "value": "앱을 열 수 없습니다: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "背景不透明度" + "value": "无法打开应用:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "背景不透明度" + "value": "無法開啟 App:%@" } } } }, - "settings.terminal.ghostty.cursorBlink": { + "appChannelSwitch.failed.mountDetail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Blinking Cursor" + "value": "The disk image could not be opened: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مؤشر وامض" + "value": "تعذّر فتح صورة القرص: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blinkender Cursor" + "value": "Das Disk-Image konnte nicht geöffnet werden: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cursor parpadeante" + "value": "No se pudo abrir la imagen de disco: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Curseur clignotant" + "value": "Impossible d’ouvrir l’image disque : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カーソルの点滅" + "value": "ディスクイメージを開けませんでした: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "커서 깜박임" + "value": "디스크 이미지를 열 수 없습니다: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "光标闪烁" + "value": "无法打开磁盘映像:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "游標閃爍" + "value": "無法開啟磁碟映像檔:%@" } } } }, - "settings.terminal.ghostty.cursorStyle": { + "appChannelSwitch.failed.occupied": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cursor Style" + "value": "Another app is already installed at %@." } }, "ar": { "stringUnit": { "state": "translated", - "value": "نمط المؤشر" + "value": "يوجد تطبيق آخر مثبت بالفعل في %@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Cursorstil" + "value": "Unter %@ ist bereits eine andere App installiert." } }, "es": { "stringUnit": { "state": "translated", - "value": "Estilo del cursor" + "value": "Ya hay otra app instalada en %@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Style du curseur" + "value": "Une autre app est déjà installée à l’emplacement %@." } }, "ja": { "stringUnit": { "state": "translated", - "value": "カーソルのスタイル" + "value": "%@ には別のアプリがすでにインストールされています。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "커서 스타일" + "value": "%@에 이미 다른 앱이 설치되어 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "光标样式" + "value": "%@ 已安装其他应用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "游標樣式" + "value": "%@ 已安裝其他 App。" } } } }, - "settings.terminal.ghostty.fontFamily": { + "appChannelSwitch.failed.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Font" + "value": "Couldn't switch to %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الخط" + "value": "تعذّر التبديل إلى %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schrift" + "value": "Wechsel zu %@ nicht möglich" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fuente" + "value": "No se pudo cambiar a %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Police" + "value": "Impossible de passer à %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フォント" + "value": "%@ に切り替えられませんでした" } }, "ko": { "stringUnit": { "state": "translated", - "value": "글꼴" + "value": "%@(으)로 전환할 수 없습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "字体" + "value": "无法切换到 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "字體" + "value": "無法切換至 %@" } } } }, - "settings.terminal.ghostty.fontSize": { + "appChannelSwitch.failed.verification": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Font Size" + "value": "The downloaded app did not pass code signature verification, so it was not installed." } }, "ar": { "stringUnit": { "state": "translated", - "value": "حجم الخط" + "value": "لم يجتز التطبيق الذي تم تنزيله التحقق من توقيع الشيفرة، لذا لم يتم تثبيته." } }, "de": { "stringUnit": { "state": "translated", - "value": "Schriftgröße" + "value": "Die heruntergeladene App hat die Prüfung der Codesignatur nicht bestanden und wurde nicht installiert." } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño de fuente" + "value": "La app descargada no superó la verificación de la firma de código, así que no se instaló." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille de police" + "value": "L’app téléchargée n’a pas passé la vérification de la signature du code ; elle n’a donc pas été installée." } }, "ja": { "stringUnit": { "state": "translated", - "value": "フォントサイズ" + "value": "ダウンロードしたアプリはコード署名の検証に合格しなかったため、インストールされませんでした。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "글꼴 크기" + "value": "다운로드한 앱이 코드 서명 확인을 통과하지 못해 설치하지 않았습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "字体大小" + "value": "下载的应用未通过代码签名验证,因此未安装。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "字體大小" + "value": "下載的 App 未通過程式碼簽章驗證,因此未安裝。" } } } }, - "settings.terminal.ghostty.optionAsAlt": { + "appChannelSwitch.menu.nightly": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Option as Alt" + "value": "Switch to Nightly…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "Option كمفتاح Alt" + "value": "التبديل إلى Nightly…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wahltaste als Alt" + "value": "Zu Nightly wechseln…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Opción como Alt" + "value": "Cambiar a Nightly…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Option comme Alt" + "value": "Passer à Nightly…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Option を Alt として使用" + "value": "Nightly に切り替える…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Option을 Alt로 사용" + "value": "Nightly로 전환…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Option 作为 Alt" + "value": "切换到 Nightly…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Option 作為 Alt" + "value": "切換至 Nightly…" } } } }, - "settings.terminal.ghostty.scrollbackLimit": { + "appChannelSwitch.menu.stable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Scrollback Limit" + "value": "Switch to Stable…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حد سجل التمرير" + "value": "التبديل إلى الإصدار المستقر…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Scrollback-Limit" + "value": "Zu Stable wechseln…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Límite del historial de desplazamiento" + "value": "Cambiar a Stable…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite de défilement arrière" + "value": "Passer à Stable…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "スクロールバックの上限" + "value": "安定版に切り替える…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "스크롤백 한도" + "value": "안정 버전으로 전환…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "回滚上限" + "value": "切换到稳定版…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "回捲上限" + "value": "切換至穩定版…" } } } }, - "settings.terminal.ghostty.windowPaddingX": { + "appChannelSwitch.opened.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Horizontal Padding" + "value": "Both apps can run side by side. Quit this one now?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحشو الأفقي" + "value": "يمكن تشغيل التطبيقين جنبًا إلى جنب. هل تريد إنهاء هذا التطبيق الآن؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Horizontaler Innenabstand" + "value": "Beide Apps können parallel laufen. Diese App jetzt beenden?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Relleno horizontal" + "value": "Ambas apps pueden ejecutarse a la vez. ¿Salir de esta ahora?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Marge intérieure horizontale" + "value": "Les deux apps peuvent fonctionner côte à côte. Quitter celle-ci maintenant ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "水平方向の余白" + "value": "両方のアプリを同時に実行できます。このアプリを今すぐ終了しますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가로 여백" + "value": "두 앱을 동시에 실행할 수 있습니다. 지금 이 앱을 종료할까요?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "水平边距" + "value": "两个应用可以同时运行。要现在退出此应用吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "水平邊距" + "value": "兩個 App 可以同時執行。要現在結束此 App 嗎?" } } } }, - "settings.terminal.ghostty.windowPaddingY": { + "appChannelSwitch.opened.keep": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Vertical Padding" + "value": "Keep Open" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحشو العمودي" + "value": "إبقاؤه مفتوحًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vertikaler Innenabstand" + "value": "Geöffnet lassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Relleno vertical" + "value": "Mantener abierta" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Marge intérieure verticale" + "value": "Garder ouverte" } }, "ja": { "stringUnit": { "state": "translated", - "value": "垂直方向の余白" + "value": "開いたままにする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "세로 여백" + "value": "열어 두기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "垂直边距" + "value": "保持打开" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "垂直邊距" + "value": "保持開啟" } } } }, - "settings.terminal.ghostty.cursorStyle.bar": { + "appChannelSwitch.opened.quit": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Bar" + "value": "Quit This App" } }, "ar": { "stringUnit": { "state": "translated", - "value": "شريط" + "value": "إنهاء هذا التطبيق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Balken" + "value": "Diese App beenden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Barra" + "value": "Salir de esta app" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Barre" + "value": "Quitter cette app" } }, "ja": { "stringUnit": { "state": "translated", - "value": "バー" + "value": "このアプリを終了" } }, "ko": { "stringUnit": { "state": "translated", - "value": "막대" + "value": "이 앱 종료" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "竖线" + "value": "退出此应用" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "直線" + "value": "結束此 App" } } } }, - "settings.terminal.ghostty.cursorStyle.block": { + "appChannelSwitch.opened.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Block" + "value": "%@ is open" } }, "ar": { "stringUnit": { "state": "translated", - "value": "كتلة" + "value": "%@ مفتوح" } }, "de": { "stringUnit": { "state": "translated", - "value": "Block" + "value": "%@ ist geöffnet" } }, "es": { "stringUnit": { "state": "translated", - "value": "Bloque" + "value": "%@ está abierta" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Bloc" + "value": "%@ est ouverte" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ブロック" + "value": "%@ が開きました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "블록" + "value": "%@이(가) 열렸습니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "方块" + "value": "%@ 已打开" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "方塊" + "value": "%@ 已開啟" } } } }, - "settings.terminal.ghostty.cursorStyle.blockHollow": { + "appChannelSwitch.progress.cancel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hollow" + "value": "Cancel" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مجوّف" + "value": "إلغاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Hohl" + "value": "Abbrechen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hueco" + "value": "Cancelar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Creux" + "value": "Annuler" } }, "ja": { "stringUnit": { "state": "translated", - "value": "中抜き" + "value": "キャンセル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "속이 빈 블록" + "value": "취소" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "空心" + "value": "取消" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "空心" + "value": "取消" } } } }, - "settings.terminal.ghostty.cursorStyle.underline": { + "appChannelSwitch.progress.downloading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Underline" + "value": "Downloading %@…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسطير" + "value": "جارٍ تنزيل %@…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Unterstrich" + "value": "%@ wird geladen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Subrayado" + "value": "Descargando %@…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Soulignement" + "value": "Téléchargement de %@…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "下線" + "value": "%@ をダウンロード中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "밑줄" + "value": "%@ 다운로드 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "下划线" + "value": "正在下载 %@…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "底線" + "value": "正在下載 %@…" } } } }, - "settings.terminal.ghostty.fontFamily.default": { + "appChannelSwitch.progress.installing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Default" + "value": "Installing…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "افتراضي" + "value": "جارٍ التثبيت…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Standard" + "value": "Wird installiert…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Predeterminada" + "value": "Instalando…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Par défaut" + "value": "Installation…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "デフォルト" + "value": "インストール中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기본값" + "value": "설치 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "默认" + "value": "正在安装…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "預設" + "value": "正在安裝…" } } } }, - "settings.terminal.ghostty.note": { + "appChannelSwitch.progress.launching": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "These rows show the value in effect and save to cmux's Ghostty config, which loads after your own Ghostty config. The caption under each row is its config key." + "value": "Opening %@…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعرض هذه الصفوف القيمة السارية وتحفظ في إعدادات Ghostty الخاصة بـ cmux، والتي تُحمَّل بعد إعدادات Ghostty الخاصة بك. التسمية أسفل كل صف هي مفتاح الإعداد الخاص به." + "value": "جارٍ فتح %@…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Diese Zeilen zeigen den wirksamen Wert und speichern in die Ghostty-Konfiguration von cmux, die nach deiner eigenen Ghostty-Konfiguration geladen wird. Die Beschriftung unter jeder Zeile ist ihr Konfigurationsschlüssel." + "value": "%@ wird geöffnet…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Estas filas muestran el valor en vigor y se guardan en la configuración de Ghostty de cmux, que se carga después de tu propia configuración de Ghostty. El texto bajo cada fila es su clave de configuración." + "value": "Abriendo %@…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ces lignes affichent la valeur en vigueur et enregistrent dans la configuration Ghostty de cmux, chargée après votre propre configuration Ghostty. La légende sous chaque ligne est sa clé de configuration." + "value": "Ouverture de %@…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "これらの行は現在有効な値を表示し、cmux の Ghostty 設定に保存します。この設定はご自身の Ghostty 設定の後に読み込まれます。各行の下のキャプションはその設定キーです。" + "value": "%@ を開いています…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 행들은 현재 적용 중인 값을 보여 주며, 사용자의 Ghostty 설정 다음에 로드되는 cmux의 Ghostty 설정에 저장됩니다. 각 행 아래의 캡션은 해당 설정 키입니다." + "value": "%@ 여는 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这些行显示当前生效的值,并保存到 cmux 的 Ghostty 配置,该配置会在你自己的 Ghostty 配置之后加载。每行下方的说明文字是其配置键。" + "value": "正在打开 %@…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這些列顯示目前生效的值,並儲存到 cmux 的 Ghostty 設定,該設定會在你自己的 Ghostty 設定之後載入。每列下方的說明文字是其設定鍵。" + "value": "正在開啟 %@…" } } } }, - "settings.terminal.ghostty.optionAsAlt.automatic": { + "appChannelSwitch.progress.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Automatic" + "value": "Switching to %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تلقائي" + "value": "جارٍ التبديل إلى %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Automatisch" + "value": "Wechsel zu %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Automático" + "value": "Cambiando a %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Automatique" + "value": "Passage à %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "自動" + "value": "%@ に切り替え中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "자동" + "value": "%@(으)로 전환 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "自动" + "value": "正在切换到 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "自動" + "value": "正在切換至 %@" } } } }, - "settings.terminal.ghostty.optionAsAlt.both": { + "appChannelSwitch.progress.verifying": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Both Option Keys" + "value": "Verifying the code signature…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "كلا مفتاحي Option" + "value": "جارٍ التحقق من توقيع الشيفرة…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Beide Wahltasten" + "value": "Codesignatur wird geprüft…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ambas teclas Opción" + "value": "Verificando la firma de código…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les deux touches Option" + "value": "Vérification de la signature du code…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "両方の Option キー" + "value": "コード署名を検証中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "양쪽 Option 키" + "value": "코드 서명 확인 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "两个 Option 键" + "value": "正在验证代码签名…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "兩個 Option 鍵" + "value": "正在驗證程式碼簽章…" } } } }, - "settings.terminal.ghostty.optionAsAlt.left": { + "settings.search.alias.setting.workspaceColors.subtle-selection": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Left Option" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "مفتاح Option الأيسر" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 控えめ 選択 ハイライト 淡い 枠線" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Linke Wahltaste" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 柔和 选中 高亮 淡色 边框" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Opción izquierda" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 柔和 選取 高亮 淡色 邊框" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Option gauche" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent 은은한 선택 하이라이트 옅은 테두리" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "左 Option" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent dezent Auswahl Hervorhebung Akzent Rand" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "왼쪽 Option" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent sutil selección resaltado acento borde" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "左 Option" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent discret sélection surlignage accent bordure" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "左 Option" + "value": "workspaceColors.subtleSelection subtle calm quiet selection highlight tint hairline edge selected workspace accent هادئ تحديد تمييز لون حافة" } } } }, - "settings.terminal.ghostty.optionAsAlt.off": { + "settings.workspaceColors.subtleSelection": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Off" + "value": "Subtle Selection Highlight" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إيقاف" + "value": "控えめな選択ハイライト" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Aus" + "value": "柔和的选中高亮" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Desactivado" + "value": "柔和的選取高亮" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "은은한 선택 하이라이트" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "Dezente Auswahlhervorhebung" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "끔" + "value": "Resaltado de selección sutil" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "Surlignage de la sélection discret" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "تمييز تحديد هادئ" } } } }, - "settings.terminal.ghostty.optionAsAlt.right": { + "settings.workspaceColors.subtleSelection.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Right Option" + "value": "Show the selected workspace as a faint accent tint with a thin edge instead of a solid fill. A custom Selection Highlight color still uses a solid fill." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "مفتاح Option الأيمن" + "value": "選択中のワークスペースを、塗りつぶしではなく淡いアクセントカラーと細い枠線で表示します。カスタムの選択ハイライト色を設定している場合は塗りつぶしのままです。" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Rechte Wahltaste" + "value": "用淡淡的强调色和细边框显示选中的工作区,而不是实色填充。设置了自定义选中高亮颜色时仍使用实色填充。" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Opción derecha" + "value": "以淡淡的強調色和細邊框顯示選取的工作區,而非實色填滿。設定了自訂選取高亮顏色時仍使用實色填滿。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Option droite" + "value": "선택한 작업 공간을 단색 채우기 대신 옅은 강조 색상과 얇은 테두리로 표시합니다. 사용자 지정 선택 하이라이트 색상은 계속 단색으로 채웁니다." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "右 Option" + "value": "Zeigt den ausgewählten Arbeitsbereich als zarte Akzentfarbe mit feinem Rand statt als volle Füllung. Eine eigene Farbe für die Auswahlhervorhebung bleibt eine volle Füllung." } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "오른쪽 Option" + "value": "Muestra el espacio de trabajo seleccionado con un tono de acento suave y un borde fino en lugar de un relleno sólido. Un color de resaltado de selección personalizado sigue usando relleno sólido." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "右 Option" + "value": "Affiche l’espace de travail sélectionné avec une légère teinte d’accentuation et une fine bordure au lieu d’un remplissage plein. Une couleur de surlignage de la sélection personnalisée reste un remplissage plein." } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "右 Option" + "value": "يعرض مساحة العمل المحددة بلون تمييز خفيف وحافة رفيعة بدلاً من تعبئة كاملة. يظل لون تمييز التحديد المخصص يستخدم تعبئة كاملة." } } } }, - "settings.terminal.ghostty.saveFailed": { + "ghosttyConfigDiagnostics.notice.dismiss": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Couldn't save the Ghostty config. Please try again." + "value": "Dismiss" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر حفظ إعدادات Ghostty. يُرجى المحاولة مرة أخرى." + "value": "تجاهل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Ghostty-Konfiguration konnte nicht gespeichert werden. Bitte versuche es erneut." + "value": "Schließen" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo guardar la configuración de Ghostty. Inténtalo de nuevo." + "value": "Descartar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible d'enregistrer la configuration Ghostty. Veuillez réessayer." + "value": "Ignorer" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Ghostty 設定を保存できませんでした。もう一度お試しください。" + "value": "閉じる" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Ghostty 설정을 저장하지 못했습니다. 다시 시도하세요." + "value": "닫기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法保存 Ghostty 配置。请重试。" + "value": "关闭" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法儲存 Ghostty 設定。請再試一次。" - } - } - } - }, - "settings.terminal.ghostty.scrollbackLimit.unit": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "MB" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "MB" + "value": "關閉" } } } }, - "settings.terminal.ghostty.overridden": { + "ghosttyConfigDiagnostics.notice.hint": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Overridden by your config (%@)" + "value": "Fix the file and save it; cmux reloads the config automatically." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم تجاوزه بواسطة إعداداتك (%@)" + "value": "أصلح الملف واحفظه؛ يعيد cmux تحميل الإعدادات تلقائيًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "Von deiner Konfiguration überschrieben (%@)" + "value": "Korrigiere die Datei und speichere sie; cmux lädt die Konfiguration automatisch neu." } }, "es": { "stringUnit": { "state": "translated", - "value": "Anulado por tu configuración (%@)" + "value": "Corrige el archivo y guárdalo; cmux vuelve a cargar la configuración automáticamente." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Remplacé par votre configuration (%@)" + "value": "Corrigez le fichier et enregistrez-le ; cmux recharge automatiquement la configuration." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ご自身の設定で上書きされています(%@)" + "value": "ファイルを修正して保存すると、cmux が設定を自動的に再読み込みします。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사용자 설정에 의해 재정의됨(%@)" + "value": "파일을 수정하고 저장하면 cmux가 설정을 자동으로 다시 불러옵니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已被你的配置覆盖(%@)" + "value": "修正文件并保存;cmux 会自动重新加载配置。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已被你的設定覆寫(%@)" + "value": "修正檔案並儲存;cmux 會自動重新載入設定。" } } } }, - "settings.terminal.ghostty.scrollbackLimit.newTerminals": { + "ghosttyConfigDiagnostics.notice.more": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Applies to new terminals." + "value": "More errors are not shown." } }, "ar": { "stringUnit": { "state": "translated", - "value": "ينطبق على الطرفيات الجديدة." + "value": "لا تُعرض أخطاء أخرى." } }, "de": { "stringUnit": { "state": "translated", - "value": "Gilt für neue Terminals." + "value": "Weitere Fehler werden nicht angezeigt." } }, "es": { "stringUnit": { "state": "translated", - "value": "Se aplica a las terminales nuevas." + "value": "Hay más errores que no se muestran." } }, "fr": { "stringUnit": { "state": "translated", - "value": "S'applique aux nouveaux terminaux." + "value": "D’autres erreurs ne sont pas affichées." } }, "ja": { "stringUnit": { "state": "translated", - "value": "新しいターミナルに適用されます。" + "value": "表示されていないエラーが他にもあります。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 터미널에 적용됩니다." + "value": "표시되지 않은 오류가 더 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "应用于新的终端。" + "value": "还有其他错误未显示。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "套用於新的終端機。" + "value": "尚有其他錯誤未顯示。" } } } }, - "devices.discovery.settingsDisabled": { + "ghosttyConfigDiagnostics.notice.open": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Turn on Discover other Macs to see your devices." + "value": "Open Config" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فعّل «اكتشاف أجهزة Mac الأخرى» لعرض أجهزتك." + "value": "فتح الإعدادات" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schalte „Andere Macs finden“ ein, um deine Geräte zu sehen." + "value": "Konfiguration öffnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Activa «Descubrir otros Mac» para ver tus dispositivos." + "value": "Abrir configuración" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activez « Rechercher d’autres Mac » pour voir vos appareils." + "value": "Ouvrir la configuration" } }, "ja": { "stringUnit": { "state": "translated", - "value": "デバイスを表示するには、「ほかのMacを検出」をオンにしてください。" + "value": "設定を開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기기를 보려면 '다른 Mac 검색'을 켜세요." + "value": "설정 열기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开“发现其他 Mac”以查看你的设备。" + "value": "打开配置" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "開啟「尋找其他 Mac」以查看您的裝置。" + "value": "開啟設定" } } } }, - "settings.devices.cloudRequired": { + "ghosttyConfigDiagnostics.notice.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Turn on Cloud Machines in Settings › Beta Features to use My Devices." + "value": "Ghostty config errors" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فعّل «أجهزة سحابية» في الإعدادات › ميزات تجريبية لاستخدام «أجهزتي»." + "value": "أخطاء في إعدادات Ghostty" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aktiviere Cloud-Maschinen unter Einstellungen › Beta-Funktionen, um Meine Geräte zu verwenden." + "value": "Fehler in der Ghostty-Konfiguration" } }, "es": { "stringUnit": { "state": "translated", - "value": "Activa Máquinas en la nube en Ajustes › Características beta para usar Mis dispositivos." + "value": "Errores en la configuración de Ghostty" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Activez Machines cloud dans Réglages › Fonctionnalités bêta pour utiliser Mes appareils." + "value": "Erreurs dans la configuration Ghostty" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マイデバイスを使うには、設定 › ベータ機能でクラウドマシンをオンにしてください。" + "value": "Ghostty 設定のエラー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "내 기기를 사용하려면 설정 › 베타 기능에서 클라우드 머신을 켜세요." + "value": "Ghostty 설정 오류" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请在设置 › 测试版功能中打开“云端机器”以使用“我的设备”。" + "value": "Ghostty 配置错误" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請在設定 › Beta 功能中開啟「雲端機器」以使用「我的裝置」。" + "value": "Ghostty 設定錯誤" } } } }, - "devices.discovery.help": { + "command.openTerminalChatView.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Find and connect to other Macs signed in to your account. Turning this off disconnects their panes without closing their terminals." + "value": "Open terminal as chat" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "ابحث عن أجهزة Mac الأخرى المسجّل دخولها إلى حسابك واتصل بها. يؤدي إيقاف هذا الخيار إلى قطع اتصال أجزائها دون إغلاق طرفياتها." + "value": "ターミナルをチャットで表示" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Finde andere Macs, die bei deinem Konto angemeldet sind, und verbinde dich mit ihnen. Wenn du dies ausschaltest, werden ihre Bereiche getrennt, ohne ihre Terminals zu schließen." + "value": "以对话形式查看终端" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Encuentra otros Mac con sesión iniciada en tu cuenta y conéctate a ellos. Al desactivarlo, se desconectan sus paneles sin cerrar sus terminales." + "value": "Terminal als Chat öffnen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Trouvez les autres Mac connectés à votre compte et connectez-vous à eux. Désactiver cette option déconnecte leurs volets sans fermer leurs terminaux." + "value": "Ouvrir le terminal en discussion" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "同じアカウントでサインインしているほかのMacを見つけて接続します。オフにすると、ターミナルを閉じずにそれらのペインの接続を解除します。" + "value": "فتح الطرفية كدردشة" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "계정에 로그인된 다른 Mac을 찾아 연결합니다. 이 옵션을 끄면 터미널을 닫지 않고 해당 분할 창의 연결이 끊어집니다." + "value": "Abrir la terminal como chat" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "查找并连接到已登录你账户的其他 Mac。关闭此选项会断开其窗格的连接,但不会关闭其终端。" + "value": "以對話形式檢視終端機" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "尋找並連線到已登入您帳號的其他 Mac。關閉此選項會中斷其窗格的連線,但不會關閉其終端機。" + "value": "터미널을 채팅으로 열기" } } } }, - "devices.incoming.help": { + "settings.app.warnBeforeClosingWindow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Turning this off removes this Mac from discovery and disconnects incoming sessions. You can still connect to your other Macs." + "value": "Warn Before Closing Window" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يؤدي إيقاف هذا الخيار إلى إزالة جهاز Mac هذا من الاكتشاف وقطع الجلسات الواردة. لا يزال بإمكانك الاتصال بأجهزة Mac الأخرى." + "value": "التحذير قبل إغلاق النافذة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wenn du dies ausschaltest, kann dieser Mac nicht mehr gefunden werden und eingehende Sitzungen werden getrennt. Du kannst dich weiterhin mit deinen anderen Macs verbinden." + "value": "Vor dem Schließen eines Fensters warnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Al desactivarlo, este Mac deja de ser detectable y se desconectan las sesiones entrantes. Aún puedes conectarte a tus otros Mac." + "value": "Advertir antes de cerrar una ventana" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désactiver cette option retire ce Mac de la détection et déconnecte les sessions entrantes. Vous pouvez toujours vous connecter à vos autres Mac." + "value": "Avertir avant de fermer une fenêtre" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフにすると、このMacは検出されなくなり、受信中のセッションは切断されます。ほかのMacには引き続き接続できます。" + "value": "ウィンドウを閉じる前に警告" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 옵션을 끄면 이 Mac이 검색 대상에서 제외되고 수신 세션의 연결이 끊어집니다. 다른 Mac에는 계속 연결할 수 있습니다." + "value": "윈도우를 닫기 전에 경고" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Попереджати перед закриттям вікна" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭此选项会使这台 Mac 无法被发现,并断开传入的会话。你仍可连接到你的其他 Mac。" + "value": "关闭窗口前警告" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉此選項會讓此 Mac 無法被探索,並中斷傳入的工作階段。您仍可連線到您的其他 Mac。" + "value": "關閉視窗前發出警告" } } } }, - "settings.devices.keywords": { + "settings.app.warnBeforeClosingWindow.subtitleOff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces" + "value": "Windows close immediately without confirmation." } }, "ar": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces الأجهزة أجهزتي أجهزة الكمبيوتر اكتشاف قابل للاكتشاف وصول وارد إقران مساحات عمل بعيدة" + "value": "تُغلق النوافذ فورًا دون تأكيد." } }, "de": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces geräte meine geräte computer finden auffindbar eingehender zugriff koppeln entfernte arbeitsbereiche" + "value": "Fenster werden sofort und ohne Bestätigung geschlossen." } }, "es": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces dispositivos mis dispositivos ordenadores computadoras descubrir detectable acceso entrante enlazar espacios de trabajo remotos" + "value": "Las ventanas se cierran inmediatamente sin confirmación." } }, "fr": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces appareils mes appareils ordinateurs détection détectable accès entrant jumelage espaces de travail distants" + "value": "Les fenêtres se ferment immédiatement sans confirmation." } }, "ja": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces デバイス マイデバイス コンピュータ 検出 検出可能 受信アクセス ペアリング リモートワークスペース" + "value": "確認なしにすぐウィンドウを閉じます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces 기기 내 기기 컴퓨터 검색 수신 접근 페어링 원격 작업 공간" + "value": "확인 창 없이 윈도우가 즉시 닫힙니다." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Вікна закриваються одразу без підтвердження." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces 设备 我的设备 电脑 发现 可被发现 传入访问 配对 远程工作区" + "value": "窗口会直接关闭,不做确认。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces 裝置 我的裝置 電腦 探索 尋找 可被發現 傳入存取 配對 遠端工作區" + "value": "視窗將立即關閉,無需確認。" } } } }, - "settings.section.devices": { + "settings.app.warnBeforeClosingWindow.subtitleOn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Devices" + "value": "Show a confirmation before closing a window with a running process, or all of a window's workspaces at once." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأجهزة" + "value": "إظهار تأكيد قبل إغلاق نافذة بها عملية قيد التشغيل، أو إغلاق جميع مساحات العمل في نافذة دفعة واحدة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Geräte" + "value": "Eine Bestätigung anzeigen, bevor ein Fenster mit einem laufenden Prozess oder alle Arbeitsbereiche eines Fensters auf einmal geschlossen werden." } }, "es": { "stringUnit": { "state": "translated", - "value": "Dispositivos" + "value": "Muestra una confirmación antes de cerrar una ventana con un proceso en ejecución, o todos los espacios de trabajo de una ventana a la vez." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appareils" + "value": "Afficher une confirmation avant de fermer une fenêtre avec un processus en cours, ou tous les espaces de travail d'une fenêtre à la fois." } }, "ja": { "stringUnit": { "state": "translated", - "value": "デバイス" + "value": "実行中のプロセスがあるウィンドウ、またはウィンドウ内のすべてのワークスペースをまとめて閉じる前に確認を表示します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기기" + "value": "실행 중인 프로세스가 있는 윈도우나 윈도우의 모든 워크스페이스를 한 번에 닫기 전에 확인 창을 표시합니다." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Показувати підтвердження перед закриттям вікна із запущеним процесом або всіх робочих областей вікна одночасно." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设备" + "value": "关闭有正在运行进程的窗口,或一次关闭窗口中所有工作区前显示确认。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "裝置" + "value": "關閉有執行中程序的視窗,或一次關閉視窗中所有工作區前顯示確認。" } } } }, - "devices.yourMacs": { + "settings.app.warnBeforeClosingWorkspace": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Your Macs" + "value": "Warn Before Closing Workspace" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أجهزة Mac الخاصة بك" + "value": "التحذير قبل إغلاق مساحة العمل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Deine Macs" + "value": "Vor dem Schließen eines Arbeitsbereichs warnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tus Mac" + "value": "Advertir antes de cerrar un espacio de trabajo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vos Mac" + "value": "Avertir avant de fermer un espace de travail" } }, "ja": { "stringUnit": { "state": "translated", - "value": "お使いのMac" + "value": "ワークスペースを閉じる前に警告" } }, "ko": { "stringUnit": { "state": "translated", - "value": "내 Mac" + "value": "워크스페이스를 닫기 전에 경고" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Попереджати перед закриттям робочої області" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "你的 Mac" + "value": "关闭工作区前警告" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "您的 Mac" + "value": "關閉工作區前發出警告" } } } }, - "devices.settings": { + "settings.app.warnBeforeClosingWorkspace.subtitleOff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Devices Settings…" + "value": "Workspaces close immediately without confirmation. Pinned workspaces still ask." } }, "ar": { "stringUnit": { "state": "translated", - "value": "إعدادات الأجهزة…" + "value": "تُغلق مساحات العمل فورًا دون تأكيد. لا تزال مساحات العمل المثبتة تطلب التأكيد." } }, "de": { "stringUnit": { "state": "translated", - "value": "Geräte-Einstellungen…" + "value": "Arbeitsbereiche werden sofort und ohne Bestätigung geschlossen. Angepinnte Arbeitsbereiche fragen weiterhin nach." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustes de dispositivos…" + "value": "Los espacios de trabajo se cierran inmediatamente sin confirmación. Los espacios de trabajo fijados siguen pidiendo confirmación." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Réglages des appareils…" + "value": "Les espaces de travail se ferment immédiatement sans confirmation. Les espaces de travail épinglés demandent toujours." } }, "ja": { "stringUnit": { "state": "translated", - "value": "デバイス設定…" + "value": "確認なしにすぐワークスペースを閉じます。ピン留めされたワークスペースは引き続き確認します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기기 설정…" + "value": "확인 창 없이 워크스페이스가 즉시 닫힙니다. 고정된 워크스페이스는 계속 확인합니다." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Робочі області закриваються одразу без підтвердження. Закріплені робочі області все одно запитують." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设备设置…" + "value": "工作区会直接关闭,不做确认。已固定的工作区仍会确认。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "裝置設定…" + "value": "工作區將立即關閉,無需確認。釘選的工作區仍會確認。" } } } }, - "settings.computers.refresh": { + "settings.app.warnBeforeClosingWorkspace.subtitleOn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Refresh" + "value": "Show a confirmation before closing a workspace with a running process, or several workspaces at once." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تحديث" + "value": "إظهار تأكيد قبل إغلاق مساحة عمل بها عملية قيد التشغيل، أو عدة مساحات عمل دفعة واحدة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Aktualisieren" + "value": "Eine Bestätigung anzeigen, bevor ein Arbeitsbereich mit einem laufenden Prozess oder mehrere Arbeitsbereiche auf einmal geschlossen werden." } }, "es": { "stringUnit": { "state": "translated", - "value": "Actualizar" + "value": "Muestra una confirmación antes de cerrar un espacio de trabajo con un proceso en ejecución, o varios espacios de trabajo a la vez." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Actualiser" + "value": "Afficher une confirmation avant de fermer un espace de travail avec un processus en cours, ou plusieurs espaces de travail à la fois." } }, "ja": { "stringUnit": { "state": "translated", - "value": "更新" + "value": "実行中のプロセスがあるワークスペース、または複数のワークスペースをまとめて閉じる前に確認を表示します。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새로 고침" + "value": "실행 중인 프로세스가 있는 워크스페이스나 여러 워크스페이스를 한 번에 닫기 전에 확인 창을 표시합니다." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Показувати підтвердження перед закриттям робочої області із запущеним процесом або кількох робочих областей одночасно." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "刷新" + "value": "关闭有正在运行进程的工作区,或一次关闭多个工作区前显示确认。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新整理" + "value": "關閉有執行中程序的工作區,或一次關閉多個工作區前顯示確認。" } } } }, - "settings.computers.signIn": { + "settings.search.alias.setting.app.warn-before-closing-window": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign in to the same account on both Macs to discover and connect to them." + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سجّل الدخول إلى الحساب نفسه على جهازي Mac لاكتشافهما والاتصال بهما." + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process إغلاق النافذة تأكيد تحذير عملية قيد التشغيل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Melde dich auf beiden Macs mit demselben Konto an, um sie zu finden und dich mit ihnen zu verbinden." + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process fenster schließen bestätigung warnung laufender prozess" } }, "es": { "stringUnit": { "state": "translated", - "value": "Inicia sesión con la misma cuenta en ambos Mac para descubrirlos y conectarte a ellos." + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process cerrar ventana confirmación advertencia proceso en ejecución" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connectez-vous au même compte sur les deux Mac pour les détecter et vous y connecter." + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process fermer fenêtre confirmation avertissement processus en cours" } }, "ja": { "stringUnit": { "state": "translated", - "value": "両方のMacで同じアカウントにサインインすると、検出して接続できます。" + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process ウィンドウを閉じる 確認 警告 実行中のプロセス" } }, "ko": { "stringUnit": { "state": "translated", - "value": "두 Mac에서 같은 계정으로 로그인하면 서로 검색하고 연결할 수 있습니다." + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process 윈도우 닫기 확인 경고 실행 중인 프로세스" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process закрити вікно підтвердження попередження запущений процес" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在两台 Mac 上登录同一账户,即可发现并连接到它们。" + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process 关闭窗口 确认 警告 正在运行的进程" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在兩部 Mac 上登入同一個帳號,即可探索並連線到它們。" + "value": "app.warnBeforeClosingWindow close window confirmation command-control-w cmd-ctrl-w running process 關閉視窗 確認 警告 執行中的程序" } } } }, - "settings.computers.open": { + "settings.search.alias.setting.app.warn-before-closing-workspace": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فتح" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent إغلاق مساحة العمل تأكيد تحذير عملية قيد التشغيل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Öffnen" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent arbeitsbereich schließen bestätigung warnung laufender prozess" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent cerrar espacio de trabajo confirmación advertencia proceso en ejecución" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent fermer espace de travail confirmation avertissement processus en cours" } }, "ja": { "stringUnit": { "state": "translated", - "value": "開く" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent ワークスペースを閉じる 確認 警告 実行中のプロセス" } }, "ko": { "stringUnit": { "state": "translated", - "value": "열기" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent 워크스페이스 닫기 확인 경고 실행 중인 프로세스" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent закрити робочу область підтвердження попередження запущений процес" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent 关闭工作区 确认 警告 正在运行的进程" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打開" + "value": "app.warnBeforeClosingWorkspace close workspace confirmation command-shift-w cmd-shift-w running process agent 關閉工作區 確認 警告 執行中的程序" } } } }, - "settings.computers.unpair": { + "settings.terminal.ghostty.backgroundBlur": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Unpair" + "value": "Background Blur" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء الإقران" + "value": "تمويه الخلفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kopplung aufheben" + "value": "Hintergrundunschärfe" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desenlazar" + "value": "Desenfoque del fondo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Dissocier" + "value": "Flou de l'arrière-plan" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペアリングを解除" + "value": "背景のぼかし" } }, "ko": { "stringUnit": { "state": "translated", - "value": "페어링 해제" + "value": "배경 흐림" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消配对" + "value": "背景模糊" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消配對" + "value": "背景模糊" } } } }, - "settings.computers.unpair.confirm": { + "settings.terminal.ghostty.backgroundOpacity": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Unpair this Mac? Its local workspaces will not be changed." + "value": "Background Opacity" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هل تريد إلغاء إقران جهاز Mac هذا؟ لن تتغير مساحات العمل المحلية الخاصة به." + "value": "عتامة الخلفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kopplung mit diesem Mac aufheben? Seine lokalen Arbeitsbereiche bleiben unverändert." + "value": "Hintergrunddeckkraft" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Desenlazar este Mac? Sus espacios de trabajo locales no cambiarán." + "value": "Opacidad del fondo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Dissocier ce Mac ? Ses espaces de travail locaux ne seront pas modifiés." + "value": "Opacité de l'arrière-plan" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このMacのペアリングを解除しますか?ローカルのワークスペースは変更されません。" + "value": "背景の不透明度" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 Mac의 페어링을 해제하시겠습니까? 로컬 작업 공간은 변경되지 않습니다." + "value": "배경 불투명도" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "要取消配对这台 Mac 吗?其本地工作区不会更改。" + "value": "背景不透明度" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要取消配對此 Mac 嗎?其本機工作區不會變更。" + "value": "背景不透明度" } } } }, - "settings.computers.online": { + "settings.terminal.ghostty.cursorBlink": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Online" + "value": "Blinking Cursor" } }, "ar": { "stringUnit": { "state": "translated", - "value": "متصل بالإنترنت" + "value": "مؤشر وامض" } }, "de": { "stringUnit": { "state": "translated", - "value": "Online" + "value": "Blinkender Cursor" } }, "es": { "stringUnit": { "state": "translated", - "value": "En línea" + "value": "Cursor parpadeante" } }, "fr": { "stringUnit": { "state": "translated", - "value": "En ligne" + "value": "Curseur clignotant" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オンライン" + "value": "カーソルの点滅" } }, "ko": { "stringUnit": { "state": "translated", - "value": "온라인" + "value": "커서 깜박임" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在线" + "value": "光标闪烁" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "線上" + "value": "游標閃爍" } } } }, - "settings.computers.offline": { + "settings.terminal.ghostty.cursorStyle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Offline" + "value": "Cursor Style" } }, "ar": { "stringUnit": { "state": "translated", - "value": "غير متصل" + "value": "نمط المؤشر" } }, "de": { "stringUnit": { "state": "translated", - "value": "Offline" + "value": "Cursorstil" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sin conexión" + "value": "Estilo del cursor" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Hors ligne" + "value": "Style du curseur" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフライン" + "value": "カーソルのスタイル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오프라인" + "value": "커서 스타일" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "离线" + "value": "光标样式" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "離線" + "value": "游標樣式" } } } }, - "settings.computers.unknown": { + "settings.terminal.ghostty.fontFamily": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting for connection" + "value": "Font" } }, "ar": { "stringUnit": { "state": "translated", - "value": "في انتظار الاتصال" + "value": "الخط" } }, "de": { "stringUnit": { "state": "translated", - "value": "Warte auf Verbindung" + "value": "Schrift" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esperando conexión" + "value": "Fuente" } }, "fr": { "stringUnit": { "state": "translated", - "value": "En attente de connexion" + "value": "Police" } }, "ja": { "stringUnit": { "state": "translated", - "value": "接続を待機中" + "value": "フォント" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 대기 중" + "value": "글꼴" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在等待连接" + "value": "字体" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在等待連線" + "value": "字體" } } } }, - "settings.computers.invalidPairing": { + "settings.terminal.ghostty.fontSize": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Enter a pairing link or a numeric Tailscale IP and port." + "value": "Font Size" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أدخل رابط إقران أو عنوان IP رقميًا لـ Tailscale ومنفذًا." + "value": "حجم الخط" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gib einen Kopplungslink oder eine numerische Tailscale-IP mit Port ein." + "value": "Schriftgröße" } }, "es": { "stringUnit": { "state": "translated", - "value": "Introduce un enlace de emparejamiento o una IP numérica de Tailscale y un puerto." + "value": "Tamaño de fuente" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Saisissez un lien d’association ou une adresse IP Tailscale numérique et un port." + "value": "Taille de police" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペアリングリンク、または数値形式のTailscale IPとポートを入力してください。" + "value": "フォントサイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "페어링 링크 또는 숫자 형식의 Tailscale IP와 포트를 입력하세요." + "value": "글꼴 크기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请输入配对链接,或数字格式的 Tailscale IP 和端口。" + "value": "字体大小" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請輸入配對連結,或數字格式的 Tailscale IP 與連接埠。" + "value": "字體大小" } } } }, - "settings.computers.tailscaleRequired": { + "settings.terminal.ghostty.optionAsAlt": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Use the other Mac’s pairing code with a numeric Tailscale IP address and port." + "value": "Option as Alt" } }, "ar": { "stringUnit": { "state": "translated", - "value": "استخدم رمز الإقران الخاص بجهاز Mac الآخر مع عنوان IP رقمي لـ Tailscale ومنفذ." + "value": "Option كمفتاح Alt" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwende den Kopplungscode des anderen Macs mit einer numerischen Tailscale-IP-Adresse und einem Port." + "value": "Wahltaste als Alt" } }, "es": { "stringUnit": { "state": "translated", - "value": "Usa el código de emparejamiento del otro Mac con una dirección IP numérica de Tailscale y un puerto." + "value": "Opción como Alt" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisez le code d’association de l’autre Mac avec une adresse IP Tailscale numérique et un port." + "value": "Option comme Alt" } }, "ja": { "stringUnit": { "state": "translated", - "value": "もう一方のMacのペアリングコードを、数値形式のTailscale IPアドレスとポートとともに使用してください。" + "value": "Option を Alt として使用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 Mac의 페어링 코드를 숫자 형식의 Tailscale IP 주소 및 포트와 함께 사용하세요." + "value": "Option을 Alt로 사용" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请使用另一台 Mac 的配对码,并搭配数字格式的 Tailscale IP 地址和端口。" + "value": "Option 作为 Alt" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請使用另一部 Mac 的配對碼,搭配數字格式的 Tailscale IP 位址與連接埠。" + "value": "Option 作為 Alt" } } } }, - "settings.computers.selfPairing": { + "settings.terminal.ghostty.scrollbackLimit": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This code belongs to this Mac. Enter the other Mac’s pairing code." + "value": "Scrollback Limit" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ينتمي هذا الرمز إلى جهاز Mac هذا. أدخل رمز الإقران الخاص بجهاز Mac الآخر." + "value": "حد سجل التمرير" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Code gehört zu diesem Mac. Gib den Kopplungscode des anderen Macs ein." + "value": "Scrollback-Limit" } }, "es": { "stringUnit": { "state": "translated", - "value": "Este código pertenece a este Mac. Introduce el código de emparejamiento del otro Mac." + "value": "Límite del historial de desplazamiento" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce code appartient à ce Mac. Saisissez le code d’association de l’autre Mac." + "value": "Limite de défilement arrière" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このコードはこのMacのものです。もう一方のMacのペアリングコードを入力してください。" + "value": "スクロールバックの上限" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 코드는 이 Mac의 코드입니다. 다른 Mac의 페어링 코드를 입력하세요." + "value": "스크롤백 한도" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此代码属于这台 Mac。请输入另一台 Mac 的配对码。" + "value": "回滚上限" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此代碼屬於這部 Mac。請輸入另一部 Mac 的配對碼。" + "value": "回捲上限" } } } }, - "settings.computers.identityFailed": { + "settings.terminal.ghostty.windowPaddingX": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Mac’s authenticated identity could not be verified. Update cmux on both Macs and copy a fresh pairing code." + "value": "Horizontal Padding" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر التحقق من الهوية الموثّقة لجهاز Mac. حدّث cmux على جهازي Mac وانسخ رمز إقران جديدًا." + "value": "الحشو الأفقي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die authentifizierte Identität des Macs konnte nicht überprüft werden. Aktualisiere cmux auf beiden Macs und kopiere einen neuen Kopplungscode." + "value": "Horizontaler Innenabstand" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo verificar la identidad autenticada del Mac. Actualiza cmux en ambos Mac y copia un código de emparejamiento nuevo." + "value": "Relleno horizontal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’identité authentifiée du Mac n’a pas pu être vérifiée. Mettez à jour cmux sur les deux Mac et copiez un nouveau code d’association." + "value": "Marge intérieure horizontale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Macの認証済みIDを確認できませんでした。両方のMacでcmuxをアップデートし、新しいペアリングコードをコピーしてください。" + "value": "水平方向の余白" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Mac의 인증된 ID를 확인할 수 없습니다. 두 Mac 모두에서 cmux를 업데이트하고 새 페어링 코드를 복사하세요." + "value": "가로 여백" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法验证这台 Mac 的已认证身份。请在两台 Mac 上更新 cmux,并复制新的配对码。" + "value": "水平边距" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法驗證這部 Mac 的已認證身分。請在兩部 Mac 上更新 cmux,並複製新的配對碼。" + "value": "水平邊距" } } } }, - "settings.computers.pairingBusy": { + "settings.terminal.ghostty.windowPaddingY": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wait for the current pairing attempt to finish." + "value": "Vertical Padding" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتظر حتى تنتهي محاولة الإقران الحالية." + "value": "الحشو العمودي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Warte, bis der aktuelle Kopplungsversuch abgeschlossen ist." + "value": "Vertikaler Innenabstand" } }, "es": { "stringUnit": { "state": "translated", - "value": "Espera a que termine el intento de emparejamiento actual." + "value": "Relleno vertical" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Attendez la fin de la tentative d’association en cours." + "value": "Marge intérieure verticale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "現在のペアリングが完了するまでお待ちください。" + "value": "垂直方向の余白" } }, "ko": { "stringUnit": { "state": "translated", - "value": "현재 페어링 시도가 끝날 때까지 기다리세요." + "value": "세로 여백" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请等待当前的配对尝试完成。" + "value": "垂直边距" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請等待目前的配對嘗試完成。" + "value": "垂直邊距" } } } }, - "settings.computers.storageFailed": { + "settings.terminal.ghostty.cursorStyle.bar": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Your paired Macs could not be loaded. Check available disk space and restart cmux." + "value": "Bar" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر تحميل أجهزة Mac المقترنة. تحقق من مساحة القرص المتاحة وأعد تشغيل cmux." + "value": "شريط" } }, "de": { "stringUnit": { "state": "translated", - "value": "Deine gekoppelten Macs konnten nicht geladen werden. Prüfe den verfügbaren Speicherplatz und starte cmux neu." + "value": "Balken" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudieron cargar tus Mac enlazados. Comprueba el espacio disponible en disco y reinicia cmux." + "value": "Barra" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vos Mac associés n’ont pas pu être chargés. Vérifiez l’espace disque disponible et redémarrez cmux." + "value": "Barre" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ペアリング済みのMacを読み込めませんでした。ディスクの空き容量を確認して、cmuxを再起動してください。" + "value": "バー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "페어링된 Mac을 불러올 수 없습니다. 사용 가능한 디스크 공간을 확인하고 cmux를 다시 시작하세요." + "value": "막대" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法载入已配对的 Mac。请检查可用磁盘空间并重新启动 cmux。" + "value": "竖线" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法載入已配對的 Mac。請檢查可用磁碟空間並重新啟動 cmux。" + "value": "直線" } } } }, - "settings.computers.operationFailed": { + "settings.terminal.ghostty.cursorStyle.block": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The computer operation failed. Check that both Macs are signed in and online, then try again." + "value": "Block" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فشلت العملية على الكمبيوتر. تحقق من أن جهازي Mac مسجّلا الدخول ومتصلان بالإنترنت، ثم حاول مرة أخرى." + "value": "كتلة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Vorgang auf dem Computer ist fehlgeschlagen. Prüfe, ob beide Macs angemeldet und online sind, und versuche es erneut." + "value": "Block" } }, "es": { "stringUnit": { "state": "translated", - "value": "La operación en el equipo falló. Comprueba que ambos Mac tengan la sesión iniciada y estén en línea, e inténtalo de nuevo." + "value": "Bloque" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’opération sur l’ordinateur a échoué. Vérifiez que les deux Mac sont connectés à votre compte et en ligne, puis réessayez." + "value": "Bloc" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コンピュータの操作に失敗しました。両方のMacがサインイン済みでオンラインであることを確認してから、もう一度お試しください。" + "value": "ブロック" } }, "ko": { "stringUnit": { "state": "translated", - "value": "컴퓨터 작업에 실패했습니다. 두 Mac 모두 로그인되어 있고 온라인 상태인지 확인한 후 다시 시도하세요." + "value": "블록" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "电脑操作失败。请确认两台 Mac 都已登录且在线,然后重试。" + "value": "方块" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "電腦操作失敗。請確認兩部 Mac 都已登入且在線上,然後再試一次。" + "value": "方塊" } } } }, - "devices.show.short": { + "settings.terminal.ghostty.cursorStyle.blockHollow": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show" + "value": "Hollow" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار" + "value": "مجوّف" } }, "de": { "stringUnit": { "state": "translated", - "value": "Einblenden" + "value": "Hohl" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar" + "value": "Hueco" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher" + "value": "Creux" } }, "ja": { "stringUnit": { "state": "translated", - "value": "表示" + "value": "中抜き" } }, "ko": { "stringUnit": { "state": "translated", - "value": "표시" + "value": "속이 빈 블록" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显示" + "value": "空心" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯示" + "value": "空心" } } } }, - "devices.show": { + "settings.terminal.ghostty.cursorStyle.underline": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show in My Devices" + "value": "Underline" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار في أجهزتي" + "value": "تسطير" } }, "de": { "stringUnit": { "state": "translated", - "value": "In „Meine Geräte“ einblenden" + "value": "Unterstrich" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar en Mis dispositivos" + "value": "Subrayado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher dans Mes appareils" + "value": "Soulignement" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マイデバイスに表示" + "value": "下線" } }, "ko": { "stringUnit": { "state": "translated", - "value": "내 기기에 표시" + "value": "밑줄" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在“我的设备”中显示" + "value": "下划线" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "在「我的裝置」中顯示" + "value": "底線" } } } }, - "devices.hide": { + "settings.terminal.ghostty.fontFamily.default": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hide from My Devices" + "value": "Default" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إخفاء من أجهزتي" + "value": "افتراضي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus „Meine Geräte“ ausblenden" + "value": "Standard" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ocultar de Mis dispositivos" + "value": "Predeterminada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Masquer dans Mes appareils" + "value": "Par défaut" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マイデバイスから隠す" + "value": "デフォルト" } }, "ko": { "stringUnit": { "state": "translated", - "value": "내 기기에서 숨기기" + "value": "기본값" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "从“我的设备”中隐藏" + "value": "默认" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "從「我的裝置」中隱藏" + "value": "預設" } } } }, - "devices.actions": { + "settings.terminal.ghostty.note": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mac options" + "value": "These rows show the value in effect and save to cmux's Ghostty config, which loads after your own Ghostty config. The caption under each row is its config key." } }, "ar": { "stringUnit": { "state": "translated", - "value": "خيارات Mac" + "value": "تعرض هذه الصفوف القيمة السارية وتحفظ في إعدادات Ghostty الخاصة بـ cmux، والتي تُحمَّل بعد إعدادات Ghostty الخاصة بك. التسمية أسفل كل صف هي مفتاح الإعداد الخاص به." } }, "de": { "stringUnit": { "state": "translated", - "value": "Mac-Optionen" + "value": "Diese Zeilen zeigen den wirksamen Wert und speichern in die Ghostty-Konfiguration von cmux, die nach deiner eigenen Ghostty-Konfiguration geladen wird. Die Beschriftung unter jeder Zeile ist ihr Konfigurationsschlüssel." } }, "es": { "stringUnit": { "state": "translated", - "value": "Opciones del Mac" + "value": "Estas filas muestran el valor en vigor y se guardan en la configuración de Ghostty de cmux, que se carga después de tu propia configuración de Ghostty. El texto bajo cada fila es su clave de configuración." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Options du Mac" + "value": "Ces lignes affichent la valeur en vigueur et enregistrent dans la configuration Ghostty de cmux, chargée après votre propre configuration Ghostty. La légende sous chaque ligne est sa clé de configuration." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Macのオプション" + "value": "これらの行は現在有効な値を表示し、cmux の Ghostty 設定に保存します。この設定はご自身の Ghostty 設定の後に読み込まれます。各行の下のキャプションはその設定キーです。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Mac 옵션" + "value": "이 행들은 현재 적용 중인 값을 보여 주며, 사용자의 Ghostty 설정 다음에 로드되는 cmux의 Ghostty 설정에 저장됩니다. 각 행 아래의 캡션은 해당 설정 키입니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Mac 选项" + "value": "这些行显示当前生效的值,并保存到 cmux 的 Ghostty 配置,该配置会在你自己的 Ghostty 配置之后加载。每行下方的说明文字是其配置键。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Mac 選項" + "value": "這些列顯示目前生效的值,並儲存到 cmux 的 Ghostty 設定,該設定會在你自己的 Ghostty 設定之後載入。每列下方的說明文字是其設定鍵。" } } } }, - "devices.hidden": { + "settings.terminal.ghostty.optionAsAlt.automatic": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Hidden from sidebar" + "value": "Automatic" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مخفي من الشريط الجانبي" + "value": "تلقائي" } }, "de": { "stringUnit": { "state": "translated", - "value": "In der Seitenleiste ausgeblendet" + "value": "Automatisch" } }, "es": { "stringUnit": { "state": "translated", - "value": "Oculto en la barra lateral" + "value": "Automático" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Masqué dans la barre latérale" + "value": "Automatique" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイドバーで非表示" + "value": "自動" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사이드바에서 숨겨짐" + "value": "자동" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已从边栏隐藏" + "value": "自动" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已從側邊欄隱藏" + "value": "自動" } } } }, - "devices.connected": { + "settings.terminal.ghostty.optionAsAlt.both": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connected" + "value": "Both Option Keys" } }, "ar": { "stringUnit": { "state": "translated", - "value": "متصل" + "value": "كلا مفتاحي Option" } }, "de": { "stringUnit": { "state": "translated", - "value": "Verbunden" + "value": "Beide Wahltasten" } }, "es": { "stringUnit": { "state": "translated", - "value": "Conectado" + "value": "Ambas teclas Opción" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connecté" + "value": "Les deux touches Option" } }, "ja": { "stringUnit": { "state": "translated", - "value": "接続済み" + "value": "両方の Option キー" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결됨" + "value": "양쪽 Option 키" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已连接" + "value": "两个 Option 键" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已連線" + "value": "兩個 Option 鍵" } } } }, - "devices.registry.failed": { + "settings.terminal.ghostty.optionAsAlt.left": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Could not refresh your Macs. Check your connection and try again." + "value": "Left Option" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر تحديث أجهزة Mac الخاصة بك. تحقق من اتصالك وحاول مرة أخرى." + "value": "مفتاح Option الأيسر" } }, "de": { "stringUnit": { "state": "translated", - "value": "Deine Macs konnten nicht aktualisiert werden. Prüfe deine Verbindung und versuche es erneut." + "value": "Linke Wahltaste" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudieron actualizar tus Mac. Comprueba tu conexión e inténtalo de nuevo." + "value": "Opción izquierda" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impossible d’actualiser vos Mac. Vérifiez votre connexion et réessayez." + "value": "Option gauche" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Macの一覧を更新できませんでした。接続を確認して、もう一度お試しください。" + "value": "左 Option" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Mac 목록을 새로 고칠 수 없습니다. 연결을 확인하고 다시 시도하세요." + "value": "왼쪽 Option" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法刷新你的 Mac。请检查网络连接后重试。" + "value": "左 Option" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法重新整理您的 Mac。請檢查連線後再試一次。" + "value": "左 Option" } } } }, - "cloudTree.group.cloudMachines": { + "settings.terminal.ghostty.optionAsAlt.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud Machines" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-Maschinen" + "value": "Off" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Machines cloud" + "value": "إيقاف" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أجهزة سحابية" + "value": "Aus" } }, "es": { "stringUnit": { "state": "translated", - "value": "Máquinas en la nube" + "value": "Desactivado" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "雲端機器" + "value": "Désactivé" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "云端机器" + "value": "オフ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 머신" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "クラウドマシン" + "value": "끔" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Mašine u oblaku" + "value": "关闭" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud-maskiner" + "value": "關閉" } - }, - "it": { + } + } + }, + "settings.terminal.ghostty.optionAsAlt.right": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Macchine cloud" + "value": "Right Option" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីនលើពពក" + "value": "مفتاح Option الأيمن" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Skymaskiner" + "value": "Rechte Wahltaste" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Maszyny w chmurze" + "value": "Opción derecha" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Máquinas na nuvem" + "value": "Option droite" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Облачные машины" + "value": "右 Option" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "เครื่องคลาวด์" + "value": "오른쪽 Option" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bulut makineleri" + "value": "右 Option" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Хмарні машини" + "value": "右 Option" } } } }, - "cloudTree.group.devices": { + "settings.terminal.ghostty.saveFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "My Devices" + "value": "Couldn't save the Ghostty config. Please try again." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Meine Geräte" + "value": "تعذّر حفظ إعدادات Ghostty. يُرجى المحاولة مرة أخرى." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Mes appareils" + "value": "Die Ghostty-Konfiguration konnte nicht gespeichert werden. Bitte versuche es erneut." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "أجهزتي" + "value": "No se pudo guardar la configuración de Ghostty. Inténtalo de nuevo." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mis dispositivos" + "value": "Impossible d'enregistrer la configuration Ghostty. Veuillez réessayer." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "我的裝置" + "value": "Ghostty 設定を保存できませんでした。もう一度お試しください。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "我的设备" + "value": "Ghostty 설정을 저장하지 못했습니다. 다시 시도하세요." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "내 기기" + "value": "无法保存 Ghostty 配置。请重试。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "マイデバイス" + "value": "無法儲存 Ghostty 設定。請再試一次。" } - }, - "bs": { + } + } + }, + "settings.terminal.ghostty.scrollbackLimit.unit": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Moji uređaji" + "value": "MB" } }, - "da": { + "ja": { "stringUnit": { "state": "translated", - "value": "Mine enheder" + "value": "MB" } - }, - "it": { + } + } + }, + "settings.terminal.ghostty.overridden": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "I miei dispositivi" + "value": "Overridden by your config (%@)" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ឧបករណ៍របស់ខ្ញុំ" + "value": "تم تجاوزه بواسطة إعداداتك (%@)" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Mine enheter" + "value": "Von deiner Konfiguration überschrieben (%@)" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Moje urządzenia" + "value": "Anulado por tu configuración (%@)" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Meus dispositivos" + "value": "Remplacé par votre configuration (%@)" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Мои устройства" + "value": "ご自身の設定で上書きされています(%@)" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "อุปกรณ์ของฉัน" + "value": "사용자 설정에 의해 재정의됨(%@)" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cihazlarım" + "value": "已被你的配置覆盖(%@)" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Мої пристрої" + "value": "已被你的設定覆寫(%@)" } } } }, - "machines.listUnavailable.stale": { + "settings.terminal.ghostty.scrollbackLimit.newTerminals": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Machine list unavailable — showing last known" + "value": "Applies to new terminals." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Maschinenliste nicht verfügbar – zeige letzten bekannten Stand" + "value": "ينطبق على الطرفيات الجديدة." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Liste des machines indisponible — affichage des dernières informations connues" + "value": "Gilt für neue Terminals." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "قائمة الأجهزة غير متاحة — يتم عرض آخر حالة معروفة" + "value": "Se aplica a las terminales nuevas." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Lista de máquinas no disponible — se muestra el último estado conocido" + "value": "S'applique aux nouveaux terminaux." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無法取得機器清單 — 顯示上次已知的狀態" + "value": "新しいターミナルに適用されます。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "机器列表不可用 —— 显示的是最后已知状态" + "value": "새 터미널에 적용됩니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "머신 목록을 사용할 수 없음 — 마지막으로 확인된 상태 표시 중" + "value": "应用于新的终端。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "マシン一覧を取得できません — 最後の状態を表示中" + "value": "套用於新的終端機。" } } } }, - "machines.listUnavailable.subtitle": { + "devices.discovery.settingsDisabled": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Your machines are unchanged. cmux couldn’t load the list from the Cloud service and retries on its own." + "value": "Turn on Discover other Macs to see your devices." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Deine Maschinen sind unverändert. cmux konnte die Liste nicht vom Cloud-Dienst laden und versucht es selbstständig erneut." + "value": "فعّل «اكتشاف أجهزة Mac الأخرى» لعرض أجهزتك." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Vos machines ne sont pas modifiées. cmux n’a pas pu charger la liste depuis le service Cloud et va réessayer automatiquement." + "value": "Schalte „Andere Macs finden“ ein, um deine Geräte zu sehen." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لم تتغير أجهزتك. تعذر على cmux تحميل القائمة من الخدمة السحابية، وسيعيد المحاولة تلقائيًا." + "value": "Activa «Descubrir otros Mac» para ver tus dispositivos." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Tus máquinas no han cambiado. cmux no pudo cargar la lista desde el servicio de la nube y volverá a intentarlo automáticamente." + "value": "Activez « Rechercher d’autres Mac » pour voir vos appareils." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "您的機器沒有任何變動。cmux 無法從雲端服務載入清單,會自動重試。" + "value": "デバイスを表示するには、「ほかのMacを検出」をオンにしてください。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "你的机器没有任何变化。cmux 无法从云端服务加载列表,会自动重试。" + "value": "기기를 보려면 '다른 Mac 검색'을 켜세요." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "머신은 변경되지 않았습니다. cmux가 클라우드 서비스에서 목록을 불러오지 못했으며 자동으로 다시 시도합니다." + "value": "打开“发现其他 Mac”以查看你的设备。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "マシンは変更されていません。cmux はクラウドサービスから一覧を読み込めませんでした。自動的に再試行します。" + "value": "開啟「尋找其他 Mac」以查看您的裝置。" } } } }, - "machines.listUnavailable.title": { + "settings.devices.cloudRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Can’t load the machine list" + "value": "Turn on Cloud Machines in Settings › Beta Features to use My Devices." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Maschinenliste kann nicht geladen werden" + "value": "فعّل «أجهزة سحابية» في الإعدادات › ميزات تجريبية لاستخدام «أجهزتي»." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Impossible de charger la liste des machines" + "value": "Aktiviere Cloud-Maschinen unter Einstellungen › Beta-Funktionen, um Meine Geräte zu verwenden." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "تعذر تحميل قائمة الأجهزة" + "value": "Activa Máquinas en la nube en Ajustes › Características beta para usar Mis dispositivos." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "No se puede cargar la lista de máquinas" + "value": "Activez Machines cloud dans Réglages › Fonctionnalités bêta pour utiliser Mes appareils." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "無法載入機器清單" + "value": "マイデバイスを使うには、設定 › ベータ機能でクラウドマシンをオンにしてください。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "无法加载机器列表" + "value": "내 기기를 사용하려면 설정 › 베타 기능에서 클라우드 머신을 켜세요." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "머신 목록을 불러올 수 없습니다" + "value": "请在设置 › 测试版功能中打开“云端机器”以使用“我的设备”。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "マシン一覧を読み込めません" + "value": "請在設定 › Beta 功能中開啟「雲端機器」以使用「我的裝置」。" } } } }, - "machines.offline.stale": { + "devices.discovery.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Offline — showing last known" + "value": "Find and connect to other Macs signed in to your account. Turning this off disconnects their panes without closing their terminals." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Offline – zeige letzten bekannten Stand" + "value": "ابحث عن أجهزة Mac الأخرى المسجّل دخولها إلى حسابك واتصل بها. يؤدي إيقاف هذا الخيار إلى قطع اتصال أجزائها دون إغلاق طرفياتها." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Hors ligne — affichage des dernières informations connues" + "value": "Finde andere Macs, die bei deinem Konto angemeldet sind, und verbinde dich mit ihnen. Wenn du dies ausschaltest, werden ihre Bereiche getrennt, ohne ihre Terminals zu schließen." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "غير متصل — يتم عرض آخر حالة معروفة" + "value": "Encuentra otros Mac con sesión iniciada en tu cuenta y conéctate a ellos. Al desactivarlo, se desconectan sus paneles sin cerrar sus terminales." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Sin conexión — se muestra el último estado conocido" + "value": "Trouvez les autres Mac connectés à votre compte et connectez-vous à eux. Désactiver cette option déconnecte leurs volets sans fermer leurs terminaux." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "離線 — 顯示上次已知的狀態" + "value": "同じアカウントでサインインしているほかのMacを見つけて接続します。オフにすると、ターミナルを閉じずにそれらのペインの接続を解除します。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "离线 —— 显示的是最后已知状态" + "value": "계정에 로그인된 다른 Mac을 찾아 연결합니다. 이 옵션을 끄면 터미널을 닫지 않고 해당 분할 창의 연결이 끊어집니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "오프라인 — 마지막으로 확인된 상태 표시 중" + "value": "查找并连接到已登录你账户的其他 Mac。关闭此选项会断开其窗格的连接,但不会关闭其终端。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "オフライン — 最後の状態を表示中" + "value": "尋找並連線到已登入您帳號的其他 Mac。關閉此選項會中斷其窗格的連線,但不會關閉其終端機。" } } } }, - "machines.offline.subtitle": { + "devices.incoming.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud machines load when this Mac is back online." + "value": "Turning this off removes this Mac from discovery and disconnects incoming sessions. You can still connect to your other Macs." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen werden geladen, sobald dieser Mac wieder online ist." + "value": "يؤدي إيقاف هذا الخيار إلى إزالة جهاز Mac هذا من الاكتشاف وقطع الجلسات الواردة. لا يزال بإمكانك الاتصال بأجهزة Mac الأخرى." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Les machines Cloud se chargeront dès que ce Mac sera de nouveau en ligne." + "value": "Wenn du dies ausschaltest, kann dieser Mac nicht mehr gefunden werden und eingehende Sitzungen werden getrennt. Du kannst dich weiterhin mit deinen anderen Macs verbinden." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "سيتم تحميل الأجهزة السحابية عندما يعود جهاز Mac هذا إلى الاتصال بالإنترنت." + "value": "Al desactivarlo, este Mac deja de ser detectable y se desconectan las sesiones entrantes. Aún puedes conectarte a tus otros Mac." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Las máquinas en la nube se cargarán cuando este Mac vuelva a estar en línea." + "value": "Désactiver cette option retire ce Mac de la détection et déconnecte les sessions entrantes. Vous pouvez toujours vous connecter à vos autres Mac." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "這台 Mac 恢復連線後,就會載入雲端機器。" + "value": "オフにすると、このMacは検出されなくなり、受信中のセッションは切断されます。ほかのMacには引き続き接続できます。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "这台 Mac 恢复联网后,就会加载云端机器。" + "value": "이 옵션을 끄면 이 Mac이 검색 대상에서 제외되고 수신 세션의 연결이 끊어집니다. 다른 Mac에는 계속 연결할 수 있습니다." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 Mac이 다시 온라인 상태가 되면 클라우드 머신을 불러옵니다." + "value": "关闭此选项会使这台 Mac 无法被发现,并断开传入的会话。你仍可连接到你的其他 Mac。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "この Mac がオンラインに戻ると Cloud マシンを読み込みます。" + "value": "關閉此選項會讓此 Mac 無法被探索,並中斷傳入的工作階段。您仍可連線到您的其他 Mac。" } } } }, - "machines.offline.title": { + "settings.devices.keywords": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting for network" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Warte auf Netzwerk" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces الأجهزة أجهزتي أجهزة الكمبيوتر اكتشاف قابل للاكتشاف وصول وارد إقران مساحات عمل بعيدة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "En attente du réseau" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces geräte meine geräte computer finden auffindbar eingehender zugriff koppeln entfernte arbeitsbereiche" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "في انتظار الشبكة" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces dispositivos mis dispositivos ordenadores computadoras descubrir detectable acceso entrante enlazar espacios de trabajo remotos" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esperando la red" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces appareils mes appareils ordinateurs détection détectable accès entrant jumelage espaces de travail distants" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在等待網路" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces デバイス マイデバイス コンピュータ 検出 検出可能 受信アクセス ペアリング リモートワークスペース" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在等待网络" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces 기기 내 기기 컴퓨터 검색 수신 접근 페어링 원격 작업 공간" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "네트워크 대기 중" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces 设备 我的设备 电脑 发现 可被发现 传入访问 配对 远程工作区" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "ネットワークを待機中" + "value": "devices my devices computers macs mac discovery discover discoverable incoming access tailscale pairing remote workspaces 裝置 我的裝置 電腦 探索 尋找 可被發現 傳入存取 配對 遠端工作區" } } } }, - "machines.reconnecting.title": { + "settings.section.devices": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reconnecting to Cloud…" + "value": "Devices" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Verbindung zur Cloud wird wiederhergestellt…" + "value": "الأجهزة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Reconnexion au Cloud…" + "value": "Geräte" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "جارٍ إعادة الاتصال بالسحابة…" + "value": "Dispositivos" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Reconectando con la nube…" + "value": "Appareils" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在重新連線至雲端…" + "value": "デバイス" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "正在重新连接云端…" + "value": "기기" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "클라우드에 다시 연결하는 중…" + "value": "设备" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "クラウドに再接続中…" + "value": "裝置" } } } }, - "cloud.teamPicker.createSheet.create": { + "devices.yourMacs": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Create" + "value": "Your Macs" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إنشاء" + "value": "أجهزة Mac الخاصة بك" } }, "de": { "stringUnit": { "state": "translated", - "value": "Erstellen" + "value": "Deine Macs" } }, "es": { "stringUnit": { "state": "translated", - "value": "Crear" + "value": "Tus Mac" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Créer" + "value": "Vos Mac" } }, "ja": { "stringUnit": { "state": "translated", - "value": "作成" + "value": "お使いのMac" } }, "ko": { "stringUnit": { "state": "translated", - "value": "만들기" + "value": "내 Mac" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "创建" + "value": "你的 Mac" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "建立" + "value": "您的 Mac" } } } }, - "cloud.teamPicker.createSheet.title": { + "devices.settings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Create Team" + "value": "Devices Settings…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إنشاء فريق" + "value": "إعدادات الأجهزة…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Team erstellen" + "value": "Geräte-Einstellungen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Crear equipo" + "value": "Ajustes de dispositivos…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Créer une équipe" + "value": "Réglages des appareils…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームを作成" + "value": "デバイス設定…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 만들기" + "value": "기기 설정…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "创建团队" + "value": "设备设置…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "建立團隊" + "value": "裝置設定…" } } } }, - "cloud.teamPicker.createTeam": { + "settings.computers.refresh": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Create Team…" + "value": "Refresh" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إنشاء فريق…" + "value": "تحديث" } }, "de": { "stringUnit": { "state": "translated", - "value": "Team erstellen…" + "value": "Aktualisieren" } }, "es": { "stringUnit": { "state": "translated", - "value": "Crear equipo…" + "value": "Actualizar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Créer une équipe…" + "value": "Actualiser" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームを作成…" + "value": "更新" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 만들기…" + "value": "새로 고침" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "创建团队…" + "value": "刷新" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "建立團隊…" + "value": "重新整理" } } } }, - "cloud.teamPicker.switching": { + "settings.computers.signIn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Switching teams…" + "value": "Sign in to the same account on both Macs to discover and connect to them." } }, "ar": { "stringUnit": { "state": "translated", - "value": "جارٍ تبديل الفريق…" + "value": "سجّل الدخول إلى الحساب نفسه على جهازي Mac لاكتشافهما والاتصال بهما." } }, "de": { "stringUnit": { "state": "translated", - "value": "Team wird gewechselt…" + "value": "Melde dich auf beiden Macs mit demselben Konto an, um sie zu finden und dich mit ihnen zu verbinden." } }, "es": { "stringUnit": { "state": "translated", - "value": "Cambiando de equipo…" + "value": "Inicia sesión con la misma cuenta en ambos Mac para descubrirlos y conectarte a ellos." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Changement d’équipe…" + "value": "Connectez-vous au même compte sur les deux Mac pour les détecter et vous y connecter." } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームを切り替え中…" + "value": "両方のMacで同じアカウントにサインインすると、検出して接続できます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 전환 중…" + "value": "두 Mac에서 같은 계정으로 로그인하면 서로 검색하고 연결할 수 있습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在切换团队…" + "value": "在两台 Mac 上登录同一账户,即可发现并连接到它们。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在切換團隊…" + "value": "在兩部 Mac 上登入同一個帳號,即可探索並連線到它們。" } } } }, - "cloud.teamPicker.creating": { + "settings.computers.open": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Creating team…" + "value": "Open" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جارٍ إنشاء الفريق…" + "value": "فتح" } }, "de": { "stringUnit": { "state": "translated", - "value": "Team wird erstellt…" + "value": "Öffnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Creando equipo…" + "value": "Abrir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Création de l’équipe…" + "value": "Ouvrir" } }, "ja": { "stringUnit": { "state": "translated", - "value": "チームを作成中…" + "value": "開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "팀 만드는 중…" + "value": "열기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在创建团队…" + "value": "打开" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在建立團隊…" + "value": "打開" } } } }, - "socket.authTeam.busy": { + "settings.computers.unpair": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Another team change is in progress. Try again when it finishes." + "value": "Unpair" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." + "value": "إلغاء الإقران" } }, "de": { "stringUnit": { "state": "translated", - "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." + "value": "Kopplung aufheben" } }, "es": { "stringUnit": { "state": "translated", - "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." + "value": "Desenlazar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Une autre modification d’équipe est en cours. Réessayez une fois terminée." + "value": "Dissocier" } }, "ja": { "stringUnit": { "state": "translated", - "value": "別のチーム変更を処理中です。完了してからもう一度お試しください。" + "value": "ペアリングを解除" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 팀 변경이 진행 중입니다. 완료된 후 다시 시도하세요." + "value": "페어링 해제" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "另一项团队更改正在进行中,请在完成后重试。" + "value": "取消配对" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "另一項團隊變更正在進行中,請在完成後再試一次。" + "value": "取消配對" } } } }, - "settings.automation.pi": { + "settings.computers.unpair.confirm": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Pi Integration" + "value": "Unpair this Mac? Its local workspaces will not be changed." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تكامل Pi" + "value": "هل تريد إلغاء إقران جهاز Mac هذا؟ لن تتغير مساحات العمل المحلية الخاصة به." } }, "de": { "stringUnit": { "state": "translated", - "value": "Pi-Integration" + "value": "Kopplung mit diesem Mac aufheben? Seine lokalen Arbeitsbereiche bleiben unverändert." } }, "es": { "stringUnit": { "state": "translated", - "value": "Integración de Pi" + "value": "¿Desenlazar este Mac? Sus espacios de trabajo locales no cambiarán." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Intégration de Pi" + "value": "Dissocier ce Mac ? Ses espaces de travail locaux ne seront pas modifiés." } }, "ja": { "stringUnit": { "state": "translated", - "value": "Pi連携" + "value": "このMacのペアリングを解除しますか?ローカルのワークスペースは変更されません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Pi 연동" + "value": "이 Mac의 페어링을 해제하시겠습니까? 로컬 작업 공간은 변경되지 않습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Pi 集成" + "value": "要取消配对这台 Mac 吗?其本地工作区不会更改。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Pi 整合" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Pi integracija" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Pi-integration" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Integrazione di Pi" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ការរួមបញ្ចូល Pi" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Pi-integrasjon" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Integracja Pi" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Integração do Pi" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Интеграция Pi" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "การผสานรวม Pi" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Pi entegrasyonu" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Інтеграція Pi" + "value": "要取消配對此 Mac 嗎?其本機工作區不會變更。" } } } }, - "settings.automation.pi.note": { + "settings.computers.online": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "When enabled, cmux wraps the pi command and loads its bundled session extension without changing your Pi configuration. Disable if you prefer to manage Pi hooks yourself." + "value": "Online" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عند التفعيل، يغلّف cmux أمر pi ويحمّل امتداد الجلسة المضمّن دون تغيير إعدادات Pi. عطّل هذا الخيار إذا كنت تفضّل إدارة خطافات Pi بنفسك." + "value": "متصل بالإنترنت" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wenn aktiviert, umhüllt cmux den pi-Befehl und lädt seine gebündelte Sitzungserweiterung, ohne deine Pi-Konfiguration zu ändern. Deaktiviere dies, wenn du die Pi-Hooks selbst verwalten möchtest." + "value": "Online" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cuando está activado, cmux envuelve el comando pi y carga su extensión de sesión integrada sin cambiar tu configuración de Pi. Desactívalo si prefieres gestionar tú mismo los hooks de Pi." + "value": "En línea" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Lorsque cette option est activée, cmux encapsule la commande pi et charge son extension de session intégrée sans modifier votre configuration Pi. Désactivez-la si vous préférez gérer les hooks Pi vous-même." + "value": "En ligne" } }, "ja": { "stringUnit": { "state": "translated", - "value": "有効にすると、cmuxはpiコマンドをラップし、Piの設定を変更せずにバンドルされたセッション拡張機能を読み込みます。Piのフックを自分で管理する場合は無効にしてください。" + "value": "オンライン" } }, "ko": { "stringUnit": { "state": "translated", - "value": "활성화하면 cmux가 pi 명령을 래핑하고 Pi 설정을 변경하지 않고 번들 세션 확장을 로드합니다. Pi 훅을 직접 관리하려면 비활성화하세요." + "value": "온라인" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "启用后,cmux 会包装 pi 命令并加载内置会话扩展,不会更改你的 Pi 配置。如果你希望自行管理 Pi 钩子,请禁用此选项。" + "value": "在线" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "啟用後,cmux 會包裝 pi 指令並載入內建工作階段擴充功能,不會變更你的 Pi 設定。若偏好自行管理 Pi 掛鉤,請停用此選項。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Kada je omogućeno, cmux obavija naredbu pi i učitava ugrađeno proširenje sesije bez mijenjanja vaše Pi konfiguracije. Onemogućite ako želite sami upravljati Pi kukama." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Når funktionen er aktiveret, indpakker cmux pi-kommandoen og indlæser den medfølgende sessionsudvidelse uden at ændre din Pi-konfiguration. Deaktiver den, hvis du selv vil administrere Pi-hooks." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Quando è abilitata, cmux avvolge il comando pi e carica l'estensione di sessione inclusa senza modificare la configurazione di Pi. Disabilitala se preferisci gestire autonomamente gli hook di Pi." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "នៅពេលបើកដំណើរការ cmux នឹងរុំពាក្យបញ្ជា pi ហើយផ្ទុកផ្នែកបន្ថែមសម័យដែលភ្ជាប់មកជាមួយ ដោយមិនផ្លាស់ប្តូរការកំណត់ Pi របស់អ្នក។ បិទវា ប្រសិនបើអ្នកចង់គ្រប់គ្រង hooks របស់ Pi ដោយខ្លួនឯង។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Når dette er aktivert, pakker cmux inn pi-kommandoen og laster den medfølgende øktutvidelsen uten å endre Pi-konfigurasjonen din. Deaktiver hvis du vil administrere Pi-hookene selv." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Po włączeniu cmux opakuje polecenie pi i załaduje dołączone rozszerzenie sesji bez zmieniania konfiguracji Pi. Wyłącz tę opcję, jeśli wolisz samodzielnie zarządzać hookami Pi." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Quando ativado, o cmux envolve o comando pi e carrega a extensão de sessão incluída sem alterar sua configuração do Pi. Desative se preferir gerenciar os hooks do Pi por conta própria." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "При включении cmux оборачивает команду pi и загружает встроенное расширение сеанса, не изменяя конфигурацию Pi. Отключите этот параметр, если предпочитаете управлять хуками Pi самостоятельно." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "เมื่อเปิดใช้งาน cmux จะครอบคำสั่ง pi และโหลดส่วนขยายเซสชันที่มาพร้อมกับโปรแกรมโดยไม่เปลี่ยนการตั้งค่า Pi ของคุณ ปิดใช้งานหากต้องการจัดการ hooks ของ Pi เอง" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Etkinleştirildiğinde cmux, Pi yapılandırmanızı değiştirmeden pi komutunu sarar ve birlikte gelen oturum uzantısını yükler. Pi kancalarını kendiniz yönetmeyi tercih ediyorsanız devre dışı bırakın." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Якщо ввімкнено, cmux обгортає команду pi й завантажує вбудоване розширення сеансу, не змінюючи конфігурацію Pi. Вимкніть цей параметр, якщо хочете самостійно керувати хуками Pi." + "value": "線上" } } } }, - "settings.automation.pi.subtitleOff": { + "settings.computers.offline": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Pi runs without cmux integration." + "value": "Offline" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يعمل Pi بدون تكامل cmux." + "value": "غير متصل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Pi läuft ohne cmux-Integration." + "value": "Offline" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pi se ejecuta sin integración con cmux." + "value": "Sin conexión" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pi s’exécute sans intégration cmux." + "value": "Hors ligne" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Piはcmux連携なしで実行されます。" + "value": "オフライン" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Pi가 cmux 연동 없이 실행됩니다." + "value": "오프라인" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Pi 在没有 cmux 集成的情况下运行。" + "value": "离线" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Pi 會在不使用 cmux 整合的情況下執行。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Pi radi bez cmux integracije." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Pi kører uden cmux-integration." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Pi viene eseguito senza l'integrazione con cmux." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "Pi ដំណើរការដោយគ្មានការរួមបញ្ចូល cmux។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Pi kjører uten cmux-integrasjon." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Pi działa bez integracji z cmux." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O Pi é executado sem a integração com o cmux." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Pi работает без интеграции с cmux." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "Pi ทำงานโดยไม่มีการผสานรวมกับ cmux" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Pi, cmux entegrasyonu olmadan çalışır." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Pi працює без інтеграції з cmux." + "value": "離線" } } } }, - "settings.automation.pi.subtitleOn": { + "settings.computers.unknown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sidebar shows Pi session status and notifications." + "value": "Waiting for connection" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يعرض الشريط الجانبي حالة جلسة Pi والإشعارات." + "value": "في انتظار الاتصال" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Seitenleiste zeigt den Pi-Sitzungsstatus und Benachrichtigungen an." + "value": "Warte auf Verbindung" } }, "es": { "stringUnit": { "state": "translated", - "value": "La barra lateral muestra el estado de la sesión de Pi y las notificaciones." + "value": "Esperando conexión" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La barre latérale affiche le statut de la session Pi et les notifications." + "value": "En attente de connexion" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイドバーにPiセッションのステータスと通知が表示されます。" + "value": "接続を待機中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사이드바에 Pi 세션 상태와 알림이 표시됩니다." + "value": "연결 대기 중" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "侧边栏显示 Pi 会话状态和通知。" + "value": "正在等待连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "側邊欄顯示 Pi 工作階段狀態和通知。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Bočna traka prikazuje status Pi sesije i obavijesti." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Sidepanelet viser Pi-sessionens status og notifikationer." + "value": "正在等待連線" } - }, - "it": { + } + } + }, + "settings.computers.invalidPairing": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "La barra laterale mostra lo stato della sessione Pi e le notifiche." + "value": "Enter a pairing link or a numeric Tailscale IP and port." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "របារចំហៀងបង្ហាញស្ថានភាពសម័យ Pi និងការជូនដំណឹង។" + "value": "أدخل رابط إقران أو عنوان IP رقميًا لـ Tailscale ومنفذًا." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Sidepanelet viser status og varsler for Pi-økten." + "value": "Gib einen Kopplungslink oder eine numerische Tailscale-IP mit Port ein." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Pasek boczny pokazuje stan sesji Pi i powiadomienia." + "value": "Introduce un enlace de emparejamiento o una IP numérica de Tailscale y un puerto." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A barra lateral mostra o status da sessão do Pi e as notificações." + "value": "Saisissez un lien d’association ou une adresse IP Tailscale numérique et un port." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "На боковой панели отображаются состояние сеанса Pi и уведомления." + "value": "ペアリングリンク、または数値形式のTailscale IPとポートを入力してください。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "แถบด้านข้างจะแสดงสถานะเซสชัน Pi และการแจ้งเตือน" + "value": "페어링 링크 또는 숫자 형식의 Tailscale IP와 포트를 입력하세요." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Kenar çubuğu, Pi oturumunun durumunu ve bildirimleri gösterir." + "value": "请输入配对链接,或数字格式的 Tailscale IP 和端口。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Бічна панель показує стан сеансу Pi та сповіщення." + "value": "請輸入配對連結,或數字格式的 Tailscale IP 與連接埠。" } } } }, - "settings.search.alias.setting.automation.pi": { + "settings.computers.tailscaleRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration pi hooks agent integration status notifications" + "value": "Use the other Mac’s pairing code with a numeric Tailscale IP address and port." } }, "ar": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration تكامل Pi خطافات وكيل حالة إشعارات" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration Pi kukice integracija agenta status obavijesti" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration Pi-hooks agentintegration status notifikationer" + "value": "استخدم رمز الإقران الخاص بجهاز Mac الآخر مع عنوان IP رقمي لـ Tailscale ومنفذ." } }, "de": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration Pi Hooks Agent Integration Status Benachrichtigungen" + "value": "Verwende den Kopplungscode des anderen Macs mit einer numerischen Tailscale-IP-Adresse und einem Port." } }, "es": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration Pi hooks integración de agente estado notificaciones" + "value": "Usa el código de emparejamiento del otro Mac con una dirección IP numérica de Tailscale y un puerto." } }, "fr": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration Pi hooks intégration agent état notifications" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration hook Pi integrazione agente stato notifiche" + "value": "Utilisez le code d’association de l’autre Mac avec une adresse IP Tailscale numérique et un port." } }, "ja": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration Pi フック エージェント連携 ステータス 通知" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration hooks Pi ការរួមបញ្ចូលភ្នាក់ងារ ស្ថានភាព ការជូនដំណឹង" + "value": "もう一方のMacのペアリングコードを、数値形式のTailscale IPアドレスとポートとともに使用してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration Pi 훅 에이전트 연동 상태 알림" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration Pi-hook agentintegrasjon status varsler" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration hooki Pi integracja agenta stan powiadomienia" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration hooks do Pi integração do agente status notificações" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration хуки Pi интеграция агента состояние уведомления" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration hooks ของ Pi การผสานรวมเอเจนต์ สถานะ การแจ้งเตือน" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration Pi kancaları aracı entegrasyonu durum bildirimler" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "automation.piIntegration хуки Pi інтеграція агента стан сповіщення" + "value": "다른 Mac의 페어링 코드를 숫자 형식의 Tailscale IP 주소 및 포트와 함께 사용하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration Pi 钩子 代理集成 状态 通知" + "value": "请使用另一台 Mac 的配对码,并搭配数字格式的 Tailscale IP 地址和端口。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "automation.piIntegration Pi 掛鉤 代理程式整合 狀態 通知" + "value": "請使用另一部 Mac 的配對碼,搭配數字格式的 Tailscale IP 位址與連接埠。" } } } }, - "cli.hooks.setup.wrapperNote": { + "settings.computers.selfPairing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": " (Claude Code and Pi hooks are injected automatically via their cmux wrappers)" + "value": "This code belongs to this Mac. Enter the other Mac’s pairing code." } }, "ar": { "stringUnit": { "state": "translated", - "value": " (يتم حقن خطافات Claude Code وPi تلقائيًا عبر أغلفة cmux)" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": " (Claude Code i Pi kukice se automatski ubacuju putem cmux omotača)" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": " (Claude Code- og Pi-hooks indsættes automatisk via deres cmux-wrappere)" + "value": "ينتمي هذا الرمز إلى جهاز Mac هذا. أدخل رمز الإقران الخاص بجهاز Mac الآخر." } }, "de": { "stringUnit": { "state": "translated", - "value": " (Claude-Code- und Pi-Hooks werden automatisch über ihre cmux-Wrapper eingefügt)" + "value": "Dieser Code gehört zu diesem Mac. Gib den Kopplungscode des anderen Macs ein." } }, "es": { "stringUnit": { "state": "translated", - "value": " (Los hooks de Claude Code y Pi se inyectan automáticamente mediante sus wrappers de cmux)" + "value": "Este código pertenece a este Mac. Introduce el código de emparejamiento del otro Mac." } }, "fr": { "stringUnit": { "state": "translated", - "value": " (Les hooks de Claude Code et Pi sont injectés automatiquement par leurs wrappers cmux)" - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": " (Gli hook di Claude Code e Pi vengono iniettati automaticamente tramite i rispettivi wrapper cmux)" + "value": "Ce code appartient à ce Mac. Saisissez le code d’association de l’autre Mac." } }, "ja": { "stringUnit": { "state": "translated", - "value": " (Claude Code と Pi のフックは cmux ラッパーによって自動的に注入されます)" - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": " (hooks របស់ Claude Code និង Pi ត្រូវបានបញ្ចូលដោយស្វ័យប្រវត្តិតាមរយៈ wrapper របស់ cmux)" + "value": "このコードはこのMacのものです。もう一方のMacのペアリングコードを入力してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": " (Claude Code 및 Pi 훅은 cmux 래퍼를 통해 자동으로 주입됩니다)" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": " (Claude Code- og Pi-hooker settes inn automatisk via cmux-innpakningene)" - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": " (Hooki Claude Code i Pi są automatycznie wstrzykiwane przez ich opakowania cmux)" - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": " (Os hooks do Claude Code e do Pi são injetados automaticamente pelos respectivos wrappers do cmux)" - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": " (Хуки Claude Code и Pi автоматически внедряются их оболочками cmux)" - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": " (hooks ของ Claude Code และ Pi จะถูกฉีดโดยอัตโนมัติผ่าน wrapper ของ cmux)" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": " (Claude Code ve Pi kancaları, cmux sarmalayıcıları aracılığıyla otomatik olarak eklenir)" - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": " (Хуки Claude Code і Pi автоматично додаються їхніми обгортками cmux)" + "value": "이 코드는 이 Mac의 코드입니다. 다른 Mac의 페어링 코드를 입력하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": " (Claude Code 和 Pi 的钩子会通过各自的 cmux 包装器自动注入)" + "value": "此代码属于这台 Mac。请输入另一台 Mac 的配对码。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": " (Claude Code 和 Pi 的掛鉤會透過各自的 cmux 包裝器自動注入)" + "value": "此代碼屬於這部 Mac。請輸入另一部 Mac 的配對碼。" } } } }, - "devices.link.error.notDiscoverable": { + "settings.computers.identityFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This Mac isn’t discoverable. On that Mac, turn on “Make this Mac discoverable” in Settings › Devices." + "value": "The Mac’s authenticated identity could not be verified. Update cmux on both Macs and copy a fresh pairing code." } }, "ar": { "stringUnit": { "state": "translated", - "value": "جهاز Mac هذا غير قابل للاكتشاف. على ذلك الجهاز، فعّل «جعل جهاز Mac هذا قابلاً للاكتشاف» في الإعدادات › الأجهزة." + "value": "تعذّر التحقق من الهوية الموثّقة لجهاز Mac. حدّث cmux على جهازي Mac وانسخ رمز إقران جديدًا." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Mac ist nicht auffindbar. Aktiviere auf diesem Mac unter „Einstellungen › Geräte“ die Option „Diesen Mac auffindbar machen“." + "value": "Die authentifizierte Identität des Macs konnte nicht überprüft werden. Aktualisiere cmux auf beiden Macs und kopiere einen neuen Kopplungscode." } }, "es": { "stringUnit": { "state": "translated", - "value": "Este Mac no es detectable. En ese Mac, activa «Hacer que este Mac sea detectable» en Ajustes › Dispositivos." + "value": "No se pudo verificar la identidad autenticada del Mac. Actualiza cmux en ambos Mac y copia un código de emparejamiento nuevo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce Mac n’est pas détectable. Sur ce Mac, activez « Rendre ce Mac détectable » dans Réglages › Appareils." + "value": "L’identité authentifiée du Mac n’a pas pu être vérifiée. Mettez à jour cmux sur les deux Mac et copiez un nouveau code d’association." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このMacは検出可能になっていません。そのMacの「設定 › デバイス」で「このMacを検出可能にする」をオンにしてください。" + "value": "Macの認証済みIDを確認できませんでした。両方のMacでcmuxをアップデートし、新しいペアリングコードをコピーしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 Mac을 검색할 수 없습니다. 해당 Mac의 설정 › 기기에서 “이 Mac을 검색할 수 있도록 설정”을 켜세요." + "value": "Mac의 인증된 ID를 확인할 수 없습니다. 두 Mac 모두에서 cmux를 업데이트하고 새 페어링 코드를 복사하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "这台 Mac 无法被发现。请在该 Mac 的“设置 › 设备”中开启“允许发现此 Mac”。" + "value": "无法验证这台 Mac 的已认证身份。请在两台 Mac 上更新 cmux,并复制新的配对码。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "這部 Mac 無法被探索。請在該 Mac 的「設定 › 裝置」中開啟「允許探索此 Mac」。" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Ovaj Mac nije vidljiv. Na tom Macu uključite „Učini ovaj Mac vidljivim” u Postavke › Uređaji." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Denne Mac kan ikke findes. Slå “Gør denne Mac synlig” til på den Mac under Indstillinger › Enheder." + "value": "無法驗證這部 Mac 的已認證身分。請在兩部 Mac 上更新 cmux,並複製新的配對碼。" } - }, - "it": { + } + } + }, + "settings.computers.pairingBusy": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Questo Mac non è individuabile. Su quel Mac, attiva “Rendi individuabile questo Mac” in Impostazioni › Dispositivi." + "value": "Wait for the current pairing attempt to finish." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "Mac នេះមិនអាចរកឃើញបានទេ។ នៅលើ Mac នោះ សូមបើក “ធ្វើឲ្យ Mac នេះអាចរកឃើញ” ក្នុងការកំណត់ › ឧបករណ៍។" + "value": "انتظر حتى تنتهي محاولة الإقران الحالية." } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Denne Macen er ikke synlig. Slå på «Gjør denne Macen synlig» på den Macen under Innstillinger › Enheter." + "value": "Warte, bis der aktuelle Kopplungsversuch abgeschlossen ist." } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Ten Mac nie jest wykrywalny. Na tym Macu włącz „Uczyń ten Mac wykrywalnym” w Ustawienia › Urządzenia." + "value": "Espera a que termine el intento de emparejamiento actual." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Este Mac não está detectável. Nesse Mac, ative “Tornar este Mac detectável” em Ajustes › Dispositivos." + "value": "Attendez la fin de la tentative d’association en cours." } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Этот Mac недоступен для обнаружения. На том Mac включите «Сделать этот Mac доступным для обнаружения» в разделе Настройки › Устройства." + "value": "現在のペアリングが完了するまでお待ちください。" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "Mac เครื่องนี้ไม่สามารถค้นพบได้ บน Mac เครื่องนั้น ให้เปิด “ทำให้ Mac เครื่องนี้ค้นพบได้” ในการตั้งค่า › อุปกรณ์" + "value": "현재 페어링 시도가 끝날 때까지 기다리세요." } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bu Mac keşfedilebilir değil. O Mac’te Ayarlar › Cihazlar bölümünden “Bu Mac’i keşfedilebilir yap” seçeneğini açın." + "value": "请等待当前的配对尝试完成。" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Цей Mac недоступний для виявлення. На тому Mac увімкніть «Зробити цей Mac доступним для виявлення» у розділі Налаштування › Пристрої." + "value": "請等待目前的配對嘗試完成。" } } } }, - "socket.terminal.notRunning.awaitingRestore": { + "settings.computers.storageFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux is still restoring the terminal after it reopened and is checking which agent session to resume. Retry in a few seconds." + "value": "Your paired Macs could not be loaded. Check available disk space and restart cmux." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يزال cmux يستعيد الطرفية بعد إعادة فتحه ويتحقق من جلسة الوكيل التي يجب استئنافها. أعد المحاولة بعد بضع ثوانٍ." + "value": "تعذّر تحميل أجهزة Mac المقترنة. تحقق من مساحة القرص المتاحة وأعد تشغيل cmux." } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux stellt das Terminal nach dem erneuten Öffnen noch wieder her und prüft, welche Agent-Sitzung fortgesetzt werden soll. Versuche es in ein paar Sekunden erneut." + "value": "Deine gekoppelten Macs konnten nicht geladen werden. Prüfe den verfügbaren Speicherplatz und starte cmux neu." } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux todavía está restaurando la terminal después de volver a abrirse y comprueba qué sesión de agente reanudar. Vuelve a intentarlo en unos segundos." + "value": "No se pudieron cargar tus Mac enlazados. Comprueba el espacio disponible en disco y reinicia cmux." } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux restaure encore le terminal après sa réouverture et vérifie quelle session d’agent reprendre. Réessayez dans quelques secondes." + "value": "Vos Mac associés n’ont pas pu être chargés. Vérifiez l’espace disque disponible et redémarrez cmux." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux は再起動後にターミナルを復元中で、再開するエージェントセッションを確認しています。数秒後に再試行してください。" + "value": "ペアリング済みのMacを読み込めませんでした。ディスクの空き容量を確認して、cmuxを再起動してください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux가 다시 열린 후 터미널을 아직 복원하는 중이며 어떤 에이전트 세션을 재개할지 확인하고 있습니다. 몇 초 후에 다시 시도하세요." + "value": "페어링된 Mac을 불러올 수 없습니다. 사용 가능한 디스크 공간을 확인하고 cmux를 다시 시작하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 重新打开后仍在恢复此终端,并确认要恢复哪个代理会话。请几秒后重试。" + "value": "无法载入已配对的 Mac。请检查可用磁盘空间并重新启动 cmux。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 重新開啟後仍在還原此終端機,並確認要恢復哪個代理工作階段。請幾秒後再試。" - } - }, - "bs" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux još vraća terminal nakon ponovnog otvaranja i provjerava koju sesiju agenta treba nastaviti. Pokušajte ponovo za nekoliko sekundi." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux gendanner stadig terminalen efter genåbning og tjekker, hvilken agentsession der skal genoptages. Prøv igen om et par sekunder." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux sta ancora ripristinando il terminale dopo la riapertura e verifica quale sessione dell’agente riprendere. Riprova tra qualche secondo." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux នៅតែកំពុងស្ដារទែមីណាល់ឡើងវិញ បន្ទាប់ពីបើកម្ដងទៀត ហើយកំពុងពិនិត្យមើលថាត្រូវបន្តវគ្គភ្នាក់ងារមួយណា។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux gjenoppretter fortsatt terminalen etter at den ble åpnet på nytt, og sjekker hvilken agentøkt som skal gjenopptas. Prøv igjen om noen sekunder." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux wciąż przywraca terminal po ponownym otwarciu i sprawdza, którą sesję agenta wznowić. Spróbuj ponownie za kilka sekund." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "O cmux ainda está restaurando o terminal após ser reaberto e verificando qual sessão do agente retomar. Tente novamente em alguns segundos." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux ещё восстанавливает терминал после повторного открытия и проверяет, какой сеанс агента возобновить. Повторите попытку через несколько секунд." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux ยังคงกู้คืนเทอร์มินัลหลังจากเปิดใหม่ และกำลังตรวจสอบว่าจะทำเซสชันเอเจนต์ใดต่อ ลองอีกครั้งในอีกไม่กี่วินาที" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux yeniden açıldıktan sonra terminali hâlâ geri yüklüyor ve hangi ajan oturumunun sürdürüleceğini denetliyor. Birkaç saniye sonra yeniden deneyin." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "cmux ще відновлює термінал після повторного відкриття та перевіряє, який сеанс агента відновити. Спробуйте ще раз за кілька секунд." + "value": "無法載入已配對的 Mac。請檢查可用磁碟空間並重新啟動 cmux。" } } } }, - "socket.terminal.notRunning.closing": { + "settings.computers.operationFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The terminal is closing and cannot be read." + "value": "The computer operation failed. Check that both Macs are signed in and online, then try again." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الطرفية قيد الإغلاق ولا يمكن قراءتها." + "value": "فشلت العملية على الكمبيوتر. تحقق من أن جهازي Mac مسجّلا الدخول ومتصلان بالإنترنت، ثم حاول مرة أخرى." } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Terminal wird geschlossen und kann nicht gelesen werden." + "value": "Der Vorgang auf dem Computer ist fehlgeschlagen. Prüfe, ob beide Macs angemeldet und online sind, und versuche es erneut." } }, "es": { "stringUnit": { "state": "translated", - "value": "La terminal se está cerrando y no se puede leer." + "value": "La operación en el equipo falló. Comprueba que ambos Mac tengan la sesión iniciada y estén en línea, e inténtalo de nuevo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le terminal est en cours de fermeture et ne peut pas être lu." + "value": "L’opération sur l’ordinateur a échoué. Vérifiez que les deux Mac sont connectés à votre compte et en ligne, puis réessayez." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルは閉じられているため読み取れません。" + "value": "コンピュータの操作に失敗しました。両方のMacがサインイン済みでオンラインであることを確認してから、もう一度お試しください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널이 닫히는 중이라 읽을 수 없습니다." + "value": "컴퓨터 작업에 실패했습니다. 두 Mac 모두 로그인되어 있고 온라인 상태인지 확인한 후 다시 시도하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端正在关闭,无法读取。" + "value": "电脑操作失败。请确认两台 Mac 都已登录且在线,然后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機正在關閉,無法讀取。" - } - }, - "bs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal se zatvara i ne može se pročitati." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen lukkes og kan ikke læses." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Il terminale si sta chiudendo e non può essere letto." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "ទែមីណាល់កំពុងបិទ ហើយមិនអាចអានបានទេ។" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen lukkes og kan ikke leses." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal jest zamykany i nie można go odczytać." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "O terminal está sendo fechado e não pode ser lido." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Терминал закрывается, и его нельзя прочитать." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เทอร์มินัลกำลังปิดและไม่สามารถอ่านได้" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal kapanıyor ve okunamıyor." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Термінал закривається, і його не можна прочитати." + "value": "電腦操作失敗。請確認兩部 Mac 都已登入且在線上,然後再試一次。" } } } }, - "socket.terminal.notRunning.hibernated": { + "devices.show.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The terminal is hibernated: cmux suspended its idle agent to save memory. Wake it by showing it (this brings its window to the front), then retry: %@" + "value": "Show" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الطرفية في وضع السبات: أوقف cmux وكيلها الخامل مؤقتًا لتوفير الذاكرة. أيقظها بعرضها (يؤدي ذلك إلى إحضار نافذتها إلى المقدمة)، ثم أعد المحاولة: %@" + "value": "إظهار" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Terminal ruht: cmux hat seinen inaktiven Agenten angehalten, um Speicher zu sparen. Wecke es, indem du es anzeigst (dadurch kommt sein Fenster in den Vordergrund), und versuche es dann erneut: %@" + "value": "Einblenden" } }, "es": { "stringUnit": { "state": "translated", - "value": "La terminal está hibernada: cmux suspendió su agente inactivo para ahorrar memoria. Despiértala mostrándola (esto trae su ventana al frente) y vuelve a intentarlo: %@" + "value": "Mostrar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le terminal est en veille : cmux a suspendu son agent inactif pour économiser de la mémoire. Réveillez-le en l’affichant (sa fenêtre passe au premier plan), puis réessayez : %@" + "value": "Afficher" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルは休止中です。cmux がメモリ節約のためアイドル状態のエージェントを停止しました。表示すると再開します(ウィンドウが前面に出ます)。その後、再試行してください: %@" + "value": "表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널이 최대 절전 상태입니다. cmux가 메모리를 절약하려고 유휴 에이전트를 일시 중단했습니다. 터미널을 표시해 깨운 후(창이 앞으로 옵니다) 다시 시도하세요: %@" + "value": "표시" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端已休眠:cmux 暂停了其空闲的代理以节省内存。显示它即可唤醒(这会将其窗口带到最前面),然后重试:%@" + "value": "显示" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機已休眠:cmux 暫停了其閒置的代理以節省記憶體。顯示它即可喚醒(這會將其視窗帶到最前面),然後再試一次:%@" - } - }, - "bs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Probudite ga tako što ćete ga prikazati (njegov prozor prelazi u prvi plan), pa pokušajte ponovo: %@" - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Væk den ved at vise den (dens vindue kommer forrest), og prøv igen: %@" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Riattivalo mostrandolo (la sua finestra passa in primo piano), quindi riprova: %@" - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ ដាស់វាដោយបង្ហាញវា (បង្អួចរបស់វានឹងមកខាងមុខ) រួចព្យាយាមម្ដងទៀត៖ %@" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vekk den ved å vise den (vinduet kommer i forgrunnen), og prøv igjen: %@" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wybudź go, wyświetlając go (jego okno przejdzie na pierwszy plan), a potem spróbuj ponownie: %@" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Desperte-o exibindo-o (a janela vem para a frente) e tente novamente: %@" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Разбудите его, показав терминал (его окно выйдет на передний план), и повторите попытку: %@" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ ปลุกโดยแสดงเทอร์มินัล (หน้าต่างจะมาอยู่ด้านหน้า) แล้วลองอีกครั้ง: %@" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Onu göstererek uyandırın (penceresi öne gelir), ardından yeniden deneyin: %@" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Розбудіть його, показавши термінал (його вікно перейде на передній план), і спробуйте ще раз: %@" + "value": "顯示" } } } }, - "socket.terminal.notRunning.hibernatedNoCommand": { + "devices.show": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The terminal is hibernated: cmux suspended its idle agent to save memory. Show the terminal in cmux to wake it, then retry." + "value": "Show in My Devices" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الطرفية في وضع السبات: أوقف cmux وكيلها الخامل مؤقتًا لتوفير الذاكرة. اعرض الطرفية في cmux لإيقاظها، ثم أعد المحاولة." + "value": "إظهار في أجهزتي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Terminal ruht: cmux hat seinen inaktiven Agenten angehalten, um Speicher zu sparen. Zeige das Terminal in cmux an, um es zu wecken, und versuche es dann erneut." + "value": "In „Meine Geräte“ einblenden" } }, "es": { "stringUnit": { "state": "translated", - "value": "La terminal está hibernada: cmux suspendió su agente inactivo para ahorrar memoria. Muestra la terminal en cmux para despertarla y vuelve a intentarlo." + "value": "Mostrar en Mis dispositivos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le terminal est en veille : cmux a suspendu son agent inactif pour économiser de la mémoire. Affichez le terminal dans cmux pour le réveiller, puis réessayez." + "value": "Afficher dans Mes appareils" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルは休止中です。cmux がメモリ節約のためアイドル状態のエージェントを停止しました。cmux でターミナルを表示して再開してから、再試行してください。" + "value": "マイデバイスに表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널이 최대 절전 상태입니다. cmux가 메모리를 절약하려고 유휴 에이전트를 일시 중단했습니다. cmux에서 터미널을 표시해 깨운 후 다시 시도하세요." + "value": "내 기기에 표시" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端已休眠:cmux 暂停了其空闲的代理以节省内存。请在 cmux 中显示此终端以唤醒它,然后重试。" + "value": "在“我的设备”中显示" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機已休眠:cmux 暫停了其閒置的代理以節省記憶體。請在 cmux 中顯示此終端機以喚醒它,然後再試一次。" - } - }, - "bs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Prikažite terminal u cmuxu da ga probudite, pa pokušajte ponovo." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Vis terminalen i cmux for at vække den, og prøv igen." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Mostra il terminale in cmux per riattivarlo, quindi riprova." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ បង្ហាញទែមីណាល់នៅក្នុង cmux ដើម្បីដាស់វា រួចព្យាយាមម្ដងទៀត។" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vis terminalen i cmux for å vekke den, og prøv igjen." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wyświetl terminal w cmux, aby go wybudzić, a potem spróbuj ponownie." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Mostre o terminal no cmux para despertá-lo e tente novamente." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Покажите терминал в cmux, чтобы разбудить его, и повторите попытку." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ แสดงเทอร์มินัลใน cmux เพื่อปลุก แล้วลองอีกครั้ง" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Uyandırmak için terminali cmux'ta gösterin, ardından yeniden deneyin." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Покажіть термінал у cmux, щоб розбудити його, і спробуйте ще раз." + "value": "在「我的裝置」中顯示" } } } }, - "socket.terminal.notRunning.starting": { + "devices.hide": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The terminal has not started yet. Retry in a few seconds." + "value": "Hide from My Devices" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم تبدأ الطرفية بعد. أعد المحاولة بعد بضع ثوانٍ." + "value": "إخفاء من أجهزتي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Terminal wurde noch nicht gestartet. Versuche es in ein paar Sekunden erneut." + "value": "Aus „Meine Geräte“ ausblenden" } }, "es": { "stringUnit": { "state": "translated", - "value": "La terminal aún no se ha iniciado. Vuelve a intentarlo en unos segundos." + "value": "Ocultar de Mis dispositivos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le terminal n’a pas encore démarré. Réessayez dans quelques secondes." + "value": "Masquer dans Mes appareils" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ターミナルはまだ起動していません。数秒後に再試行してください。" + "value": "マイデバイスから隠す" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널이 아직 시작되지 않았습니다. 몇 초 후에 다시 시도하세요." + "value": "내 기기에서 숨기기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端尚未启动。请几秒后重试。" + "value": "从“我的设备”中隐藏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機尚未啟動。請幾秒後再試。" - } - }, - "bs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal se još nije pokrenuo. Pokušajte ponovo za nekoliko sekundi." - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen er ikke startet endnu. Prøv igen om et par sekunder." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Il terminale non è ancora stato avviato. Riprova tra qualche secondo." - } - }, - "km" : { - "stringUnit" : { - "state" : "translated", - "value" : "ទែមីណាល់មិនទាន់បានចាប់ផ្តើមនៅឡើយទេ។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminalen har ikke startet ennå. Prøv igjen om noen sekunder." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal jeszcze się nie uruchomił. Spróbuj ponownie za kilka sekund." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "O terminal ainda não foi iniciado. Tente novamente em alguns segundos." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Терминал ещё не запущен. Повторите попытку через несколько секунд." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เทอร์มินัลยังไม่ได้เริ่มทำงาน ลองอีกครั้งในอีกไม่กี่วินาที" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terminal henüz başlamadı. Birkaç saniye sonra yeniden deneyin." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Термінал ще не запущено. Спробуйте ще раз за кілька секунд." + "value": "從「我的裝置」中隱藏" } } } }, - "machines.requiresPro.upgrade.short": { + "devices.actions": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Upgrade" + "value": "Mac options" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ترقية" + "value": "خيارات Mac" } }, "de": { "stringUnit": { "state": "translated", - "value": "Upgraden" + "value": "Mac-Optionen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Actualizar" + "value": "Opciones del Mac" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Mettre à niveau" + "value": "Options du Mac" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップグレード" + "value": "Macのオプション" } }, "ko": { "stringUnit": { "state": "translated", - "value": "업그레이드" + "value": "Mac 옵션" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "升级" + "value": "Mac 选项" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "升級" + "value": "Mac 選項" } } } }, - "machines.sessionRejected.signInAgain.short": { + "devices.hidden": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign In" + "value": "Hidden from sidebar" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تسجيل الدخول" + "value": "مخفي من الشريط الجانبي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Anmelden" + "value": "In der Seitenleiste ausgeblendet" } }, "es": { "stringUnit": { "state": "translated", - "value": "Iniciar sesión" + "value": "Oculto en la barra lateral" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Se reconnecter" + "value": "Masqué dans la barre latérale" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再サインイン" + "value": "サイドバーで非表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다시 로그인" + "value": "사이드바에서 숨겨짐" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "重新登录" + "value": "已从边栏隐藏" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "重新登入" + "value": "已從側邊欄隱藏" } } } }, - "machines.requiresPro.stale": { + "devices.connected": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud machines need cmux Pro, showing last known" + "value": "Connected" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تتطلب الأجهزة السحابية إصدار cmux Pro، يتم عرض آخر حالة معروفة" + "value": "متصل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen erfordern cmux Pro, zeige letzten bekannten Stand" + "value": "Verbunden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Las máquinas en la nube requieren cmux Pro, se muestra el último estado conocido" + "value": "Conectado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les machines Cloud nécessitent cmux Pro, affichage des dernières informations connues" + "value": "Connecté" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Cloud マシンには cmux Pro が必要です。最後の状態を表示中" + "value": "接続済み" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 머신을 사용하려면 cmux Pro가 필요함, 마지막으로 확인된 상태 표시 중" + "value": "연결됨" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "云端机器需要 cmux Pro,显示的是最后已知状态" + "value": "已连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雲端機器需要 cmux Pro,顯示上次已知的狀態" + "value": "已連線" } } } }, - "machines.sessionRejected.stale": { + "devices.registry.failed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign-in needs a refresh, showing last known" + "value": "Could not refresh your Macs. Check your connection and try again." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يحتاج تسجيل الدخول إلى تحديث، يتم عرض آخر حالة معروفة" + "value": "تعذّر تحديث أجهزة Mac الخاصة بك. تحقق من اتصالك وحاول مرة أخرى." } }, "de": { "stringUnit": { "state": "translated", - "value": "Anmeldung muss aktualisiert werden, zeige letzten bekannten Stand" + "value": "Deine Macs konnten nicht aktualisiert werden. Prüfe deine Verbindung und versuche es erneut." } }, "es": { "stringUnit": { "state": "translated", - "value": "Es necesario actualizar el inicio de sesión, se muestra el último estado conocido" + "value": "No se pudieron actualizar tus Mac. Comprueba tu conexión e inténtalo de nuevo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La connexion doit être actualisée, affichage des dernières informations connues" + "value": "Impossible d’actualiser vos Mac. Vérifiez votre connexion et réessayez." } }, "ja": { "stringUnit": { "state": "translated", - "value": "再サインインが必要です。最後の状態を表示中" + "value": "Macの一覧を更新できませんでした。接続を確認して、もう一度お試しください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로그인 갱신 필요, 마지막으로 확인된 상태 표시 중" + "value": "Mac 목록을 새로 고칠 수 없습니다. 연결을 확인하고 다시 시도하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "登录状态需要刷新,显示的是最后已知状态" + "value": "无法刷新你的 Mac。请检查网络连接后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "登入狀態需要重新整理,顯示上次已知的狀態" + "value": "無法重新整理您的 Mac。請檢查連線後再試一次。" } } } }, - "cli.auth.status.teamNotLoaded": { + "cloudTree.group.cloudMachines": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": " team: not loaded" + "value": "Cloud Machines" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": " チーム: 未読み込み" + "value": "Cloud-Maschinen" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": " 团队: 未加载" + "value": "Machines cloud" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": " Team: nicht geladen" + "value": "أجهزة سحابية" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": " équipe: non chargée" + "value": "Máquinas en la nube" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": " الفريق: لم يتم تحميله" + "value": "雲端機器" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": " equipo: no cargado" + "value": "云端机器" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": " 團隊: 未載入" + "value": "클라우드 머신" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": " 팀: 로드되지 않음" + "value": "クラウドマシン" } }, "bs": { "stringUnit": { "state": "translated", - "value": " tim: nije učitan" + "value": "Mašine u oblaku" } }, "da": { "stringUnit": { "state": "translated", - "value": " team: ikke indlæst" + "value": "Cloud-maskiner" } }, "it": { "stringUnit": { "state": "translated", - "value": " team: non caricato" + "value": "Macchine cloud" } }, "km": { "stringUnit": { "state": "translated", - "value": " ក្រុម៖ មិនទាន់បានផ្ទុក" + "value": "ម៉ាស៊ីនលើពពក" } }, "nb": { "stringUnit": { "state": "translated", - "value": " team: ikke lastet" + "value": "Skymaskiner" } }, "pl": { "stringUnit": { "state": "translated", - "value": " zespół: nie załadowano" + "value": "Maszyny w chmurze" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": " equipe: não carregada" + "value": "Máquinas na nuvem" } }, "ru": { "stringUnit": { "state": "translated", - "value": " команда: не загружена" + "value": "Облачные машины" } }, "th": { "stringUnit": { "state": "translated", - "value": " ทีม: ยังไม่ได้โหลด" + "value": "เครื่องคลาวด์" } }, "tr": { "stringUnit": { "state": "translated", - "value": " ekip: yüklenmedi" + "value": "Bulut makineleri" } }, "uk": { "stringUnit": { "state": "translated", - "value": " команда: не завантажена" + "value": "Хмарні машини" } } } }, - "cli.auth.status.teamNotLoadedRetrying": { + "cloudTree.group.devices": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": " team: not loaded (retrying)" + "value": "My Devices" } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": " チーム: 未読み込み(再試行中)" + "value": "Meine Geräte" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": " 团队: 未加载(正在重试)" + "value": "Mes appareils" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": " Team: nicht geladen (wird erneut versucht)" + "value": "أجهزتي" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": " équipe: non chargée (nouvel essai)" + "value": "Mis dispositivos" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": " الفريق: لم يتم تحميله (جارٍ إعادة المحاولة)" + "value": "我的裝置" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": " equipo: no cargado (reintentando)" + "value": "我的设备" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": " 團隊: 未載入(重試中)" + "value": "내 기기" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": " 팀: 로드되지 않음 (재시도 중)" + "value": "マイデバイス" } }, "bs": { "stringUnit": { "state": "translated", - "value": " tim: nije učitan (ponovni pokušaj)" + "value": "Moji uređaji" } }, "da": { "stringUnit": { "state": "translated", - "value": " team: ikke indlæst (prøver igen)" + "value": "Mine enheder" } }, "it": { "stringUnit": { "state": "translated", - "value": " team: non caricato (nuovo tentativo)" + "value": "I miei dispositivi" } }, "km": { "stringUnit": { "state": "translated", - "value": " ក្រុម៖ មិនទាន់បានផ្ទុក (កំពុងព្យាយាមម្ដងទៀត)" + "value": "ឧបករណ៍របស់ខ្ញុំ" } }, "nb": { "stringUnit": { "state": "translated", - "value": " team: ikke lastet (prøver igjen)" + "value": "Mine enheter" } }, "pl": { "stringUnit": { "state": "translated", - "value": " zespół: nie załadowano (ponawianie próby)" + "value": "Moje urządzenia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": " equipe: não carregada (tentando novamente)" + "value": "Meus dispositivos" } }, "ru": { "stringUnit": { "state": "translated", - "value": " команда: не загружена (повторная попытка)" + "value": "Мои устройства" } }, "th": { "stringUnit": { "state": "translated", - "value": " ทีม: ยังไม่ได้โหลด (กำลังลองอีกครั้ง)" + "value": "อุปกรณ์ของฉัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": " ekip: yüklenmedi (yeniden deneniyor)" + "value": "Cihazlarım" } }, "uk": { "stringUnit": { "state": "translated", - "value": " команда: не завантажена (повторна спроба)" + "value": "Мої пристрої" } } } }, - "mobile.pairing.error.teamUnavailable": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Could not load your cmux team. Check your internet connection, then try again." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux チームを読み込めませんでした。インターネット接続を確認してから、もう一度お試しください。" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "无法加载你的 cmux 团队。请检查网络连接,然后重试。" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Dein cmux-Team konnte nicht geladen werden. Prüfe deine Internetverbindung und versuche es erneut." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Impossible de charger votre équipe cmux. Vérifiez votre connexion Internet, puis réessayez." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذّر تحميل فريق cmux الخاص بك. تحقّق من اتصالك بالإنترنت، ثم حاول مرة أخرى." - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No se pudo cargar tu equipo de cmux. Comprueba tu conexión a internet e inténtalo de nuevo." - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "無法載入你的 cmux 團隊。請檢查網路連線,然後再試一次。" - } - }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "cmux 팀을 불러올 수 없습니다. 인터넷 연결을 확인한 후 다시 시도하세요." - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Nije moguće učitati vaš cmux tim. Provjerite internetsku vezu i pokušajte ponovo." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Din cmux-team kunne ikke indlæses. Kontrollér din internetforbindelse, og prøv igen." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Impossibile caricare il tuo team cmux. Controlla la connessione Internet e riprova." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "មិនអាចផ្ទុកក្រុម cmux របស់អ្នកបានទេ។ សូមពិនិត្យការតភ្ជាប់អ៊ីនធឺណិត ហើយព្យាយាមម្ដងទៀត។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Kunne ikke laste inn cmux-teamet ditt. Kontroller internettilkoblingen, og prøv igjen." - } - }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Nie udało się załadować Twojego zespołu cmux. Sprawdź połączenie z internetem i spróbuj ponownie." - } - }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Não foi possível carregar sua equipe cmux. Verifique sua conexão com a internet e tente novamente." - } - }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Не удалось загрузить вашу команду cmux. Проверьте подключение к интернету и попробуйте ещё раз." - } - }, - "th": { - "stringUnit": { - "state": "translated", - "value": "ไม่สามารถโหลดทีม cmux ของคุณได้ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง" - } - }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "cmux ekibiniz yüklenemedi. İnternet bağlantınızı kontrol edip tekrar deneyin." - } - }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Не вдалося завантажити вашу команду cmux. Перевірте підключення до інтернету й спробуйте ще раз." - } - } - } -}, - "command.newPaneAutoLayout.title": { + "machines.listUnavailable.stale": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لوحة جديدة (تخطيط تلقائي)" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Novi panel (automatski raspored)" + "value": "Machine list unavailable — showing last known" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Nyt panel (automatisk layout)" + "value": "Maschinenliste nicht verfügbar – zeige letzten bekannten Stand" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Neuer Bereich (automatisches Layout)" + "value": "Liste des machines indisponible — affichage des dernières informations connues" } }, - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "New Pane (Auto Layout)" + "value": "قائمة الأجهزة غير متاحة — يتم عرض آخر حالة معروفة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo panel (diseño automático)" + "value": "Lista de máquinas no disponible — se muestra el último estado conocido" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Nouveau panneau (disposition automatique)" + "value": "無法取得機器清單 — 顯示上次已知的狀態" } }, - "it": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Nuovo pannello (layout automatico)" + "value": "机器列表不可用 —— 显示的是最后已知状态" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "新しいペイン(自動レイアウト)" + "value": "머신 목록을 사용할 수 없음 — 마지막으로 확인된 상태 표시 중" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "새 패널 (자동 레이아웃)" + "value": "マシン一覧を取得できません — 最後の状態を表示中" } - }, - "nb": { + } + } + }, + "machines.listUnavailable.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Nytt panel (automatisk oppsett)" + "value": "Your machines are unchanged. cmux couldn’t load the list from the Cloud service and retries on its own." } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Nowy panel (układ automatyczny)" + "value": "Deine Maschinen sind unverändert. cmux konnte die Liste nicht vom Cloud-Dienst laden und versucht es selbstständig erneut." } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Novo Painel (Layout Automático)" + "value": "Vos machines ne sont pas modifiées. cmux n’a pas pu charger la liste depuis le service Cloud et va réessayer automatiquement." } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Новая панель (автоматическая раскладка)" + "value": "لم تتغير أجهزتك. تعذر على cmux تحميل القائمة من الخدمة السحابية، وسيعيد المحاولة تلقائيًا." } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "บานหน้าต่างใหม่ (จัดวางอัตโนมัติ)" + "value": "Tus máquinas no han cambiado. cmux no pudo cargar la lista desde el servicio de la nube y volverá a intentarlo automáticamente." } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Yeni Bölme (Otomatik Düzen)" + "value": "您的機器沒有任何變動。cmux 無法從雲端服務載入清單,會自動重試。" } }, - "uk": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Нова панель (автоматичне розташування)" + "value": "你的机器没有任何变化。cmux 无法从云端服务加载列表,会自动重试。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "新建窗格(自动布局)" + "value": "머신은 변경되지 않았습니다. cmux가 클라우드 서비스에서 목록을 불러오지 못했으며 자동으로 다시 시도합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "新增窗格(自動佈局)" + "value": "マシンは変更されていません。cmux はクラウドサービスから一覧を読み込めませんでした。自動的に再試行します。" } } } }, - "shortcut.newPaneAutoLayout.label": { + "machines.listUnavailable.title": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "لوحة جديدة (تخطيط تلقائي)" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Novi panel (automatski raspored)" + "value": "Can’t load the machine list" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Nyt panel (automatisk layout)" + "value": "Maschinenliste kann nicht geladen werden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Neuer Bereich (automatisches Layout)" + "value": "Impossible de charger la liste des machines" } }, - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "New Pane (Auto Layout)" + "value": "تعذر تحميل قائمة الأجهزة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nuevo panel (diseño automático)" + "value": "No se puede cargar la lista de máquinas" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Nouveau panneau (disposition automatique)" + "value": "無法載入機器清單" } }, - "it": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Nuovo pannello (layout automatico)" + "value": "无法加载机器列表" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "新しいペイン(自動レイアウト)" + "value": "머신 목록을 불러올 수 없습니다" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "새 패널 (자동 레이아웃)" + "value": "マシン一覧を読み込めません" } - }, - "nb": { + } + } + }, + "machines.offline.stale": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Nytt panel (automatisk oppsett)" + "value": "Offline — showing last known" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Nowy panel (układ automatyczny)" + "value": "Offline – zeige letzten bekannten Stand" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Novo Painel (Layout Automático)" + "value": "Hors ligne — affichage des dernières informations connues" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Новая панель (автоматическая раскладка)" + "value": "غير متصل — يتم عرض آخر حالة معروفة" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "บานหน้าต่างใหม่ (จัดวางอัตโนมัติ)" + "value": "Sin conexión — se muestra el último estado conocido" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Yeni Bölme (Otomatik Düzen)" + "value": "離線 — 顯示上次已知的狀態" } }, - "uk": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Нова панель (автоматичне розташування)" + "value": "离线 —— 显示的是最后已知状态" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "新建窗格(自动布局)" + "value": "오프라인 — 마지막으로 확인된 상태 표시 중" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "新增窗格(自動佈局)" + "value": "オフライン — 最後の状態を表示中" } } } }, - "cli.restoreSession.help": { + "machines.offline.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nReopen the previous saved cmux session.\n\nIf the app is already running, this restores the last saved session into the current app.\nIf the app is not running, this launches cmux and lets startup restore reopen the saved session.\n\nEach cmux install (stable, nightly, rc, staging, tagged debug builds) saves its own session.\n--from <channel> Reopen another install's saved session in this running cmux, for example\n after trying nightly and switching back to stable. The session opens as\n additional windows; the other install's saved file is only read.\n--from <path> Reopen a session file written by --export.\n--export <path> Write this cmux's saved session to a file. Pass --force to replace an\n existing file.\n\n--from and --export require cmux to be running." + "value": "Cloud machines load when this Mac is back online." } }, "de": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nDie zuletzt gespeicherte cmux-Sitzung erneut öffnen.\n\nLäuft die App bereits, wird die zuletzt gespeicherte Sitzung in der aktuellen App wiederhergestellt.\nLäuft die App nicht, wird cmux gestartet und die gespeicherte Sitzung beim Start wiederhergestellt.\n\nJede cmux-Installation (stable, nightly, rc, staging, getaggte Debug-Builds) speichert ihre eigene Sitzung.\n--from <channel> Die gespeicherte Sitzung einer anderen Installation in diesem laufenden cmux öffnen,\n z. B. nachdem Sie nightly ausprobiert haben und zu stable zurückkehren. Die Sitzung\n öffnet sich in zusätzlichen Fenstern; die Datei der anderen Installation wird nur gelesen.\n--from <path> Eine mit --export geschriebene Sitzungsdatei öffnen.\n--export <path> Die gespeicherte Sitzung dieses cmux in eine Datei schreiben. Mit --force wird eine\n vorhandene Datei ersetzt.\n\n--from und --export setzen ein laufendes cmux voraus." + "value": "Cloud-Maschinen werden geladen, sobald dieser Mac wieder online ist." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nRouvrir la dernière session cmux enregistrée.\n\nSi l'app est déjà ouverte, la dernière session enregistrée est restaurée dans l'app actuelle.\nSi l'app n'est pas ouverte, cmux est lancé et la restauration au démarrage rouvre la session enregistrée.\n\nChaque installation de cmux (stable, nightly, rc, staging, builds debug avec tag) enregistre sa propre session.\n--from <channel> Rouvrir la session enregistrée d'une autre installation dans ce cmux en cours, par exemple\n après avoir essayé nightly puis être revenu à stable. La session s'ouvre dans des fenêtres\n supplémentaires ; le fichier de l'autre installation est seulement lu.\n--from <path> Rouvrir un fichier de session écrit par --export.\n--export <path> Écrire la session enregistrée de ce cmux dans un fichier. Ajoutez --force pour remplacer\n un fichier existant.\n\n--from et --export nécessitent que cmux soit ouvert." + "value": "Les machines Cloud se chargeront dès que ce Mac sera de nouveau en ligne." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Uso: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nVuelve a abrir la última sesión guardada de cmux.\n\nSi la app ya está abierta, restaura la última sesión guardada en la app actual.\nSi la app no está abierta, inicia cmux y deja que la restauración de inicio vuelva a abrir la sesión guardada.\n\nCada instalación de cmux (stable, nightly, rc, staging, builds de depuración con etiqueta) guarda su propia sesión.\n--from <channel> Abre en este cmux la sesión guardada de otra instalación, por ejemplo después de\n probar nightly y volver a stable. La sesión se abre en ventanas adicionales; el archivo\n de la otra instalación solo se lee.\n--from <path> Abre un archivo de sesión escrito con --export.\n--export <path> Escribe en un archivo la sesión guardada de este cmux. Usa --force para reemplazar un\n archivo existente.\n\n--from y --export requieren que cmux esté abierto." + "value": "سيتم تحميل الأجهزة السحابية عندما يعود جهاز Mac هذا إلى الاتصال بالإنترنت." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "使い方: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n前回保存した cmux セッションを再度開きます。\n\nアプリがすでに起動している場合は、最後に保存したセッションを現在のアプリに復元します。\nアプリが起動していない場合は、cmux を起動し、起動時の復元で保存済みセッションを開きます。\n\ncmux の各インストール(stable、nightly、rc、staging、タグ付き debug ビルド)はそれぞれ独自のセッションを保存します。\n--from <channel> 別のインストールで保存したセッションを、起動中のこの cmux で開きます。たとえば nightly を\n 試したあと stable に戻る場合に使います。セッションは追加のウインドウとして開き、別の\n インストールのファイルは読み取るだけです。\n--from <path> --export で書き出したセッションファイルを開きます。\n--export <path> この cmux の保存済みセッションをファイルに書き出します。既存のファイルを置き換えるには\n --force を指定します。\n\n--from と --export を使うには cmux が起動している必要があります。" + "value": "Las máquinas en la nube se cargarán cuando este Mac vuelva a estar en línea." } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nأعد فتح آخر جلسة cmux محفوظة.\n\nإذا كان التطبيق يعمل بالفعل، فستُستعاد آخر جلسة محفوظة في التطبيق الحالي.\nإذا لم يكن التطبيق يعمل، فسيُشغَّل cmux وتعيد استعادة بدء التشغيل فتح الجلسة المحفوظة.\n\nيحفظ كل تثبيت من cmux (stable وnightly وrc وstaging وإصدارات debug الموسومة) جلسته الخاصة.\n--from <channel> افتح الجلسة المحفوظة لتثبيت آخر في cmux الذي يعمل الآن، مثلًا\n بعد تجربة nightly والعودة إلى stable. تُفتح الجلسة في\n نوافذ إضافية، ويُقرأ ملف التثبيت الآخر فقط.\n--from <path> افتح ملف جلسة كتبه الأمر --export.\n--export <path> اكتب الجلسة المحفوظة لهذا cmux في ملف. استخدم --force لاستبدال\n ملف موجود.\n\nيتطلب --from و--export أن يكون cmux قيد التشغيل." + "value": "這台 Mac 恢復連線後,就會載入雲端機器。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用法: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n重新開啟上次儲存的 cmux 工作階段。\n\n如果 App 已在執行,會將上次儲存的工作階段還原到目前的 App 中。\n如果 App 未執行,會啟動 cmux,並由啟動還原重新開啟已儲存的工作階段。\n\n每個 cmux 安裝(stable、nightly、rc、staging、帶標籤的 debug 建置)都會儲存自己的工作階段。\n--from <channel> 在執行中的 cmux 開啟另一個安裝儲存的工作階段,例如\n 試用 nightly 後切回 stable。工作階段會以\n 額外視窗開啟;另一個安裝的檔案只會被讀取。\n--from <path> 開啟由 --export 寫出的工作階段檔案。\n--export <path> 將此 cmux 儲存的工作階段寫入檔案。使用 --force 可取代\n 既有檔案。\n\n--from 和 --export 需要 cmux 正在執行。" + "value": "这台 Mac 恢复联网后,就会加载云端机器。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "用法: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n重新打开上次保存的 cmux 会话。\n\n如果应用已在运行,会将上次保存的会话恢复到当前应用中。\n如果应用未运行,会启动 cmux,并由启动恢复重新打开保存的会话。\n\n每个 cmux 安装(stable、nightly、rc、staging、带标签的 debug 构建)都会保存自己的会话。\n--from <channel> 在正在运行的 cmux 中打开另一个安装保存的会话,例如\n 试用 nightly 后切回 stable。会话会以\n 额外窗口打开;另一个安装的会话文件只会被读取。\n--from <path> 打开由 --export 写出的会话文件。\n--export <path> 将此 cmux 保存的会话写入文件。使用 --force 可替换\n 已有文件。\n\n--from 和 --export 需要 cmux 正在运行。" + "value": "이 Mac이 다시 온라인 상태가 되면 클라우드 머신을 불러옵니다." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "사용법: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n마지막으로 저장된 cmux 세션을 다시 엽니다.\n\n앱이 이미 실행 중이면 마지막으로 저장된 세션을 현재 앱에 복원합니다.\n앱이 실행 중이 아니면 cmux를 실행하고 시작 복원이 저장된 세션을 다시 열도록 합니다.\n\n각 cmux 설치(stable, nightly, rc, staging, 태그가 지정된 debug 빌드)는 자체 세션을 저장합니다.\n--from <channel> 다른 설치에 저장된 세션을 실행 중인 이 cmux에서 엽니다. 예를 들어\n nightly를 사용해 본 뒤 stable로 돌아올 때 사용합니다. 세션은\n 추가 창으로 열리며, 다른 설치의 파일은 읽기만 합니다.\n--from <path> --export로 작성한 세션 파일을 엽니다.\n--export <path> 이 cmux에 저장된 세션을 파일로 씁니다. 기존 파일을 바꾸려면\n --force를 사용하세요.\n\n--from과 --export를 사용하려면 cmux가 실행 중이어야 합니다." + "value": "この Mac がオンラインに戻ると Cloud マシンを読み込みます。" } } } }, - "session.export.error.destinationExists": { + "machines.offline.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ already exists. Pass --force to replace it." + "value": "Waiting for network" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%@ موجود بالفعل. استخدم --force لاستبداله." + "value": "Warte auf Netzwerk" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ ist bereits vorhanden. Verwenden Sie --force, um die Datei zu ersetzen." + "value": "En attente du réseau" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ ya existe. Usa --force para reemplazarlo." + "value": "في انتظار الشبكة" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ existe déjà. Ajoutez --force pour le remplacer." + "value": "Esperando la red" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ はすでに存在します。置き換えるには --force を指定してください。" + "value": "正在等待網路" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ 파일이 이미 있습니다. 바꾸려면 --force를 사용하세요." + "value": "正在等待网络" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@ 已存在。使用 --force 以替换它。" + "value": "네트워크 대기 중" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ 已存在。使用 --force 以取代它。" + "value": "ネットワークを待機中" } } } }, - "session.export.error.destinationIsLive": { + "machines.reconnecting.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ is this cmux's own session file. Choose another path." + "value": "Reconnecting to Cloud…" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%@ هو ملف الجلسة الخاص بهذا الـ cmux. اختر مسارًا آخر." + "value": "Verbindung zur Cloud wird wiederhergestellt…" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ ist die eigene Sitzungsdatei dieses cmux. Wählen Sie einen anderen Pfad." + "value": "Reconnexion au Cloud…" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ es el archivo de sesión de este cmux. Elige otra ruta." + "value": "جارٍ إعادة الاتصال بالسحابة…" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ est le fichier de session de ce cmux. Choisissez un autre chemin." + "value": "Reconectando con la nube…" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ はこの cmux 自身のセッションファイルです。別のパスを指定してください。" + "value": "正在重新連線至雲端…" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ 파일은 이 cmux의 세션 파일입니다. 다른 경로를 선택하세요." + "value": "正在重新连接云端…" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%@ 是此 cmux 自己的会话文件。请选择其他路径。" + "value": "클라우드에 다시 연결하는 중…" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%@ 是此 cmux 本身的工作階段檔案。請選擇其他路徑。" + "value": "クラウドに再接続中…" } } } }, - "session.export.error.noSnapshot": { + "devices.link.error.notDiscoverable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux has not saved a session yet. Try again in a few seconds." + "value": "This Mac isn’t discoverable. On that Mac, turn on “Make this Mac discoverable” in Settings › Devices." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم يحفظ cmux أي جلسة بعد. حاول مرة أخرى بعد بضع ثوانٍ." + "value": "جهاز Mac هذا غير قابل للاكتشاف. على ذلك الجهاز، فعّل «جعل جهاز Mac هذا قابلاً للاكتشاف» في الإعدادات › الأجهزة." } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux hat noch keine Sitzung gespeichert. Versuchen Sie es in ein paar Sekunden erneut." + "value": "Dieser Mac ist nicht auffindbar. Aktiviere auf diesem Mac unter „Einstellungen › Geräte“ die Option „Diesen Mac auffindbar machen“." } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux aún no ha guardado ninguna sesión. Inténtalo de nuevo en unos segundos." + "value": "Este Mac no es detectable. En ese Mac, activa «Hacer que este Mac sea detectable» en Ajustes › Dispositivos." } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n'a pas encore enregistré de session. Réessayez dans quelques secondes." + "value": "Ce Mac n’est pas détectable. Sur ce Mac, activez « Rendre ce Mac détectable » dans Réglages › Appareils." } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux はまだセッションを保存していません。数秒後にもう一度お試しください。" + "value": "このMacは検出可能になっていません。そのMacの「設定 › デバイス」で「このMacを検出可能にする」をオンにしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux가 아직 세션을 저장하지 않았습니다. 몇 초 후에 다시 시도하세요." + "value": "이 Mac을 검색할 수 없습니다. 해당 Mac의 설정 › 기기에서 “이 Mac을 검색할 수 있도록 설정”을 켜세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 尚未保存会话。请几秒后再试。" + "value": "这台 Mac 无法被发现。请在该 Mac 的“设置 › 设备”中开启“允许发现此 Mac”。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux 尚未儲存工作階段。請過幾秒再試一次。" + "value": "這部 Mac 無法被探索。請在該 Mac 的「設定 › 裝置」中開啟「允許探索此 Mac」。" } - } - } - }, - "session.export.error.writeFailed": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Could not write %@." + "value": "Ovaj Mac nije vidljiv. Na tom Macu uključite „Učini ovaj Mac vidljivim” u Postavke › Uređaji." } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "تعذّرت كتابة %@." + "value": "Denne Mac kan ikke findes. Slå “Gør denne Mac synlig” til på den Mac under Indstillinger › Enheder." } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "%@ konnte nicht geschrieben werden." + "value": "Questo Mac non è individuabile. Su quel Mac, attiva “Rendi individuabile questo Mac” in Impostazioni › Dispositivi." } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "No se pudo escribir %@." + "value": "Mac នេះមិនអាចរកឃើញបានទេ។ នៅលើ Mac នោះ សូមបើក “ធ្វើឲ្យ Mac នេះអាចរកឃើញ” ក្នុងការកំណត់ › ឧបករណ៍។" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Impossible d'écrire %@." + "value": "Denne Macen er ikke synlig. Slå på «Gjør denne Macen synlig» på den Macen under Innstillinger › Enheter." } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "%@ を書き込めませんでした。" + "value": "Ten Mac nie jest wykrywalny. Na tym Macu włącz „Uczyń ten Mac wykrywalnym” w Ustawienia › Urządzenia." } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%@ 파일을 쓸 수 없습니다." + "value": "Este Mac não está detectável. Nesse Mac, ative “Tornar este Mac detectável” em Ajustes › Dispositivos." } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "无法写入 %@。" + "value": "Этот Mac недоступен для обнаружения. На том Mac включите «Сделать этот Mac доступным для обнаружения» в разделе Настройки › Устройства." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "無法寫入 %@。" + "value": "Mac เครื่องนี้ไม่สามารถค้นพบได้ บน Mac เครื่องนั้น ให้เปิด “ทำให้ Mac เครื่องนี้ค้นพบได้” ในการตั้งค่า › อุปกรณ์" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu Mac keşfedilebilir değil. O Mac’te Ayarlar › Cihazlar bölümünden “Bu Mac’i keşfedilebilir yap” seçeneğini açın." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Цей Mac недоступний для виявлення. На тому Mac увімкніть «Зробити цей Mac доступним для виявлення» у розділі Налаштування › Пристрої." } } } }, - "session.import.error.fileNotFound": { + "settings.automation.pi": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No saved cmux session at %@." + "value": "Pi Integration" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد جلسة cmux محفوظة في %@." + "value": "تكامل Pi" } }, "de": { "stringUnit": { "state": "translated", - "value": "Unter %@ gibt es keine gespeicherte cmux-Sitzung." + "value": "Pi-Integration" } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay ninguna sesión de cmux guardada en %@." + "value": "Integración de Pi" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune session cmux enregistrée à l'emplacement %@." + "value": "Intégration de Pi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ に保存された cmux セッションはありません。" + "value": "Pi連携" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@ 위치에 저장된 cmux 세션이 없습니다." + "value": "Pi 연동" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ 没有已保存的 cmux 会话。" + "value": "Pi 集成" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ 沒有已儲存的 cmux 工作階段。" + "value": "Pi 整合" } - } - } - }, - "session.import.error.newerSchema": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "%1$@ was saved by a newer cmux (session format %2$@, this cmux reads %3$@). Update cmux to import it." + "value": "Pi integracija" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "حُفظ %1$@ بواسطة إصدار أحدث من cmux (تنسيق الجلسة %2$@، ويقرأ هذا الـ cmux التنسيق %3$@). حدّث cmux لاستيراده." + "value": "Pi-integration" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "%1$@ wurde von einem neueren cmux gespeichert (Sitzungsformat %2$@, dieses cmux liest %3$@). Aktualisieren Sie cmux, um die Datei zu importieren." + "value": "Integrazione di Pi" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "%1$@ se guardó con un cmux más reciente (formato de sesión %2$@; este cmux lee el %3$@). Actualiza cmux para importarlo." + "value": "ការរួមបញ្ចូល Pi" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "%1$@ a été enregistré par une version plus récente de cmux (format de session %2$@, ce cmux lit le format %3$@). Mettez cmux à jour pour l'importer." + "value": "Pi-integrasjon" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "%1$@ は新しい cmux で保存されています(セッション形式 %2$@、この cmux が読める形式は %3$@)。読み込むには cmux をアップデートしてください。" + "value": "Integracja Pi" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%1$@ 파일은 더 새로운 cmux에서 저장되었습니다(세션 형식 %2$@, 이 cmux는 %3$@ 형식을 읽음). 가져오려면 cmux를 업데이트하세요." + "value": "Integração do Pi" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "%1$@ 由较新版本的 cmux 保存(会话格式 %2$@,此 cmux 读取 %3$@)。请更新 cmux 后再导入。" + "value": "Интеграция Pi" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "%1$@ 是由較新版本的 cmux 儲存(工作階段格式 %2$@,此 cmux 讀取 %3$@)。請更新 cmux 後再匯入。" + "value": "การผสานรวม Pi" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Pi entegrasyonu" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Інтеграція Pi" } } } }, - "session.import.error.noWindows": { + "settings.automation.pi.note": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ has no windows to restore." + "value": "When enabled, cmux wraps the pi command and loads its bundled session extension without changing your Pi configuration. Disable if you prefer to manage Pi hooks yourself." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يحتوي %@ على نوافذ لاستعادتها." + "value": "عند التفعيل، يغلّف cmux أمر pi ويحمّل امتداد الجلسة المضمّن دون تغيير إعدادات Pi. عطّل هذا الخيار إذا كنت تفضّل إدارة خطافات Pi بنفسك." } }, "de": { "stringUnit": { "state": "translated", - "value": "%@ enthält keine Fenster zum Wiederherstellen." + "value": "Wenn aktiviert, umhüllt cmux den pi-Befehl und lädt seine gebündelte Sitzungserweiterung, ohne deine Pi-Konfiguration zu ändern. Deaktiviere dies, wenn du die Pi-Hooks selbst verwalten möchtest." } }, "es": { "stringUnit": { "state": "translated", - "value": "%@ no tiene ventanas que restaurar." + "value": "Cuando está activado, cmux envuelve el comando pi y carga su extensión de sesión integrada sin cambiar tu configuración de Pi. Desactívalo si prefieres gestionar tú mismo los hooks de Pi." } }, "fr": { "stringUnit": { "state": "translated", - "value": "%@ ne contient aucune fenêtre à restaurer." + "value": "Lorsque cette option est activée, cmux encapsule la commande pi et charge son extension de session intégrée sans modifier votre configuration Pi. Désactivez-la si vous préférez gérer les hooks Pi vous-même." } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ には復元できるウインドウがありません。" + "value": "有効にすると、cmuxはpiコマンドをラップし、Piの設定を変更せずにバンドルされたセッション拡張機能を読み込みます。Piのフックを自分で管理する場合は無効にしてください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@ 파일에 복원할 창이 없습니다." + "value": "활성화하면 cmux가 pi 명령을 래핑하고 Pi 설정을 변경하지 않고 번들 세션 확장을 로드합니다. Pi 훅을 직접 관리하려면 비활성화하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@ 没有可恢复的窗口。" + "value": "启用后,cmux 会包装 pi 命令并加载内置会话扩展,不会更改你的 Pi 配置。如果你希望自行管理 Pi 钩子,请禁用此选项。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@ 沒有可還原的視窗。" + "value": "啟用後,cmux 會包裝 pi 指令並載入內建工作階段擴充功能,不會變更你的 Pi 設定。若偏好自行管理 Pi 掛鉤,請停用此選項。" } - } - } - }, - "session.import.error.notASnapshot": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "%@ is not a cmux session snapshot." + "value": "Kada je omogućeno, cmux obavija naredbu pi i učitava ugrađeno proširenje sesije bez mijenjanja vaše Pi konfiguracije. Onemogućite ako želite sami upravljati Pi kukama." } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "%@ ليس لقطة جلسة cmux." + "value": "Når funktionen er aktiveret, indpakker cmux pi-kommandoen og indlæser den medfølgende sessionsudvidelse uden at ændre din Pi-konfiguration. Deaktiver den, hvis du selv vil administrere Pi-hooks." } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "%@ ist keine cmux-Sitzungsdatei." + "value": "Quando è abilitata, cmux avvolge il comando pi e carica l'estensione di sessione inclusa senza modificare la configurazione di Pi. Disabilitala se preferisci gestire autonomamente gli hook di Pi." } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "%@ no es una instantánea de sesión de cmux." + "value": "នៅពេលបើកដំណើរការ cmux នឹងរុំពាក្យបញ្ជា pi ហើយផ្ទុកផ្នែកបន្ថែមសម័យដែលភ្ជាប់មកជាមួយ ដោយមិនផ្លាស់ប្តូរការកំណត់ Pi របស់អ្នក។ បិទវា ប្រសិនបើអ្នកចង់គ្រប់គ្រង hooks របស់ Pi ដោយខ្លួនឯង។" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "%@ n'est pas un instantané de session cmux." + "value": "Når dette er aktivert, pakker cmux inn pi-kommandoen og laster den medfølgende øktutvidelsen uten å endre Pi-konfigurasjonen din. Deaktiver hvis du vil administrere Pi-hookene selv." } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "%@ は cmux のセッションスナップショットではありません。" + "value": "Po włączeniu cmux opakuje polecenie pi i załaduje dołączone rozszerzenie sesji bez zmieniania konfiguracji Pi. Wyłącz tę opcję, jeśli wolisz samodzielnie zarządzać hookami Pi." } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%@ 파일은 cmux 세션 스냅샷이 아닙니다." + "value": "Quando ativado, o cmux envolve o comando pi e carrega a extensão de sessão incluída sem alterar sua configuração do Pi. Desative se preferir gerenciar os hooks do Pi por conta própria." } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "%@ 不是 cmux 会话快照。" + "value": "При включении cmux оборачивает команду pi и загружает встроенное расширение сеанса, не изменяя конфигурацию Pi. Отключите этот параметр, если предпочитаете управлять хуками Pi самостоятельно." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "%@ 不是 cmux 工作階段快照。" + "value": "เมื่อเปิดใช้งาน cmux จะครอบคำสั่ง pi และโหลดส่วนขยายเซสชันที่มาพร้อมกับโปรแกรมโดยไม่เปลี่ยนการตั้งค่า Pi ของคุณ ปิดใช้งานหากต้องการจัดการ hooks ของ Pi เอง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Etkinleştirildiğinde cmux, Pi yapılandırmanızı değiştirmeden pi komutunu sarar ve birlikte gelen oturum uzantısını yükler. Pi kancalarını kendiniz yönetmeyi tercih ediyorsanız devre dışı bırakın." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Якщо ввімкнено, cmux обгортає команду pi й завантажує вбудоване розширення сеансу, не змінюючи конфігурацію Pi. Вимкніть цей параметр, якщо хочете самостійно керувати хуками Pi." } } } }, - "session.import.error.nothingRestored": { + "settings.automation.pi.subtitleOff": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Nothing in %@ could be reopened." + "value": "Pi runs without cmux integration." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذّر إعادة فتح أي شيء من %@." + "value": "يعمل Pi بدون تكامل cmux." } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus %@ konnte nichts wieder geöffnet werden." + "value": "Pi läuft ohne cmux-Integration." } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo volver a abrir nada de %@." + "value": "Pi se ejecuta sin integración con cmux." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucun élément de %@ n'a pu être rouvert." + "value": "Pi s’exécute sans intégration cmux." } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ から再度開けるものはありませんでした。" + "value": "Piはcmux連携なしで実行されます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%@ 파일에서 다시 열 수 있는 항목이 없습니다." + "value": "Pi가 cmux 연동 없이 실행됩니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法重新打开 %@ 中的任何内容。" + "value": "Pi 在没有 cmux 集成的情况下运行。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法重新開啟 %@ 中的任何內容。" + "value": "Pi 會在不使用 cmux 整合的情況下執行。" } - } - } - }, - "session.import.error.olderSchema": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "%1$@ uses an older session format (%2$@) that this cmux no longer reads (%3$@)." + "value": "Pi radi bez cmux integracije." } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "يستخدم %1$@ تنسيق جلسة أقدم (%2$@) لم يعد هذا الـ cmux يقرؤه (%3$@)." + "value": "Pi kører uden cmux-integration." } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "%1$@ verwendet ein älteres Sitzungsformat (%2$@), das dieses cmux nicht mehr liest (%3$@)." + "value": "Pi viene eseguito senza l'integrazione con cmux." } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "%1$@ usa un formato de sesión anterior (%2$@) que este cmux ya no lee (%3$@)." + "value": "Pi ដំណើរការដោយគ្មានការរួមបញ្ចូល cmux។" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "%1$@ utilise un ancien format de session (%2$@) que ce cmux ne lit plus (%3$@)." + "value": "Pi kjører uten cmux-integrasjon." } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "%1$@ はこの cmux が読み込まなくなった古いセッション形式(%2$@)を使用しています(%3$@)。" + "value": "Pi działa bez integracji z cmux." } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%1$@ 파일은 이 cmux가 더 이상 읽지 않는 이전 세션 형식(%2$@)을 사용합니다(%3$@)." + "value": "O Pi é executado sem a integração com o cmux." } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "%1$@ 使用较旧的会话格式(%2$@),此 cmux 已不再读取(%3$@)。" + "value": "Pi работает без интеграции с cmux." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "%1$@ 使用較舊的工作階段格式(%2$@),此 cmux 已不再讀取(%3$@)。" + "value": "Pi ทำงานโดยไม่มีการผสานรวมกับ cmux" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Pi, cmux entegrasyonu olmadan çalışır." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Pi працює без інтеграції з cmux." } } } }, - "session.import.error.unknownChannel": { + "settings.automation.pi.subtitleOn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Unknown cmux channel \"%@\". Use stable, nightly, rc, staging, debug:<tag>, or a path to a session file." + "value": "Sidebar shows Pi session status and notifications." } }, "ar": { "stringUnit": { "state": "translated", - "value": "قناة cmux غير معروفة \"%@\". استخدم stable أو nightly أو rc أو staging أو debug:<tag> أو مسار ملف جلسة." + "value": "يعرض الشريط الجانبي حالة جلسة Pi والإشعارات." } }, "de": { "stringUnit": { "state": "translated", - "value": "Unbekannter cmux-Kanal \"%@\". Verwenden Sie stable, nightly, rc, staging, debug:<tag> oder einen Pfad zu einer Sitzungsdatei." + "value": "Die Seitenleiste zeigt den Pi-Sitzungsstatus und Benachrichtigungen an." } }, "es": { "stringUnit": { "state": "translated", - "value": "Canal de cmux desconocido \"%@\". Usa stable, nightly, rc, staging, debug:<tag> o la ruta de un archivo de sesión." + "value": "La barra lateral muestra el estado de la sesión de Pi y las notificaciones." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Canal cmux inconnu « %@ ». Utilisez stable, nightly, rc, staging, debug:<tag> ou le chemin d'un fichier de session." + "value": "La barre latérale affiche le statut de la session Pi et les notifications." } }, "ja": { "stringUnit": { "state": "translated", - "value": "不明な cmux チャンネル「%@」です。stable、nightly、rc、staging、debug:<tag>、またはセッションファイルのパスを指定してください。" + "value": "サイドバーにPiセッションのステータスと通知が表示されます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알 수 없는 cmux 채널 \"%@\"입니다. stable, nightly, rc, staging, debug:<tag> 또는 세션 파일 경로를 사용하세요." + "value": "사이드바에 Pi 세션 상태와 알림이 표시됩니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "未知的 cmux 渠道“%@”。请使用 stable、nightly、rc、staging、debug:<tag> 或会话文件路径。" + "value": "侧边栏显示 Pi 会话状态和通知。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "未知的 cmux 通道「%@」。請使用 stable、nightly、rc、staging、debug:<tag> 或工作階段檔案路徑。" + "value": "側邊欄顯示 Pi 工作階段狀態和通知。" } - } - } - }, - "session.import.error.unreadable": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Could not read %@." + "value": "Bočna traka prikazuje status Pi sesije i obavijesti." } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "تعذّرت قراءة %@." + "value": "Sidepanelet viser Pi-sessionens status og notifikationer." } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "%@ konnte nicht gelesen werden." + "value": "La barra laterale mostra lo stato della sessione Pi e le notifiche." } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "No se pudo leer %@." + "value": "របារចំហៀងបង្ហាញស្ថានភាពសម័យ Pi និងការជូនដំណឹង។" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Impossible de lire %@." + "value": "Sidepanelet viser status og varsler for Pi-økten." } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "%@ を読み込めませんでした。" + "value": "Pasek boczny pokazuje stan sesji Pi i powiadomienia." } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "%@ 파일을 읽을 수 없습니다." + "value": "A barra lateral mostra o status da sessão do Pi e as notificações." } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "无法读取 %@。" + "value": "На боковой панели отображаются состояние сеанса Pi и уведомления." } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "無法讀取 %@。" + "value": "แถบด้านข้างจะแสดงสถานะเซสชัน Pi และการแจ้งเตือน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Kenar çubuğu, Pi oturumunun durumunu ve bildirimleri gösterir." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Бічна панель показує стан сеансу Pi та сповіщення." } } } }, - "session.import.error.liveSnapshot": { + "settings.search.alias.setting.automation.pi": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ is the session this cmux is saving right now. Run cmux restore-session without --from to reopen the previous launch." + "value": "automation.piIntegration pi hooks agent integration status notifications" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "%@ ist die Sitzung, die dieses cmux gerade speichert. Führen Sie cmux restore-session ohne --from aus, um den vorherigen Start wieder zu öffnen." + "value": "automation.piIntegration تكامل Pi خطافات وكيل حالة إشعارات" } }, - "fr": { + "bs": { "stringUnit": { "state": "translated", - "value": "%@ est la session que ce cmux enregistre actuellement. Exécutez cmux restore-session sans --from pour rouvrir le lancement précédent." + "value": "automation.piIntegration Pi kukice integracija agenta status obavijesti" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "%@ هي الجلسة التي يحفظها cmux هذا الآن. شغّل cmux restore-session دون --from لإعادة فتح التشغيل السابق." + "value": "automation.piIntegration Pi-hooks agentintegration status notifikationer" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "%@ es la sesión que este cmux está guardando ahora. Ejecuta cmux restore-session sin --from para volver a abrir el inicio anterior." + "value": "automation.piIntegration Pi Hooks Agent Integration Status Benachrichtigungen" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "%@ 是此 cmux 目前正在儲存的工作階段。執行不含 --from 的 cmux restore-session 以重新開啟上次啟動的內容。" + "value": "automation.piIntegration Pi hooks integración de agente estado notificaciones" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "%@ 是此 cmux 当前正在保存的会话。运行不带 --from 的 cmux restore-session 以重新打开上次启动的内容。" + "value": "automation.piIntegration Pi hooks intégration agent état notifications" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "%@ 파일은 이 cmux가 지금 저장 중인 세션입니다. 이전 실행을 다시 열려면 --from 없이 cmux restore-session을 실행하세요." + "value": "automation.piIntegration hook Pi integrazione agente stato notifiche" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ はこの cmux が現在保存しているセッションです。前回の起動を再度開くには、--from を付けずに cmux restore-session を実行してください。" + "value": "automation.piIntegration Pi フック エージェント連携 ステータス 通知" } - } - } - }, - "cli.session.help": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "km": { "stringUnit": { "state": "translated", - "value": "Usage: cmux session restore [--list] [--session <id>]...\n\nReopen Claude sessions that were running when cmux last quit unexpectedly.\ncmux finds them in the agent journal, skips any that are running or already\nopen, and resumes each in its own workspace through the launcher that started\nit.\n\nWithout --session, restore acts only after an unexpected quit.\n\nOptions:\n --list Show the sessions without restoring them.\n --session <id> Restore only this session (repeatable)." + "value": "automation.piIntegration hooks Pi ការរួមបញ្ចូលភ្នាក់ងារ ស្ថានភាព ការជូនដំណឹង" } }, - "de": { + "ko": { "stringUnit": { "state": "translated", - "value": "Verwendung: cmux session restore [--list] [--session <id>]...\n\nÖffnet Claude-Sitzungen erneut, die liefen, als cmux zuletzt unerwartet beendet wurde.\ncmux findet sie im Agent-Journal, überspringt laufende oder bereits geöffnete\nund setzt jede in einem eigenen Workspace\nüber den Launcher fort, der sie gestartet hat.\n\nOhne --session stellt restore nur nach einem unerwarteten Beenden wieder her.\n\nOptionen:\n --list Sitzungen anzeigen, ohne sie wiederherzustellen.\n --session <id> Nur diese Sitzung wiederherstellen (wiederholbar)." + "value": "automation.piIntegration Pi 훅 에이전트 연동 상태 알림" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Utilisation : cmux session restore [--list] [--session <id>]...\n\nRouvre les sessions Claude en cours lorsque cmux s’est fermé de façon inattendue.\ncmux les trouve dans le journal des agents, ignore celles qui tournent ou sont déjà\nouvertes, et reprend chacune dans son propre espace de travail via le lanceur qui l’a\ndémarrée.\n\nSans --session, restore n’agit qu’après une fermeture inattendue.\n\nOptions :\n --list Afficher les sessions sans les restaurer.\n --session <id> Restaurer uniquement cette session (répétable)." + "value": "automation.piIntegration Pi-hook agentintegrasjon status varsler" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "الاستخدام: cmux session restore [--list] [--session <id>]...\n\nيعيد فتح جلسات Claude التي كانت قيد التشغيل عندما أُغلق cmux بشكل غير متوقع آخر مرة.\nيعثر cmux عليها في سجل الوكيل، ويتخطى ما يعمل منها أو المفتوح بالفعل،\nويستأنف كل جلسة في مساحة عمل خاصة بها\nعبر المشغّل الذي بدأها.\n\nبدون --session، لا تعمل الاستعادة إلا بعد إغلاق غير متوقع.\n\nالخيارات:\n --list عرض الجلسات دون استعادتها.\n --session <id> استعادة هذه الجلسة فقط (قابل للتكرار)." + "value": "automation.piIntegration hooki Pi integracja agenta stan powiadomienia" } }, - "es": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Uso: cmux session restore [--list] [--session <id>]...\n\nVuelve a abrir las sesiones de Claude que estaban en ejecución cuando cmux se cerró inesperadamente.\ncmux las encuentra en el diario de agentes, omite las que están en ejecución o ya\nabiertas, y reanuda cada una en su propio espacio de trabajo mediante el lanzador que\nla inició.\n\nSin --session, restore solo actúa tras un cierre inesperado.\n\nOpciones:\n --list Mostrar las sesiones sin restaurarlas.\n --session <id> Restaurar solo esta sesión (repetible)." + "value": "automation.piIntegration hooks do Pi integração do agente status notificações" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "用法: cmux session restore [--list] [--session <id>]...\n\n重新開啟 cmux 上次意外結束時仍在執行的 Claude 工作階段。\ncmux 會從代理日誌中找出它們,略過仍在執行或已開啟的工作階段,\n並透過原本啟動它的啟動器\n在各自的工作區中繼續。\n\n未指定 --session 時,restore 只會在意外結束後執行。\n\n選項:\n --list 只列出工作階段,不還原。\n --session <id> 只還原此工作階段(可重複)。" + "value": "automation.piIntegration хуки Pi интеграция агента состояние уведомления" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "用法: cmux session restore [--list] [--session <id>]...\n\n重新打开 cmux 上次意外退出时仍在运行的 Claude 会话。\ncmux 会从代理日志中找到它们,跳过仍在运行或已打开的会话,\n并通过最初启动它的启动器\n在各自的工作区中继续。\n\n未指定 --session 时,restore 只会在意外退出后执行。\n\n选项:\n --list 只列出会话,不恢复。\n --session <id> 只恢复此会话(可重复)。" + "value": "automation.piIntegration hooks ของ Pi การผสานรวมเอเจนต์ สถานะ การแจ้งเตือน" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "사용법: cmux session restore [--list] [--session <id>]...\n\ncmux가 마지막으로 예기치 않게 종료될 때 실행 중이던 Claude 세션을 다시 엽니다.\ncmux는 에이전트 저널에서 세션을 찾고, 실행 중이거나 이미 열려 있는 세션은 건너뛰며,\n각 세션을 시작한 런처를 통해\n자체 워크스페이스에서 이어갑니다.\n\n--session이 없으면 restore는 예기치 않은 종료 후에만 동작합니다.\n\n옵션:\n --list 복원하지 않고 세션만 표시합니다.\n --session <id> 이 세션만 복원합니다(반복 가능)." + "value": "automation.piIntegration Pi kancaları aracı entegrasyonu durum bildirimler" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "使用法: cmux session restore [--list] [--session <id>]...\n\ncmux が前回予期せず終了したときに実行中だった Claude セッションを再び開きます。\ncmux はエージェントジャーナルからセッションを見つけ、実行中または既に開いている\nものはスキップし、それぞれを起動したランチャー経由で\n専用のワークスペースで再開します。\n\n--session を指定しない場合、restore は予期しない終了の後にのみ動作します。\n\nオプション:\n --list 復元せずにセッションを表示します。\n --session <id> このセッションのみ復元します(複数指定可)。" + "value": "automation.piIntegration хуки Pi інтеграція агента стан сповіщення" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "automation.piIntegration Pi 钩子 代理集成 状态 通知" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "automation.piIntegration Pi 掛鉤 代理程式整合 狀態 通知" } } } }, - "cli.session.error.expectedRestore": { + "cli.hooks.setup.wrapperNote": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session: expected 'restore' (see cmux help session)" + "value": " (Claude Code and Pi hooks are injected automatically via their cmux wrappers)" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "session: 'restore' erwartet (siehe cmux help session)" + "value": " (يتم حقن خطافات Claude Code وPi تلقائيًا عبر أغلفة cmux)" } }, - "fr": { + "bs": { "stringUnit": { "state": "translated", - "value": "session : « restore » attendu (voir cmux help session)" + "value": " (Claude Code i Pi kukice se automatski ubacuju putem cmux omotača)" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "session: كان المتوقع 'restore' (راجع cmux help session)" + "value": " (Claude Code- og Pi-hooks indsættes automatisk via deres cmux-wrappere)" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "session: se esperaba 'restore' (consulta cmux help session)" + "value": " (Claude-Code- und Pi-Hooks werden automatisch über ihre cmux-Wrapper eingefügt)" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "session:應為 'restore'(請參閱 cmux help session)" + "value": " (Los hooks de Claude Code y Pi se inyectan automáticamente mediante sus wrappers de cmux)" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "session:应为 'restore'(请参阅 cmux help session)" + "value": " (Les hooks de Claude Code et Pi sont injectés automatiquement par leurs wrappers cmux)" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "session: 'restore'가 필요합니다(cmux help session 참조)" + "value": " (Gli hook di Claude Code e Pi vengono iniettati automaticamente tramite i rispettivi wrapper cmux)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "session: 'restore' が必要です(cmux help session を参照)" + "value": " (Claude Code と Pi のフックは cmux ラッパーによって自動的に注入されます)" } - } - } - }, - "cli.session.error.sessionRequiresId": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "km": { "stringUnit": { "state": "translated", - "value": "session restore: --session requires an id" + "value": " (hooks របស់ Claude Code និង Pi ត្រូវបានបញ្ចូលដោយស្វ័យប្រវត្តិតាមរយៈ wrapper របស់ cmux)" } }, - "de": { + "ko": { "stringUnit": { "state": "translated", - "value": "session restore: --session erfordert eine ID" + "value": " (Claude Code 및 Pi 훅은 cmux 래퍼를 통해 자동으로 주입됩니다)" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "session restore : --session nécessite un identifiant" + "value": " (Claude Code- og Pi-hooker settes inn automatisk via cmux-innpakningene)" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "session restore: يتطلب --session معرّفًا" + "value": " (Hooki Claude Code i Pi są automatycznie wstrzykiwane przez ich opakowania cmux)" } }, - "es": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "session restore: --session requiere un id" + "value": " (Os hooks do Claude Code e do Pi são injetados automaticamente pelos respectivos wrappers do cmux)" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "session restore:--session 需要一個 ID" + "value": " (Хуки Claude Code и Pi автоматически внедряются их оболочками cmux)" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "session restore:--session 需要一个 ID" + "value": " (hooks ของ Claude Code และ Pi จะถูกฉีดโดยอัตโนมัติผ่าน wrapper ของ cmux)" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "session restore: --session에는 ID가 필요합니다" + "value": " (Claude Code ve Pi kancaları, cmux sarmalayıcıları aracılığıyla otomatik olarak eklenir)" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "session restore: --session には ID が必要です" + "value": " (Хуки Claude Code і Pi автоматично додаються їхніми обгортками cmux)" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": " (Claude Code 和 Pi 的钩子会通过各自的 cmux 包装器自动注入)" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": " (Claude Code 和 Pi 的掛鉤會透過各自的 cmux 包裝器自動注入)" } } } }, - "cli.session.error.unknownArgument": { + "cli.auth.status.teamNotLoaded": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "session restore: unknown argument '%@'" + "value": " team: not loaded" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": " チーム: 未読み込み" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": " 团队: 未加载" } }, "de": { "stringUnit": { "state": "translated", - "value": "session restore: unbekanntes Argument '%@'" + "value": " Team: nicht geladen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "session restore : argument inconnu « %@ »" + "value": " équipe: non chargée" } }, "ar": { "stringUnit": { "state": "translated", - "value": "session restore: وسيط غير معروف '%@'" + "value": " الفريق: لم يتم تحميله" } }, "es": { "stringUnit": { "state": "translated", - "value": "session restore: argumento desconocido '%@'" + "value": " equipo: no cargado" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "session restore:未知的參數 '%@'" + "value": " 團隊: 未載入" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "session restore:未知参数 '%@'" + "value": " 팀: 로드되지 않음" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "session restore: 알 수 없는 인수 '%@'" + "value": " tim: nije učitan" } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "session restore: 不明な引数 '%@'" + "value": " team: ikke indlæst" } - } - } - }, - "cli.session.list.empty": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "No agent sessions to restore." + "value": " team: non caricato" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Keine Agent-Sitzungen zum Wiederherstellen." + "value": " ក្រុម៖ មិនទាន់បានផ្ទុក" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Aucune session d’agent à restaurer." + "value": " team: ikke lastet" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "لا توجد جلسات وكيل لاستعادتها." + "value": " zespół: nie załadowano" } }, - "es": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "No hay sesiones de agente para restaurar." + "value": " equipe: não carregada" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "沒有可還原的代理工作階段。" + "value": " команда: не загружена" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "没有可恢复的代理会话。" + "value": " ทีม: ยังไม่ได้โหลด" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "복원할 에이전트 세션이 없습니다." + "value": " ekip: yüklenmedi" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "復元するエージェントセッションはありません。" + "value": " команда: не завантажена" } } } }, - "cli.session.restore.cleanQuit": { + "cli.auth.status.teamNotLoadedRetrying": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No agent sessions restored: cmux last quit normally. To restore one anyway, pass --session <id> from --list." + "value": " team: not loaded (retrying)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": " チーム: 未読み込み(再試行中)" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": " 团队: 未加载(正在重试)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Keine Agent-Sitzungen wiederhergestellt: cmux wurde zuletzt normal beendet. Um trotzdem eine wiederherzustellen, übergib --session <id> aus --list." + "value": " Team: nicht geladen (wird erneut versucht)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aucune session d’agent restaurée : cmux s’est fermé normalement la dernière fois. Pour en restaurer une quand même, passez --session <id> depuis --list." + "value": " équipe: non chargée (nouvel essai)" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم تتم استعادة أي جلسات وكيل: أُغلق cmux بشكل طبيعي آخر مرة. لاستعادة جلسة على أي حال، مرّر --session <id> من --list." + "value": " الفريق: لم يتم تحميله (جارٍ إعادة المحاولة)" } }, "es": { "stringUnit": { "state": "translated", - "value": "No se restauró ninguna sesión de agente: cmux se cerró normalmente la última vez. Para restaurar una de todos modos, pasa --session <id> de --list." + "value": " equipo: no cargado (reintentando)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "未還原任何代理工作階段:cmux 上次是正常結束。若仍要還原,請傳入 --list 中的 --session <id>。" + "value": " 團隊: 未載入(重試中)" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "未恢复任何代理会话:cmux 上次是正常退出。若仍要恢复,请传入 --list 中的 --session <id>。" + "value": " 팀: 로드되지 않음 (재시도 중)" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "복원된 에이전트 세션이 없습니다. cmux가 마지막에 정상적으로 종료되었습니다. 그래도 복원하려면 --list에서 확인한 --session <id>를 전달하세요." + "value": " tim: nije učitan (ponovni pokušaj)" } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "エージェントセッションは復元されませんでした。cmux は前回正常に終了しています。それでも復元する場合は、--list の --session <id> を指定してください。" + "value": " team: ikke indlæst (prøver igen)" } - } - } - }, - "cli.session.restore.empty": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "it": { "stringUnit": { "state": "translated", - "value": "No agent sessions restored." + "value": " team: non caricato (nuovo tentativo)" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Keine Agent-Sitzungen wiederhergestellt." + "value": " ក្រុម៖ មិនទាន់បានផ្ទុក (កំពុងព្យាយាមម្ដងទៀត)" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Aucune session d’agent restaurée." + "value": " team: ikke lastet (prøver igjen)" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "لم تتم استعادة أي جلسات وكيل." + "value": " zespół: nie załadowano (ponawianie próby)" } }, - "es": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "No se restauró ninguna sesión de agente." + "value": " equipe: não carregada (tentando novamente)" } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "未還原任何代理工作階段。" + "value": " команда: не загружена (повторная попытка)" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "未恢复任何代理会话。" + "value": " ทีม: ยังไม่ได้โหลด (กำลังลองอีกครั้ง)" } }, - "ko": { + "tr": { "stringUnit": { "state": "translated", - "value": "복원된 에이전트 세션이 없습니다." + "value": " ekip: yüklenmedi (yeniden deneniyor)" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "エージェントセッションは復元されませんでした。" + "value": " команда: не завантажена (повторна спроба)" } } } }, - "cli.session.restore.done": { + "mobile.pairing.error.teamUnavailable": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Could not load your cmux team. Check your internet connection, then try again." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux チームを読み込めませんでした。インターネット接続を確認してから、もう一度お試しください。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "无法加载你的 cmux 团队。请检查网络连接,然后重试。" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Dein cmux-Team konnte nicht geladen werden. Prüfe deine Internetverbindung und versuche es erneut." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Impossible de charger votre équipe cmux. Vérifiez votre connexion Internet, puis réessayez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تعذّر تحميل فريق cmux الخاص بك. تحقّق من اتصالك بالإنترنت، ثم حاول مرة أخرى." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "No se pudo cargar tu equipo de cmux. Comprueba tu conexión a internet e inténtalo de nuevo." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "無法載入你的 cmux 團隊。請檢查網路連線,然後再試一次。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "cmux 팀을 불러올 수 없습니다. 인터넷 연결을 확인한 후 다시 시도하세요." + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Nije moguće učitati vaš cmux tim. Provjerite internetsku vezu i pokušajte ponovo." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Din cmux-team kunne ikke indlæses. Kontrollér din internetforbindelse, og prøv igen." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Impossibile caricare il tuo team cmux. Controlla la connessione Internet e riprova." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនអាចផ្ទុកក្រុម cmux របស់អ្នកបានទេ។ សូមពិនិត្យការតភ្ជាប់អ៊ីនធឺណិត ហើយព្យាយាមម្ដងទៀត។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Kunne ikke laste inn cmux-teamet ditt. Kontroller internettilkoblingen, og prøv igjen." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Nie udało się załadować Twojego zespołu cmux. Sprawdź połączenie z internetem i spróbuj ponownie." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Não foi possível carregar sua equipe cmux. Verifique sua conexão com a internet e tente novamente." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить вашу команду cmux. Проверьте подключение к интернету и попробуйте ещё раз." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ไม่สามารถโหลดทีม cmux ของคุณได้ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux ekibiniz yüklenemedi. İnternet bağlantınızı kontrol edip tekrar deneyin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Не вдалося завантажити вашу команду cmux. Перевірте підключення до інтернету й спробуйте ще раз." + } + } + } +}, + "command.newPaneAutoLayout.title": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Agent sessions restored: %lld" + "value": "لوحة جديدة (تخطيط تلقائي)" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Wiederhergestellte Agent-Sitzungen: %lld" + "value": "Novi panel (automatski raspored)" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "Sessions d’agent restaurées : %lld" + "value": "Nyt panel (automatisk layout)" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جلسات الوكيل المستعادة: %lld" + "value": "Neuer Bereich (automatisches Layout)" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Sesiones de agente restauradas: %lld" + "value": "New Pane (Auto Layout)" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "已還原的代理工作階段:%lld" + "value": "Nuevo panel (diseño automático)" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "已恢复的代理会话:%lld" + "value": "Nouveau panneau (disposition automatique)" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "복원된 에이전트 세션: %lld" + "value": "Nuovo pannello (layout automatico)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "復元したエージェントセッション: %lld" + "value": "新しいペイン(自動レイアウト)" } - } - } - }, - "agentRecovery.alert.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Restore agent sessions?" + "value": "새 패널 (자동 레이아웃)" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Agent-Sitzungen wiederherstellen?" + "value": "Nytt panel (automatisk oppsett)" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Restaurer les sessions d’agent ?" + "value": "Nowy panel (układ automatyczny)" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "هل تريد استعادة جلسات الوكيل؟" + "value": "Novo Painel (Layout Automático)" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "¿Restaurar las sesiones de agente?" + "value": "Новая панель (автоматическая раскладка)" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "要還原代理工作階段嗎?" + "value": "บานหน้าต่างใหม่ (จัดวางอัตโนมัติ)" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "要恢复代理会话吗?" + "value": "Yeni Bölme (Otomatik Düzen)" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "에이전트 세션을 복원할까요?" + "value": "Нова панель (автоматичне розташування)" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "エージェントセッションを復元しますか?" + "value": "新建窗格(自动布局)" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "新增窗格(自動佈局)" } } } }, - "agentRecovery.alert.message": { + "shortcut.newPaneAutoLayout.label": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux quit unexpectedly while agent sessions were running. Sessions to restore: %lld. Each one reopens in its own workspace and resumes where it left off." + "value": "لوحة جديدة (تخطيط تلقائي)" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "cmux wurde unerwartet beendet, während Agent-Sitzungen liefen. Wiederherzustellende Sitzungen: %lld. Jede wird in einem eigenen Workspace geöffnet und dort fortgesetzt, wo sie aufgehört hat." + "value": "Novi panel (automatski raspored)" } }, - "fr": { + "da": { "stringUnit": { "state": "translated", - "value": "cmux s’est fermé de façon inattendue pendant que des sessions d’agent étaient en cours. Sessions à restaurer : %lld. Chacune rouvre dans son propre espace de travail et reprend là où elle s’était arrêtée." + "value": "Nyt panel (automatisk layout)" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "أُغلق cmux بشكل غير متوقع أثناء تشغيل جلسات الوكيل. الجلسات المطلوب استعادتها: %lld. تُفتح كل جلسة في مساحة عمل خاصة بها وتُستأنف من حيث توقفت." + "value": "Neuer Bereich (automatisches Layout)" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux se cerró inesperadamente mientras había sesiones de agente en ejecución. Sesiones por restaurar: %lld. Cada una se abre en su propio espacio de trabajo y continúa donde se quedó." + "value": "New Pane (Auto Layout)" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux 在代理工作階段執行時意外結束。要還原的工作階段:%lld。每個工作階段都會在各自的工作區重新開啟,並從中斷處繼續。" + "value": "Nuevo panel (diseño automático)" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 在代理会话运行时意外退出。要恢复的会话:%lld。每个会话都会在各自的工作区重新打开,并从中断处继续。" + "value": "Nouveau panneau (disposition automatique)" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "에이전트 세션이 실행 중일 때 cmux가 예기치 않게 종료되었습니다. 복원할 세션: %lld. 각 세션은 자체 워크스페이스에서 다시 열리고 중단된 곳에서 이어집니다." + "value": "Nuovo pannello (layout automatico)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェントセッションの実行中に cmux が予期せず終了しました。復元するセッション: %lld。各セッションは専用のワークスペースで再び開き、中断したところから再開します。" + "value": "新しいペイン(自動レイアウト)" } - } - } - }, - "agentRecovery.alert.restore": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ko": { "stringUnit": { "state": "translated", - "value": "Restore Agent Sessions" + "value": "새 패널 (자동 레이아웃)" } }, - "de": { + "nb": { "stringUnit": { "state": "translated", - "value": "Agent-Sitzungen wiederherstellen" + "value": "Nytt panel (automatisk oppsett)" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Restaurer les sessions d’agent" + "value": "Nowy panel (układ automatyczny)" } }, - "ar": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "استعادة جلسات الوكيل" + "value": "Novo Painel (Layout Automático)" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Restaurar sesiones de agente" + "value": "Новая панель (автоматическая раскладка)" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "還原代理工作階段" + "value": "บานหน้าต่างใหม่ (จัดวางอัตโนมัติ)" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "恢复代理会话" + "value": "Yeni Bölme (Otomatik Düzen)" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "에이전트 세션 복원" + "value": "Нова панель (автоматичне розташування)" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "エージェントセッションを復元" + "value": "新建窗格(自动布局)" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "新增窗格(自動佈局)" } } } }, - "agentRecovery.alert.notNow": { + "socket.terminal.notRunning.awaitingRestore": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Not Now" + "value": "cmux is still restoring the terminal after it reopened and is checking which agent session to resume. Retry in a few seconds." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Nicht jetzt" + "value": "لا يزال cmux يستعيد الطرفية بعد إعادة فتحه ويتحقق من جلسة الوكيل التي يجب استئنافها. أعد المحاولة بعد بضع ثوانٍ." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Pas maintenant" + "value": "cmux stellt das Terminal nach dem erneuten Öffnen noch wieder her und prüft, welche Agent-Sitzung fortgesetzt werden soll. Versuche es in ein paar Sekunden erneut." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "ليس الآن" + "value": "cmux todavía está restaurando la terminal después de volver a abrirse y comprueba qué sesión de agente reanudar. Vuelve a intentarlo en unos segundos." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ahora no" + "value": "cmux restaure encore le terminal après sa réouverture et vérifie quelle session d’agent reprendre. Réessayez dans quelques secondes." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "稍後" + "value": "cmux は再起動後にターミナルを復元中で、再開するエージェントセッションを確認しています。数秒後に再試行してください。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "以后再说" + "value": "cmux가 다시 열린 후 터미널을 아직 복원하는 중이며 어떤 에이전트 세션을 재개할지 확인하고 있습니다. 몇 초 후에 다시 시도하세요." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "나중에" + "value": "cmux 重新打开后仍在恢复此终端,并确认要恢复哪个代理会话。请几秒后重试。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "後で" + "value": "cmux 重新開啟後仍在還原此終端機,並確認要恢復哪個代理工作階段。請幾秒後再試。" + } + }, + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux još vraća terminal nakon ponovnog otvaranja i provjerava koju sesiju agenta treba nastaviti. Pokušajte ponovo za nekoliko sekundi." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux gendanner stadig terminalen efter genåbning og tjekker, hvilken agentsession der skal genoptages. Prøv igen om et par sekunder." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux sta ancora ripristinando il terminale dopo la riapertura e verifica quale sessione dell’agente riprendere. Riprova tra qualche secondo." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux នៅតែកំពុងស្ដារទែមីណាល់ឡើងវិញ បន្ទាប់ពីបើកម្ដងទៀត ហើយកំពុងពិនិត្យមើលថាត្រូវបន្តវគ្គភ្នាក់ងារមួយណា។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux gjenoppretter fortsatt terminalen etter at den ble åpnet på nytt, og sjekker hvilken agentøkt som skal gjenopptas. Prøv igjen om noen sekunder." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux wciąż przywraca terminal po ponownym otwarciu i sprawdza, którą sesję agenta wznowić. Spróbuj ponownie za kilka sekund." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O cmux ainda está restaurando o terminal após ser reaberto e verificando qual sessão do agente retomar. Tente novamente em alguns segundos." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux ещё восстанавливает терминал после повторного открытия и проверяет, какой сеанс агента возобновить. Повторите попытку через несколько секунд." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux ยังคงกู้คืนเทอร์มินัลหลังจากเปิดใหม่ และกำลังตรวจสอบว่าจะทำเซสชันเอเจนต์ใดต่อ ลองอีกครั้งในอีกไม่กี่วินาที" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux yeniden açıldıktan sonra terminali hâlâ geri yüklüyor ve hangi ajan oturumunun sürdürüleceğini denetliyor. Birkaç saniye sonra yeniden deneyin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "cmux ще відновлює термінал після повторного відкриття та перевіряє, який сеанс агента відновити. Спробуйте ще раз за кілька секунд." } } } }, - "settings.notifications.soundWhenFocused.subtitle": { + "socket.terminal.notRunning.closing": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Play the notification sound even when the pane that notified is already focused. When off, a focused pane shows its ring without a sound." + "value": "The terminal is closing and cannot be read." } }, "ar": { "stringUnit": { "state": "translated", - "value": "شغّل صوت الإشعار حتى عندما تكون اللوحة التي أرسلت الإشعار في موضع التركيز بالفعل. عند إيقافه، تعرض اللوحة المُركَّز عليها حلقتها دون صوت." + "value": "الطرفية قيد الإغلاق ولا يمكن قراءتها." } }, "de": { "stringUnit": { "state": "translated", - "value": "Den Benachrichtigungston auch abspielen, wenn der benachrichtigende Bereich bereits fokussiert ist. Wenn aus, zeigt ein fokussierter Bereich seinen Ring ohne Ton." + "value": "Das Terminal wird geschlossen und kann nicht gelesen werden." } }, "es": { "stringUnit": { "state": "translated", - "value": "Reproduce el sonido de notificación incluso cuando el panel que notificó ya tiene el foco. Si está desactivado, un panel con foco muestra su anillo sin sonido." + "value": "La terminal se está cerrando y no se puede leer." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jouer le son de notification même lorsque le panneau à l’origine de la notification a déjà le focus. Désactivé, un panneau actif affiche son anneau sans son." + "value": "Le terminal est en cours de fermeture et ne peut pas être lu." } }, "ja": { "stringUnit": { "state": "translated", - "value": "通知を送ったペインがすでにフォーカスされている場合でも通知音を鳴らします。オフの場合、フォーカス中のペインは音を鳴らさずにリングを表示します。" + "value": "ターミナルは閉じられているため読み取れません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "알림을 보낸 패널이 이미 포커스된 상태여도 알림음을 재생합니다. 끄면 포커스된 패널은 소리 없이 링만 표시합니다." + "value": "터미널이 닫히는 중이라 읽을 수 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "即使发出通知的窗格已处于焦点状态,也播放通知声音。关闭时,处于焦点的窗格会显示光环但不发出声音。" + "value": "此终端正在关闭,无法读取。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "即使發出通知的窗格已在焦點中,也播放通知聲音。關閉時,焦點中的窗格會顯示光環但不發出聲音。" + "value": "此終端機正在關閉,無法讀取。" + } + }, + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal se zatvara i ne može se pročitati." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen lukkes og kan ikke læses." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale si sta chiudendo e non può essere letto." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់កំពុងបិទ ហើយមិនអាចអានបានទេ។" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen lukkes og kan ikke leses." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jest zamykany i nie można go odczytać." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal está sendo fechado e não pode ser lido." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал закрывается, и его нельзя прочитать." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลกำลังปิดและไม่สามารถอ่านได้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal kapanıyor ve okunamıyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал закривається, і його не можна прочитати." } } } }, - "settings.notifications.soundWhenFocused.title": { + "socket.terminal.notRunning.hibernated": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sound for Focused Pane" + "value": "The terminal is hibernated: cmux suspended its idle agent to save memory. Wake it by showing it (this brings its window to the front), then retry: %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "صوت للوحة المُركَّز عليها" + "value": "الطرفية في وضع السبات: أوقف cmux وكيلها الخامل مؤقتًا لتوفير الذاكرة. أيقظها بعرضها (يؤدي ذلك إلى إحضار نافذتها إلى المقدمة)، ثم أعد المحاولة: %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ton für fokussierten Bereich" + "value": "Das Terminal ruht: cmux hat seinen inaktiven Agenten angehalten, um Speicher zu sparen. Wecke es, indem du es anzeigst (dadurch kommt sein Fenster in den Vordergrund), und versuche es dann erneut: %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sonido para el panel con foco" + "value": "La terminal está hibernada: cmux suspendió su agente inactivo para ahorrar memoria. Despiértala mostrándola (esto trae su ventana al frente) y vuelve a intentarlo: %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Son pour le panneau actif" + "value": "Le terminal est en veille : cmux a suspendu son agent inactif pour économiser de la mémoire. Réveillez-le en l’affichant (sa fenêtre passe au premier plan), puis réessayez : %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フォーカス中のペインの通知音" + "value": "ターミナルは休止中です。cmux がメモリ節約のためアイドル状態のエージェントを停止しました。表示すると再開します(ウィンドウが前面に出ます)。その後、再試行してください: %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포커스된 패널 소리" + "value": "터미널이 최대 절전 상태입니다. cmux가 메모리를 절약하려고 유휴 에이전트를 일시 중단했습니다. 터미널을 표시해 깨운 후(창이 앞으로 옵니다) 다시 시도하세요: %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "焦点窗格的声音" + "value": "此终端已休眠:cmux 暂停了其空闲的代理以节省内存。显示它即可唤醒(这会将其窗口带到最前面),然后重试:%@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "焦點窗格的聲音" + "value": "此終端機已休眠:cmux 暫停了其閒置的代理以節省記憶體。顯示它即可喚醒(這會將其視窗帶到最前面),然後再試一次:%@" } - } - } - }, - "agent.claude.stopFailure.body.generic": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Claude Code stopped on an API error" + }, + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Probudite ga tako što ćete ga prikazati (njegov prozor prelazi u prvi plan), pa pokušajte ponovo: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Claude Code は API エラーで停止しました" + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Væk den ved at vise den (dens vindue kommer forrest), og prøv igen: %@" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "Claude Code 因 API 错误而停止" + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Riattivalo mostrandolo (la sua finestra passa in primo piano), quindi riprova: %@" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Claude Code wurde wegen eines API-Fehlers gestoppt" + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ ដាស់វាដោយបង្ហាញវា (បង្អួចរបស់វានឹងមកខាងមុខ) រួចព្យាយាមម្ដងទៀត៖ %@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Claude Code s'est arrêté sur une erreur d'API" + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vekk den ved å vise den (vinduet kommer i forgrunnen), og prøv igjen: %@" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "توقف Claude Code بسبب خطأ في واجهة API" + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wybudź go, wyświetlając go (jego okno przejdzie na pierwszy plan), a potem spróbuj ponownie: %@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Claude Code se detuvo por un error de la API" + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Desperte-o exibindo-o (a janela vem para a frente) e tente novamente: %@" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "Claude Code 因 API 錯誤而停止" + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Разбудите его, показав терминал (его окно выйдет на передний план), и повторите попытку: %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Claude Code가 API 오류로 중지되었습니다" + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ ปลุกโดยแสดงเทอร์มินัล (หน้าต่างจะมาอยู่ด้านหน้า) แล้วลองอีกครั้ง: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Onu göstererek uyandırın (penceresi öne gelir), ardından yeniden deneyin: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Розбудіть його, показавши термінал (його вікно перейде на передній план), і спробуйте ще раз: %@" } } } }, - "agent.claude.stopFailure.status.apiError": { + "socket.terminal.notRunning.hibernatedNoCommand": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "API error" + "value": "The terminal is hibernated: cmux suspended its idle agent to save memory. Show the terminal in cmux to wake it, then retry." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "API エラー" + "value": "الطرفية في وضع السبات: أوقف cmux وكيلها الخامل مؤقتًا لتوفير الذاكرة. اعرض الطرفية في cmux لإيقاظها، ثم أعد المحاولة." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "API 错误" + "value": "Das Terminal ruht: cmux hat seinen inaktiven Agenten angehalten, um Speicher zu sparen. Zeige das Terminal in cmux an, um es zu wecken, und versuche es dann erneut." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "API-Fehler" + "value": "La terminal está hibernada: cmux suspendió su agente inactivo para ahorrar memoria. Muestra la terminal en cmux para despertarla y vuelve a intentarlo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Erreur d'API" + "value": "Le terminal est en veille : cmux a suspendu son agent inactif pour économiser de la mémoire. Affichez le terminal dans cmux pour le réveiller, puis réessayez." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "خطأ في واجهة API" + "value": "ターミナルは休止中です。cmux がメモリ節約のためアイドル状態のエージェントを停止しました。cmux でターミナルを表示して再開してから、再試行してください。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Error de la API" + "value": "터미널이 최대 절전 상태입니다. cmux가 메모리를 절약하려고 유휴 에이전트를 일시 중단했습니다. cmux에서 터미널을 표시해 깨운 후 다시 시도하세요." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "API 錯誤" + "value": "此终端已休眠:cmux 暂停了其空闲的代理以节省内存。请在 cmux 中显示此终端以唤醒它,然后重试。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "API 오류" + "value": "此終端機已休眠:cmux 暫停了其閒置的代理以節省記憶體。請在 cmux 中顯示此終端機以喚醒它,然後再試一次。" + } + }, + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal je u hibernaciji: cmux je pauzirao njegovog neaktivnog agenta radi uštede memorije. Prikažite terminal u cmuxu da ga probudite, pa pokušajte ponovo." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har sat dens inaktive agent på pause for at spare hukommelse. Vis terminalen i cmux for at vække den, og prøv igen." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale è ibernato: cmux ha sospeso il suo agente inattivo per risparmiare memoria. Mostra il terminale in cmux per riattivarlo, quindi riprova." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់កំពុងសម្រាក៖ cmux បានផ្អាកភ្នាក់ងារដែលទំនេររបស់វា ដើម្បីសន្សំអង្គចងចាំ។ បង្ហាញទែមីណាល់នៅក្នុង cmux ដើម្បីដាស់វា រួចព្យាយាមម្ដងទៀត។" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er i dvale: cmux har satt den inaktive agenten på pause for å spare minne. Vis terminalen i cmux for å vekke den, og prøv igjen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jest uśpiony: cmux wstrzymał jego bezczynnego agenta, aby oszczędzić pamięć. Wyświetl terminal w cmux, aby go wybudzić, a potem spróbuj ponownie." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal está hibernado: o cmux suspendeu o agente ocioso para economizar memória. Mostre o terminal no cmux para despertá-lo e tente novamente." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал в спящем режиме: cmux приостановил неактивного агента, чтобы сэкономить память. Покажите терминал в cmux, чтобы разбудить его, и повторите попытку." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลอยู่ในโหมดพัก: cmux หยุดเอเจนต์ที่ไม่ได้ใช้งานชั่วคราวเพื่อประหยัดหน่วยความจำ แสดงเทอร์มินัลใน cmux เพื่อปลุก แล้วลองอีกครั้ง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal hazırda bekliyor: cmux bellek tasarrufu için boştaki ajanını askıya aldı. Uyandırmak için terminali cmux'ta gösterin, ardından yeniden deneyin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал у режимі сну: cmux призупинив неактивного агента, щоб заощадити пам’ять. Покажіть термінал у cmux, щоб розбудити його, і спробуйте ще раз." } } } }, - "agent.claude.stopFailure.status.authentication": { + "socket.terminal.notRunning.starting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Auth error" + "value": "The terminal has not started yet. Retry in a few seconds." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "認証エラー" + "value": "لم تبدأ الطرفية بعد. أعد المحاولة بعد بضع ثوانٍ." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "认证错误" + "value": "Das Terminal wurde noch nicht gestartet. Versuche es in ein paar Sekunden erneut." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Authentifizierungsfehler" + "value": "La terminal aún no se ha iniciado. Vuelve a intentarlo en unos segundos." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Erreur d'authentification" + "value": "Le terminal n’a pas encore démarré. Réessayez dans quelques secondes." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "خطأ في المصادقة" + "value": "ターミナルはまだ起動していません。数秒後に再試行してください。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Error de autenticación" + "value": "터미널이 아직 시작되지 않았습니다. 몇 초 후에 다시 시도하세요." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "驗證錯誤" + "value": "此终端尚未启动。请几秒后重试。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "인증 오류" + "value": "此終端機尚未啟動。請幾秒後再試。" + } + }, + "bs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal se još nije pokrenuo. Pokušajte ponovo za nekoliko sekundi." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen er ikke startet endnu. Prøv igen om et par sekunder." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il terminale non è ancora stato avviato. Riprova tra qualche secondo." + } + }, + "km" : { + "stringUnit" : { + "state" : "translated", + "value" : "ទែមីណាល់មិនទាន់បានចាប់ផ្តើមនៅឡើយទេ។ សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលពីរបីវិនាទី។" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminalen har ikke startet ennå. Prøv igjen om noen sekunder." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal jeszcze się nie uruchomił. Spróbuj ponownie za kilka sekund." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O terminal ainda não foi iniciado. Tente novamente em alguns segundos." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Терминал ещё не запущен. Повторите попытку через несколько секунд." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เทอร์มินัลยังไม่ได้เริ่มทำงาน ลองอีกครั้งในอีกไม่กี่วินาที" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminal henüz başlamadı. Birkaç saniye sonra yeniden deneyin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Термінал ще не запущено. Спробуйте ще раз за кілька секунд." } } } }, - "agent.claude.stopFailure.status.billing": { + "cli.restoreSession.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Billing error" + "value": "Usage: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nReopen the previous saved cmux session.\n\nIf the app is already running, this restores the last saved session into the current app.\nIf the app is not running, this launches cmux and lets startup restore reopen the saved session.\n\nEach cmux install (stable, nightly, rc, staging, tagged debug builds) saves its own session.\n--from <channel> Reopen another install's saved session in this running cmux, for example\n after trying nightly and switching back to stable. The session opens as\n additional windows; the other install's saved file is only read.\n--from <path> Reopen a session file written by --export.\n--export <path> Write this cmux's saved session to a file. Pass --force to replace an\n existing file.\n\n--from and --export require cmux to be running." } }, - "ja": { + "de": { "stringUnit": { "state": "translated", - "value": "請求エラー" + "value": "Verwendung: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nDie zuletzt gespeicherte cmux-Sitzung erneut öffnen.\n\nLäuft die App bereits, wird die zuletzt gespeicherte Sitzung in der aktuellen App wiederhergestellt.\nLäuft die App nicht, wird cmux gestartet und die gespeicherte Sitzung beim Start wiederhergestellt.\n\nJede cmux-Installation (stable, nightly, rc, staging, getaggte Debug-Builds) speichert ihre eigene Sitzung.\n--from <channel> Die gespeicherte Sitzung einer anderen Installation in diesem laufenden cmux öffnen,\n z. B. nachdem Sie nightly ausprobiert haben und zu stable zurückkehren. Die Sitzung\n öffnet sich in zusätzlichen Fenstern; die Datei der anderen Installation wird nur gelesen.\n--from <path> Eine mit --export geschriebene Sitzungsdatei öffnen.\n--export <path> Die gespeicherte Sitzung dieses cmux in eine Datei schreiben. Mit --force wird eine\n vorhandene Datei ersetzt.\n\n--from und --export setzen ein laufendes cmux voraus." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "账单错误" + "value": "Utilisation : cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nRouvrir la dernière session cmux enregistrée.\n\nSi l'app est déjà ouverte, la dernière session enregistrée est restaurée dans l'app actuelle.\nSi l'app n'est pas ouverte, cmux est lancé et la restauration au démarrage rouvre la session enregistrée.\n\nChaque installation de cmux (stable, nightly, rc, staging, builds debug avec tag) enregistre sa propre session.\n--from <channel> Rouvrir la session enregistrée d'une autre installation dans ce cmux en cours, par exemple\n après avoir essayé nightly puis être revenu à stable. La session s'ouvre dans des fenêtres\n supplémentaires ; le fichier de l'autre installation est seulement lu.\n--from <path> Rouvrir un fichier de session écrit par --export.\n--export <path> Écrire la session enregistrée de ce cmux dans un fichier. Ajoutez --force pour remplacer\n un fichier existant.\n\n--from et --export nécessitent que cmux soit ouvert." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Abrechnungsfehler" + "value": "Uso: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nVuelve a abrir la última sesión guardada de cmux.\n\nSi la app ya está abierta, restaura la última sesión guardada en la app actual.\nSi la app no está abierta, inicia cmux y deja que la restauración de inicio vuelva a abrir la sesión guardada.\n\nCada instalación de cmux (stable, nightly, rc, staging, builds de depuración con etiqueta) guarda su propia sesión.\n--from <channel> Abre en este cmux la sesión guardada de otra instalación, por ejemplo después de\n probar nightly y volver a stable. La sesión se abre en ventanas adicionales; el archivo\n de la otra instalación solo se lee.\n--from <path> Abre un archivo de sesión escrito con --export.\n--export <path> Escribe en un archivo la sesión guardada de este cmux. Usa --force para reemplazar un\n archivo existente.\n\n--from y --export requieren que cmux esté abierto." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Erreur de facturation" + "value": "使い方: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n前回保存した cmux セッションを再度開きます。\n\nアプリがすでに起動している場合は、最後に保存したセッションを現在のアプリに復元します。\nアプリが起動していない場合は、cmux を起動し、起動時の復元で保存済みセッションを開きます。\n\ncmux の各インストール(stable、nightly、rc、staging、タグ付き debug ビルド)はそれぞれ独自のセッションを保存します。\n--from <channel> 別のインストールで保存したセッションを、起動中のこの cmux で開きます。たとえば nightly を\n 試したあと stable に戻る場合に使います。セッションは追加のウインドウとして開き、別の\n インストールのファイルは読み取るだけです。\n--from <path> --export で書き出したセッションファイルを開きます。\n--export <path> この cmux の保存済みセッションをファイルに書き出します。既存のファイルを置き換えるには\n --force を指定します。\n\n--from と --export を使うには cmux が起動している必要があります。" } }, "ar": { "stringUnit": { "state": "translated", - "value": "خطأ في الفوترة" + "value": "الاستخدام: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\nأعد فتح آخر جلسة cmux محفوظة.\n\nإذا كان التطبيق يعمل بالفعل، فستُستعاد آخر جلسة محفوظة في التطبيق الحالي.\nإذا لم يكن التطبيق يعمل، فسيُشغَّل cmux وتعيد استعادة بدء التشغيل فتح الجلسة المحفوظة.\n\nيحفظ كل تثبيت من cmux (stable وnightly وrc وstaging وإصدارات debug الموسومة) جلسته الخاصة.\n--from <channel> افتح الجلسة المحفوظة لتثبيت آخر في cmux الذي يعمل الآن، مثلًا\n بعد تجربة nightly والعودة إلى stable. تُفتح الجلسة في\n نوافذ إضافية، ويُقرأ ملف التثبيت الآخر فقط.\n--from <path> افتح ملف جلسة كتبه الأمر --export.\n--export <path> اكتب الجلسة المحفوظة لهذا cmux في ملف. استخدم --force لاستبدال\n ملف موجود.\n\nيتطلب --from و--export أن يكون cmux قيد التشغيل." } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Error de facturación" + "value": "用法: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n重新開啟上次儲存的 cmux 工作階段。\n\n如果 App 已在執行,會將上次儲存的工作階段還原到目前的 App 中。\n如果 App 未執行,會啟動 cmux,並由啟動還原重新開啟已儲存的工作階段。\n\n每個 cmux 安裝(stable、nightly、rc、staging、帶標籤的 debug 建置)都會儲存自己的工作階段。\n--from <channel> 在執行中的 cmux 開啟另一個安裝儲存的工作階段,例如\n 試用 nightly 後切回 stable。工作階段會以\n 額外視窗開啟;另一個安裝的檔案只會被讀取。\n--from <path> 開啟由 --export 寫出的工作階段檔案。\n--export <path> 將此 cmux 儲存的工作階段寫入檔案。使用 --force 可取代\n 既有檔案。\n\n--from 和 --export 需要 cmux 正在執行。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "帳單錯誤" + "value": "用法: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n重新打开上次保存的 cmux 会话。\n\n如果应用已在运行,会将上次保存的会话恢复到当前应用中。\n如果应用未运行,会启动 cmux,并由启动恢复重新打开保存的会话。\n\n每个 cmux 安装(stable、nightly、rc、staging、带标签的 debug 构建)都会保存自己的会话。\n--from <channel> 在正在运行的 cmux 中打开另一个安装保存的会话,例如\n 试用 nightly 后切回 stable。会话会以\n 额外窗口打开;另一个安装的会话文件只会被读取。\n--from <path> 打开由 --export 写出的会话文件。\n--export <path> 将此 cmux 保存的会话写入文件。使用 --force 可替换\n 已有文件。\n\n--from 和 --export 需要 cmux 正在运行。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "결제 오류" + "value": "사용법: cmux restore-session\n cmux restore-session --from <stable|nightly|rc|staging|debug:<tag>|path>\n cmux restore-session --export <path> [--force]\n\n마지막으로 저장된 cmux 세션을 다시 엽니다.\n\n앱이 이미 실행 중이면 마지막으로 저장된 세션을 현재 앱에 복원합니다.\n앱이 실행 중이 아니면 cmux를 실행하고 시작 복원이 저장된 세션을 다시 열도록 합니다.\n\n각 cmux 설치(stable, nightly, rc, staging, 태그가 지정된 debug 빌드)는 자체 세션을 저장합니다.\n--from <channel> 다른 설치에 저장된 세션을 실행 중인 이 cmux에서 엽니다. 예를 들어\n nightly를 사용해 본 뒤 stable로 돌아올 때 사용합니다. 세션은\n 추가 창으로 열리며, 다른 설치의 파일은 읽기만 합니다.\n--from <path> --export로 작성한 세션 파일을 엽니다.\n--export <path> 이 cmux에 저장된 세션을 파일로 씁니다. 기존 파일을 바꾸려면\n --force를 사용하세요.\n\n--from과 --export를 사용하려면 cmux가 실행 중이어야 합니다." } } } }, - "agent.claude.stopFailure.status.connectionDropped": { + "session.export.error.destinationExists": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connection dropped" + "value": "%@ already exists. Pass --force to replace it." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "接続が切断されました" + "value": "%@ موجود بالفعل. استخدم --force لاستبداله." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "连接已断开" + "value": "%@ ist bereits vorhanden. Verwenden Sie --force, um die Datei zu ersetzen." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Verbindung abgebrochen" + "value": "%@ ya existe. Usa --force para reemplazarlo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion interrompue" + "value": "%@ existe déjà. Ajoutez --force pour le remplacer." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "انقطع الاتصال" + "value": "%@ はすでに存在します。置き換えるには --force を指定してください。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Conexión perdida" + "value": "%@ 파일이 이미 있습니다. 바꾸려면 --force를 사용하세요." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "連線已中斷" + "value": "%@ 已存在。使用 --force 以替换它。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "연결 끊김" + "value": "%@ 已存在。使用 --force 以取代它。" } } } }, - "agent.claude.stopFailure.status.outputLimit": { + "session.export.error.destinationIsLive": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Output limit" + "value": "%@ is this cmux's own session file. Choose another path." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "出力上限" + "value": "%@ هو ملف الجلسة الخاص بهذا الـ cmux. اختر مسارًا آخر." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "输出上限" + "value": "%@ ist die eigene Sitzungsdatei dieses cmux. Wählen Sie einen anderen Pfad." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Ausgabelimit" + "value": "%@ es el archivo de sesión de este cmux. Elige otra ruta." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite de sortie" + "value": "%@ est le fichier de session de ce cmux. Choisissez un autre chemin." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "حد المخرجات" + "value": "%@ はこの cmux 自身のセッションファイルです。別のパスを指定してください。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de salida" + "value": "%@ 파일은 이 cmux의 세션 파일입니다. 다른 경로를 선택하세요." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "輸出上限" + "value": "%@ 是此 cmux 自己的会话文件。请选择其他路径。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "출력 한도" + "value": "%@ 是此 cmux 本身的工作階段檔案。請選擇其他路徑。" } } } }, - "agent.claude.stopFailure.status.overloaded": { + "session.export.error.noSnapshot": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "API overloaded" + "value": "cmux has not saved a session yet. Try again in a few seconds." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "API 過負荷" + "value": "لم يحفظ cmux أي جلسة بعد. حاول مرة أخرى بعد بضع ثوانٍ." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "API 过载" + "value": "cmux hat noch keine Sitzung gespeichert. Versuchen Sie es in ein paar Sekunden erneut." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "API überlastet" + "value": "cmux aún no ha guardado ninguna sesión. Inténtalo de nuevo en unos segundos." } }, "fr": { "stringUnit": { "state": "translated", - "value": "API surchargée" + "value": "cmux n'a pas encore enregistré de session. Réessayez dans quelques secondes." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "واجهة API محمّلة فوق طاقتها" + "value": "cmux はまだセッションを保存していません。数秒後にもう一度お試しください。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "API sobrecargada" + "value": "cmux가 아직 세션을 저장하지 않았습니다. 몇 초 후에 다시 시도하세요." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "API 過載" + "value": "cmux 尚未保存会话。请几秒后再试。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "API 과부하" + "value": "cmux 尚未儲存工作階段。請過幾秒再試一次。" } } } }, - "agent.claude.stopFailure.status.rateLimited": { + "session.export.error.writeFailed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rate limited" + "value": "Could not write %@." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "レート制限中" + "value": "تعذّرت كتابة %@." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "已限速" + "value": "%@ konnte nicht geschrieben werden." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Ratenbegrenzt" + "value": "No se pudo escribir %@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite de requêtes atteinte" + "value": "Impossible d'écrire %@." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم تقييد المعدل" + "value": "%@ を書き込めませんでした。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de frecuencia alcanzado" + "value": "%@ 파일을 쓸 수 없습니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已限速" + "value": "无法写入 %@。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "속도 제한됨" + "value": "無法寫入 %@。" } } } }, - "agent.claude.stopFailure.status.usageLimit": { + "session.import.error.fileNotFound": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage limit" + "value": "No saved cmux session at %@." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "使用量の上限" + "value": "لا توجد جلسة cmux محفوظة في %@." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "用量上限" + "value": "Unter %@ gibt es keine gespeicherte cmux-Sitzung." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Nutzungslimit" + "value": "No hay ninguna sesión de cmux guardada en %@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite d'utilisation" + "value": "Aucune session cmux enregistrée à l'emplacement %@." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "حد الاستخدام" + "value": "%@ に保存された cmux セッションはありません。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de uso" + "value": "%@ 위치에 저장된 cmux 세션이 없습니다." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用量上限" + "value": "%@ 没有已保存的 cmux 会话。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "사용량 한도" + "value": "%@ 沒有已儲存的 cmux 工作階段。" } } } }, - "agent.claude.stopFailure.status.usageLimitResets": { + "session.import.error.newerSchema": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Usage limit, resets %@" + "value": "%1$@ was saved by a newer cmux (session format %2$@, this cmux reads %3$@). Update cmux to import it." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "使用量の上限、%@ にリセット" + "value": "حُفظ %1$@ بواسطة إصدار أحدث من cmux (تنسيق الجلسة %2$@، ويقرأ هذا الـ cmux التنسيق %3$@). حدّث cmux لاستيراده." } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "用量上限,%@ 重置" + "value": "%1$@ wurde von einem neueren cmux gespeichert (Sitzungsformat %2$@, dieses cmux liest %3$@). Aktualisieren Sie cmux, um die Datei zu importieren." } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Nutzungslimit, Reset %@" + "value": "%1$@ se guardó con un cmux más reciente (formato de sesión %2$@; este cmux lee el %3$@). Actualiza cmux para importarlo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Limite d'utilisation, réinitialisation %@" + "value": "%1$@ a été enregistré par une version plus récente de cmux (format de session %2$@, ce cmux lit le format %3$@). Mettez cmux à jour pour l'importer." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "حد الاستخدام، يُعاد التعيين %@" + "value": "%1$@ は新しい cmux で保存されています(セッション形式 %2$@、この cmux が読める形式は %3$@)。読み込むには cmux をアップデートしてください。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Límite de uso, se restablece %@" + "value": "%1$@ 파일은 더 새로운 cmux에서 저장되었습니다(세션 형식 %2$@, 이 cmux는 %3$@ 형식을 읽음). 가져오려면 cmux를 업데이트하세요." } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用量上限,%@ 重設" + "value": "%1$@ 由较新版本的 cmux 保存(会话格式 %2$@,此 cmux 读取 %3$@)。请更新 cmux 后再导入。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "사용량 한도, %@에 초기화" + "value": "%1$@ 是由較新版本的 cmux 儲存(工作階段格式 %2$@,此 cmux 讀取 %3$@)。請更新 cmux 後再匯入。" } } } }, - "settings.app.reorderOnNotification.mode.agentActivity": { + "session.import.error.noWindows": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "نشاط الوكيل" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Aktivnost agenata" + "value": "%@ has no windows to restore." } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "لا يحتوي %@ على نوافذ لاستعادتها." } }, "de": { "stringUnit": { "state": "translated", - "value": "Agentenaktivität" + "value": "%@ enthält keine Fenster zum Wiederherstellen." } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Agent Activity" + "value": "%@ no tiene ventanas que restaurar." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Actividad de agentes" + "value": "%@ ne contient aucune fenêtre à restaurer." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Activité des agents" + "value": "%@ には復元できるウインドウがありません。" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Attività degli agenti" + "value": "%@ 파일에 복원할 창이 없습니다." } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "エージェントのアクティビティ" + "value": "%@ 没有可恢复的窗口。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "에이전트 활동" + "value": "%@ 沒有可還原的視窗。" } - }, - "nb": { + } + } + }, + "session.import.error.notASnapshot": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Agentaktivitet" + "value": "%@ is not a cmux session snapshot." } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Aktywność agentów" + "value": "%@ ليس لقطة جلسة cmux." } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Atividade dos agentes" + "value": "%@ ist keine cmux-Sitzungsdatei." } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Активность агентов" + "value": "%@ no es una instantánea de sesión de cmux." } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "กิจกรรมของเอเจนต์" + "value": "%@ n'est pas un instantané de session cmux." } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ajan etkinliği" + "value": "%@ は cmux のセッションスナップショットではありません。" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Активність агентів" + "value": "%@ 파일은 cmux 세션 스냅샷이 아닙니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "代理活动" + "value": "%@ 不是 cmux 会话快照。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "代理活動" + "value": "%@ 不是 cmux 工作階段快照。" } } } }, - "settings.app.reorderOnNotification.mode.notifications": { + "session.import.error.nothingRestored": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "الإشعارات" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Obavještenja" + "value": "Nothing in %@ could be reopened." } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "Notifikationer" + "value": "تعذّر إعادة فتح أي شيء من %@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Benachrichtigungen" + "value": "Aus %@ konnte nichts wieder geöffnet werden." } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Notifications" + "value": "No se pudo volver a abrir nada de %@." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Notificaciones" + "value": "Aucun élément de %@ n'a pu être rouvert." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Sur notification" + "value": "%@ から再度開けるものはありませんでした。" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Notifiche" + "value": "%@ 파일에서 다시 열 수 있는 항목이 없습니다." } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "无法重新打开 %@ 中的任何内容。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "알림" + "value": "無法重新開啟 %@ 中的任何內容。" } - }, - "nb": { + } + } + }, + "session.import.error.olderSchema": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Varsler" + "value": "%1$@ uses an older session format (%2$@) that this cmux no longer reads (%3$@)." } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Powiadomienia" + "value": "يستخدم %1$@ تنسيق جلسة أقدم (%2$@) لم يعد هذا الـ cmux يقرؤه (%3$@)." } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Notificações" + "value": "%1$@ verwendet ein älteres Sitzungsformat (%2$@), das dieses cmux nicht mehr liest (%3$@)." } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Уведомления" + "value": "%1$@ usa un formato de sesión anterior (%2$@) que este cmux ya no lee (%3$@)." } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "การแจ้งเตือน" + "value": "%1$@ utilise un ancien format de session (%2$@) que ce cmux ne lit plus (%3$@)." } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Bildirimler" + "value": "%1$@ はこの cmux が読み込まなくなった古いセッション形式(%2$@)を使用しています(%3$@)。" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Сповіщення" + "value": "%1$@ 파일은 이 cmux가 더 이상 읽지 않는 이전 세션 형식(%2$@)을 사용합니다(%3$@)." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "%1$@ 使用较旧的会话格式(%2$@),此 cmux 已不再读取(%3$@)。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "通知" + "value": "%1$@ 使用較舊的工作階段格式(%2$@),此 cmux 已不再讀取(%3$@)。" } } } }, - "settings.app.reorderOnNotification.mode.off": { + "session.import.error.unknownChannel": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "إيقاف" - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Isključeno" + "value": "Unknown cmux channel \"%@\". Use stable, nightly, rc, staging, debug:<tag>, or a path to a session file." } }, - "da": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fra" + "value": "قناة cmux غير معروفة \"%@\". استخدم stable أو nightly أو rc أو staging أو debug:<tag> أو مسار ملف جلسة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus" + "value": "Unbekannter cmux-Kanal \"%@\". Verwenden Sie stable, nightly, rc, staging, debug:<tag> oder einen Pfad zu einer Sitzungsdatei." } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Off" + "value": "Canal de cmux desconocido \"%@\". Usa stable, nightly, rc, staging, debug:<tag> o la ruta de un archivo de sesión." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Desactivado" + "value": "Canal cmux inconnu « %@ ». Utilisez stable, nightly, rc, staging, debug:<tag> ou le chemin d'un fichier de session." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "不明な cmux チャンネル「%@」です。stable、nightly、rc、staging、debug:<tag>、またはセッションファイルのパスを指定してください。" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Disattivato" + "value": "알 수 없는 cmux 채널 \"%@\"입니다. stable, nightly, rc, staging, debug:<tag> 또는 세션 파일 경로를 사용하세요." } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "未知的 cmux 渠道“%@”。请使用 stable、nightly、rc、staging、debug:<tag> 或会话文件路径。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "끔" + "value": "未知的 cmux 通道「%@」。請使用 stable、nightly、rc、staging、debug:<tag> 或工作階段檔案路徑。" } - }, - "nb": { + } + } + }, + "session.import.error.unreadable": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Av" + "value": "Could not read %@." } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Wyłączone" + "value": "تعذّرت قراءة %@." } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Desativado" + "value": "%@ konnte nicht gelesen werden." } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Выкл." + "value": "No se pudo leer %@." } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "ปิด" + "value": "Impossible de lire %@." } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Kapalı" + "value": "%@ を読み込めませんでした。" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Вимкнено" + "value": "%@ 파일을 읽을 수 없습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "关闭" + "value": "无法读取 %@。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "關閉" + "value": "無法讀取 %@。" } } } }, - "settings.app.reorderOnNotification.modeSubtitle": { + "session.import.error.liveSnapshot": { "extractionState": "manual", "localizations": { - "ar": { - "stringUnit": { - "state": "translated", - "value": "ينقل مساحات العمل إلى الأعلى عندما تتلقى إشعارًا. مع نشاط الوكيل، ينقلها أيضًا عندما ترسل مطالبة أو ينهي وكيل دورة أو يحتاج إلى إدخال أو يفشل، لكن ليس أبدًا أثناء وجود المؤشر فوق الشريط الجانبي. الإيقاف يحافظ على ثبات مواضع الاختصارات." - } - }, - "bs": { + "en": { "stringUnit": { "state": "translated", - "value": "Pomjera radne prostore na vrh kada prime obavještenje. Aktivnost agenata ih pomjera i kada pošaljete upit ili agent završi potez, treba unos ili ne uspije, ali nikad dok je pokazivač iznad bočne trake. Isključeno čuva stabilne pozicije prečica." + "value": "%@ is the session this cmux is saving right now. Run cmux restore-session without --from to reopen the previous launch." } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Flytter arbejdsområder til toppen, når de modtager en notifikation. Agentaktivitet flytter dem også, når du sender en prompt eller en agent afslutter en tur, har brug for input eller fejler, men aldrig mens markøren er over sidepanelet. Fra holder genvejspositionerne stabile." + "value": "%@ ist die Sitzung, die dieses cmux gerade speichert. Führen Sie cmux restore-session ohne --from aus, um den vorherigen Start wieder zu öffnen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Verschiebt Workspaces nach oben, wenn sie eine Benachrichtigung erhalten. Mit Agentenaktivität auch dann, wenn Sie einen Prompt senden oder ein Agent einen Durchlauf beendet, eine Eingabe braucht oder fehlschlägt, aber nie, während der Zeiger über der Seitenleiste ist. Aus hält die Positionen der Tastenkürzel stabil." + "value": "%@ est la session que ce cmux enregistre actuellement. Exécutez cmux restore-session sans --from pour rouvrir le lancement précédent." } }, - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Move workspaces to the top when they receive a notification. Agent Activity also moves them when you send a prompt or an agent finishes a turn, needs input, or fails, but never while you point at the sidebar. Off keeps shortcut positions stable." + "value": "%@ هي الجلسة التي يحفظها cmux هذا الآن. شغّل cmux restore-session دون --from لإعادة فتح التشغيل السابق." } }, "es": { "stringUnit": { "state": "translated", - "value": "Mueve los espacios de trabajo arriba cuando reciben una notificación. Con Actividad de agentes, también cuando envías un prompt o un agente termina un turno, necesita una respuesta o falla, pero nunca mientras el puntero está sobre la barra lateral. Desactivado mantiene estables las posiciones de los atajos." + "value": "%@ es la sesión que este cmux está guardando ahora. Ejecuta cmux restore-session sin --from para volver a abrir el inicio anterior." } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Place les espaces de travail en haut lorsqu’ils reçoivent une notification. Avec Activité des agents, aussi lorsque vous envoyez un prompt ou qu’un agent termine un tour, attend une saisie ou échoue, mais jamais pendant que le pointeur survole la barre latérale. Désactivé garde les positions des raccourcis stables." + "value": "%@ 是此 cmux 目前正在儲存的工作階段。執行不含 --from 的 cmux restore-session 以重新開啟上次啟動的內容。" } }, - "it": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Sposta gli spazi di lavoro in cima quando ricevono una notifica. Attività degli agenti li sposta anche quando invii un prompt o un agente termina un turno, attende un input o fallisce, ma mai mentre il puntatore è sulla barra laterale. Disattivato mantiene stabili le posizioni delle scorciatoie." + "value": "%@ 是此 cmux 当前正在保存的会话。运行不带 --from 的 cmux restore-session 以重新打开上次启动的内容。" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "通知を受け取ったワークスペースを先頭に移動します。「エージェントのアクティビティ」では、プロンプトを送信したときや、エージェントがターンを終えたとき、入力を待っているとき、失敗したときにも移動しますが、ポインタがサイドバー上にある間は移動しません。「オフ」ではショートカットの位置が変わりません。" + "value": "%@ 파일은 이 cmux가 지금 저장 중인 세션입니다. 이전 실행을 다시 열려면 --from 없이 cmux restore-session을 실행하세요." } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "알림을 받으면 워크스페이스를 맨 위로 옮깁니다. 에이전트 활동을 선택하면 프롬프트를 보내거나 에이전트가 턴을 마치거나 입력이 필요하거나 실패할 때도 옮기지만, 포인터가 사이드바 위에 있을 때는 옮기지 않습니다. 끔은 단축키 위치를 고정합니다." + "value": "%@ はこの cmux が現在保存しているセッションです。前回の起動を再度開くには、--from を付けずに cmux restore-session を実行してください。" } - }, - "nb": { + } + } + }, + "shortcut.sizeTerminalToMyWindow.label": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Flytter arbeidsområder til toppen når de mottar et varsel. Agentaktivitet flytter dem også når du sender en ledetekst eller en agent fullfører en runde, trenger input eller feiler, men aldri mens pekeren er over sidefeltet. Av holder snarveisposisjonene stabile." + "value": "Size Terminal to My Window" } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Przenosi obszary robocze na górę, gdy otrzymają powiadomienie. Aktywność agentów przenosi je także, gdy wyślesz prompt lub agent zakończy turę, potrzebuje danych lub zakończy się błędem, ale nigdy, gdy wskaźnik jest nad paskiem bocznym. Wyłączone zachowuje stałe pozycje skrótów." + "value": "ضبط حجم الطرفية على نافذتي" } }, - "pt-BR": { + "de": { "stringUnit": { "state": "translated", - "value": "Move os espaços de trabalho para o topo quando recebem uma notificação. Atividade dos agentes também os move quando você envia um prompt ou um agente termina um turno, precisa de uma resposta ou falha, mas nunca enquanto o ponteiro está sobre a barra lateral. Desativado mantém as posições dos atalhos estáveis." + "value": "Terminal an mein Fenster anpassen" } }, - "ru": { + "es": { "stringUnit": { "state": "translated", - "value": "Перемещает рабочие области наверх, когда они получают уведомление. «Активность агентов» также перемещает их, когда вы отправляете запрос или агент завершает ход, ждёт ввода или завершается с ошибкой, но никогда, пока указатель находится над боковой панелью. «Выкл.» сохраняет позиции сочетаний клавиш." + "value": "Ajustar la terminal a mi ventana" } }, - "th": { + "fr": { "stringUnit": { "state": "translated", - "value": "ย้ายเวิร์กสเปซขึ้นด้านบนเมื่อได้รับการแจ้งเตือน กิจกรรมของเอเจนต์จะย้ายเมื่อคุณส่งพรอมต์หรือเอเจนต์จบรอบ ต้องการข้อมูล หรือล้มเหลวด้วย แต่จะไม่ย้ายขณะที่ตัวชี้อยู่เหนือแถบด้านข้าง ปิดจะคงตำแหน่งของทางลัดไว้" + "value": "Adapter le terminal à ma fenêtre" } }, - "tr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Bildirim aldıklarında çalışma alanlarını en üste taşır. Ajan etkinliği, bir istem gönderdiğinizde, bir ajan turunu bitirdiğinde, girdi beklediğinde veya başarısız olduğunda da taşır, ancak işaretçi kenar çubuğunun üzerindeyken asla taşımaz. Kapalı, kısayol konumlarını sabit tutar." + "value": "ターミナルを自分のウィンドウに合わせる" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Переміщує робочі області вгору, коли вони отримують сповіщення. «Активність агентів» також переміщує їх, коли ви надсилаєте запит або агент завершує хід, чекає на введення або завершується з помилкою, але ніколи, поки вказівник над бічною панеллю. «Вимкнено» зберігає позиції скорочень." + "value": "터미널을 내 창 크기에 맞추기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作区收到通知时移到顶部。选择“代理活动”时,你发送提示词或代理完成一轮、需要输入或失败时也会移动,但指针停在侧边栏上时绝不移动。关闭可让快捷键位置保持不变。" + "value": "让终端适配我的窗口" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" + "value": "讓終端機符合我的視窗大小" } } } }, - "cli.restore.notice.routedLauncherUnavailable": { + "command.terminalDisconnectOtherClients.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "restore: this session was started through the routed launcher '%@', which is not on PATH. Resuming the agent directly instead." + "value": "Disconnect Other Terminal Clients…" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" + "value": "قطع اتصال عملاء الطرفية الآخرين…" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" + "value": "Andere Terminal-Clients trennen…" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "restore: Diese Sitzung wurde über den weitergeleiteten Launcher „%@“ gestartet, der nicht im PATH liegt. Der Agent wird stattdessen direkt fortgesetzt." + "value": "Desconectar otros clientes de la terminal…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "restore : cette session a été lancée via le lanceur routé « %@ », qui est introuvable dans le PATH. Reprise directe de l'agent à la place." + "value": "Déconnecter les autres clients du terminal…" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." + "value": "他のターミナルクライアントを切断…" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "restore: esta sesión se inició mediante el lanzador enrutado '%@', que no está en el PATH. Se reanudará el agente directamente." + "value": "다른 터미널 클라이언트 연결 끊기…" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" + "value": "断开其他终端客户端…" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." + "value": "中斷其他終端機用戶端的連線…" } } } }, - "sidebar.extensions.action.noSpaceForPane": { + "command.terminalShowSizePanel.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "No space for new pane" + "value": "Show Terminal Size Panel" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا توجد مساحة للوحة جديدة" + "value": "إظهار لوحة حجم الطرفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kein Platz für einen neuen Bereich" + "value": "Terminalgrößen-Bereich anzeigen" } }, "es": { "stringUnit": { "state": "translated", - "value": "No hay espacio para un panel nuevo" + "value": "Mostrar el panel de tamaño de la terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pas de place pour un nouveau panneau" + "value": "Afficher le panneau de taille du terminal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "新しいペインを置く場所がありません" + "value": "ターミナルサイズパネルを表示" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 창을 위한 공간이 없습니다" + "value": "터미널 크기 패널 보기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "没有空间容纳新窗格" + "value": "显示终端大小面板" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沒有空間容納新窗格" + "value": "顯示終端機大小面板" } } } }, - "cli.focus.defaultHelp": { + "command.terminalSizeToMyWindow.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Default: focus when run interactively, stay in the background when run by an agent or script." + "value": "Size Terminal to My Window" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" + "value": "ضبط حجم الطرفية على نافذتي" } }, "de": { "stringUnit": { "state": "translated", - "value": "Standard: bei interaktiver Ausführung fokussieren, bei Ausführung durch einen Agenten oder ein Skript im Hintergrund bleiben." + "value": "Terminal an mein Fenster anpassen" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Par défaut : prend le focus en exécution interactive, reste en arrière-plan quand un agent ou un script l’exécute." + "value": "Ajustar la terminal a mi ventana" } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." + "value": "Adapter le terminal à ma fenêtre" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Predeterminado: enfoca al ejecutarse de forma interactiva y se queda en segundo plano cuando lo ejecuta un agente o un script." + "value": "ターミナルを自分のウィンドウに合わせる" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" + "value": "터미널을 내 창 크기에 맞추기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" + "value": "让终端适配我的窗口" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." + "value": "讓終端機符合我的視窗大小" } } } }, - "cli.help.openFocusFlags": { + "terminalSharing.detached.hostShutdown": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Focus:\n --focus Switch to the new workspace\n --no-focus Open it in the background" + "value": "The terminal host shut down at %@." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" + "value": "توقف مضيف الطرفية في %@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" + "value": "Der Terminal-Host wurde um %@ beendet." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" + "value": "El host de la terminal se detuvo a las %@." } }, - "ar": { + "fr": { "stringUnit": { "state": "translated", - "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" + "value": "L’hôte du terminal s’est arrêté à %@." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" + "value": "ターミナルホストが %@ に終了しました。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" + "value": "터미널 호스트가 %@에 종료되었습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" + "value": "终端主机已于 %@ 关闭。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" + "value": "終端機主機已於 %@ 關閉。" } } } }, - "settings.app.compactAgentStatus": { + "terminalSharing.detached.network": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Compact Agent Status" + "value": "The network dropped." } }, "ar": { "stringUnit": { "state": "translated", - "value": "حالة الوكيل المختصرة" + "value": "انقطع اتصال الشبكة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Kompakter Agentenstatus" + "value": "Die Netzwerkverbindung wurde unterbrochen." } }, "es": { "stringUnit": { "state": "translated", - "value": "Estado de agente compacto" + "value": "Se perdió la conexión de red." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Statut d’agent compact" + "value": "La connexion réseau a été interrompue." } }, "ja": { "stringUnit": { "state": "translated", - "value": "エージェント状態のコンパクト表示" + "value": "ネットワーク接続が切れました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "간결한 에이전트 상태" + "value": "네트워크 연결이 끊어졌습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "精简代理状态" + "value": "网络连接已中断。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "精簡代理狀態" + "value": "網路連線中斷。" } } } }, - "settings.app.compactAgentStatus.subtitle": { + "terminalSharing.detached.reattach": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show a workspace's agent, unread and pull request state as one colored icon before the title instead of separate rows. Hover the icon for details." + "value": "Reattach" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إظهار حالة الوكيل والعناصر غير المقروءة وطلب السحب لمساحة العمل كأيقونة ملونة واحدة قبل العنوان بدلاً من صفوف منفصلة. مرّر المؤشر فوق الأيقونة لعرض التفاصيل." + "value": "إعادة الإرفاق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agenten-, Ungelesen- und Pull-Request-Status eines Workspace als ein farbiges Symbol vor dem Titel anzeigen statt in eigenen Zeilen. Details erscheinen, wenn du den Zeiger über das Symbol bewegst." + "value": "Erneut verbinden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar el estado del agente, lo no leído y la pull request de un espacio de trabajo como un único icono de color antes del título, en lugar de filas separadas. Pasa el cursor sobre el icono para ver los detalles." + "value": "Volver a conectar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Afficher l’état de l’agent, des éléments non lus et de la pull request d’un espace de travail sous forme d’une seule icône colorée avant le titre, au lieu de lignes distinctes. Survolez l’icône pour voir les détails." + "value": "Se reconnecter" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" + "value": "再接続" } }, "ko": { "stringUnit": { "state": "translated", - "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." + "value": "다시 연결" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" + "value": "重新连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" + "value": "重新連接" } } } }, - "settings.search.alias.setting.app.compact-agent-status": { + "terminalSharing.detached.reattachAsViewer": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex مختصر وكيل حالة أيقونة سطر العنوان" + "value": "Reattach as Viewer" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex kompakt Agent Status Symbol Titelzeile" + "value": "إعادة الإرفاق كمشاهد" } }, - "en": { + "de": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" + "value": "Als Zuschauer erneut verbinden" } }, "es": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compacto agente estado icono línea de título" + "value": "Volver a conectar como espectador" } }, "fr": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compact agent statut icône ligne de titre" + "value": "Se reconnecter en lecture seule" } }, "ja": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" + "value": "閲覧者として再接続" } }, "ko": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" + "value": "보기 전용으로 다시 연결" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" + "value": "以查看者身份重新连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精簡 代理 狀態 圖示 標題列" + "value": "以檢視者身分重新連接" } } } }, - "sidebar.agentStatus.glyph.tooltip": { + "terminalSharing.detached.reattachAsViewer.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Reattach without changing the terminal size" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "إعادة الإرفاق دون تغيير حجم الطرفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Volver a conectar sin cambiar el tamaño de la terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ : %2$@" + "value": "Se reconnecter sans modifier la taille du terminal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "ターミナルサイズを変えずに再接続" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "터미널 크기를 바꾸지 않고 다시 연결" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "重新连接但不更改终端大小" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@:%2$@" + "value": "重新連接但不變更終端機大小" } } } }, - "sidebar.compactStatus.profile": { + "terminalSharing.detached.someone": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Profile" + "value": "Someone" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الملف الشخصي" + "value": "شخص ما" } }, "de": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "Jemand" } }, "es": { "stringUnit": { "state": "translated", - "value": "Perfil" + "value": "Alguien" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Profil" + "value": "Quelqu’un" } }, "ja": { "stringUnit": { "state": "translated", - "value": "プロファイル" + "value": "誰か" } }, "ko": { "stringUnit": { "state": "translated", - "value": "프로필" + "value": "누군가" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "配置文件" + "value": "有人" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定檔" + "value": "有人" } } } }, - "cloud.teamPicker.createSheet.message": { + "terminalSharing.detached.superseded": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The new team becomes your active team." + "value": "Another window of this Mac replaced this one at %@." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يصبح الفريق الجديد فريقك النشط." + "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Das neue Team wird Ihr aktives Team." + "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." } }, "es": { "stringUnit": { "state": "translated", - "value": "El nuevo equipo pasa a ser su equipo activo." + "value": "Otra ventana de este Mac reemplazó a esta a las %@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La nouvelle équipe devient votre équipe active." + "value": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." } }, "ja": { "stringUnit": { "state": "translated", - "value": "新しいチームがアクティブなチームになります。" + "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "새 팀이 활성 팀이 됩니다." + "value": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新团队将成为你的当前团队。" + "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "新團隊會成為你使用中的團隊。" + "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" } } } }, - "cli.sshPtyAttach.launchAcknowledgementTimeoutRetry": { + "terminalSharing.participant.personDevice": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux did not acknowledge the SSH launch; retrying %s in %ss." + "value": "%1$@ · %2$@" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux hat den SSH-Start nicht bestätigt; neuer Versuch %s in %ss." + "value": "%1$@ · %2$@" } - }, - "fr": { + } + } + }, + "terminalSharing.device.browser": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux n’a pas confirmé le démarrage SSH ; nouvelle tentative %s dans %ss." + "value": "Browser" } }, "ar": { "stringUnit": { "state": "translated", - "value": "[cmux] لم يؤكد cmux بدء SSH؛ ستتم إعادة المحاولة %s خلال %s ث." + "value": "المتصفح" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux no confirmó el inicio de SSH; reintentando %s en %ss." + "value": "Browser" } }, - "zh-Hant": { + "es": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux 未確認 SSH 啟動;將在第 %s 次於 %s 秒後重試。" + "value": "Navegador" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux 未确认 SSH 启动;将在第 %s 次于 %s 秒后重试。" + "value": "Navigateur" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux가 SSH 시작을 확인하지 못했습니다. %s번째로 %s초 후 다시 시도합니다." + "value": "ブラウザ" } }, - "ja": { + "ko": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux が SSH の起動を確認できないため、%s 回目を %s 秒後に再試行します。" + "value": "브라우저" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux nije potvrdio SSH pokretanje; ponovni pokušaj %s za %ss." - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux bekræftede ikke SSH-starten; prøver igen %s om %ss." - } - }, - "it": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux non ha confermato l’avvio SSH; nuovo tentativo %s tra %ss." - } - }, - "km": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux មិនបានបញ្ជាក់ការចាប់ផ្តើម SSH ទេ; កំពុងព្យាយាមម្តងទៀត %s ក្នុងរយៈពេល %ss។" - } - }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "[cmux] cmux bekreftet ikke SSH-oppstarten; prøver på nytt %s om %ss." - } - }, - "pl": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux nie potwierdził uruchomienia SSH; ponawianie próby %s za %ss." + "value": "浏览器" } }, - "pt-BR": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "[cmux] o cmux não confirmou o início do SSH; tentando novamente %s em %ss." + "value": "瀏覽器" } - }, - "ru": { + } + } + }, + "terminalSharing.device.ipad": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux не подтвердил запуск SSH; повторная попытка %s через %ss." + "value": "iPad" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux ไม่ยืนยันการเริ่มต้น SSH; กำลังลองใหม่ครั้งที่ %s ในอีก %s วินาที" + "value": "iPad" } - }, - "tr": { + } + } + }, + "terminalSharing.device.iphone": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux SSH başlatmasını onaylamadı; %s saniye içinde %s. deneme yapılıyor." + "value": "iPhone" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "[cmux] cmux не підтвердив запуск SSH; повторна спроба %s через %s с." + "value": "iPhone" } } } }, - "agent.codex.fork.notice.body": { + "terminalSharing.device.mac": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux could not identify the new fork session. Start the fork again from the parent pane." + "value": "Mac" } }, "ja": { "stringUnit": { "state": "translated", - "value": "cmux は新しいフォーク セッションを特定できませんでした。親ペインからもう一度フォークしてください。" + "value": "Mac" } - }, - "de": { + } + } + }, + "terminalSharing.device.tui": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux konnte die neue Fork-Sitzung nicht erkennen. Starten Sie den Fork erneut im übergeordneten Pane." + "value": "Terminal client" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas pu identifier la nouvelle session forkée. Relancez le fork depuis le volet parent." + "value": "عميل طرفية" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تعذر على cmux تحديد جلسة التفريع الجديدة. ابدأ التفريع مرة أخرى من الجزء الأصلي." + "value": "Terminal-Client" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux no pudo identificar la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." + "value": "Cliente de terminal" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 無法識別新的分支工作階段。請從父窗格重新開始分支。" + "value": "Client terminal" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 无法识别新的分支会话。请从父窗格重新开始分支。" + "value": "ターミナルクライアント" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux가 새 포크 세션을 식별하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." + "value": "터미널 클라이언트" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux nije mogao prepoznati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." + "value": "终端客户端" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke identificere den nye forgreningssession. Start forgreningen igen fra forældreruden." + "value": "終端機用戶端" } - }, - "it": { + } + } + }, + "terminalSharing.device.unknown": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux non ha potuto identificare la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." + "value": "Device" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux មិនអាចកំណត់អត្តសញ្ញាណសម័យ fork ថ្មីបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" + "value": "جهاز" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke identifisere den nye forgreningsøkten. Start forgreningen på nytt fra den overordnede ruten." + "value": "Gerät" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł zidentyfikować nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "value": "Dispositivo" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "O cmux não conseguiu identificar a nova sessão bifurcada. Inicie o fork novamente no painel principal." + "value": "Appareil" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux не удалось определить новый сеанс форка. Запустите форк снова из родительской панели." + "value": "デバイス" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux ไม่สามารถระบุเซสชันที่แยกใหม่ได้ เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" + "value": "기기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux yeni fork oturumunu belirleyemedi. Fork'u üst panelden yeniden başlatın." + "value": "设备" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux не вдалося визначити новий сеанс форка. Запустіть форк ще раз із батьківської панелі." + "value": "裝置" } } } }, - "agent.codex.fork.notice.parentClearFailed.body": { + "terminalSharing.owner.held": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux could not safely bind the new fork session. Retry the fork from the parent pane." + "value": "Held size" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux は新しいフォーク セッションを安全にバインドできませんでした。親ペインからもう一度フォークしてください。" + "value": "حجم محتفظ به" } }, "de": { "stringUnit": { "state": "translated", - "value": "cmux konnte die neue Fork-Sitzung nicht sicher binden. Starten Sie den Fork erneut im übergeordneten Pane." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "cmux n’a pas pu lier la nouvelle session forkée en toute sécurité. Relancez le fork depuis le volet parent." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تعذر على cmux ربط جلسة التفريع الجديدة بأمان. أعد بدء التفريع من الجزء الأصلي." + "value": "Beibehaltene Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux no pudo vincular de forma segura la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." + "value": "Tamaño conservado" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 無法安全繫結新的分支工作階段。請從父窗格重新開始分支。" + "value": "Taille conservée" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 无法安全绑定新的分支会话。请从父窗格重新开始分支。" + "value": "保持されたサイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux가 새 포크 세션을 안전하게 연결하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." + "value": "유지된 크기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux nije mogao sigurno povezati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." + "value": "保留的大小" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke binde den nye forgreningssession sikkert. Start forgreningen igen fra forældreruden." + "value": "保留的大小" } - }, - "it": { + } + } + }, + "terminalSharing.owner.largest": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux non ha potuto associare in sicurezza la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." + "value": "Largest window" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux មិនអាចភ្ជាប់សម័យ fork ថ្មីដោយសុវត្ថិភាពបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" + "value": "أكبر نافذة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux kunne ikke binde den nye forgreningsøkten på en trygg måte. Start forgreningen på nytt fra den overordnede ruten." + "value": "Größtes Fenster" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux nie mógł bezpiecznie powiązać nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." + "value": "Ventana más grande" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "O cmux não conseguiu vincular com segurança a nova sessão bifurcada. Inicie o fork novamente no painel principal." + "value": "Plus grande fenêtre" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux не удалось безопасно привязать новый сеанс форка. Запустите форк снова из родительской панели." + "value": "最大のウィンドウ" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux ไม่สามารถผูกเซสชันที่แยกใหม่ได้อย่างปลอดภัย เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" + "value": "가장 큰 창" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux yeni fork oturumunu güvenli bir şekilde bağlayamadı. Fork'u üst panelden yeniden başlatın." + "value": "最大的窗口" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux не вдалося безпечно прив’язати новий сеанс форка. Запустіть форк ще раз із батьківської панелі." + "value": "最大的視窗" } } } }, - "agent.codex.fork.notice.subtitle": { + "terminalSharing.owner.shared": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fork unavailable" + "value": "Shared size" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "フォークを利用できません" + "value": "حجم مشترك" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fork nicht verfügbar" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Fork indisponible" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "التفريع غير متاح" + "value": "Gemeinsame Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fork no disponible" + "value": "Tamaño compartido" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "無法使用分支" + "value": "Taille partagée" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "分支不可用" + "value": "共有サイズ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포크를 사용할 수 없음" + "value": "공유 크기" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Račvanje nije dostupno" + "value": "共享大小" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Fork ikke tilgængelig" + "value": "共用大小" } - }, - "it": { + } + } + }, + "terminalSharing.owner.smallest": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Fork non disponibile" + "value": "Fits everyone" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "មិនអាចប្រើការបំបែកបាន" + "value": "يناسب الجميع" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Fork utilgjengelig" + "value": "Passt für alle" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork niedostępny" + "value": "Se ajusta a todos" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Fork indisponível" + "value": "Convient à tous" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Форк недоступен" + "value": "全員に合わせる" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ไม่สามารถใช้การแยกสาขาได้" + "value": "모두에게 맞춤" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Fork kullanılamıyor" + "value": "适合所有人" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Форк недоступний" + "value": "符合所有人" } } } }, - "agent.codex.fork.notice.title": { + "terminalSharing.participant.thisMac": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Agent fork" + "value": "This Mac" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "エージェントフォーク" + "value": "جهاز Mac هذا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Agent-Fork" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Fork d’agent" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "تفريع الوكيل" + "value": "Dieser Mac" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fork del agente" + "value": "Este Mac" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "代理程式分支" + "value": "Ce Mac" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "代理分支" + "value": "このMac" } }, "ko": { "stringUnit": { "state": "translated", - "value": "에이전트 포크" + "value": "이 Mac" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Račvanje agenta" + "value": "这台 Mac" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Agentfork" + "value": "這台 Mac" } - }, - "it": { + } + } + }, + "terminalSharing.owner.possessiveDevice": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Fork dell'agente" + "value": "%1$@'s %2$@" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ការបំបែកភ្នាក់ងារ" + "value": "%1$@ · %2$@" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Agentforgrening" + "value": "%1$@ · %2$@" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Fork agenta" + "value": "%1$@ · %2$@" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Fork do agente" + "value": "%1$@ · %2$@" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Форк агента" + "value": "%1$@の%2$@" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "การแยกสาขาของเอเจนต์" + "value": "%1$@의 %2$@" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ajan çatalı" + "value": "%1$@的%2$@" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Форк агента" + "value": "%1$@的%2$@" } } } }, - "socket.mainActorHop.timeout.mayHaveRun": { + "terminalSharing.owner.fixedShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux did not respond within 10 seconds after the command started, so its result is unknown. Check the effect before retrying." + "value": "Fixed" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "コマンドの開始後 10 秒以内に cmux が応答しなかったため、結果は不明です。再試行する前に効果を確認してください。" + "value": "ثابت" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "命令开始后 10 秒内 cmux 没有响应,因此结果未知。请先确认效果再重试。" + "value": "Fest" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux hat innerhalb von 10 Sekunden nach dem Start des Befehls nicht geantwortet, das Ergebnis ist daher unbekannt. Prüfe die Auswirkung, bevor du es erneut versuchst." + "value": "Fijo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas répondu dans les 10 secondes suivant le démarrage de la commande, son résultat est donc inconnu. Vérifiez l’effet avant de réessayer." + "value": "Fixe" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يستجب cmux خلال 10 ثوانٍ بعد بدء الأمر، لذا فإن نتيجته غير معروفة. تحقق من الأثر قبل إعادة المحاولة." + "value": "固定" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux no respondió en los 10 segundos posteriores al inicio del comando, por lo que su resultado es desconocido. Comprueba el efecto antes de reintentar." + "value": "고정" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "命令開始後 10 秒內 cmux 沒有回應,因此結果未知。請先確認效果再重試。" + "value": "固定" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "명령이 시작된 후 10초 안에 cmux가 응답하지 않아 결과를 알 수 없습니다. 다시 시도하기 전에 효과를 확인하세요." + "value": "固定" } } } }, - "socket.mainActorHop.timeout.notRun": { + "terminalSharing.tab.tooltip": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux did not respond within 10 seconds, so the command was not run. Retry in a moment." + "value": "Size set by %1$@ · %2$@" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux が 10 秒以内に応答しなかったため、コマンドは実行されませんでした。しばらくしてから再試行してください。" + "value": "الحجم يحدده %1$@ · %2$@" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒内没有响应,因此未运行该命令。请稍后重试。" + "value": "Größe festgelegt von %1$@ · %2$@" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux hat innerhalb von 10 Sekunden nicht geantwortet, der Befehl wurde daher nicht ausgeführt. Versuche es gleich noch einmal." + "value": "Tamaño definido por %1$@ · %2$@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux n’a pas répondu dans les 10 secondes, la commande n’a donc pas été exécutée. Réessayez dans un instant." + "value": "Taille définie par %1$@ · %2$@" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "لم يستجب cmux خلال 10 ثوانٍ، لذا لم يتم تنفيذ الأمر. أعد المحاولة بعد لحظات." + "value": "%1$@がサイズを設定 · %2$@" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux no respondió en 10 segundos, por lo que el comando no se ejecutó. Reintenta en un momento." + "value": "크기 설정: %1$@ · %2$@" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 在 10 秒內沒有回應,因此未執行該命令。請稍後重試。" + "value": "尺寸由%1$@设定 · %2$@" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 10초 안에 응답하지 않아 명령이 실행되지 않았습니다. 잠시 후 다시 시도하세요." + "value": "尺寸由%1$@設定 · %2$@" } } } }, - "socket.overloaded.message": { + "terminalSharing.panel.sizeLabel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux is handling too many control-socket requests right now, so this one was not run. Retry in a moment." + "value": "Size" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux は現在、制御ソケットの要求を処理しきれないため、この要求は実行されませんでした。しばらくしてから再試行してください。" + "value": "الحجم" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 当前正在处理过多的控制套接字请求,因此未运行此请求。请稍后重试。" + "value": "Größe" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux verarbeitet gerade zu viele Control-Socket-Anfragen, diese wurde daher nicht ausgeführt. Versuche es gleich noch einmal." + "value": "Tamaño" } }, "fr": { "stringUnit": { "state": "translated", - "value": "cmux traite actuellement trop de requêtes du socket de contrôle, celle-ci n’a donc pas été exécutée. Réessayez dans un instant." + "value": "Taille" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "يعالج cmux حاليًا عددًا كبيرًا جدًا من طلبات مقبس التحكم، لذا لم يتم تنفيذ هذا الطلب. أعد المحاولة بعد لحظات." + "value": "サイズ" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux está gestionando demasiadas solicitudes del socket de control ahora mismo, por lo que esta no se ejecutó. Reintenta en un momento." + "value": "크기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 目前正在處理過多的控制 socket 請求,因此未執行此請求。請稍後重試。" + "value": "尺寸" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux가 지금 너무 많은 제어 소켓 요청을 처리하고 있어 이 요청은 실행되지 않았습니다. 잠시 후 다시 시도하세요." + "value": "尺寸" } } } }, - "socket.request.cancelled": { + "terminalSharing.sizeMode.latest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request was cancelled" + "value": "Follow Latest" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "リクエストはキャンセルされました" + "value": "اتباع الأحدث" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "请求已取消" + "value": "Letzter Eingabe folgen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Anfrage wurde abgebrochen" + "value": "Seguir la última entrada" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La requête a été annulée" + "value": "Suivre la dernière saisie" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم إلغاء الطلب" + "value": "最新の入力に合わせる" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Se canceló la solicitud" + "value": "최근 입력 따르기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "請求已取消" + "value": "跟随最新输入" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "요청이 취소되었습니다" + "value": "跟隨最新輸入" } } } }, - "socket.request.failedBeforeResult": { + "terminalSharing.sizeMode.smallest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Request failed before returning a result" + "value": "Fit Everyone" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "結果を返す前にリクエストが失敗しました" + "value": "ملاءمة الجميع" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "请求在返回结果之前失败" + "value": "Allen anpassen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Anfrage ist fehlgeschlagen, bevor ein Ergebnis zurückgegeben wurde" + "value": "Ajustar a todos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La requête a échoué avant de renvoyer un résultat" + "value": "Adapter à tous" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فشل الطلب قبل إرجاع نتيجة" + "value": "全員に合わせる" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "La solicitud falló antes de devolver un resultado" + "value": "모두에게 맞추기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "請求在傳回結果之前失敗" + "value": "适合所有人" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "결과를 반환하기 전에 요청이 실패했습니다" + "value": "適合所有人" } } } }, - "socket.authTeam.committedStatusTimedOut": { + "terminalSharing.sizeMode.largest": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The team change was applied, but cmux did not report the updated status within 10 seconds. Run `cmux auth status` to confirm." + "value": "Largest Window" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" + "value": "أكبر نافذة" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" + "value": "Größtes Fenster" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Die Teamänderung wurde übernommen, aber cmux hat den aktualisierten Status nicht innerhalb von 10 Sekunden gemeldet. Führe `cmux auth status` aus, um es zu prüfen." + "value": "Ventana más grande" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le changement d’équipe a été appliqué, mais cmux n’a pas signalé le statut mis à jour dans les 10 secondes. Exécutez `cmux auth status` pour confirmer." + "value": "Plus grande fenêtre" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." + "value": "最大のウインドウ" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "El cambio de equipo se aplicó, pero cmux no informó el estado actualizado en 10 segundos. Ejecuta `cmux auth status` para confirmarlo." + "value": "가장 큰 윈도우" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" + "value": "最大窗口" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." + "value": "最大視窗" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts": { + "terminalSharing.sizeMode.priority": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "iOS Browser Reaches Other Hosts" + "value": "Priority" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "iOS-Browser erreicht andere Hosts" + "value": "الأولوية" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le navigateur iOS accède aux autres hôtes" + "value": "Priorität" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "متصفح iOS يصل إلى مضيفين آخرين" + "value": "Prioridad" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El navegador de iOS accede a otros hosts" + "value": "Priorité" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器可連線至其他主機" + "value": "優先順位" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器可访问其他主机" + "value": "우선순위" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저의 다른 호스트 접근" + "value": "优先级" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOSブラウザから他のホストに接続" + "value": "優先順序" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts.subtitleOn": { + "terminalSharing.sizeMode.fixed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The iOS browser can load LAN, VPN, and internet hosts through this Mac. Link-local and cloud metadata addresses never go through this Mac; the phone loads them itself." + "value": "Fixed" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Der iOS-Browser kann LAN-, VPN- und Internet-Hosts über diesen Mac laden. Link-Local- und Cloud-Metadatenadressen laufen nie über diesen Mac; das iPhone lädt sie selbst." + "value": "ثابت" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le navigateur iOS peut charger des hôtes du réseau local, du VPN et d’Internet via ce Mac. Les adresses link-local et de métadonnées cloud ne passent jamais par ce Mac ; l’iPhone les charge lui-même." + "value": "Fest" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." + "value": "Fijo" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "El navegador de iOS puede cargar hosts de la red local, VPN e internet a través de este Mac. Las direcciones link-local y de metadatos en la nube nunca pasan por este Mac; el iPhone las carga por sí mismo." + "value": "Fixe" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器可透過這台 Mac 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" + "value": "固定" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" + "value": "고정" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저가 이 Mac을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." + "value": "固定" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOSブラウザはこのMac経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" + "value": "固定" } } } }, - "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { + "terminalSharing.panel.setsSize": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The iOS browser reaches only this Mac's localhost through this Mac. Other sites load over the phone's own network." + "value": "sets size" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." + "value": "يحدد الحجم" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Via ce Mac, le navigateur iOS n’accède qu’au localhost de ce Mac. Les autres sites se chargent via le réseau du téléphone." + "value": "legt Größe fest" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." + "value": "define el tamaño" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "A través de este Mac, el navegador de iOS solo accede a su localhost. Los demás sitios se cargan con la red del propio teléfono." + "value": "définit la taille" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" + "value": "サイズを設定" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" + "value": "크기 설정" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." + "value": "设定尺寸" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" + "value": "設定尺寸" } } } }, - "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { + "terminalSharing.panel.notCounted": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" + "value": "not counted" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobil browser tunnel proxy lokales netzwerk hosts netzwerk sicherheit" + "value": "غير محتسب" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobile navigateur tunnel proxy réseau local hôtes réseau sécurité" + "value": "nicht gezählt" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" + "value": "no cuenta" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security móvil navegador túnel proxy red local hosts red seguridad" + "value": "non compté" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 行動裝置 瀏覽器 通道 代理 區域網路 主機 網路 安全性" + "value": "カウント対象外" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 移动 浏览器 隧道 代理 局域网 主机 网络 安全" + "value": "계산 안 됨" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 모바일 브라우저 터널 프록시 로컬 네트워크 호스트 네트워크 보안" + "value": "不计入" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security モバイル ブラウザ トンネル プロキシ ローカルネットワーク ホスト ネットワーク セキュリティ" + "value": "不計入" } } } }, - "cli.browser.inputFiles.error.usage": { + "terminalSharing.panel.rowOptions": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files requires --selector <css> and either --file <path> (repeatable) or --clear" + "value": "Options for %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتطلب set-input-files الخيار --selector <css> مع --file <path> (يمكن تكراره) أو --clear" + "value": "خيارات %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "set-input-files benötigt --selector <css> und entweder --file <path> (wiederholbar) oder --clear" + "value": "Optionen für %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere --selector <css> y --file <path> (repetible) o --clear" + "value": "Opciones de %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite --selector <css> et soit --file <path> (répétable), soit --clear" + "value": "Options pour %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files には --selector <css> と、--file <path>(複数指定可)または --clear が必要です" + "value": "%@のオプション" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files에는 --selector <css>와 --file <path>(반복 가능) 또는 --clear가 필요합니다" + "value": "%@ 옵션" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要 --selector <css>,以及 --file <path>(可重复)或 --clear" + "value": "%@的选项" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要 --selector <css>,以及 --file <path>(可重複)或 --clear" + "value": "%@的選項" } } } }, - "cli.browser.inputFiles.help": { + "terminalSharing.panel.disconnectOthersButton": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Select local files (up to 128 files, 32 MiB total) or clear the selection. Directory uploads are unsupported." + "value": "Disconnect Others" } }, "ar": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n اختر ملفات محلية (حتى 128 ملفًا بإجمالي 32 MiB) أو امسح الاختيار. رفع المجلدات غير مدعوم." + "value": "قطع اتصال الآخرين" } }, "de": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Lokale Dateien auswählen (bis zu 128 Dateien, insgesamt 32 MiB) oder die Auswahl leeren. Ordner-Uploads werden nicht unterstützt." + "value": "Andere trennen" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Selecciona archivos locales (hasta 128 archivos, 32 MiB en total) o borra la selección. No se admite subir carpetas." + "value": "Desconectar a los demás" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Sélectionner des fichiers locaux (jusqu’à 128 fichiers, 32 MiB au total) ou effacer la sélection. L’envoi de dossiers n’est pas pris en charge." + "value": "Déconnecter les autres" } }, "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n ローカルファイルを選択(最大128個、合計32 MiB)するか、選択を解除します。ディレクトリのアップロードには対応していません。" + "value": "他の接続を切断" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n 로컬 파일을 선택하거나(최대 128개, 총 32 MiB) 선택을 지웁니다. 디렉터리 업로드는 지원되지 않습니다." + "value": "다른 연결 끊기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n 选择本地文件(最多 128 个文件,总计 32 MiB)或清除选择。不支持上传目录。" + "value": "断开其他连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n 選取本機檔案(最多 128 個檔案,總計 32 MiB)或清除選取。不支援上傳目錄。" + "value": "中斷其他連線" } } } }, - "browser.inputFiles.error.invalidTarget": { + "terminalSharing.detached.titleShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The selector must match a file input without directory selection" + "value": "Detached" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" + "value": "تم الفصل" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" + "value": "Getrennt" } }, "es": { "stringUnit": { "state": "translated", - "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" + "value": "Desconectado" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" + "value": "Détaché" } }, "ja": { "stringUnit": { "state": "translated", - "value": "セレクターはディレクトリ選択を使わないファイル入力欄に一致する必要があります" + "value": "切断されました" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택자는 디렉터리 선택이 없는 파일 입력 요소와 일치해야 합니다" + "value": "분리됨" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "选择器必须匹配未启用目录选择的文件输入字段" + "value": "已分离" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選取器必須符合未啟用目錄選取的檔案輸入欄位" + "value": "已分離" } } } }, - "browser.inputFiles.error.multipleRequired": { + "terminalSharing.detached.byMessageShort": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This file input does not allow multiple files" + "value": "%1$@ disconnected this Mac at %2$@." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يسمح حقل إدخال الملفات هذا باختيار عدة ملفات" + "value": "قطع %1$@ اتصال هذا الـMac في %2$@." } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" + "value": "%1$@ hat diesen Mac um %2$@ getrennt." } }, "es": { "stringUnit": { "state": "translated", - "value": "Este campo de archivos no permite seleccionar varios archivos" + "value": "%1$@ desconectó este Mac a las %2$@." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" + "value": "%1$@ a déconnecté ce Mac à %2$@." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このファイル入力欄では複数のファイルを選択できません" + "value": "%1$@が%2$@にこのMacを切断しました。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 파일 입력 요소는 여러 파일을 허용하지 않습니다" + "value": "%1$@이(가) %2$@에 이 Mac의 연결을 끊었습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此文件输入字段不允许选择多个文件" + "value": "%1$@于%2$@断开了这台Mac的连接。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此檔案輸入欄位不允許選取多個檔案" + "value": "%1$@於%2$@中斷了這台Mac的連線。" } } } }, - "browser.inputFiles.error.cancelled": { + "terminalSharing.chip.hiddenColumns": { + "extractionState": "manual", + "localizations": { + "en": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld col hidden" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld cols hidden" + } + } + } + } + }, + "ar": { + "variations": { + "plural": { + "zero": { + "stringUnit": { + "state": "translated", + "value": "لا أعمدة مخفية (%ld)" + } + }, + "one": { + "stringUnit": { + "state": "translated", + "value": "عمود واحد مخفي (%ld)" + } + }, + "two": { + "stringUnit": { + "state": "translated", + "value": "عمودان مخفيان (%ld)" + } + }, + "few": { + "stringUnit": { + "state": "translated", + "value": "%ld أعمدة مخفية" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld عمودًا مخفيًا" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld عمود مخفي" + } + } + } + } + }, + "de": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld Spalte ausgeblendet" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld Spalten ausgeblendet" + } + } + } + } + }, + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld columna oculta" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld de columnas ocultas" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld columnas ocultas" + } + } + } + } + }, + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%ld colonne masquée" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%ld de colonnes masquées" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld colonnes masquées" + } + } + } + } + }, + "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld列が非表示" + } + } + } + } + }, + "ko": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%ld열 숨겨짐" + } + } + } + } + }, + "zh-Hans": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "隐藏 %ld 列" + } + } + } + } + }, + "zh-Hant": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "隱藏 %ld 欄" + } + } + } + } + } + } + }, + "terminalSharing.panel.cancel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "File upload preparation was cancelled" + "value": "Cancel" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تم إلغاء تجهيز الملفات للرفع" + "value": "إلغاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" + "value": "Abbrechen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se canceló la preparación de los archivos para subir" + "value": "Cancelar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La préparation des fichiers à envoyer a été annulée" + "value": "Annuler" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ファイルのアップロード準備がキャンセルされました" + "value": "キャンセル" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파일 업로드 준비가 취소되었습니다" + "value": "취소" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已取消准备上传文件" + "value": "取消" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已取消準備上傳檔案" + "value": "取消" } } } }, - "browser.inputFiles.error.invalidParameters": { + "terminalSharing.panel.disconnectOthers.confirm": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "set-input-files requires a selector and a files array of absolute paths" + "value": "Disconnect all other clients?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" + "value": "هل تريد قطع اتصال جميع العملاء الآخرين؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" + "value": "Alle anderen Clients trennen?" } }, "es": { "stringUnit": { "state": "translated", - "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" + "value": "¿Desconectar todos los demás clientes?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" + "value": "Déconnecter tous les autres clients ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" + "value": "他のすべてのクライアントを切断しますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" + "value": "다른 모든 클라이언트의 연결을 끊을까요?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" + "value": "要断开其他所有客户端吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" + "value": "要中斷其他所有用戶端的連線嗎?" } } } }, - "browser.inputFiles.error.invalidSelection": { + "terminalSharing.panel.disconnectOthers.confirmButton": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Select at most 128 files using absolute paths" + "value": "Disconnect" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اختر ما يصل إلى 128 ملفًا باستخدام مسارات مطلقة" + "value": "قطع الاتصال" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wählen Sie höchstens 128 Dateien mit absoluten Pfaden aus" + "value": "Trennen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" + "value": "Desconectar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" + "value": "Déconnecter" } }, "ja": { "stringUnit": { "state": "translated", - "value": "絶対パスで最大128個のファイルを選択してください" + "value": "切断" } }, "ko": { "stringUnit": { "state": "translated", - "value": "절대 경로를 사용하여 최대 128개의 파일을 선택하세요" + "value": "연결 끊기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "请使用绝对路径选择最多 128 个文件" + "value": "断开连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "請使用絕對路徑選取最多 128 個檔案" + "value": "中斷連線" } } } }, - "browser.inputFiles.error.timeout": { + "terminalSharing.panel.fixedColumns": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Timed out preparing files for upload" + "value": "Columns" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتهت مهلة تجهيز الملفات للرفع" + "value": "الأعمدة" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" + "value": "Spalten" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se agotó el tiempo de preparación de los archivos para subir" + "value": "Columnas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le délai de préparation des fichiers à envoyer a été dépassé" + "value": "Colonnes" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップロードするファイルの準備がタイムアウトしました" + "value": "列" } }, "ko": { "stringUnit": { "state": "translated", - "value": "업로드할 파일 준비 시간이 초과되었습니다" + "value": "열" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "准备上传文件超时" + "value": "列数" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "準備上傳檔案逾時" + "value": "欄數" } } } }, - "browser.inputFiles.error.tooLarge": { + "terminalSharing.panel.fixedRows": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The combined upload must be no larger than 32 MiB" + "value": "Rows" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب ألا يتجاوز الحجم الإجمالي للملفات المرفوعة 32 MiB" + "value": "الصفوف" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Uploads dürfen insgesamt nicht größer als 32 MiB sein" + "value": "Zeilen" } }, "es": { "stringUnit": { "state": "translated", - "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" + "value": "Filas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" + "value": "Lignes" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップロードするファイルの合計サイズは32 MiB以下にしてください" + "value": "行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전체 업로드 크기는 32 MiB를 초과할 수 없습니다" + "value": "행" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "上传文件的总大小不得超过 32 MiB" + "value": "行数" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "上傳檔案的總大小不得超過 32 MiB" + "value": "列數" } } } }, - "browser.inputFiles.error.unreadableFile": { + "terminalSharing.panel.unavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Every upload path must be a readable regular file" + "value": "This terminal is not shared." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يجب أن يشير كل مسار للرفع إلى ملف عادي قابل للقراءة" + "value": "هذه الطرفية غير مشتركة." } }, "de": { "stringUnit": { "state": "translated", - "value": "Jeder Upload-Pfad muss auf eine lesbare reguläre Datei verweisen" + "value": "Dieses Terminal wird nicht geteilt." } }, "es": { "stringUnit": { "state": "translated", - "value": "Cada ruta de subida debe apuntar a un archivo normal que se pueda leer" + "value": "Esta terminal no está compartida." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Chaque chemin à envoyer doit désigner un fichier ordinaire lisible" + "value": "Ce terminal n’est pas partagé." } }, "ja": { "stringUnit": { "state": "translated", - "value": "各アップロードパスは読み取り可能な通常ファイルである必要があります" + "value": "このターミナルは共有されていません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 업로드 경로는 읽을 수 있는 일반 파일이어야 합니다" + "value": "이 터미널은 공유되지 않았습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "每个上传路径都必须指向可读取的普通文件" + "value": "此终端未共享。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "每個上傳路徑都必須指向可讀取的一般檔案" + "value": "此終端機未共用。" } } } }, - "cloudTree.group.cloudMachines.usage": { + "terminalSharing.panel.counts": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "%1$d/%2$d" + "value": "Counts toward size" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "يُحتسب في الحجم" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Zählt für die Größe" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Cuenta para el tamaño" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Compte pour la taille" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "サイズに反映" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$d/%2$d" + "value": "크기에 반영" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "计入大小" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "計入大小" } - }, - "it": { + } + } + }, + "terminalSharing.panel.disconnect": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Disconnect" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "قطع الاتصال" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Trennen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Desconectar" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "Déconnecter" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "切断" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "연결 끊기" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "断开连接" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$d/%2$d" + "value": "中斷連線" } } } }, - "cloud.ports.vpnOff.explanation": { + "cli.sshPtyAttach.launchAcknowledgementTimeoutRetry": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports open in cmux without setup. To use private addresses in other apps, set up Cloud VPN." + "value": "[cmux] cmux did not acknowledge the SSH launch; retrying %s in %ss." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ports lassen sich in cmux ohne Einrichtung öffnen. Richte Cloud-VPN ein, um private Adressen in anderen Apps zu verwenden." + "value": "[cmux] cmux hat den SSH-Start nicht bestätigt; neuer Versuch %s in %ss." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les ports s’ouvrent dans cmux sans configuration. Pour utiliser les adresses privées dans d’autres apps, configurez le VPN Cloud." + "value": "[cmux] cmux n’a pas confirmé le démarrage SSH ; nouvelle tentative %s dans %ss." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تُفتح المنافذ في cmux دون إعداد. لاستخدام العناوين الخاصة في التطبيقات الأخرى، أعدّ Cloud VPN." + "value": "[cmux] لم يؤكد cmux بدء SSH؛ ستتم إعادة المحاولة %s خلال %s ث." } }, "es": { "stringUnit": { "state": "translated", - "value": "Los puertos se abren en cmux sin configuración. Para usar direcciones privadas en otras apps, configura Cloud VPN." + "value": "[cmux] cmux no confirmó el inicio de SSH; reintentando %s en %ss." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無需設定即可在 cmux 中開啟連接埠。如要在其他 App 使用私有位址,請設定 Cloud VPN。" + "value": "[cmux] cmux 未確認 SSH 啟動;將在第 %s 次於 %s 秒後重試。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无需设置即可在 cmux 中打开端口。要在其他应用中使用私有地址,请设置云 VPN。" + "value": "[cmux] cmux 未确认 SSH 启动;将在第 %s 次于 %s 秒后重试。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "별도 설정 없이 cmux에서 포트를 열 수 있습니다. 다른 앱에서 비공개 주소를 사용하려면 Cloud VPN을 설정하세요." + "value": "[cmux] cmux가 SSH 시작을 확인하지 못했습니다. %s번째로 %s초 후 다시 시도합니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "設定なしで cmux 内のポートを開けます。他のアプリでプライベートアドレスを使うには、Cloud VPN を設定してください。" + "value": "[cmux] cmux が SSH の起動を確認できないため、%s 回目を %s 秒後に再試行します。" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Portovi se otvaraju u cmux-u bez podešavanja. Za korištenje privatnih adresa u drugim aplikacijama podesite Cloud VPN." + "state": "translated", + "value": "[cmux] cmux nije potvrdio SSH pokretanje; ponovni pokušaj %s za %ss." } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Porte åbnes i cmux uden opsætning. Opsæt Cloud VPN for at bruge private adresser i andre apps." + "state": "translated", + "value": "[cmux] cmux bekræftede ikke SSH-starten; prøver igen %s om %ss." } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Le porte si aprono in cmux senza configurazione. Per usare gli indirizzi privati in altre app, configura Cloud VPN." + "state": "translated", + "value": "[cmux] cmux non ha confermato l’avvio SSH; nuovo tentativo %s tra %ss." } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "ច្រកអាចបើកក្នុង cmux ដោយមិនចាំបាច់រៀបចំ។ ដើម្បីប្រើអាសយដ្ឋានឯកជនក្នុងកម្មវិធីផ្សេងទៀត សូមរៀបចំ Cloud VPN។" + "state": "translated", + "value": "[cmux] cmux មិនបានបញ្ជាក់ការចាប់ផ្តើម SSH ទេ; កំពុងព្យាយាមម្តងទៀត %s ក្នុងរយៈពេល %ss។" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Porter åpnes i cmux uten oppsett. Sett opp Cloud VPN for å bruke private adresser i andre apper." + "state": "translated", + "value": "[cmux] cmux bekreftet ikke SSH-oppstarten; prøver på nytt %s om %ss." } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Porty otwierają się w cmux bez konfiguracji. Aby używać prywatnych adresów w innych aplikacjach, skonfiguruj Cloud VPN." + "state": "translated", + "value": "[cmux] cmux nie potwierdził uruchomienia SSH; ponawianie próby %s za %ss." } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "As portas abrem no cmux sem configuração. Para usar endereços privados em outros apps, configure o Cloud VPN." + "state": "translated", + "value": "[cmux] o cmux não confirmou o início do SSH; tentando novamente %s em %ss." } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Порты открываются в cmux без настройки. Чтобы использовать приватные адреса в других приложениях, настройте Cloud VPN." + "state": "translated", + "value": "[cmux] cmux не подтвердил запуск SSH; повторная попытка %s через %ss." } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "เปิดพอร์ตใน cmux ได้โดยไม่ต้องตั้งค่า หากต้องการใช้ที่อยู่ส่วนตัวในแอปอื่น ให้ตั้งค่า Cloud VPN" + "state": "translated", + "value": "[cmux] cmux ไม่ยืนยันการเริ่มต้น SSH; กำลังลองใหม่ครั้งที่ %s ในอีก %s วินาที" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Bağlantı noktaları cmux içinde kurulum gerektirmeden açılır. Diğer uygulamalarda özel adresleri kullanmak için Cloud VPN’i kurun." + "state": "translated", + "value": "[cmux] cmux SSH başlatmasını onaylamadı; %s saniye içinde %s. deneme yapılıyor." } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Порти відкриваються в cmux без налаштування. Щоб використовувати приватні адреси в інших застосунках, налаштуйте Cloud VPN." + "state": "translated", + "value": "[cmux] cmux не підтвердив запуск SSH; повторна спроба %s через %s с." } } } }, - "cloud.ports.vpnOff.title": { + "machines.requiresPro.upgrade.short": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional: Cloud VPN" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Optional: Cloud-VPN" + "value": "Upgrade" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Facultatif : VPN Cloud" + "value": "ترقية" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "اختياري: Cloud VPN" + "value": "Upgraden" } }, "es": { "stringUnit": { "state": "translated", - "value": "Opcional: Cloud VPN" + "value": "Actualizar" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "選用:Cloud VPN" + "value": "Mettre à niveau" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "可选:云 VPN" + "value": "アップグレード" } }, "ko": { "stringUnit": { "state": "translated", - "value": "선택 사항: Cloud VPN" + "value": "업그레이드" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "任意:Cloud VPN" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Opcionalno: Cloud VPN" + "value": "升级" } }, - "da": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Valgfrit: Cloud VPN" + "state": "translated", + "value": "升級" } - }, - "it": { + } + } + }, + "machines.sessionRejected.signInAgain.short": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Facoltativo: Cloud VPN" + "state": "translated", + "value": "Sign In" } }, - "km": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "ជាជម្រើស៖ Cloud VPN" + "state": "translated", + "value": "تسجيل الدخول" } }, - "nb": { + "de": { "stringUnit": { - "state": "needs_review", - "value": "Valgfritt: Cloud VPN" + "state": "translated", + "value": "Anmelden" } }, - "pl": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "Opcjonalnie: Cloud VPN" + "state": "translated", + "value": "Iniciar sesión" } }, - "pt-BR": { + "fr": { "stringUnit": { - "state": "needs_review", - "value": "Opcional: Cloud VPN" + "state": "translated", + "value": "Se reconnecter" } }, - "ru": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Необязательно: Cloud VPN" + "state": "translated", + "value": "再サインイン" } }, - "th": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "ตัวเลือกเพิ่มเติม: Cloud VPN" + "state": "translated", + "value": "다시 로그인" } }, - "tr": { + "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "İsteğe bağlı: Cloud VPN" + "state": "translated", + "value": "重新登录" } }, - "uk": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Необов’язково: Cloud VPN" + "state": "translated", + "value": "重新登入" } } } }, - "cloud.vpn.setup.address.body": { + "machines.requiresPro.stale": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Each machine has its own private IP. Two machines may both expose port 3000, for example 10.40.0.10:3000 and 10.40.0.11:3000. Right-click a Cloud port and choose Copy Private Address URL after connecting. These addresses are private, not public share links." + "value": "Cloud machines need cmux Pro, showing last known" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Jede Maschine hat eine eigene private IP. Zwei Maschinen können beide Port 3000 verwenden, etwa 10.40.0.10:3000 und 10.40.0.11:3000. Klicken Sie nach dem Verbinden mit der rechten Maustaste auf einen Cloud-Port und wählen Sie URL der privaten Adresse kopieren. Diese Adressen sind privat und keine öffentlichen Freigabelinks." + "value": "تتطلب الأجهزة السحابية إصدار cmux Pro، يتم عرض آخر حالة معروفة" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Chaque machine a sa propre IP privée. Deux machines peuvent utiliser le port 3000, par exemple 10.40.0.10:3000 et 10.40.0.11:3000. Après connexion, faites un clic droit sur un port Cloud et choisissez Copier l’URL de l’adresse privée. Ces adresses sont privées, ce ne sont pas des liens publics de partage." + "value": "Cloud-Maschinen erfordern cmux Pro, zeige letzten bekannten Stand" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cada máquina tiene su propia IP privada. Dos máquinas pueden usar el puerto 3000, como 10.40.0.10:3000 y 10.40.0.11:3000. Después de conectar, haz clic derecho en un puerto Cloud y elige Copiar URL de dirección privada. Estas direcciones son privadas, no enlaces públicos para compartir." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "各マシンには個別のプライベートIPがあります。2台のマシンがどちらもポート3000を使えます(例:10.40.0.10:3000と10.40.0.11:3000)。接続後にCloudポートを右クリックし、「プライベートアドレスURLをコピー」を選びます。これらはプライベートアドレスで、公開共有リンクではありません。" + "value": "Las máquinas en la nube requieren cmux Pro, se muestra el último estado conocido" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "每台机器都有自己的私有 IP。两台机器可以同时使用端口 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。连接后右键点击 Cloud 端口,选择“复制私有地址 URL”。这些地址是私有地址,不是公开分享链接。" + "value": "Les machines Cloud nécessitent cmux Pro, affichage des dernières informations connues" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "每台機器都有自己的私有 IP。兩台機器可以同時使用連接埠 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。連線後對 Cloud 連接埠按右鍵,選擇「複製私有位址 URL」。這些位址是私有位址,不是公開分享連結。" + "value": "Cloud マシンには cmux Pro が必要です。最後の状態を表示中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "각 머신에는 고유한 비공개 IP가 있습니다. 두 머신 모두 포트 3000을 사용할 수 있습니다(예: 10.40.0.10:3000 및 10.40.0.11:3000). 연결 후 Cloud 포트를 오른쪽 클릭하고 비공개 주소 URL 복사를 선택하세요. 이 주소는 비공개이며 공개 공유 링크가 아닙니다." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لكل جهاز عنوان IP خاص به. يمكن لجهازين استخدام المنفذ 3000، مثل 10.40.0.10:3000 و10.40.0.11:3000. بعد الاتصال، انقر بزر الماوس الأيمن على منفذ Cloud واختر نسخ رابط العنوان الخاص. هذه عناوين خاصة وليست روابط مشاركة عامة." + "value": "클라우드 머신을 사용하려면 cmux Pro가 필요함, 마지막으로 확인된 상태 표시 중" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Svaka mašina ima svoju privatnu IP adresu. Dvije mašine mogu koristiti port 3000, na primjer 10.40.0.10:3000 i 10.40.0.11:3000. Nakon povezivanja kliknite desnim dugmetom na Cloud port i izaberite Kopiraj URL privatne adrese. Ovo su privatne adrese, a ne javne veze za dijeljenje." + "value": "云端机器需要 cmux Pro,显示的是最后已知状态" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Hver maskine har sin egen private IP. To maskiner kan begge bruge port 3000, f.eks. 10.40.0.10:3000 og 10.40.0.11:3000. Højreklik på en Cloud-port efter tilslutning, og vælg Kopiér URL til privat adresse. Adresserne er private, ikke offentlige delelinks." + "value": "雲端機器需要 cmux Pro,顯示上次已知的狀態" } - }, - "it": { + } + } + }, + "machines.sessionRejected.stale": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Ogni macchina ha il proprio IP privato. Due macchine possono usare entrambe la porta 3000, ad esempio 10.40.0.10:3000 e 10.40.0.11:3000. Dopo la connessione fai clic destro su una porta Cloud e scegli Copia URL indirizzo privato. Sono indirizzi privati, non link pubblici." + "value": "Sign-in needs a refresh, showing last known" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីននីមួយៗមាន IP ឯកជនផ្ទាល់ខ្លួន។ ម៉ាស៊ីនពីរអាចប្រើច្រក 3000 ដូចគ្នា ឧទាហរណ៍ 10.40.0.10:3000 និង 10.40.0.11:3000។ បន្ទាប់ពីភ្ជាប់ ចុចខាងស្តាំលើច្រក Cloud ហើយជ្រើស ចម្លង URL អាសយដ្ឋានឯកជន។ ទាំងនេះជាអាសយដ្ឋានឯកជន មិនមែនតំណចែករំលែកសាធារណៈទេ។" + "value": "يحتاج تسجيل الدخول إلى تحديث، يتم عرض آخر حالة معروفة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Hver maskin har sin egen private IP. To maskiner kan bruke port 3000, for eksempel 10.40.0.10:3000 og 10.40.0.11:3000. Høyreklikk en Cloud-port etter tilkobling og velg Kopier URL for privat adresse. Adressene er private, ikke offentlige delingslenker." + "value": "Anmeldung muss aktualisiert werden, zeige letzten bekannten Stand" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Każda maszyna ma własny prywatny adres IP. Dwie maszyny mogą używać portu 3000, na przykład 10.40.0.10:3000 i 10.40.0.11:3000. Po połączeniu kliknij prawym przyciskiem port Cloud i wybierz Kopiuj URL prywatnego adresu. To prywatne adresy, nie publiczne linki udostępniania." + "value": "Es necesario actualizar el inicio de sesión, se muestra el último estado conocido" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cada máquina tem seu próprio IP privado. Duas máquinas podem usar a porta 3000, por exemplo 10.40.0.10:3000 e 10.40.0.11:3000. Depois de conectar, clique com o botão direito em uma porta Cloud e escolha Copiar URL do endereço privado. Esses endereços são privados, não links públicos de compartilhamento." + "value": "La connexion doit être actualisée, affichage des dernières informations connues" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "У каждой машины свой частный IP. Две машины могут использовать порт 3000, например 10.40.0.10:3000 и 10.40.0.11:3000. После подключения щёлкните правой кнопкой мыши порт Cloud и выберите Скопировать URL частного адреса. Это частные адреса, а не публичные ссылки." + "value": "再サインインが必要です。最後の状態を表示中" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "แต่ละเครื่องมี IP ส่วนตัวของตนเอง สองเครื่องสามารถใช้พอร์ต 3000 ได้ เช่น 10.40.0.10:3000 และ 10.40.0.11:3000 หลังเชื่อมต่อ คลิกขวาที่พอร์ต Cloud แล้วเลือกคัดลอก URL ที่อยู่ส่วนตัว ที่อยู่เหล่านี้เป็นส่วนตัว ไม่ใช่ลิงก์สาธารณะ" + "value": "로그인 갱신 필요, 마지막으로 확인된 상태 표시 중" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Her makinenin kendi özel IP’si vardır. İki makine 3000 bağlantı noktasını kullanabilir; örneğin 10.40.0.10:3000 ve 10.40.0.11:3000. Bağlandıktan sonra bir Cloud portuna sağ tıklayın ve Özel Adres URL’sini Kopyala’yı seçin. Bunlar özel adreslerdir, herkese açık paylaşım bağlantıları değildir." + "value": "登录状态需要刷新,显示的是最后已知状态" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Кожна машина має власну приватну IP-адресу. Дві машини можуть використовувати порт 3000, наприклад 10.40.0.10:3000 і 10.40.0.11:3000. Після підключення клацніть правою кнопкою миші порт Cloud і виберіть Копіювати URL приватної адреси. Це приватні адреси, а не публічні посилання для спільного доступу." + "value": "登入狀態需要重新整理,顯示上次已知的狀態" } } } }, - "cloud.vpn.setup.cancel": { + "agent.claude.stopFailure.body.generic": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Abbrechen" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Annuler" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cancelar" + "value": "Claude Code stopped on an API error" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "Claude Code は API エラーで停止しました" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "Claude Code 因 API 错误而停止" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "Claude Code wurde wegen eines API-Fehlers gestoppt" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "Claude Code s'est arrêté sur une erreur d'API" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "توقف Claude Code بسبب خطأ في واجهة API" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Otkaži" + "value": "Claude Code se detuvo por un error de la API" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Annuller" + "value": "Claude Code 因 API 錯誤而停止" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Annulla" + "value": "Claude Code가 API 오류로 중지되었습니다" + } + } + } + }, + "agent.claude.stopFailure.status.apiError": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "API error" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "បោះបង់" + "value": "API エラー" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Avbryt" + "value": "API 错误" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Anuluj" + "value": "API-Fehler" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Erreur d'API" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Отменить" + "value": "خطأ في واجهة API" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "ยกเลิก" + "value": "Error de la API" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "İptal" + "value": "API 錯誤" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Скасувати" + "value": "API 오류" } } } }, - "cloud.vpn.setup.connect": { + "agent.claude.stopFailure.status.authentication": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connect Cloud VPN" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Cloud-VPN verbinden" - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Connecter le VPN Cloud" - } - }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Conectar VPN de Cloud" + "value": "Auth error" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VPNに接続" + "value": "認証エラー" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "连接 Cloud VPN" + "value": "认证错误" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "連接 Cloud VPN" + "value": "Authentifizierungsfehler" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 연결" + "value": "Erreur d'authentification" } }, "ar": { "stringUnit": { "state": "translated", - "value": "توصيل VPN الخاص بـ Cloud" + "value": "خطأ في المصادقة" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Poveži Cloud VPN" + "value": "Error de autenticación" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Forbind Cloud VPN" + "value": "驗證錯誤" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Connetti VPN Cloud" + "value": "인증 오류" + } + } + } + }, + "agent.claude.stopFailure.status.billing": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Billing error" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "ភ្ជាប់ Cloud VPN" + "value": "請求エラー" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Koble til Cloud VPN" + "value": "账单错误" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Połącz z Cloud VPN" + "value": "Abrechnungsfehler" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Conectar Cloud VPN" + "value": "Erreur de facturation" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Подключить Cloud VPN" + "value": "خطأ في الفوترة" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "เชื่อมต่อ Cloud VPN" + "value": "Error de facturación" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN’e bağlan" + "value": "帳單錯誤" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Підключити Cloud VPN" + "value": "결제 오류" } } } }, - "cloud.vpn.setup.connected": { + "agent.claude.stopFailure.status.connectionDropped": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connected" + "value": "Connection dropped" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Verbunden" + "value": "接続が切断されました" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Connecté" + "value": "连接已断开" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Conectada" + "value": "Verbindung abgebrochen" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "接続済み" + "value": "Connexion interrompue" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "已连接" + "value": "انقطع الاتصال" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Conexión perdida" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已連線" + "value": "連線已中斷" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결됨" + "value": "연결 끊김" + } + } + } + }, + "agent.claude.stopFailure.status.outputLimit": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Output limit" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "متصل" + "value": "出力上限" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Povezano" + "value": "输出上限" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Forbundet" + "value": "Ausgabelimit" } }, - "it": { + "fr": { "stringUnit": { "state": "translated", - "value": "Connessa" + "value": "Limite de sortie" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "បានភ្ជាប់" + "value": "حد المخرجات" } }, - "nb": { + "es": { "stringUnit": { "state": "translated", - "value": "Tilkoblet" + "value": "Límite de salida" } }, - "pl": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Połączono" + "value": "輸出上限" } }, - "pt-BR": { + "ko": { "stringUnit": { "state": "translated", - "value": "Conectada" + "value": "출력 한도" + } + } + } + }, + "agent.claude.stopFailure.status.overloaded": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "API overloaded" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Подключено" + "value": "API 過負荷" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "เชื่อมต่อแล้ว" + "value": "API 过载" } }, - "tr": { + "de": { "stringUnit": { "state": "translated", - "value": "Bağlandı" + "value": "API überlastet" } }, - "uk": { + "fr": { "stringUnit": { "state": "translated", - "value": "Підключено" + "value": "API surchargée" } - } - } - }, - "cloud.vpn.setup.disconnect": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "ar": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "واجهة API محمّلة فوق طاقتها" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "API sobrecargada" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "API 過載" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "API 과부하" + } + } + } + }, + "agent.claude.stopFailure.status.rateLimited": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Rate limited" } }, "ja": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "レート制限中" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "已限速" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "Ratenbegrenzt" } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "연결 해제" + "value": "Limite de requêtes atteinte" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "تم تقييد المعدل" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Prekini vezu" + "value": "Límite de frecuencia alcanzado" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Afbryd" + "value": "已限速" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Disconnetti" + "value": "속도 제한됨" + } + } + } + }, + "agent.claude.stopFailure.status.usageLimit": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Usage limit" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "ផ្តាច់" + "value": "使用量の上限" } }, - "nb": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Koble fra" + "value": "用量上限" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Rozłącz" + "value": "Nutzungslimit" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Limite d'utilisation" } }, - "ru": { + "ar": { "stringUnit": { "state": "translated", - "value": "Отключить" + "value": "حد الاستخدام" } }, - "th": { + "es": { "stringUnit": { "state": "translated", - "value": "ตัดการเชื่อมต่อ" + "value": "Límite de uso" } }, - "tr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Bağlantıyı kes" + "value": "用量上限" } }, - "uk": { + "ko": { "stringUnit": { "state": "translated", - "value": "Від’єднати" + "value": "사용량 한도" } } } }, - "cloud.vpn.setup.entry.subtitle": { + "agent.claude.stopFailure.status.usageLimitResets": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional private IP access for other apps" + "value": "Usage limit, resets %@" } }, - "de": { + "ja": { "stringUnit": { "state": "translated", - "value": "Optionaler Zugriff auf private IPs für andere Apps" + "value": "使用量の上限、%@ にリセット" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Accès facultatif aux IP privées pour les autres apps" + "value": "用量上限,%@ 重置" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Acceso opcional a IP privadas para otras apps" + "value": "Nutzungslimit, Reset %@" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "ほかのアプリからプライベートIPへアクセスする任意の設定" + "value": "Limite d'utilisation, réinitialisation %@" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "为其他应用提供可选的私有 IP 访问" + "value": "حد الاستخدام، يُعاد التعيين %@" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Límite de uso, se restablece %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "為其他 App 提供選用的私有 IP 存取" + "value": "用量上限,%@ 重設" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 앱의 비공개 IP 접근을 위한 선택 설정" + "value": "사용량 한도, %@에 초기화" } - }, + } + } + }, + "settings.app.reorderOnNotification.mode.agentActivity": { + "extractionState": "manual", + "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "وصول اختياري إلى عناوين IP الخاصة للتطبيقات الأخرى" + "value": "نشاط الوكيل" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Opcionalni pristup privatnim IP adresama za druge aplikacije" + "value": "Aktivnost agenata" } }, "da": { "stringUnit": { "state": "translated", - "value": "Valgfri privat IP-adgang for andre apps" + "value": "Agentaktivitet" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Agentenaktivität" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Agent Activity" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Actividad de agentes" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Activité des agents" } }, "it": { "stringUnit": { "state": "translated", - "value": "Accesso facoltativo agli IP privati per altre app" + "value": "Attività degli agenti" } }, - "km": { + "ja": { "stringUnit": { "state": "translated", - "value": "ចូលប្រើ IP ឯកជនសម្រាប់កម្មវិធីផ្សេងៗជាជម្រើស" + "value": "エージェントのアクティビティ" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "에이전트 활동" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Valgfri privat IP-tilgang for andre apper" + "value": "Agentaktivitet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opcjonalny dostęp innych aplikacji do prywatnych adresów IP" + "value": "Aktywność agentów" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Acesso opcional a IPs privados para outros apps" + "value": "Atividade dos agentes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Необязательный доступ других приложений к частным IP" + "value": "Активность агентов" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเข้าถึง IP ส่วนตัวสำหรับแอปอื่นแบบไม่บังคับ" + "value": "กิจกรรมของเอเจนต์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Diğer uygulamalar için isteğe bağlı özel IP erişimi" + "value": "Ajan etkinliği" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Необов’язковий доступ інших програм до приватних IP" - } - } - } - }, - "cloud.vpn.setup.failed": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Needs attention" + "value": "Активність агентів" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Aktion erforderlich" + "value": "代理活动" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Action requise" + "value": "代理活動" } - }, - "es": { + } + } + }, + "settings.app.reorderOnNotification.mode.notifications": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Requiere atención" + "value": "الإشعارات" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "対応が必要" + "value": "Obavještenja" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "需要处理" + "value": "Notifikationer" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "需要處理" + "value": "Benachrichtigungen" } }, - "ko": { + "en": { "stringUnit": { "state": "translated", - "value": "조치 필요" + "value": "Notifications" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يتطلب إجراءً" + "value": "Notificaciones" } }, - "bs": { + "fr": { "stringUnit": { "state": "translated", - "value": "Potrebna pažnja" + "value": "Sur notification" } }, - "da": { + "it": { "stringUnit": { "state": "translated", - "value": "Kræver opmærksomhed" + "value": "Notifiche" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Richiede attenzione" + "value": "通知" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "ត្រូវការការយកចិត្តទុកដាក់" + "value": "알림" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Krever handling" + "value": "Varsler" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wymaga uwagi" + "value": "Powiadomienia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Requer atenção" + "value": "Notificações" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Требуется действие" + "value": "Уведомления" } }, "th": { "stringUnit": { "state": "translated", - "value": "ต้องดำเนินการ" + "value": "การแจ้งเตือน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İlgilenilmeli" + "value": "Bildirimler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Потрібна увага" - } - } - } - }, - "cloud.vpn.setup.off": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Off" + "value": "Сповіщення" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Aus" + "value": "通知" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Désactivé" + "value": "通知" } - }, - "es": { + } + } + }, + "settings.app.reorderOnNotification.mode.off": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "Desactivada" + "value": "إيقاف" } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "オフ" + "value": "Isključeno" } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "已关闭" + "value": "Fra" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "已關閉" + "value": "Aus" } }, - "ko": { + "en": { "stringUnit": { "state": "translated", - "value": "꺼짐" + "value": "Off" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "متوقف" + "value": "Desactivado" } }, - "bs": { + "fr": { "stringUnit": { "state": "translated", - "value": "Isključeno" + "value": "Désactivé" } }, - "da": { + "it": { "stringUnit": { "state": "translated", - "value": "Fra" + "value": "Disattivato" } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "Disattivata" + "value": "オフ" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "បិទ" + "value": "끔" } }, "nb": { @@ -573341,19 +572054,19 @@ "pl": { "stringUnit": { "state": "translated", - "value": "Wyłączona" + "value": "Wyłączone" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desativada" + "value": "Desativado" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выключено" + "value": "Выкл." } }, "th": { @@ -573373,10693 +572086,10968 @@ "state": "translated", "value": "Вимкнено" } - } - } - }, - "cloud.vpn.setup.openUnavailable": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cloud VPN setup is unavailable" - } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN-Einrichtung ist nicht verfügbar" + "value": "关闭" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "La configuration du VPN Cloud est indisponible" + "value": "關閉" } - }, - "es": { + } + } + }, + "settings.app.reorderOnNotification.modeSubtitle": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "La configuración de VPN de Cloud no está disponible" + "value": "ينقل مساحات العمل إلى الأعلى عندما تتلقى إشعارًا. مع نشاط الوكيل، ينقلها أيضًا عندما ترسل مطالبة أو ينهي وكيل دورة أو يحتاج إلى إدخال أو يفشل، لكن ليس أبدًا أثناء وجود المؤشر فوق الشريط الجانبي. الإيقاف يحافظ على ثبات مواضع الاختصارات." } }, - "ja": { + "bs": { "stringUnit": { "state": "translated", - "value": "Cloud VPN設定は利用できません" + "value": "Pomjera radne prostore na vrh kada prime obavještenje. Aktivnost agenata ih pomjera i kada pošaljete upit ili agent završi potez, treba unos ili ne uspije, ali nikad dok je pokazivač iznad bočne trake. Isključeno čuva stabilne pozicije prečica." } }, - "zh-Hans": { + "da": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 设置不可用" + "value": "Flytter arbejdsområder til toppen, når de modtager en notifikation. Agentaktivitet flytter dem også, når du sender en prompt eller en agent afslutter en tur, har brug for input eller fejler, men aldrig mens markøren er over sidepanelet. Fra holder genvejspositionerne stabile." } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "無法使用 Cloud VPN 設定" + "value": "Verschiebt Workspaces nach oben, wenn sie eine Benachrichtigung erhalten. Mit Agentenaktivität auch dann, wenn Sie einen Prompt senden oder ein Agent einen Durchlauf beendet, eine Eingabe braucht oder fehlschlägt, aber nie, während der Zeiger über der Seitenleiste ist. Aus hält die Positionen der Tastenkürzel stabil." } }, - "ko": { + "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN 설정을 사용할 수 없습니다" + "value": "Move workspaces to the top when they receive a notification. Agent Activity also moves them when you send a prompt or an agent finishes a turn, needs input, or fails, but never while you point at the sidebar. Off keeps shortcut positions stable." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "إعداد VPN الخاص بـ Cloud غير متاح" + "value": "Mueve los espacios de trabajo arriba cuando reciben una notificación. Con Actividad de agentes, también cuando envías un prompt o un agente termina un turno, necesita una respuesta o falla, pero nunca mientras el puntero está sobre la barra lateral. Desactivado mantiene estables las posiciones de los atajos." } }, - "bs": { + "fr": { "stringUnit": { "state": "translated", - "value": "Podešavanje Cloud VPN-a nije dostupno" + "value": "Place les espaces de travail en haut lorsqu’ils reçoivent une notification. Avec Activité des agents, aussi lorsque vous envoyez un prompt ou qu’un agent termine un tour, attend une saisie ou échoue, mais jamais pendant que le pointeur survole la barre latérale. Désactivé garde les positions des raccourcis stables." } }, - "da": { + "it": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-opsætning er ikke tilgængelig" + "value": "Sposta gli spazi di lavoro in cima quando ricevono una notifica. Attività degli agenti li sposta anche quando invii un prompt o un agente termina un turno, attende un input o fallisce, ma mai mentre il puntatore è sulla barra laterale. Disattivato mantiene stabili le posizioni delle scorciatoie." } }, - "it": { + "ja": { "stringUnit": { "state": "translated", - "value": "La configurazione VPN Cloud non è disponibile" + "value": "通知を受け取ったワークスペースを先頭に移動します。「エージェントのアクティビティ」では、プロンプトを送信したときや、エージェントがターンを終えたとき、入力を待っているとき、失敗したときにも移動しますが、ポインタがサイドバー上にある間は移動しません。「オフ」ではショートカットの位置が変わりません。" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "ការរៀបចំ Cloud VPN មិនអាចប្រើបាន" + "value": "알림을 받으면 워크스페이스를 맨 위로 옮깁니다. 에이전트 활동을 선택하면 프롬프트를 보내거나 에이전트가 턴을 마치거나 입력이 필요하거나 실패할 때도 옮기지만, 포인터가 사이드바 위에 있을 때는 옮기지 않습니다. 끔은 단축키 위치를 고정합니다." } }, "nb": { "stringUnit": { "state": "translated", - "value": "Cloud VPN-oppsett er ikke tilgjengelig" + "value": "Flytter arbeidsområder til toppen når de mottar et varsel. Agentaktivitet flytter dem også når du sender en ledetekst eller en agent fullfører en runde, trenger input eller feiler, men aldri mens pekeren er over sidefeltet. Av holder snarveisposisjonene stabile." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Konfiguracja Cloud VPN jest niedostępna" + "value": "Przenosi obszary robocze na górę, gdy otrzymają powiadomienie. Aktywność agentów przenosi je także, gdy wyślesz prompt lub agent zakończy turę, potrzebuje danych lub zakończy się błędem, ale nigdy, gdy wskaźnik jest nad paskiem bocznym. Wyłączone zachowuje stałe pozycje skrótów." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A configuração do Cloud VPN não está disponível" + "value": "Move os espaços de trabalho para o topo quando recebem uma notificação. Atividade dos agentes também os move quando você envia um prompt ou um agente termina um turno, precisa de uma resposta ou falha, mas nunca enquanto o ponteiro está sobre a barra lateral. Desativado mantém as posições dos atalhos estáveis." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Настройка Cloud VPN недоступна" + "value": "Перемещает рабочие области наверх, когда они получают уведомление. «Активность агентов» также перемещает их, когда вы отправляете запрос или агент завершает ход, ждёт ввода или завершается с ошибкой, но никогда, пока указатель находится над боковой панелью. «Выкл.» сохраняет позиции сочетаний клавиш." } }, "th": { "stringUnit": { "state": "translated", - "value": "การตั้งค่า Cloud VPN ไม่พร้อมใช้งาน" + "value": "ย้ายเวิร์กสเปซขึ้นด้านบนเมื่อได้รับการแจ้งเตือน กิจกรรมของเอเจนต์จะย้ายเมื่อคุณส่งพรอมต์หรือเอเจนต์จบรอบ ต้องการข้อมูล หรือล้มเหลวด้วย แต่จะไม่ย้ายขณะที่ตัวชี้อยู่เหนือแถบด้านข้าง ปิดจะคงตำแหน่งของทางลัดไว้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN kurulumu kullanılamıyor" + "value": "Bildirim aldıklarında çalışma alanlarını en üste taşır. Ajan etkinliği, bir istem gönderdiğinizde, bir ajan turunu bitirdiğinde, girdi beklediğinde veya başarısız olduğunda da taşır, ancak işaretçi kenar çubuğunun üzerindeyken asla taşımaz. Kapalı, kısayol konumlarını sabit tutar." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Налаштування Cloud VPN недоступне" - } - } - } - }, - "cloud.vpn.setup.permission.body": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The VPN software is included in cmux. You do not need another app. macOS may require your password or Touch ID during approval." + "value": "Переміщує робочі області вгору, коли вони отримують сповіщення. «Активність агентів» також переміщує їх, коли ви надсилаєте запит або агент завершує хід, чекає на введення або завершується з помилкою, але ніколи, поки вказівник над бічною панеллю. «Вимкнено» зберігає позиції скорочень." } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Die VPN-Software ist in cmux enthalten. Sie brauchen keine weitere App. macOS kann bei der Genehmigung Ihr Passwort oder Touch ID verlangen." + "value": "工作区收到通知时移到顶部。选择“代理活动”时,你发送提示词或代理完成一轮、需要输入或失败时也会移动,但指针停在侧边栏上时绝不移动。关闭可让快捷键位置保持不变。" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Le logiciel VPN est inclus dans cmux. Aucune autre app n’est nécessaire. macOS peut demander votre mot de passe ou Touch ID lors de l’autorisation." + "value": "工作區收到通知時移到頂部。選擇「代理活動」時,你送出提示詞或代理完成一輪、需要輸入或失敗時也會移動,但指標停在側邊欄上時絕不移動。關閉可讓快捷鍵位置保持不變。" } - }, - "es": { + } + } + }, + "cli.restore.notice.routedLauncherUnavailable": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "El software VPN está incluido en cmux. No necesitas otra app. macOS puede solicitar tu contraseña o Touch ID durante la autorización." + "value": "restore: this session was started through the routed launcher '%@', which is not on PATH. Resuming the agent directly instead." } }, "ja": { "stringUnit": { "state": "translated", - "value": "VPNソフトウェアはcmuxに含まれています。別のアプリは不要です。承認時にmacOSがパスワードまたはTouch IDを求めることがあります。" + "value": "restore: このセッションはルーティングされたランチャー「%@」経由で開始されましたが、PATH にありません。代わりにエージェントを直接再開します。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 已包含 VPN 软件,无需其他应用。批准时,macOS 可能要求您输入密码或使用触控 ID。" + "value": "restore:此会话是通过路由启动器“%@”启动的,但它不在 PATH 中。将改为直接恢复该代理。" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux 已包含 VPN 軟體,不需要其他 App。核准時,macOS 可能要求您輸入密碼或使用 Touch ID。" + "value": "restore: Diese Sitzung wurde über den weitergeleiteten Launcher „%@“ gestartet, der nicht im PATH liegt. Der Agent wird stattdessen direkt fortgesetzt." } }, - "ko": { + "fr": { "stringUnit": { "state": "translated", - "value": "VPN 소프트웨어는 cmux에 포함되어 있습니다. 다른 앱은 필요하지 않습니다. 승인 시 macOS에서 암호 또는 Touch ID를 요청할 수 있습니다." + "value": "restore : cette session a été lancée via le lanceur routé « %@ », qui est introuvable dans le PATH. Reprise directe de l'agent à la place." } }, "ar": { "stringUnit": { "state": "translated", - "value": "برنامج VPN مضمن في cmux. لا تحتاج إلى تطبيق آخر. قد يطلب macOS كلمة المرور أو Touch ID أثناء الموافقة." + "value": "restore: بدأت هذه الجلسة عبر المشغّل الموجَّه '%@'، وهو غير موجود في PATH. سيتم استئناف الوكيل مباشرةً بدلاً من ذلك." } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "VPN softver je uključen u cmux. Nije potrebna druga aplikacija. macOS može zatražiti lozinku ili Touch ID tokom odobravanja." + "value": "restore: esta sesión se inició mediante el lanzador enrutado '%@', que no está en el PATH. Se reanudará el agente directamente." } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "VPN-softwaren er inkluderet i cmux. Du behøver ingen anden app. macOS kan bede om din adgangskode eller Touch ID under godkendelsen." + "value": "restore:此工作階段是透過路由啟動器「%@」啟動的,但它不在 PATH 中。將改為直接繼續該代理程式。" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Il software VPN è incluso in cmux. Non serve un’altra app. macOS potrebbe chiedere la password o Touch ID durante l’autorizzazione." + "value": "restore: 이 세션은 라우팅된 런처 '%@'를 통해 시작되었지만 PATH에 없습니다. 대신 에이전트를 직접 재개합니다." + } + } + } + }, + "sidebar.extensions.action.noSpaceForPane": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No space for new pane" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "កម្មវិធី VPN មាននៅក្នុង cmux។ អ្នកមិនត្រូវការកម្មវិធីផ្សេងទៀតទេ។ macOS អាចស្នើពាក្យសម្ងាត់ ឬ Touch ID ក្នុងពេលអនុម័ត។" + "value": "لا توجد مساحة للوحة جديدة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "VPN-programvaren er inkludert i cmux. Du trenger ingen annen app. macOS kan be om passord eller Touch ID under godkjenningen." + "value": "Kein Platz für einen neuen Bereich" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Oprogramowanie VPN jest zawarte w cmux. Nie potrzebujesz innej aplikacji. macOS może poprosić o hasło lub Touch ID podczas zatwierdzania." + "value": "No hay espacio para un panel nuevo" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "O software VPN vem incluído no cmux. Você não precisa de outro app. O macOS pode pedir sua senha ou Touch ID durante a aprovação." + "value": "Pas de place pour un nouveau panneau" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "VPN-программа уже входит в cmux. Другие приложения не нужны. Во время подтверждения macOS может запросить пароль или Touch ID." + "value": "新しいペインを置く場所がありません" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ซอฟต์แวร์ VPN รวมอยู่ใน cmux แล้ว ไม่ต้องใช้แอปอื่น macOS อาจขอรหัสผ่านหรือ Touch ID ระหว่างการอนุมัติ" + "value": "새 창을 위한 공간이 없습니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "VPN yazılımı cmux içinde bulunur. Başka bir uygulama gerekmez. macOS onay sırasında parolanızı veya Touch ID’yi isteyebilir." + "value": "没有空间容纳新窗格" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Програмне забезпечення VPN входить до cmux. Інша програма не потрібна. Під час схвалення macOS може попросити пароль або Touch ID." + "value": "沒有空間容納新窗格" } } } }, - "cloud.vpn.setup.status.title": { + "cli.focus.defaultHelp": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private network status" + "value": "Default: focus when run interactively, stay in the background when run by an agent or script." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "既定: 対話的に実行した場合はフォーカスし、エージェントやスクリプトから実行した場合はバックグラウンドのままにします。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Status des privaten Netzwerks" + "value": "Standard: bei interaktiver Ausführung fokussieren, bei Ausführung durch einen Agenten oder ein Skript im Hintergrund bleiben." } }, "fr": { "stringUnit": { "state": "translated", - "value": "État du réseau privé" + "value": "Par défaut : prend le focus en exécution interactive, reste en arrière-plan quand un agent ou un script l’exécute." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "الافتراضي: التركيز عند التشغيل التفاعلي، والبقاء في الخلفية عند التشغيل بواسطة وكيل أو برنامج نصي." } }, "es": { "stringUnit": { "state": "translated", - "value": "Estado de la red privada" + "value": "Predeterminado: enfoca al ejecutarse de forma interactiva y se queda en segundo plano cuando lo ejecuta un agente o un script." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "プライベートネットワークの状態" + "value": "預設:互動執行時取得焦點;由代理程式或指令稿執行時保持在背景。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "私有网络状态" + "value": "默认:交互式运行时获得焦点;由代理或脚本运行时保持在后台。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "私有網路狀態" + "value": "기본값: 대화형으로 실행하면 포커스를 가져오고, 에이전트나 스크립트가 실행하면 백그라운드에 머뭅니다." + } + } + } + }, + "cli.help.openFocusFlags": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Focus:\n --focus Switch to the new workspace\n --no-focus Open it in the background" } }, - "ko": { + "ja": { "stringUnit": { "state": "translated", - "value": "비공개 네트워크 상태" + "value": "フォーカス:\n --focus 新しいワークスペースに切り替えます\n --no-focus バックグラウンドで開きます" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Fokus:\n --focus Zum neuen Workspace wechseln\n --no-focus Im Hintergrund öffnen" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Focus :\n --focus Bascule vers le nouvel espace de travail\n --no-focus L’ouvre en arrière-plan" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حالة الشبكة الخاصة" + "value": "التركيز:\n --focus ينتقل إلى مساحة العمل الجديدة\n --no-focus يفتحها في الخلفية" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Status privatne mreže" + "value": "Foco:\n --focus Cambia al nuevo espacio de trabajo\n --no-focus Lo abre en segundo plano" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Status for privat netværk" + "value": "焦點:\n --focus 切換到新的工作區\n --no-focus 在背景開啟" } }, - "it": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Stato della rete privata" + "value": "焦点:\n --focus 切换到新的工作区\n --no-focus 在后台打开" } }, - "km": { + "ko": { "stringUnit": { "state": "translated", - "value": "ស្ថានភាពបណ្តាញឯកជន" + "value": "포커스:\n --focus 새 워크스페이스로 전환합니다\n --no-focus 백그라운드에서 엽니다" + } + } + } + }, + "settings.app.compactAgentStatus": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Compact Agent Status" } }, - "nb": { + "ar": { "stringUnit": { "state": "translated", - "value": "Status for privat nettverk" + "value": "حالة الوكيل المختصرة" } }, - "pl": { + "de": { "stringUnit": { "state": "translated", - "value": "Stan sieci prywatnej" + "value": "Kompakter Agentenstatus" } }, - "pt-BR": { + "es": { "stringUnit": { "state": "translated", - "value": "Status da rede privada" + "value": "Estado de agente compacto" } }, - "ru": { + "fr": { "stringUnit": { "state": "translated", - "value": "Состояние частной сети" + "value": "Statut d’agent compact" } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "สถานะเครือข่ายส่วนตัว" + "value": "エージェント状態のコンパクト表示" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Özel ağ durumu" + "value": "간결한 에이전트 상태" } }, - "uk": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Стан приватної мережі" + "value": "精简代理状态" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "精簡代理狀態" } } } }, - "cloud.vpn.setup.title": { + "settings.app.compactAgentStatus.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "Show a workspace's agent, unread and pull request state as one colored icon before the title instead of separate rows. Hover the icon for details." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud-VPN" + "value": "إظهار حالة الوكيل والعناصر غير المقروءة وطلب السحب لمساحة العمل كأيقونة ملونة واحدة قبل العنوان بدلاً من صفوف منفصلة. مرّر المؤشر فوق الأيقونة لعرض التفاصيل." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "value": "Agenten-, Ungelesen- und Pull-Request-Status eines Workspace als ein farbiges Symbol vor dem Titel anzeigen statt in eigenen Zeilen. Details erscheinen, wenn du den Zeiger über das Symbol bewegst." } }, "es": { "stringUnit": { "state": "translated", - "value": "VPN de Cloud" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "クラウドVPN" + "value": "Mostrar el estado del agente, lo no leído y la pull request de un espacio de trabajo como un único icono de color antes del título, en lugar de filas separadas. Pasa el cursor sobre el icono para ver los detalles." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "云端 VPN" + "value": "Afficher l’état de l’agent, des éléments non lus et de la pull request d’un espace de travail sous forme d’une seule icône colorée avant le titre, au lieu de lignes distinctes. Survolez l’icône pour voir les détails." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "雲端 VPN" + "value": "ワークスペースのエージェント、未読、プルリクエストの状態を、個別の行ではなくタイトルの前の色付きアイコン1つで示します。詳細はアイコンにポインタを合わせると表示されます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "클라우드 VPN" - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "شبكة Cloud الخاصة" + "value": "워크스페이스의 에이전트, 읽지 않음, 풀 리퀘스트 상태를 별도의 줄이 아니라 제목 앞의 색상 아이콘 하나로 나타냅니다. 자세한 내용은 아이콘 위에 포인터를 올려 확인하세요." } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "用标题前的单个彩色图标表示工作区的代理、未读和拉取请求状态,而不是各自占一行。将指针悬停在图标上可查看详细信息。" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "以標題前的單一彩色圖示表示工作區的代理、未讀與拉取請求狀態,而非各自佔一行。將游標移到圖示上可查看詳細資訊。" } - }, - "it": { + } + } + }, + "settings.search.alias.setting.app.compact-agent-status": { + "extractionState": "manual", + "localizations": { + "ar": { "stringUnit": { "state": "translated", - "value": "VPN Cloud" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex مختصر وكيل حالة أيقونة سطر العنوان" } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex kompakt Agent Status Symbol Titelzeile" } }, - "nb": { + "en": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compacto agente estado icono línea de título" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex compact agent statut icône ligne de titre" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex コンパクト エージェント 状態 アイコン タイトル行" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 간결 에이전트 상태 아이콘 제목 줄" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精简 代理 状态 图标 标题行" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud VPN" + "value": "sidebar.compactAgentStatus compact agent status running needs input glyph icon title line dense claude codex 精簡 代理 狀態 圖示 標題列" } } } }, - "cloud.vpn.setup.unavailable": { + "sidebar.agentStatus.glyph.tooltip": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This copy of cmux does not include a signed VPN extension. Use a cmux release with Cloud VPN support. Cloud terminals, Ports, and Desktop remain available without the VPN." + "value": "%1$@: %2$@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Diese cmux-Version enthält keine signierte VPN-Erweiterung. Verwenden Sie eine cmux-Version mit Cloud-VPN-Unterstützung. Cloud-Terminals, Ports und Desktop bleiben ohne VPN verfügbar." + "value": "%1$@: %2$@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Cette copie de cmux ne contient pas d’extension VPN signée. Utilisez une version de cmux qui prend en charge le VPN Cloud. Les terminaux Cloud, Ports et Bureau restent disponibles sans VPN." + "value": "%1$@: %2$@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta copia de cmux no incluye una extensión VPN firmada. Usa una versión de cmux compatible con VPN de Cloud. Los terminales Cloud, Puertos y Escritorio siguen disponibles sin VPN." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このcmuxには署名済みのVPN機能拡張が含まれていません。Cloud VPN対応のcmuxリリースを使用してください。Cloudのターミナル、ポート、デスクトップはVPNなしでも使えます。" + "value": "%1$@: %2$@" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "此 cmux 副本未包含已签名的 VPN 扩展。请使用支持 Cloud VPN 的 cmux 版本。Cloud 终端、端口和桌面无需 VPN 仍可使用。" + "value": "%1$@ : %2$@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此 cmux 副本未包含已簽署的 VPN 延伸功能。請使用支援 Cloud VPN 的 cmux 版本。Cloud 終端機、連接埠和桌面不需要 VPN 仍可使用。" + "value": "%1$@:%2$@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 cmux에는 서명된 VPN 확장이 포함되어 있지 않습니다. Cloud VPN을 지원하는 cmux 릴리스를 사용하세요. Cloud 터미널, 포트 및 데스크탑은 VPN 없이도 사용할 수 있습니다." - } - }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "لا تتضمن هذه النسخة من cmux امتداد VPN موقعًا. استخدم إصدار cmux يدعم VPN الخاص بـ Cloud. تظل طرفيات Cloud والمنافذ وسطح المكتب متاحة بدون VPN." + "value": "%1$@: %2$@" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Ova kopija cmux-a nema potpisani VPN dodatak. Koristite cmux izdanje sa Cloud VPN podrškom. Cloud terminali, portovi i radna površina ostaju dostupni bez VPN-a." + "value": "%1$@:%2$@" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Denne cmux-kopi indeholder ikke en signeret VPN-udvidelse. Brug en cmux-udgave med Cloud VPN-understøttelse. Cloud-terminaler, porte og skrivebord er stadig tilgængelige uden VPN." + "value": "%1$@:%2$@" } - }, - "it": { + } + } + }, + "sidebar.compactStatus.profile": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Questa copia di cmux non include un’estensione VPN firmata. Usa una versione di cmux con supporto Cloud VPN. Terminali Cloud, porte e desktop restano disponibili senza VPN." + "value": "Profile" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux ច្បាប់នេះមិនមានផ្នែកបន្ថែម VPN ដែលបានចុះហត្ថលេខាទេ។ ប្រើកំណែ cmux ដែលគាំទ្រ Cloud VPN។ Terminal, Ports និង Desktop របស់ Cloud នៅតែប្រើបានដោយគ្មាន VPN។" + "value": "الملف الشخصي" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Denne cmux-kopien har ingen signert VPN-utvidelse. Bruk en cmux-versjon med Cloud VPN-støtte. Cloud-terminaler, porter og skrivebord er tilgjengelige uten VPN." + "value": "Profil" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Ta kopia cmux nie zawiera podpisanego rozszerzenia VPN. Użyj wydania cmux z obsługą Cloud VPN. Terminale Cloud, porty i pulpit pozostają dostępne bez VPN." + "value": "Perfil" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Esta cópia do cmux não inclui uma extensão VPN assinada. Use uma versão do cmux com suporte a Cloud VPN. Terminais Cloud, portas e área de trabalho continuam disponíveis sem VPN." + "value": "Profil" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "В этой копии cmux нет подписанного VPN-расширения. Используйте выпуск cmux с поддержкой Cloud VPN. Cloud-терминалы, порты и рабочий стол доступны без VPN." + "value": "プロファイル" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux รุ่นนี้ไม่มีส่วนขยาย VPN ที่ลงนามแล้ว ใช้รุ่น cmux ที่รองรับ Cloud VPN เทอร์มินัล Cloud พอร์ต และเดสก์ท็อปยังใช้ได้โดยไม่ต้องมี VPN" + "value": "프로필" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Bu cmux kopyasında imzalı VPN uzantısı bulunmuyor. Cloud VPN destekli bir cmux sürümü kullanın. Cloud terminalleri, portlar ve masaüstü VPN olmadan da kullanılabilir." + "value": "配置文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ця копія cmux не містить підписаного VPN-розширення. Використовуйте випуск cmux із підтримкою Cloud VPN. Cloud-термінали, порти й робочий стіл доступні без VPN." + "value": "設定檔" } } } }, - "cloud.vpn.setup.waiting": { + "terminal.clipboardReadConfirmation.deny": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "Deny" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "رفض" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "En attente" + "value": "Ablehnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "En espera" + "value": "Denegar" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "待機中" + "value": "Refuser" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "拒否" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "等待中" + "value": "거부" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "대기 중" + "value": "拒绝" } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "قيد الانتظار" + "value": "拒絕" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Čekanje" + "value": "Odbij" } }, "da": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "Afvis" } }, "it": { "stringUnit": { "state": "translated", - "value": "In attesa" + "value": "Nega" } }, "km": { "stringUnit": { "state": "translated", - "value": "កំពុងរង់ចាំ" + "value": "បដិសេធ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Venter" + "value": "Avslå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Oczekiwanie" + "value": "Odmów" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Aguardando" + "value": "Negar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ожидание" + "value": "Запретить" } }, "th": { "stringUnit": { "state": "translated", - "value": "กำลังรอ" + "value": "ปฏิเสธ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bekliyor" + "value": "Reddet" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Очікування" + "value": "Заборонити" } } } }, - "cloudTree.ports.action.wake": { + "terminal.clipboardReadConfirmation.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wake Machine" + "value": "A program in this terminal wants to read your clipboard. Allow it only if you trust the program." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Maschine aktivieren" + "value": "يريد برنامج في هذه الطرفية قراءة الحافظة. اسمح بذلك فقط إذا كنت تثق بالبرنامج." } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Réveiller la machine" + "value": "Ein Programm in diesem Terminal möchte deine Zwischenablage lesen. Erlaube es nur, wenn du dem Programm vertraust." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "إيقاظ الجهاز" + "value": "Un programa de esta terminal quiere leer tu portapapeles. Permítelo solo si confías en el programa." } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Activar máquina" + "value": "Un programme de ce terminal veut lire votre presse-papiers. Ne l’autorisez que si vous faites confiance à ce programme." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "喚醒機器" + "value": "このターミナルのプログラムがクリップボードを読み取ろうとしています。信頼できるプログラムの場合にのみ許可してください。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "唤醒机器" + "value": "이 터미널의 프로그램이 클립보드를 읽으려고 합니다. 프로그램을 신뢰할 수 있을 때만 허용하세요." } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "머신 깨우기" + "value": "此终端中的程序想要读取你的剪贴板。只有在你信任该程序时才允许。" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "マシンを起動" + "value": "此終端機中的程式想要讀取你的剪貼簿。只有在你信任該程式時才允許。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Probudi mašinu" + "value": "Program u ovom terminalu želi čitati vaš međuspremnik. Dozvolite samo ako vjerujete programu." } }, "da": { "stringUnit": { "state": "translated", - "value": "Væk maskine" + "value": "Et program i denne terminal vil læse din udklipsholder. Tillad det kun, hvis du har tillid til programmet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Riattiva macchina" + "value": "Un programma in questo terminale vuole leggere gli appunti. Consentilo solo se ti fidi del programma." } }, "km": { "stringUnit": { "state": "translated", - "value": "ដាស់ម៉ាស៊ីន" + "value": "កម្មវិធីក្នុងស្ថានីយនេះចង់អានក្ដារតម្បៀតខ្ទាស់របស់អ្នក។ អនុញ្ញាតតែបើអ្នកទុកចិត្តកម្មវិធីនេះ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vekk maskin" + "value": "Et program i denne terminalen vil lese utklippstavlen din. Tillat det bare hvis du stoler på programmet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybudź maszynę" + "value": "Program w tym terminalu chce odczytać schowek. Zezwól tylko, jeśli ufasz temu programowi." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Despertar máquina" + "value": "Um programa neste terminal quer ler sua área de transferência. Permita somente se você confiar no programa." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разбудить машину" + "value": "Программа в этом терминале хочет прочитать буфер обмена. Разрешайте только программам, которым доверяете." } }, "th": { "stringUnit": { "state": "translated", - "value": "ปลุกเครื่อง" + "value": "โปรแกรมในเทอร์มินัลนี้ต้องการอ่านคลิปบอร์ดของคุณ อนุญาตเฉพาะเมื่อคุณเชื่อถือโปรแกรมนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Makineyi uyandır" + "value": "Bu terminaldeki bir program panonuzu okumak istiyor. Yalnızca programa güveniyorsanız izin verin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Розбудити машину" + "value": "Програма в цьому терміналі хоче прочитати ваш буфер обміну. Дозволяйте, лише якщо довіряєте програмі." } } } }, - "cloudTree.ports.asleep.detail": { + "terminal.clipboardReadConfirmation.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wake the machine to check its services. cmux’s in-app forwarding does not need Cloud VPN." + "value": "Allow Clipboard Access?" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Aktivieren Sie die Maschine, um ihre Dienste zu prüfen. Die Weiterleitung in cmux benötigt kein Cloud-VPN." + "value": "السماح بالوصول إلى الحافظة؟" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Réveillez la machine pour vérifier ses services. Le transfert intégré à cmux ne nécessite pas de VPN Cloud." + "value": "Zugriff auf die Zwischenablage erlauben?" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "أيقظ الجهاز لفحص خدماته. لا تحتاج إعادة التوجيه داخل cmux إلى Cloud VPN." + "value": "¿Permitir el acceso al portapapeles?" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Activa la máquina para comprobar sus servicios. El reenvío integrado de cmux no necesita Cloud VPN." + "value": "Autoriser l’accès au presse-papiers ?" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "喚醒機器以檢查其服務。cmux 的應用程式內轉送不需要 Cloud VPN。" + "value": "クリップボードへのアクセスを許可しますか?" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "唤醒机器以检查其服务。cmux 的应用内转发无需 Cloud VPN。" + "value": "클립보드 접근을 허용하시겠습니까?" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "머신을 깨워 서비스를 확인하세요. cmux 앱 내 전달에는 Cloud VPN이 필요하지 않습니다." + "value": "允许访问剪贴板?" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "マシンを起動してサービスを確認してください。cmux のアプリ内転送に Cloud VPN は不要です。" + "value": "允許存取剪貼簿?" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Probudite mašinu da provjerite njene servise. Prosljeđivanje unutar cmux-a ne treba Cloud VPN." + "value": "Dozvoliti pristup međuspremniku?" } }, "da": { "stringUnit": { "state": "translated", - "value": "Væk maskinen for at kontrollere dens tjenester. Videresendelse i cmux kræver ikke Cloud VPN." + "value": "Tillad adgang til udklipsholderen?" } }, "it": { "stringUnit": { "state": "translated", - "value": "Riattiva la macchina per controllarne i servizi. L’inoltro all’interno di cmux non richiede la VPN Cloud." + "value": "Consentire l'accesso agli appunti?" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដាស់ម៉ាស៊ីនដើម្បីពិនិត្យសេវាកម្មរបស់វា។ ការបញ្ជូនបន្តនៅក្នុង cmux មិនត្រូវការ Cloud VPN ទេ។" + "value": "អនុញ្ញាតឱ្យចូលប្រើក្ដារតម្បៀតខ្ទាស់?" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vekk maskinen for å sjekke tjenestene. Videresending i cmux trenger ikke Cloud VPN." + "value": "Tillat tilgang til utklippstavlen?" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybudź maszynę, aby sprawdzić jej usługi. Przekierowywanie w cmux nie wymaga Cloud VPN." + "value": "Zezwolić na dostęp do schowka?" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desperte a máquina para verificar os serviços. O encaminhamento dentro do cmux não precisa do Cloud VPN." + "value": "Permitir acesso à área de transferência?" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Разбудите машину, чтобы проверить её службы. Перенаправлению внутри cmux Cloud VPN не нужен." + "value": "Разрешить доступ к буферу обмена?" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปลุกเครื่องเพื่อตรวจสอบบริการ การส่งต่อภายใน cmux ไม่ต้องใช้ Cloud VPN" + "value": "อนุญาตให้เข้าถึงคลิปบอร์ดหรือไม่?" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hizmetlerini denetlemek için makineyi uyandırın. cmux içi yönlendirme Cloud VPN gerektirmez." + "value": "Panoya erişime izin verilsin mi?" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Розбудіть машину, щоб перевірити її служби. Перенаправлення всередині cmux не потребує Cloud VPN." + "value": "Дозволити доступ до буфера обміну?" } } } }, - "cloudTree.ports.available.title": { + "notification.remoteRelay.hostFallback": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Listening services" + "value": "Remote host" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Lauschende Dienste" + "value": "مضيف بعيد" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Services en écoute" + "value": "Remote-Host" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "الخدمات المستمعة" + "value": "Host remoto" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "Servicios en escucha" + "value": "Hôte distant" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "監聽中的服務" + "value": "リモートホスト" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "监听中的服务" + "value": "원격 호스트" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "수신 대기 서비스" + "value": "远程主机" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "待ち受け中のサービス" + "value": "遠端主機" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Servisi koji slušaju" + "value": "Udaljeni host" } }, "da": { "stringUnit": { "state": "translated", - "value": "Lyttende tjenester" + "value": "Fjernvært" } }, "it": { "stringUnit": { "state": "translated", - "value": "Servizi in ascolto" + "value": "Host remoto" } }, "km": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មដែលកំពុងស្តាប់" + "value": "ម៉ាស៊ីនពីចម្ងាយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lyttende tjenester" + "value": "Ekstern vert" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nasłuchujące usługi" + "value": "Zdalny host" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Serviços em escuta" + "value": "Host remoto" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Прослушивающие службы" + "value": "Удалённый хост" } }, "th": { "stringUnit": { "state": "translated", - "value": "บริการที่กำลังรับฟัง" + "value": "โฮสต์ระยะไกล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dinleyen hizmetler" + "value": "Uzak ana bilgisayar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Служби, що прослуховують" + "value": "Віддалений хост" } } } }, - "cloudTree.ports.binding.detail": { + "notification.remoteRelay.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux’s browser route connects to 127.0.0.1 on the machine. Bind the service to 127.0.0.1 or 0.0.0.0, then refresh. Turning on Cloud VPN does not change this route." + "value": "%1$@: %2$@" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Die Browser-Verbindung von cmux verwendet 127.0.0.1 auf der Maschine. Binden Sie den Dienst an 127.0.0.1 oder 0.0.0.0 und aktualisieren Sie. Cloud-VPN ändert diese Route nicht." + "value": "%1$@: %2$@" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Le navigateur cmux se connecte à 127.0.0.1 sur la machine. Liez le service à 127.0.0.1 ou 0.0.0.0, puis actualisez. Activer le VPN Cloud ne change pas cette route." + "value": "%1$@: %2$@" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "يتصل مسار متصفح cmux بالعنوان 127.0.0.1 على الجهاز. اربط الخدمة بالعنوان 127.0.0.1 أو 0.0.0.0 ثم حدّث. تشغيل Cloud VPN لا يغير هذا المسار." + "value": "%1$@: %2$@" } }, - "es": { + "fr": { "stringUnit": { "state": "translated", - "value": "La ruta del navegador de cmux conecta a 127.0.0.1 en la máquina. Enlaza el servicio a 127.0.0.1 o 0.0.0.0 y actualiza. Activar Cloud VPN no cambia esta ruta." + "value": "%1$@: %2$@" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 的瀏覽器路徑會連線到機器上的 127.0.0.1。請將服務繫結至 127.0.0.1 或 0.0.0.0 後重新整理。開啟 Cloud VPN 不會改變此路徑。" + "value": "%1$@: %2$@" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux 的浏览器路由连接到机器上的 127.0.0.1。请将服务绑定到 127.0.0.1 或 0.0.0.0 后刷新。开启 Cloud VPN 不会改变此路由。" + "value": "%1$@: %2$@" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 브라우저 경로는 머신의 127.0.0.1에 연결합니다. 서비스를 127.0.0.1 또는 0.0.0.0에 바인딩한 후 새로 고치세요. Cloud VPN을 켜도 이 경로는 바뀌지 않습니다." + "value": "%1$@: %2$@" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux のブラウザはマシン上の 127.0.0.1 に接続します。サービスを 127.0.0.1 または 0.0.0.0 にバインドして更新してください。Cloud VPN を有効にしてもこの経路は変わりません。" + "value": "%1$@: %2$@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ruta preglednika u cmux-u povezuje se na 127.0.0.1 na mašini. Vežite servis na 127.0.0.1 ili 0.0.0.0, zatim osvježite. Uključivanje Cloud VPN-a ne mijenja ovu rutu." + "value": "%1$@: %2$@" } }, "da": { "stringUnit": { "state": "translated", - "value": "cmux’ browserrute forbinder til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og opdater derefter. Aktivering af Cloud VPN ændrer ikke denne rute." + "value": "%1$@: %2$@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il percorso del browser di cmux si connette a 127.0.0.1 sulla macchina. Associa il servizio a 127.0.0.1 o 0.0.0.0, quindi aggiorna. L’attivazione della VPN Cloud non modifica questo percorso." + "value": "%1$@: %2$@" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្លូវកម្មវិធីរុករករបស់ cmux ភ្ជាប់ទៅ 127.0.0.1 នៅលើម៉ាស៊ីន។ ចងសេវាកម្មទៅ 127.0.0.1 ឬ 0.0.0.0 រួចផ្ទុកឡើងវិញ។ ការបើក Cloud VPN មិនផ្លាស់ប្តូរផ្លូវនេះទេ។" + "value": "%1$@: %2$@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "cmux sin nettleserrute kobler til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og oppdater deretter. Å slå på Cloud VPN endrer ikke denne ruten." + "value": "%1$@: %2$@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Trasa przeglądarki cmux łączy się z 127.0.0.1 na maszynie. Powiąż usługę z 127.0.0.1 lub 0.0.0.0, a następnie odśwież. Włączenie Cloud VPN nie zmienia tej trasy." + "value": "%1$@: %2$@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A rota de navegador do cmux se conecta a 127.0.0.1 na máquina. Vincule o serviço a 127.0.0.1 ou 0.0.0.0 e atualize. Ativar o Cloud VPN não altera essa rota." + "value": "%1$@: %2$@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Браузерный маршрут cmux подключается к 127.0.0.1 на машине. Привяжите службу к 127.0.0.1 или 0.0.0.0, затем обновите. Включение Cloud VPN не меняет этот маршрут." + "value": "%1$@: %2$@" } }, "th": { "stringUnit": { "state": "translated", - "value": "เส้นทางเบราว์เซอร์ของ cmux เชื่อมต่อกับ 127.0.0.1 บนเครื่อง ผูกบริการกับ 127.0.0.1 หรือ 0.0.0.0 แล้วรีเฟรช การเปิด Cloud VPN ไม่ได้เปลี่ยนเส้นทางนี้" + "value": "%1$@: %2$@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux’un tarayıcı yolu makinedeki 127.0.0.1 adresine bağlanır. Hizmeti 127.0.0.1 veya 0.0.0.0 adresine bağlayın, ardından yenileyin. Cloud VPN’i açmak bu yolu değiştirmez." + "value": "%1$@: %2$@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Браузерний маршрут cmux підключається до 127.0.0.1 на машині. Прив’яжіть службу до 127.0.0.1 або 0.0.0.0, потім оновіть. Увімкнення Cloud VPN не змінює цей маршрут." + "value": "%1$@: %2$@" } } } }, - "cloudTree.ports.binding.title": { + "socket.mainActorHop.timeout.mayHaveRun": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Services use another interface" + "value": "cmux did not respond within 10 seconds after the command started, so its result is unknown. Check the effect before retrying." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "コマンドの開始後 10 秒以内に cmux が応答しなかったため、結果は不明です。再試行する前に効果を確認してください。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "命令开始后 10 秒内 cmux 没有响应,因此结果未知。请先确认效果再重试。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dienste verwenden eine andere Schnittstelle" + "value": "cmux hat innerhalb von 10 Sekunden nach dem Start des Befehls nicht geantwortet, das Ergebnis ist daher unbekannt. Prüfe die Auswirkung, bevor du es erneut versuchst." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les services utilisent une autre interface" + "value": "cmux n’a pas répondu dans les 10 secondes suivant le démarrage de la commande, son résultat est donc inconnu. Vérifiez l’effet avant de réessayer." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تستخدم الخدمات واجهة أخرى" + "value": "لم يستجب cmux خلال 10 ثوانٍ بعد بدء الأمر، لذا فإن نتيجته غير معروفة. تحقق من الأثر قبل إعادة المحاولة." } }, "es": { "stringUnit": { "state": "translated", - "value": "Los servicios usan otra interfaz" + "value": "cmux no respondió en los 10 segundos posteriores al inicio del comando, por lo que su resultado es desconocido. Comprueba el efecto antes de reintentar." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "服務使用其他介面" + "value": "命令開始後 10 秒內 cmux 沒有回應,因此結果未知。請先確認效果再重試。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "服务使用其他接口" + "value": "명령이 시작된 후 10초 안에 cmux가 응답하지 않아 결과를 알 수 없습니다. 다시 시도하기 전에 효과를 확인하세요." } - }, - "ko": { + } + } + }, + "socket.mainActorHop.timeout.notRun": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "서비스가 다른 인터페이스를 사용함" + "value": "cmux did not respond within 10 seconds, so the command was not run. Retry in a moment." } }, "ja": { "stringUnit": { "state": "translated", - "value": "サービスが別のインターフェイスを使用しています" + "value": "cmux が 10 秒以内に応答しなかったため、コマンドは実行されませんでした。しばらくしてから再試行してください。" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Servisi koriste drugi interfejs" + "value": "cmux 在 10 秒内没有响应,因此未运行该命令。请稍后重试。" } }, - "da": { + "de": { "stringUnit": { "state": "translated", - "value": "Tjenester bruger en anden grænseflade" + "value": "cmux hat innerhalb von 10 Sekunden nicht geantwortet, der Befehl wurde daher nicht ausgeführt. Versuche es gleich noch einmal." } }, - "it": { + "fr": { "stringUnit": { "state": "translated", - "value": "I servizi usano un’altra interfaccia" + "value": "cmux n’a pas répondu dans les 10 secondes, la commande n’a donc pas été exécutée. Réessayez dans un instant." } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មប្រើចំណុចប្រទាក់ផ្សេង" + "value": "لم يستجب cmux خلال 10 ثوانٍ، لذا لم يتم تنفيذ الأمر. أعد المحاولة بعد لحظات." } }, - "nb": { + "es": { "stringUnit": { "state": "translated", - "value": "Tjenester bruker et annet grensesnitt" + "value": "cmux no respondió en 10 segundos, por lo que el comando no se ejecutó. Reintenta en un momento." } }, - "pl": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Usługi używają innego interfejsu" + "value": "cmux 在 10 秒內沒有回應,因此未執行該命令。請稍後重試。" } }, - "pt-BR": { + "ko": { "stringUnit": { "state": "translated", - "value": "Os serviços usam outra interface" + "value": "cmux가 10초 안에 응답하지 않아 명령이 실행되지 않았습니다. 잠시 후 다시 시도하세요." } - }, - "ru": { + } + } + }, + "socket.overloaded.message": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Службы используют другой интерфейс" + "value": "cmux is handling too many control-socket requests right now, so this one was not run. Retry in a moment." } }, - "th": { + "ja": { "stringUnit": { "state": "translated", - "value": "บริการใช้อินเทอร์เฟซอื่น" + "value": "cmux は現在、制御ソケットの要求を処理しきれないため、この要求は実行されませんでした。しばらくしてから再試行してください。" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Hizmetler başka bir arabirim kullanıyor" + "value": "cmux 当前正在处理过多的控制套接字请求,因此未运行此请求。请稍后重试。" } }, - "uk": { + "de": { "stringUnit": { "state": "translated", - "value": "Служби використовують інший інтерфейс" + "value": "cmux verarbeitet gerade zu viele Control-Socket-Anfragen, diese wurde daher nicht ausgeführt. Versuche es gleich noch einmal." } - } - } - }, - "cloudTree.ports.empty.noService": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "Start a web server on this machine, then refresh." + "value": "cmux traite actuellement trop de requêtes du socket de contrôle, celle-ci n’a donc pas été exécutée. Réessayez dans un instant." } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Starte einen Webserver auf diesem Rechner und aktualisiere dann die Liste." + "value": "يعالج cmux حاليًا عددًا كبيرًا جدًا من طلبات مقبس التحكم، لذا لم يتم تنفيذ هذا الطلب. أعد المحاولة بعد لحظات." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Démarrez un serveur web sur cette machine, puis actualisez." + "value": "cmux está gestionando demasiadas solicitudes del socket de control ahora mismo, por lo que esta no se ejecutó. Reintenta en un momento." } }, - "ar": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "شغّل خادم ويب على هذا الجهاز، ثم حدّث القائمة." + "value": "cmux 目前正在處理過多的控制 socket 請求,因此未執行此請求。請稍後重試。" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Inicia un servidor web en esta máquina y luego actualiza." + "value": "cmux가 지금 너무 많은 제어 소켓 요청을 처리하고 있어 이 요청은 실행되지 않았습니다. 잠시 후 다시 시도하세요." + } + } + } + }, + "socket.request.cancelled": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Request was cancelled" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "在這台機器上啟動網頁伺服器,然後重新整理。" + "value": "リクエストはキャンセルされました" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "在此机器上启动网页服务器,然后刷新。" + "value": "请求已取消" } }, - "ko": { + "de": { "stringUnit": { "state": "translated", - "value": "이 머신에서 웹 서버를 시작한 다음 새로 고치세요." + "value": "Die Anfrage wurde abgebrochen" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "このマシンで Web サーバーを起動してから、更新してください。" + "value": "La requête a été annulée" } }, - "bs": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "Pokrenite web server na ovoj mašini, zatim osvježite." + "state": "translated", + "value": "تم إلغاء الطلب" } }, - "da": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "Start en webserver på denne maskine, og opdater derefter." + "state": "translated", + "value": "Se canceló la solicitud" } }, - "it": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Avvia un server web su questa macchina, poi aggiorna." + "state": "translated", + "value": "請求已取消" } }, - "km": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "ចាប់ផ្តើមម៉ាស៊ីនមេបណ្តាញនៅលើម៉ាស៊ីននេះ រួចផ្ទុកឡើងវិញ។" + "state": "translated", + "value": "요청이 취소되었습니다" + } + } + } + }, + "socket.request.failedBeforeResult": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Request failed before returning a result" } }, - "nb": { + "ja": { "stringUnit": { - "state": "needs_review", - "value": "Start en webserver på denne maskinen, og oppdater deretter." + "state": "translated", + "value": "結果を返す前にリクエストが失敗しました" } }, - "pl": { + "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Uruchom serwer WWW na tej maszynie, a następnie odśwież." + "state": "translated", + "value": "请求在返回结果之前失败" } }, - "pt-BR": { + "de": { "stringUnit": { - "state": "needs_review", - "value": "Inicie um servidor web nesta máquina e atualize." + "state": "translated", + "value": "Die Anfrage ist fehlgeschlagen, bevor ein Ergebnis zurückgegeben wurde" } }, - "ru": { + "fr": { "stringUnit": { - "state": "needs_review", - "value": "Запустите веб-сервер на этой машине, затем обновите список." + "state": "translated", + "value": "La requête a échoué avant de renvoyer un résultat" } }, - "th": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "เริ่มเว็บเซิร์ฟเวอร์บนเครื่องนี้ แล้วรีเฟรช" + "state": "translated", + "value": "فشل الطلب قبل إرجاع نتيجة" } }, - "tr": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "Bu makinede bir web sunucusu başlatın, ardından yenileyin." + "state": "translated", + "value": "La solicitud falló antes de devolver un resultado" } }, - "uk": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Запустіть вебсервер на цій машині, а потім оновіть список." + "state": "translated", + "value": "請求在傳回結果之前失敗" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "결과를 반환하기 전에 요청이 실패했습니다" } } } }, - "cloudTree.ports.hub.detail": { + "agent.codex.fork.notice.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This build cannot start cmux’s authenticated Cloud forward. Update cmux, then retry." + "value": "cmux could not identify the new fork session. Start the fork again from the parent pane." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux は新しいフォーク セッションを特定できませんでした。親ペインからもう一度フォークしてください。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Build kann die authentifizierte Cloud-Weiterleitung von cmux nicht starten. Aktualisieren Sie cmux und versuchen Sie es erneut." + "value": "cmux konnte die neue Fork-Sitzung nicht erkennen. Starten Sie den Fork erneut im übergeordneten Pane." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Cette version ne peut pas démarrer le transfert Cloud authentifié de cmux. Mettez cmux à jour, puis réessayez." + "value": "cmux n’a pas pu identifier la nouvelle session forkée. Relancez le fork depuis le volet parent." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لا يمكن لهذا الإصدار بدء إعادة توجيه Cloud الموثّقة من cmux. حدّث cmux ثم أعد المحاولة." + "value": "تعذر على cmux تحديد جلسة التفريع الجديدة. ابدأ التفريع مرة أخرى من الجزء الأصلي." } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta compilación no puede iniciar el reenvío autenticado de Cloud de cmux. Actualiza cmux y vuelve a intentarlo." + "value": "cmux no pudo identificar la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此版本無法啟動 cmux 的已驗證 Cloud 轉送。請更新 cmux 後重試。" + "value": "cmux 無法識別新的分支工作階段。請從父窗格重新開始分支。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此版本无法启动 cmux 的已验证 Cloud 转发。请更新 cmux 后重试。" + "value": "cmux 无法识别新的分支会话。请从父窗格重新开始分支。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 빌드에서는 cmux 인증 Cloud 전달을 시작할 수 없습니다. cmux를 업데이트한 후 다시 시도하세요." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このビルドでは cmux の認証済み Cloud 転送を開始できません。cmux を更新して再試行してください。" + "value": "cmux가 새 포크 세션을 식별하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ova verzija ne može pokrenuti autentificirano Cloud prosljeđivanje cmux-a. Ažurirajte cmux, zatim pokušajte ponovo." + "value": "cmux nije mogao prepoznati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." } }, "da": { "stringUnit": { "state": "translated", - "value": "Denne build kan ikke starte cmux’ godkendte Cloud-videresendelse. Opdater cmux, og prøv igen." + "value": "cmux kunne ikke identificere den nye forgreningssession. Start forgreningen igen fra forældreruden." } }, "it": { "stringUnit": { "state": "translated", - "value": "Questa build non può avviare l’inoltro Cloud autenticato di cmux. Aggiorna cmux, quindi riprova." + "value": "cmux non ha potuto identificare la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." } }, "km": { "stringUnit": { "state": "translated", - "value": "កំណែនេះមិនអាចចាប់ផ្តើមការបញ្ជូនបន្ត Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux បានទេ។ ធ្វើបច្ចុប្បន្នភាព cmux រួចព្យាយាមម្តងទៀត។" + "value": "cmux មិនអាចកំណត់អត្តសញ្ញាណសម័យ fork ថ្មីបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Denne versjonen kan ikke starte cmux sin autentiserte Cloud-videresending. Oppdater cmux, og prøv igjen." + "value": "cmux kunne ikke identifisere den nye forgreningsøkten. Start forgreningen på nytt fra den overordnede ruten." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ta kompilacja nie może uruchomić uwierzytelnionego przekierowania Cloud w cmux. Zaktualizuj cmux i spróbuj ponownie." + "value": "cmux nie mógł zidentyfikować nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Esta versão não consegue iniciar o encaminhamento Cloud autenticado do cmux. Atualize o cmux e tente novamente." + "value": "O cmux não conseguiu identificar a nova sessão bifurcada. Inicie o fork novamente no painel principal." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Эта сборка не может запустить аутентифицированное перенаправление Cloud в cmux. Обновите cmux и повторите попытку." + "value": "cmux не удалось определить новый сеанс форка. Запустите форк снова из родительской панели." } }, "th": { "stringUnit": { "state": "translated", - "value": "บิลด์นี้ไม่สามารถเริ่มการส่งต่อ Cloud ที่ยืนยันตัวตนแล้วของ cmux ได้ อัปเดต cmux แล้วลองอีกครั้ง" + "value": "cmux ไม่สามารถระบุเซสชันที่แยกใหม่ได้ เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu derleme cmux’un kimliği doğrulanmış Cloud yönlendirmesini başlatamıyor. cmux’u güncelleyin, ardından yeniden deneyin." + "value": "cmux yeni fork oturumunu belirleyemedi. Fork'u üst panelden yeniden başlatın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ця збірка не може запустити автентифіковане перенаправлення Cloud у cmux. Оновіть cmux і повторіть спробу." + "value": "cmux не вдалося визначити новий сеанс форка. Запустіть форк ще раз із батьківської панелі." } } } }, - "cloudTree.ports.link.detail": { + "agent.codex.fork.notice.parentClearFailed.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port discovery could not connect to this machine. Existing cmux ports may still work. Refresh to reconnect; Cloud VPN is not required." + "value": "cmux could not safely bind the new fork session. Retry the fork from the parent pane." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "cmux は新しいフォーク セッションを安全にバインドできませんでした。親ペインからもう一度フォークしてください。" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Porterkennung konnte diese Maschine nicht erreichen. Bereits geöffnete cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie zum erneuten Verbinden; Cloud-VPN ist nicht erforderlich." + "value": "cmux konnte die neue Fork-Sitzung nicht sicher binden. Starten Sie den Fork erneut im übergeordneten Pane." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La découverte des ports n’a pas pu se connecter à cette machine. Les ports cmux existants peuvent encore fonctionner. Actualisez pour reconnecter ; le VPN Cloud n’est pas nécessaire." + "value": "cmux n’a pas pu lier la nouvelle session forkée en toute sécurité. Relancez le fork depuis le volet parent." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذر اتصال اكتشاف المنافذ بهذا الجهاز. قد تظل منافذ cmux الحالية تعمل. حدّث لإعادة الاتصال؛ Cloud VPN غير مطلوب." + "value": "تعذر على cmux ربط جلسة التفريع الجديدة بأمان. أعد بدء التفريع من الجزء الأصلي." } }, "es": { "stringUnit": { "state": "translated", - "value": "El descubrimiento de puertos no pudo conectar con esta máquina. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reconectar; Cloud VPN no es necesario." + "value": "cmux no pudo vincular de forma segura la nueva sesión bifurcada. Inicia el fork de nuevo desde el panel principal." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連接埠探索無法連線到此機器。現有 cmux 連接埠可能仍可使用。請重新整理以重新連線;不需要 Cloud VPN。" + "value": "cmux 無法安全繫結新的分支工作階段。請從父窗格重新開始分支。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "端口发现无法连接到此机器。现有 cmux 端口可能仍可使用。请刷新以重新连接;无需 Cloud VPN。" + "value": "cmux 无法安全绑定新的分支会话。请从父窗格重新开始分支。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 검색이 이 머신에 연결하지 못했습니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 연결하세요. Cloud VPN은 필요하지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ポート検出がこのマシンに接続できませんでした。既存の cmux ポートは引き続き動作する可能性があります。更新して再接続してください。Cloud VPN は不要です。" + "value": "cmux가 새 포크 세션을 안전하게 연결하지 못했습니다. 부모 패널에서 포크를 다시 시작하세요." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otkrivanje portova nije se moglo povezati s ovom mašinom. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovno povezivanje; Cloud VPN nije potreban." + "value": "cmux nije mogao sigurno povezati novu sesiju račvanja. Ponovo pokrenite račvanje iz nadređenog okna." } }, "da": { "stringUnit": { "state": "translated", - "value": "Portregistrering kunne ikke oprette forbindelse til denne maskine. Eksisterende cmux-porte virker muligvis stadig. Opdater for at genoprette forbindelsen; Cloud VPN er ikke påkrævet." + "value": "cmux kunne ikke binde den nye forgreningssession sikkert. Start forgreningen igen fra forældreruden." } }, "it": { "stringUnit": { "state": "translated", - "value": "Il rilevamento delle porte non è riuscito a connettersi a questa macchina. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riconnetterti; la VPN Cloud non è necessaria." + "value": "cmux non ha potuto associare in sicurezza la nuova sessione fork. Avvia di nuovo il fork dal riquadro principale." } }, "km": { "stringUnit": { "state": "translated", - "value": "ការស្វែងរកច្រកមិនអាចភ្ជាប់ទៅម៉ាស៊ីននេះបានទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីភ្ជាប់ម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" + "value": "cmux មិនអាចភ្ជាប់សម័យ fork ថ្មីដោយសុវត្ថិភាពបានទេ។ ចាប់ផ្ដើម fork ម្ដងទៀតពីផ្ទាំងមេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Portoppdagelse kunne ikke koble til denne maskinen. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å koble til på nytt; Cloud VPN er ikke nødvendig." + "value": "cmux kunne ikke binde den nye forgreningsøkten på en trygg måte. Start forgreningen på nytt fra den overordnede ruten." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wykrywanie portów nie mogło połączyć się z tą maszyną. Istniejące porty cmux mogą nadal działać. Odśwież, aby połączyć ponownie; Cloud VPN nie jest wymagany." + "value": "cmux nie mógł bezpiecznie powiązać nowej sesji forka. Uruchom fork ponownie z panelu nadrzędnego." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A descoberta de portas não conseguiu se conectar a esta máquina. As portas existentes do cmux ainda podem funcionar. Atualize para reconectar; o Cloud VPN não é necessário." + "value": "O cmux não conseguiu vincular com segurança a nova sessão bifurcada. Inicie o fork novamente no painel principal." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Обнаружению портов не удалось подключиться к этой машине. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы переподключиться; Cloud VPN не требуется." + "value": "cmux не удалось безопасно привязать новый сеанс форка. Запустите форк снова из родительской панели." } }, "th": { "stringUnit": { "state": "translated", - "value": "การค้นหาพอร์ตไม่สามารถเชื่อมต่อกับเครื่องนี้ได้ พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อเชื่อมต่อใหม่ ไม่จำเป็นต้องใช้ Cloud VPN" + "value": "cmux ไม่สามารถผูกเซสชันที่แยกใหม่ได้อย่างปลอดภัย เริ่มการแยกอีกครั้งจากบานหน้าต่างหลัก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Port keşfi bu makineye bağlanamadı. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden bağlanmak için yenileyin; Cloud VPN gerekmez." + "value": "cmux yeni fork oturumunu güvenli bir şekilde bağlayamadı. Fork'u üst panelden yeniden başlatın." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виявленню портів не вдалося підключитися до цієї машини. Наявні порти cmux можуть і далі працювати. Оновіть, щоб підключитися знову; Cloud VPN не потрібен." + "value": "cmux не вдалося безпечно прив’язати новий сеанс форка. Запустіть форк ще раз із батьківської панелі." } } } }, - "cloudTree.ports.link.title": { + "agent.codex.fork.notice.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud link unavailable" + "value": "Fork unavailable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "フォークを利用できません" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Verbindung nicht verfügbar" + "value": "Fork nicht verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connexion Cloud indisponible" + "value": "Fork indisponible" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اتصال Cloud غير متاح" + "value": "التفريع غير متاح" } }, "es": { "stringUnit": { "state": "translated", - "value": "Conexión de Cloud no disponible" + "value": "Fork no disponible" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud 連線無法使用" + "value": "無法使用分支" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud 连接不可用" + "value": "分支不可用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cloud 연결을 사용할 수 없음" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Cloud 接続を利用できません" + "value": "포크를 사용할 수 없음" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Cloud veza nije dostupna" + "value": "Račvanje nije dostupno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Cloud-forbindelse utilgængelig" + "value": "Fork ikke tilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Collegamento Cloud non disponibile" + "value": "Fork non disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "តំណ Cloud មិនអាចប្រើបាន" + "value": "មិនអាចប្រើការបំបែកបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Cloud-tilkobling utilgjengelig" + "value": "Fork utilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Połączenie Cloud niedostępne" + "value": "Fork niedostępny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Conexão Cloud indisponível" + "value": "Fork indisponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Связь с Cloud недоступна" + "value": "Форк недоступен" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลิงก์ Cloud ไม่พร้อมใช้งาน" + "value": "ไม่สามารถใช้การแยกสาขาได้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cloud bağlantısı kullanılamıyor" + "value": "Fork kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зв’язок із Cloud недоступний" + "value": "Форк недоступний" } } } }, - "cloudTree.ports.loading.detail": { + "agent.codex.fork.notice.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Checking services through cmux’s authenticated Cloud link. No system VPN is needed." + "value": "Agent fork" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "エージェントフォーク" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dienste werden über die authentifizierte Cloud-Verbindung von cmux geprüft. Ein System-VPN ist nicht erforderlich." + "value": "Agent-Fork" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vérification des services via la connexion Cloud authentifiée de cmux. Aucun VPN système n’est nécessaire." + "value": "Fork d’agent" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جارٍ فحص الخدمات عبر اتصال Cloud الموثّق من cmux. لا حاجة إلى VPN النظام." + "value": "تفريع الوكيل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Comprobando servicios mediante la conexión autenticada de Cloud de cmux. No se necesita una VPN del sistema." + "value": "Fork del agente" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在透過 cmux 的已驗證 Cloud 連線檢查服務。不需要系統 VPN。" + "value": "代理程式分支" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在通过 cmux 的已验证 Cloud 连接检查服务。无需系统 VPN。" + "value": "代理分支" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux의 인증된 Cloud 연결로 서비스를 확인하고 있습니다. 시스템 VPN은 필요하지 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux の認証済み Cloud 接続でサービスを確認しています。システム VPN は不要です。" + "value": "에이전트 포크" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Provjera servisa putem autentificirane Cloud veze cmux-a. Sistemski VPN nije potreban." + "value": "Račvanje agenta" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kontrollerer tjenester via cmux’ godkendte Cloud-forbindelse. Der kræves ingen system-VPN." + "value": "Agentfork" } }, "it": { "stringUnit": { "state": "translated", - "value": "Controllo dei servizi tramite il collegamento Cloud autenticato di cmux. Non serve una VPN di sistema." + "value": "Fork dell'agente" } }, "km": { "stringUnit": { "state": "translated", - "value": "កំពុងពិនិត្យសេវាកម្មតាមរយៈតំណ Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux។ មិនត្រូវការ VPN របស់ប្រព័ន្ធទេ។" + "value": "ការបំបែកភ្នាក់ងារ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Sjekker tjenester via cmux sin autentiserte Cloud-tilkobling. Ingen system-VPN er nødvendig." + "value": "Agentforgrening" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Sprawdzanie usług przez uwierzytelnione połączenie Cloud w cmux. Systemowa sieć VPN nie jest potrzebna." + "value": "Fork agenta" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Verificando serviços pela conexão Cloud autenticada do cmux. Nenhuma VPN do sistema é necessária." + "value": "Fork do agente" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Проверка служб через аутентифицированную связь cmux с Cloud. Системный VPN не нужен." + "value": "Форк агента" } }, "th": { "stringUnit": { "state": "translated", - "value": "กำลังตรวจสอบบริการผ่านลิงก์ Cloud ที่ยืนยันตัวตนแล้วของ cmux ไม่ต้องใช้ VPN ของระบบ" + "value": "การแยกสาขาของเอเจนต์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hizmetler cmux’un kimliği doğrulanmış Cloud bağlantısı üzerinden denetleniyor. Sistem VPN’i gerekmez." + "value": "Ajan çatalı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перевірка служб через автентифікований зв’язок cmux із Cloud. Системний VPN не потрібен." + "value": "Форк агента" } } } }, - "cloudTree.ports.loopback.detail": { + "socket.authTeam.committedStatusTimedOut": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "These services open in cmux without Cloud VPN. They listen on the machine’s loopback address, so other apps cannot reach them through its private IP, even with VPN connected." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Dienste lassen sich in cmux ohne Cloud-VPN öffnen. Sie lauschen auf der Loopback-Adresse der Maschine. Andere Apps erreichen sie daher auch mit VPN nicht über deren private IP." - } - }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ces services s’ouvrent dans cmux sans VPN Cloud. Ils écoutent sur l’adresse locale de la machine : les autres apps ne peuvent pas y accéder via son IP privée, même avec le VPN." + "value": "The team change was applied, but cmux did not report the updated status within 10 seconds. Run `cmux auth status` to confirm." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "تُفتح هذه الخدمات داخل cmux دون Cloud VPN. وهي تستمع على عنوان الواجهة المحلية للجهاز، لذا لا تستطيع التطبيقات الأخرى الوصول إليها عبر عنوان IP الخاص به حتى مع اتصال VPN." + "value": "チームの変更は適用されましたが、cmux は 10 秒以内に更新後のステータスを報告しませんでした。`cmux auth status` を実行して確認してください。" } }, - "es": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Estos servicios se abren en cmux sin Cloud VPN. Escuchan en la dirección de bucle local de la máquina, por lo que otras apps no pueden acceder por su IP privada, incluso con la VPN conectada." + "value": "团队更改已应用,但 cmux 未能在 10 秒内报告更新后的状态。请运行 `cmux auth status` 确认。" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "這些服務可在 cmux 中開啟,不需要 Cloud VPN。它們在機器的迴路位址上監聽,因此即使已連線 VPN,其他 App 也無法透過其私人 IP 存取。" + "value": "Die Teamänderung wurde übernommen, aber cmux hat den aktualisierten Status nicht innerhalb von 10 Sekunden gemeldet. Führe `cmux auth status` aus, um es zu prüfen." } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "这些服务可在 cmux 中打开,无需 Cloud VPN。它们监听机器的回环地址,因此即使已连接 VPN,其他应用也无法通过其专用 IP 访问。" + "value": "Le changement d’équipe a été appliqué, mais cmux n’a pas signalé le statut mis à jour dans les 10 secondes. Exécutez `cmux auth status` pour confirmer." } }, - "ko": { + "ar": { "stringUnit": { "state": "translated", - "value": "이 서비스는 Cloud VPN 없이 cmux에서 열립니다. 머신의 루프백 주소에서 수신 대기하므로 VPN에 연결해도 다른 앱은 비공개 IP로 접근할 수 없습니다." + "value": "تم تطبيق تغيير الفريق، لكن cmux لم يُبلّغ عن الحالة المحدّثة خلال 10 ثوانٍ. شغّل `cmux auth status` للتأكيد." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "これらのサービスは Cloud VPN なしで cmux から開けます。マシンのループバックアドレスで待ち受けるため、VPN 接続中でも他のアプリからプライベート IP 経由ではアクセスできません。" + "value": "El cambio de equipo se aplicó, pero cmux no informó el estado actualizado en 10 segundos. Ejecuta `cmux auth status` para confirmarlo." } }, - "bs": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Ovi servisi se otvaraju u cmux-u bez Cloud VPN-a. Slušaju na loopback adresi mašine, pa ih druge aplikacije ne mogu dosegnuti preko njene privatne IP adrese, čak ni uz povezan VPN." + "value": "團隊變更已套用,但 cmux 未能在 10 秒內回報更新後的狀態。請執行 `cmux auth status` 確認。" } }, - "da": { + "ko": { "stringUnit": { "state": "translated", - "value": "Disse tjenester åbnes i cmux uden Cloud VPN. De lytter på maskinens loopback-adresse, så andre apps kan ikke nå dem via dens private IP, heller ikke med VPN forbundet." + "value": "팀 변경은 적용되었지만 cmux가 10초 안에 업데이트된 상태를 보고하지 않았습니다. `cmux auth status`를 실행해 확인하세요." } - }, - "it": { + } + } + }, + "settings.mobile.browserTunnel.allowOtherHosts": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Questi servizi si aprono in cmux senza VPN Cloud. Sono in ascolto sull’indirizzo di loopback della macchina, quindi le altre app non possono raggiungerli tramite il suo IP privato, nemmeno con la VPN connessa." + "value": "iOS Browser Reaches Other Hosts" } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "សេវាកម្មទាំងនេះបើកនៅក្នុង cmux ដោយមិនត្រូវការ Cloud VPN។ ពួកវាស្តាប់នៅលើអាសយដ្ឋាន loopback របស់ម៉ាស៊ីន ដូច្នេះកម្មវិធីផ្សេងទៀតមិនអាចចូលដល់ពួកវាតាមរយៈ IP ឯកជនរបស់វាបានទេ ទោះបីភ្ជាប់ VPN ក៏ដោយ។" + "value": "iOS-Browser erreicht andere Hosts" } }, - "nb": { + "fr": { "stringUnit": { "state": "translated", - "value": "Disse tjenestene åpnes i cmux uten Cloud VPN. De lytter på maskinens loopback-adresse, så andre apper kan ikke nå dem via den private IP-adressen, selv med VPN tilkoblet." + "value": "Le navigateur iOS accède aux autres hôtes" } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Te usługi otwierają się w cmux bez Cloud VPN. Nasłuchują na adresie pętli zwrotnej maszyny, więc inne aplikacje nie mogą do nich dotrzeć przez jej prywatny adres IP, nawet przy połączonym VPN." + "value": "متصفح iOS يصل إلى مضيفين آخرين" } }, - "pt-BR": { + "es": { "stringUnit": { "state": "translated", - "value": "Esses serviços abrem no cmux sem o Cloud VPN. Eles escutam no endereço de loopback da máquina, então outros apps não conseguem alcançá-los pelo IP privado dela, mesmo com a VPN conectada." + "value": "El navegador de iOS accede a otros hosts" } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Эти службы открываются в cmux без Cloud VPN. Они прослушивают loopback-адрес машины, поэтому другие приложения не могут обратиться к ним через её частный IP даже при подключённом VPN." + "value": "iOS 瀏覽器可連線至其他主機" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "บริการเหล่านี้เปิดใน cmux ได้โดยไม่ต้องใช้ Cloud VPN บริการรับฟังบนที่อยู่ loopback ของเครื่อง แอปอื่นจึงเข้าถึงผ่าน IP ส่วนตัวของเครื่องไม่ได้ แม้จะเชื่อมต่อ VPN แล้วก็ตาม" + "value": "iOS 浏览器可访问其他主机" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Bu hizmetler cmux’ta Cloud VPN olmadan açılır. Makinenin geri döngü adresinde dinledikleri için diğer uygulamalar, VPN bağlıyken bile makinenin özel IP’si üzerinden onlara ulaşamaz." + "value": "iOS 브라우저의 다른 호스트 접근" } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ці служби відкриваються в cmux без Cloud VPN. Вони прослуховують loopback-адресу машини, тому інші застосунки не можуть дістатися до них через її приватну IP-адресу, навіть із підключеним VPN." + "value": "iOSブラウザから他のホストに接続" } } } }, - "cloudTree.ports.loopback.title": { + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOn": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Loopback services available" + "value": "The iOS browser can load LAN, VPN, and internet hosts through this Mac. Link-local and cloud metadata addresses never go through this Mac; the phone loads them itself." } }, "de": { "stringUnit": { "state": "translated", - "value": "Loopback-Dienste verfügbar" + "value": "Der iOS-Browser kann LAN-, VPN- und Internet-Hosts über diesen Mac laden. Link-Local- und Cloud-Metadatenadressen laufen nie über diesen Mac; das iPhone lädt sie selbst." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Services locaux disponibles" + "value": "Le navigateur iOS peut charger des hôtes du réseau local, du VPN et d’Internet via ce Mac. Les adresses link-local et de métadonnées cloud ne passent jamais par ce Mac ; l’iPhone les charge lui-même." } }, "ar": { "stringUnit": { "state": "translated", - "value": "خدمات الواجهة المحلية متاحة" + "value": "يمكن لمتصفح iOS تحميل مضيفي الشبكة المحلية وVPN والإنترنت عبر جهاز Mac هذا. لا تمر عناوين الارتباط المحلي وعناوين بيانات التعريف السحابية عبر جهاز Mac هذا أبدًا؛ يحمّلها iPhone بنفسه." } }, "es": { "stringUnit": { "state": "translated", - "value": "Servicios de bucle local disponibles" + "value": "El navegador de iOS puede cargar hosts de la red local, VPN e internet a través de este Mac. Las direcciones link-local y de metadatos en la nube nunca pasan por este Mac; el iPhone las carga por sí mismo." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "可使用迴路服務" + "value": "iOS 瀏覽器可透過這台 Mac 載入區域網路、VPN 與網際網路主機。連結本機位址與雲端中繼資料位址絕不經過這台 Mac,由 iPhone 自行載入。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "回环服务可用" + "value": "iOS 浏览器可通过这台 Mac 加载局域网、VPN 和互联网主机。链路本地地址和云元数据地址绝不经过这台 Mac,由 iPhone 自行加载。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "루프백 서비스 사용 가능" + "value": "iOS 브라우저가 이 Mac을 통해 LAN, VPN, 인터넷 호스트를 불러올 수 있습니다. 링크 로컬 및 클라우드 메타데이터 주소는 이 Mac을 거치지 않으며 iPhone이 직접 불러옵니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "ループバックのサービスを利用できます" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Dostupni loopback servisi" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Loopback-tjenester tilgængelige" + "value": "iOSブラウザはこのMac経由でLAN、VPN、インターネット上のホストを読み込めます。リンクローカルとクラウドメタデータのアドレスはこのMacを経由せず、iPhoneが直接読み込みます。" } - }, - "it": { + } + } + }, + "settings.mobile.browserTunnel.allowOtherHosts.subtitleOff": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Servizi di loopback disponibili" + "value": "The iOS browser reaches only this Mac's localhost through this Mac. Other sites load over the phone's own network." } }, - "km": { + "de": { "stringUnit": { "state": "translated", - "value": "មានសេវាកម្ម loopback" + "value": "Der iOS-Browser erreicht über diesen Mac nur dessen localhost. Andere Websites werden über das eigene Netzwerk des Telefons geladen." } }, - "nb": { + "fr": { "stringUnit": { "state": "translated", - "value": "Loopback-tjenester tilgjengelige" + "value": "Via ce Mac, le navigateur iOS n’accède qu’au localhost de ce Mac. Les autres sites se chargent via le réseau du téléphone." } }, - "pl": { + "ar": { "stringUnit": { "state": "translated", - "value": "Dostępne usługi pętli zwrotnej" + "value": "لا يصل متصفح iOS عبر جهاز Mac هذا إلا إلى localhost الخاص به. تُحمَّل المواقع الأخرى عبر شبكة الهاتف نفسه." } }, - "pt-BR": { + "es": { "stringUnit": { "state": "translated", - "value": "Serviços de loopback disponíveis" + "value": "A través de este Mac, el navegador de iOS solo accede a su localhost. Los demás sitios se cargan con la red del propio teléfono." } }, - "ru": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Доступны loopback-службы" + "value": "iOS 瀏覽器只會透過這台 Mac 連線至它的 localhost。其他網站會透過手機本身的網路載入。" } }, - "th": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "มีบริการ loopback พร้อมใช้งาน" + "value": "iOS 浏览器只会通过这台 Mac 访问它的 localhost。其他网站通过手机自身的网络加载。" } }, - "tr": { + "ko": { "stringUnit": { "state": "translated", - "value": "Geri döngü hizmetleri kullanılabilir" + "value": "iOS 브라우저는 이 Mac을 통해 이 Mac의 localhost에만 접근합니다. 다른 사이트는 휴대폰 자체 네트워크로 불러옵니다." } }, - "uk": { + "ja": { "stringUnit": { "state": "translated", - "value": "Доступні loopback-служби" + "value": "iOSブラウザがこのMac経由で接続するのは、このMacのlocalhostだけです。他のサイトは電話自身のネットワークで読み込みます。" } } } }, - "cloudTree.ports.notRequested.title": { + "settings.search.alias.setting.mobile.browserTunnelAllowOtherHosts": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports not checked yet" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ports noch nicht geprüft" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobil browser tunnel proxy lokales netzwerk hosts netzwerk sicherheit" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ports pas encore vérifiés" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security mobile navigateur tunnel proxy réseau local hôtes réseau sécurité" } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم يتم فحص المنافذ بعد" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security متصفح نفق وكيل شبكة محلية مضيفون شبكة أمان" } }, "es": { "stringUnit": { "state": "translated", - "value": "Puertos aún sin comprobar" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security móvil navegador túnel proxy red local hosts red seguridad" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尚未檢查連接埠" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 行動裝置 瀏覽器 通道 代理 區域網路 主機 網路 安全性" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尚未检查端口" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 移动 浏览器 隧道 代理 局域网 主机 网络 安全" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아직 포트를 확인하지 않음" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security 모바일 브라우저 터널 프록시 로컬 네트워크 호스트 네트워크 보안" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ポートは未確認です" - } - }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Portovi još nisu provjereni" - } - }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Porte er ikke kontrolleret endnu" + "value": "mobile ios iphone browser on iphone tunnel proxy localhost lan vpn internet hosts network security モバイル ブラウザ トンネル プロキシ ローカルネットワーク ホスト ネットワーク セキュリティ" } - }, - "it": { + } + } + }, + "cli.browser.inputFiles.error.usage": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Porte non ancora controllate" + "value": "set-input-files requires --selector <css> and either --file <path> (repeatable) or --clear" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "មិនទាន់បានពិនិត្យច្រកនៅឡើយ" + "value": "يتطلب set-input-files الخيار --selector <css> مع --file <path> (يمكن تكراره) أو --clear" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Porter er ikke sjekket ennå" + "value": "set-input-files benötigt --selector <css> und entweder --file <path> (wiederholbar) oder --clear" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Porty nie zostały jeszcze sprawdzone" + "value": "set-input-files requiere --selector <css> y --file <path> (repetible) o --clear" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Portas ainda não verificadas" + "value": "set-input-files nécessite --selector <css> et soit --file <path> (répétable), soit --clear" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Порты ещё не проверены" + "value": "set-input-files には --selector <css> と、--file <path>(複数指定可)または --clear が必要です" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ยังไม่ได้ตรวจสอบพอร์ต" + "value": "set-input-files에는 --selector <css>와 --file <path>(반복 가능) 또는 --clear가 필요합니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Portlar henüz denetlenmedi" + "value": "set-input-files 需要 --selector <css>,以及 --file <path>(可重复)或 --clear" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Порти ще не перевірено" + "value": "set-input-files 需要 --selector <css>,以及 --file <path>(可重複)或 --clear" } } } }, - "cloudTree.ports.privateAddress": { + "cli.browser.inputFiles.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private address unavailable" - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Private Adresse nicht verfügbar" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Select local files (up to 128 files, 32 MiB total) or clear the selection. Directory uploads are unsupported." } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "Adresse privée indisponible" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n اختر ملفات محلية (حتى 128 ملفًا بإجمالي 32 MiB) أو امسح الاختيار. رفع المجلدات غير مدعوم." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "العنوان الخاص غير متاح" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Lokale Dateien auswählen (bis zu 128 Dateien, insgesamt 32 MiB) oder die Auswahl leeren. Ordner-Uploads werden nicht unterstützt." } }, "es": { "stringUnit": { "state": "translated", - "value": "Dirección privada no disponible" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Selecciona archivos locales (hasta 128 archivos, 32 MiB en total) o borra la selección. No se admite subir carpetas." } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "私人位址無法使用" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n Sélectionner des fichiers locaux (jusqu’à 128 fichiers, 32 MiB au total) ou effacer la sélection. L’envoi de dossiers n’est pas pris en charge." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "专用地址不可用" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n ローカルファイルを選択(最大128個、合計32 MiB)するか、選択を解除します。ディレクトリのアップロードには対応していません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 주소를 사용할 수 없음" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プライベートアドレスを利用できません" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n 로컬 파일을 선택하거나(최대 128개, 총 32 MiB) 선택을 지웁니다. 디렉터리 업로드는 지원되지 않습니다." } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Privatna adresa nije dostupna" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n 选择本地文件(最多 128 个文件,总计 32 MiB)或清除选择。不支持上传目录。" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Privat adresse utilgængelig" + "value": "set-input-files --selector <css> (--file <path> ... | --clear) [--snapshot-after]\n 選取本機檔案(最多 128 個檔案,總計 32 MiB)或清除選取。不支援上傳目錄。" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.invalidTarget": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Indirizzo privato non disponibile" + "value": "The selector must match a file input without directory selection" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "អាសយដ្ឋានឯកជនមិនអាចប្រើបាន" + "value": "يجب أن يطابق المحدد حقل إدخال ملفات لا يستخدم اختيار المجلدات" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Privat adresse utilgjengelig" + "value": "Der Selektor muss ein Dateieingabefeld ohne Ordnerauswahl treffen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Adres prywatny niedostępny" + "value": "El selector debe coincidir con un campo de archivos sin selección de carpetas" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Endereço privado indisponível" + "value": "Le sélecteur doit correspondre à un champ de fichier sans sélection de dossier" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Частный адрес недоступен" + "value": "セレクターはディレクトリ選択を使わないファイル入力欄に一致する必要があります" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ไม่มีที่อยู่ส่วนตัว" + "value": "선택자는 디렉터리 선택이 없는 파일 입력 요소와 일치해야 합니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Özel adres kullanılamıyor" + "value": "选择器必须匹配未启用目录选择的文件输入字段" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Приватна адреса недоступна" + "value": "選取器必須符合未啟用目錄選取的檔案輸入欄位" } } } }, - "cloudTree.ports.privateAddress.detail": { + "browser.inputFiles.error.multipleRequired": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux’s authenticated route needs this machine’s private address. Refresh to retrieve it. Turning on Cloud VPN does not assign a missing address." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die authentifizierte Route von cmux benötigt die private Adresse dieser Maschine. Aktualisieren Sie, um sie abzurufen. Cloud-VPN weist keine fehlende Adresse zu." + "value": "This file input does not allow multiple files" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "La route authentifiée de cmux nécessite l’adresse privée de cette machine. Actualisez pour la récupérer. Activer le VPN Cloud n’attribue pas d’adresse manquante." + "value": "لا يسمح حقل إدخال الملفات هذا باختيار عدة ملفات" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يحتاج مسار cmux الموثّق إلى العنوان الخاص لهذا الجهاز. حدّث لاسترجاعه. تشغيل Cloud VPN لا يعيّن عنوانًا مفقودًا." + "value": "Dieses Dateieingabefeld erlaubt nicht mehrere Dateien" } }, "es": { "stringUnit": { "state": "translated", - "value": "La ruta autenticada de cmux necesita la dirección privada de esta máquina. Actualiza para obtenerla. Activar Cloud VPN no asigna una dirección que falta." + "value": "Este campo de archivos no permite seleccionar varios archivos" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 的已驗證路徑需要此機器的私人位址。請重新整理以取得位址。開啟 Cloud VPN 不會指派缺少的位址。" + "value": "Ce champ de fichier ne permet pas de sélectionner plusieurs fichiers" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 的已验证路由需要此机器的专用地址。请刷新以获取地址。开启 Cloud VPN 不会分配缺失的地址。" + "value": "このファイル入力欄では複数のファイルを選択できません" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux의 인증된 경로에는 이 머신의 비공개 주소가 필요합니다. 새로 고쳐 주소를 가져오세요. Cloud VPN을 켜도 누락된 주소가 할당되지는 않습니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux の認証済み経路にはこのマシンのプライベートアドレスが必要です。更新して取得してください。Cloud VPN を有効にしても不足しているアドレスは割り当てられません。" + "value": "이 파일 입력 요소는 여러 파일을 허용하지 않습니다" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Autentificirana ruta cmux-a treba privatnu adresu ove mašine. Osvježite da je preuzmete. Uključivanje Cloud VPN-a ne dodjeljuje adresu koja nedostaje." + "value": "此文件输入字段不允许选择多个文件" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux’ godkendte rute kræver denne maskines private adresse. Opdater for at hente den. Aktivering af Cloud VPN tildeler ikke en manglende adresse." + "value": "此檔案輸入欄位不允許選取多個檔案" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.cancelled": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "Il percorso autenticato di cmux richiede l’indirizzo privato di questa macchina. Aggiorna per recuperarlo. L’attivazione della VPN Cloud non assegna un indirizzo mancante." + "value": "File upload preparation was cancelled" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "ផ្លូវដែលបានផ្ទៀងផ្ទាត់របស់ cmux ត្រូវការអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីននេះ។ ផ្ទុកឡើងវិញដើម្បីទាញយកវា។ ការបើក Cloud VPN មិនផ្តល់អាសយដ្ឋានដែលបាត់ទេ។" + "value": "تم إلغاء تجهيز الملفات للرفع" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux sin autentiserte rute trenger denne maskinens private adresse. Oppdater for å hente den. Å slå på Cloud VPN tildeler ikke en manglende adresse." + "value": "Die Vorbereitung des Datei-Uploads wurde abgebrochen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Uwierzytelniona trasa cmux wymaga prywatnego adresu tej maszyny. Odśwież, aby go pobrać. Włączenie Cloud VPN nie przypisuje brakującego adresu." + "value": "Se canceló la preparación de los archivos para subir" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "A rota autenticada do cmux precisa do endereço privado desta máquina. Atualize para obtê-lo. Ativar o Cloud VPN não atribui um endereço ausente." + "value": "La préparation des fichiers à envoyer a été annulée" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Аутентифицированному маршруту cmux нужен частный адрес этой машины. Обновите, чтобы получить его. Включение Cloud VPN не назначает отсутствующий адрес." + "value": "ファイルのアップロード準備がキャンセルされました" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "เส้นทางที่ยืนยันตัวตนแล้วของ cmux ต้องใช้ที่อยู่ส่วนตัวของเครื่องนี้ รีเฟรชเพื่อดึงข้อมูล การเปิด Cloud VPN ไม่ได้กำหนดที่อยู่ที่ขาดหายไป" + "value": "파일 업로드 준비가 취소되었습니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux’un kimliği doğrulanmış yolu bu makinenin özel adresine ihtiyaç duyar. Adresi almak için yenileyin. Cloud VPN’i açmak eksik bir adres atamaz." + "value": "已取消准备上传文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Автентифікованому маршруту cmux потрібна приватна адреса цієї машини. Оновіть, щоб отримати її. Увімкнення Cloud VPN не призначає відсутню адресу." + "value": "已取消準備上傳檔案" } } } }, - "cloudTree.ports.routeNote": { + "browser.inputFiles.error.invalidParameters": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "cmux forwards ports without Cloud VPN. Web browsers and other Mac apps need Cloud VPN to reach services bound to the machine’s private address." - } - }, - "de": { - "stringUnit": { - "state": "translated", - "value": "cmux leitet Ports ohne Cloud-VPN weiter. Webbrowser und andere Mac-Apps benötigen Cloud-VPN, um Dienste an der privaten Adresse der Maschine zu erreichen." + "value": "set-input-files requires a selector and a files array of absolute paths" } }, - "fr": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux transfère les ports sans VPN Cloud. Les navigateurs web et les autres apps Mac ont besoin du VPN Cloud pour atteindre les services liés à l’adresse privée de la machine." + "value": "يتطلب set-input-files محددًا ومصفوفة files تحتوي على مسارات مطلقة" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يعيد cmux توجيه المنافذ دون Cloud VPN. تحتاج متصفحات الويب وتطبيقات Mac الأخرى إلى Cloud VPN للوصول إلى الخدمات المرتبطة بالعنوان الخاص للجهاز." + "value": "set-input-files benötigt einen Selektor und ein files-Array mit absoluten Pfaden" } }, "es": { "stringUnit": { "state": "translated", - "value": "cmux reenvía puertos sin Cloud VPN. Los navegadores web y otras apps de Mac necesitan Cloud VPN para acceder a servicios enlazados a la dirección privada de la máquina." + "value": "set-input-files requiere un selector y una matriz files de rutas absolutas" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "cmux 可轉送連接埠,不需要 Cloud VPN。網頁瀏覽器和其他 Mac App 需要 Cloud VPN,才能存取繫結至機器私人位址的服務。" + "value": "set-input-files nécessite un sélecteur et un tableau files de chemins absolus" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux 可转发端口,无需 Cloud VPN。网页浏览器和其他 Mac 应用需要 Cloud VPN,才能访问绑定到机器专用地址的服务。" + "value": "set-input-files にはセレクターと絶対パスを含む files 配列が必要です" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux는 Cloud VPN 없이 포트를 전달합니다. 웹 브라우저 및 다른 Mac 앱이 머신의 비공개 주소에 바인딩된 서비스에 접근하려면 Cloud VPN이 필요합니다." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "cmux は Cloud VPN なしでポートを転送します。Web ブラウザやその他の Mac アプリからマシンのプライベートアドレスにバインドされたサービスにアクセスするには Cloud VPN が必要です。" + "value": "set-input-files에는 선택자와 절대 경로로 구성된 files 배열이 필요합니다" } }, - "bs": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux prosljeđuje portove bez Cloud VPN-a. Web preglednicima i drugim Mac aplikacijama potreban je Cloud VPN za pristup servisima vezanim za privatnu adresu mašine." + "value": "set-input-files 需要选择器及包含绝对路径的 files 数组" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux videresender porte uden Cloud VPN. Webbrowsere og andre Mac-apps skal bruge Cloud VPN for at nå tjenester, der er bundet til maskinens private adresse." + "value": "set-input-files 需要選取器及包含絕對路徑的 files 陣列" } - }, - "it": { + } + } + }, + "browser.inputFiles.error.invalidSelection": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "cmux inoltra le porte senza VPN Cloud. I browser web e le altre app per Mac hanno bisogno della VPN Cloud per raggiungere i servizi associati all’indirizzo privato della macchina." + "value": "Select at most 128 files using absolute paths" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "cmux បញ្ជូនបន្តច្រកដោយមិនត្រូវការ Cloud VPN។ កម្មវិធីរុករកបណ្តាញ និងកម្មវិធី Mac ផ្សេងទៀតត្រូវការ Cloud VPN ដើម្បីចូលដល់សេវាកម្មដែលចងទៅអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីន។" + "value": "اختر ما يصل إلى 128 ملفًا باستخدام مسارات مطلقة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "cmux videresender porter uten Cloud VPN. Nettlesere og andre Mac-apper trenger Cloud VPN for å nå tjenester som er bundet til maskinens private adresse." + "value": "Wählen Sie höchstens 128 Dateien mit absoluten Pfaden aus" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "cmux przekierowuje porty bez Cloud VPN. Przeglądarki internetowe i inne aplikacje na Maca potrzebują Cloud VPN, aby dotrzeć do usług powiązanych z prywatnym adresem maszyny." + "value": "Selecciona como máximo 128 archivos mediante rutas absolutas" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "O cmux encaminha portas sem o Cloud VPN. Navegadores e outros apps do Mac precisam do Cloud VPN para acessar serviços vinculados ao endereço privado da máquina." + "value": "Sélectionnez au maximum 128 fichiers avec des chemins absolus" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "cmux перенаправляет порты без Cloud VPN. Веб-браузерам и другим приложениям Mac нужен Cloud VPN, чтобы обращаться к службам, привязанным к частному адресу машины." + "value": "絶対パスで最大128個のファイルを選択してください" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "cmux ส่งต่อพอร์ตได้โดยไม่ต้องใช้ Cloud VPN เว็บเบราว์เซอร์และแอป Mac อื่นๆ ต้องใช้ Cloud VPN เพื่อเข้าถึงบริการที่ผูกกับที่อยู่ส่วนตัวของเครื่อง" + "value": "절대 경로를 사용하여 최대 128개의 파일을 선택하세요" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux, portları Cloud VPN olmadan yönlendirir. Web tarayıcıları ve diğer Mac uygulamaları, makinenin özel adresine bağlı hizmetlere ulaşmak için Cloud VPN’e ihtiyaç duyar." + "value": "请使用绝对路径选择最多 128 个文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmux перенаправляє порти без Cloud VPN. Веббраузерам та іншим застосункам Mac потрібен Cloud VPN, щоб звертатися до служб, прив’язаних до приватної адреси машини." + "value": "請使用絕對路徑選取最多 128 個檔案" } } } }, - "cloudTree.ports.setupVPN": { + "browser.inputFiles.error.timeout": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Set Up VPN…" + "value": "Timed out preparing files for upload" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "انتهت مهلة تجهيز الملفات للرفع" } }, "de": { "stringUnit": { "state": "translated", - "value": "VPN einrichten…" + "value": "Zeitüberschreitung beim Vorbereiten der Dateien für den Upload" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Se agotó el tiempo de preparación de los archivos para subir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Configurer le VPN…" + "value": "Le délai de préparation des fichiers à envoyer a été dépassé" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "إعداد VPN…" + "value": "アップロードするファイルの準備がタイムアウトしました" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Configurar VPN…" + "value": "업로드할 파일 준비 시간이 초과되었습니다" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "准备上传文件超时" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定 VPN…" + "value": "準備上傳檔案逾時" + } + } + } + }, + "browser.inputFiles.error.tooLarge": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The combined upload must be no larger than 32 MiB" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "设置 VPN…" + "value": "يجب ألا يتجاوز الحجم الإجمالي للملفات المرفوعة 32 MiB" } }, - "ko": { + "de": { "stringUnit": { "state": "translated", - "value": "VPN 설정…" + "value": "Die Uploads dürfen insgesamt nicht größer als 32 MiB sein" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "El tamaño total de los archivos para subir no debe superar los 32 MiB" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "La taille totale des fichiers à envoyer ne doit pas dépasser 32 MiB" } }, "ja": { "stringUnit": { "state": "translated", - "value": "VPN を設定…" + "value": "アップロードするファイルの合計サイズは32 MiB以下にしてください" } }, - "bs": { + "ko": { "stringUnit": { "state": "translated", - "value": "Postavi VPN…" + "value": "전체 업로드 크기는 32 MiB를 초과할 수 없습니다" } }, - "da": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Konfigurer VPN…" + "value": "上传文件的总大小不得超过 32 MiB" } }, - "it": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Configura VPN…" + "value": "上傳檔案的總大小不得超過 32 MiB" + } + } + } + }, + "browser.inputFiles.error.unreadableFile": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every upload path must be a readable regular file" } }, - "km": { + "ar": { "stringUnit": { "state": "translated", - "value": "រៀបចំ VPN…" + "value": "يجب أن يشير كل مسار للرفع إلى ملف عادي قابل للقراءة" } }, - "nb": { + "de": { "stringUnit": { "state": "translated", - "value": "Konfigurer VPN…" + "value": "Jeder Upload-Pfad muss auf eine lesbare reguläre Datei verweisen" } }, - "pl": { + "es": { "stringUnit": { "state": "translated", - "value": "Skonfiguruj VPN…" + "value": "Cada ruta de subida debe apuntar a un archivo normal que se pueda leer" } }, - "pt-BR": { + "fr": { "stringUnit": { "state": "translated", - "value": "Configurar VPN…" + "value": "Chaque chemin à envoyer doit désigner un fichier ordinaire lisible" } }, - "ru": { + "ja": { "stringUnit": { "state": "translated", - "value": "Настроить VPN…" + "value": "各アップロードパスは読み取り可能な通常ファイルである必要があります" } }, - "th": { + "ko": { "stringUnit": { "state": "translated", - "value": "ตั้งค่า VPN…" + "value": "모든 업로드 경로는 읽을 수 있는 일반 파일이어야 합니다" } }, - "tr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "VPN’i Kur…" + "value": "每个上传路径都必须指向可读取的普通文件" } }, - "uk": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Налаштувати VPN…" + "value": "每個上傳路徑都必須指向可讀取的一般檔案" } } } }, - "cloudTree.ports.stale": { + "cloudTree.group.cloudMachines.usage": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port list may be out of date" + "value": "%1$d/%2$d" } }, "de": { "stringUnit": { "state": "translated", - "value": "Portliste möglicherweise veraltet" + "value": "%1$d/%2$d" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La liste des ports peut être obsolète" + "value": "%1$d/%2$d" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قد تكون قائمة المنافذ قديمة" + "value": "%1$d/%2$d" } }, "es": { "stringUnit": { "state": "translated", - "value": "La lista de puertos puede estar desactualizada" + "value": "%1$d/%2$d" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連接埠清單可能已過時" + "value": "%1$d/%2$d" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "端口列表可能已过期" + "value": "%1$d/%2$d" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 목록이 오래되었을 수 있음" + "value": "%1$d/%2$d" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ポートリストが古い可能性があります" + "value": "%1$d/%2$d" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lista portova je možda zastarjela" + "value": "%1$d/%2$d" } }, "da": { "stringUnit": { "state": "translated", - "value": "Portlisten er muligvis forældet" + "value": "%1$d/%2$d" } }, "it": { "stringUnit": { "state": "translated", - "value": "L’elenco delle porte potrebbe non essere aggiornato" + "value": "%1$d/%2$d" } }, "km": { "stringUnit": { "state": "translated", - "value": "បញ្ជីច្រកអាចហួសសម័យ" + "value": "%1$d/%2$d" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Portlisten kan være utdatert" + "value": "%1$d/%2$d" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Lista portów może być nieaktualna" + "value": "%1$d/%2$d" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A lista de portas pode estar desatualizada" + "value": "%1$d/%2$d" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Список портов может быть устаревшим" + "value": "%1$d/%2$d" } }, "th": { "stringUnit": { "state": "translated", - "value": "รายการพอร์ตอาจไม่เป็นปัจจุบัน" + "value": "%1$d/%2$d" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Port listesi güncel olmayabilir" + "value": "%1$d/%2$d" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Список портів може бути застарілим" + "value": "%1$d/%2$d" } } } }, - "cloudTree.ports.stale.detail": { + "cloud.ports.vpnOff.explanation": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The last scan could not be refreshed. Listed services may have changed; refresh to check again. cmux forwarding does not need Cloud VPN." + "value": "Ports open in cmux without setup. To use private addresses in other apps, set up Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Der letzte Scan konnte nicht aktualisiert werden. Die aufgeführten Dienste könnten sich geändert haben. Aktualisieren Sie erneut. Die cmux-Weiterleitung benötigt kein Cloud-VPN." + "value": "Ports lassen sich in cmux ohne Einrichtung öffnen. Richte Cloud-VPN ein, um private Adressen in anderen Apps zu verwenden." } }, "fr": { "stringUnit": { "state": "translated", - "value": "La dernière analyse n’a pas pu être actualisée. Les services listés peuvent avoir changé ; actualisez pour vérifier. Le transfert cmux ne nécessite pas de VPN Cloud." + "value": "Les ports s’ouvrent dans cmux sans configuration. Pour utiliser les adresses privées dans d’autres apps, configurez le VPN Cloud." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تعذر تحديث آخر فحص. ربما تغيرت الخدمات المدرجة؛ حدّث للفحص مجددًا. لا تحتاج إعادة توجيه cmux إلى Cloud VPN." + "value": "تُفتح المنافذ في cmux دون إعداد. لاستخدام العناوين الخاصة في التطبيقات الأخرى، أعدّ Cloud VPN." } }, "es": { "stringUnit": { "state": "translated", - "value": "No se pudo actualizar el último escaneo. Los servicios listados pueden haber cambiado; actualiza para comprobarlos. El reenvío de cmux no necesita Cloud VPN." + "value": "Los puertos se abren en cmux sin configuración. Para usar direcciones privadas en otras apps, configura Cloud VPN." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無法重新整理上次掃描結果。列出的服務可能已變更;請重新整理以再次檢查。cmux 轉送不需要 Cloud VPN。" + "value": "無需設定即可在 cmux 中開啟連接埠。如要在其他 App 使用私有位址,請設定 Cloud VPN。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无法刷新上次扫描结果。列出的服务可能已更改;请刷新以再次检查。cmux 转发无需 Cloud VPN。" + "value": "无需设置即可在 cmux 中打开端口。要在其他应用中使用私有地址,请设置云 VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마지막 검색 결과를 새로 고치지 못했습니다. 나열된 서비스가 변경되었을 수 있으니 새로 고쳐 확인하세요. cmux 전달에는 Cloud VPN이 필요하지 않습니다." + "value": "별도 설정 없이 cmux에서 포트를 열 수 있습니다. 다른 앱에서 비공개 주소를 사용하려면 Cloud VPN을 설정하세요." } }, "ja": { "stringUnit": { "state": "translated", - "value": "前回のスキャンを更新できませんでした。表示されたサービスが変わっている可能性があります。更新して再確認してください。cmux の転送に Cloud VPN は不要です。" + "value": "設定なしで cmux 内のポートを開けます。他のアプリでプライベートアドレスを使うには、Cloud VPN を設定してください。" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Posljednje skeniranje nije se moglo osvježiti. Navedeni servisi su se možda promijenili; osvježite da ponovo provjerite. Prosljeđivanje u cmux-u ne treba Cloud VPN." + "state": "needs_review", + "value": "Portovi se otvaraju u cmux-u bez podešavanja. Za korištenje privatnih adresa u drugim aplikacijama podesite Cloud VPN." } }, "da": { "stringUnit": { - "state": "translated", - "value": "Den seneste scanning kunne ikke opdateres. De viste tjenester kan have ændret sig; opdater for at kontrollere igen. Videresendelse i cmux kræver ikke Cloud VPN." + "state": "needs_review", + "value": "Porte åbnes i cmux uden opsætning. Opsæt Cloud VPN for at bruge private adresser i andre apps." } }, "it": { "stringUnit": { - "state": "translated", - "value": "Non è stato possibile aggiornare l’ultima scansione. I servizi elencati potrebbero essere cambiati; aggiorna per controllare di nuovo. L’inoltro di cmux non richiede la VPN Cloud." + "state": "needs_review", + "value": "Le porte si aprono in cmux senza configurazione. Per usare gli indirizzi privati in altre app, configura Cloud VPN." } }, "km": { "stringUnit": { - "state": "translated", - "value": "មិនអាចផ្ទុកការស្កេនចុងក្រោយឡើងវិញបានទេ។ សេវាកម្មដែលបានរាយអាចបានផ្លាស់ប្តូរ; ផ្ទុកឡើងវិញដើម្បីពិនិត្យម្តងទៀត។ ការបញ្ជូនបន្តរបស់ cmux មិនត្រូវការ Cloud VPN ទេ។" + "state": "needs_review", + "value": "ច្រកអាចបើកក្នុង cmux ដោយមិនចាំបាច់រៀបចំ។ ដើម្បីប្រើអាសយដ្ឋានឯកជនក្នុងកម្មវិធីផ្សេងទៀត សូមរៀបចំ Cloud VPN។" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Den siste skanningen kunne ikke oppdateres. De oppførte tjenestene kan ha endret seg; oppdater for å sjekke på nytt. Videresending i cmux trenger ikke Cloud VPN." + "state": "needs_review", + "value": "Porter åpnes i cmux uten oppsett. Sett opp Cloud VPN for å bruke private adresser i andre apper." } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Nie udało się odświeżyć ostatniego skanowania. Wymienione usługi mogły się zmienić; odśwież, aby sprawdzić ponownie. Przekierowywanie w cmux nie wymaga Cloud VPN." + "state": "needs_review", + "value": "Porty otwierają się w cmux bez konfiguracji. Aby używać prywatnych adresów w innych aplikacjach, skonfiguruj Cloud VPN." } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Não foi possível atualizar a última verificação. Os serviços listados podem ter mudado; atualize para verificar de novo. O encaminhamento do cmux não precisa do Cloud VPN." + "state": "needs_review", + "value": "As portas abrem no cmux sem configuração. Para usar endereços privados em outros apps, configure o Cloud VPN." } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Не удалось обновить последнее сканирование. Перечисленные службы могли измениться; обновите, чтобы проверить снова. Перенаправлению cmux Cloud VPN не нужен." + "state": "needs_review", + "value": "Порты открываются в cmux без настройки. Чтобы использовать приватные адреса в других приложениях, настройте Cloud VPN." } }, "th": { "stringUnit": { - "state": "translated", - "value": "ไม่สามารถรีเฟรชการสแกนครั้งล่าสุดได้ บริการที่แสดงอาจเปลี่ยนไปแล้ว รีเฟรชเพื่อตรวจสอบอีกครั้ง การส่งต่อของ cmux ไม่ต้องใช้ Cloud VPN" + "state": "needs_review", + "value": "เปิดพอร์ตใน cmux ได้โดยไม่ต้องตั้งค่า หากต้องการใช้ที่อยู่ส่วนตัวในแอปอื่น ให้ตั้งค่า Cloud VPN" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Son tarama yenilenemedi. Listelenen hizmetler değişmiş olabilir; yeniden denetlemek için yenileyin. cmux yönlendirmesi Cloud VPN gerektirmez." + "state": "needs_review", + "value": "Bağlantı noktaları cmux içinde kurulum gerektirmeden açılır. Diğer uygulamalarda özel adresleri kullanmak için Cloud VPN’i kurun." } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Не вдалося оновити останнє сканування. Перелічені служби могли змінитися; оновіть, щоб перевірити знову. Перенаправлення cmux не потребує Cloud VPN." + "state": "needs_review", + "value": "Порти відкриваються в cmux без налаштування. Щоб використовувати приватні адреси в інших застосунках, налаштуйте Cloud VPN." } } } }, - "cloudTree.ports.unavailable.detail": { + "cloud.ports.vpnOff.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The port scan failed; this does not mean no service is listening. Existing cmux ports may still work. Refresh to retry; Cloud VPN is not required." + "value": "Optional: Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Portscan ist fehlgeschlagen; das bedeutet nicht, dass kein Dienst lauscht. Vorhandene cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie; Cloud-VPN ist nicht erforderlich." + "value": "Optional: Cloud-VPN" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L’analyse des ports a échoué ; cela ne signifie pas qu’aucun service n’écoute. Les ports cmux existants peuvent encore fonctionner. Actualisez pour réessayer ; le VPN Cloud n’est pas nécessaire." + "value": "Facultatif : VPN Cloud" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فشل فحص المنافذ؛ هذا لا يعني عدم وجود خدمة تستمع. قد تظل منافذ cmux الحالية تعمل. حدّث للمحاولة مجددًا؛ Cloud VPN غير مطلوب." + "value": "اختياري: Cloud VPN" } }, "es": { "stringUnit": { "state": "translated", - "value": "Falló el escaneo de puertos; no significa que no haya servicios en escucha. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reintentar; Cloud VPN no es necesario." + "value": "Opcional: Cloud VPN" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "連接埠掃描失敗;這不代表沒有服務正在監聽。現有 cmux 連接埠可能仍可使用。請重新整理以重試;不需要 Cloud VPN。" + "value": "選用:Cloud VPN" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "端口扫描失败;这并不代表没有服务正在监听。现有 cmux 端口可能仍可使用。请刷新以重试;无需 Cloud VPN。" + "value": "可选:云 VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 검색이 실패했지만 수신 대기 서비스가 없다는 뜻은 아닙니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 시도하세요. Cloud VPN은 필요하지 않습니다." + "value": "선택 사항: Cloud VPN" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ポートスキャンが失敗しましたが、サービスが待ち受けていないとは限りません。既存の cmux ポートは引き続き動作する可能性があります。更新して再試行してください。Cloud VPN は不要です。" + "value": "任意:Cloud VPN" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Skeniranje portova nije uspjelo; to ne znači da nijedan servis ne sluša. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovni pokušaj; Cloud VPN nije potreban." + "state": "needs_review", + "value": "Opcionalno: Cloud VPN" } }, "da": { "stringUnit": { - "state": "translated", - "value": "Portscanningen mislykkedes; det betyder ikke, at ingen tjeneste lytter. Eksisterende cmux-porte virker muligvis stadig. Opdater for at prøve igen; Cloud VPN er ikke påkrævet." + "state": "needs_review", + "value": "Valgfrit: Cloud VPN" } }, "it": { "stringUnit": { - "state": "translated", - "value": "La scansione delle porte non è riuscita; ciò non significa che nessun servizio sia in ascolto. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riprovare; la VPN Cloud non è necessaria." + "state": "needs_review", + "value": "Facoltativo: Cloud VPN" } }, "km": { "stringUnit": { - "state": "translated", - "value": "ការស្កេនច្រកបានបរាជ័យ; នេះមិនមានន័យថាគ្មានសេវាកម្មណាកំពុងស្តាប់ទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីព្យាយាមម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" + "state": "needs_review", + "value": "ជាជម្រើស៖ Cloud VPN" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Portskanningen mislyktes; det betyr ikke at ingen tjeneste lytter. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å prøve igjen; Cloud VPN er ikke nødvendig." + "state": "needs_review", + "value": "Valgfritt: Cloud VPN" } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Skanowanie portów nie powiodło się; nie oznacza to, że żadna usługa nie nasłuchuje. Istniejące porty cmux mogą nadal działać. Odśwież, aby spróbować ponownie; Cloud VPN nie jest wymagany." + "state": "needs_review", + "value": "Opcjonalnie: Cloud VPN" } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "A verificação de portas falhou; isso não significa que nenhum serviço esteja em escuta. As portas existentes do cmux ainda podem funcionar. Atualize para tentar de novo; o Cloud VPN não é necessário." + "state": "needs_review", + "value": "Opcional: Cloud VPN" } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Сканирование портов не удалось; это не значит, что ни одна служба не прослушивает порты. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы повторить; Cloud VPN не требуется." + "state": "needs_review", + "value": "Необязательно: Cloud VPN" } }, "th": { "stringUnit": { - "state": "translated", - "value": "การสแกนพอร์ตล้มเหลว ไม่ได้หมายความว่าไม่มีบริการที่กำลังรับฟัง พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อลองอีกครั้ง ไม่จำเป็นต้องใช้ Cloud VPN" + "state": "needs_review", + "value": "ตัวเลือกเพิ่มเติม: Cloud VPN" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Port taraması başarısız oldu; bu, dinleyen bir hizmet olmadığı anlamına gelmez. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden denemek için yenileyin; Cloud VPN gerekmez." + "state": "needs_review", + "value": "İsteğe bağlı: Cloud VPN" } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Сканування портів не вдалося; це не означає, що жодна служба не прослуховує. Наявні порти cmux можуть і далі працювати. Оновіть, щоб повторити; Cloud VPN не потрібен." + "state": "needs_review", + "value": "Необов’язково: Cloud VPN" } } } }, - "cloudTree.ports.unsupported": { + "cloud.vpn.setup.address.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ports are not supported by this provider." + "value": "Each machine has its own private IP. Two machines may both expose port 3000, for example 10.40.0.10:3000 and 10.40.0.11:3000. Right-click a Cloud port and choose Copy Private Address URL after connecting. These addresses are private, not public share links." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ports werden von diesem Anbieter nicht unterstützt." + "value": "Jede Maschine hat eine eigene private IP. Zwei Maschinen können beide Port 3000 verwenden, etwa 10.40.0.10:3000 und 10.40.0.11:3000. Klicken Sie nach dem Verbinden mit der rechten Maustaste auf einen Cloud-Port und wählen Sie URL der privaten Adresse kopieren. Diese Adressen sind privat und keine öffentlichen Freigabelinks." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les ports ne sont pas pris en charge par ce fournisseur." + "value": "Chaque machine a sa propre IP privée. Deux machines peuvent utiliser le port 3000, par exemple 10.40.0.10:3000 et 10.40.0.11:3000. Après connexion, faites un clic droit sur un port Cloud et choisissez Copier l’URL de l’adresse privée. Ces adresses sont privées, ce ne sont pas des liens publics de partage." } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لا يدعم هذا الموفر المنافذ." + "value": "Cada máquina tiene su propia IP privada. Dos máquinas pueden usar el puerto 3000, como 10.40.0.10:3000 y 10.40.0.11:3000. Después de conectar, haz clic derecho en un puerto Cloud y elige Copiar URL de dirección privada. Estas direcciones son privadas, no enlaces públicos para compartir." } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este proveedor no admite puertos." + "value": "各マシンには個別のプライベートIPがあります。2台のマシンがどちらもポート3000を使えます(例:10.40.0.10:3000と10.40.0.11:3000)。接続後にCloudポートを右クリックし、「プライベートアドレスURLをコピー」を選びます。これらはプライベートアドレスで、公開共有リンクではありません。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此提供者不支援連接埠。" + "value": "每台机器都有自己的私有 IP。两台机器可以同时使用端口 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。连接后右键点击 Cloud 端口,选择“复制私有地址 URL”。这些地址是私有地址,不是公开分享链接。" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此提供商不支持端口。" + "value": "每台機器都有自己的私有 IP。兩台機器可以同時使用連接埠 3000,例如 10.40.0.10:3000 和 10.40.0.11:3000。連線後對 Cloud 連接埠按右鍵,選擇「複製私有位址 URL」。這些位址是私有位址,不是公開分享連結。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 제공자는 포트를 지원하지 않습니다." + "value": "각 머신에는 고유한 비공개 IP가 있습니다. 두 머신 모두 포트 3000을 사용할 수 있습니다(예: 10.40.0.10:3000 및 10.40.0.11:3000). 연결 후 Cloud 포트를 오른쪽 클릭하고 비공개 주소 URL 복사를 선택하세요. 이 주소는 비공개이며 공개 공유 링크가 아닙니다." } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このプロバイダーはポートをサポートしていません。" + "value": "لكل جهاز عنوان IP خاص به. يمكن لجهازين استخدام المنفذ 3000، مثل 10.40.0.10:3000 و10.40.0.11:3000. بعد الاتصال، انقر بزر الماوس الأيمن على منفذ Cloud واختر نسخ رابط العنوان الخاص. هذه عناوين خاصة وليست روابط مشاركة عامة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovaj pružalac ne podržava portove." + "value": "Svaka mašina ima svoju privatnu IP adresu. Dvije mašine mogu koristiti port 3000, na primjer 10.40.0.10:3000 i 10.40.0.11:3000. Nakon povezivanja kliknite desnim dugmetom na Cloud port i izaberite Kopiraj URL privatne adrese. Ovo su privatne adrese, a ne javne veze za dijeljenje." } }, "da": { "stringUnit": { "state": "translated", - "value": "Porte understøttes ikke af denne udbyder." + "value": "Hver maskine har sin egen private IP. To maskiner kan begge bruge port 3000, f.eks. 10.40.0.10:3000 og 10.40.0.11:3000. Højreklik på en Cloud-port efter tilslutning, og vælg Kopiér URL til privat adresse. Adresserne er private, ikke offentlige delelinks." } }, "it": { "stringUnit": { "state": "translated", - "value": "Le porte non sono supportate da questo provider." + "value": "Ogni macchina ha il proprio IP privato. Due macchine possono usare entrambe la porta 3000, ad esempio 10.40.0.10:3000 e 10.40.0.11:3000. Dopo la connessione fai clic destro su una porta Cloud e scegli Copia URL indirizzo privato. Sono indirizzi privati, non link pubblici." } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកផ្តល់សេវានេះមិនគាំទ្រច្រកទេ។" + "value": "ម៉ាស៊ីននីមួយៗមាន IP ឯកជនផ្ទាល់ខ្លួន។ ម៉ាស៊ីនពីរអាចប្រើច្រក 3000 ដូចគ្នា ឧទាហរណ៍ 10.40.0.10:3000 និង 10.40.0.11:3000។ បន្ទាប់ពីភ្ជាប់ ចុចខាងស្តាំលើច្រក Cloud ហើយជ្រើស ចម្លង URL អាសយដ្ឋានឯកជន។ ទាំងនេះជាអាសយដ្ឋានឯកជន មិនមែនតំណចែករំលែកសាធារណៈទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Porter støttes ikke av denne leverandøren." + "value": "Hver maskin har sin egen private IP. To maskiner kan bruke port 3000, for eksempel 10.40.0.10:3000 og 10.40.0.11:3000. Høyreklikk en Cloud-port etter tilkobling og velg Kopier URL for privat adresse. Adressene er private, ikke offentlige delingslenker." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ten dostawca nie obsługuje portów." + "value": "Każda maszyna ma własny prywatny adres IP. Dwie maszyny mogą używać portu 3000, na przykład 10.40.0.10:3000 i 10.40.0.11:3000. Po połączeniu kliknij prawym przyciskiem port Cloud i wybierz Kopiuj URL prywatnego adresu. To prywatne adresy, nie publiczne linki udostępniania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Este provedor não oferece suporte a portas." + "value": "Cada máquina tem seu próprio IP privado. Duas máquinas podem usar a porta 3000, por exemplo 10.40.0.10:3000 e 10.40.0.11:3000. Depois de conectar, clique com o botão direito em uma porta Cloud e escolha Copiar URL do endereço privado. Esses endereços são privados, não links públicos de compartilhamento." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Этот провайдер не поддерживает порты." + "value": "У каждой машины свой частный IP. Две машины могут использовать порт 3000, например 10.40.0.10:3000 и 10.40.0.11:3000. После подключения щёлкните правой кнопкой мыши порт Cloud и выберите Скопировать URL частного адреса. Это частные адреса, а не публичные ссылки." } }, "th": { "stringUnit": { "state": "translated", - "value": "ผู้ให้บริการนี้ไม่รองรับพอร์ต" + "value": "แต่ละเครื่องมี IP ส่วนตัวของตนเอง สองเครื่องสามารถใช้พอร์ต 3000 ได้ เช่น 10.40.0.10:3000 และ 10.40.0.11:3000 หลังเชื่อมต่อ คลิกขวาที่พอร์ต Cloud แล้วเลือกคัดลอก URL ที่อยู่ส่วนตัว ที่อยู่เหล่านี้เป็นส่วนตัว ไม่ใช่ลิงก์สาธารณะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sağlayıcı portları desteklemiyor." + "value": "Her makinenin kendi özel IP’si vardır. İki makine 3000 bağlantı noktasını kullanabilir; örneğin 10.40.0.10:3000 ve 10.40.0.11:3000. Bağlandıktan sonra bir Cloud portuna sağ tıklayın ve Özel Adres URL’sini Kopyala’yı seçin. Bunlar özel adreslerdir, herkese açık paylaşım bağlantıları değildir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Цей постачальник не підтримує порти." + "value": "Кожна машина має власну приватну IP-адресу. Дві машини можуть використовувати порт 3000, наприклад 10.40.0.10:3000 і 10.40.0.11:3000. Після підключення клацніть правою кнопкою миші порт Cloud і виберіть Копіювати URL приватної адреси. Це приватні адреси, а не публічні посилання для спільного доступу." } } } }, - "cloudTree.ports.unsupported.detail": { + "cloud.vpn.setup.cancel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This provider has no supported in-app port route. Open a shell to access the service inside the machine. Cloud VPN does not add provider support." + "value": "Cancel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieser Anbieter unterstützt keine Portverbindung in der App. Öffnen Sie eine Shell, um innerhalb der Maschine auf den Dienst zuzugreifen. Cloud-VPN fügt keine Anbieterunterstützung hinzu." + "value": "Abbrechen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce fournisseur ne prend pas en charge les ports dans l’app. Ouvrez un shell pour accéder au service dans la machine. Le VPN Cloud n’ajoute pas cette prise en charge." + "value": "Annuler" } }, - "ar": { + "es": { "stringUnit": { "state": "translated", - "value": "لا يدعم هذا الموفر مسار منافذ داخل التطبيق. افتح صدفة للوصول إلى الخدمة داخل الجهاز. لا يضيف Cloud VPN دعمًا للموفر." + "value": "Cancelar" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Este proveedor no admite una ruta de puertos dentro de la app. Abre una shell para acceder al servicio dentro de la máquina. Cloud VPN no añade soporte al proveedor." + "value": "キャンセル" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此提供者不支援應用程式內連接埠路徑。請開啟 Shell 以在機器內存取服務。Cloud VPN 不會新增提供者支援。" + "value": "取消" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此提供商不支持应用内端口路由。请打开 Shell 以在机器内部访问服务。Cloud VPN 不会添加提供商支持。" + "value": "取消" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 제공자는 앱 내 포트 경로를 지원하지 않습니다. 셸을 열어 머신 내부의 서비스에 접근하세요. Cloud VPN으로 제공자 지원이 추가되지는 않습니다." + "value": "취소" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "このプロバイダーはアプリ内のポート経路に対応していません。シェルを開き、マシン内でサービスにアクセスしてください。Cloud VPN を有効にしても対応は追加されません。" + "value": "إلغاء" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ovaj pružalac nema podržanu rutu portova unutar aplikacije. Otvorite shell da pristupite servisu unutar mašine. Cloud VPN ne dodaje podršku pružaoca." + "value": "Otkaži" } }, "da": { "stringUnit": { "state": "translated", - "value": "Denne udbyder har ingen understøttet portrute i appen. Åbn en shell for at få adgang til tjenesten inde i maskinen. Cloud VPN tilføjer ikke understøttelse for udbyderen." + "value": "Annuller" } }, "it": { "stringUnit": { "state": "translated", - "value": "Questo provider non ha un percorso delle porte supportato nell’app. Apri una shell per accedere al servizio all’interno della macchina. La VPN Cloud non aggiunge il supporto del provider." + "value": "Annulla" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកផ្តល់សេវានេះគ្មានផ្លូវច្រកក្នុងកម្មវិធីដែលគាំទ្រទេ។ បើក shell ដើម្បីចូលប្រើសេវាកម្មនៅខាងក្នុងម៉ាស៊ីន។ Cloud VPN មិនបន្ថែមការគាំទ្រអ្នកផ្តល់សេវាទេ។" + "value": "បោះបង់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Denne leverandøren har ingen støttet portrute i appen. Åpne et skall for å få tilgang til tjenesten inne i maskinen. Cloud VPN legger ikke til støtte for leverandøren." + "value": "Avbryt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ten dostawca nie ma obsługiwanej trasy portów w aplikacji. Otwórz powłokę, aby uzyskać dostęp do usługi wewnątrz maszyny. Cloud VPN nie dodaje obsługi dostawcy." + "value": "Anuluj" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Este provedor não tem uma rota de portas compatível no app. Abra um shell para acessar o serviço dentro da máquina. O Cloud VPN não adiciona suporte ao provedor." + "value": "Cancelar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "У этого провайдера нет поддерживаемого маршрута портов в приложении. Откройте оболочку, чтобы получить доступ к службе внутри машины. Cloud VPN не добавляет поддержку провайдера." + "value": "Отменить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ผู้ให้บริการนี้ไม่มีเส้นทางพอร์ตในแอปที่รองรับ เปิดเชลล์เพื่อเข้าถึงบริการภายในเครื่อง Cloud VPN ไม่ได้เพิ่มการรองรับผู้ให้บริการ" + "value": "ยกเลิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu sağlayıcının desteklenen bir uygulama içi port yolu yok. Makinenin içindeki hizmete erişmek için bir kabuk açın. Cloud VPN sağlayıcı desteği eklemez." + "value": "İptal" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Цей постачальник не має підтримуваного маршруту портів у застосунку. Відкрийте оболонку, щоб отримати доступ до служби всередині машини. Cloud VPN не додає підтримку постачальника." + "value": "Скасувати" } } } }, - "cloudTree.port.openInCmux": { + "cloud.vpn.setup.connect": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open in cmux" + "value": "Connect Cloud VPN" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "فتح في cmux" + "value": "Cloud-VPN verbinden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "In cmux öffnen" + "value": "Connecter le VPN Cloud" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir en cmux" + "value": "Conectar VPN de Cloud" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Ouvrir dans cmux" + "value": "Cloud VPNに接続" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmuxで開く" + "value": "连接 Cloud VPN" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "連接 Cloud VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "cmux에서 열기" + "value": "Cloud VPN 연결" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "在 cmux 中打开" + "value": "توصيل VPN الخاص بـ Cloud" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "在 cmux 中開啟" + "value": "Poveži Cloud VPN" } - } - } - }, - "cloudTree.port.openInCmux.help": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Open in cmux. No VPN setup needed." + "value": "Forbind Cloud VPN" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "افتح في cmux. لا يلزم إعداد VPN." + "value": "Connetti VPN Cloud" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "In cmux öffnen. Keine VPN-Einrichtung nötig." + "value": "ភ្ជាប់ Cloud VPN" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Abrir en cmux. No hace falta configurar una VPN." + "value": "Koble til Cloud VPN" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Ouvrir dans cmux. Aucune configuration VPN nécessaire." + "value": "Połącz z Cloud VPN" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "cmux で開きます。VPN の設定は不要です。" + "value": "Conectar Cloud VPN" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "cmux에서 열기. VPN 설정이 필요하지 않습니다." + "value": "Подключить Cloud VPN" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "在 cmux 中打开。无需设置 VPN。" + "value": "เชื่อมต่อ Cloud VPN" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "在 cmux 中開啟。無需設定 VPN。" + "value": "Cloud VPN’e bağlan" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Підключити Cloud VPN" } } } }, - "cloudTree.port.title": { + "cloud.vpn.setup.connected": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Port %@" + "value": "Connected" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "المنفذ %@" + "value": "Verbunden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Port-Nr. %@" + "value": "Connecté" } }, "es": { "stringUnit": { "state": "translated", - "value": "Puerto %@" + "value": "Conectada" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Port n° %@" + "value": "接続済み" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ポート %@" + "value": "已连接" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "已連線" } }, "ko": { "stringUnit": { "state": "translated", - "value": "포트 %@" + "value": "연결됨" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "端口 %@" + "value": "متصل" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "連接埠 %@" + "value": "Povezano" } - } - } - }, - "cloudTree.placeholder.deviceOffline": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Offline — its workspaces return when it does" + "value": "Forbundet" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "غير متصل — ستعود مساحات عمله عند اتصاله مجددًا" + "value": "Connessa" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Offline — die Arbeitsbereiche erscheinen wieder, sobald das Gerät online ist" + "value": "បានភ្ជាប់" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Sin conexión — sus espacios de trabajo volverán cuando se conecte" + "value": "Tilkoblet" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Hors ligne — ses espaces de travail réapparaîtront à sa reconnexion" + "value": "Połączono" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "オフライン — 再接続するとワークスペースが戻ります" + "value": "Conectada" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "오프라인 — 다시 연결되면 작업 공간이 돌아옵니다" + "value": "Подключено" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "离线 — 重新连接后会恢复工作区" + "value": "เชื่อมต่อแล้ว" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "離線 — 重新連線後會恢復工作區" + "value": "Bağlandı" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Підключено" } } } }, - "cloud.vpn.setup.heading": { + "cloud.vpn.setup.disconnect": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Use Cloud machines from any app" + "value": "Disconnect" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschinen aus jeder App verwenden" + "value": "Trennen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Utiliser les machines Cloud depuis toute app" + "value": "Déconnecter" } }, "es": { "stringUnit": { "state": "translated", - "value": "Usar máquinas Cloud desde cualquier app" + "value": "Desconectar" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ほかのアプリからCloudマシンを使う" + "value": "切断" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "从任何应用使用 Cloud 机器" + "value": "断开连接" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "從任何 App 使用 Cloud 機器" + "value": "中斷連線" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모든 앱에서 Cloud 머신 사용" + "value": "연결 해제" } }, "ar": { "stringUnit": { "state": "translated", - "value": "استخدام أجهزة Cloud من أي تطبيق" + "value": "قطع الاتصال" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Koristite Cloud mašine iz bilo koje aplikacije" + "value": "Prekini vezu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Brug Cloud-maskiner fra alle apps" + "value": "Afbryd" } }, "it": { "stringUnit": { "state": "translated", - "value": "Usa le macchine Cloud da qualsiasi app" + "value": "Disconnetti" } }, "km": { "stringUnit": { "state": "translated", - "value": "ប្រើម៉ាស៊ីន Cloud ពីកម្មវិធីណាមួយ" + "value": "ផ្តាច់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Bruk Cloud-maskiner fra alle apper" + "value": "Koble fra" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Używaj maszyn Cloud z dowolnej aplikacji" + "value": "Rozłącz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Use máquinas Cloud em qualquer app" + "value": "Desconectar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Используйте Cloud-машины из любого приложения" + "value": "Отключить" } }, "th": { "stringUnit": { "state": "translated", - "value": "ใช้เครื่อง Cloud จากทุกแอป" + "value": "ตัดการเชื่อมต่อ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cloud makinelerini her uygulamadan kullanın" + "value": "Bağlantıyı kes" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Використовуйте Cloud-машини з будь-якої програми" + "value": "Від’єднати" } } } }, - "cloud.vpn.setup.subtitle": { + "cloud.vpn.setup.entry.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Optional access to each VM's private address and original ports, such as 10.40.0.10:3000." + "value": "Optional private IP access for other apps" } }, "de": { "stringUnit": { "state": "translated", - "value": "Optionaler Zugriff auf die private Adresse und die ursprünglichen Ports jeder VM, etwa 10.40.0.10:3000." + "value": "Optionaler Zugriff auf private IPs für andere Apps" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Accès facultatif à chaque adresse privée et aux ports d’origine des VM, comme 10.40.0.10:3000." + "value": "Accès facultatif aux IP privées pour les autres apps" } }, "es": { "stringUnit": { "state": "translated", - "value": "Acceso opcional a la dirección privada y los puertos originales de cada VM, como 10.40.0.10:3000." + "value": "Acceso opcional a IP privadas para otras apps" } }, "ja": { "stringUnit": { "state": "translated", - "value": "各VMのプライベートアドレスと元のポート(例:10.40.0.10:3000)にアクセスするための任意の設定です。" + "value": "ほかのアプリからプライベートIPへアクセスする任意の設定" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "可选设置,用于访问每台 VM 的私有地址和原始端口,例如 10.40.0.10:3000。" + "value": "为其他应用提供可选的私有 IP 访问" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "選用設定,可存取每台 VM 的私有位址和原始連接埠,例如 10.40.0.10:3000。" + "value": "為其他 App 提供選用的私有 IP 存取" } }, "ko": { "stringUnit": { "state": "translated", - "value": "각 VM의 비공개 주소와 원래 포트(예: 10.40.0.10:3000)에 접근하기 위한 선택 설정입니다." + "value": "다른 앱의 비공개 IP 접근을 위한 선택 설정" } }, "ar": { "stringUnit": { "state": "translated", - "value": "وصول اختياري إلى العنوان الخاص والمنافذ الأصلية لكل جهاز افتراضي، مثل 10.40.0.10:3000." + "value": "وصول اختياري إلى عناوين IP الخاصة للتطبيقات الأخرى" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Opcionalni pristup privatnoj adresi i izvornim portovima svake VM, na primjer 10.40.0.10:3000." + "value": "Opcionalni pristup privatnim IP adresama za druge aplikacije" } }, "da": { "stringUnit": { "state": "translated", - "value": "Valgfri adgang til hver VM’s private adresse og oprindelige porte, f.eks. 10.40.0.10:3000." + "value": "Valgfri privat IP-adgang for andre apps" } }, "it": { "stringUnit": { "state": "translated", - "value": "Accesso facoltativo all’indirizzo privato e alle porte originali di ogni VM, ad esempio 10.40.0.10:3000." + "value": "Accesso facoltativo agli IP privati per altre app" } }, "km": { "stringUnit": { "state": "translated", - "value": "ចូលប្រើអាសយដ្ឋានឯកជន និងច្រកដើមរបស់ VM នីមួយៗ ដូចជា 10.40.0.10:3000 ជាជម្រើស។" + "value": "ចូលប្រើ IP ឯកជនសម្រាប់កម្មវិធីផ្សេងៗជាជម្រើស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Valgfri tilgang til hver VMs private adresse og opprinnelige porter, som 10.40.0.10:3000." + "value": "Valgfri privat IP-tilgang for andre apper" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opcjonalny dostęp do prywatnego adresu i oryginalnych portów każdej maszyny VM, na przykład 10.40.0.10:3000." + "value": "Opcjonalny dostęp innych aplikacji do prywatnych adresów IP" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Acesso opcional ao endereço privado e às portas originais de cada VM, como 10.40.0.10:3000." + "value": "Acesso opcional a IPs privados para outros apps" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Необязательный доступ к частному адресу и исходным портам каждой VM, например 10.40.0.10:3000." + "value": "Необязательный доступ других приложений к частным IP" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเข้าถึงที่ไม่บังคับไปยังที่อยู่ส่วนตัวและพอร์ตเดิมของ VM แต่ละเครื่อง เช่น 10.40.0.10:3000" + "value": "การเข้าถึง IP ส่วนตัวสำหรับแอปอื่นแบบไม่บังคับ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Her VM’nin özel adresine ve özgün bağlantı noktalarına isteğe bağlı erişim; örneğin 10.40.0.10:3000." + "value": "Diğer uygulamalar için isteğe bağlı özel IP erişimi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Необов’язковий доступ до приватної адреси та початкових портів кожної VM, наприклад 10.40.0.10:3000." + "value": "Необов’язковий доступ інших програм до приватних IP" } } } }, - "cloud.vpn.setup.howItWorks.title": { + "cloud.vpn.setup.failed": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "How it works" + "value": "Needs attention" } }, "de": { "stringUnit": { "state": "translated", - "value": "So funktioniert es" + "value": "Aktion erforderlich" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fonctionnement" + "value": "Action requise" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cómo funciona" + "value": "Requiere atención" } }, "ja": { "stringUnit": { "state": "translated", - "value": "仕組み" + "value": "対応が必要" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "工作原理" + "value": "需要处理" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "運作方式" + "value": "需要處理" } }, "ko": { "stringUnit": { "state": "translated", - "value": "작동 방식" + "value": "조치 필요" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طريقة العمل" + "value": "يتطلب إجراءً" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kako radi" + "value": "Potrebna pažnja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sådan fungerer det" + "value": "Kræver opmærksomhed" } }, "it": { "stringUnit": { "state": "translated", - "value": "Come funziona" + "value": "Richiede attenzione" } }, "km": { "stringUnit": { "state": "translated", - "value": "របៀបដំណើរការ" + "value": "ត្រូវការការយកចិត្តទុកដាក់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Slik fungerer det" + "value": "Krever handling" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Jak to działa" + "value": "Wymaga uwagi" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Como funciona" + "value": "Requer atenção" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Как это работает" + "value": "Требуется действие" } }, "th": { "stringUnit": { "state": "translated", - "value": "วิธีการทำงาน" + "value": "ต้องดำเนินการ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Nasıl çalışır" + "value": "İlgilenilmeli" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Як це працює" + "value": "Потрібна увага" } } } }, - "cloud.vpn.setup.status.off": { + "cloud.vpn.setup.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Off. Your Cloud panes continue to work through cmux's built-in route." + "value": "Off" } }, "de": { "stringUnit": { "state": "translated", - "value": "Aus. Ihre Cloud-Bereiche funktionieren weiterhin über die integrierte Verbindung von cmux." + "value": "Aus" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Désactivé. Vos volets Cloud continuent de fonctionner via la connexion intégrée de cmux." + "value": "Désactivé" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desactivada. Tus paneles Cloud siguen funcionando mediante la conexión integrada de cmux." + "value": "Desactivada" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフ。Cloudペインは引き続きcmux内蔵の接続経路で動作します。" + "value": "オフ" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "已关闭。Cloud 面板仍通过 cmux 内置连接工作。" + "value": "已关闭" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "已關閉。Cloud 面板仍透過 cmux 內建連線運作。" + "value": "已關閉" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꺼짐. Cloud 패널은 cmux의 내장 연결을 통해 계속 작동합니다." + "value": "꺼짐" } }, "ar": { "stringUnit": { "state": "translated", - "value": "متوقف. تستمر لوحات Cloud في العمل عبر اتصال cmux المضمن." + "value": "متوقف" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Isključeno. Cloud paneli i dalje rade preko ugrađene cmux veze." + "value": "Isključeno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fra. Dine Cloud-paneler fungerer stadig via cmux’ indbyggede forbindelse." + "value": "Fra" } }, "it": { "stringUnit": { "state": "translated", - "value": "Disattivata. I pannelli Cloud continuano a funzionare tramite la connessione integrata di cmux." + "value": "Disattivata" } }, "km": { "stringUnit": { "state": "translated", - "value": "បិទ។ ផ្ទាំង Cloud របស់អ្នកនៅតែដំណើរការតាមការភ្ជាប់ដែលមានស្រាប់របស់ cmux។" + "value": "បិទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Av. Cloud-panelene dine fortsetter å fungere gjennom cmux sin innebygde forbindelse." + "value": "Av" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyłączona. Panele Cloud nadal działają przez wbudowane połączenie cmux." + "value": "Wyłączona" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desativada. Seus painéis Cloud continuam funcionando pela conexão integrada do cmux." + "value": "Desativada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Выключено. Панели Cloud продолжают работать через встроенное соединение cmux." + "value": "Выключено" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปิดอยู่ แผง Cloud ยังคงทำงานผ่านการเชื่อมต่อในตัวของ cmux" + "value": "ปิด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kapalı. Cloud panelleriniz cmux’un yerleşik bağlantısıyla çalışmaya devam eder." + "value": "Kapalı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вимкнено. Панелі Cloud продовжують працювати через вбудоване з’єднання cmux." + "value": "Вимкнено" } } } }, - "cloud.vpn.setup.steps.title": { + "cloud.vpn.setup.openUnavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "First-time setup" + "value": "Cloud VPN setup is unavailable" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ersteinrichtung" + "value": "Cloud-VPN-Einrichtung ist nicht verfügbar" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Première configuration" + "value": "La configuration du VPN Cloud est indisponible" } }, "es": { "stringUnit": { "state": "translated", - "value": "Configuración inicial" + "value": "La configuración de VPN de Cloud no está disponible" } }, "ja": { "stringUnit": { "state": "translated", - "value": "初回設定" + "value": "Cloud VPN設定は利用できません" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "首次设置" + "value": "Cloud VPN 设置不可用" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "首次設定" + "value": "無法使用 Cloud VPN 設定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최초 설정" + "value": "Cloud VPN 설정을 사용할 수 없습니다" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الإعداد الأولي" + "value": "إعداد VPN الخاص بـ Cloud غير متاح" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Prvo podešavanje" + "value": "Podešavanje Cloud VPN-a nije dostupno" } }, "da": { "stringUnit": { "state": "translated", - "value": "Første opsætning" + "value": "Cloud VPN-opsætning er ikke tilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Prima configurazione" + "value": "La configurazione VPN Cloud non è disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការរៀបចំលើកដំបូង" + "value": "ការរៀបចំ Cloud VPN មិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Førstegangsoppsett" + "value": "Cloud VPN-oppsett er ikke tilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pierwsza konfiguracja" + "value": "Konfiguracja Cloud VPN jest niedostępna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Primeira configuração" + "value": "A configuração do Cloud VPN não está disponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Первая настройка" + "value": "Настройка Cloud VPN недоступна" } }, "th": { "stringUnit": { "state": "translated", - "value": "การตั้งค่าครั้งแรก" + "value": "การตั้งค่า Cloud VPN ไม่พร้อมใช้งาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İlk kurulum" + "value": "Cloud VPN kurulumu kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Перше налаштування" + "value": "Налаштування Cloud VPN недоступне" } } } }, - "cloud.vpn.setup.steps.extension": { + "cloud.vpn.setup.permission.body": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "1. Click Connect Cloud VPN. When macOS asks, allow the cmux network extension in System Settings." + "value": "The VPN software is included in cmux. You do not need another app. macOS may require your password or Touch ID during approval." } }, "de": { "stringUnit": { "state": "translated", - "value": "1. Klicken Sie auf Cloud-VPN verbinden. Erlauben Sie auf Aufforderung von macOS die cmux-Netzwerkerweiterung in den Systemeinstellungen." + "value": "Die VPN-Software ist in cmux enthalten. Sie brauchen keine weitere App. macOS kann bei der Genehmigung Ihr Passwort oder Touch ID verlangen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "1. Cliquez sur Connecter le VPN Cloud. Lorsque macOS le demande, autorisez l’extension réseau cmux dans Réglages Système." + "value": "Le logiciel VPN est inclus dans cmux. Aucune autre app n’est nécessaire. macOS peut demander votre mot de passe ou Touch ID lors de l’autorisation." } }, "es": { "stringUnit": { "state": "translated", - "value": "1. Haz clic en Conectar VPN de Cloud. Cuando macOS lo solicite, permite la extensión de red de cmux en Ajustes del Sistema." + "value": "El software VPN está incluido en cmux. No necesitas otra app. macOS puede solicitar tu contraseña o Touch ID durante la autorización." } }, "ja": { "stringUnit": { "state": "translated", - "value": "1. 「Cloud VPNに接続」をクリックします。macOSに求められたら、システム設定でcmuxのネットワーク機能拡張を許可します。" + "value": "VPNソフトウェアはcmuxに含まれています。別のアプリは不要です。承認時にmacOSがパスワードまたはTouch IDを求めることがあります。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "1. 点击“连接 Cloud VPN”。macOS 提示时,在系统设置中允许 cmux 网络扩展。" + "value": "cmux 已包含 VPN 软件,无需其他应用。批准时,macOS 可能要求您输入密码或使用触控 ID。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "1. 按一下「連接 Cloud VPN」。macOS 提示時,請在系統設定中允許 cmux 網路延伸功能。" + "value": "cmux 已包含 VPN 軟體,不需要其他 App。核准時,macOS 可能要求您輸入密碼或使用 Touch ID。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "1. Cloud VPN 연결을 클릭합니다. macOS에서 요청하면 시스템 설정에서 cmux 네트워크 확장을 허용합니다." + "value": "VPN 소프트웨어는 cmux에 포함되어 있습니다. 다른 앱은 필요하지 않습니다. 승인 시 macOS에서 암호 또는 Touch ID를 요청할 수 있습니다." } }, "ar": { "stringUnit": { "state": "translated", - "value": "1. انقر على توصيل VPN الخاص بـ Cloud. عندما يطلب macOS ذلك، اسمح بامتداد شبكة cmux في إعدادات النظام." + "value": "برنامج VPN مضمن في cmux. لا تحتاج إلى تطبيق آخر. قد يطلب macOS كلمة المرور أو Touch ID أثناء الموافقة." } }, "bs": { "stringUnit": { "state": "translated", - "value": "1. Kliknite Poveži Cloud VPN. Kada macOS zatraži, dozvolite cmux mrežni dodatak u Postavkama sistema." + "value": "VPN softver je uključen u cmux. Nije potrebna druga aplikacija. macOS može zatražiti lozinku ili Touch ID tokom odobravanja." } }, "da": { "stringUnit": { "state": "translated", - "value": "1. Klik på Forbind Cloud VPN. Når macOS spørger, skal du tillade cmux-netværksudvidelsen i Systemindstillinger." + "value": "VPN-softwaren er inkluderet i cmux. Du behøver ingen anden app. macOS kan bede om din adgangskode eller Touch ID under godkendelsen." } }, "it": { "stringUnit": { "state": "translated", - "value": "1. Fai clic su Connetti VPN Cloud. Quando macOS lo richiede, consenti l’estensione di rete cmux nelle Impostazioni di Sistema." + "value": "Il software VPN è incluso in cmux. Non serve un’altra app. macOS potrebbe chiedere la password o Touch ID durante l’autorizzazione." } }, "km": { "stringUnit": { "state": "translated", - "value": "1. ចុច ភ្ជាប់ Cloud VPN។ ពេល macOS ស្នើ សូមអនុញ្ញាតផ្នែកបន្ថែមបណ្តាញ cmux ក្នុងការកំណត់ប្រព័ន្ធ។" + "value": "កម្មវិធី VPN មាននៅក្នុង cmux។ អ្នកមិនត្រូវការកម្មវិធីផ្សេងទៀតទេ។ macOS អាចស្នើពាក្យសម្ងាត់ ឬ Touch ID ក្នុងពេលអនុម័ត។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "1. Klikk Koble til Cloud VPN. Når macOS spør, tillat cmux-nettverksutvidelsen i Systeminnstillinger." + "value": "VPN-programvaren er inkludert i cmux. Du trenger ingen annen app. macOS kan be om passord eller Touch ID under godkjenningen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "1. Kliknij Połącz z Cloud VPN. Gdy macOS poprosi, zezwól na rozszerzenie sieci cmux w Ustawieniach systemowych." + "value": "Oprogramowanie VPN jest zawarte w cmux. Nie potrzebujesz innej aplikacji. macOS może poprosić o hasło lub Touch ID podczas zatwierdzania." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "1. Clique em Conectar Cloud VPN. Quando o macOS pedir, permita a extensão de rede do cmux nos Ajustes do Sistema." + "value": "O software VPN vem incluído no cmux. Você não precisa de outro app. O macOS pode pedir sua senha ou Touch ID durante a aprovação." } }, "ru": { "stringUnit": { "state": "translated", - "value": "1. Нажмите Подключить Cloud VPN. Когда macOS попросит, разрешите сетевое расширение cmux в системных настройках." + "value": "VPN-программа уже входит в cmux. Другие приложения не нужны. Во время подтверждения macOS может запросить пароль или Touch ID." } }, "th": { "stringUnit": { "state": "translated", - "value": "1. คลิก เชื่อมต่อ Cloud VPN เมื่อ macOS ขอ ให้อนุญาตส่วนขยายเครือข่าย cmux ในการตั้งค่าระบบ" + "value": "ซอฟต์แวร์ VPN รวมอยู่ใน cmux แล้ว ไม่ต้องใช้แอปอื่น macOS อาจขอรหัสผ่านหรือ Touch ID ระหว่างการอนุมัติ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "1. Cloud VPN’e bağlan’a tıklayın. macOS istediğinde Sistem Ayarları’nda cmux ağ uzantısına izin verin." + "value": "VPN yazılımı cmux içinde bulunur. Başka bir uygulama gerekmez. macOS onay sırasında parolanızı veya Touch ID’yi isteyebilir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "1. Натисніть Підключити Cloud VPN. Коли macOS попросить, дозвольте мережеве розширення cmux у Системних параметрах." + "value": "Програмне забезпечення VPN входить до cmux. Інша програма не потрібна. Під час схвалення macOS може попросити пароль або Touch ID." } } } }, - "cloud.vpn.setup.steps.settings": { + "cloud.vpn.setup.status.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open General > Login Items & Extensions > Network Extensions, then enable cmux." + "value": "Private network status" } }, "de": { "stringUnit": { "state": "translated", - "value": "Öffnen Sie Allgemein > Anmeldeobjekte & Erweiterungen > Netzwerkerweiterungen und aktivieren Sie cmux." + "value": "Status des privaten Netzwerks" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrez Général > Ouverture et extensions > Extensions réseau, puis activez cmux." + "value": "État du réseau privé" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abre General > Ítems de inicio y extensiones > Extensiones de red y activa cmux." + "value": "Estado de la red privada" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「一般」>「ログイン項目と機能拡張」>「ネットワーク機能拡張」を開き、cmuxを有効にします。" + "value": "プライベートネットワークの状態" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开“通用”>“登录项与扩展”>“网络扩展”,然后启用 cmux。" + "value": "私有网络状态" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打開「一般」>「登入項目與延伸功能」>「網路延伸功能」,然後啟用 cmux。" + "value": "私有網路狀態" } }, "ko": { "stringUnit": { "state": "translated", - "value": "일반 > 로그인 항목 및 확장 프로그램 > 네트워크 확장을 열고 cmux를 활성화합니다." + "value": "비공개 네트워크 상태" } }, "ar": { "stringUnit": { "state": "translated", - "value": "افتح عام > عناصر الدخول والامتدادات > امتدادات الشبكة، ثم فعّل cmux." + "value": "حالة الشبكة الخاصة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvorite Opšte > Stavke za prijavu i dodaci > Mrežni dodaci, pa omogućite cmux." + "value": "Status privatne mreže" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Generelt > Loginemner og udvidelser > Netværksudvidelser, og aktivér cmux." + "value": "Status for privat netværk" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Generali > Elementi login ed estensioni > Estensioni di rete, quindi abilita cmux." + "value": "Stato della rete privata" } }, "km": { "stringUnit": { "state": "translated", - "value": "បើក ទូទៅ > ធាតុចូល និងផ្នែកបន្ថែម > ផ្នែកបន្ថែមបណ្តាញ ហើយបើក cmux។" + "value": "ស្ថានភាពបណ្តាញឯកជន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Generelt > Påloggingselementer og utvidelser > Nettverksutvidelser, og aktiver cmux." + "value": "Status for privat nettverk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Ogólne > Elementy logowania i rozszerzenia > Rozszerzenia sieciowe, a następnie włącz cmux." + "value": "Stan sieci prywatnej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra Geral > Itens de Início e Extensões > Extensões de Rede e ative o cmux." + "value": "Status da rede privada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Откройте Основные > Объекты входа и расширения > Сетевые расширения и включите cmux." + "value": "Состояние частной сети" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิด ทั่วไป > รายการเข้าสู่ระบบและส่วนขยาย > ส่วนขยายเครือข่าย แล้วเปิดใช้ cmux" + "value": "สถานะเครือข่ายส่วนตัว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Genel > Giriş Öğeleri ve Uzantılar > Ağ Uzantıları’nı açın ve cmux’u etkinleştirin." + "value": "Özel ağ durumu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрийте Загальні > Об’єкти входу та розширення > Мережеві розширення й увімкніть cmux." + "value": "Стан приватної мережі" } } } }, - "cloud.vpn.setup.steps.settingsLegacy": { + "cloud.vpn.setup.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open Privacy & Security and allow the cmux extension." + "value": "Cloud VPN" } }, "de": { "stringUnit": { "state": "translated", - "value": "Öffnen Sie Datenschutz & Sicherheit und erlauben Sie die cmux-Erweiterung." + "value": "Cloud-VPN" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrez Confidentialité et sécurité et autorisez l’extension cmux." + "value": "VPN Cloud" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abre Privacidad y seguridad y permite la extensión de cmux." + "value": "VPN de Cloud" } }, "ja": { "stringUnit": { "state": "translated", - "value": "「プライバシーとセキュリティ」を開き、cmuxの機能拡張を許可します。" + "value": "クラウドVPN" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打开“隐私与安全性”,然后允许 cmux 扩展。" + "value": "云端 VPN" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打開「隱私權與安全性」,然後允許 cmux 延伸功能。" + "value": "雲端 VPN" } }, "ko": { "stringUnit": { "state": "translated", - "value": "개인정보 보호 및 보안을 열고 cmux 확장을 허용합니다." + "value": "클라우드 VPN" } }, "ar": { "stringUnit": { "state": "translated", - "value": "افتح الخصوصية والأمان واسمح بامتداد cmux." + "value": "شبكة Cloud الخاصة" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvorite Privatnost i sigurnost i dozvolite cmux dodatak." + "value": "Cloud VPN" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Anonymitet og sikkerhed, og tillad cmux-udvidelsen." + "value": "Cloud VPN" } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Privacy e sicurezza e consenti l’estensione cmux." + "value": "VPN Cloud" } }, "km": { "stringUnit": { "state": "translated", - "value": "បើក ឯកជនភាព និងសុវត្ថិភាព ហើយអនុញ្ញាតផ្នែកបន្ថែម cmux។" + "value": "Cloud VPN" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Personvern og sikkerhet og tillat cmux-utvidelsen." + "value": "Cloud VPN" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Prywatność i ochrona i zezwól na rozszerzenie cmux." + "value": "Cloud VPN" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra Privacidade e Segurança e permita a extensão do cmux." + "value": "Cloud VPN" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Откройте Конфиденциальность и безопасность и разрешите расширение cmux." + "value": "Cloud VPN" } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิด ความเป็นส่วนตัวและความปลอดภัย แล้วอนุญาตส่วนขยาย cmux" + "value": "Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gizlilik ve Güvenlik’i açın ve cmux uzantısına izin verin." + "value": "Cloud VPN" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрийте Конфіденційність і безпека та дозвольте розширення cmux." + "value": "Cloud VPN" } } } }, - "cloud.vpn.setup.steps.configuration": { + "cloud.vpn.setup.unavailable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "2. Allow cmux to add a VPN configuration named cmux Cloud. This is a separate macOS permission." + "value": "This copy of cmux does not include a signed VPN extension. Use a cmux release with Cloud VPN support. Cloud terminals, Ports, and Desktop remain available without the VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "2. Erlauben Sie cmux, eine VPN-Konfiguration namens cmux Cloud hinzuzufügen. Dies ist eine separate macOS-Berechtigung." + "value": "Diese cmux-Version enthält keine signierte VPN-Erweiterung. Verwenden Sie eine cmux-Version mit Cloud-VPN-Unterstützung. Cloud-Terminals, Ports und Desktop bleiben ohne VPN verfügbar." } }, "fr": { "stringUnit": { "state": "translated", - "value": "2. Autorisez cmux à ajouter une configuration VPN nommée cmux Cloud. Il s’agit d’une autorisation macOS distincte." + "value": "Cette copie de cmux ne contient pas d’extension VPN signée. Utilisez une version de cmux qui prend en charge le VPN Cloud. Les terminaux Cloud, Ports et Bureau restent disponibles sans VPN." } }, "es": { "stringUnit": { "state": "translated", - "value": "2. Permite que cmux añada una configuración VPN llamada cmux Cloud. Este es un permiso independiente de macOS." + "value": "Esta copia de cmux no incluye una extensión VPN firmada. Usa una versión de cmux compatible con VPN de Cloud. Los terminales Cloud, Puertos y Escritorio siguen disponibles sin VPN." } }, "ja": { "stringUnit": { "state": "translated", - "value": "2. cmux Cloudという名前のVPN構成の追加を許可します。これは別のmacOS権限です。" + "value": "このcmuxには署名済みのVPN機能拡張が含まれていません。Cloud VPN対応のcmuxリリースを使用してください。Cloudのターミナル、ポート、デスクトップはVPNなしでも使えます。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "2. 允许 cmux 添加名为 cmux Cloud 的 VPN 配置。这是单独的 macOS 权限。" + "value": "此 cmux 副本未包含已签名的 VPN 扩展。请使用支持 Cloud VPN 的 cmux 版本。Cloud 终端、端口和桌面无需 VPN 仍可使用。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "2. 允許 cmux 加入名為 cmux Cloud 的 VPN 設定。這是另一項 macOS 權限。" + "value": "此 cmux 副本未包含已簽署的 VPN 延伸功能。請使用支援 Cloud VPN 的 cmux 版本。Cloud 終端機、連接埠和桌面不需要 VPN 仍可使用。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "2. cmux가 cmux Cloud라는 VPN 구성을 추가하도록 허용합니다. 이는 별도의 macOS 권한입니다." + "value": "이 cmux에는 서명된 VPN 확장이 포함되어 있지 않습니다. Cloud VPN을 지원하는 cmux 릴리스를 사용하세요. Cloud 터미널, 포트 및 데스크탑은 VPN 없이도 사용할 수 있습니다." } }, "ar": { "stringUnit": { "state": "translated", - "value": "2. اسمح لـ cmux بإضافة إعداد VPN باسم cmux Cloud. هذا إذن منفصل في macOS." + "value": "لا تتضمن هذه النسخة من cmux امتداد VPN موقعًا. استخدم إصدار cmux يدعم VPN الخاص بـ Cloud. تظل طرفيات Cloud والمنافذ وسطح المكتب متاحة بدون VPN." } }, "bs": { "stringUnit": { "state": "translated", - "value": "2. Dozvolite cmux-u da doda VPN konfiguraciju pod imenom cmux Cloud. Ovo je posebna macOS dozvola." + "value": "Ova kopija cmux-a nema potpisani VPN dodatak. Koristite cmux izdanje sa Cloud VPN podrškom. Cloud terminali, portovi i radna površina ostaju dostupni bez VPN-a." } }, "da": { "stringUnit": { "state": "translated", - "value": "2. Tillad cmux at tilføje en VPN-konfiguration med navnet cmux Cloud. Dette er en separat macOS-tilladelse." + "value": "Denne cmux-kopi indeholder ikke en signeret VPN-udvidelse. Brug en cmux-udgave med Cloud VPN-understøttelse. Cloud-terminaler, porte og skrivebord er stadig tilgængelige uden VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "2. Consenti a cmux di aggiungere una configurazione VPN chiamata cmux Cloud. È un’autorizzazione macOS separata." + "value": "Questa copia di cmux non include un’estensione VPN firmata. Usa una versione di cmux con supporto Cloud VPN. Terminali Cloud, porte e desktop restano disponibili senza VPN." } }, "km": { "stringUnit": { "state": "translated", - "value": "2. អនុញ្ញាតឱ្យ cmux បន្ថែមការកំណត់ VPN ឈ្មោះ cmux Cloud។ នេះជាសិទ្ធិ macOS ផ្សេងមួយ។" + "value": "cmux ច្បាប់នេះមិនមានផ្នែកបន្ថែម VPN ដែលបានចុះហត្ថលេខាទេ។ ប្រើកំណែ cmux ដែលគាំទ្រ Cloud VPN។ Terminal, Ports និង Desktop របស់ Cloud នៅតែប្រើបានដោយគ្មាន VPN។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "2. Tillat cmux å legge til en VPN-konfigurasjon kalt cmux Cloud. Dette er en separat macOS-tillatelse." + "value": "Denne cmux-kopien har ingen signert VPN-utvidelse. Bruk en cmux-versjon med Cloud VPN-støtte. Cloud-terminaler, porter og skrivebord er tilgjengelige uten VPN." } }, "pl": { "stringUnit": { "state": "translated", - "value": "2. Zezwól cmux dodać konfigurację VPN o nazwie cmux Cloud. To osobne uprawnienie macOS." + "value": "Ta kopia cmux nie zawiera podpisanego rozszerzenia VPN. Użyj wydania cmux z obsługą Cloud VPN. Terminale Cloud, porty i pulpit pozostają dostępne bez VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "2. Permita que o cmux adicione uma configuração VPN chamada cmux Cloud. Esta é uma permissão separada do macOS." + "value": "Esta cópia do cmux não inclui uma extensão VPN assinada. Use uma versão do cmux com suporte a Cloud VPN. Terminais Cloud, portas e área de trabalho continuam disponíveis sem VPN." } }, "ru": { "stringUnit": { "state": "translated", - "value": "2. Разрешите cmux добавить VPN-конфигурацию с именем cmux Cloud. Это отдельное разрешение macOS." + "value": "В этой копии cmux нет подписанного VPN-расширения. Используйте выпуск cmux с поддержкой Cloud VPN. Cloud-терминалы, порты и рабочий стол доступны без VPN." } }, "th": { "stringUnit": { "state": "translated", - "value": "2. อนุญาตให้ cmux เพิ่มการกำหนดค่า VPN ชื่อ cmux Cloud นี่เป็นสิทธิ์ macOS แยกต่างหาก" + "value": "cmux รุ่นนี้ไม่มีส่วนขยาย VPN ที่ลงนามแล้ว ใช้รุ่น cmux ที่รองรับ Cloud VPN เทอร์มินัล Cloud พอร์ต และเดสก์ท็อปยังใช้ได้โดยไม่ต้องมี VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "2. cmux’un cmux Cloud adlı bir VPN yapılandırması eklemesine izin verin. Bu ayrı bir macOS iznidir." + "value": "Bu cmux kopyasında imzalı VPN uzantısı bulunmuyor. Cloud VPN destekli bir cmux sürümü kullanın. Cloud terminalleri, portlar ve masaüstü VPN olmadan da kullanılabilir." } }, "uk": { "stringUnit": { "state": "translated", - "value": "2. Дозвольте cmux додати конфігурацію VPN з назвою cmux Cloud. Це окремий дозвіл macOS." + "value": "Ця копія cmux не містить підписаного VPN-розширення. Використовуйте випуск cmux із підтримкою Cloud VPN. Cloud-термінали, порти й робочий стіл доступні без VPN." } } } }, - "cloud.vpn.setup.steps.return": { + "cloud.vpn.setup.waiting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "3. Return to this pane. The connection continues automatically after approval. Disconnect here when finished. Quitting cmux or signing out also disconnects it." + "value": "Waiting" } }, "de": { "stringUnit": { "state": "translated", - "value": "3. Kehren Sie zu diesem Bereich zurück. Die Verbindung wird nach der Genehmigung automatisch fortgesetzt. Trennen Sie sie hier, wenn Sie fertig sind. Das Beenden von cmux oder Abmelden trennt sie ebenfalls." + "value": "Warten" } }, "fr": { "stringUnit": { "state": "translated", - "value": "3. Revenez à ce volet. La connexion reprend automatiquement après autorisation. Déconnectez-la ici lorsque vous avez terminé. Quitter cmux ou fermer la session la déconnecte aussi." + "value": "En attente" } }, "es": { "stringUnit": { "state": "translated", - "value": "3. Vuelve a este panel. La conexión continúa automáticamente tras la autorización. Desconéctala aquí cuando termines. Salir de cmux o cerrar sesión también la desconecta." + "value": "En espera" } }, "ja": { "stringUnit": { "state": "translated", - "value": "3. このペインに戻ります。承認後、接続は自動的に続行されます。使い終わったらここで切断してください。cmuxの終了やサインアウトでも切断されます。" + "value": "待機中" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "3. 返回此面板。批准后连接会自动继续。完成后可在此断开连接。退出 cmux 或退出登录也会断开连接。" + "value": "等待中" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "3. 返回此面板。核准後連線會自動繼續。完成後可在此中斷連線。結束 cmux 或登出也會中斷連線。" + "value": "等待中" } }, "ko": { "stringUnit": { "state": "translated", - "value": "3. 이 패널로 돌아옵니다. 승인 후 연결이 자동으로 계속됩니다. 사용을 마치면 여기에서 연결을 해제하세요. cmux를 종료하거나 로그아웃해도 연결이 해제됩니다." + "value": "대기 중" } }, "ar": { "stringUnit": { "state": "translated", - "value": "3. ارجع إلى هذه اللوحة. يستمر الاتصال تلقائيًا بعد الموافقة. اقطع الاتصال هنا عند الانتهاء. يؤدي إنهاء cmux أو تسجيل الخروج أيضًا إلى قطع الاتصال." + "value": "قيد الانتظار" } }, "bs": { "stringUnit": { "state": "translated", - "value": "3. Vratite se na ovaj panel. Veza se nastavlja automatski nakon odobrenja. Ovdje prekinite vezu kada završite. Izlazak iz cmux-a ili odjava takođe prekida vezu." + "value": "Čekanje" } }, "da": { "stringUnit": { "state": "translated", - "value": "3. Gå tilbage til dette panel. Forbindelsen fortsætter automatisk efter godkendelsen. Afbryd her, når du er færdig. Hvis du afslutter cmux eller logger ud, afbrydes forbindelsen også." + "value": "Venter" } }, "it": { "stringUnit": { "state": "translated", - "value": "3. Torna a questo pannello. La connessione continua automaticamente dopo l’autorizzazione. Disconnettila qui quando hai finito. Anche uscire da cmux o effettuare il logout la disconnette." + "value": "In attesa" } }, "km": { "stringUnit": { "state": "translated", - "value": "3. ត្រឡប់ទៅផ្ទាំងនេះ។ ការភ្ជាប់នឹងបន្តដោយស្វ័យប្រវត្តិបន្ទាប់ពីអនុម័ត។ ផ្តាច់នៅទីនេះពេលបញ្ចប់។ ការបិទ cmux ឬចាកចេញក៏ផ្តាច់ការភ្ជាប់ដែរ។" + "value": "កំពុងរង់ចាំ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "3. Gå tilbake til dette panelet. Forbindelsen fortsetter automatisk etter godkjenning. Koble fra her når du er ferdig. Avslutning av cmux eller utlogging kobler også fra." + "value": "Venter" } }, "pl": { "stringUnit": { "state": "translated", - "value": "3. Wróć do tego panelu. Połączenie będzie kontynuowane automatycznie po zatwierdzeniu. Po zakończeniu rozłącz je tutaj. Zamknięcie cmux lub wylogowanie również rozłączy połączenie." + "value": "Oczekiwanie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "3. Volte a este painel. A conexão continuará automaticamente após a aprovação. Desconecte aqui quando terminar. Sair do cmux ou encerrar a sessão também desconecta." + "value": "Aguardando" } }, "ru": { "stringUnit": { "state": "translated", - "value": "3. Вернитесь в эту панель. После подтверждения соединение продолжится автоматически. Завершив работу, отключите его здесь. Выход из cmux или системы также отключает соединение." + "value": "Ожидание" } }, "th": { "stringUnit": { "state": "translated", - "value": "3. กลับมาที่แผงนี้ การเชื่อมต่อจะดำเนินต่อโดยอัตโนมัติหลังการอนุมัติ ตัดการเชื่อมต่อที่นี่เมื่อเสร็จแล้ว การออกจาก cmux หรือออกจากระบบจะตัดการเชื่อมต่อด้วย" + "value": "กำลังรอ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "3. Bu panele dönün. Onaydan sonra bağlantı otomatik olarak devam eder. Bitirdiğinizde buradan bağlantıyı kesin. cmux’tan çıkmak veya oturumu kapatmak da bağlantıyı keser." + "value": "Bekliyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "3. Поверніться до цієї панелі. Після схвалення з’єднання продовжиться автоматично. Завершивши роботу, від’єднайте його тут. Вихід із cmux або системи також від’єднає з’єднання." + "value": "Очікування" } } } }, - "cloud.vpn.setup.address.title": { + "cloudTree.ports.action.wake": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Private addresses" + "value": "Wake Machine" } }, "de": { "stringUnit": { "state": "translated", - "value": "Private Adressen" + "value": "Maschine aktivieren" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adresses privées" + "value": "Réveiller la machine" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Direcciones privadas" + "value": "إيقاظ الجهاز" } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "プライベートアドレス" + "value": "Activar máquina" } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "私有地址" + "value": "喚醒機器" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "私有位址" + "value": "唤醒机器" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비공개 주소" + "value": "머신 깨우기" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "العناوين الخاصة" + "value": "マシンを起動" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Privatne adrese" + "value": "Probudi mašinu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Private adresser" + "value": "Væk maskine" } }, "it": { "stringUnit": { "state": "translated", - "value": "Indirizzi privati" + "value": "Riattiva macchina" } }, "km": { "stringUnit": { "state": "translated", - "value": "អាសយដ្ឋានឯកជន" + "value": "ដាស់ម៉ាស៊ីន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Private adresser" + "value": "Vekk maskin" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Prywatne adresy" + "value": "Wybudź maszynę" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Endereços privados" + "value": "Despertar máquina" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Частные адреса" + "value": "Разбудить машину" } }, "th": { "stringUnit": { "state": "translated", - "value": "ที่อยู่ส่วนตัว" + "value": "ปลุกเครื่อง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Özel adresler" + "value": "Makineyi uyandır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Приватні адреси" + "value": "Розбудити машину" } } } }, - "cloud.vpn.setup.openSettings": { + "cloudTree.ports.asleep.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Open System Settings" + "value": "Wake the machine to check its services. cmux’s in-app forwarding does not need Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Systemeinstellungen öffnen" + "value": "Aktivieren Sie die Maschine, um ihre Dienste zu prüfen. Die Weiterleitung in cmux benötigt kein Cloud-VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir Réglages Système" + "value": "Réveillez la machine pour vérifier ses services. Le transfert intégré à cmux ne nécessite pas de VPN Cloud." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes del Sistema" + "value": "أيقظ الجهاز لفحص خدماته. لا تحتاج إعادة التوجيه داخل cmux إلى Cloud VPN." } }, - "ja": { + "es": { "stringUnit": { "state": "translated", - "value": "システム設定を開く" + "value": "Activa la máquina para comprobar sus servicios. El reenvío integrado de cmux no necesita Cloud VPN." } }, - "zh-Hans": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "打开系统设置" + "value": "喚醒機器以檢查其服務。cmux 的應用程式內轉送不需要 Cloud VPN。" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "打開系統設定" + "value": "唤醒机器以检查其服务。cmux 的应用内转发无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "시스템 설정 열기" + "value": "머신을 깨워 서비스를 확인하세요. cmux 앱 내 전달에는 Cloud VPN이 필요하지 않습니다." } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "فتح إعدادات النظام" + "value": "マシンを起動してサービスを確認してください。cmux のアプリ内転送に Cloud VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Otvori Postavke sistema" + "value": "Probudite mašinu da provjerite njene servise. Prosljeđivanje unutar cmux-a ne treba Cloud VPN." } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbn Systemindstillinger" + "value": "Væk maskinen for at kontrollere dens tjenester. Videresendelse i cmux kræver ikke Cloud VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "Apri Impostazioni di Sistema" + "value": "Riattiva la macchina per controllarne i servizi. L’inoltro all’interno di cmux non richiede la VPN Cloud." } }, "km": { "stringUnit": { "state": "translated", - "value": "បើកការកំណត់ប្រព័ន្ធ" + "value": "ដាស់ម៉ាស៊ីនដើម្បីពិនិត្យសេវាកម្មរបស់វា។ ការបញ្ជូនបន្តនៅក្នុង cmux មិនត្រូវការ Cloud VPN ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpne Systeminnstillinger" + "value": "Vekk maskinen for å sjekke tjenestene. Videresending i cmux trenger ikke Cloud VPN." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Otwórz Ustawienia systemowe" + "value": "Wybudź maszynę, aby sprawdzić jej usługi. Przekierowywanie w cmux nie wymaga Cloud VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Ajustes do Sistema" + "value": "Desperte a máquina para verificar os serviços. O encaminhamento dentro do cmux não precisa do Cloud VPN." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Открыть системные настройки" + "value": "Разбудите машину, чтобы проверить её службы. Перенаправлению внутри cmux Cloud VPN не нужен." } }, "th": { "stringUnit": { "state": "translated", - "value": "เปิดการตั้งค่าระบบ" + "value": "ปลุกเครื่องเพื่อตรวจสอบบริการ การส่งต่อภายใน cmux ไม่ต้องใช้ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sistem Ayarlarını aç" + "value": "Hizmetlerini denetlemek için makineyi uyandırın. cmux içi yönlendirme Cloud VPN gerektirmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Відкрити Системні параметри" + "value": "Розбудіть машину, щоб перевірити її служби. Перенаправлення всередині cmux не потребує Cloud VPN." } } } }, - "settings.app.accentColor.custom": { + "cloudTree.ports.available.title": { + "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "مخصص" + "value": "Listening services" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Prilagođeno" + "value": "Lauschende Dienste" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Tilpasset" + "value": "Services en écoute" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Benutzerdefiniert" + "value": "الخدمات المستمعة" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Custom" + "value": "Servicios en escucha" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Personalizado" + "value": "監聽中的服務" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Personnalisée" + "value": "监听中的服务" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Personalizzato" + "value": "수신 대기 서비스" } }, "ja": { "stringUnit": { "state": "translated", - "value": "カスタム" + "value": "待ち受け中のサービス" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "사용자 지정" + "value": "Servisi koji slušaju" } }, - "nb": { + "da": { "stringUnit": { "state": "translated", - "value": "Egendefinert" + "value": "Lyttende tjenester" } }, - "pl": { + "it": { "stringUnit": { "state": "translated", - "value": "Niestandardowy" + "value": "Servizi in ascolto" } }, - "pt-BR": { + "km": { "stringUnit": { "state": "translated", - "value": "Personalizado" + "value": "សេវាកម្មដែលកំពុងស្តាប់" } }, - "ru": { + "nb": { "stringUnit": { "state": "translated", - "value": "Пользовательский" + "value": "Lyttende tjenester" } }, - "th": { + "pl": { "stringUnit": { "state": "translated", - "value": "กำหนดเอง" + "value": "Nasłuchujące usługi" } }, - "tr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Özel" + "value": "Serviços em escuta" } }, - "uk": { + "ru": { "stringUnit": { "state": "translated", - "value": "Власний" + "value": "Прослушивающие службы" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "自定义" + "value": "บริการที่กำลังรับฟัง" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "自訂" + "value": "Dinleyen hizmetler" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Служби, що прослуховують" } } } }, - "terminal.clipboardReadConfirmation.deny": { + "cloudTree.ports.binding.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Deny" + "value": "cmux’s browser route connects to 127.0.0.1 on the machine. Bind the service to 127.0.0.1 or 0.0.0.0, then refresh. Turning on Cloud VPN does not change this route." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "رفض" + "value": "Die Browser-Verbindung von cmux verwendet 127.0.0.1 auf der Maschine. Binden Sie den Dienst an 127.0.0.1 oder 0.0.0.0 und aktualisieren Sie. Cloud-VPN ändert diese Route nicht." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ablehnen" + "value": "Le navigateur cmux se connecte à 127.0.0.1 sur la machine. Liez le service à 127.0.0.1 ou 0.0.0.0, puis actualisez. Activer le VPN Cloud ne change pas cette route." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Denegar" + "value": "يتصل مسار متصفح cmux بالعنوان 127.0.0.1 على الجهاز. اربط الخدمة بالعنوان 127.0.0.1 أو 0.0.0.0 ثم حدّث. تشغيل Cloud VPN لا يغير هذا المسار." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Refuser" + "value": "La ruta del navegador de cmux conecta a 127.0.0.1 en la máquina. Enlaza el servicio a 127.0.0.1 o 0.0.0.0 y actualiza. Activar Cloud VPN no cambia esta ruta." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "拒否" + "value": "cmux 的瀏覽器路徑會連線到機器上的 127.0.0.1。請將服務繫結至 127.0.0.1 或 0.0.0.0 後重新整理。開啟 Cloud VPN 不會改變此路徑。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "거부" + "value": "cmux 的浏览器路由连接到机器上的 127.0.0.1。请将服务绑定到 127.0.0.1 或 0.0.0.0 后刷新。开启 Cloud VPN 不会改变此路由。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "拒绝" + "value": "cmux 브라우저 경로는 머신의 127.0.0.1에 연결합니다. 서비스를 127.0.0.1 또는 0.0.0.0에 바인딩한 후 새로 고치세요. Cloud VPN을 켜도 이 경로는 바뀌지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "拒絕" + "value": "cmux のブラウザはマシン上の 127.0.0.1 に接続します。サービスを 127.0.0.1 または 0.0.0.0 にバインドして更新してください。Cloud VPN を有効にしてもこの経路は変わりません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odbij" + "value": "Ruta preglednika u cmux-u povezuje se na 127.0.0.1 na mašini. Vežite servis na 127.0.0.1 ili 0.0.0.0, zatim osvježite. Uključivanje Cloud VPN-a ne mijenja ovu rutu." } }, "da": { "stringUnit": { "state": "translated", - "value": "Afvis" + "value": "cmux’ browserrute forbinder til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og opdater derefter. Aktivering af Cloud VPN ændrer ikke denne rute." } }, "it": { "stringUnit": { "state": "translated", - "value": "Nega" + "value": "Il percorso del browser di cmux si connette a 127.0.0.1 sulla macchina. Associa il servizio a 127.0.0.1 o 0.0.0.0, quindi aggiorna. L’attivazione della VPN Cloud non modifica questo percorso." } }, "km": { "stringUnit": { "state": "translated", - "value": "បដិសេធ" + "value": "ផ្លូវកម្មវិធីរុករករបស់ cmux ភ្ជាប់ទៅ 127.0.0.1 នៅលើម៉ាស៊ីន។ ចងសេវាកម្មទៅ 127.0.0.1 ឬ 0.0.0.0 រួចផ្ទុកឡើងវិញ។ ការបើក Cloud VPN មិនផ្លាស់ប្តូរផ្លូវនេះទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Avslå" + "value": "cmux sin nettleserrute kobler til 127.0.0.1 på maskinen. Bind tjenesten til 127.0.0.1 eller 0.0.0.0, og oppdater deretter. Å slå på Cloud VPN endrer ikke denne ruten." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Odmów" + "value": "Trasa przeglądarki cmux łączy się z 127.0.0.1 na maszynie. Powiąż usługę z 127.0.0.1 lub 0.0.0.0, a następnie odśwież. Włączenie Cloud VPN nie zmienia tej trasy." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Negar" + "value": "A rota de navegador do cmux se conecta a 127.0.0.1 na máquina. Vincule o serviço a 127.0.0.1 ou 0.0.0.0 e atualize. Ativar o Cloud VPN não altera essa rota." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Запретить" + "value": "Браузерный маршрут cmux подключается к 127.0.0.1 на машине. Привяжите службу к 127.0.0.1 или 0.0.0.0, затем обновите. Включение Cloud VPN не меняет этот маршрут." } }, "th": { "stringUnit": { "state": "translated", - "value": "ปฏิเสธ" + "value": "เส้นทางเบราว์เซอร์ของ cmux เชื่อมต่อกับ 127.0.0.1 บนเครื่อง ผูกบริการกับ 127.0.0.1 หรือ 0.0.0.0 แล้วรีเฟรช การเปิด Cloud VPN ไม่ได้เปลี่ยนเส้นทางนี้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Reddet" + "value": "cmux’un tarayıcı yolu makinedeki 127.0.0.1 adresine bağlanır. Hizmeti 127.0.0.1 veya 0.0.0.0 adresine bağlayın, ardından yenileyin. Cloud VPN’i açmak bu yolu değiştirmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Заборонити" + "value": "Браузерний маршрут cmux підключається до 127.0.0.1 на машині. Прив’яжіть службу до 127.0.0.1 або 0.0.0.0, потім оновіть. Увімкнення Cloud VPN не змінює цей маршрут." } } } }, - "terminal.clipboardReadConfirmation.message": { + "cloudTree.ports.binding.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A program in this terminal wants to read your clipboard. Allow it only if you trust the program." + "value": "Services use another interface" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "يريد برنامج في هذه الطرفية قراءة الحافظة. اسمح بذلك فقط إذا كنت تثق بالبرنامج." + "value": "Dienste verwenden eine andere Schnittstelle" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Ein Programm in diesem Terminal möchte deine Zwischenablage lesen. Erlaube es nur, wenn du dem Programm vertraust." + "value": "Les services utilisent une autre interface" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Un programa de esta terminal quiere leer tu portapapeles. Permítelo solo si confías en el programa." + "value": "تستخدم الخدمات واجهة أخرى" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Un programme de ce terminal veut lire votre presse-papiers. Ne l’autorisez que si vous faites confiance à ce programme." + "value": "Los servicios usan otra interfaz" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このターミナルのプログラムがクリップボードを読み取ろうとしています。信頼できるプログラムの場合にのみ許可してください。" + "value": "服務使用其他介面" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 터미널의 프로그램이 클립보드를 읽으려고 합니다. 프로그램을 신뢰할 수 있을 때만 허용하세요." + "value": "服务使用其他接口" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "此终端中的程序想要读取你的剪贴板。只有在你信任该程序时才允许。" + "value": "서비스가 다른 인터페이스를 사용함" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "此終端機中的程式想要讀取你的剪貼簿。只有在你信任該程式時才允許。" + "value": "サービスが別のインターフェイスを使用しています" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Program u ovom terminalu želi čitati vaš međuspremnik. Dozvolite samo ako vjerujete programu." + "value": "Servisi koriste drugi interfejs" } }, "da": { "stringUnit": { "state": "translated", - "value": "Et program i denne terminal vil læse din udklipsholder. Tillad det kun, hvis du har tillid til programmet." + "value": "Tjenester bruger en anden grænseflade" } }, "it": { "stringUnit": { "state": "translated", - "value": "Un programma in questo terminale vuole leggere gli appunti. Consentilo solo se ti fidi del programma." + "value": "I servizi usano un’altra interfaccia" } }, "km": { "stringUnit": { "state": "translated", - "value": "កម្មវិធីក្នុងស្ថានីយនេះចង់អានក្ដារតម្បៀតខ្ទាស់របស់អ្នក។ អនុញ្ញាតតែបើអ្នកទុកចិត្តកម្មវិធីនេះ។" + "value": "សេវាកម្មប្រើចំណុចប្រទាក់ផ្សេង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Et program i denne terminalen vil lese utklippstavlen din. Tillat det bare hvis du stoler på programmet." + "value": "Tjenester bruker et annet grensesnitt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Program w tym terminalu chce odczytać schowek. Zezwól tylko, jeśli ufasz temu programowi." + "value": "Usługi używają innego interfejsu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Um programa neste terminal quer ler sua área de transferência. Permita somente se você confiar no programa." + "value": "Os serviços usam outra interface" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Программа в этом терминале хочет прочитать буфер обмена. Разрешайте только программам, которым доверяете." + "value": "Службы используют другой интерфейс" } }, "th": { "stringUnit": { "state": "translated", - "value": "โปรแกรมในเทอร์มินัลนี้ต้องการอ่านคลิปบอร์ดของคุณ อนุญาตเฉพาะเมื่อคุณเชื่อถือโปรแกรมนี้" + "value": "บริการใช้อินเทอร์เฟซอื่น" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu terminaldeki bir program panonuzu okumak istiyor. Yalnızca programa güveniyorsanız izin verin." + "value": "Hizmetler başka bir arabirim kullanıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Програма в цьому терміналі хоче прочитати ваш буфер обміну. Дозволяйте, лише якщо довіряєте програмі." + "value": "Служби використовують інший інтерфейс" } } } }, - "terminal.clipboardReadConfirmation.title": { + "cloudTree.ports.empty.noService": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Allow Clipboard Access?" + "value": "Start a web server on this machine, then refresh." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "السماح بالوصول إلى الحافظة؟" + "value": "Starte einen Webserver auf diesem Rechner und aktualisiere dann die Liste." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Zugriff auf die Zwischenablage erlauben?" + "value": "Démarrez un serveur web sur cette machine, puis actualisez." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "¿Permitir el acceso al portapapeles?" + "value": "شغّل خادم ويب على هذا الجهاز، ثم حدّث القائمة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Autoriser l’accès au presse-papiers ?" + "value": "Inicia un servidor web en esta máquina y luego actualiza." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "クリップボードへのアクセスを許可しますか?" + "value": "在這台機器上啟動網頁伺服器,然後重新整理。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "클립보드 접근을 허용하시겠습니까?" + "value": "在此机器上启动网页服务器,然后刷新。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许访问剪贴板?" + "value": "이 머신에서 웹 서버를 시작한 다음 새로 고치세요." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "允許存取剪貼簿?" + "value": "このマシンで Web サーバーを起動してから、更新してください。" } }, "bs": { "stringUnit": { - "state": "translated", - "value": "Dozvoliti pristup međuspremniku?" + "state": "needs_review", + "value": "Pokrenite web server na ovoj mašini, zatim osvježite." } }, "da": { "stringUnit": { - "state": "translated", - "value": "Tillad adgang til udklipsholderen?" + "state": "needs_review", + "value": "Start en webserver på denne maskine, og opdater derefter." } }, "it": { "stringUnit": { - "state": "translated", - "value": "Consentire l'accesso agli appunti?" + "state": "needs_review", + "value": "Avvia un server web su questa macchina, poi aggiorna." } }, "km": { "stringUnit": { - "state": "translated", - "value": "អនុញ្ញាតឱ្យចូលប្រើក្ដារតម្បៀតខ្ទាស់?" + "state": "needs_review", + "value": "ចាប់ផ្តើមម៉ាស៊ីនមេបណ្តាញនៅលើម៉ាស៊ីននេះ រួចផ្ទុកឡើងវិញ។" } }, "nb": { "stringUnit": { - "state": "translated", - "value": "Tillat tilgang til utklippstavlen?" + "state": "needs_review", + "value": "Start en webserver på denne maskinen, og oppdater deretter." } }, "pl": { "stringUnit": { - "state": "translated", - "value": "Zezwolić na dostęp do schowka?" + "state": "needs_review", + "value": "Uruchom serwer WWW na tej maszynie, a następnie odśwież." } }, "pt-BR": { "stringUnit": { - "state": "translated", - "value": "Permitir acesso à área de transferência?" + "state": "needs_review", + "value": "Inicie um servidor web nesta máquina e atualize." } }, "ru": { "stringUnit": { - "state": "translated", - "value": "Разрешить доступ к буферу обмена?" + "state": "needs_review", + "value": "Запустите веб-сервер на этой машине, затем обновите список." } }, "th": { "stringUnit": { - "state": "translated", - "value": "อนุญาตให้เข้าถึงคลิปบอร์ดหรือไม่?" + "state": "needs_review", + "value": "เริ่มเว็บเซิร์ฟเวอร์บนเครื่องนี้ แล้วรีเฟรช" } }, "tr": { "stringUnit": { - "state": "translated", - "value": "Panoya erişime izin verilsin mi?" + "state": "needs_review", + "value": "Bu makinede bir web sunucusu başlatın, ardından yenileyin." } }, "uk": { "stringUnit": { - "state": "translated", - "value": "Дозволити доступ до буфера обміну?" + "state": "needs_review", + "value": "Запустіть вебсервер на цій машині, а потім оновіть список." } } } }, - "notification.remoteRelay.hostFallback": { + "cloudTree.ports.hub.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Remote host" + "value": "This build cannot start cmux’s authenticated Cloud forward. Update cmux, then retry." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "مضيف بعيد" + "value": "Dieser Build kann die authentifizierte Cloud-Weiterleitung von cmux nicht starten. Aktualisieren Sie cmux und versuchen Sie es erneut." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Remote-Host" + "value": "Cette version ne peut pas démarrer le transfert Cloud authentifié de cmux. Mettez cmux à jour, puis réessayez." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "لا يمكن لهذا الإصدار بدء إعادة توجيه Cloud الموثّقة من cmux. حدّث cmux ثم أعد المحاولة." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Hôte distant" + "value": "Esta compilación no puede iniciar el reenvío autenticado de Cloud de cmux. Actualiza cmux y vuelve a intentarlo." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "リモートホスト" + "value": "此版本無法啟動 cmux 的已驗證 Cloud 轉送。請更新 cmux 後重試。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "원격 호스트" + "value": "此版本无法启动 cmux 的已验证 Cloud 转发。请更新 cmux 后重试。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "远程主机" + "value": "이 빌드에서는 cmux 인증 Cloud 전달을 시작할 수 없습니다. cmux를 업데이트한 후 다시 시도하세요." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "遠端主機" + "value": "このビルドでは cmux の認証済み Cloud 転送を開始できません。cmux を更新して再試行してください。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Udaljeni host" + "value": "Ova verzija ne može pokrenuti autentificirano Cloud prosljeđivanje cmux-a. Ažurirajte cmux, zatim pokušajte ponovo." } }, "da": { "stringUnit": { "state": "translated", - "value": "Fjernvært" + "value": "Denne build kan ikke starte cmux’ godkendte Cloud-videresendelse. Opdater cmux, og prøv igen." } }, "it": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Questa build non può avviare l’inoltro Cloud autenticato di cmux. Aggiorna cmux, quindi riprova." } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីនពីចម្ងាយ" + "value": "កំណែនេះមិនអាចចាប់ផ្តើមការបញ្ជូនបន្ត Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux បានទេ។ ធ្វើបច្ចុប្បន្នភាព cmux រួចព្យាយាមម្តងទៀត។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ekstern vert" + "value": "Denne versjonen kan ikke starte cmux sin autentiserte Cloud-videresending. Oppdater cmux, og prøv igjen." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zdalny host" + "value": "Ta kompilacja nie może uruchomić uwierzytelnionego przekierowania Cloud w cmux. Zaktualizuj cmux i spróbuj ponownie." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Host remoto" + "value": "Esta versão não consegue iniciar o encaminhamento Cloud autenticado do cmux. Atualize o cmux e tente novamente." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Удалённый хост" + "value": "Эта сборка не может запустить аутентифицированное перенаправление Cloud в cmux. Обновите cmux и повторите попытку." } }, "th": { "stringUnit": { "state": "translated", - "value": "โฮสต์ระยะไกล" + "value": "บิลด์นี้ไม่สามารถเริ่มการส่งต่อ Cloud ที่ยืนยันตัวตนแล้วของ cmux ได้ อัปเดต cmux แล้วลองอีกครั้ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Uzak ana bilgisayar" + "value": "Bu derleme cmux’un kimliği doğrulanmış Cloud yönlendirmesini başlatamıyor. cmux’u güncelleyin, ardından yeniden deneyin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Віддалений хост" + "value": "Ця збірка не може запустити автентифіковане перенаправлення Cloud у cmux. Оновіть cmux і повторіть спробу." } } } }, - "notification.remoteRelay.title": { + "cloudTree.ports.link.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Port discovery could not connect to this machine. Existing cmux ports may still work. Refresh to reconnect; Cloud VPN is not required." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Die Porterkennung konnte diese Maschine nicht erreichen. Bereits geöffnete cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie zum erneuten Verbinden; Cloud-VPN ist nicht erforderlich." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "La découverte des ports n’a pas pu se connecter à cette machine. Les ports cmux existants peuvent encore fonctionner. Actualisez pour reconnecter ; le VPN Cloud n’est pas nécessaire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "تعذر اتصال اكتشاف المنافذ بهذا الجهاز. قد تظل منافذ cmux الحالية تعمل. حدّث لإعادة الاتصال؛ Cloud VPN غير مطلوب." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "El descubrimiento de puertos no pudo conectar con esta máquina. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reconectar; Cloud VPN no es necesario." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "連接埠探索無法連線到此機器。現有 cmux 連接埠可能仍可使用。請重新整理以重新連線;不需要 Cloud VPN。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "端口发现无法连接到此机器。现有 cmux 端口可能仍可使用。请刷新以重新连接;无需 Cloud VPN。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "포트 검색이 이 머신에 연결하지 못했습니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 연결하세요. Cloud VPN은 필요하지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "ポート検出がこのマシンに接続できませんでした。既存の cmux ポートは引き続き動作する可能性があります。更新して再接続してください。Cloud VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Otkrivanje portova nije se moglo povezati s ovom mašinom. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovno povezivanje; Cloud VPN nije potreban." } }, "da": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Portregistrering kunne ikke oprette forbindelse til denne maskine. Eksisterende cmux-porte virker muligvis stadig. Opdater for at genoprette forbindelsen; Cloud VPN er ikke påkrævet." } }, "it": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Il rilevamento delle porte non è riuscito a connettersi a questa macchina. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riconnetterti; la VPN Cloud non è necessaria." } }, "km": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "ការស្វែងរកច្រកមិនអាចភ្ជាប់ទៅម៉ាស៊ីននេះបានទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីភ្ជាប់ម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Portoppdagelse kunne ikke koble til denne maskinen. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å koble til på nytt; Cloud VPN er ikke nødvendig." } }, "pl": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Wykrywanie portów nie mogło połączyć się z tą maszyną. Istniejące porty cmux mogą nadal działać. Odśwież, aby połączyć ponownie; Cloud VPN nie jest wymagany." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "A descoberta de portas não conseguiu se conectar a esta máquina. As portas existentes do cmux ainda podem funcionar. Atualize para reconectar; o Cloud VPN não é necessário." } }, "ru": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Обнаружению портов не удалось подключиться к этой машине. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы переподключиться; Cloud VPN не требуется." } }, "th": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "การค้นหาพอร์ตไม่สามารถเชื่อมต่อกับเครื่องนี้ได้ พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อเชื่อมต่อใหม่ ไม่จำเป็นต้องใช้ Cloud VPN" } }, "tr": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Port keşfi bu makineye bağlanamadı. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden bağlanmak için yenileyin; Cloud VPN gerekmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "%1$@: %2$@" + "value": "Виявленню портів не вдалося підключитися до цієї машини. Наявні порти cmux можуть і далі працювати. Оновіть, щоб підключитися знову; Cloud VPN не потрібен." } } } }, - "devices.incoming.confirm.enable": { + "cloudTree.ports.link.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Make Discoverable" + "value": "Cloud link unavailable" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جعل الجهاز قابلاً للاكتشاف" + "value": "Cloud-Verbindung nicht verfügbar" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Auffindbar machen" + "value": "Connexion Cloud indisponible" } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Hacer detectable" + "value": "اتصال Cloud غير متاح" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Rendre détectable" + "value": "Conexión de Cloud no disponible" } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "検出可能にする" + "value": "Cloud 連線無法使用" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "검색 허용" + "value": "Cloud 连接不可用" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许发现" + "value": "Cloud 연결을 사용할 수 없음" } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "允許探索" + "value": "Cloud 接続を利用できません" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Učini dostupnim" + "value": "Cloud veza nije dostupna" } }, "da": { "stringUnit": { "state": "translated", - "value": "Gør synlig" + "value": "Cloud-forbindelse utilgængelig" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rendi individuabile" + "value": "Collegamento Cloud non disponibile" } }, "km": { "stringUnit": { "state": "translated", - "value": "ធ្វើឲ្យអាចរកឃើញ" + "value": "តំណ Cloud មិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gjør denne Mac-en synlig" + "value": "Cloud-tilkobling utilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Włącz wykrywanie" + "value": "Połączenie Cloud niedostępne" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tornar detectável" + "value": "Conexão Cloud indisponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сделать доступным для обнаружения" + "value": "Связь с Cloud недоступна" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำให้ Mac เครื่องนี้ค้นพบได้" + "value": "ลิงก์ Cloud ไม่พร้อมใช้งาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Keşfedilebilir yap" + "value": "Cloud bağlantısı kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зробити цей Mac видимим" + "value": "Зв’язок із Cloud недоступний" } } } }, - "devices.incoming.confirm.message": { + "cloudTree.ports.loading.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Other Macs signed in to your cmux account may discover this Mac and connect to its workspaces. Do you want to continue?" + "value": "Checking services through cmux’s authenticated Cloud link. No system VPN is needed." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "قد تكتشف أجهزة Mac الأخرى التي سجّلت الدخول إلى حساب cmux هذا الـ Mac وتتصل بمساحات العمل فيه. هل تريد المتابعة؟" + "value": "Dienste werden über die authentifizierte Cloud-Verbindung von cmux geprüft. Ein System-VPN ist nicht erforderlich." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Andere Macs, die bei deinem cmux-Konto angemeldet sind, können diesen Mac finden und sich mit seinen Arbeitsbereichen verbinden. Möchtest du fortfahren?" + "value": "Vérification des services via la connexion Cloud authentifiée de cmux. Aucun VPN système n’est nécessaire." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Otros Mac que hayan iniciado sesión en tu cuenta de cmux podrán descubrir este Mac y conectarse a sus espacios de trabajo. ¿Quieres continuar?" + "value": "جارٍ فحص الخدمات عبر اتصال Cloud الموثّق من cmux. لا حاجة إلى VPN النظام." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Les autres Mac connectés à votre compte cmux pourront détecter ce Mac et se connecter à ses espaces de travail. Voulez-vous continuer ?" + "value": "Comprobando servicios mediante la conexión autenticada de Cloud de cmux. No se necesita una VPN del sistema." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "cmuxアカウントにサインインしているほかのMacから、このMacが検出され、ワークスペースに接続されることがあります。続けますか?" + "value": "正在透過 cmux 的已驗證 Cloud 連線檢查服務。不需要系統 VPN。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "cmux 계정에 로그인한 다른 Mac에서 이 Mac을 검색하고 작업 공간에 연결할 수 있습니다. 계속하시겠습니까?" + "value": "正在通过 cmux 的已验证 Cloud 连接检查服务。无需系统 VPN。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "登录你 cmux 帐户的其他 Mac 可能会发现此 Mac 并连接到其工作区。要继续吗?" + "value": "cmux의 인증된 Cloud 연결로 서비스를 확인하고 있습니다. 시스템 VPN은 필요하지 않습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "登入您 cmux 帳戶的其他 Mac 可能會探索此 Mac 並連線至其工作區。要繼續嗎?" + "value": "cmux の認証済み Cloud 接続でサービスを確認しています。システム VPN は不要です。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Drugi Mac računari prijavljeni na vaš cmux nalog možda će otkriti ovaj Mac i povezati se s njegovim radnim prostorima. Želite li nastaviti?" + "value": "Provjera servisa putem autentificirane Cloud veze cmux-a. Sistemski VPN nije potreban." } }, "da": { "stringUnit": { "state": "translated", - "value": "Andre Mac-computere, der er logget ind på din cmux-konto, kan muligvis finde denne Mac og oprette forbindelse til dens arbejdsområder. Vil du fortsætte?" + "value": "Kontrollerer tjenester via cmux’ godkendte Cloud-forbindelse. Der kræves ingen system-VPN." } }, "it": { "stringUnit": { "state": "translated", - "value": "Gli altri Mac che hanno effettuato l’accesso al tuo account cmux potrebbero rilevare questo Mac e connettersi ai suoi spazi di lavoro. Vuoi continuare?" + "value": "Controllo dei servizi tramite il collegamento Cloud autenticato di cmux. Non serve una VPN di sistema." } }, "km": { "stringUnit": { "state": "translated", - "value": "Mac ផ្សេងទៀតដែលបានចូលគណនី cmux របស់អ្នក អាចរកឃើញ Mac នេះ និងភ្ជាប់ទៅកាន់ workspace របស់វា។ តើអ្នកចង់បន្តឬទេ?" + "value": "កំពុងពិនិត្យសេវាកម្មតាមរយៈតំណ Cloud ដែលបានផ្ទៀងផ្ទាត់របស់ cmux។ មិនត្រូវការ VPN របស់ប្រព័ន្ធទេ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Andre Mac-maskiner som er logget på cmux-kontoen din, kan finne denne Mac-en og koble til arbeidsområdene. Vil du fortsette?" + "value": "Sjekker tjenester via cmux sin autentiserte Cloud-tilkobling. Ingen system-VPN er nødvendig." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Inne Maki zalogowane na Twoje konto cmux mogą wykryć tego Maca i połączyć się z jego obszarami roboczymi. Czy chcesz kontynuować?" + "value": "Sprawdzanie usług przez uwierzytelnione połączenie Cloud w cmux. Systemowa sieć VPN nie jest potrzebna." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Outros Macs conectados à sua conta cmux poderão descobrir este Mac e se conectar aos seus espaços de trabalho. Deseja continuar?" + "value": "Verificando serviços pela conexão Cloud autenticada do cmux. Nenhuma VPN do sistema é necessária." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Другие Mac, вошедшие в вашу учётную запись cmux, могут обнаружить этот Mac и подключиться к его рабочим пространствам. Продолжить?" + "value": "Проверка служб через аутентифицированную связь cmux с Cloud. Системный VPN не нужен." } }, "th": { "stringUnit": { "state": "translated", - "value": "Mac เครื่องอื่นที่ลงชื่อเข้าใช้บัญชี cmux ของคุณอาจค้นพบ Mac เครื่องนี้และเชื่อมต่อกับพื้นที่ทำงานของเครื่องนี้ คุณต้องการดำเนินการต่อหรือไม่" + "value": "กำลังตรวจสอบบริการผ่านลิงก์ Cloud ที่ยืนยันตัวตนแล้วของ cmux ไม่ต้องใช้ VPN ของระบบ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "cmux hesabınızda oturum açmış diğer Mac’ler bu Mac’i keşfedebilir ve çalışma alanlarına bağlanabilir. Devam etmek istiyor musunuz?" + "value": "Hizmetler cmux’un kimliği doğrulanmış Cloud bağlantısı üzerinden denetleniyor. Sistem VPN’i gerekmez." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Інші Mac, на яких виконано вхід у ваш обліковий запис cmux, можуть виявити цей Mac і підключитися до його робочих просторів. Продовжити?" + "value": "Перевірка служб через автентифікований зв’язок cmux із Cloud. Системний VPN не потрібен." } } } }, - "devices.incoming.confirm.title": { + "cloudTree.ports.loopback.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Make this Mac discoverable?" + "value": "These services open in cmux without Cloud VPN. They listen on the machine’s loopback address, so other apps cannot reach them through its private IP, even with VPN connected." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "هل تريد جعل جهاز Mac هذا قابلاً للاكتشاف؟" + "value": "Diese Dienste lassen sich in cmux ohne Cloud-VPN öffnen. Sie lauschen auf der Loopback-Adresse der Maschine. Andere Apps erreichen sie daher auch mit VPN nicht über deren private IP." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Diesen Mac auffindbar machen?" + "value": "Ces services s’ouvrent dans cmux sans VPN Cloud. Ils écoutent sur l’adresse locale de la machine : les autres apps ne peuvent pas y accéder via son IP privée, même avec le VPN." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "¿Hacer que este Mac sea detectable?" + "value": "تُفتح هذه الخدمات داخل cmux دون Cloud VPN. وهي تستمع على عنوان الواجهة المحلية للجهاز، لذا لا تستطيع التطبيقات الأخرى الوصول إليها عبر عنوان IP الخاص به حتى مع اتصال VPN." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Rendre ce Mac détectable ?" + "value": "Estos servicios se abren en cmux sin Cloud VPN. Escuchan en la dirección de bucle local de la máquina, por lo que otras apps no pueden acceder por su IP privada, incluso con la VPN conectada." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "このMacを検出可能にしますか?" + "value": "這些服務可在 cmux 中開啟,不需要 Cloud VPN。它們在機器的迴路位址上監聽,因此即使已連線 VPN,其他 App 也無法透過其私人 IP 存取。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "이 Mac을 검색 가능하게 할까요?" + "value": "这些服务可在 cmux 中打开,无需 Cloud VPN。它们监听机器的回环地址,因此即使已连接 VPN,其他应用也无法通过其专用 IP 访问。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "允许发现此 Mac 吗?" + "value": "이 서비스는 Cloud VPN 없이 cmux에서 열립니다. 머신의 루프백 주소에서 수신 대기하므로 VPN에 연결해도 다른 앱은 비공개 IP로 접근할 수 없습니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "要允許探索此 Mac 嗎?" + "value": "これらのサービスは Cloud VPN なしで cmux から開けます。マシンのループバックアドレスで待ち受けるため、VPN 接続中でも他のアプリからプライベート IP 経由ではアクセスできません。" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Učiniti ovaj Mac dostupnim?" + "value": "Ovi servisi se otvaraju u cmux-u bez Cloud VPN-a. Slušaju na loopback adresi mašine, pa ih druge aplikacije ne mogu dosegnuti preko njene privatne IP adrese, čak ni uz povezan VPN." } }, "da": { "stringUnit": { "state": "translated", - "value": "Gør denne Mac synlig?" + "value": "Disse tjenester åbnes i cmux uden Cloud VPN. De lytter på maskinens loopback-adresse, så andre apps kan ikke nå dem via dens private IP, heller ikke med VPN forbundet." } }, "it": { "stringUnit": { "state": "translated", - "value": "Rendere individuabile questo Mac?" + "value": "Questi servizi si aprono in cmux senza VPN Cloud. Sono in ascolto sull’indirizzo di loopback della macchina, quindi le altre app non possono raggiungerli tramite il suo IP privato, nemmeno con la VPN connessa." } }, "km": { "stringUnit": { "state": "translated", - "value": "ធ្វើឲ្យ Mac នេះអាចរកឃើញ?" + "value": "សេវាកម្មទាំងនេះបើកនៅក្នុង cmux ដោយមិនត្រូវការ Cloud VPN។ ពួកវាស្តាប់នៅលើអាសយដ្ឋាន loopback របស់ម៉ាស៊ីន ដូច្នេះកម្មវិធីផ្សេងទៀតមិនអាចចូលដល់ពួកវាតាមរយៈ IP ឯកជនរបស់វាបានទេ ទោះបីភ្ជាប់ VPN ក៏ដោយ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gjøre denne Mac-en synlig?" + "value": "Disse tjenestene åpnes i cmux uten Cloud VPN. De lytter på maskinens loopback-adresse, så andre apper kan ikke nå dem via den private IP-adressen, selv med VPN tilkoblet." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Uwidocznić tego Maca?" + "value": "Te usługi otwierają się w cmux bez Cloud VPN. Nasłuchują na adresie pętli zwrotnej maszyny, więc inne aplikacje nie mogą do nich dotrzeć przez jej prywatny adres IP, nawet przy połączonym VPN." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tornar este Mac detectável?" + "value": "Esses serviços abrem no cmux sem o Cloud VPN. Eles escutam no endereço de loopback da máquina, então outros apps não conseguem alcançá-los pelo IP privado dela, mesmo com a VPN conectada." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сделать этот Mac доступным для обнаружения?" + "value": "Эти службы открываются в cmux без Cloud VPN. Они прослушивают loopback-адрес машины, поэтому другие приложения не могут обратиться к ним через её частный IP даже при подключённом VPN." } }, "th": { "stringUnit": { "state": "translated", - "value": "ทำให้ Mac เครื่องนี้ค้นพบได้หรือไม่" + "value": "บริการเหล่านี้เปิดใน cmux ได้โดยไม่ต้องใช้ Cloud VPN บริการรับฟังบนที่อยู่ loopback ของเครื่อง แอปอื่นจึงเข้าถึงผ่าน IP ส่วนตัวของเครื่องไม่ได้ แม้จะเชื่อมต่อ VPN แล้วก็ตาม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bu Mac keşfedilebilir yapılsın mı?" + "value": "Bu hizmetler cmux’ta Cloud VPN olmadan açılır. Makinenin geri döngü adresinde dinledikleri için diğer uygulamalar, VPN bağlıyken bile makinenin özel IP’si üzerinden onlara ulaşamaz." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зробити цей Mac доступним для виявлення?" + "value": "Ці служби відкриваються в cmux без Cloud VPN. Вони прослуховують loopback-адресу машини, тому інші застосунки не можуть дістатися до них через її приватну IP-адресу, навіть із підключеним VPN." } } } }, - "cloudTree.device.status.connecting": { + "cloudTree.ports.loopback.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Connecting…" + "value": "Loopback services available" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جارٍ الاتصال…" + "value": "Loopback-Dienste verfügbar" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Wird verbunden…" + "value": "Services locaux disponibles" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "خدمات الواجهة المحلية متاحة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Conectando…" + "value": "Servicios de bucle local disponibles" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Connexion…" + "value": "可使用迴路服務" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "接続中…" + "value": "回环服务可用" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 중…" + "value": "루프백 서비스 사용 가능" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "正在连接…" + "value": "ループバックのサービスを利用できます" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "正在連線…" + "value": "Dostupni loopback servisi" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Loopback-tjenester tilgængelige" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Servizi di loopback disponibili" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មានសេវាកម្ម loopback" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Loopback-tjenester tilgjengelige" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Dostępne usługi pętli zwrotnej" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Serviços de loopback disponíveis" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступны loopback-службы" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "มีบริการ loopback พร้อมใช้งาน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Geri döngü hizmetleri kullanılabilir" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Доступні loopback-служби" } } } }, - "settings.app.installUpdatesAutomatically": { + "cloudTree.ports.notRequested.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "تثبيت التحديثات تلقائيًا" + "value": "Ports not checked yet" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Automatski instaliraj ažuriranja" + "value": "Ports noch nicht geprüft" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Installer opdateringer automatisk" + "value": "Ports pas encore vérifiés" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Updates automatisch installieren" + "value": "لم يتم فحص المنافذ بعد" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Install Updates Automatically" + "value": "Puertos aún sin comprobar" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Instalar actualizaciones automáticamente" + "value": "尚未檢查連接埠" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Installer les mises à jour automatiquement" + "value": "尚未检查端口" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Installa aggiornamenti automaticamente" + "value": "아직 포트를 확인하지 않음" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アップデートを自動的にインストール" + "value": "ポートは未確認です" } }, - "ko": { + "bs": { "stringUnit": { "state": "translated", - "value": "업데이트 자동 설치" + "value": "Portovi još nisu provjereni" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Porte er ikke kontrolleret endnu" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Porte non ancora controllate" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មិនទាន់បានពិនិត្យច្រកនៅឡើយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Installer oppdateringer automatisk" + "value": "Porter er ikke sjekket ennå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Instaluj aktualizacje automatycznie" + "value": "Porty nie zostały jeszcze sprawdzone" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Instalar atualizações automaticamente" + "value": "Portas ainda não verificadas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Устанавливать обновления автоматически" + "value": "Порты ещё не проверены" } }, "th": { "stringUnit": { "state": "translated", - "value": "ติดตั้งอัปเดตโดยอัตโนมัติ" + "value": "ยังไม่ได้ตรวจสอบพอร์ต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Güncellemeleri otomatik olarak yükle" + "value": "Portlar henüz denetlenmedi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Установлювати оновлення автоматично" + "value": "Порти ще не перевірено" + } + } + } + }, + "cloudTree.ports.privateAddress": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Private address unavailable" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "自动安装更新" + "value": "Private Adresse nicht verfügbar" } }, - "zh-Hant": { + "fr": { "stringUnit": { "state": "translated", - "value": "自動安裝更新" + "value": "Adresse privée indisponible" } - } - } - }, - "settings.app.installUpdatesAutomatically.subtitle": { - "extractionState": "manual", - "localizations": { + }, "ar": { "stringUnit": { "state": "translated", - "value": "تنزيل التحديثات في الخلفية وتثبيتها عندما لا يعمل أي وكيل وتبتعد عن الجهاز لمدة دقيقة. تستأنف مساحات العمل والوكلاء من حيث توقفت." + "value": "العنوان الخاص غير متاح" } }, - "bs": { + "es": { "stringUnit": { "state": "translated", - "value": "Preuzimaj ažuriranja u pozadini i instaliraj ih kada nijedan agent ne radi i kada se udaljiš na minut. Radni prostori i agenti nastavljaju tamo gdje su stali." + "value": "Dirección privada no disponible" } }, - "da": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Hent opdateringer i baggrunden, og installer dem, når ingen agent arbejder, og du går fra i et minut. Arbejdsområder og agenter fortsætter, hvor de slap." + "value": "私人位址無法使用" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Updates im Hintergrund laden und installieren, wenn kein Agent arbeitet und du eine Minute Pause machst. Workspaces und Agenten machen dort weiter, wo sie aufgehört haben." + "value": "专用地址不可用" } }, - "en": { + "ko": { "stringUnit": { "state": "translated", - "value": "Download updates in the background and install them when no agent is working and you step away for a minute. Workspaces and agents resume where they left off." + "value": "비공개 주소를 사용할 수 없음" } }, - "es": { + "ja": { "stringUnit": { "state": "translated", - "value": "Descarga las actualizaciones en segundo plano y las instala cuando ningún agente está trabajando y te ausentas un minuto. Los espacios de trabajo y los agentes continúan donde se quedaron." + "value": "プライベートアドレスを利用できません" } }, - "fr": { + "bs": { "stringUnit": { "state": "translated", - "value": "Télécharger les mises à jour en arrière-plan et les installer quand aucun agent ne travaille et que vous vous absentez une minute. Les espaces de travail et les agents reprennent là où ils en étaient." + "value": "Privatna adresa nije dostupna" } }, - "it": { + "da": { "stringUnit": { "state": "translated", - "value": "Scarica gli aggiornamenti in background e installali quando nessun agente è al lavoro e ti allontani per un minuto. Spazi di lavoro e agenti riprendono da dove si erano interrotti." + "value": "Privat adresse utilgængelig" } }, - "ja": { + "it": { "stringUnit": { "state": "translated", - "value": "アップデートをバックグラウンドでダウンロードし、作業中のエージェントがなく 1 分間席を離れたときにインストールします。ワークスペースとエージェントは中断したところから再開します。" + "value": "Indirizzo privato non disponibile" } }, - "ko": { + "km": { "stringUnit": { "state": "translated", - "value": "업데이트를 백그라운드에서 다운로드하고, 작업 중인 에이전트가 없고 1분 동안 자리를 비우면 설치합니다. 워크스페이스와 에이전트는 중단된 지점에서 재개됩니다." + "value": "អាសយដ្ឋានឯកជនមិនអាចប្រើបាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Last ned oppdateringer i bakgrunnen og installer dem når ingen agent arbeider og du går fra i ett minutt. Arbeidsområder og agenter fortsetter der de slapp." + "value": "Privat adresse utilgjengelig" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pobieraj aktualizacje w tle i instaluj je, gdy żaden agent nie pracuje, a Ty odejdziesz na minutę. Obszary robocze i agenci wznowią pracę tam, gdzie ją przerwali." + "value": "Adres prywatny niedostępny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Baixar atualizações em segundo plano e instalá-las quando nenhum agente estiver trabalhando e você se afastar por um minuto. Espaços de trabalho e agentes continuam de onde pararam." + "value": "Endereço privado indisponível" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Загружать обновления в фоне и устанавливать их, когда ни один агент не работает и вы отходите на минуту. Рабочие пространства и агенты продолжат с того места, где остановились." + "value": "Частный адрес недоступен" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดาวน์โหลดอัปเดตในเบื้องหลังและติดตั้งเมื่อไม่มีเอเจนต์ทำงานอยู่และคุณไม่ได้ใช้งานเครื่องเป็นเวลาหนึ่งนาที พื้นที่ทำงานและเอเจนต์จะทำงานต่อจากจุดที่ค้างไว้" + "value": "ไม่มีที่อยู่ส่วนตัว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Güncellemeleri arka planda indir ve hiçbir ajan çalışmıyorken bir dakika uzaklaştığında yükle. Çalışma alanları ve ajanlar kaldıkları yerden devam eder." + "value": "Özel adres kullanılamıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Завантажувати оновлення у фоні та встановлювати їх, коли жоден агент не працює, а ви відходите на хвилину. Робочі простори й агенти продовжать з того місця, де зупинилися." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "在后台下载更新,并在没有代理工作且你离开一分钟时安装。工作区和代理会从中断处继续。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "在背景下載更新,並在沒有代理運作且你離開一分鐘時安裝。工作區與代理會從中斷處繼續。" + "value": "Приватна адреса недоступна" } } } }, - "update.autoInstall.waitingQuiet": { + "cloudTree.ports.privateAddress.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Installs the next time you step away for a minute. Workspaces and agents resume where they left off." + "value": "cmux’s authenticated route needs this machine’s private address. Refresh to retrieve it. Turning on Cloud VPN does not assign a missing address." } }, "de": { "stringUnit": { "state": "translated", - "value": "Wird installiert, wenn du das nächste Mal eine Minute Pause machst. Workspaces und Agenten machen dort weiter, wo sie aufgehört haben." + "value": "Die authentifizierte Route von cmux benötigt die private Adresse dieser Maschine. Aktualisieren Sie, um sie abzurufen. Cloud-VPN weist keine fehlende Adresse zu." } }, "fr": { "stringUnit": { "state": "translated", - "value": "S’installe la prochaine fois que vous vous absentez une minute. Les espaces de travail et les agents reprennent là où ils en étaient." + "value": "La route authentifiée de cmux nécessite l’adresse privée de cette machine. Actualisez pour la récupérer. Activer le VPN Cloud n’attribue pas d’adresse manquante." } }, "ar": { "stringUnit": { "state": "translated", - "value": "يتم التثبيت في المرة التالية التي تبتعد فيها عن الجهاز لمدة دقيقة. تستأنف مساحات العمل والوكلاء من حيث توقفت." + "value": "يحتاج مسار cmux الموثّق إلى العنوان الخاص لهذا الجهاز. حدّث لاسترجاعه. تشغيل Cloud VPN لا يعيّن عنوانًا مفقودًا." } }, "es": { "stringUnit": { "state": "translated", - "value": "Se instala la próxima vez que te ausentes un minuto. Los espacios de trabajo y los agentes continúan donde se quedaron." + "value": "La ruta autenticada de cmux necesita la dirección privada de esta máquina. Actualiza para obtenerla. Activar Cloud VPN no asigna una dirección que falta." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "將在你下次離開一分鐘時安裝。工作區與代理會從中斷處繼續。" + "value": "cmux 的已驗證路徑需要此機器的私人位址。請重新整理以取得位址。開啟 Cloud VPN 不會指派缺少的位址。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "将在你下次离开一分钟时安装。工作区和代理会从中断处继续。" + "value": "cmux 的已验证路由需要此机器的专用地址。请刷新以获取地址。开启 Cloud VPN 不会分配缺失的地址。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다음에 1분 동안 자리를 비우면 설치합니다. 워크스페이스와 에이전트는 중단된 지점에서 재개됩니다." + "value": "cmux의 인증된 경로에는 이 머신의 비공개 주소가 필요합니다. 새로 고쳐 주소를 가져오세요. Cloud VPN을 켜도 누락된 주소가 할당되지는 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "次に 1 分間席を離れたときにインストールします。ワークスペースとエージェントは中断したところから再開します。" + "value": "cmux の認証済み経路にはこのマシンのプライベートアドレスが必要です。更新して取得してください。Cloud VPN を有効にしても不足しているアドレスは割り当てられません。" } - } - } - }, - "update.autoInstall.waitingRisky": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Installs after these finish and you step away." + "value": "Autentificirana ruta cmux-a treba privatnu adresu ove mašine. Osvježite da je preuzmete. Uključivanje Cloud VPN-a ne dodjeljuje adresu koja nedostaje." } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "Wird installiert, sobald diese fertig sind und du eine Pause machst." + "value": "cmux’ godkendte rute kræver denne maskines private adresse. Opdater for at hente den. Aktivering af Cloud VPN tildeler ikke en manglende adresse." } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "S’installe quand ceux-ci ont terminé et que vous vous absentez." + "value": "Il percorso autenticato di cmux richiede l’indirizzo privato di questa macchina. Aggiorna per recuperarlo. L’attivazione della VPN Cloud non assegna un indirizzo mancante." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "يتم التثبيت بعد انتهاء هذه العناصر وابتعادك عن الجهاز." + "value": "ផ្លូវដែលបានផ្ទៀងផ្ទាត់របស់ cmux ត្រូវការអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីននេះ។ ផ្ទុកឡើងវិញដើម្បីទាញយកវា។ ការបើក Cloud VPN មិនផ្តល់អាសយដ្ឋានដែលបាត់ទេ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Se instala cuando terminen estos y te ausentes." + "value": "cmux sin autentiserte rute trenger denne maskinens private adresse. Oppdater for å hente den. Å slå på Cloud VPN tildeler ikke en manglende adresse." } }, - "zh-Hant": { + "pl": { "stringUnit": { "state": "translated", - "value": "將在這些完成且你離開後安裝。" + "value": "Uwierzytelniona trasa cmux wymaga prywatnego adresu tej maszyny. Odśwież, aby go pobrać. Włączenie Cloud VPN nie przypisuje brakującego adresu." } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "将在这些完成且你离开后安装。" + "value": "A rota autenticada do cmux precisa do endereço privado desta máquina. Atualize para obtê-lo. Ativar o Cloud VPN não atribui um endereço ausente." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "이 항목들이 끝나고 자리를 비우면 설치합니다." + "value": "Аутентифицированному маршруту cmux нужен частный адрес этой машины. Обновите, чтобы получить его. Включение Cloud VPN не назначает отсутствующий адрес." } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "これらが終了し、席を離れるとインストールします。" + "value": "เส้นทางที่ยืนยันตัวตนแล้วของ cmux ต้องใช้ที่อยู่ส่วนตัวของเครื่องนี้ รีเฟรชเพื่อดึงข้อมูล การเปิด Cloud VPN ไม่ได้กำหนดที่อยู่ที่ขาดหายไป" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux’un kimliği doğrulanmış yolu bu makinenin özel adresine ihtiyaç duyar. Adresi almak için yenileyin. Cloud VPN’i açmak eksik bir adres atamaz." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Автентифікованому маршруту cmux потрібна приватна адреса цієї машини. Оновіть, щоб отримати її. Увімкнення Cloud VPN не призначає відсутню адресу." } } } }, - "update.relaunch.confirmRisky": { + "cloudTree.ports.routeNote": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Relaunching now stops what these are running." + "value": "cmux forwards ports without Cloud VPN. Web browsers and other Mac apps need Cloud VPN to reach services bound to the machine’s private address." } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Neustart jetzt beendet, was diese gerade ausführen." + "value": "cmux leitet Ports ohne Cloud-VPN weiter. Webbrowser und andere Mac-Apps benötigen Cloud-VPN, um Dienste an der privaten Adresse der Maschine zu erreichen." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Relancer maintenant arrête ce qu’ils exécutent." + "value": "cmux transfère les ports sans VPN Cloud. Les navigateurs web et les autres apps Mac ont besoin du VPN Cloud pour atteindre les services liés à l’adresse privée de la machine." } }, "ar": { "stringUnit": { "state": "translated", - "value": "تؤدي إعادة التشغيل الآن إلى إيقاف ما تشغّله هذه العناصر." + "value": "يعيد cmux توجيه المنافذ دون Cloud VPN. تحتاج متصفحات الويب وتطبيقات Mac الأخرى إلى Cloud VPN للوصول إلى الخدمات المرتبطة بالعنوان الخاص للجهاز." } }, "es": { "stringUnit": { "state": "translated", - "value": "Reiniciar ahora detiene lo que estos están ejecutando." + "value": "cmux reenvía puertos sin Cloud VPN. Los navegadores web y otras apps de Mac necesitan Cloud VPN para acceder a servicios enlazados a la dirección privada de la máquina." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "現在重新啟動會停止這些項目正在執行的工作。" + "value": "cmux 可轉送連接埠,不需要 Cloud VPN。網頁瀏覽器和其他 Mac App 需要 Cloud VPN,才能存取繫結至機器私人位址的服務。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "现在重新启动会停止这些项目正在运行的工作。" + "value": "cmux 可转发端口,无需 Cloud VPN。网页浏览器和其他 Mac 应用需要 Cloud VPN,才能访问绑定到机器专用地址的服务。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "지금 재실행하면 이 항목들이 실행 중인 작업이 중지됩니다." + "value": "cmux는 Cloud VPN 없이 포트를 전달합니다. 웹 브라우저 및 다른 Mac 앱이 머신의 비공개 주소에 바인딩된 서비스에 접근하려면 Cloud VPN이 필요합니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "今すぐ再起動すると、これらが実行中の処理は停止します。" + "value": "cmux は Cloud VPN なしでポートを転送します。Web ブラウザやその他の Mac アプリからマシンのプライベートアドレスにバインドされたサービスにアクセスするには Cloud VPN が必要です。" } - } - } - }, - "update.relaunch.resumesMidTask": { - "extractionState": "manual", - "localizations": { - "en": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld agent will be resumed mid-task." - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld agents will be resumed mid-task." - } - } - } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "cmux prosljeđuje portove bez Cloud VPN-a. Web preglednicima i drugim Mac aplikacijama potreban je Cloud VPN za pristup servisima vezanim za privatnu adresu mašine." } }, - "de": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld Agent wird mitten in der Aufgabe fortgesetzt." - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld Agenten werden mitten in der Aufgabe fortgesetzt." - } - } - } + "da": { + "stringUnit": { + "state": "translated", + "value": "cmux videresender porte uden Cloud VPN. Webbrowsere og andre Mac-apps skal bruge Cloud VPN for at nå tjenester, der er bundet til maskinens private adresse." } }, - "fr": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld agent reprendra en cours de tâche." - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%lld d’agents reprendront en cours de tâche." - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld agents reprendront en cours de tâche." - } - } - } + "it": { + "stringUnit": { + "state": "translated", + "value": "cmux inoltra le porte senza VPN Cloud. I browser web e le altre app per Mac hanno bisogno della VPN Cloud per raggiungere i servizi associati all’indirizzo privato della macchina." } }, - "ar": { - "variations": { - "plural": { - "zero": { - "stringUnit": { - "state": "translated", - "value": "سيُستأنف الوكلاء (%lld) من منتصف المهمة." - } - }, - "one": { - "stringUnit": { - "state": "translated", - "value": "سيُستأنف وكيل واحد (%lld) من منتصف المهمة." - } - }, - "two": { - "stringUnit": { - "state": "translated", - "value": "سيُستأنف وكيلان (%lld) من منتصف المهمة." - } - }, - "few": { - "stringUnit": { - "state": "translated", - "value": "سيُستأنف %lld وكلاء من منتصف المهمة." - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "سيُستأنف %lld وكيلًا من منتصف المهمة." - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "سيُستأنف %lld وكيل من منتصف المهمة." - } - } - } + "km": { + "stringUnit": { + "state": "translated", + "value": "cmux បញ្ជូនបន្តច្រកដោយមិនត្រូវការ Cloud VPN។ កម្មវិធីរុករកបណ្តាញ និងកម្មវិធី Mac ផ្សេងទៀតត្រូវការ Cloud VPN ដើម្បីចូលដល់សេវាកម្មដែលចងទៅអាសយដ្ឋានឯកជនរបស់ម៉ាស៊ីន។" } }, - "es": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld agente se reanudará a mitad de la tarea." - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%lld de agentes se reanudarán a mitad de la tarea." - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld agentes se reanudarán a mitad de la tarea." - } - } - } + "nb": { + "stringUnit": { + "state": "translated", + "value": "cmux videresender porter uten Cloud VPN. Nettlesere og andre Mac-apper trenger Cloud VPN for å nå tjenester som er bundet til maskinens private adresse." } }, - "zh-Hant": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld 個代理將從任務中途繼續。" - } - } - } + "pl": { + "stringUnit": { + "state": "translated", + "value": "cmux przekierowuje porty bez Cloud VPN. Przeglądarki internetowe i inne aplikacje na Maca potrzebują Cloud VPN, aby dotrzeć do usług powiązanych z prywatnym adresem maszyny." } }, - "zh-Hans": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld 个代理将从任务中途继续。" - } - } - } + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "O cmux encaminha portas sem o Cloud VPN. Navegadores e outros apps do Mac precisam do Cloud VPN para acessar serviços vinculados ao endereço privado da máquina." } }, - "ko": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "에이전트 %lld개가 작업 도중부터 재개됩니다." - } - } - } + "ru": { + "stringUnit": { + "state": "translated", + "value": "cmux перенаправляет порты без Cloud VPN. Веб-браузерам и другим приложениям Mac нужен Cloud VPN, чтобы обращаться к службам, привязанным к частному адресу машины." } }, - "ja": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld 個のエージェントが作業の途中から再開されます。" - } - } - } + "th": { + "stringUnit": { + "state": "translated", + "value": "cmux ส่งต่อพอร์ตได้โดยไม่ต้องใช้ Cloud VPN เว็บเบราว์เซอร์และแอป Mac อื่นๆ ต้องใช้ Cloud VPN เพื่อเข้าถึงบริการที่ผูกกับที่อยู่ส่วนตัวของเครื่อง" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux, portları Cloud VPN olmadan yönlendirir. Web tarayıcıları ve diğer Mac uygulamaları, makinenin özel adresine bağlı hizmetlere ulaşmak için Cloud VPN’e ihtiyaç duyar." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "cmux перенаправляє порти без Cloud VPN. Веббраузерам та іншим застосункам Mac потрібен Cloud VPN, щоб звертатися до служб, прив’язаних до приватної адреси машини." } } } }, - "update.relaunch.runningCommands": { + "cloudTree.ports.setupVPN": { "extractionState": "manual", "localizations": { "en": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld running command" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld running commands" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Set Up VPN…" } }, "de": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld laufender Befehl" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld laufende Befehle" - } - } - } + "stringUnit": { + "state": "translated", + "value": "VPN einrichten…" } }, "fr": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld commande en cours" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%lld de commandes en cours" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld commandes en cours" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Configurer le VPN…" } }, "ar": { - "variations": { - "plural": { - "zero": { - "stringUnit": { - "state": "translated", - "value": "أوامر قيد التشغيل (%lld)" - } - }, - "one": { - "stringUnit": { - "state": "translated", - "value": "أمر واحد قيد التشغيل (%lld)" - } - }, - "two": { - "stringUnit": { - "state": "translated", - "value": "أمران قيد التشغيل (%lld)" - } - }, - "few": { - "stringUnit": { - "state": "translated", - "value": "%lld أوامر قيد التشغيل" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%lld أمرًا قيد التشغيل" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld أمر قيد التشغيل" - } - } - } + "stringUnit": { + "state": "translated", + "value": "إعداد VPN…" } }, "es": { - "variations": { - "plural": { - "one": { - "stringUnit": { - "state": "translated", - "value": "%lld comando en ejecución" - } - }, - "many": { - "stringUnit": { - "state": "translated", - "value": "%lld de comandos en ejecución" - } - }, - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld comandos en ejecución" - } - } - } + "stringUnit": { + "state": "translated", + "value": "Configurar VPN…" } }, "zh-Hant": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld 個執行中的命令" - } - } - } + "stringUnit": { + "state": "translated", + "value": "設定 VPN…" } }, "zh-Hans": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "%lld 个正在运行的命令" - } - } - } + "stringUnit": { + "state": "translated", + "value": "设置 VPN…" } }, "ko": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "실행 중인 명령 %lld개" - } - } - } + "stringUnit": { + "state": "translated", + "value": "VPN 설정…" } }, "ja": { - "variations": { - "plural": { - "other": { - "stringUnit": { - "state": "translated", - "value": "実行中のコマンド %lld 個" - } - } - } + "stringUnit": { + "state": "translated", + "value": "VPN を設定…" } - } - } - }, - "update.safety.safe": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Safe" + "value": "Postavi VPN…" } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "Sicher" + "value": "Konfigurer VPN…" } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "Sûr" + "value": "Configura VPN…" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "آمن" + "value": "រៀបចំ VPN…" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Seguro" + "value": "Konfigurer VPN…" } }, - "zh-Hant": { + "pl": { "stringUnit": { "state": "translated", - "value": "安全" + "value": "Skonfiguruj VPN…" } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "安全" + "value": "Configurar VPN…" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "안전" + "value": "Настроить VPN…" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "安全" + "value": "ตั้งค่า VPN…" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "VPN’i Kur…" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Налаштувати VPN…" } } } }, - "update.safety.care": { + "cloudTree.ports.stale": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Resumes" + "value": "Port list may be out of date" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wird fortgesetzt" + "value": "Portliste möglicherweise veraltet" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Reprend" + "value": "La liste des ports peut être obsolète" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يُستأنف" + "value": "قد تكون قائمة المنافذ قديمة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se reanuda" + "value": "La lista de puertos puede estar desactualizada" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "會繼續" + "value": "連接埠清單可能已過時" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "会继续" + "value": "端口列表可能已过期" } }, "ko": { "stringUnit": { "state": "translated", - "value": "재개됨" + "value": "포트 목록이 오래되었을 수 있음" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再開" + "value": "ポートリストが古い可能性があります" } - } - } - }, - "update.safety.risky": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Risky" + "value": "Lista portova je možda zastarjela" } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "Riskant" + "value": "Portlisten er muligvis forældet" } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "Risqué" + "value": "L’elenco delle porte potrebbe non essere aggiornato" } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "خطر" + "value": "បញ្ជីច្រកអាចហួសសម័យ" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Arriesgado" + "value": "Portlisten kan være utdatert" } }, - "zh-Hant": { + "pl": { "stringUnit": { "state": "translated", - "value": "有風險" + "value": "Lista portów może być nieaktualna" } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "有风险" + "value": "A lista de portas pode estar desatualizada" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "위험" + "value": "Список портов может быть устаревшим" } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "リスクあり" + "value": "รายการพอร์ตอาจไม่เป็นปัจจุบัน" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Port listesi güncel olmayabilir" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Список портів може бути застарілим" } } } }, - "update.wait": { + "cloudTree.ports.stale.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wait" + "value": "The last scan could not be refreshed. Listed services may have changed; refresh to check again. cmux forwarding does not need Cloud VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Warten" + "value": "Der letzte Scan konnte nicht aktualisiert werden. Die aufgeführten Dienste könnten sich geändert haben. Aktualisieren Sie erneut. Die cmux-Weiterleitung benötigt kein Cloud-VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Attendre" + "value": "La dernière analyse n’a pas pu être actualisée. Les services listés peuvent avoir changé ; actualisez pour vérifier. Le transfert cmux ne nécessite pas de VPN Cloud." } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتظار" + "value": "تعذر تحديث آخر فحص. ربما تغيرت الخدمات المدرجة؛ حدّث للفحص مجددًا. لا تحتاج إعادة توجيه cmux إلى Cloud VPN." } }, "es": { "stringUnit": { "state": "translated", - "value": "Esperar" + "value": "No se pudo actualizar el último escaneo. Los servicios listados pueden haber cambiado; actualiza para comprobarlos. El reenvío de cmux no necesita Cloud VPN." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "等待" + "value": "無法重新整理上次掃描結果。列出的服務可能已變更;請重新整理以再次檢查。cmux 轉送不需要 Cloud VPN。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "等待" + "value": "无法刷新上次扫描结果。列出的服务可能已更改;请刷新以再次检查。cmux 转发无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "대기" + "value": "마지막 검색 결과를 새로 고치지 못했습니다. 나열된 서비스가 변경되었을 수 있으니 새로 고쳐 확인하세요. cmux 전달에는 Cloud VPN이 필요하지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "待機" + "value": "前回のスキャンを更新できませんでした。表示されたサービスが変わっている可能性があります。更新して再確認してください。cmux の転送に Cloud VPN は不要です。" } - } - } - }, - "update.updateWhenFinished": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Update When These Finish" + "value": "Posljednje skeniranje nije se moglo osvježiti. Navedeni servisi su se možda promijenili; osvježite da ponovo provjerite. Prosljeđivanje u cmux-u ne treba Cloud VPN." } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "Aktualisieren, wenn diese fertig sind" + "value": "Den seneste scanning kunne ikke opdateres. De viste tjenester kan have ændret sig; opdater for at kontrollere igen. Videresendelse i cmux kræver ikke Cloud VPN." } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "Mettre à jour quand ils auront terminé" + "value": "Non è stato possibile aggiornare l’ultima scansione. I servizi elencati potrebbero essere cambiati; aggiorna per controllare di nuovo. L’inoltro di cmux non richiede la VPN Cloud." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "التحديث عند انتهاء هذه العناصر" + "value": "មិនអាចផ្ទុកការស្កេនចុងក្រោយឡើងវិញបានទេ។ សេវាកម្មដែលបានរាយអាចបានផ្លាស់ប្តូរ; ផ្ទុកឡើងវិញដើម្បីពិនិត្យម្តងទៀត។ ការបញ្ជូនបន្តរបស់ cmux មិនត្រូវការ Cloud VPN ទេ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Actualizar cuando terminen" + "value": "Den siste skanningen kunne ikke oppdateres. De oppførte tjenestene kan ha endret seg; oppdater for å sjekke på nytt. Videresending i cmux trenger ikke Cloud VPN." } }, - "zh-Hant": { + "pl": { "stringUnit": { "state": "translated", - "value": "在這些完成後更新" + "value": "Nie udało się odświeżyć ostatniego skanowania. Wymienione usługi mogły się zmienić; odśwież, aby sprawdzić ponownie. Przekierowywanie w cmux nie wymaga Cloud VPN." } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "在这些完成后更新" + "value": "Não foi possível atualizar a última verificação. Os serviços listados podem ter mudado; atualize para verificar de novo. O encaminhamento do cmux não precisa do Cloud VPN." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "완료되면 업데이트" + "value": "Не удалось обновить последнее сканирование. Перечисленные службы могли измениться; обновите, чтобы проверить снова. Перенаправлению cmux Cloud VPN не нужен." } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "終了後にアップデート" + "value": "ไม่สามารถรีเฟรชการสแกนครั้งล่าสุดได้ บริการที่แสดงอาจเปลี่ยนไปแล้ว รีเฟรชเพื่อตรวจสอบอีกครั้ง การส่งต่อของ cmux ไม่ต้องใช้ Cloud VPN" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Son tarama yenilenemedi. Listelenen hizmetler değişmiş olabilir; yeniden denetlemek için yenileyin. cmux yönlendirmesi Cloud VPN gerektirmez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Не вдалося оновити останнє сканування. Перелічені служби могли змінитися; оновіть, щоб перевірити знову. Перенаправлення cmux не потребує Cloud VPN." } } } }, - "update.updateAnyway": { + "cloudTree.ports.unavailable.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Update Anyway" + "value": "The port scan failed; this does not mean no service is listening. Existing cmux ports may still work. Refresh to retry; Cloud VPN is not required." } }, "de": { "stringUnit": { "state": "translated", - "value": "Trotzdem aktualisieren" + "value": "Der Portscan ist fehlgeschlagen; das bedeutet nicht, dass kein Dienst lauscht. Vorhandene cmux-Ports funktionieren möglicherweise weiter. Aktualisieren Sie; Cloud-VPN ist nicht erforderlich." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Mettre à jour quand même" + "value": "L’analyse des ports a échoué ; cela ne signifie pas qu’aucun service n’écoute. Les ports cmux existants peuvent encore fonctionner. Actualisez pour réessayer ; le VPN Cloud n’est pas nécessaire." } }, "ar": { "stringUnit": { "state": "translated", - "value": "التحديث على أي حال" + "value": "فشل فحص المنافذ؛ هذا لا يعني عدم وجود خدمة تستمع. قد تظل منافذ cmux الحالية تعمل. حدّث للمحاولة مجددًا؛ Cloud VPN غير مطلوب." } }, "es": { "stringUnit": { "state": "translated", - "value": "Actualizar de todos modos" + "value": "Falló el escaneo de puertos; no significa que no haya servicios en escucha. Los puertos de cmux existentes pueden seguir funcionando. Actualiza para reintentar; Cloud VPN no es necesario." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "仍要更新" + "value": "連接埠掃描失敗;這不代表沒有服務正在監聽。現有 cmux 連接埠可能仍可使用。請重新整理以重試;不需要 Cloud VPN。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "仍要更新" + "value": "端口扫描失败;这并不代表没有服务正在监听。现有 cmux 端口可能仍可使用。请刷新以重试;无需 Cloud VPN。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그래도 업데이트" + "value": "포트 검색이 실패했지만 수신 대기 서비스가 없다는 뜻은 아닙니다. 기존 cmux 포트는 계속 작동할 수 있습니다. 새로 고쳐 다시 시도하세요. Cloud VPN은 필요하지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "それでもアップデート" + "value": "ポートスキャンが失敗しましたが、サービスが待ち受けていないとは限りません。既存の cmux ポートは引き続き動作する可能性があります。更新して再試行してください。Cloud VPN は不要です。" } - } - } - }, - "update.agentActivity.remote": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Keeps running on the remote host" + "value": "Skeniranje portova nije uspjelo; to ne znači da nijedan servis ne sluša. Postojeći cmux portovi možda i dalje rade. Osvježite za ponovni pokušaj; Cloud VPN nije potreban." } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "Läuft auf dem Remote-Host weiter" + "value": "Portscanningen mislykkedes; det betyder ikke, at ingen tjeneste lytter. Eksisterende cmux-porte virker muligvis stadig. Opdater for at prøve igen; Cloud VPN er ikke påkrævet." } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "Continue de s’exécuter sur l’hôte distant" + "value": "La scansione delle porte non è riuscita; ciò non significa che nessun servizio sia in ascolto. Le porte cmux esistenti potrebbero funzionare ancora. Aggiorna per riprovare; la VPN Cloud non è necessaria." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "يستمر في العمل على المضيف البعيد" + "value": "ការស្កេនច្រកបានបរាជ័យ; នេះមិនមានន័យថាគ្មានសេវាកម្មណាកំពុងស្តាប់ទេ។ ច្រក cmux ដែលមានស្រាប់អាចនៅតែដំណើរការ។ ផ្ទុកឡើងវិញដើម្បីព្យាយាមម្តងទៀត; មិនត្រូវការ Cloud VPN ទេ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Sigue ejecutándose en el host remoto" + "value": "Portskanningen mislyktes; det betyr ikke at ingen tjeneste lytter. Eksisterende cmux-porter kan fortsatt fungere. Oppdater for å prøve igjen; Cloud VPN er ikke nødvendig." } }, - "zh-Hant": { + "pl": { "stringUnit": { "state": "translated", - "value": "在遠端主機上持續執行" + "value": "Skanowanie portów nie powiodło się; nie oznacza to, że żadna usługa nie nasłuchuje. Istniejące porty cmux mogą nadal działać. Odśwież, aby spróbować ponownie; Cloud VPN nie jest wymagany." } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "在远程主机上继续运行" + "value": "A verificação de portas falhou; isso não significa que nenhum serviço esteja em escuta. As portas existentes do cmux ainda podem funcionar. Atualize para tentar de novo; o Cloud VPN não é necessário." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "원격 호스트에서 계속 실행됨" + "value": "Сканирование портов не удалось; это не значит, что ни одна служба не прослушивает порты. Существующие порты cmux могут по-прежнему работать. Обновите, чтобы повторить; Cloud VPN не требуется." } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "リモートホストで実行を継続" + "value": "การสแกนพอร์ตล้มเหลว ไม่ได้หมายความว่าไม่มีบริการที่กำลังรับฟัง พอร์ต cmux ที่มีอยู่อาจยังใช้งานได้ รีเฟรชเพื่อลองอีกครั้ง ไม่จำเป็นต้องใช้ Cloud VPN" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Port taraması başarısız oldu; bu, dinleyen bir hizmet olmadığı anlamına gelmez. Mevcut cmux portları hâlâ çalışıyor olabilir. Yeniden denemek için yenileyin; Cloud VPN gerekmez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Сканування портів не вдалося; це не означає, що жодна служба не прослуховує. Наявні порти cmux можуть і далі працювати. Оновіть, щоб повторити; Cloud VPN не потрібен." } } } }, - "update.agentActivity.needsInput": { + "cloudTree.ports.unsupported": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting for your answer" + "value": "Ports are not supported by this provider." } }, "de": { "stringUnit": { "state": "translated", - "value": "Wartet auf deine Antwort" + "value": "Ports werden von diesem Anbieter nicht unterstützt." } }, "fr": { "stringUnit": { "state": "translated", - "value": "En attente de votre réponse" + "value": "Les ports ne sont pas pris en charge par ce fournisseur." } }, "ar": { "stringUnit": { "state": "translated", - "value": "في انتظار إجابتك" + "value": "لا يدعم هذا الموفر المنافذ." } }, "es": { "stringUnit": { "state": "translated", - "value": "Esperando tu respuesta" + "value": "Este proveedor no admite puertos." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "正在等待你的回答" + "value": "此提供者不支援連接埠。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "正在等待你的回答" + "value": "此提供商不支持端口。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "답변을 기다리는 중" + "value": "이 제공자는 포트를 지원하지 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "回答を待っています" + "value": "このプロバイダーはポートをサポートしていません。" } - } - } - }, - "update.agentActivity.working": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Working" + "value": "Ovaj pružalac ne podržava portove." } }, - "de": { + "da": { "stringUnit": { "state": "translated", - "value": "Arbeitet" + "value": "Porte understøttes ikke af denne udbyder." } }, - "fr": { + "it": { "stringUnit": { "state": "translated", - "value": "En cours" + "value": "Le porte non sono supportate da questo provider." } }, - "ar": { + "km": { "stringUnit": { "state": "translated", - "value": "قيد العمل" + "value": "អ្នកផ្តល់សេវានេះមិនគាំទ្រច្រកទេ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Trabajando" + "value": "Porter støttes ikke av denne leverandøren." } }, - "zh-Hant": { + "pl": { "stringUnit": { "state": "translated", - "value": "處理中" + "value": "Ten dostawca nie obsługuje portów." } }, - "zh-Hans": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "处理中" + "value": "Este provedor não oferece suporte a portas." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "작업 중" + "value": "Этот провайдер не поддерживает порты." } }, - "ja": { + "th": { "stringUnit": { "state": "translated", - "value": "作業中" + "value": "ผู้ให้บริการนี้ไม่รองรับพอร์ต" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu sağlayıcı portları desteklemiyor." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Цей постачальник не підтримує порти." } } } }, - "update.agentActivity.idle": { + "cloudTree.ports.unsupported.detail": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Idle" + "value": "This provider has no supported in-app port route. Open a shell to access the service inside the machine. Cloud VPN does not add provider support." } }, "de": { "stringUnit": { "state": "translated", - "value": "Inaktiv" + "value": "Dieser Anbieter unterstützt keine Portverbindung in der App. Öffnen Sie eine Shell, um innerhalb der Maschine auf den Dienst zuzugreifen. Cloud-VPN fügt keine Anbieterunterstützung hinzu." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Inactif" + "value": "Ce fournisseur ne prend pas en charge les ports dans l’app. Ouvrez un shell pour accéder au service dans la machine. Le VPN Cloud n’ajoute pas cette prise en charge." } }, "ar": { "stringUnit": { "state": "translated", - "value": "خامل" + "value": "لا يدعم هذا الموفر مسار منافذ داخل التطبيق. افتح صدفة للوصول إلى الخدمة داخل الجهاز. لا يضيف Cloud VPN دعمًا للموفر." } }, "es": { "stringUnit": { "state": "translated", - "value": "Inactivo" + "value": "Este proveedor no admite una ruta de puertos dentro de la app. Abre una shell para acceder al servicio dentro de la máquina. Cloud VPN no añade soporte al proveedor." } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "閒置" + "value": "此提供者不支援應用程式內連接埠路徑。請開啟 Shell 以在機器內存取服務。Cloud VPN 不會新增提供者支援。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "空闲" + "value": "此提供商不支持应用内端口路由。请打开 Shell 以在机器内部访问服务。Cloud VPN 不会添加提供商支持。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "유휴" + "value": "이 제공자는 앱 내 포트 경로를 지원하지 않습니다. 셸을 열어 머신 내부의 서비스에 접근하세요. Cloud VPN으로 제공자 지원이 추가되지는 않습니다." } }, "ja": { "stringUnit": { "state": "translated", - "value": "アイドル" + "value": "このプロバイダーはアプリ内のポート経路に対応していません。シェルを開き、マシン内でサービスにアクセスしてください。Cloud VPN を有効にしても対応は追加されません。" } - } - } - }, - "shortcut.diffViewerNextHunk.label": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Next Hunk" + "value": "Ovaj pružalac nema podržanu rutu portova unutar aplikacije. Otvorite shell da pristupite servisu unutar mašine. Cloud VPN ne dodaje podršku pružaoca." } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 次のハンク" + "value": "Denne udbyder har ingen understøttet portrute i appen. Åbn en shell for at få adgang til tjenesten inde i maskinen. Cloud VPN tilføjer ikke understøttelse for udbyderen." } }, - "zh-Hans": { + "it": { "stringUnit": { "state": "translated", - "value": "差异查看器:下一个块" + "value": "Questo provider non ha un percorso delle porte supportato nell’app. Apri una shell per accedere al servizio all’interno della macchina. La VPN Cloud non aggiunge il supporto del provider." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Nächster Hunk" + "value": "អ្នកផ្តល់សេវានេះគ្មានផ្លូវច្រកក្នុងកម្មវិធីដែលគាំទ្រទេ។ បើក shell ដើម្បីចូលប្រើសេវាកម្មនៅខាងក្នុងម៉ាស៊ីន។ Cloud VPN មិនបន្ថែមការគាំទ្រអ្នកផ្តល់សេវាទេ។" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc suivant" + "value": "Denne leverandøren har ingen støttet portrute i appen. Åpne et skall for å få tilgang til tjenesten inne i maskinen. Cloud VPN legger ikke til støtte for leverandøren." } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: المقطع التالي" + "value": "Ten dostawca nie ma obsługiwanej trasy portów w aplikacji. Otwórz powłokę, aby uzyskać dostęp do usługi wewnątrz maszyny. Cloud VPN nie dodaje obsługi dostawcy." } }, - "es": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Siguiente bloque" + "value": "Este provedor não tem uma rota de portas compatível no app. Abra um shell para acessar o serviço dentro da máquina. O Cloud VPN não adiciona suporte ao provedor." } }, - "zh-Hant": { + "ru": { "stringUnit": { "state": "translated", - "value": "差異檢視器:下一個區塊" + "value": "У этого провайдера нет поддерживаемого маршрута портов в приложении. Откройте оболочку, чтобы получить доступ к службе внутри машины. Cloud VPN не добавляет поддержку провайдера." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "비교 뷰어: 다음 헝크" + "value": "ผู้ให้บริการนี้ไม่มีเส้นทางพอร์ตในแอปที่รองรับ เปิดเชลล์เพื่อเข้าถึงบริการภายในเครื่อง Cloud VPN ไม่ได้เพิ่มการรองรับผู้ให้บริการ" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu sağlayıcının desteklenen bir uygulama içi port yolu yok. Makinenin içindeki hizmete erişmek için bir kabuk açın. Cloud VPN sağlayıcı desteği eklemez." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Цей постачальник не має підтримуваного маршруту портів у застосунку. Відкрийте оболонку, щоб отримати доступ до служби всередині машини. Cloud VPN не додає підтримку постачальника." } } } }, - "shortcut.diffViewerPreviousHunk.label": { + "cloudTree.port.openInCmux": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Diff Viewer: Previous Hunk" + "value": "Open in cmux" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "差分ビューア: 前のハンク" + "value": "فتح في cmux" } }, - "zh-Hans": { + "de": { "stringUnit": { "state": "translated", - "value": "差异查看器:上一个块" + "value": "In cmux öffnen" } }, - "de": { + "es": { "stringUnit": { "state": "translated", - "value": "Diff-Viewer: Vorheriger Hunk" + "value": "Abrir en cmux" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Visionneuse de diff : Bloc précédent" + "value": "Ouvrir dans cmux" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "عارض الفروق: المقطع السابق" + "value": "cmuxで開く" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Visor de diff: Bloque anterior" + "value": "cmux에서 열기" } }, - "zh-Hant": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "差異檢視器:上一個區塊" + "value": "在 cmux 中打开" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "비교 뷰어: 이전 헝크" + "value": "在 cmux 中開啟" } } } }, - "cloud.overlay.accessLost.detail": { + "cloudTree.port.openInCmux.help": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "You no longer have access to this machine." + "value": "Open in cmux. No VPN setup needed." } }, "ar": { "stringUnit": { "state": "translated", - "value": "لم يعد لديك حق الوصول إلى هذا الجهاز." + "value": "افتح في cmux. لا يلزم إعداد VPN." } }, "de": { "stringUnit": { "state": "translated", - "value": "Sie haben keinen Zugriff mehr auf diese Maschine." + "value": "In cmux öffnen. Keine VPN-Einrichtung nötig." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ya no tienes acceso a esta máquina." + "value": "Abrir en cmux. No hace falta configurar una VPN." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vous n’avez plus accès à cette machine." + "value": "Ouvrir dans cmux. Aucune configuration VPN nécessaire." } }, "ja": { "stringUnit": { "state": "translated", - "value": "このマシンへのアクセス権がなくなりました。" + "value": "cmux で開きます。VPN の設定は不要です。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "더 이상 이 머신에 접근할 수 없습니다." + "value": "cmux에서 열기. VPN 설정이 필요하지 않습니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "你已无法再访问这台机器。" + "value": "在 cmux 中打开。无需设置 VPN。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "你已無法再存取這台機器。" + "value": "在 cmux 中開啟。無需設定 VPN。" } } } }, - "cloud.overlay.accessLost.title": { + "cloudTree.port.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud machine unavailable" + "value": "Port %@" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جهاز Cloud غير متاح" + "value": "المنفذ %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Cloud-Maschine nicht verfügbar" + "value": "Port-Nr. %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Máquina de Cloud no disponible" + "value": "Puerto %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Machine Cloud indisponible" + "value": "Port n° %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Cloud マシンを利用できません" + "value": "ポート %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cloud 머신을 사용할 수 없습니다" + "value": "포트 %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud 机器不可用" + "value": "端口 %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Cloud 機器無法使用" + "value": "連接埠 %@" } } } }, - "cloud.overlay.signedOut.detail": { + "cloudTree.placeholder.deviceOffline": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign in to cmux to reconnect this terminal." + "value": "Offline — its workspaces return when it does" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سجّل الدخول إلى cmux لإعادة توصيل هذه الطرفية." + "value": "غير متصل — ستعود مساحات عمله عند اتصاله مجددًا" } }, "de": { "stringUnit": { "state": "translated", - "value": "Melden Sie sich bei cmux an, um dieses Terminal erneut zu verbinden." + "value": "Offline — die Arbeitsbereiche erscheinen wieder, sobald das Gerät online ist" } }, "es": { "stringUnit": { "state": "translated", - "value": "Inicia sesión en cmux para volver a conectar este terminal." + "value": "Sin conexión — sus espacios de trabajo volverán cuando se conecte" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Connectez-vous à cmux pour reconnecter ce terminal." + "value": "Hors ligne — ses espaces de travail réapparaîtront à sa reconnexion" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このターミナルに再接続するには cmux にサインインしてください。" + "value": "オフライン — 再接続するとワークスペースが戻ります" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 터미널을 다시 연결하려면 cmux에 로그인하세요." + "value": "오프라인 — 다시 연결되면 작업 공간이 돌아옵니다" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "登录 cmux 以重新连接此终端。" + "value": "离线 — 重新连接后会恢复工作区" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "登入 cmux 以重新連線此終端機。" + "value": "離線 — 重新連線後會恢復工作區" } } } }, - "cloud.overlay.signedOut.title": { + "cloud.vpn.setup.heading": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud session ended" + "value": "Use Cloud machines from any app" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "انتهت جلسة Cloud" + "value": "Cloud-Maschinen aus jeder App verwenden" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Cloud-Sitzung beendet" + "value": "Utiliser les machines Cloud depuis toute app" } }, "es": { "stringUnit": { "state": "translated", - "value": "Sesión de Cloud finalizada" + "value": "Usar máquinas Cloud desde cualquier app" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Session Cloud terminée" + "value": "ほかのアプリからCloudマシンを使う" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Cloud セッションが終了しました" + "value": "从任何应用使用 Cloud 机器" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "從任何 App 使用 Cloud 機器" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Cloud 세션이 종료되었습니다" + "value": "모든 앱에서 Cloud 머신 사용" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "Cloud 会话已结束" + "value": "استخدام أجهزة Cloud من أي تطبيق" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "Cloud 工作階段已結束" + "value": "Koristite Cloud mašine iz bilo koje aplikacije" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Brug Cloud-maskiner fra alle apps" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Usa le macchine Cloud da qualsiasi app" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ប្រើម៉ាស៊ីន Cloud ពីកម្មវិធីណាមួយ" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Bruk Cloud-maskiner fra alle apper" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Używaj maszyn Cloud z dowolnej aplikacji" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Use máquinas Cloud em qualquer app" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Используйте Cloud-машины из любого приложения" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "ใช้เครื่อง Cloud จากทุกแอป" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Cloud makinelerini her uygulamadan kullanın" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Використовуйте Cloud-машини з будь-якої програми" } } } }, - "cli.restore.error.routedLauncherNotFound": { + "cloud.vpn.setup.subtitle": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "restore: this session was started with '%1$@ claude proxy', but '%1$@' is not on PATH in this shell. Add it to PATH, then retry." + "value": "Optional access to each VM's private address and original ports, such as 10.40.0.10:3000." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Optionaler Zugriff auf die private Adresse und die ursprünglichen Ports jeder VM, etwa 10.40.0.10:3000." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Accès facultatif à chaque adresse privée et aux ports d’origine des VM, comme 10.40.0.10:3000." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Acceso opcional a la dirección privada y los puertos originales de cada VM, como 10.40.0.10:3000." } }, "ja": { "stringUnit": { "state": "translated", - "value": "restore: このセッションは「%1$@ claude proxy」で起動されましたが、このシェルの PATH に「%1$@」がありません。PATH に追加してから、再試行してください。" + "value": "各VMのプライベートアドレスと元のポート(例:10.40.0.10:3000)にアクセスするための任意の設定です。" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "restore:此会话是通过“%1$@ claude proxy”启动的,但此 shell 的 PATH 中没有“%1$@”。请将其添加到 PATH,然后重试。" + "value": "可选设置,用于访问每台 VM 的私有地址和原始端口,例如 10.40.0.10:3000。" } }, - "de": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "restore: Diese Sitzung wurde mit „%1$@ claude proxy“ gestartet, aber „%1$@“ ist in dieser Shell nicht im PATH. Fügen Sie es zum PATH hinzu und versuchen Sie es dann erneut." + "value": "選用設定,可存取每台 VM 的私有位址和原始連接埠,例如 10.40.0.10:3000。" } }, - "fr": { + "ko": { "stringUnit": { "state": "translated", - "value": "restore : cette session a été démarrée avec « %1$@ claude proxy », mais « %1$@ » n'est pas dans le PATH de ce shell. Ajoutez-le au PATH, puis réessayez." + "value": "각 VM의 비공개 주소와 원래 포트(예: 10.40.0.10:3000)에 접근하기 위한 선택 설정입니다." } }, "ar": { "stringUnit": { "state": "translated", - "value": "restore: بدأت هذه الجلسة باستخدام '%1$@ claude proxy'، لكن '%1$@' غير موجود في PATH في هذه الصدفة. أضفه إلى PATH، ثم أعد المحاولة." + "value": "وصول اختياري إلى العنوان الخاص والمنافذ الأصلية لكل جهاز افتراضي، مثل 10.40.0.10:3000." } }, - "es": { + "bs": { "stringUnit": { "state": "translated", - "value": "restore: esta sesión se inició con '%1$@ claude proxy', pero '%1$@' no está en el PATH de este shell. Agréguelo al PATH y vuelva a intentarlo." + "value": "Opcionalni pristup privatnoj adresi i izvornim portovima svake VM, na primjer 10.40.0.10:3000." } }, - "zh-Hant": { + "da": { "stringUnit": { "state": "translated", - "value": "restore:此工作階段是以「%1$@ claude proxy」啟動的,但此 shell 的 PATH 中沒有「%1$@」。請將其加入 PATH,然後重試。" + "value": "Valgfri adgang til hver VM’s private adresse og oprindelige porte, f.eks. 10.40.0.10:3000." } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "restore: 이 세션은 '%1$@ claude proxy'로 시작되었지만 이 셸의 PATH에 '%1$@'이(가) 없습니다. PATH에 추가한 후 다시 시도하십시오." + "value": "Accesso facoltativo all’indirizzo privato e alle porte originali di ogni VM, ad esempio 10.40.0.10:3000." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ចូលប្រើអាសយដ្ឋានឯកជន និងច្រកដើមរបស់ VM នីមួយៗ ដូចជា 10.40.0.10:3000 ជាជម្រើស។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Valgfri tilgang til hver VMs private adresse og opprinnelige porter, som 10.40.0.10:3000." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Opcjonalny dostęp do prywatnego adresu i oryginalnych portów każdej maszyny VM, na przykład 10.40.0.10:3000." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Acesso opcional ao endereço privado e às portas originais de cada VM, como 10.40.0.10:3000." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Необязательный доступ к частному адресу и исходным портам каждой VM, например 10.40.0.10:3000." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "การเข้าถึงที่ไม่บังคับไปยังที่อยู่ส่วนตัวและพอร์ตเดิมของ VM แต่ละเครื่อง เช่น 10.40.0.10:3000" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Her VM’nin özel adresine ve özgün bağlantı noktalarına isteğe bağlı erişim; örneğin 10.40.0.10:3000." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Необов’язковий доступ до приватної адреси та початкових портів кожної VM, наприклад 10.40.0.10:3000." } } } }, - "settings.terminal.textEditingCommandMovesByWord": { + "cloud.vpn.setup.howItWorks.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Command Moves by Word" + "value": "How it works" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "Command ينقل حسب الكلمة" + "value": "So funktioniert es" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Befehlstaste bewegt wortweise" + "value": "Fonctionnement" } }, "es": { "stringUnit": { "state": "translated", - "value": "Comando mueve por palabra" + "value": "Cómo funciona" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Commande déplace par mot" + "value": "仕組み" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Command で単語単位に移動" + "value": "工作原理" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "運作方式" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Command로 단어 단위 이동" + "value": "작동 방식" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "Command 按词移动" + "value": "طريقة العمل" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "Command 依字移動" + "value": "Kako radi" } - } - } - }, - "settings.terminal.textEditingCommandMovesByWord.subtitleOn": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Command arrow and delete keys move and delete by word, like Option. Control Left and Right Arrow move to the start and end of the line." + "value": "Sådan fungerer det" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب الكلمة، مثل Option. وينقل Control مع السهمين الأيسر والأيمن إلى بداية السطر ونهايته." + "value": "Come funziona" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht wortweise, wie die Wahltaste. Control mit Links- und Rechtspfeil springt an Anfang und Ende der Zeile." + "value": "របៀបដំណើរការ" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por palabra, como Opción. Control con las flechas izquierda y derecha va al inicio y al final de la línea." + "value": "Slik fungerer det" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par mot, comme Option. Contrôle avec les flèches gauche et droite va au début et à la fin de la ligne." + "value": "Jak to działa" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Command と矢印キー・削除キーで、Option と同じく単語単位に移動・削除します。Control と左右矢印キーで行頭・行末に移動します。" + "value": "Como funciona" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "Command 화살표 및 삭제 키가 Option처럼 단어 단위로 이동하고 삭제합니다. Control 왼쪽 및 오른쪽 화살표는 줄의 시작과 끝으로 이동합니다." + "value": "Как это работает" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "Command 加方向键和删除键按词移动和删除,与 Option 相同。Control 加左右方向键移到行首和行尾。" + "value": "วิธีการทำงาน" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "Command 加方向鍵與刪除鍵會依字移動與刪除,與 Option 相同。Control 加左右方向鍵會移到行首與行尾。" + "value": "Nasıl çalışır" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Як це працює" } } } }, - "settings.terminal.textEditingCommandMovesByWord.subtitleOff": { + "cloud.vpn.setup.status.off": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Command arrow and delete keys move and delete by line, as in macOS text fields." + "value": "Off. Your Cloud panes continue to work through cmux's built-in route." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب السطر، كما في حقول النص في macOS." + "value": "Aus. Ihre Cloud-Bereiche funktionieren weiterhin über die integrierte Verbindung von cmux." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht zeilenweise, wie in macOS-Textfeldern." + "value": "Désactivé. Vos volets Cloud continuent de fonctionner via la connexion intégrée de cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por línea, como en los campos de texto de macOS." + "value": "Desactivada. Tus paneles Cloud siguen funcionando mediante la conexión integrada de cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par ligne, comme dans les champs de texte de macOS." + "value": "オフ。Cloudペインは引き続きcmux内蔵の接続経路で動作します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Command と矢印キー・削除キーで、macOS のテキストフィールドと同じく行単位に移動・削除します。" + "value": "已关闭。Cloud 面板仍通过 cmux 内置连接工作。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "已關閉。Cloud 面板仍透過 cmux 內建連線運作。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Command 화살표 및 삭제 키가 macOS 텍스트 필드처럼 줄 단위로 이동하고 삭제합니다." + "value": "꺼짐. Cloud 패널은 cmux의 내장 연결을 통해 계속 작동합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "Command 加方向键和删除键按行移动和删除,与 macOS 文本框相同。" + "value": "متوقف. تستمر لوحات Cloud في العمل عبر اتصال cmux المضمن." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "Command 加方向鍵與刪除鍵會依行移動與刪除,與 macOS 文字欄位相同。" + "value": "Isključeno. Cloud paneli i dalje rade preko ugrađene cmux veze." } - } - } - }, - "settings.terminal.textEditingGesturesInFullScreenApps": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Text Editing Gestures in Full-Screen Apps" + "value": "Fra. Dine Cloud-paneler fungerer stadig via cmux’ indbyggede forbindelse." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "إيماءات تحرير النص في التطبيقات بملء الشاشة" + "value": "Disattivata. I pannelli Cloud continuano a funzionare tramite la connessione integrata di cmux." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Textbearbeitungsgesten in Vollbild-Apps" + "value": "បិទ។ ផ្ទាំង Cloud របស់អ្នកនៅតែដំណើរការតាមការភ្ជាប់ដែលមានស្រាប់របស់ cmux។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Gestos de edición de texto en apps a pantalla completa" + "value": "Av. Cloud-panelene dine fortsetter å fungere gjennom cmux sin innebygde forbindelse." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Gestes d’édition de texte dans les apps plein écran" + "value": "Wyłączona. Panele Cloud nadal działają przez wbudowane połączenie cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "フルスクリーンアプリでのテキスト編集ジェスチャー" + "value": "Desativada. Seus painéis Cloud continuam funcionando pela conexão integrada do cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "전체 화면 앱에서 텍스트 편집 제스처" + "value": "Выключено. Панели Cloud продолжают работать через встроенное соединение cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "全屏应用中的文本编辑手势" + "value": "ปิดอยู่ แผง Cloud ยังคงทำงานผ่านการเชื่อมต่อในตัวของ cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "全螢幕 App 中的文字編輯手勢" + "value": "Kapalı. Cloud panelleriniz cmux’un yerleşik bağlantısıyla çalışmaya devam eder." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Вимкнено. Панелі Cloud продовжують працювати через вбудоване з’єднання cmux." } } } }, - "settings.terminal.textEditingGesturesInFullScreenApps.subtitle": { + "cloud.vpn.setup.steps.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Gestures also apply while a full-screen app such as vim, less, or tmux is running, so they keep working at a shell inside tmux, screen, or zellij." + "value": "First-time setup" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تنطبق الإيماءات أيضًا أثناء تشغيل تطبيق بملء الشاشة مثل vim أو less أو tmux، فتظل تعمل في الصدفة داخل tmux أو screen أو zellij." + "value": "Ersteinrichtung" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Gesten gelten auch, während eine Vollbild-App wie vim, less oder tmux läuft, und funktionieren so weiter an einer Shell in tmux, screen oder zellij." + "value": "Première configuration" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los gestos también se aplican mientras se ejecuta una app a pantalla completa como vim, less o tmux, así que siguen funcionando en una shell dentro de tmux, screen o zellij." + "value": "Configuración inicial" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Les gestes s’appliquent aussi lorsqu’une app plein écran comme vim, less ou tmux est en cours d’exécution, et continuent donc de fonctionner dans un shell sous tmux, screen ou zellij." + "value": "初回設定" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "vim、less、tmux などのフルスクリーンアプリの実行中もジェスチャーが有効になるため、tmux、screen、zellij 内のシェルでも引き続き使えます。" + "value": "首次设置" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "首次設定" } }, "ko": { "stringUnit": { "state": "translated", - "value": "vim, less, tmux 같은 전체 화면 앱이 실행 중일 때도 제스처가 적용되므로 tmux, screen, zellij 안의 셸에서도 계속 작동합니다." + "value": "최초 설정" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "在 vim、less 或 tmux 等全屏应用运行时手势也会生效,因此在 tmux、screen 或 zellij 中的 shell 里仍可使用。" + "value": "الإعداد الأولي" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "在 vim、less 或 tmux 等全螢幕 App 執行時手勢也會生效,因此在 tmux、screen 或 zellij 中的 shell 裡仍可使用。" + "value": "Prvo podešavanje" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Første opsætning" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Prima configurazione" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ការរៀបចំលើកដំបូង" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Førstegangsoppsett" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Pierwsza konfiguracja" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Primeira configuração" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Первая настройка" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "การตั้งค่าครั้งแรก" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "İlk kurulum" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Перше налаштування" } } } }, - "cloudTree.action.newCloudMachine": { + "cloud.vpn.setup.steps.extension": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "New Cloud Machine" + "value": "1. Click Connect Cloud VPN. When macOS asks, allow the cmux network extension in System Settings." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "جهاز سحابي جديد" + "value": "1. Klicken Sie auf Cloud-VPN verbinden. Erlauben Sie auf Aufforderung von macOS die cmux-Netzwerkerweiterung in den Systemeinstellungen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Neue Cloud-Maschine" + "value": "1. Cliquez sur Connecter le VPN Cloud. Lorsque macOS le demande, autorisez l’extension réseau cmux dans Réglages Système." } }, "es": { "stringUnit": { "state": "translated", - "value": "Nueva máquina en la nube" + "value": "1. Haz clic en Conectar VPN de Cloud. Cuando macOS lo solicite, permite la extensión de red de cmux en Ajustes del Sistema." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Nouvelle machine cloud" + "value": "1. 「Cloud VPNに接続」をクリックします。macOSに求められたら、システム設定でcmuxのネットワーク機能拡張を許可します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "新しいクラウドマシン" + "value": "1. 点击“连接 Cloud VPN”。macOS 提示时,在系统设置中允许 cmux 网络扩展。" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "새 클라우드 머신" + "value": "1. 按一下「連接 Cloud VPN」。macOS 提示時,請在系統設定中允許 cmux 網路延伸功能。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "新建云主机" + "value": "1. Cloud VPN 연결을 클릭합니다. macOS에서 요청하면 시스템 설정에서 cmux 네트워크 확장을 허용합니다." } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "新增雲端機器" + "value": "1. انقر على توصيل VPN الخاص بـ Cloud. عندما يطلب macOS ذلك، اسمح بامتداد شبكة cmux في إعدادات النظام." } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nova cloud mašina" + "value": "1. Kliknite Poveži Cloud VPN. Kada macOS zatraži, dozvolite cmux mrežni dodatak u Postavkama sistema." } }, "da": { "stringUnit": { "state": "translated", - "value": "Ny cloud-maskine" + "value": "1. Klik på Forbind Cloud VPN. Når macOS spørger, skal du tillade cmux-netværksudvidelsen i Systemindstillinger." } }, "it": { "stringUnit": { "state": "translated", - "value": "Nuova macchina cloud" + "value": "1. Fai clic su Connetti VPN Cloud. Quando macOS lo richiede, consenti l’estensione di rete cmux nelle Impostazioni di Sistema." } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាស៊ីន Cloud ថ្មី" + "value": "1. ចុច ភ្ជាប់ Cloud VPN។ ពេល macOS ស្នើ សូមអនុញ្ញាតផ្នែកបន្ថែមបណ្តាញ cmux ក្នុងការកំណត់ប្រព័ន្ធ។" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ny sky-maskin" + "value": "1. Klikk Koble til Cloud VPN. Når macOS spør, tillat cmux-nettverksutvidelsen i Systeminnstillinger." } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nowa maszyna w chmurze" + "value": "1. Kliknij Połącz z Cloud VPN. Gdy macOS poprosi, zezwól na rozszerzenie sieci cmux w Ustawieniach systemowych." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nova máquina na nuvem" + "value": "1. Clique em Conectar Cloud VPN. Quando o macOS pedir, permita a extensão de rede do cmux nos Ajustes do Sistema." } }, "ru": { "stringUnit": { "state": "translated", - "value": "Новая облачная машина" + "value": "1. Нажмите Подключить Cloud VPN. Когда macOS попросит, разрешите сетевое расширение cmux в системных настройках." } }, "th": { "stringUnit": { "state": "translated", - "value": "เครื่องคลาวด์ใหม่" + "value": "1. คลิก เชื่อมต่อ Cloud VPN เมื่อ macOS ขอ ให้อนุญาตส่วนขยายเครือข่าย cmux ในการตั้งค่าระบบ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeni bulut makinesi" + "value": "1. Cloud VPN’e bağlan’a tıklayın. macOS istediğinde Sistem Ayarları’nda cmux ağ uzantısına izin verin." } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нова хмарна машина" + "value": "1. Натисніть Підключити Cloud VPN. Коли macOS попросить, дозвольте мережеве розширення cmux у Системних параметрах." } } } }, - "shortcut.sizeTerminalToMyWindow.label": { + "cloud.vpn.setup.steps.settings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" + "value": "Open General > Login Items & Extensions > Network Extensions, then enable cmux." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "Öffnen Sie Allgemein > Anmeldeobjekte & Erweiterungen > Netzwerkerweiterungen und aktivieren Sie cmux." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" + "value": "Ouvrez Général > Ouverture et extensions > Extensions réseau, puis activez cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "Abre General > Ítems de inicio y extensiones > Extensiones de red y activa cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "「一般」>「ログイン項目と機能拡張」>「ネットワーク機能拡張」を開き、cmuxを有効にします。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "value": "打开“通用”>“登录项与扩展”>“网络扩展”,然后启用 cmux。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "打開「一般」>「登入項目與延伸功能」>「網路延伸功能」,然後啟用 cmux。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "일반 > 로그인 항목 및 확장 프로그램 > 네트워크 확장을 열고 cmux를 활성화합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "افتح عام > عناصر الدخول والامتدادات > امتدادات الشبكة، ثم فعّل cmux." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" + "value": "Otvorite Opšte > Stavke za prijavu i dodaci > Mrežni dodaci, pa omogućite cmux." } - } - } - }, - "command.terminalDisconnectOtherClients.title": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Disconnect Other Terminal Clients…" + "value": "Åbn Generelt > Loginemner og udvidelser > Netværksudvidelser, og aktivér cmux." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "قطع اتصال عملاء الطرفية الآخرين…" + "value": "Apri Generali > Elementi login ed estensioni > Estensioni di rete, quindi abilita cmux." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Andere Terminal-Clients trennen…" + "value": "បើក ទូទៅ > ធាតុចូល និងផ្នែកបន្ថែម > ផ្នែកបន្ថែមបណ្តាញ ហើយបើក cmux។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Desconectar otros clientes de la terminal…" + "value": "Åpne Generelt > Påloggingselementer og utvidelser > Nettverksutvidelser, og aktiver cmux." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres clients du terminal…" + "value": "Otwórz Ogólne > Elementy logowania i rozszerzenia > Rozszerzenia sieciowe, a następnie włącz cmux." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "他のターミナルクライアントを切断…" + "value": "Abra Geral > Itens de Início e Extensões > Extensões de Rede e ative o cmux." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "다른 터미널 클라이언트 연결 끊기…" + "value": "Откройте Основные > Объекты входа и расширения > Сетевые расширения и включите cmux." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "断开其他终端客户端…" + "value": "เปิด ทั่วไป > รายการเข้าสู่ระบบและส่วนขยาย > ส่วนขยายเครือข่าย แล้วเปิดใช้ cmux" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "中斷其他終端機用戶端的連線…" + "value": "Genel > Giriş Öğeleri ve Uzantılar > Ağ Uzantıları’nı açın ve cmux’u etkinleştirin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відкрийте Загальні > Об’єкти входу та розширення > Мережеві розширення й увімкніть cmux." } } } }, - "command.terminalShowSizePanel.title": { + "cloud.vpn.setup.steps.settingsLegacy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Show Terminal Size Panel" + "value": "Open Privacy & Security and allow the cmux extension." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إظهار لوحة حجم الطرفية" + "value": "Öffnen Sie Datenschutz & Sicherheit und erlauben Sie die cmux-Erweiterung." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Terminalgrößen-Bereich anzeigen" + "value": "Ouvrez Confidentialité et sécurité et autorisez l’extension cmux." } }, "es": { "stringUnit": { "state": "translated", - "value": "Mostrar el panel de tamaño de la terminal" + "value": "Abre Privacidad y seguridad y permite la extensión de cmux." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Afficher le panneau de taille du terminal" + "value": "「プライバシーとセキュリティ」を開き、cmuxの機能拡張を許可します。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズパネルを表示" + "value": "打开“隐私与安全性”,然后允许 cmux 扩展。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "打開「隱私權與安全性」,然後允許 cmux 延伸功能。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널 크기 패널 보기" + "value": "개인정보 보호 및 보안을 열고 cmux 확장을 허용합니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "显示终端大小面板" + "value": "افتح الخصوصية والأمان واسمح بامتداد cmux." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "顯示終端機大小面板" + "value": "Otvorite Privatnost i sigurnost i dozvolite cmux dodatak." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Åbn Anonymitet og sikkerhed, og tillad cmux-udvidelsen." + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Apri Privacy e sicurezza e consenti l’estensione cmux." + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "បើក ឯកជនភាព និងសុវត្ថិភាព ហើយអនុញ្ញាតផ្នែកបន្ថែម cmux។" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Åpne Personvern og sikkerhet og tillat cmux-utvidelsen." + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Otwórz Prywatność i ochrona i zezwól na rozszerzenie cmux." + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Abra Privacidade e Segurança e permita a extensão do cmux." + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Откройте Конфиденциальность и безопасность и разрешите расширение cmux." + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "เปิด ความเป็นส่วนตัวและความปลอดภัย แล้วอนุญาตส่วนขยาย cmux" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Gizlilik ve Güvenlik’i açın ve cmux uzantısına izin verin." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Відкрийте Конфіденційність і безпека та дозвольте розширення cmux." } } } }, - "command.terminalSizeToMyWindow.title": { + "cloud.vpn.setup.steps.configuration": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size Terminal to My Window" + "value": "2. Allow cmux to add a VPN configuration named cmux Cloud. This is a separate macOS permission." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "ضبط حجم الطرفية على نافذتي" + "value": "2. Erlauben Sie cmux, eine VPN-Konfiguration namens cmux Cloud hinzuzufügen. Dies ist eine separate macOS-Berechtigung." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Terminal an mein Fenster anpassen" + "value": "2. Autorisez cmux à ajouter une configuration VPN nommée cmux Cloud. Il s’agit d’une autorisation macOS distincte." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustar la terminal a mi ventana" + "value": "2. Permite que cmux añada una configuración VPN llamada cmux Cloud. Este es un permiso independiente de macOS." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Adapter le terminal à ma fenêtre" + "value": "2. cmux Cloudという名前のVPN構成の追加を許可します。これは別のmacOS権限です。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ターミナルを自分のウィンドウに合わせる" + "value": "2. 允许 cmux 添加名为 cmux Cloud 的 VPN 配置。这是单独的 macOS 权限。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "2. 允許 cmux 加入名為 cmux Cloud 的 VPN 設定。這是另一項 macOS 權限。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "터미널을 내 창 크기에 맞추기" + "value": "2. cmux가 cmux Cloud라는 VPN 구성을 추가하도록 허용합니다. 이는 별도의 macOS 권한입니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "让终端适配我的窗口" + "value": "2. اسمح لـ cmux بإضافة إعداد VPN باسم cmux Cloud. هذا إذن منفصل في macOS." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "讓終端機符合我的視窗大小" + "value": "2. Dozvolite cmux-u da doda VPN konfiguraciju pod imenom cmux Cloud. Ovo je posebna macOS dozvola." } - } - } - }, - "terminalSharing.detached.hostShutdown": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "The terminal host shut down at %@." + "value": "2. Tillad cmux at tilføje en VPN-konfiguration med navnet cmux Cloud. Dette er en separat macOS-tilladelse." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "توقف مضيف الطرفية في %@." + "value": "2. Consenti a cmux di aggiungere una configurazione VPN chiamata cmux Cloud. È un’autorizzazione macOS separata." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Der Terminal-Host wurde um %@ beendet." + "value": "2. អនុញ្ញាតឱ្យ cmux បន្ថែមការកំណត់ VPN ឈ្មោះ cmux Cloud។ នេះជាសិទ្ធិ macOS ផ្សេងមួយ។" } }, - "es": { + "nb": { + "stringUnit": { + "state": "translated", + "value": "2. Tillat cmux å legge til en VPN-konfigurasjon kalt cmux Cloud. Dette er en separat macOS-tillatelse." + } + }, + "pl": { "stringUnit": { "state": "translated", - "value": "El host de la terminal se detuvo a las %@." + "value": "2. Zezwól cmux dodać konfigurację VPN o nazwie cmux Cloud. To osobne uprawnienie macOS." } }, - "fr": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "L’hôte du terminal s’est arrêté à %@." + "value": "2. Permita que o cmux adicione uma configuração VPN chamada cmux Cloud. Esta é uma permissão separada do macOS." } }, - "ja": { + "ru": { "stringUnit": { "state": "translated", - "value": "ターミナルホストが %@ に終了しました。" + "value": "2. Разрешите cmux добавить VPN-конфигурацию с именем cmux Cloud. Это отдельное разрешение macOS." } }, - "ko": { + "th": { "stringUnit": { "state": "translated", - "value": "터미널 호스트가 %@에 종료되었습니다." + "value": "2. อนุญาตให้ cmux เพิ่มการกำหนดค่า VPN ชื่อ cmux Cloud นี่เป็นสิทธิ์ macOS แยกต่างหาก" } }, - "zh-Hans": { + "tr": { "stringUnit": { "state": "translated", - "value": "终端主机已于 %@ 关闭。" + "value": "2. cmux’un cmux Cloud adlı bir VPN yapılandırması eklemesine izin verin. Bu ayrı bir macOS iznidir." } }, - "zh-Hant": { + "uk": { "stringUnit": { "state": "translated", - "value": "終端機主機已於 %@ 關閉。" + "value": "2. Дозвольте cmux додати конфігурацію VPN з назвою cmux Cloud. Це окремий дозвіл macOS." } } } }, - "terminalSharing.detached.network": { + "cloud.vpn.setup.steps.return": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The network dropped." + "value": "3. Return to this pane. The connection continues automatically after approval. Disconnect here when finished. Quitting cmux or signing out also disconnects it." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "انقطع اتصال الشبكة." + "value": "3. Kehren Sie zu diesem Bereich zurück. Die Verbindung wird nach der Genehmigung automatisch fortgesetzt. Trennen Sie sie hier, wenn Sie fertig sind. Das Beenden von cmux oder Abmelden trennt sie ebenfalls." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Die Netzwerkverbindung wurde unterbrochen." + "value": "3. Revenez à ce volet. La connexion reprend automatiquement après autorisation. Déconnectez-la ici lorsque vous avez terminé. Quitter cmux ou fermer la session la déconnecte aussi." } }, "es": { "stringUnit": { "state": "translated", - "value": "Se perdió la conexión de red." + "value": "3. Vuelve a este panel. La conexión continúa automáticamente tras la autorización. Desconéctala aquí cuando termines. Salir de cmux o cerrar sesión también la desconecta." } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "La connexion réseau a été interrompue." + "value": "3. このペインに戻ります。承認後、接続は自動的に続行されます。使い終わったらここで切断してください。cmuxの終了やサインアウトでも切断されます。" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "ネットワーク接続が切れました。" + "value": "3. 返回此面板。批准后连接会自动继续。完成后可在此断开连接。退出 cmux 或退出登录也会断开连接。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "3. 返回此面板。核准後連線會自動繼續。完成後可在此中斷連線。結束 cmux 或登出也會中斷連線。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "네트워크 연결이 끊어졌습니다." + "value": "3. 이 패널로 돌아옵니다. 승인 후 연결이 자동으로 계속됩니다. 사용을 마치면 여기에서 연결을 해제하세요. cmux를 종료하거나 로그아웃해도 연결이 해제됩니다." } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "网络连接已中断。" + "value": "3. ارجع إلى هذه اللوحة. يستمر الاتصال تلقائيًا بعد الموافقة. اقطع الاتصال هنا عند الانتهاء. يؤدي إنهاء cmux أو تسجيل الخروج أيضًا إلى قطع الاتصال." } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "網路連線中斷。" + "value": "3. Vratite se na ovaj panel. Veza se nastavlja automatski nakon odobrenja. Ovdje prekinite vezu kada završite. Izlazak iz cmux-a ili odjava takođe prekida vezu." } - } - } - }, - "terminalSharing.detached.reattach": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Reattach" + "value": "3. Gå tilbage til dette panel. Forbindelsen fortsætter automatisk efter godkendelsen. Afbryd her, når du er færdig. Hvis du afslutter cmux eller logger ud, afbrydes forbindelsen også." } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق" + "value": "3. Torna a questo pannello. La connessione continua automaticamente dopo l’autorizzazione. Disconnettila qui quando hai finito. Anche uscire da cmux o effettuare il logout la disconnette." } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden" + "value": "3. ត្រឡប់ទៅផ្ទាំងនេះ។ ការភ្ជាប់នឹងបន្តដោយស្វ័យប្រវត្តិបន្ទាប់ពីអនុម័ត។ ផ្តាច់នៅទីនេះពេលបញ្ចប់។ ការបិទ cmux ឬចាកចេញក៏ផ្តាច់ការភ្ជាប់ដែរ។" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Volver a conectar" + "value": "3. Gå tilbake til dette panelet. Forbindelsen fortsetter automatisk etter godkjenning. Koble fra her når du er ferdig. Avslutning av cmux eller utlogging kobler også fra." } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Se reconnecter" + "value": "3. Wróć do tego panelu. Połączenie będzie kontynuowane automatycznie po zatwierdzeniu. Po zakończeniu rozłącz je tutaj. Zamknięcie cmux lub wylogowanie również rozłączy połączenie." } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "再接続" + "value": "3. Volte a este painel. A conexão continuará automaticamente após a aprovação. Desconecte aqui quando terminar. Sair do cmux ou encerrar a sessão também desconecta." } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "다시 연결" + "value": "3. Вернитесь в эту панель. После подтверждения соединение продолжится автоматически. Завершив работу, отключите его здесь. Выход из cmux или системы также отключает соединение." } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "重新连接" + "value": "3. กลับมาที่แผงนี้ การเชื่อมต่อจะดำเนินต่อโดยอัตโนมัติหลังการอนุมัติ ตัดการเชื่อมต่อที่นี่เมื่อเสร็จแล้ว การออกจาก cmux หรือออกจากระบบจะตัดการเชื่อมต่อด้วย" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "重新連接" + "value": "3. Bu panele dönün. Onaydan sonra bağlantı otomatik olarak devam eder. Bitirdiğinizde buradan bağlantıyı kesin. cmux’tan çıkmak veya oturumu kapatmak da bağlantıyı keser." + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "3. Поверніться до цієї панелі. Після схвалення з’єднання продовжиться автоматично. Завершивши роботу, від’єднайте його тут. Вихід із cmux або системи також від’єднає з’єднання." } } } }, - "terminalSharing.detached.reattachAsViewer": { + "cloud.vpn.setup.address.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reattach as Viewer" + "value": "Private addresses" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق كمشاهد" + "value": "Private Adressen" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Als Zuschauer erneut verbinden" + "value": "Adresses privées" } }, "es": { "stringUnit": { "state": "translated", - "value": "Volver a conectar como espectador" + "value": "Direcciones privadas" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Se reconnecter en lecture seule" + "value": "プライベートアドレス" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "閲覧者として再接続" + "value": "私有地址" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "私有位址" } }, "ko": { "stringUnit": { "state": "translated", - "value": "보기 전용으로 다시 연결" + "value": "비공개 주소" } }, - "zh-Hans": { + "ar": { "stringUnit": { "state": "translated", - "value": "以查看者身份重新连接" + "value": "العناوين الخاصة" } }, - "zh-Hant": { + "bs": { "stringUnit": { "state": "translated", - "value": "以檢視者身分重新連接" + "value": "Privatne adrese" } - } - } - }, - "terminalSharing.detached.reattachAsViewer.help": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "da": { "stringUnit": { "state": "translated", - "value": "Reattach without changing the terminal size" + "value": "Private adresser" } }, - "ar": { + "it": { "stringUnit": { "state": "translated", - "value": "إعادة الإرفاق دون تغيير حجم الطرفية" + "value": "Indirizzi privati" } }, - "de": { + "km": { "stringUnit": { "state": "translated", - "value": "Erneut verbinden, ohne die Terminalgröße zu ändern" + "value": "អាសយដ្ឋានឯកជន" } }, - "es": { + "nb": { "stringUnit": { "state": "translated", - "value": "Volver a conectar sin cambiar el tamaño de la terminal" + "value": "Private adresser" } }, - "fr": { + "pl": { "stringUnit": { "state": "translated", - "value": "Se reconnecter sans modifier la taille du terminal" + "value": "Prywatne adresy" } }, - "ja": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "ターミナルサイズを変えずに再接続" + "value": "Endereços privados" } }, - "ko": { + "ru": { "stringUnit": { "state": "translated", - "value": "터미널 크기를 바꾸지 않고 다시 연결" + "value": "Частные адреса" } }, - "zh-Hans": { + "th": { "stringUnit": { "state": "translated", - "value": "重新连接但不更改终端大小" + "value": "ที่อยู่ส่วนตัว" } }, - "zh-Hant": { + "tr": { "stringUnit": { "state": "translated", - "value": "重新連接但不變更終端機大小" + "value": "Özel adresler" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Приватні адреси" } } } }, - "terminalSharing.detached.someone": { + "cloud.vpn.setup.openSettings": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Someone" + "value": "Open System Settings" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "شخص ما" + "value": "Systemeinstellungen öffnen" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Jemand" + "value": "Ouvrir Réglages Système" } }, "es": { "stringUnit": { "state": "translated", - "value": "Alguien" + "value": "Abrir Ajustes del Sistema" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Quelqu’un" + "value": "システム設定を開く" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "誰か" + "value": "打开系统设置" } }, - "ko": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "누군가" + "value": "打開系統設定" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "시스템 설정 열기" } }, - "zh-Hant": { + "ar": { "stringUnit": { "state": "translated", - "value": "有人" + "value": "فتح إعدادات النظام" } - } - } - }, - "terminalSharing.detached.superseded": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Another window of this Mac replaced this one at %@." + "value": "Otvori Postavke sistema" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "استبدلت نافذة أخرى على جهاز Mac هذا هذه النافذة في %@." + "value": "Åbn Systemindstillinger" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Ein anderes Fenster dieses Macs hat dieses um %@ ersetzt." + "value": "Apri Impostazioni di Sistema" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Otra ventana de este Mac reemplazó a esta a las %@." + "value": "បើកការកំណត់ប្រព័ន្ធ" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Une autre fenêtre de ce Mac a remplacé celle-ci à %@." + "value": "Åpne Systeminnstillinger" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "このMacの別のウィンドウが %@ にこのウィンドウを置き換えました。" + "value": "Otwórz Ustawienia systemowe" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "이 Mac의 다른 창이 %@에 이 창을 대체했습니다." + "value": "Abrir Ajustes do Sistema" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "这台 Mac 的另一个窗口已于 %@ 替换此窗口。" + "value": "Открыть системные настройки" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "這台 Mac 的另一個視窗已於 %@ 取代此視窗。" + "value": "เปิดการตั้งค่าระบบ" } - } - } - }, - "terminalSharing.participant.personDevice": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "tr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Sistem Ayarlarını aç" } }, - "ja": { + "uk": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Відкрити Системні параметри" } } } }, - "terminalSharing.device.browser": { - "extractionState": "manual", + "settings.app.accentColor.custom": { "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Browser" - } - }, "ar": { "stringUnit": { "state": "translated", - "value": "المتصفح" + "value": "مخصص" } }, - "de": { + "bs": { "stringUnit": { "state": "translated", - "value": "Browser" + "value": "Prilagođeno" } }, - "es": { + "da": { "stringUnit": { "state": "translated", - "value": "Navegador" + "value": "Tilpasset" } }, - "fr": { + "de": { "stringUnit": { "state": "translated", - "value": "Navigateur" + "value": "Benutzerdefiniert" } }, - "ja": { + "en": { "stringUnit": { "state": "translated", - "value": "ブラウザ" + "value": "Custom" } }, - "ko": { + "es": { "stringUnit": { "state": "translated", - "value": "브라우저" + "value": "Personalizado" } }, - "zh-Hans": { + "fr": { "stringUnit": { "state": "translated", - "value": "浏览器" + "value": "Personnalisée" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "瀏覽器" - } - } - } - }, - "terminalSharing.device.ipad": { - "extractionState": "manual", - "localizations": { - "en": { + "it": { "stringUnit": { "state": "translated", - "value": "iPad" + "value": "Personalizzato" } }, "ja": { "stringUnit": { "state": "translated", - "value": "iPad" - } - } - } - }, - "terminalSharing.device.iphone": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "iPhone" + "value": "カスタム" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "iPhone" - } - } - } - }, - "terminalSharing.device.mac": { - "extractionState": "manual", - "localizations": { - "en": { + "ko": { "stringUnit": { "state": "translated", - "value": "Mac" + "value": "사용자 지정" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Mac" - } - } - } - }, - "terminalSharing.device.tui": { - "extractionState": "manual", - "localizations": { - "en": { + "nb": { "stringUnit": { "state": "translated", - "value": "Terminal client" + "value": "Egendefinert" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "عميل طرفية" + "value": "Niestandardowy" } }, - "de": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Terminal-Client" + "value": "Personalizado" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Cliente de terminal" + "value": "Пользовательский" } }, - "fr": { + "th": { "stringUnit": { "state": "translated", - "value": "Client terminal" + "value": "กำหนดเอง" } }, - "ja": { + "tr": { "stringUnit": { "state": "translated", - "value": "ターミナルクライアント" + "value": "Özel" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "터미널 클라이언트" + "value": "Власний" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "终端客户端" + "value": "自定义" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "終端機用戶端" + "value": "自訂" } } } }, - "terminalSharing.device.unknown": { + "devices.incoming.confirm.enable": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Device" + "value": "Make Discoverable" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جهاز" + "value": "جعل الجهاز قابلاً للاكتشاف" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gerät" + "value": "Auffindbar machen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dispositivo" + "value": "Hacer detectable" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Appareil" + "value": "Rendre détectable" } }, "ja": { "stringUnit": { "state": "translated", - "value": "デバイス" + "value": "検出可能にする" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기기" + "value": "검색 허용" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设备" + "value": "允许发现" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "裝置" + "value": "允許探索" } - } - } - }, - "terminalSharing.owner.held": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Held size" + "value": "Učini dostupnim" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "حجم محتفظ به" + "value": "Gør synlig" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Beibehaltene Größe" + "value": "Rendi individuabile" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Tamaño conservado" + "value": "ធ្វើឲ្យអាចរកឃើញ" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Taille conservée" + "value": "Gjør denne Mac-en synlig" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "保持されたサイズ" + "value": "Włącz wykrywanie" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "유지된 크기" + "value": "Tornar detectável" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "保留的大小" + "value": "Сделать доступным для обнаружения" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "保留的大小" + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Keşfedilebilir yap" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Зробити цей Mac видимим" } } } }, - "terminalSharing.owner.largest": { + "devices.incoming.confirm.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Largest window" + "value": "Other Macs signed in to your cmux account may discover this Mac and connect to its workspaces. Do you want to continue?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أكبر نافذة" + "value": "قد تكتشف أجهزة Mac الأخرى التي سجّلت الدخول إلى حساب cmux هذا الـ Mac وتتصل بمساحات العمل فيه. هل تريد المتابعة؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Größtes Fenster" + "value": "Andere Macs, die bei deinem cmux-Konto angemeldet sind, können diesen Mac finden und sich mit seinen Arbeitsbereichen verbinden. Möchtest du fortfahren?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana más grande" + "value": "Otros Mac que hayan iniciado sesión en tu cuenta de cmux podrán descubrir este Mac y conectarse a sus espacios de trabajo. ¿Quieres continuar?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Plus grande fenêtre" + "value": "Les autres Mac connectés à votre compte cmux pourront détecter ce Mac et se connecter à ses espaces de travail. Voulez-vous continuer ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最大のウィンドウ" + "value": "cmuxアカウントにサインインしているほかのMacから、このMacが検出され、ワークスペースに接続されることがあります。続けますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가장 큰 창" + "value": "cmux 계정에 로그인한 다른 Mac에서 이 Mac을 검색하고 작업 공간에 연결할 수 있습니다. 계속하시겠습니까?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最大的窗口" + "value": "登录你 cmux 帐户的其他 Mac 可能会发现此 Mac 并连接到其工作区。要继续吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最大的視窗" + "value": "登入您 cmux 帳戶的其他 Mac 可能會探索此 Mac 並連線至其工作區。要繼續嗎?" } - } - } - }, - "terminalSharing.owner.shared": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "Shared size" + "value": "Drugi Mac računari prijavljeni na vaš cmux nalog možda će otkriti ovaj Mac i povezati se s njegovim radnim prostorima. Želite li nastaviti?" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "حجم مشترك" + "value": "Andre Mac-computere, der er logget ind på din cmux-konto, kan muligvis finde denne Mac og oprette forbindelse til dens arbejdsområder. Vil du fortsætte?" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Gemeinsame Größe" + "value": "Gli altri Mac che hanno effettuato l’accesso al tuo account cmux potrebbero rilevare questo Mac e connettersi ai suoi spazi di lavoro. Vuoi continuare?" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Tamaño compartido" + "value": "Mac ផ្សេងទៀតដែលបានចូលគណនី cmux របស់អ្នក អាចរកឃើញ Mac នេះ និងភ្ជាប់ទៅកាន់ workspace របស់វា។ តើអ្នកចង់បន្តឬទេ?" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Taille partagée" + "value": "Andre Mac-maskiner som er logget på cmux-kontoen din, kan finne denne Mac-en og koble til arbeidsområdene. Vil du fortsette?" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "共有サイズ" + "value": "Inne Maki zalogowane na Twoje konto cmux mogą wykryć tego Maca i połączyć się z jego obszarami roboczymi. Czy chcesz kontynuować?" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "공유 크기" + "value": "Outros Macs conectados à sua conta cmux poderão descobrir este Mac e se conectar aos seus espaços de trabalho. Deseja continuar?" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "共享大小" + "value": "Другие Mac, вошедшие в вашу учётную запись cmux, могут обнаружить этот Mac и подключиться к его рабочим пространствам. Продолжить?" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "共用大小" + "value": "Mac เครื่องอื่นที่ลงชื่อเข้าใช้บัญชี cmux ของคุณอาจค้นพบ Mac เครื่องนี้และเชื่อมต่อกับพื้นที่ทำงานของเครื่องนี้ คุณต้องการดำเนินการต่อหรือไม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "cmux hesabınızda oturum açmış diğer Mac’ler bu Mac’i keşfedebilir ve çalışma alanlarına bağlanabilir. Devam etmek istiyor musunuz?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Інші Mac, на яких виконано вхід у ваш обліковий запис cmux, можуть виявити цей Mac і підключитися до його робочих просторів. Продовжити?" } } } }, - "terminalSharing.owner.smallest": { + "devices.incoming.confirm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fits everyone" + "value": "Make this Mac discoverable?" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يناسب الجميع" + "value": "هل تريد جعل جهاز Mac هذا قابلاً للاكتشاف؟" } }, "de": { "stringUnit": { "state": "translated", - "value": "Passt für alle" + "value": "Diesen Mac auffindbar machen?" } }, "es": { "stringUnit": { "state": "translated", - "value": "Se ajusta a todos" + "value": "¿Hacer que este Mac sea detectable?" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Convient à tous" + "value": "Rendre ce Mac détectable ?" } }, "ja": { "stringUnit": { "state": "translated", - "value": "全員に合わせる" + "value": "このMacを検出可能にしますか?" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모두에게 맞춤" + "value": "이 Mac을 검색 가능하게 할까요?" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "适合所有人" + "value": "允许发现此 Mac 吗?" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "符合所有人" + "value": "要允許探索此 Mac 嗎?" } - } - } - }, - "terminalSharing.participant.thisMac": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "bs": { "stringUnit": { "state": "translated", - "value": "This Mac" + "value": "Učiniti ovaj Mac dostupnim?" } }, - "ar": { + "da": { "stringUnit": { "state": "translated", - "value": "جهاز Mac هذا" + "value": "Gør denne Mac synlig?" } }, - "de": { + "it": { "stringUnit": { "state": "translated", - "value": "Dieser Mac" + "value": "Rendere individuabile questo Mac?" } }, - "es": { + "km": { "stringUnit": { "state": "translated", - "value": "Este Mac" + "value": "ធ្វើឲ្យ Mac នេះអាចរកឃើញ?" } }, - "fr": { + "nb": { "stringUnit": { "state": "translated", - "value": "Ce Mac" + "value": "Gjøre denne Mac-en synlig?" } }, - "ja": { + "pl": { "stringUnit": { "state": "translated", - "value": "このMac" + "value": "Uwidocznić tego Maca?" } }, - "ko": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "이 Mac" + "value": "Tornar este Mac detectável?" } }, - "zh-Hans": { + "ru": { "stringUnit": { "state": "translated", - "value": "这台 Mac" + "value": "Сделать этот Mac доступным для обнаружения?" } }, - "zh-Hant": { + "th": { "stringUnit": { "state": "translated", - "value": "這台 Mac" + "value": "ทำให้ Mac เครื่องนี้ค้นพบได้หรือไม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Bu Mac keşfedilebilir yapılsın mı?" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Зробити цей Mac доступним для виявлення?" } } } }, - "terminalSharing.owner.possessiveDevice": { + "cloudTree.device.status.connecting": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@'s %2$@" + "value": "Connecting…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "جارٍ الاتصال…" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Wird verbunden…" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Conectando…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ · %2$@" + "value": "Connexion…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@の%2$@" + "value": "接続中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@의 %2$@" + "value": "연결 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@的%2$@" + "value": "正在连接…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@的%2$@" + "value": "正在連線…" } } } }, - "terminalSharing.owner.fixedShort": { + "cloud.teamPicker.createSheet.create": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "Create" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "إنشاء" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "Erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "Crear" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fixe" + "value": "Créer" } }, "ja": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "고정" + "value": "만들기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "创建" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "建立" } } } }, - "terminalSharing.tab.tooltip": { + "cloud.teamPicker.createSheet.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size set by %1$@ · %2$@" + "value": "Create Team" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحجم يحدده %1$@ · %2$@" + "value": "إنشاء فريق" } }, "de": { "stringUnit": { "state": "translated", - "value": "Größe festgelegt von %1$@ · %2$@" + "value": "Team erstellen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño definido por %1$@ · %2$@" + "value": "Crear equipo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille définie par %1$@ · %2$@" + "value": "Créer une équipe" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@がサイズを設定 · %2$@" + "value": "チームを作成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기 설정: %1$@ · %2$@" + "value": "팀 만들기" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尺寸由%1$@设定 · %2$@" + "value": "创建团队" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尺寸由%1$@設定 · %2$@" + "value": "建立團隊" } } } }, - "terminalSharing.panel.sizeLabel": { + "cloud.teamPicker.createTeam": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Size" + "value": "Create Team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحجم" + "value": "إنشاء فريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Größe" + "value": "Team erstellen…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tamaño" + "value": "Crear equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Taille" + "value": "Créer une équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイズ" + "value": "チームを作成…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기" + "value": "팀 만들기…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "尺寸" + "value": "创建团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "尺寸" + "value": "建立團隊…" } } } }, - "terminalSharing.sizeMode.latest": { + "cloud.teamPicker.switching": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Follow Latest" + "value": "Switching teams…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اتباع الأحدث" + "value": "جارٍ تبديل الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Letzter Eingabe folgen" + "value": "Team wird gewechselt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Seguir la última entrada" + "value": "Cambiando de equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Suivre la dernière saisie" + "value": "Changement d’équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "最新の入力に合わせる" + "value": "チームを切り替え中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "최근 입력 따르기" + "value": "팀 전환 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "跟随最新输入" + "value": "正在切换团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "跟隨最新輸入" + "value": "正在切換團隊…" } } } }, - "terminalSharing.sizeMode.smallest": { + "cloud.teamPicker.creating": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fit Everyone" + "value": "Creating team…" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ملاءمة الجميع" + "value": "جارٍ إنشاء الفريق…" } }, "de": { "stringUnit": { "state": "translated", - "value": "Allen anpassen" + "value": "Team wird erstellt…" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ajustar a todos" + "value": "Creando equipo…" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adapter à tous" + "value": "Création de l’équipe…" } }, "ja": { "stringUnit": { "state": "translated", - "value": "全員に合わせる" + "value": "チームを作成中…" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모두에게 맞추기" + "value": "팀 만드는 중…" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "适合所有人" + "value": "正在创建团队…" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "適合所有人" + "value": "正在建立團隊…" } } } }, - "terminalSharing.sizeMode.largest": { + "socket.authTeam.busy": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Largest Window" + "value": "Another team change is in progress. Try again when it finishes." } }, "ar": { "stringUnit": { "state": "translated", - "value": "أكبر نافذة" + "value": "هناك تغيير آخر في الفريق قيد التنفيذ. حاول مرة أخرى عند انتهائه." } }, "de": { "stringUnit": { "state": "translated", - "value": "Größtes Fenster" + "value": "Eine andere Teamänderung läuft noch. Versuche es erneut, wenn sie abgeschlossen ist." } }, "es": { "stringUnit": { "state": "translated", - "value": "Ventana más grande" + "value": "Hay otro cambio de equipo en curso. Inténtalo de nuevo cuando termine." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Plus grande fenêtre" + "value": "Une autre modification d’équipe est en cours. Réessayez une fois terminée." } }, "ja": { "stringUnit": { "state": "translated", - "value": "最大のウインドウ" + "value": "別のチーム変更を処理中です。完了してからもう一度お試しください。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가장 큰 윈도우" + "value": "다른 팀 변경이 진행 중입니다. 완료된 후 다시 시도하세요." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "最大窗口" + "value": "另一项团队更改正在进行中,请在完成后重试。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "最大視窗" + "value": "另一項團隊變更正在進行中,請在完成後再試一次。" } } } }, - "terminalSharing.sizeMode.priority": { + "cloud.teamPicker.createSheet.message": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Priority" + "value": "The new team becomes your active team." } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأولوية" + "value": "يصبح الفريق الجديد فريقك النشط." } }, "de": { "stringUnit": { "state": "translated", - "value": "Priorität" + "value": "Das neue Team wird Ihr aktives Team." } }, "es": { "stringUnit": { "state": "translated", - "value": "Prioridad" + "value": "El nuevo equipo pasa a ser su equipo activo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Priorité" + "value": "La nouvelle équipe devient votre équipe active." } }, "ja": { "stringUnit": { "state": "translated", - "value": "優先順位" + "value": "新しいチームがアクティブなチームになります。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "우선순위" + "value": "새 팀이 활성 팀이 됩니다." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "优先级" + "value": "新团队将成为你的当前团队。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "優先順序" + "value": "新團隊會成為你使用中的團隊。" } } } }, - "terminalSharing.sizeMode.fixed": { + "settings.app.installUpdatesAutomatically": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "Fixed" + "value": "تثبيت التحديثات تلقائيًا" } }, - "ar": { + "bs": { "stringUnit": { "state": "translated", - "value": "ثابت" + "value": "Automatski instaliraj ažuriranja" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Installer opdateringer automatisk" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fest" + "value": "Updates automatisch installieren" } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "Fijo" + "value": "Install Updates Automatically" } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Fixe" + "value": "Instalar actualizaciones automáticamente" } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "Installer les mises à jour automatiquement" } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "고정" + "value": "Installa aggiornamenti automaticamente" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "アップデートを自動的にインストール" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "固定" + "value": "업데이트 자동 설치" } - } - } - }, - "terminalSharing.panel.setsSize": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "sets size" + "value": "Installer oppdateringer automatisk" } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "يحدد الحجم" + "value": "Instaluj aktualizacje automatycznie" } }, - "de": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "legt Größe fest" + "value": "Instalar atualizações automaticamente" } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "define el tamaño" + "value": "Устанавливать обновления автоматически" } }, - "fr": { + "th": { "stringUnit": { "state": "translated", - "value": "définit la taille" + "value": "ติดตั้งอัปเดตโดยอัตโนมัติ" } }, - "ja": { + "tr": { "stringUnit": { "state": "translated", - "value": "サイズを設定" + "value": "Güncellemeleri otomatik olarak yükle" } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "크기 설정" + "value": "Установлювати оновлення автоматично" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "设定尺寸" + "value": "自动安装更新" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "設定尺寸" + "value": "自動安裝更新" } } } }, - "terminalSharing.panel.notCounted": { + "settings.app.installUpdatesAutomatically.subtitle": { "extractionState": "manual", "localizations": { - "en": { + "ar": { "stringUnit": { "state": "translated", - "value": "not counted" + "value": "تنزيل التحديثات في الخلفية وتثبيتها عندما لا يعمل أي وكيل وتبتعد عن الجهاز لمدة دقيقة. تستأنف مساحات العمل والوكلاء من حيث توقفت." } }, - "ar": { + "bs": { "stringUnit": { "state": "translated", - "value": "غير محتسب" + "value": "Preuzimaj ažuriranja u pozadini i instaliraj ih kada nijedan agent ne radi i kada se udaljiš na minut. Radni prostori i agenti nastavljaju tamo gdje su stali." + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Hent opdateringer i baggrunden, og installer dem, når ingen agent arbejder, og du går fra i et minut. Arbejdsområder og agenter fortsætter, hvor de slap." } }, "de": { "stringUnit": { "state": "translated", - "value": "nicht gezählt" + "value": "Updates im Hintergrund laden und installieren, wenn kein Agent arbeitet und du eine Minute Pause machst. Workspaces und Agenten machen dort weiter, wo sie aufgehört haben." } }, - "es": { + "en": { "stringUnit": { "state": "translated", - "value": "no cuenta" + "value": "Download updates in the background and install them when no agent is working and you step away for a minute. Workspaces and agents resume where they left off." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "non compté" + "value": "Descarga las actualizaciones en segundo plano y las instala cuando ningún agente está trabajando y te ausentas un minuto. Los espacios de trabajo y los agentes continúan donde se quedaron." } }, - "ja": { + "fr": { "stringUnit": { "state": "translated", - "value": "カウント対象外" + "value": "Télécharger les mises à jour en arrière-plan et les installer quand aucun agent ne travaille et que vous vous absentez une minute. Les espaces de travail et les agents reprennent là où ils en étaient." } }, - "ko": { + "it": { "stringUnit": { "state": "translated", - "value": "계산 안 됨" + "value": "Scarica gli aggiornamenti in background e installali quando nessun agente è al lavoro e ti allontani per un minuto. Spazi di lavoro e agenti riprendono da dove si erano interrotti." } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "不计入" + "value": "アップデートをバックグラウンドでダウンロードし、作業中のエージェントがなく 1 分間席を離れたときにインストールします。ワークスペースとエージェントは中断したところから再開します。" } }, - "zh-Hant": { + "ko": { "stringUnit": { "state": "translated", - "value": "不計入" + "value": "업데이트를 백그라운드에서 다운로드하고, 작업 중인 에이전트가 없고 1분 동안 자리를 비우면 설치합니다. 워크스페이스와 에이전트는 중단된 지점에서 재개됩니다." } - } - } - }, - "terminalSharing.panel.rowOptions": { - "extractionState": "manual", - "localizations": { - "en": { + }, + "nb": { "stringUnit": { "state": "translated", - "value": "Options for %@" + "value": "Last ned oppdateringer i bakgrunnen og installer dem når ingen agent arbeider og du går fra i ett minutt. Arbeidsområder og agenter fortsetter der de slapp." } }, - "ar": { + "pl": { "stringUnit": { "state": "translated", - "value": "خيارات %@" + "value": "Pobieraj aktualizacje w tle i instaluj je, gdy żaden agent nie pracuje, a Ty odejdziesz na minutę. Obszary robocze i agenci wznowią pracę tam, gdzie ją przerwali." } }, - "de": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Optionen für %@" + "value": "Baixar atualizações em segundo plano e instalá-las quando nenhum agente estiver trabalhando e você se afastar por um minuto. Espaços de trabalho e agentes continuam de onde pararam." } }, - "es": { + "ru": { "stringUnit": { "state": "translated", - "value": "Opciones de %@" + "value": "Загружать обновления в фоне и устанавливать их, когда ни один агент не работает и вы отходите на минуту. Рабочие пространства и агенты продолжат с того места, где остановились." } }, - "fr": { + "th": { "stringUnit": { "state": "translated", - "value": "Options pour %@" + "value": "ดาวน์โหลดอัปเดตในเบื้องหลังและติดตั้งเมื่อไม่มีเอเจนต์ทำงานอยู่และคุณไม่ได้ใช้งานเครื่องเป็นเวลาหนึ่งนาที พื้นที่ทำงานและเอเจนต์จะทำงานต่อจากจุดที่ค้างไว้" } }, - "ja": { + "tr": { "stringUnit": { "state": "translated", - "value": "%@のオプション" + "value": "Güncellemeleri arka planda indir ve hiçbir ajan çalışmıyorken bir dakika uzaklaştığında yükle. Çalışma alanları ve ajanlar kaldıkları yerden devam eder." } }, - "ko": { + "uk": { "stringUnit": { "state": "translated", - "value": "%@ 옵션" + "value": "Завантажувати оновлення у фоні та встановлювати їх, коли жоден агент не працює, а ви відходите на хвилину. Робочі простори й агенти продовжать з того місця, де зупинилися." } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%@的选项" + "value": "在后台下载更新,并在没有代理工作且你离开一分钟时安装。工作区和代理会从中断处继续。" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%@的選項" + "value": "在背景下載更新,並在沒有代理運作且你離開一分鐘時安裝。工作區與代理會從中斷處繼續。" } } } }, - "terminalSharing.panel.disconnectOthersButton": { + "update.autoInstall.waitingQuiet": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect Others" + "value": "Installs the next time you step away for a minute. Workspaces and agents resume where they left off." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "قطع اتصال الآخرين" + "value": "Wird installiert, wenn du das nächste Mal eine Minute Pause machst. Workspaces und Agenten machen dort weiter, wo sie aufgehört haben." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Andere trennen" + "value": "S’installe la prochaine fois que vous vous absentez une minute. Les espaces de travail et les agents reprennent là où ils en étaient." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Desconectar a los demás" + "value": "يتم التثبيت في المرة التالية التي تبتعد فيها عن الجهاز لمدة دقيقة. تستأنف مساحات العمل والوكلاء من حيث توقفت." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Déconnecter les autres" + "value": "Se instala la próxima vez que te ausentes un minuto. Los espacios de trabajo y los agentes continúan donde se quedaron." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "他の接続を切断" + "value": "將在你下次離開一分鐘時安裝。工作區與代理會從中斷處繼續。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "다른 연결 끊기" + "value": "将在你下次离开一分钟时安装。工作区和代理会从中断处继续。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "断开其他连接" + "value": "다음에 1분 동안 자리를 비우면 설치합니다. 워크스페이스와 에이전트는 중단된 지점에서 재개됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "中斷其他連線" + "value": "次に 1 分間席を離れたときにインストールします。ワークスペースとエージェントは中断したところから再開します。" } } } }, - "terminalSharing.detached.titleShort": { + "update.autoInstall.waitingRisky": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Detached" + "value": "Installs after these finish and you step away." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "تم الفصل" + "value": "Wird installiert, sobald diese fertig sind und du eine Pause machst." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Getrennt" + "value": "S’installe quand ceux-ci ont terminé et que vous vous absentez." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "Desconectado" + "value": "يتم التثبيت بعد انتهاء هذه العناصر وابتعادك عن الجهاز." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "Détaché" + "value": "Se instala cuando terminen estos y te ausentes." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "切断されました" + "value": "將在這些完成且你離開後安裝。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "분리됨" + "value": "将在这些完成且你离开后安装。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "已分离" + "value": "이 항목들이 끝나고 자리를 비우면 설치합니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "已分離" + "value": "これらが終了し、席を離れるとインストールします。" } } } }, - "terminalSharing.detached.byMessageShort": { + "update.relaunch.confirmRisky": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%1$@ disconnected this Mac at %2$@." + "value": "Relaunching now stops what these are running." } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "قطع %1$@ اتصال هذا الـMac في %2$@." + "value": "Ein Neustart jetzt beendet, was diese gerade ausführen." } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ hat diesen Mac um %2$@ getrennt." + "value": "Relancer maintenant arrête ce qu’ils exécutent." } }, - "es": { + "ar": { "stringUnit": { "state": "translated", - "value": "%1$@ desconectó este Mac a las %2$@." + "value": "تؤدي إعادة التشغيل الآن إلى إيقاف ما تشغّله هذه العناصر." } }, - "fr": { + "es": { "stringUnit": { "state": "translated", - "value": "%1$@ a déconnecté ce Mac à %2$@." + "value": "Reiniciar ahora detiene lo que estos están ejecutando." } }, - "ja": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@が%2$@にこのMacを切断しました。" + "value": "現在重新啟動會停止這些項目正在執行的工作。" } }, - "ko": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@이(가) %2$@에 이 Mac의 연결을 끊었습니다." + "value": "现在重新启动会停止这些项目正在运行的工作。" } }, - "zh-Hans": { + "ko": { "stringUnit": { "state": "translated", - "value": "%1$@于%2$@断开了这台Mac的连接。" + "value": "지금 재실행하면 이 항목들이 실행 중인 작업이 중지됩니다." } }, - "zh-Hant": { + "ja": { "stringUnit": { "state": "translated", - "value": "%1$@於%2$@中斷了這台Mac的連線。" + "value": "今すぐ再起動すると、これらが実行中の処理は停止します。" } } } }, - "terminalSharing.chip.hiddenColumns": { + "update.relaunch.resumesMidTask": { "extractionState": "manual", "localizations": { "en": { @@ -584068,13 +583056,55 @@ "one": { "stringUnit": { "state": "translated", - "value": "%ld col hidden" + "value": "%lld agent will be resumed mid-task." } }, "other": { "stringUnit": { "state": "translated", - "value": "%ld cols hidden" + "value": "%lld agents will be resumed mid-task." + } + } + } + } + }, + "de": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld Agent wird mitten in der Aufgabe fortgesetzt." + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld Agenten werden mitten in der Aufgabe fortgesetzt." + } + } + } + } + }, + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld agent reprendra en cours de tâche." + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%lld d’agents reprendront en cours de tâche." + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld agents reprendront en cours de tâche." } } } @@ -584086,37 +583116,132 @@ "zero": { "stringUnit": { "state": "translated", - "value": "لا أعمدة مخفية (%ld)" + "value": "سيُستأنف الوكلاء (%lld) من منتصف المهمة." } }, "one": { "stringUnit": { "state": "translated", - "value": "عمود واحد مخفي (%ld)" + "value": "سيُستأنف وكيل واحد (%lld) من منتصف المهمة." } }, "two": { "stringUnit": { "state": "translated", - "value": "عمودان مخفيان (%ld)" + "value": "سيُستأنف وكيلان (%lld) من منتصف المهمة." } }, "few": { "stringUnit": { "state": "translated", - "value": "%ld أعمدة مخفية" + "value": "سيُستأنف %lld وكلاء من منتصف المهمة." } }, "many": { "stringUnit": { "state": "translated", - "value": "%ld عمودًا مخفيًا" + "value": "سيُستأنف %lld وكيلًا من منتصف المهمة." } }, "other": { "stringUnit": { "state": "translated", - "value": "%ld عمود مخفي" + "value": "سيُستأنف %lld وكيل من منتصف المهمة." + } + } + } + } + }, + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld agente se reanudará a mitad de la tarea." + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%lld de agentes se reanudarán a mitad de la tarea." + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld agentes se reanudarán a mitad de la tarea." + } + } + } + } + }, + "zh-Hant": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld 個代理將從任務中途繼續。" + } + } + } + } + }, + "zh-Hans": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld 个代理将从任务中途继续。" + } + } + } + } + }, + "ko": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "에이전트 %lld개가 작업 도중부터 재개됩니다." + } + } + } + } + }, + "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld 個のエージェントが作業の途中から再開されます。" + } + } + } + } + } + } + }, + "update.relaunch.runningCommands": { + "extractionState": "manual", + "localizations": { + "en": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld running command" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld running commands" } } } @@ -584128,85 +583253,115 @@ "one": { "stringUnit": { "state": "translated", - "value": "%ld Spalte ausgeblendet" + "value": "%lld laufender Befehl" } }, "other": { "stringUnit": { "state": "translated", - "value": "%ld Spalten ausgeblendet" + "value": "%lld laufende Befehle" } } } } }, - "es": { + "fr": { "variations": { "plural": { "one": { "stringUnit": { "state": "translated", - "value": "%ld columna oculta" + "value": "%lld commande en cours" } }, "many": { "stringUnit": { "state": "translated", - "value": "%ld de columnas ocultas" + "value": "%lld de commandes en cours" } }, "other": { "stringUnit": { "state": "translated", - "value": "%ld columnas ocultas" + "value": "%lld commandes en cours" } } } } }, - "fr": { + "ar": { "variations": { "plural": { + "zero": { + "stringUnit": { + "state": "translated", + "value": "أوامر قيد التشغيل (%lld)" + } + }, "one": { "stringUnit": { "state": "translated", - "value": "%ld colonne masquée" + "value": "أمر واحد قيد التشغيل (%lld)" + } + }, + "two": { + "stringUnit": { + "state": "translated", + "value": "أمران قيد التشغيل (%lld)" + } + }, + "few": { + "stringUnit": { + "state": "translated", + "value": "%lld أوامر قيد التشغيل" } }, "many": { "stringUnit": { "state": "translated", - "value": "%ld de colonnes masquées" + "value": "%lld أمرًا قيد التشغيل" } }, "other": { "stringUnit": { "state": "translated", - "value": "%ld colonnes masquées" + "value": "%lld أمر قيد التشغيل" } } } } }, - "ja": { + "es": { "variations": { "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld comando en ejecución" + } + }, + "many": { + "stringUnit": { + "state": "translated", + "value": "%lld de comandos en ejecución" + } + }, "other": { "stringUnit": { "state": "translated", - "value": "%ld列が非表示" + "value": "%lld comandos en ejecución" } } } } }, - "ko": { + "zh-Hant": { "variations": { "plural": { "other": { "stringUnit": { "state": "translated", - "value": "%ld열 숨겨짐" + "value": "%lld 個執行中的命令" } } } @@ -584218,19 +583373,31 @@ "other": { "stringUnit": { "state": "translated", - "value": "隐藏 %ld 列" + "value": "%lld 个正在运行的命令" } } } } }, - "zh-Hant": { + "ko": { "variations": { "plural": { "other": { "stringUnit": { "state": "translated", - "value": "隱藏 %ld 欄" + "value": "실행 중인 명령 %lld개" + } + } + } + } + }, + "ja": { + "variations": { + "plural": { + "other": { + "stringUnit": { + "state": "translated", + "value": "実行中のコマンド %lld 個" } } } @@ -584238,474 +583405,887 @@ } } }, - "terminalSharing.panel.cancel": { + "update.safety.safe": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Safe" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "إلغاء" + "value": "Sicher" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Abbrechen" + "value": "Sûr" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "آمن" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cancelar" + "value": "Seguro" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Annuler" + "value": "安全" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "安全" } }, "ko": { "stringUnit": { "state": "translated", - "value": "취소" + "value": "안전" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "安全" + } + } + } + }, + "update.safety.care": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Resumes" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Wird fortgesetzt" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Reprend" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يُستأنف" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Se reanuda" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "取消" + "value": "會繼續" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "会继续" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "재개됨" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "再開" } } } }, - "terminalSharing.panel.disconnectOthers.confirm": { + "update.safety.risky": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect all other clients?" + "value": "Risky" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "هل تريد قطع اتصال جميع العملاء الآخرين؟" + "value": "Riskant" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Alle anderen Clients trennen?" + "value": "Risqué" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "خطر" } }, "es": { "stringUnit": { "state": "translated", - "value": "¿Desconectar todos los demás clientes?" + "value": "Arriesgado" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Déconnecter tous les autres clients ?" + "value": "有風險" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "他のすべてのクライアントを切断しますか?" + "value": "有风险" } }, "ko": { "stringUnit": { "state": "translated", - "value": "다른 모든 클라이언트의 연결을 끊을까요?" + "value": "위험" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "要断开其他所有客户端吗?" + "value": "リスクあり" + } + } + } + }, + "update.wait": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Wait" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Warten" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Attendre" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "انتظار" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Esperar" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "要中斷其他所有用戶端的連線嗎?" + "value": "等待" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "等待" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "대기" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "待機" } } } }, - "terminalSharing.panel.disconnectOthers.confirmButton": { + "update.updateWhenFinished": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "Update When These Finish" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "Aktualisieren, wenn diese fertig sind" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "Mettre à jour quand ils auront terminé" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "التحديث عند انتهاء هذه العناصر" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Actualizar cuando terminen" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "在這些完成後更新" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "在这些完成后更新" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 끊기" + "value": "완료되면 업데이트" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "終了後にアップデート" + } + } + } + }, + "update.updateAnyway": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Update Anyway" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Trotzdem aktualisieren" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Mettre à jour quand même" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "التحديث على أي حال" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Actualizar de todos modos" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "仍要更新" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "仍要更新" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "그래도 업데이트" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "それでもアップデート" } } } }, - "terminalSharing.panel.fixedColumns": { + "update.agentActivity.remote": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Columns" + "value": "Keeps running on the remote host" } }, - "ar": { + "de": { "stringUnit": { "state": "translated", - "value": "الأعمدة" + "value": "Läuft auf dem Remote-Host weiter" } }, - "de": { + "fr": { "stringUnit": { "state": "translated", - "value": "Spalten" + "value": "Continue de s’exécuter sur l’hôte distant" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "يستمر في العمل على المضيف البعيد" } }, "es": { "stringUnit": { "state": "translated", - "value": "Columnas" + "value": "Sigue ejecutándose en el host remoto" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Colonnes" + "value": "在遠端主機上持續執行" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "列" + "value": "在远程主机上继续运行" } }, "ko": { "stringUnit": { "state": "translated", - "value": "열" + "value": "원격 호스트에서 계속 실행됨" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "列数" + "value": "リモートホストで実行を継続" + } + } + } + }, + "update.agentActivity.needsInput": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Waiting for your answer" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Wartet auf deine Antwort" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "En attente de votre réponse" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "في انتظار إجابتك" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Esperando tu respuesta" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "欄數" + "value": "正在等待你的回答" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "正在等待你的回答" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "답변을 기다리는 중" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回答を待っています" } } } }, - "terminalSharing.panel.fixedRows": { + "update.agentActivity.working": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Rows" + "value": "Working" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Arbeitet" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "En cours" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الصفوف" + "value": "قيد العمل" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Trabajando" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "處理中" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "处理中" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "작업 중" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "作業中" + } + } + } + }, + "update.agentActivity.idle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Idle" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zeilen" + "value": "Inaktiv" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Inactif" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "خامل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Filas" + "value": "Inactivo" } }, - "fr": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Lignes" + "value": "閒置" } }, - "ja": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "行" + "value": "空闲" } }, "ko": { "stringUnit": { "state": "translated", - "value": "행" + "value": "유휴" } }, - "zh-Hans": { + "ja": { "stringUnit": { "state": "translated", - "value": "行数" + "value": "アイドル" + } + } + } + }, + "settings.search.alias.section.themes": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent design designs farbschema farben palette hell dunkel akzent" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent thème thèmes couleurs palette clair sombre accent" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent سمة سمات ألوان لوحة فاتح داكن تمييز" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent tema temas colores paleta claro oscuro acento" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "列數" + "value": "theme themes color scheme colors palette ghostty light dark mode accent 主題 配色 顏色 調色盤 淺色 深色 強調色" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent 主题 配色 颜色 调色板 浅色 深色 强调色" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent 테마 색상 팔레트 라이트 다크 강조색" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "theme themes color scheme colors palette ghostty light dark mode accent テーマ 配色 カラー パレット ライト ダーク アクセント" } } } }, - "terminalSharing.panel.unavailable": { + "settings.section.themes": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "This terminal is not shared." + "value": "Themes" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هذه الطرفية غير مشتركة." + "value": "السمات" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dieses Terminal wird nicht geteilt." + "value": "Designs" } }, "es": { "stringUnit": { "state": "translated", - "value": "Esta terminal no está compartida." + "value": "Temas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ce terminal n’est pas partagé." + "value": "Thèmes" } }, "ja": { "stringUnit": { "state": "translated", - "value": "このターミナルは共有されていません。" + "value": "テーマ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이 터미널은 공유되지 않았습니다." + "value": "테마" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "此终端未共享。" + "value": "主题" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "此終端機未共用。" + "value": "主題" } } } }, - "terminalSharing.panel.counts": { + "settings.terminal.theme": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Counts toward size" + "value": "Terminal Theme" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يُحتسب في الحجم" + "value": "سمة الطرفية" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zählt für die Größe" + "value": "Terminal-Design" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cuenta para el tamaño" + "value": "Tema del terminal" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Compte pour la taille" + "value": "Thème du terminal" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サイズに反映" + "value": "ターミナルテーマ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "크기에 반영" + "value": "터미널 테마" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "计入大小" + "value": "终端主题" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "計入大小" + "value": "終端機主題" } } } }, - "terminalSharing.panel.disconnect": { + "shortcut.diffViewerNextHunk.label": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Disconnect" + "value": "Diff Viewer: Next Hunk" } }, - "ar": { + "ja": { "stringUnit": { "state": "translated", - "value": "قطع الاتصال" + "value": "差分ビューア: 次のハンク" } }, - "de": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Trennen" + "value": "差异查看器:下一个块" } }, - "es": { + "de": { "stringUnit": { "state": "translated", - "value": "Desconectar" + "value": "Diff-Viewer: Nächster Hunk" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Déconnecter" + "value": "Visionneuse de diff : Bloc suivant" } }, - "ja": { + "ar": { "stringUnit": { "state": "translated", - "value": "切断" + "value": "عارض الفروق: المقطع التالي" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Visor de diff: Siguiente bloque" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "差異檢視器:下一個區塊" } }, "ko": { "stringUnit": { "state": "translated", - "value": "연결 끊기" + "value": "비교 뷰어: 다음 헝크" + } + } + } + }, + "shortcut.diffViewerPreviousHunk.label": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Diff Viewer: Previous Hunk" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "差分ビューア: 前のハンク" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "断开连接" + "value": "差异查看器:上一个块" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Diff-Viewer: Vorheriger Hunk" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Visionneuse de diff : Bloc précédent" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "عارض الفروق: المقطع السابق" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Visor de diff: Bloque anterior" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "中斷連線" + "value": "差異檢視器:上一個區塊" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "비교 뷰어: 이전 헝크" } } } @@ -586185,6 +585765,131 @@ } } }, + "cloudTree.action.newCloudMachine": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "New Cloud Machine" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "جهاز سحابي جديد" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Neue Cloud-Maschine" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Nueva máquina en la nube" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Nouvelle machine cloud" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "新しいクラウドマシン" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "새 클라우드 머신" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建云主机" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "新增雲端機器" + } + }, + "bs": { + "stringUnit": { + "state": "translated", + "value": "Nova cloud mašina" + } + }, + "da": { + "stringUnit": { + "state": "translated", + "value": "Ny cloud-maskine" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Nuova macchina cloud" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "ម៉ាស៊ីន Cloud ថ្មី" + } + }, + "nb": { + "stringUnit": { + "state": "translated", + "value": "Ny sky-maskin" + } + }, + "pl": { + "stringUnit": { + "state": "translated", + "value": "Nowa maszyna w chmurze" + } + }, + "pt-BR": { + "stringUnit": { + "state": "translated", + "value": "Nova máquina na nuvem" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новая облачная машина" + } + }, + "th": { + "stringUnit": { + "state": "translated", + "value": "เครื่องคลาวด์ใหม่" + } + }, + "tr": { + "stringUnit": { + "state": "translated", + "value": "Yeni bulut makinesi" + } + }, + "uk": { + "stringUnit": { + "state": "translated", + "value": "Нова хмарна машина" + } + } + } + }, "terminalContextMenu.copyLink": { "extractionState": "manual", "localizations": { @@ -586362,6 +586067,360 @@ } } }, + "cli.restore.error.routedLauncherNotFound": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "restore: this session was started with '%1$@ claude proxy', but '%1$@' is not on PATH in this shell. Add it to PATH, then retry." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "restore: このセッションは「%1$@ claude proxy」で起動されましたが、このシェルの PATH に「%1$@」がありません。PATH に追加してから、再試行してください。" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "restore:此会话是通过“%1$@ claude proxy”启动的,但此 shell 的 PATH 中没有“%1$@”。请将其添加到 PATH,然后重试。" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "restore: Diese Sitzung wurde mit „%1$@ claude proxy“ gestartet, aber „%1$@“ ist in dieser Shell nicht im PATH. Fügen Sie es zum PATH hinzu und versuchen Sie es dann erneut." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "restore : cette session a été démarrée avec « %1$@ claude proxy », mais « %1$@ » n'est pas dans le PATH de ce shell. Ajoutez-le au PATH, puis réessayez." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "restore: بدأت هذه الجلسة باستخدام '%1$@ claude proxy'، لكن '%1$@' غير موجود في PATH في هذه الصدفة. أضفه إلى PATH، ثم أعد المحاولة." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "restore: esta sesión se inició con '%1$@ claude proxy', pero '%1$@' no está en el PATH de este shell. Agréguelo al PATH y vuelva a intentarlo." + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "restore:此工作階段是以「%1$@ claude proxy」啟動的,但此 shell 的 PATH 中沒有「%1$@」。請將其加入 PATH,然後重試。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "restore: 이 세션은 '%1$@ claude proxy'로 시작되었지만 이 셸의 PATH에 '%1$@'이(가) 없습니다. PATH에 추가한 후 다시 시도하십시오." + } + } + } + }, + "settings.terminal.textEditingCommandMovesByWord": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Command Moves by Word" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "Command ينقل حسب الكلمة" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Befehlstaste bewegt wortweise" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Comando mueve por palabra" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Commande déplace par mot" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Command で単語単位に移動" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Command로 단어 단위 이동" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Command 按词移动" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Command 依字移動" + } + } + } + }, + "settings.terminal.textEditingCommandMovesByWord.subtitleOn": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Command arrow and delete keys move and delete by word, like Option. Control Left and Right Arrow move to the start and end of the line." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب الكلمة، مثل Option. وينقل Control مع السهمين الأيسر والأيمن إلى بداية السطر ونهايته." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht wortweise, wie die Wahltaste. Control mit Links- und Rechtspfeil springt an Anfang und Ende der Zeile." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por palabra, como Opción. Control con las flechas izquierda y derecha va al inicio y al final de la línea." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par mot, comme Option. Contrôle avec les flèches gauche et droite va au début et à la fin de la ligne." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Command と矢印キー・削除キーで、Option と同じく単語単位に移動・削除します。Control と左右矢印キーで行頭・行末に移動します。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Command 화살표 및 삭제 키가 Option처럼 단어 단위로 이동하고 삭제합니다. Control 왼쪽 및 오른쪽 화살표는 줄의 시작과 끝으로 이동합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向键和删除键按词移动和删除,与 Option 相同。Control 加左右方向键移到行首和行尾。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向鍵與刪除鍵會依字移動與刪除,與 Option 相同。Control 加左右方向鍵會移到行首與行尾。" + } + } + } + }, + "settings.terminal.textEditingCommandMovesByWord.subtitleOff": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Command arrow and delete keys move and delete by line, as in macOS text fields." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تنقل مفاتيح الأسهم والحذف مع Command وتحذف حسب السطر، كما في حقول النص في macOS." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Befehlstaste mit Pfeil- und Löschtasten bewegt und löscht zeilenweise, wie in macOS-Textfeldern." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Las flechas y la tecla Eliminar con Comando mueven y borran por línea, como en los campos de texto de macOS." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les flèches et la touche Supprimer avec Commande déplacent et suppriment par ligne, comme dans les champs de texte de macOS." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Command と矢印キー・削除キーで、macOS のテキストフィールドと同じく行単位に移動・削除します。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Command 화살표 및 삭제 키가 macOS 텍스트 필드처럼 줄 단위로 이동하고 삭제합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向键和删除键按行移动和删除,与 macOS 文本框相同。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Command 加方向鍵與刪除鍵會依行移動與刪除,與 macOS 文字欄位相同。" + } + } + } + }, + "settings.terminal.textEditingGesturesInFullScreenApps": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Text Editing Gestures in Full-Screen Apps" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "إيماءات تحرير النص في التطبيقات بملء الشاشة" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Textbearbeitungsgesten in Vollbild-Apps" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Gestos de edición de texto en apps a pantalla completa" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Gestes d’édition de texte dans les apps plein écran" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "フルスクリーンアプリでのテキスト編集ジェスチャー" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "전체 화면 앱에서 텍스트 편집 제스처" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "全屏应用中的文本编辑手势" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "全螢幕 App 中的文字編輯手勢" + } + } + } + }, + "settings.terminal.textEditingGesturesInFullScreenApps.subtitle": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Gestures also apply while a full-screen app such as vim, less, or tmux is running, so they keep working at a shell inside tmux, screen, or zellij." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "تنطبق الإيماءات أيضًا أثناء تشغيل تطبيق بملء الشاشة مثل vim أو less أو tmux، فتظل تعمل في الصدفة داخل tmux أو screen أو zellij." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Gesten gelten auch, während eine Vollbild-App wie vim, less oder tmux läuft, und funktionieren so weiter an einer Shell in tmux, screen oder zellij." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Los gestos también se aplican mientras se ejecuta una app a pantalla completa como vim, less o tmux, así que siguen funcionando en una shell dentro de tmux, screen o zellij." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Les gestes s’appliquent aussi lorsqu’une app plein écran comme vim, less ou tmux est en cours d’exécution, et continuent donc de fonctionner dans un shell sous tmux, screen ou zellij." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "vim、less、tmux などのフルスクリーンアプリの実行中もジェスチャーが有効になるため、tmux、screen、zellij 内のシェルでも引き続き使えます。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "vim, less, tmux 같은 전체 화면 앱이 실행 중일 때도 제스처가 적용되므로 tmux, screen, zellij 안의 셸에서도 계속 작동합니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "在 vim、less 或 tmux 等全屏应用运行时手势也会生效,因此在 tmux、screen 或 zellij 中的 shell 里仍可使用。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "在 vim、less 或 tmux 等全螢幕 App 執行時手勢也會生效,因此在 tmux、screen 或 zellij 中的 shell 裡仍可使用。" + } + } + } + }, "command.copyWorkingDirectory.title": { "extractionState": "manual", "localizations": { @@ -588193,6 +588252,242 @@ } } } + }, + "cloud.overlay.accessLost.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "You no longer have access to this machine." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "لم يعد لديك حق الوصول إلى هذا الجهاز." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Sie haben keinen Zugriff mehr auf diese Maschine." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Ya no tienes acceso a esta máquina." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Vous n’avez plus accès à cette machine." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このマシンへのアクセス権がなくなりました。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "더 이상 이 머신에 접근할 수 없습니다." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "你已无法再访问这台机器。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "你已無法再存取這台機器。" + } + } + } + }, + "cloud.overlay.accessLost.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud machine unavailable" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "جهاز Cloud غير متاح" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud-Maschine nicht verfügbar" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Máquina de Cloud no disponible" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Machine Cloud indisponible" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud マシンを利用できません" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud 머신을 사용할 수 없습니다" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cloud 机器不可用" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Cloud 機器無法使用" + } + } + } + }, + "cloud.overlay.signedOut.detail": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sign in to cmux to reconnect this terminal." + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "سجّل الدخول إلى cmux لإعادة توصيل هذه الطرفية." + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Melden Sie sich bei cmux an, um dieses Terminal erneut zu verbinden." + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Inicia sesión en cmux para volver a conectar este terminal." + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Connectez-vous à cmux pour reconnecter ce terminal." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "このターミナルに再接続するには cmux にサインインしてください。" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "이 터미널을 다시 연결하려면 cmux에 로그인하세요." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "登录 cmux 以重新连接此终端。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "登入 cmux 以重新連線此終端機。" + } + } + } + }, + "cloud.overlay.signedOut.title": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cloud session ended" + } + }, + "ar": { + "stringUnit": { + "state": "translated", + "value": "انتهت جلسة Cloud" + } + }, + "de": { + "stringUnit": { + "state": "translated", + "value": "Cloud-Sitzung beendet" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Sesión de Cloud finalizada" + } + }, + "fr": { + "stringUnit": { + "state": "translated", + "value": "Session Cloud terminée" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Cloud セッションが終了しました" + } + }, + "ko": { + "stringUnit": { + "state": "translated", + "value": "Cloud 세션이 종료되었습니다" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Cloud 会话已结束" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "translated", + "value": "Cloud 工作階段已結束" + } + } + } } }, "version": "1.0" diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index 42a9f769b73b..ba5d415ee2c0 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -18049,7 +18049,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent onExecuted?() return true } - case .command, .agent, .workspaceCommand, .workspace: + case .command, .agent, .workspaceCommand, .workspace, .setting: guard let cmuxConfigStore = context.cmuxConfigStore else { return false } @@ -18063,6 +18063,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCent tabManager: context.tabManager, baseCwd: baseCwd, globalConfigPath: cmuxConfigStore.globalConfigPath, + settingPresets: cmuxConfigStore.settingPresets, presentingWindow: preferredWindow, onExecuted: onExecuted ) diff --git a/Sources/CmuxConfig.swift b/Sources/CmuxConfig.swift index 26d6cff30974..77b18d12bab2 100644 --- a/Sources/CmuxConfig.swift +++ b/Sources/CmuxConfig.swift @@ -65,6 +65,7 @@ struct CmuxConfigPackReference: Codable, Sendable, Hashable { struct CmuxConfigFile: Codable, Sendable { var packs: [CmuxConfigPackReference] var actions: [String: CmuxConfigActionDefinition] + var settingPresets: [String: CmuxSettingValue] var ui: CmuxConfigUIDefinition? var notifications: CmuxNotificationConfigDefinition? var agentChat: CmuxAgentChatConfigDefinition? @@ -75,12 +76,13 @@ struct CmuxConfigFile: Codable, Sendable { var workspaceGroups: CmuxConfigWorkspaceGroupsDefinition? private enum CodingKeys: String, CodingKey { - case packs, actions, ui, notifications, agentChat, newWorkspaceCommand, surfaceTabBarButtons, commands, vault, workspaceGroups + case packs, actions, settingPresets, ui, notifications, agentChat, newWorkspaceCommand, surfaceTabBarButtons, commands, vault, workspaceGroups } init( packs: [CmuxConfigPackReference] = [], actions: [String: CmuxConfigActionDefinition] = [:], + settingPresets: [String: CmuxSettingValue] = [:], ui: CmuxConfigUIDefinition? = nil, notifications: CmuxNotificationConfigDefinition? = nil, agentChat: CmuxAgentChatConfigDefinition? = nil, @@ -92,6 +94,7 @@ struct CmuxConfigFile: Codable, Sendable { ) { self.packs = packs self.actions = actions + self.settingPresets = settingPresets self.ui = ui self.notifications = notifications self.agentChat = agentChat @@ -113,6 +116,10 @@ struct CmuxConfigFile: Codable, Sendable { decodedActions, codingPath: decoder.codingPath + [CodingKeys.actions] ) + settingPresets = try container.decodeIfPresent( + [String: CmuxSettingValue].self, + forKey: .settingPresets + ) ?? [:] ui = try container.decodeIfPresent(CmuxConfigUIDefinition.self, forKey: .ui) notifications = try container.decodeIfPresent(CmuxNotificationConfigDefinition.self, forKey: .notifications) agentChat = try container.decodeIfPresent(CmuxAgentChatConfigDefinition.self, forKey: .agentChat) @@ -888,6 +895,9 @@ enum CmuxSurfaceTabBarButtonAction: Sendable, Hashable { case agent(CmuxConfigAgentKind, args: String?) case workspaceCommand(String) case workspace(CmuxWorkspaceDefinition, restart: CmuxRestartBehavior?) + /// `"type": "setting"` / `"type": "settingPreset"`: edits the global + /// cmux.json through ``JSONConfigStore/apply(_:)``. + case setting(CmuxSettingChange) case actionReference(String) var defaultId: String { @@ -902,6 +912,8 @@ enum CmuxSurfaceTabBarButtonAction: Sendable, Hashable { return "workspaceCommand." + Self.generatedCommandId(for: commandName) case .workspace(let definition, _): return "workspace." + Self.generatedCommandId(for: definition.name ?? "workspace") + case .setting(let change): + return "setting." + Self.generatedCommandId(for: change.displayTarget) case .actionReference(let identifier): return identifier } @@ -921,6 +933,8 @@ enum CmuxSurfaceTabBarButtonAction: Sendable, Hashable { return agent.defaultIcon case .workspaceCommand, .workspace: return .symbol("rectangle.stack.badge.plus") + case .setting: + return .symbol("slider.horizontal.3") case .actionReference: return .symbol("questionmark.circle") } @@ -933,7 +947,7 @@ enum CmuxSurfaceTabBarButtonAction: Sendable, Hashable { case .agent(let agent, let args): let trimmedArgs = args?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" return trimmedArgs.isEmpty ? agent.commandName : "\(agent.commandName) \(trimmedArgs)" - case .builtIn, .workspaceCommand, .workspace, .actionReference: + case .builtIn, .workspaceCommand, .workspace, .setting, .actionReference: return nil } } @@ -945,6 +959,11 @@ enum CmuxSurfaceTabBarButtonAction: Sendable, Hashable { return nil } + var isSettingChange: Bool { + if case .setting = self { return true } + return false + } + /// Inline workspace payload for `type: "workspace"` actions. var inlineWorkspace: (definition: CmuxWorkspaceDefinition, restart: CmuxRestartBehavior?)? { if case .workspace(let definition, let restart) = self { @@ -1076,7 +1095,7 @@ struct CmuxSurfaceTabBarButton: Codable, Sendable, Hashable, Identifiable { switch action { case .builtIn(let builtIn): return builtIn.bonsplitAction ?? .custom(id) - case .command, .agent, .workspaceCommand, .workspace, .actionReference: + case .command, .agent, .workspaceCommand, .workspace, .setting, .actionReference: return .custom(id) } }() @@ -1300,6 +1319,10 @@ struct CmuxSurfaceTabBarButton: Codable, Sendable, Hashable, Identifiable { try container.encode("workspace", forKey: .type) try container.encode(definition, forKey: .workspace) try container.encodeIfPresent(restart, forKey: .restart) + case .setting: + // Setting changes are only declared in the `actions` registry; + // a button that runs one references its action id. + try container.encode(id, forKey: .action) case .actionReference(let identifier): try container.encode(identifier, forKey: .action) } @@ -1479,6 +1502,8 @@ struct CmuxResolvedConfigAction: Identifiable, Sendable, Hashable { return commandName case .workspace(let definition, _): return definition.name ?? id + case .setting: + return id case .builtIn(let builtIn): return builtIn.configID case .actionReference(let identifier): @@ -1789,6 +1814,7 @@ final class CmuxConfigStore: ObservableObject { /// Which config file each command came from, keyed by command id. private(set) var commandSourcePaths: [String: String] = [:] private(set) var actionLookup: [String: CmuxResolvedConfigAction] = [:] + private(set) var settingPresets: [String: CmuxSettingValue] = [:] private(set) var surfaceTabBarButtonSourcePath: String? private(set) var surfaceTabBarCommandSourcePaths: [String: String] = [:] private(set) var newWorkspaceActionSourcePath: String? @@ -2248,6 +2274,7 @@ final class CmuxConfigStore: ObservableObject { ) loadedCommands = commands loadedActions = resolvedActions + settingPresets = mergedSettingPresets(from: globalConfigEntries) commandSourcePaths = sourcePaths actionLookup = resolvedActionLookup newWorkspaceActionID = configuredNewWorkspaceActionID @@ -2411,6 +2438,16 @@ final class CmuxConfigStore: ObservableObject { return merged } + private func mergedSettingPresets(from entries: [ConfigEntry]) -> [String: CmuxSettingValue] { + var merged: [String: CmuxSettingValue] = [:] + for entry in entries { + for (name, preset) in entry.config.settingPresets where merged[name] == nil { + merged[name] = preset + } + } + return merged + } + private func mergedActionEntries( primary: [String: ActionEntry], fallback: [String: ActionEntry] @@ -2620,8 +2657,32 @@ final class CmuxConfigStore: ObservableObject { func apply(_ entries: [String: ActionEntry]) { for (id, entry) in entries { + // A setting action rewrites the global cmux.json, so only the + // user's global config (and packs it references, which inherit + // its source path) may declare one. A project config or project + // pack could otherwise ship a harmless-looking button that flips + // a security setting such as automation.socketControlMode. + if case .setting = entry.definition.action, + !CmuxSettingActionTrust.allowsSettingAction( + actionSourcePath: entry.actionSourcePath, + globalConfigPath: globalConfigPath + ) { + NSLog("[CmuxConfig] setting action '%@' ignored: setting actions are only read from the global cmux.json", id) + continue + } let registryID = CmuxSurfaceTabBarBuiltInAction(configID: id)?.configID ?? id if let existing = registry[registryID] { + // Only the global config may retitle, rebind, or drop the + // confirm of a setting action; a project override would + // otherwise dress one up as something harmless. + if case .setting = existing.action, + !CmuxSettingActionTrust.allowsSettingAction( + actionSourcePath: entry.actionSourcePath, + globalConfigPath: globalConfigPath + ) { + NSLog("[CmuxConfig] override of setting action '%@' ignored: only the global cmux.json may change it", id) + continue + } guard let resolved = existing.applying( entry.definition, actionSourcePath: entry.actionSourcePath, @@ -2713,6 +2774,28 @@ final class CmuxConfigStore: ObservableObject { let resolvedIdentifier = canonicalActionID(identifier) if let entry = actions[resolvedIdentifier] { + // A project button may show a global setting action, but not + // relabel it or drop its confirm. + if case .setting = entry.action, + !CmuxSettingActionTrust.allowsSettingAction( + actionSourcePath: button.actionSourcePath, + globalConfigPath: globalConfigPath + ) { + return ResolvedSurfaceTabBarButtonEntry( + button: CmuxSurfaceTabBarButton( + id: button.id, + title: entry.title, + icon: entry.icon, + tooltip: entry.tooltip ?? entry.title, + action: entry.action, + confirm: entry.confirm, + terminalCommandTarget: nil, + actionSourcePath: entry.actionSourcePath, + iconSourcePath: entry.iconSourcePath + ), + terminalCommandSourcePath: nil + ) + } let resolvedButton = CmuxSurfaceTabBarButton( id: button.id, title: button.title ?? entry.title, @@ -2763,6 +2846,7 @@ final class CmuxConfigStore: ObservableObject { surfaceTabBarButtons, sourcePath: surfaceTabBarButtonSourcePath, globalConfigPath: globalConfigPath, + settingPresets: settingPresets, terminalCommandSourcePaths: surfaceTabBarCommandSourcePaths, workspaceCommands: surfaceTabBarWorkspaceCommands ) diff --git a/Sources/CmuxConfigActionDefinition.swift b/Sources/CmuxConfigActionDefinition.swift index d66fa121103f..447f311562f9 100644 --- a/Sources/CmuxConfigActionDefinition.swift +++ b/Sources/CmuxConfigActionDefinition.swift @@ -1,3 +1,4 @@ +import CmuxSettings import Foundation struct CmuxConfigActionDefinition: Codable, Sendable, Hashable { @@ -36,6 +37,12 @@ struct CmuxConfigActionDefinition: Codable, Sendable, Hashable { case confirm case target case newWorkspaceMenu + case path + case set + case toggle + case cycle + case unset + case preset } init( @@ -139,6 +146,11 @@ struct CmuxConfigActionDefinition: Codable, Sendable, Hashable { let definition = try container.decode(CmuxWorkspaceDefinition.self, forKey: .workspace) let restart = try container.decodeIfPresent(CmuxRestartBehavior.self, forKey: .restart) action = .workspace(definition, restart: restart) + case "setting": + action = .setting(try Self.decodeSettingChange(in: container, codingPath: decoder.codingPath)) + case "settingPreset": + let preset = try Self.requiredTrimmedString(forKey: .preset, in: container) + action = .setting(.preset(name: preset)) case nil: action = nil default: @@ -181,12 +193,84 @@ struct CmuxConfigActionDefinition: Codable, Sendable, Hashable { try container.encode("workspace", forKey: .type) try container.encode(definition, forKey: .workspace) try container.encodeIfPresent(restart, forKey: .restart) + case .setting(let change): + try Self.encodeSettingChange(change, in: &container) case .actionReference(let identifier): try container.encode("builtin", forKey: .type) try container.encode(identifier, forKey: .builtin) } } + /// Decodes a `"type": "setting"` action: `path` plus exactly one of + /// `set`, `toggle: true`, `cycle: [...]`, or `unset: true`. The path and + /// values are checked against the schema when the action runs, so an + /// action written for a newer cmux still loads. + private static func decodeSettingChange( + in container: KeyedDecodingContainer<CodingKeys>, + codingPath: [any CodingKey] + ) throws -> CmuxSettingChange { + let path = try requiredTrimmedString(forKey: .path, in: container) + let operations = [CodingKeys.set, .toggle, .cycle, .unset].filter { container.contains($0) } + guard operations.count == 1, let operation = operations.first else { + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: codingPath, + debugDescription: "setting actions require exactly one of 'set', 'toggle', 'cycle', or 'unset'" + ) + ) + } + switch operation { + case .set: + return .set(path: path, value: try container.decode(CmuxSettingValue.self, forKey: .set)) + case .toggle, .unset: + guard try container.decode(Bool.self, forKey: operation) else { + throw DecodingError.dataCorruptedError( + forKey: operation, + in: container, + debugDescription: "\(operation.stringValue) must be true" + ) + } + return operation == .toggle ? .toggle(path: path) : .unset(path: path) + default: + let values = try container.decode([CmuxSettingValue].self, forKey: .cycle) + guard !values.isEmpty else { + throw DecodingError.dataCorruptedError( + forKey: .cycle, + in: container, + debugDescription: "cycle must list at least one value" + ) + } + return .cycle(path: path, values: values) + } + } + + private static func encodeSettingChange( + _ change: CmuxSettingChange, + in container: inout KeyedEncodingContainer<CodingKeys> + ) throws { + switch change { + case .set(let path, let value): + try container.encode("setting", forKey: .type) + try container.encode(path, forKey: .path) + try container.encode(value, forKey: .set) + case .unset(let path): + try container.encode("setting", forKey: .type) + try container.encode(path, forKey: .path) + try container.encode(true, forKey: .unset) + case .toggle(let path): + try container.encode("setting", forKey: .type) + try container.encode(path, forKey: .path) + try container.encode(true, forKey: .toggle) + case .cycle(let path, let values): + try container.encode("setting", forKey: .type) + try container.encode(path, forKey: .path) + try container.encode(values, forKey: .cycle) + case .preset(let name): + try container.encode("settingPreset", forKey: .type) + try container.encode(name, forKey: .preset) + } + } + private static func requiredTrimmedString( forKey key: CodingKeys, in container: KeyedDecodingContainer<CodingKeys> diff --git a/Sources/CmuxConfigExecutor.swift b/Sources/CmuxConfigExecutor.swift index d6ce5c973000..68943b8de73a 100644 --- a/Sources/CmuxConfigExecutor.swift +++ b/Sources/CmuxConfigExecutor.swift @@ -1,4 +1,5 @@ import AppKit +import CmuxSettings import Foundation @MainActor @@ -73,9 +74,24 @@ struct CmuxConfigExecutor { tabManager: TabManager, baseCwd: String, globalConfigPath: String, + settingPresets: [String: CmuxSettingValue] = [:], presentingWindow: NSWindow? = nil, onExecuted: (() -> Void)? = nil ) -> Bool { + if case .setting(let change) = action.action { + let didStart = CmuxSettingActionRunner.run( + change, + actionSourcePath: action.actionSourcePath, + globalConfigPath: globalConfigPath, + settingPresets: settingPresets, + confirm: action.confirm ?? false, + title: action.title, + presentingWindow: presentingWindow + ) + if didStart { onExecuted?() } + return didStart + } + if let syntheticCommand = action.inlineWorkspaceSyntheticCommand { // Inline `type: "workspace"` actions reuse the named-command path via a // synthetic definition so trust, restart, confirm, and layout behavior diff --git a/Sources/CmuxSettingActionRunner.swift b/Sources/CmuxSettingActionRunner.swift new file mode 100644 index 000000000000..9ea51fea62e1 --- /dev/null +++ b/Sources/CmuxSettingActionRunner.swift @@ -0,0 +1,162 @@ +import AppKit +import CmuxSettings +import Foundation + +/// Which config files may declare `"type": "setting"` actions. +enum CmuxSettingActionTrust { + /// Setting actions rewrite the global cmux.json, so they only run when the + /// user's global config, or a pack it references, declared them. A + /// missing source fails closed. + static func allowsSettingAction(actionSourcePath: String?, globalConfigPath: String) -> Bool { + guard let actionSourcePath else { return false } + return standardized(actionSourcePath) == standardized(globalConfigPath) + } + + private static func standardized(_ path: String) -> String { + ((path as NSString).expandingTildeInPath as NSString).standardizingPath + } +} + +/// Runs `"type": "setting"` and `"type": "settingPreset"` actions from the +/// command palette, shortcuts, and surface tab bar buttons. +/// +/// The edit goes through ``JSONConfigStore/apply(_:)``, the same path +/// `cmux config set|toggle|cycle|preset` uses, and the config file watcher +/// applies the result like any other cmux.json edit. +@MainActor +enum CmuxSettingActionRunner { + private static var stores: [String: JSONConfigStore] = [:] + + /// Starts the change and returns whether it was accepted to run. A + /// refused or failed write shows an alert with the reason. + /// + /// With `confirm`, the action's `"confirm": true`, the change waits for + /// the user to accept a dialog describing the config change. Setting + /// actions only come from the global config, which the project-action trust + /// prompt never covers, so this is the only prompt + /// they get. + @discardableResult + static func run( + _ change: CmuxSettingChange, + actionSourcePath: String?, + globalConfigPath: String, + settingPresets: [String: CmuxSettingValue] = [:], + confirm: Bool = false, + title: String? = nil, + presentingWindow: NSWindow? = nil + ) -> Bool { + guard CmuxSettingActionTrust.allowsSettingAction( + actionSourcePath: actionSourcePath, + globalConfigPath: globalConfigPath + ) else { + NSSound.beep() + return false + } + guard confirm else { + apply( + change, + globalConfigPath: globalConfigPath, + settingPresets: settingPresets, + presentingWindow: presentingWindow + ) + return true + } + let alert = confirmationAlert(for: change, title: title) + if let window = presentingWindow ?? NSApp.keyWindow ?? NSApp.mainWindow { + alert.beginSheetModal(for: window) { [weak window] response in + guard response == .alertFirstButtonReturn else { return } + apply( + change, + globalConfigPath: globalConfigPath, + settingPresets: settingPresets, + presentingWindow: window + ) + } + } else if alert.runModal() == .alertFirstButtonReturn { + apply( + change, + globalConfigPath: globalConfigPath, + settingPresets: settingPresets, + presentingWindow: nil + ) + } + return true + } + + static func confirmationAlert(for change: CmuxSettingChange, title: String?) -> NSAlert { + let alert = NSAlert() + alert.alertStyle = .informational + let trimmedTitle = title?.trimmingCharacters(in: .whitespacesAndNewlines) + alert.messageText = (trimmedTitle?.isEmpty == false) + ? trimmedTitle! + : String(localized: "settingAction.confirm.title", defaultValue: "Change Setting?") + let confirmationDescription: String + switch change { + case .preset(let name): + confirmationDescription = "Apply setting preset \"\(name)\"" + default: + confirmationDescription = change.commandLineDescription + } + alert.informativeText = String( + format: String( + localized: "settingAction.confirm.message", + defaultValue: "This action edits your cmux.json:\n\n%@" + ), + confirmationDescription + ) + alert.addButton(withTitle: String(localized: "settingAction.confirm.apply", defaultValue: "Change")) + alert.addButton(withTitle: String(localized: "dialog.cmuxConfig.confirmCommand.cancel", defaultValue: "Cancel")) + return alert + } + + private static func apply( + _ change: CmuxSettingChange, + globalConfigPath: String, + settingPresets: [String: CmuxSettingValue], + presentingWindow: NSWindow? + ) { + let store = store(for: globalConfigPath) + Task { @MainActor [weak presentingWindow] in + do { + // Start toggle and cycle from what the user sees: a value set + // in the Settings window lives in UserDefaults, not cmux.json. + _ = try await store.apply( + change, + liveValues: .userDefaults(suiteName: nil), + presetOverrides: settingPresets + ) + } catch { + NSLog("[CmuxConfig] setting action on '%@' failed: %@", change.displayTarget, String(describing: error)) + presentFailure(error, window: presentingWindow) + } + } + } + + private static func store(for globalConfigPath: String) -> JSONConfigStore { + if let existing = stores[globalConfigPath] { + return existing + } + let store = JSONConfigStore(fileURL: URL(fileURLWithPath: globalConfigPath)) + stores[globalConfigPath] = store + return store + } + + private static func presentFailure(_ error: any Error, window: NSWindow?) { + let alert = NSAlert() + alert.alertStyle = .warning + alert.messageText = String( + localized: "settingAction.failed.title", + defaultValue: "Couldn't Change Setting" + ) + alert.informativeText = (error as? LocalizedError)?.errorDescription + ?? String( + localized: "settingAction.failed.unreadable", + defaultValue: "cmux couldn't read or save ~/.config/cmux/cmux.json. Check it for a syntax error, then try again." + ) + if let window = window ?? NSApp.keyWindow { + alert.beginSheetModal(for: window) + } else { + alert.runModal() + } + } +} diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 435e852857ea..4cc3c6547f77 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -9645,7 +9645,8 @@ struct ContentView: View { commandSourcePaths: cmuxConfigStore.commandSourcePaths, tabManager: tabManager, baseCwd: baseCwd, - globalConfigPath: cmuxConfigStore.globalConfigPath + globalConfigPath: cmuxConfigStore.globalConfigPath, + settingPresets: cmuxConfigStore.settingPresets ) } diff --git a/Sources/SurfaceTabBarButtonConfiguration.swift b/Sources/SurfaceTabBarButtonConfiguration.swift index b24222bcb035..4b6e5d96688a 100644 --- a/Sources/SurfaceTabBarButtonConfiguration.swift +++ b/Sources/SurfaceTabBarButtonConfiguration.swift @@ -1,7 +1,10 @@ +import CmuxSettings + struct SurfaceTabBarButtonConfiguration { let buttons: [CmuxSurfaceTabBarButton] let sourcePath: String? let globalConfigPath: String + let settingPresets: [String: CmuxSettingValue] let terminalCommandSourcePaths: [String: String] let workspaceCommands: [String: CmuxResolvedCommand] } diff --git a/Sources/TabManager.swift b/Sources/TabManager.swift index c9553e6dcd62..fe1016d355d2 100644 --- a/Sources/TabManager.swift +++ b/Sources/TabManager.swift @@ -4646,6 +4646,7 @@ class TabManager: ObservableObject { _ buttons: [CmuxSurfaceTabBarButton], sourcePath: String?, globalConfigPath: String, + settingPresets: [String: CmuxSettingValue] = [:], terminalCommandSourcePaths: [String: String], workspaceCommands: [String: CmuxResolvedCommand] ) { @@ -4654,6 +4655,7 @@ class TabManager: ObservableObject { buttons, sourcePath: sourcePath, globalConfigPath: globalConfigPath, + settingPresets: settingPresets, terminalCommandSourcePaths: terminalCommandSourcePaths, workspaceCommands: workspaceCommands ) diff --git a/Sources/Workspace.swift b/Sources/Workspace.swift index c2add9eafe42..a88fa60359ba 100644 --- a/Sources/Workspace.swift +++ b/Sources/Workspace.swift @@ -4519,6 +4519,7 @@ final class Workspace: Identifiable, ObservableObject, FilePreviewTabMetadataHos _ buttons: [CmuxSurfaceTabBarButton], sourcePath: String?, globalConfigPath: String, + settingPresets: [String: CmuxSettingValue] = [:], terminalCommandSourcePaths: [String: String], workspaceCommands: [String: CmuxResolvedCommand] ) { @@ -4526,6 +4527,7 @@ final class Workspace: Identifiable, ObservableObject, FilePreviewTabMetadataHos buttons: buttons, sourcePath: sourcePath, globalConfigPath: globalConfigPath, + settingPresets: settingPresets, terminalCommandSourcePaths: terminalCommandSourcePaths, workspaceCommands: workspaceCommands ) @@ -4557,7 +4559,7 @@ final class Workspace: Identifiable, ObservableObject, FilePreviewTabMetadataHos ) ) } - if button.action.inlineWorkspace != nil { + if button.action.inlineWorkspace != nil || button.action.isSettingChange { return ( button.id, SurfaceTabBarExecutableButton( @@ -4616,6 +4618,7 @@ final class Workspace: Identifiable, ObservableObject, FilePreviewTabMetadataHos configuration.buttons, sourcePath: configuration.sourcePath, globalConfigPath: configuration.globalConfigPath, + settingPresets: configuration.settingPresets, terminalCommandSourcePaths: configuration.terminalCommandSourcePaths, workspaceCommands: configuration.workspaceCommands ) @@ -14929,6 +14932,19 @@ extension Workspace: BonsplitDelegate { return } + if case .setting(let change) = executable.button.action { + CmuxSettingActionRunner.run( + change, + actionSourcePath: executable.button.actionSourcePath, + globalConfigPath: globalConfigPath, + settingPresets: surfaceTabBarButtonConfiguration?.settingPresets ?? [:], + confirm: executable.button.confirm ?? false, + title: executable.button.title, + presentingWindow: presentingWindow + ) + return + } + let inlineWorkspaceCommand = executable.button.inlineWorkspaceSyntheticCommand if executable.workspaceCommand != nil || inlineWorkspaceCommand != nil { bonsplitController.focusPane(pane) diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index d086fb699573..b8ea23f0b302 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -1277,6 +1277,7 @@ E30750000000000000000006 /* CmuxConfigNamedColorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E30750000000000000000005 /* CmuxConfigNamedColorTests.swift */; }; A5FB130C /* CmuxConfigNewWorkspaceDefaultLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FB130D /* CmuxConfigNewWorkspaceDefaultLayoutTests.swift */; }; A5FB130A /* CmuxConfigNewWorkspaceMenuTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FB130B /* CmuxConfigNewWorkspaceMenuTests.swift */; }; + A90220885896FE0FD55B4B13 /* CmuxConfigSettingActionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 765BE1B60DEB50C787883666 /* CmuxConfigSettingActionTests.swift */; }; C5D0DEC0CF00000000000A1 /* CmuxConfigStore+ConfigStoreReloading.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D0DEC0CF00000000000B1 /* CmuxConfigStore+ConfigStoreReloading.swift */; }; C1A2B3C4D5E6F70800000001 /* CmuxConfigTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1A2B3C4D5E6F70800000002 /* CmuxConfigTests.swift */; }; C0DEF0A10000000000000001 /* CmuxConfigUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DEF0A10000000000000002 /* CmuxConfigUI.swift */; }; @@ -1380,6 +1381,7 @@ CE57E10000000000000000B4 /* CmuxSentryReporting in Frameworks */ = {isa = PBXBuildFile; productRef = CE57E10000000000000000B2 /* CmuxSentryReporting */; }; CE57E10000000000000000A3 /* CmuxSentryScrubbing in Frameworks */ = {isa = PBXBuildFile; productRef = CE57E10000000000000000A2 /* CmuxSentryScrubbing */; }; CE57E10000000000000000A4 /* CmuxSentryScrubbing in Frameworks */ = {isa = PBXBuildFile; productRef = CE57E10000000000000000A2 /* CmuxSentryScrubbing */; }; + C5A7E0A1 /* CmuxSettingActionRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A7E0A2 /* CmuxSettingActionRunner.swift */; }; C11757000000000000000050 /* CmuxSettings in Frameworks */ = {isa = PBXBuildFile; productRef = 5E27010400000000000000A3 /* CmuxSettings */; }; CD0CFE5300000000CD0CFE53 /* CmuxSettings in Frameworks */ = {isa = PBXBuildFile; productRef = CD0CFE5200000000CD0CFE52 /* CmuxSettings */; }; CD0CFE5700000000CD0CFE57 /* CmuxSettings in Frameworks */ = {isa = PBXBuildFile; productRef = CD0CFE5200000000CD0CFE52 /* CmuxSettings */; }; @@ -5581,6 +5583,7 @@ 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>"; }; A5FB130B /* CmuxConfigNewWorkspaceMenuTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigNewWorkspaceMenuTests.swift; sourceTree = "<group>"; }; + 765BE1B60DEB50C787883666 /* CmuxConfigSettingActionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxConfigSettingActionTests.swift"; sourceTree = "<group>"; }; C5D0DEC0CF00000000000B1 /* CmuxConfigStore+ConfigStoreReloading.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxConfigStore+ConfigStoreReloading.swift"; sourceTree = "<group>"; }; C1A2B3C4D5E6F70800000002 /* CmuxConfigTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigTests.swift; sourceTree = "<group>"; }; C0DEF0A10000000000000002 /* CmuxConfigUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxConfigUI.swift; sourceTree = "<group>"; }; @@ -5638,6 +5641,7 @@ A9F100000000000000000006 /* CmuxRuntimeDebugCaptureConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxRuntimeDebugCaptureConfiguration.swift; sourceTree = "<group>"; }; A9F10000000000000000001A /* CmuxRuntimeDebugCaptureSender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxRuntimeDebugCaptureSender.swift; sourceTree = "<group>"; }; A9F100000000000000000007 /* CmuxRuntimeDebugCaptureSequence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxRuntimeDebugCaptureSequence.swift; sourceTree = "<group>"; }; + C5A7E0A2 /* CmuxSettingActionRunner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CmuxSettingActionRunner.swift; sourceTree = "<group>"; }; 95EC0379B5EE4AA18652FF31 /* CmuxSettingsFileStore+AppSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxSettingsFileStore+AppSection.swift"; sourceTree = "<group>"; }; A7984AC10000000000000002 /* CmuxSettingsFileStore+Live.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxSettingsFileStore+Live.swift"; sourceTree = "<group>"; }; 33E82BCF86114ACFBCB1B225 /* CmuxSettingsFileStore+SupportedPaths.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CmuxSettingsFileStore+SupportedPaths.swift"; sourceTree = "<group>"; }; @@ -11087,6 +11091,7 @@ A5FB120C /* CmuxConfigExecutor+WorkspaceLaunch.swift */, A5FB120A /* CmuxConfigActionDefinition.swift */, A5FB1202 /* CmuxConfigActionSaver.swift */, + C5A7E0A2 /* CmuxSettingActionRunner.swift */, A5FB1204 /* WorkspaceConfigActionCapture.swift */, A5001655 /* CmuxActionTrust.swift */, FE5996010000000000000001 /* FileExplorerCellView.swift */, @@ -12733,6 +12738,7 @@ 266B552D3FBFED20D1EDE625 /* SSHTuiOpenTests.swift */, F044F74E3A921F191E3F0EAF /* SSHTuiPreflightTests.swift */, 7AAA9FEEAC85B8AB216861F2 /* GotoSplitActionTests.swift */, + 765BE1B60DEB50C787883666 /* CmuxConfigSettingActionTests.swift */, 4A1CDC8E5DB7360FFDF7A1E6 /* AgentSessionRecoveryAppTests.swift */, 7845D78AAE0A08E748166F72 /* SessionSnapshotImportTrustTests.swift */, DA19B32D9CDA472886E0646F /* SessionSnapshotOverwriteGuardAppTests.swift */, @@ -14191,6 +14197,7 @@ A9F200000000000000000006 /* CmuxRuntimeDebugCaptureConfiguration.swift in Sources */, A9F20000000000000000001A /* CmuxRuntimeDebugCaptureSender.swift in Sources */, A9F200000000000000000007 /* CmuxRuntimeDebugCaptureSequence.swift in Sources */, + C5A7E0A1 /* CmuxSettingActionRunner.swift in Sources */, 0025785C0AAC45F3A9C5A8C5 /* CmuxSettingsFileStore+AppSection.swift in Sources */, A7984AC10000000000000001 /* CmuxSettingsFileStore+Live.swift in Sources */, 4A12A7AFA23E42DE80018D2E /* CmuxSettingsFileStore+SupportedPaths.swift in Sources */, @@ -16877,6 +16884,7 @@ E30750000000000000000006 /* CmuxConfigNamedColorTests.swift in Sources */, A5FB130C /* CmuxConfigNewWorkspaceDefaultLayoutTests.swift in Sources */, A5FB130A /* CmuxConfigNewWorkspaceMenuTests.swift in Sources */, + A90220885896FE0FD55B4B13 /* CmuxConfigSettingActionTests.swift in Sources */, C1A2B3C4D5E6F70800000001 /* CmuxConfigTests.swift in Sources */, A5FB1205 /* CmuxConfigWorkspaceActionTests.swift in Sources */, C54860040000000000000001 /* CmuxDurableDeepLinkRestoreTests.swift in Sources */, diff --git a/cmuxTests/CmuxConfigSettingActionTests.swift b/cmuxTests/CmuxConfigSettingActionTests.swift new file mode 100644 index 000000000000..f84fafca7d0c --- /dev/null +++ b/cmuxTests/CmuxConfigSettingActionTests.swift @@ -0,0 +1,287 @@ +import CmuxSettings +import Foundation +import Testing + +#if canImport(cmux_DEV) +@testable import cmux_DEV +#elseif canImport(cmux) +@testable import cmux +#endif + +/// `"type": "setting"` and `"type": "settingPreset"` config actions: +/// decoding, the global-config-only rule, and tab bar resolution. +struct CmuxConfigSettingActionTests { + private func decode(_ json: String) throws -> CmuxConfigFile { + try JSONDecoder().decode(CmuxConfigFile.self, from: Data(json.utf8)) + } + + private func settingChange(in config: CmuxConfigFile, id: String) throws -> CmuxSettingChange { + let action = try #require(config.actions[id]?.action) + guard case .setting(let change) = action else { + Issue.record("expected a setting action for \(id), got \(action)") + throw CancellationError() + } + return change + } + + @Test func decodesEverySettingOperationAndPresets() throws { + let config = try decode(""" + { + "actions": { + "scroll.fast": { "type": "setting", "path": "terminal.scrollSpeed", "set": 1.8 }, + "wrap": { "type": "setting", "path": "fileEditor.wordWrap", "toggle": true }, + "scroll.cycle": { "type": "setting", "path": "terminal.scrollSpeed", "cycle": [1, 1.4, 1.8] }, + "scroll.reset": { "type": "setting", "path": "terminal.scrollSpeed", "unset": true }, + "quiet": { "type": "settingPreset", "preset": "sidebar.quiet", "title": "Quiet Sidebar" } + } + } + """) + #expect(try settingChange(in: config, id: "scroll.fast") == .set(path: "terminal.scrollSpeed", value: .number(1.8))) + #expect(try settingChange(in: config, id: "wrap") == .toggle(path: "fileEditor.wordWrap")) + #expect(try settingChange(in: config, id: "scroll.cycle") == .cycle( + path: "terminal.scrollSpeed", + values: [.number(1), .number(1.4), .number(1.8)] + )) + #expect(try settingChange(in: config, id: "scroll.reset") == .unset(path: "terminal.scrollSpeed")) + #expect(try settingChange(in: config, id: "quiet") == .preset(name: "sidebar.quiet")) + #expect(config.actions["quiet"]?.title == "Quiet Sidebar") + } + + @Test(arguments: [ + #"{ "type": "setting", "path": "terminal.scrollSpeed" }"#, + #"{ "type": "setting", "path": "terminal.scrollSpeed", "set": 1, "toggle": true }"#, + #"{ "type": "setting", "path": "fileEditor.wordWrap", "toggle": false }"#, + #"{ "type": "setting", "path": "terminal.scrollSpeed", "cycle": [] }"#, + #"{ "type": "setting", "set": 1 }"#, + #"{ "type": "settingPreset" }"#, + ]) + func rejectsMalformedSettingActions(_ action: String) { + #expect(throws: (any Error).self) { + try decode(#"{ "actions": { "bad": "# + action + " } }") + } + } + + @Test func settingActionEncodeDecodeRoundTrip() throws { + let changes: [CmuxSettingChange] = [ + .set(path: "app.appearance", value: .string("dark")), + .toggle(path: "fileEditor.wordWrap"), + .cycle(path: "terminal.scrollSpeed", values: [.number(1), .number(1.4)]), + .unset(path: "terminal.scrollSpeed"), + .preset(name: "sidebar.quiet"), + ] + for change in changes { + let original = CmuxConfigActionDefinition(action: .setting(change), title: "Change") + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(CmuxConfigActionDefinition.self, from: data) + #expect(decoded.action == .setting(change)) + } + } + + @Test func onlyGlobalSourcesMayRunSettingActions() { + let global = "/Users/me/.config/cmux/cmux.json" + #expect(CmuxSettingActionTrust.allowsSettingAction(actionSourcePath: global, globalConfigPath: global)) + #expect(!CmuxSettingActionTrust.allowsSettingAction(actionSourcePath: nil, globalConfigPath: global)) + #expect(CmuxSettingActionTrust.allowsSettingAction( + actionSourcePath: "/Users/me/.config/cmux/../cmux/cmux.json", + globalConfigPath: global + )) + #expect(!CmuxSettingActionTrust.allowsSettingAction( + actionSourcePath: "/Users/me/code/repo/.cmux/cmux.json", + globalConfigPath: global + )) + } + + @MainActor + @Test func registryKeepsGlobalSettingActionsAndDropsProjectOnes() throws { + let root = FileManager.default.temporaryDirectory + .appendingPathComponent("cmux-setting-actions-\(UUID().uuidString)", isDirectory: true) + let globalDirectory = root.appendingPathComponent("global", isDirectory: true) + let localDirectory = root.appendingPathComponent("project", isDirectory: true) + try FileManager.default.createDirectory(at: globalDirectory, withIntermediateDirectories: true) + try FileManager.default.createDirectory(at: localDirectory, withIntermediateDirectories: true) + defer { try? FileManager.default.removeItem(at: root) } + + let globalConfigURL = globalDirectory.appendingPathComponent("cmux.json") + let localConfigURL = localDirectory.appendingPathComponent("cmux.json") + try """ + { + "actions": { + "wrap": { "type": "setting", "path": "fileEditor.wordWrap", "toggle": true, "title": "Toggle Wrap" } + }, + "ui": { "surfaceTabBar": { "buttons": ["cmux.newTerminal", { "action": "wrap" }] } } + } + """.write(to: globalConfigURL, atomically: true, encoding: .utf8) + try """ + { + "actions": { + "sneaky": { + "type": "setting", + "path": "automation.socketControlMode", + "set": "allowAll", + "title": "Run Tests" + } + } + } + """.write(to: localConfigURL, atomically: true, encoding: .utf8) + + let store = CmuxConfigStore( + globalConfigPath: globalConfigURL.path, + localConfigPath: localConfigURL.path, + startFileWatchers: false + ) + store.loadAll() + + let wrap = try #require(store.resolvedAction(id: "wrap")) + #expect(wrap.action == .setting(.toggle(path: "fileEditor.wordWrap"))) + #expect(wrap.actionSourcePath == globalConfigURL.path) + #expect(store.paletteCustomActions().contains { $0.id == "wrap" }) + + #expect(store.resolvedAction(id: "sneaky") == nil) + #expect(!store.paletteCustomActions().contains { $0.id == "sneaky" }) + + let button = try #require(store.surfaceTabBarButtons.first { $0.id == "wrap" }) + #expect(button.action.isSettingChange) + #expect(button.actionSourcePath == globalConfigURL.path) + } + + /// Packs the global config references are the user's choice, so their + /// setting actions load; a project config's pack is dropped like the + /// project config itself. `confirm` reaches both the palette action and + /// the tab bar button. + @MainActor + @Test func globalPacksMayDeclareSettingActionsAndConfirmIsCarried() throws { + let root = FileManager.default.temporaryDirectory + .appendingPathComponent("cmux-setting-packs-\(UUID().uuidString)", isDirectory: true) + let globalDirectory = root.appendingPathComponent("global", isDirectory: true) + let globalPackDirectory = globalDirectory.appendingPathComponent("packs/mine", isDirectory: true) + let localDirectory = root.appendingPathComponent("project", isDirectory: true) + let localPackDirectory = localDirectory.appendingPathComponent("packs/team", isDirectory: true) + for directory in [globalPackDirectory, localPackDirectory] { + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + } + defer { try? FileManager.default.removeItem(at: root) } + + let globalConfigURL = globalDirectory.appendingPathComponent("cmux.json") + let localConfigURL = localDirectory.appendingPathComponent("cmux.json") + try """ + { + "packs": ["./packs/mine"], + "ui": { "surfaceTabBar": { "buttons": [{ "action": "scroll.cycle" }] } } + } + """.write(to: globalConfigURL, atomically: true, encoding: .utf8) + try """ + { + "actions": { + "scroll.cycle": { + "type": "setting", "path": "terminal.scrollSpeed", "cycle": [1, 1.4], + "title": "Cycle Scroll", "confirm": true + } + }, + "settingPresets": { + "sidebar.quiet": { + "sidebar": { "showPorts": false } + } + } + } + """.write(to: globalPackDirectory.appendingPathComponent("cmux.pack.json"), atomically: true, encoding: .utf8) + try #"{ "packs": ["./packs/team"] }"#.write(to: localConfigURL, atomically: true, encoding: .utf8) + try """ + { + "actions": { + "team.sneaky": { "type": "setting", "path": "automation.socketControlMode", "set": "allowAll" } + } + } + """.write(to: localPackDirectory.appendingPathComponent("cmux.pack.json"), atomically: true, encoding: .utf8) + + let store = CmuxConfigStore( + globalConfigPath: globalConfigURL.path, + localConfigPath: localConfigURL.path, + startFileWatchers: false + ) + store.loadAll() + + let cycle = try #require(store.resolvedAction(id: "scroll.cycle")) + #expect(store.settingPresets["sidebar.quiet"] == .object([ + "sidebar": .object(["showPorts": .bool(false)]) + ])) + #expect(cycle.confirm == true) + #expect(CmuxSettingActionTrust.allowsSettingAction( + actionSourcePath: cycle.actionSourcePath, + globalConfigPath: globalConfigURL.path + )) + let button = try #require(store.surfaceTabBarButtons.first { $0.id == "scroll.cycle" }) + #expect(button.confirm == true) + #expect(button.action.isSettingChange) + + #expect(store.resolvedAction(id: "team.sneaky") == nil) + } + + @MainActor + @Test func confirmationDialogShowsTheEquivalentCommand() { + let alert = CmuxSettingActionRunner.confirmationAlert( + for: .cycle(path: "terminal.scrollSpeed", values: [.number(1), .number(1.4)]), + title: "Cycle Scroll" + ) + #expect(alert.messageText == "Cycle Scroll") + #expect(alert.informativeText.contains("cmux config cycle terminal.scrollSpeed 1 1.4")) + #expect(alert.buttons.count == 2) + + let untitled = CmuxSettingActionRunner.confirmationAlert(for: .toggle(path: "fileEditor.wordWrap"), title: " ") + #expect(!untitled.messageText.isEmpty) + #expect(untitled.informativeText.contains("cmux config toggle fileEditor.wordWrap")) + } + + /// A project config can't retitle a global setting action, bind it to a + /// shortcut, or drop its confirm, either in `actions` or on a button. + @MainActor + @Test func projectConfigCannotRelabelOrUnconfirmAGlobalSettingAction() throws { + let root = FileManager.default.temporaryDirectory + .appendingPathComponent("cmux-setting-override-\(UUID().uuidString)", isDirectory: true) + let globalDirectory = root.appendingPathComponent("global", isDirectory: true) + let localDirectory = root.appendingPathComponent("project", isDirectory: true) + try FileManager.default.createDirectory(at: globalDirectory, withIntermediateDirectories: true) + try FileManager.default.createDirectory(at: localDirectory, withIntermediateDirectories: true) + defer { try? FileManager.default.removeItem(at: root) } + + let globalConfigURL = globalDirectory.appendingPathComponent("cmux.json") + let localConfigURL = localDirectory.appendingPathComponent("cmux.json") + try """ + { + "actions": { + "socket.open": { + "type": "setting", "path": "automation.socketControlMode", "set": "allowAll", + "title": "Open Socket", "confirm": true + } + } + } + """.write(to: globalConfigURL, atomically: true, encoding: .utf8) + try """ + { + "actions": { + "socket.open": { "title": "Run Tests", "confirm": false, "shortcut": "cmd+shift+u" } + }, + "ui": { "surfaceTabBar": { "buttons": [ + { "action": "socket.open", "title": "Run Tests", "confirm": false } + ] } } + } + """.write(to: localConfigURL, atomically: true, encoding: .utf8) + + let store = CmuxConfigStore( + globalConfigPath: globalConfigURL.path, + localConfigPath: localConfigURL.path, + startFileWatchers: false + ) + store.loadAll() + + let action = try #require(store.resolvedAction(id: "socket.open")) + #expect(action.title == "Open Socket") + #expect(action.confirm == true) + #expect(action.shortcut == nil) + #expect(action.actionSourcePath == globalConfigURL.path) + + let button = try #require(store.surfaceTabBarButtons.first { $0.id == "socket.open" }) + #expect(button.title == "Open Socket") + #expect(button.confirm == true) + #expect(button.actionSourcePath == globalConfigURL.path) + } +} diff --git a/docs/cli-contract.md b/docs/cli-contract.md index 7fa8eda25c2b..9cd1b29e53a2 100644 --- a/docs/cli-contract.md +++ b/docs/cli-contract.md @@ -728,6 +728,14 @@ Config subcommands: | `config set surface-tab-bar-font-size <points>` | Write the workspace tab bar text size to cmux's editable Ghostty config and reload the running app when available. | | `config surface-tab-bar-font-size [points]` | Get the workspace tab bar text size, or set it when a point size is provided. | | `config get <key>`, `config set <key> <points>` | Generic get/set for `sidebar-font-size` and `surface-tab-bar-font-size`. | +| `config get <setting.path>` | Print a setting's effective value: the cmux.json value; else the value stored by the Settings window (read from the cmux app's defaults), marked `(set in Settings, not cmux.json)`; else the schema default, marked `(default)`. Rejects paths the schema doesn't declare and non-setting sections (`actions`, `commands`, `ui`, `settingPresets`, ...). `--json` prints `path`, `file`, `value`, `configured`, `source` (`cmux.json`, `settings`, or `default`), and `default`. Works without a socket. | +| `config set <setting.path> <value>` | Write one setting to `~/.config/cmux/cmux.json`. `<value>` is parsed as JSON; text that isn't JSON is stored as a string. The complete result is validated against the schema before anything is written, and comments and unrelated keys are kept. The running app applies the change through its file watcher. Works without a socket. | +| `config unset <setting.path>` | Remove one setting from cmux.json, so the value stored by the Settings window, or else the default, applies. Same validation and preservation as `set`. | +| `config toggle <setting.path>` | Flip a boolean setting, starting from the value cmux is using: the cmux.json value, else the Settings window's value, else the schema default. Refuses non-boolean settings. | +| `config cycle <setting.path> <value> [value...]` | Move a setting to the value after its current one (found the same way as `toggle`), wrapping at the end; a value that isn't listed moves to the first. | +| `config preset <name>` | Apply the partial settings object at `settingPresets.<name>` in one write. Nested objects merge key by key. | + +`config set|unset|toggle|cycle|preset` share one mutation path with `"type": "setting"` and `"type": "settingPreset"` actions. Paths split on every `.`, so a key that itself contains `.` (for example a `workspaceGroups.byCwd` entry for `~/src/app.web`) can't be addressed; such a path is refused with an error that says so, and the key has to be edited in cmux.json directly. `--json` prints `ok`, `file`, and `paths`, an array of `{path, changed, value}` objects (`value` is absent after an unset). `config doctor --json` outputs an object with `ok`, `error_count`, `findings`, `reload_command`, `docs_url`, and `schema_url`. Each finding includes @@ -918,7 +926,7 @@ the expected text without connecting to a cmux socket. - `cmux settings --help` -> `Usage: cmux settings [open [target]|path|docs|<target>]` - `cmux settings path` -> `Config files:` - `cmux settings docs` -> `Config files:` -- `cmux config --help` -> `Usage: cmux config <doctor|check|validate|path|paths|docs|documentation|reload|get|set|sidebar-font-size|surface-tab-bar-font-size>` +- `cmux config --help` -> `Usage: cmux config <doctor|check|validate|path|paths|docs|documentation|reload|get|set|unset|toggle|cycle|preset|sidebar-font-size|surface-tab-bar-font-size>` - `cmux config path` -> `Config files:` - `cmux config docs` -> `Config files:` - `cmux welcome --help` -> `Usage: cmux welcome` diff --git a/dogfood/scenarios/setting-actions-tour.json b/dogfood/scenarios/setting-actions-tour.json new file mode 100644 index 000000000000..e5cf9e72423f --- /dev/null +++ b/dogfood/scenarios/setting-actions-tour.json @@ -0,0 +1,143 @@ +{ + "paths": [ + "Sources/CmuxConfig*", + "Sources/CmuxSettingActionRunner.swift", + "Sources/ContentView.swift", + "Sources/Workspace.swift", + "Packages/macOS/CmuxSettings/*", + "dogfood/scenarios/setting-actions-tour.json" + ], + "launch": { + "env": { + "HOME": "/tmp/cmux-setting-actions-tour", + "CFFIXED_USER_HOME": "/tmp/cmux-setting-actions-tour" + } + }, + "steps": [ + { + "socket": "workspace.create", + "params": { + "title": "Setting Actions", + "initial_input": "export HOME=/tmp/cmux-setting-actions-tour CFFIXED_USER_HOME=/tmp/cmux-setting-actions-tour; rm -f /tmp/cmux-setting-actions-tour/.config/cmux/cmux.json; mkdir -p ~/.config/cmux; printf '%s\\n' '{\"app\":{\"appearance\":\"light\",\"minimalMode\":false},\"actions\":{\"tour.appearance.dark\":{\"type\":\"setting\",\"path\":\"app.appearance\",\"set\":\"dark\",\"title\":\"Tour: Dark Appearance\",\"palette\":true},\"tour.presentation.minimal\":{\"type\":\"settingPreset\",\"preset\":\"tour.minimal\",\"title\":\"Tour: Minimal Presentation\",\"palette\":true}},\"settingPresets\":{\"tour.minimal\":{\"app\":{\"minimalMode\":true,\"appearance\":\"light\"}}}}' > ~/.config/cmux/cmux.json; cmux reload-config; clear; printf \"Setting actions and presets loaded from cmux.json\\n\"\n", + "focus": true + }, + "save": "setup" + }, + { + "wait": 3.0 + }, + { + "shot": "light-appearance-before-action" + }, + { + "key": "p", + "modifiers": [ + "command", + "shift" + ] + }, + { + "wait": 0.8 + }, + { + "type": "Tour:" + }, + { + "wait": 0.8 + }, + { + "expect": { + "labelContains": "Tour: Dark Appearance", + "type": "button" + } + }, + { + "expect": { + "labelContains": "Tour: Minimal Presentation", + "type": "button" + } + }, + { + "shot": "palette-setting-action-and-preset" + }, + { + "tree": "palette-setting-action-and-preset" + }, + { + "click": { + "labelContains": "Tour: Dark Appearance", + "type": "button" + } + }, + { + "wait": 2.0 + }, + { + "shot": "dark-appearance-after-setting-action" + }, + { + "key": "p", + "modifiers": [ + "command", + "shift" + ] + }, + { + "wait": 0.8 + }, + { + "type": "Tour: Minimal Presentation" + }, + { + "wait": 0.8 + }, + { + "expect": { + "labelContains": "Tour: Minimal Presentation", + "type": "button" + } + }, + { + "shot": "palette-setting-preset" + }, + { + "click": { + "labelContains": "Tour: Minimal Presentation", + "type": "button" + } + }, + { + "wait": 2.0 + }, + { + "shot": "light-minimal-presentation-after-preset" + }, + { + "tree": "light-minimal-presentation-after-preset" + }, + { + "socket": "workspace.create", + "params": { + "title": "CLI Config", + "focus": true, + "initial_input": "clear; printf \"> cmux config get app.minimalMode\\n\"; cmux config get app.minimalMode; printf \"\\n> cmux config get app.appearance\\n\"; cmux config get app.appearance; printf \"\\n> cmux config set app.appearance dark\\n\"; cmux config set app.appearance dark; printf \"\\n> cmux config get app.appearance\\n\"; cmux config get app.appearance\n" + }, + "save": "cli" + }, + { + "wait": 3.0 + }, + { + "shot": "cli-config-get-and-set-output" + }, + { + "tree": "cli-config-get-and-set-output" + }, + { + "type": "rm -f /tmp/cmux-setting-actions-tour/.config/cmux/cmux.json; cmux reload-config; printf \"config restored\\n\"\n" + }, + { + "wait": 1.0 + } + ] +} diff --git a/skills/cmux-settings/SKILL.md b/skills/cmux-settings/SKILL.md index c0434bafce29..44d794e24c57 100644 --- a/skills/cmux-settings/SKILL.md +++ b/skills/cmux-settings/SKILL.md @@ -37,6 +37,8 @@ The rest of this doc assumes it is on `$PATH` as `cmux-settings`; from a checkou `--file <path>` overrides the target file. Scope is inferred from the real global paths and the project config discovered from the current directory; use `--scope global|project` to override that inference for an arbitrary file. +The installed `cmux` CLI covers the common edits without the helper: `cmux config get|set|unset|toggle|cycle <path>` and `cmux config preset <name>` validate against the same schema, keep comments, and write `~/.config/cmux/cmux.json`. They share one write path with `"type": "setting"` and `"type": "settingPreset"` actions, which put the same edits on a tab bar button, shortcut, or Command Palette entry. Use the helper when you need `--preview`, receipts, `undo`, or a file other than the global config. Paths split on every `.`, so a key that itself contains `.` (for example a `workspaceGroups.byCwd` entry for `~/src/app.web`) is refused by these commands with an error saying so; edit that key in the file directly. + ## Workflow 1. Look up the key when the user named a setting in plain English: diff --git a/web/app/[locale]/(landing)/docs/custom-commands/page.tsx b/web/app/[locale]/(landing)/docs/custom-commands/page.tsx index 5560e6ef0ecb..c389316b6b19 100644 --- a/web/app/[locale]/(landing)/docs/custom-commands/page.tsx +++ b/web/app/[locale]/(landing)/docs/custom-commands/page.tsx @@ -338,6 +338,8 @@ export default function CustomCommandsPage() { <li><code>"builtin"</code>: {t("actionTypeBuiltin")} {t("actionTypeBuiltinCopy")} {t("actionTypeBuiltinCopyRemote")}</li> <li><code>"workspaceCommand"</code>: {t("actionTypeWorkspaceCommand")}</li> <li><code>"workspace"</code>: {t("actionTypeWorkspace")}</li> + <li><code>"setting"</code>: {t("actionTypeSetting")}</li> + <li><code>"settingPreset"</code>: {t("actionTypeSettingPreset")}</li> </ul> <DocsHeading level={3} id="action-fields">{t("actionFields")}</DocsHeading> <ul> @@ -355,6 +357,43 @@ export default function CustomCommandsPage() { {t.rich("commandPaletteBehaviorDesc", codeTags("palette", "commands", "newTerminal"))} </p> + <DocsHeading level={3} id="setting-actions">{t("settingActions")}</DocsHeading> + <p> + {t.rich("settingActionsDesc", codeTags("path", "set", "toggle", "cycle", "unset", "presets"))} + </p> + <CodeBlock title="~/.config/cmux/cmux.json" lang="json">{`{ + "actions": { + "scroll.cycle": { + "type": "setting", + "title": "Cycle Scroll Speed", + "path": "terminal.scrollSpeed", + "cycle": [1.0, 1.4, 1.8] + }, + "editor.wrap": { + "type": "setting", + "title": "Toggle Editor Word Wrap", + "path": "fileEditor.wordWrap", + "toggle": true + }, + "sidebar.quiet": { + "type": "settingPreset", + "title": "Quiet Sidebar", + "preset": "sidebar.quiet" + } + }, + "settingPresets": { + "sidebar.quiet": { + "sidebar": { "showPorts": false, "showPullRequests": false, "showLog": false } + } + } +}`}</CodeBlock> + <p> + {t.rich("settingActionsCli", codeTags("set", "toggle", "preset"))} + </p> + <p> + {t.rich("settingActionsLimits", codeTags("confirm", "byCwd"))} + </p> + <DocsHeading level={2} id="new-workspace-button">{t("newWorkspaceButton")}</DocsHeading> <p>{renderCodeTagged(t.raw("newWorkspaceButtonDesc"))}</p> <CodeBlock title="cmux.json" lang="json">{`{ diff --git a/web/data/cmux.schema.json b/web/data/cmux.schema.json index ab00c592595d..f99991740402 100644 --- a/web/data/cmux.schema.json +++ b/web/data/cmux.schema.json @@ -65,7 +65,7 @@ }, "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\", \"workspace\" (inline workspace with name/cwd/color/env/setup/layout, plus optional restart), \"setting\" (change one setting in the global cmux.json: path plus exactly one of set, toggle: true, cycle, or unset: true), or \"settingPreset\" (apply a named entry from settingPresets). Setting actions only run when declared in the global ~/.config/cmux/cmux.json or a pack it references; with confirm: true they ask before saving. 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 }, @@ -98,6 +98,27 @@ "additionalProperties": true } }, + "settingPresets": { + "x-cmux-scopes": ["global"], + "title": "settingPresets", + "description": "Named groups of settings applied together by a \"settingPreset\" action or `cmux config preset <name>`. Each preset is a partial cmux.json holding only settings sections, for example {\"sidebar\": {\"showPorts\": false}}. Nested objects merge key by key; other values replace the current one. Keys the preset doesn't name keep their values.", + "type": "object", + "default": {}, + "additionalProperties": { + "allOf": [ + { "$ref": "#" }, + { + "type": "object", + "minProperties": 1, + "propertyNames": { + "not": { + "enum": ["$schema", "schemaVersion", "actions", "commands", "newWorkspaceCommand", "packs", "rightSidebar", "settingPresets", "surfaceTabBarButtons", "ui", "vault"] + } + } + } + ] + } + }, "computerUse": { "x-cmux-scopes": ["global"], "title": "computerUse", diff --git a/web/messages/ar.json b/web/messages/ar.json index 3bf9f2219087..1810942d8c73 100644 --- a/web/messages/ar.json +++ b/web/messages/ar.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "يشغّل نصا طرفيا. استخدم target لاختيار الطرفية الحالية أو تبويب جديد في اللوحة الحالية.", "actionTypeAgent": "يشغّل وكيل برمجة مدعوما. يدعم اليوم codex و claude، مع وسائط اختيارية.", "actionTypeWorkspaceCommand": "يشغّل تعريف مساحة عمل مسمى من commands. استخدمه للتخطيطات متعددة اللوحات، ومجلدات العمل المخصصة، وأوامر البدء.", + "actionTypeSetting": "يغيّر إعدادًا واحدًا في ملف cmux.json العام، مثل تبديل إعداد true/false أو التنقل بين قائمة من القيم. راجع إجراءات الإعدادات أدناه.", + "actionTypeSettingPreset": "يطبّق مجموعة مسماة من الإعدادات من settingPresets دفعة واحدة.", + "settingActions": "إجراءات الإعدادات", + "settingActionsDesc": "يحدد إجراء الإعداد <path>path</path> للإعداد وواحدًا فقط من: <set>set</set> (يكتب قيمة)، أو <toggle>toggle: true</toggle> (يقلب إعداد true/false)، أو <cycle>cycle</cycle> (ينتقل إلى القيمة التالية في قائمة ويعود إلى أولها بعد آخرها)، أو <unset>unset: true</unset> (يحذف المفتاح من cmux.json لتُطبَّق القيمة من نافذة الإعدادات أو القيمة الافتراضية). يبدأ toggle و cycle من القيمة التي يستخدمها cmux حاليًا، بما في ذلك قيمة ضبطتها في نافذة الإعدادات. يطبّق إجراء settingPreset إدخالًا من <presets>settingPresets</presets>، وهو ملف cmux.json جزئي تُدمج كائناته المتداخلة مفتاحًا بمفتاح. يتحقق cmux من كل تغيير وفق المخطط قبل الحفظ، ويحافظ على تعليقاتك والمفاتيح الأخرى، ويطبّق التغيير فورًا. لا تعمل إجراءات الإعدادات والإعدادات المسبقة إلا من ملف cmux.json العام والحزم التي يشير إليها؛ ولا يمكن لإعدادات المشروع تعريفها.", + "settingActionsCli": "تعمل التغييرات نفسها من الطرفية: <set>cmux config set terminal.scrollSpeed 1.4</set>، و<toggle>cmux config toggle fileEditor.wordWrap</toggle>، و<preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "مع <confirm>confirm: true</confirm>، يسأل cmux قبل الحفظ ويعرض أمر cmux config المكافئ. تُقسَّم المسارات عند كل \".\"، لذا لا يمكن بهذه الطريقة تغيير مفتاح يحتوي هو نفسه على \".\" (مثل إدخال <byCwd>workspaceGroups.byCwd</byCwd> لـ ~/src/app.web). عدّله مباشرة في cmux.json.", "actionFields": "حقول الإجراء", "actionFieldTitle": "عنوان صف لوحة الأوامر، وتسمية زر السطح، وعنوان عنصر القائمة، وعنوان طلب الثقة ما لم يستبدله إدخال آخر.", "actionFieldSubtitle": "النص الثانوي في لوحة الأوامر. يقبل description كاسم بديل لـ subtitle.", diff --git a/web/messages/bs.json b/web/messages/bs.json index 2d8ddf4b2e78..d8c419c57436 100644 --- a/web/messages/bs.json +++ b/web/messages/bs.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Pokreće shell tekst u terminalu. Koristite target da izaberete trenutni terminal ili novi tab u trenutnom panelu.", "actionTypeAgent": "Pokreće podržanog programerskog agenta. Trenutno podržava codex i claude, uz opcionalne argumente.", "actionTypeWorkspaceCommand": "Pokreće imenovanu definiciju radnog prostora iz commands. Koristite za rasporede s više panela, prilagođene radne direktorije i početne komande.", + "actionTypeSetting": "Mijenja jednu postavku u vašem globalnom cmux.json, na primjer uključuje ili isključuje true/false postavku ili prolazi kroz listu vrijednosti. Pogledajte Akcije postavki ispod.", + "actionTypeSettingPreset": "Primjenjuje imenovanu grupu postavki iz settingPresets u jednom koraku.", + "settingActions": "Akcije postavki", + "settingActionsDesc": "Akcija postavke navodi <path>path</path> postavke i tačno jedno od: <set>set</set> (upisuje vrijednost), <toggle>toggle: true</toggle> (prebacuje true/false postavku), <cycle>cycle</cycle> (prelazi na sljedeću vrijednost u listi, a nakon posljednje kreće ispočetka) ili <unset>unset: true</unset> (uklanja ključ iz cmux.json, pa važi vrijednost iz prozora Postavke ili zadana vrijednost). toggle i cycle polaze od vrijednosti koju cmux trenutno koristi, uključujući onu postavljenu u prozoru Postavke. Akcija settingPreset primjenjuje unos iz <presets>settingPresets</presets>, djelimični cmux.json čiji se ugniježđeni objekti spajaju ključ po ključ. cmux prije spremanja provjerava svaku promjenu prema shemi, zadržava vaše komentare i ostale ključeve i odmah primjenjuje promjenu. Akcije postavki i preseti rade samo iz vašeg globalnog cmux.json i paketa na koje on upućuje; projektne konfiguracije ih ne mogu deklarisati.", + "settingActionsCli": "Iste promjene rade i iz terminala: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> i <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Uz <confirm>confirm: true</confirm>, cmux pita prije spremanja i prikazuje odgovarajuću cmux config komandu. Putanje se dijele na svakoj \".\", pa se ključ koji i sam sadrži \".\" (npr. unos <byCwd>workspaceGroups.byCwd</byCwd> za ~/src/app.web) ne može promijeniti na ovaj način. Uredite ga direktno u cmux.json.", "actionFields": "Polja akcije", "actionFieldTitle": "Naslov reda u Command Palette, oznaka dugmeta, naslov stavke menija i naslov upita za povjerenje, osim ako ga unos ne nadjača.", "actionFieldSubtitle": "Sekundarni tekst u Command Palette. description se prihvata kao alias za subtitle.", diff --git a/web/messages/da.json b/web/messages/da.json index c2e87d7fb90b..32a509e1151e 100644 --- a/web/messages/da.json +++ b/web/messages/da.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Kør shelltekst i en terminal. Brug target til at vælge den aktuelle terminal eller en ny fane i den aktuelle rude.", "actionTypeAgent": "Start en understøttet kodeagent. I dag understøttes codex og claude med valgfrie argumenter.", "actionTypeWorkspaceCommand": "Kør en navngiven arbejdsområdedefinition fra commands. Brug dette til layouts med flere ruder, brugerdefinerede arbejdsmapper og startkommandoer.", + "actionTypeSetting": "Ændr én indstilling i din globale cmux.json, for eksempel slå en true/false-indstilling til eller fra eller skift gennem en liste af værdier. Se Indstillingshandlinger nedenfor.", + "actionTypeSettingPreset": "Anvend en navngiven gruppe indstillinger fra settingPresets i ét trin.", + "settingActions": "Indstillingshandlinger", + "settingActionsDesc": "En indstillingshandling angiver en <path>path</path> til en indstilling og præcis én af <set>set</set> (skriv en værdi), <toggle>toggle: true</toggle> (slå en true/false-indstilling om), <cycle>cycle</cycle> (gå til næste værdi i en liste og start forfra efter den sidste) eller <unset>unset: true</unset> (fjern nøglen fra cmux.json, så værdien fra Indstillinger-vinduet eller standardværdien gælder). toggle og cycle tager udgangspunkt i den værdi, cmux bruger, også en du har sat i Indstillinger-vinduet. En settingPreset-handling anvender en post fra <presets>settingPresets</presets>, en delvis cmux.json, hvis indlejrede objekter flettes nøgle for nøgle. cmux kontrollerer hver ændring mod skemaet, før den gemmes, bevarer dine kommentarer og andre nøgler og anvender ændringen med det samme. Indstillingshandlinger og presets kører kun fra din globale cmux.json og de pakker, den henviser til; projektkonfigurationer kan ikke erklære dem.", + "settingActionsCli": "De samme ændringer kan laves fra en terminal: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> og <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Med <confirm>confirm: true</confirm> spørger cmux, før der gemmes, og viser den tilsvarende cmux config-kommando. Stier deles ved hvert \".\", så en nøgle, der selv indeholder \".\" (f.eks. en <byCwd>workspaceGroups.byCwd</byCwd>-post for ~/src/app.web), kan ikke ændres på denne måde. Rediger den direkte i cmux.json.", "actionFields": "Handlingsfelter", "actionFieldTitle": "Titel i Command Palette, etiket på overfladeknap, menupunkttitel og titel i tillidsdialogen, medmindre en post tilsidesætter den.", "actionFieldSubtitle": "Sekundær tekst i Command Palette. description accepteres som alias for subtitle.", diff --git a/web/messages/de.json b/web/messages/de.json index b14f87874c24..494fa0d78579 100644 --- a/web/messages/de.json +++ b/web/messages/de.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Führt Shell-Text in einem Terminal aus. Verwende target, um das aktuelle Terminal oder einen neuen Tab im aktuellen Bereich auszuwählen.", "actionTypeAgent": "Startet einen unterstützten Coding-Agenten. Aktuell werden codex und claude mit optionalen Argumenten unterstützt.", "actionTypeWorkspaceCommand": "Führt eine benannte Workspace-Definition aus commands aus. Nutze dies für Multi-Pane-Layouts, eigene Arbeitsverzeichnisse und Startbefehle.", + "actionTypeSetting": "Ändert eine Einstellung in deiner globalen cmux.json, zum Beispiel um eine true/false-Einstellung umzuschalten oder eine Liste von Werten zu durchlaufen. Siehe Einstellungsaktionen weiter unten.", + "actionTypeSettingPreset": "Wendet eine benannte Gruppe von Einstellungen aus settingPresets in einem Schritt an.", + "settingActions": "Einstellungsaktionen", + "settingActionsDesc": "Eine Einstellungsaktion gibt den <path>path</path> einer Einstellung an und genau eines von <set>set</set> (einen Wert schreiben), <toggle>toggle: true</toggle> (eine true/false-Einstellung umschalten), <cycle>cycle</cycle> (zum nächsten Wert einer Liste wechseln, nach dem letzten wieder zum ersten) oder <unset>unset: true</unset> (den Schlüssel aus cmux.json entfernen, sodass der Wert aus dem Einstellungsfenster oder der Standardwert gilt). toggle und cycle gehen von dem Wert aus, den cmux gerade verwendet, auch wenn du ihn im Einstellungsfenster gesetzt hast. Eine settingPreset-Aktion wendet einen Eintrag aus <presets>settingPresets</presets> an, eine unvollständige cmux.json, deren verschachtelte Objekte Schlüssel für Schlüssel zusammengeführt werden. cmux prüft jede Änderung vor dem Speichern gegen das Schema, behält deine Kommentare und übrigen Schlüssel bei und wendet die Änderung sofort an. Einstellungsaktionen und Presets laufen nur aus deiner globalen cmux.json und den Paketen, auf die sie verweist; Projektkonfigurationen können sie nicht deklarieren.", + "settingActionsCli": "Dieselben Änderungen funktionieren auch im Terminal: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> und <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Mit <confirm>confirm: true</confirm> fragt cmux vor dem Speichern nach und zeigt den entsprechenden cmux config-Befehl. Pfade werden an jedem \".\" getrennt, daher lässt sich ein Schlüssel, der selbst \".\" enthält (etwa ein <byCwd>workspaceGroups.byCwd</byCwd>-Eintrag für ~/src/app.web), so nicht ändern. Bearbeite ihn direkt in cmux.json.", "actionFields": "Aktionsfelder", "actionFieldTitle": "Titel der Command-Palette-Zeile, Beschriftung der Oberflächenschaltfläche, Menütitel und Titel des Trust-Dialogs, sofern kein Eintrag ihn überschreibt.", "actionFieldSubtitle": "Sekundärtext in Command Palette. description wird als Alias für subtitle akzeptiert.", diff --git a/web/messages/en.json b/web/messages/en.json index 46bf907e369a..e75e76745856 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -3396,6 +3396,12 @@ "actionTypeAgent": "Start a coding agent in a new terminal tab. Any CLI name works (claude, codex, opencode, or your own binary), with optional args.", "actionTypeWorkspaceCommand": "Run a named workspace definition from commands. Use this for multi-pane layouts, custom working directories, and startup commands.", "actionTypeWorkspace": "Create a workspace from an inline workspace definition, with optional restart behavior. Offered in the new-workspace plus-button menu automatically.", + "actionTypeSetting": "Change one setting in your global cmux.json, for example toggle a true/false setting or cycle through a list of values. See Setting actions below.", + "actionTypeSettingPreset": "Apply a named group of settings from settingPresets in one step.", + "settingActions": "Setting actions", + "settingActionsDesc": "A setting action names a settings <path>path</path> and exactly one of <set>set</set> (write a value), <toggle>toggle: true</toggle> (flip a true/false setting), <cycle>cycle</cycle> (move to the next value in a list, wrapping around), or <unset>unset: true</unset> (remove the key from cmux.json, so the value from the Settings window or the default applies). toggle and cycle start from the value cmux is using, including one you set in the Settings window. A settingPreset action applies an entry from <presets>settingPresets</presets>, a partial cmux.json whose nested objects merge key by key. cmux checks each change against the schema before saving, keeps your comments and other keys, and applies it right away. Setting actions and presets only run from your global cmux.json and the packs it references; project configs can't declare them.", + "settingActionsCli": "The same changes work from a terminal: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle>, and <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "With <confirm>confirm: true</confirm>, cmux asks before saving and shows the equivalent cmux config command. Paths split on every \".\", so a key that itself contains \".\" (such as a <byCwd>workspaceGroups.byCwd</byCwd> entry for ~/src/app.web) can't be changed this way. Edit it in cmux.json directly.", "actionFields": "Action fields", "actionFieldTitle": "Command Palette row title, surface button label, menu item title, and trust prompt title unless an entry overrides it.", "actionFieldSubtitle": "Command Palette secondary text. description is accepted as an alias for subtitle.", diff --git a/web/messages/es.json b/web/messages/es.json index f1237705410e..47e4c565252b 100644 --- a/web/messages/es.json +++ b/web/messages/es.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Ejecuta texto de shell en una terminal. Usa target para elegir la terminal actual o una pestaña nueva en el panel actual.", "actionTypeAgent": "Inicia un agente de programación compatible. Hoy admite codex y claude, con argumentos opcionales.", "actionTypeWorkspaceCommand": "Ejecuta una definición de espacio de trabajo con nombre desde commands. Úsalo para diseños multipanel, directorios de trabajo personalizados y comandos de inicio.", + "actionTypeSetting": "Cambia un ajuste de tu cmux.json global, por ejemplo para alternar un ajuste true/false o recorrer una lista de valores. Consulta Acciones de ajustes más abajo.", + "actionTypeSettingPreset": "Aplica de una vez un grupo de ajustes con nombre definido en settingPresets.", + "settingActions": "Acciones de ajustes", + "settingActionsDesc": "Una acción de ajuste indica la <path>path</path> de un ajuste y exactamente uno de <set>set</set> (escribe un valor), <toggle>toggle: true</toggle> (alterna un ajuste true/false), <cycle>cycle</cycle> (pasa al siguiente valor de una lista y vuelve al primero después del último) o <unset>unset: true</unset> (elimina la clave de cmux.json para que se aplique el valor de la ventana Configuración o el predeterminado). toggle y cycle parten del valor que cmux está usando, incluido uno que hayas definido en la ventana Configuración. Una acción settingPreset aplica una entrada de <presets>settingPresets</presets>, un cmux.json parcial cuyos objetos anidados se combinan clave por clave. cmux valida cada cambio con el esquema antes de guardarlo, conserva tus comentarios y las demás claves, y lo aplica de inmediato. Las acciones de ajustes y los presets solo se ejecutan desde tu cmux.json global y los paquetes a los que hace referencia; las configuraciones de proyecto no pueden declararlos.", + "settingActionsCli": "Los mismos cambios funcionan desde una terminal: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> y <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Con <confirm>confirm: true</confirm>, cmux pregunta antes de guardar y muestra el comando cmux config equivalente. Las rutas se dividen en cada \".\", así que una clave que contiene \".\" (como una entrada de <byCwd>workspaceGroups.byCwd</byCwd> para ~/src/app.web) no se puede cambiar de esta forma. Edítala directamente en cmux.json.", "actionFields": "Campos de acción", "actionFieldTitle": "Título de la fila en Command Palette, etiqueta del botón, título del elemento de menú y título del aviso de confianza, salvo que una entrada lo reemplace.", "actionFieldSubtitle": "Texto secundario en Command Palette. description se acepta como alias de subtitle.", diff --git a/web/messages/fr.json b/web/messages/fr.json index d252b635500b..9f9f8f52bdb0 100644 --- a/web/messages/fr.json +++ b/web/messages/fr.json @@ -2154,6 +2154,12 @@ "actionTypeCommand": "Exécute du texte shell dans un terminal. Utilisez target pour choisir le terminal courant ou un nouvel onglet dans le panneau courant.", "actionTypeAgent": "Lance un agent de codage pris en charge. Aujourd’hui, codex et claude sont pris en charge, avec des arguments optionnels.", "actionTypeWorkspaceCommand": "Exécute une définition d’espace de travail nommée depuis commands. Utilisez-le pour les dispositions multi-panneaux, les dossiers de travail personnalisés et les commandes de démarrage.", + "actionTypeSetting": "Modifie un réglage dans votre cmux.json global, par exemple pour basculer un réglage true/false ou parcourir une liste de valeurs. Voir Actions de réglage ci-dessous.", + "actionTypeSettingPreset": "Applique en une seule fois un groupe nommé de réglages défini dans settingPresets.", + "settingActions": "Actions de réglage", + "settingActionsDesc": "Une action de réglage indique le <path>path</path> d’un réglage et exactement un des champs suivants : <set>set</set> (écrire une valeur), <toggle>toggle: true</toggle> (inverser un réglage true/false), <cycle>cycle</cycle> (passer à la valeur suivante d’une liste, en revenant à la première après la dernière) ou <unset>unset: true</unset> (supprimer la clé de cmux.json pour que la valeur de la fenêtre Réglages ou la valeur par défaut s’applique). toggle et cycle partent de la valeur utilisée par cmux, y compris celle que vous avez définie dans la fenêtre Réglages. Une action settingPreset applique une entrée de <presets>settingPresets</presets>, un cmux.json partiel dont les objets imbriqués sont fusionnés clé par clé. cmux vérifie chaque modification par rapport au schéma avant de l’enregistrer, conserve vos commentaires et les autres clés, et l’applique immédiatement. Les actions de réglage et les presets ne s’exécutent que depuis votre cmux.json global et les packs qu’il référence ; les configurations de projet ne peuvent pas les déclarer.", + "settingActionsCli": "Les mêmes modifications fonctionnent depuis un terminal : <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> et <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Avec <confirm>confirm: true</confirm>, cmux demande confirmation avant d’enregistrer et affiche la commande cmux config équivalente. Les chemins sont découpés à chaque \".\", donc une clé qui contient elle-même \".\" (comme une entrée <byCwd>workspaceGroups.byCwd</byCwd> pour ~/src/app.web) ne peut pas être modifiée ainsi. Modifiez-la directement dans cmux.json.", "actionFields": "Champs d’action", "actionFieldTitle": "Titre de ligne dans Command Palette, libellé du bouton, titre de l’élément de menu et titre de l’invite de confiance, sauf si une entrée le remplace.", "actionFieldSubtitle": "Texte secondaire dans Command Palette. description est accepté comme alias de subtitle.", diff --git a/web/messages/it.json b/web/messages/it.json index 9554da000038..cfbba46cc8fc 100644 --- a/web/messages/it.json +++ b/web/messages/it.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Esegue testo shell in un terminale. Usa target per scegliere il terminale corrente o una nuova scheda nel pannello corrente.", "actionTypeAgent": "Avvia un agente di programmazione supportato. Oggi supporta codex e claude, con argomenti opzionali.", "actionTypeWorkspaceCommand": "Esegue una definizione di spazio di lavoro con nome da commands. Usalo per layout multipannello, directory di lavoro personalizzate e comandi di avvio.", + "actionTypeSetting": "Modifica un’impostazione nel tuo cmux.json globale, ad esempio per alternare un’impostazione true/false o scorrere un elenco di valori. Vedi Azioni sulle impostazioni più sotto.", + "actionTypeSettingPreset": "Applica in un solo passaggio un gruppo di impostazioni con nome definito in settingPresets.", + "settingActions": "Azioni sulle impostazioni", + "settingActionsDesc": "Un’azione sulle impostazioni indica il <path>path</path> di un’impostazione ed esattamente uno tra <set>set</set> (scrive un valore), <toggle>toggle: true</toggle> (inverte un’impostazione true/false), <cycle>cycle</cycle> (passa al valore successivo di un elenco, tornando al primo dopo l’ultimo) o <unset>unset: true</unset> (rimuove la chiave da cmux.json, così si applica il valore della finestra Impostazioni o quello predefinito). toggle e cycle partono dal valore che cmux sta usando, anche se lo hai impostato nella finestra Impostazioni. Un’azione settingPreset applica una voce di <presets>settingPresets</presets>, un cmux.json parziale i cui oggetti annidati vengono uniti chiave per chiave. cmux verifica ogni modifica rispetto allo schema prima di salvarla, mantiene i tuoi commenti e le altre chiavi e la applica subito. Le azioni sulle impostazioni e i preset vengono eseguiti solo dal tuo cmux.json globale e dai pacchetti a cui fa riferimento; le configurazioni di progetto non possono dichiararli.", + "settingActionsCli": "Le stesse modifiche funzionano anche da terminale: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> e <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Con <confirm>confirm: true</confirm>, cmux chiede conferma prima di salvare e mostra il comando cmux config equivalente. I percorsi vengono divisi a ogni \".\", quindi una chiave che contiene a sua volta \".\" (come una voce <byCwd>workspaceGroups.byCwd</byCwd> per ~/src/app.web) non si può modificare in questo modo. Modificala direttamente in cmux.json.", "actionFields": "Campi dell’azione", "actionFieldTitle": "Titolo della riga in Command Palette, etichetta del pulsante, titolo della voce di menu e titolo della richiesta di attendibilità, salvo override di una voce.", "actionFieldSubtitle": "Testo secondario in Command Palette. description è accettato come alias di subtitle.", diff --git a/web/messages/ja.json b/web/messages/ja.json index c6a899490727..d53c6ed58fce 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -3319,6 +3319,12 @@ "actionTypeAgent": "コーディングエージェントを新しいターミナルタブで起動します。任意の CLI 名(claude、codex、opencode、独自バイナリなど)を指定でき、args も併用できます。", "actionTypeWorkspaceCommand": "commands から名前付きのワークスペース定義を実行します。複数ペインのレイアウト、カスタム作業ディレクトリ、起動コマンドに使います。", "actionTypeWorkspace": "アクション内に埋め込んだワークスペース定義から新しいワークスペースを作成します。restart の指定も可能で、新規ワークスペースのプラスボタンメニューに自動的に表示されます。", + "actionTypeSetting": "グローバルの cmux.json の設定を 1 つ変更します。たとえば true/false の設定を切り替えたり、値のリストを順に切り替えたりできます。詳しくは下の「設定アクション」を参照してください。", + "actionTypeSettingPreset": "settingPresets に登録した名前付きの設定グループをまとめて適用します。", + "settingActions": "設定アクション", + "settingActionsDesc": "設定アクションには設定の <path>path</path> と、次のうち 1 つだけを指定します: <set>set</set>(値を書き込む)、<toggle>toggle: true</toggle>(true/false の設定を切り替える)、<cycle>cycle</cycle>(リスト内の次の値に進み、最後まで来たら先頭に戻る)、<unset>unset: true</unset>(cmux.json からキーを削除し、設定ウインドウで選んだ値か既定値に戻す)。toggle と cycle は、設定ウインドウで変更した値を含め、cmux が現在使っている値から始まります。settingPreset アクションは <presets>settingPresets</presets> のエントリを適用します。エントリは部分的な cmux.json で、入れ子のオブジェクトはキーごとにマージされます。cmux は保存前にすべての変更をスキーマで検証し、コメントや他のキーはそのまま残して、変更をすぐに反映します。設定アクションとプリセットはグローバルの cmux.json と、そこから参照するパックからのみ実行でき、プロジェクトの設定では宣言できません。", + "settingActionsCli": "同じ変更はターミナルからも行えます: <set>cmux config set terminal.scrollSpeed 1.4</set>、<toggle>cmux config toggle fileEditor.wordWrap</toggle>、<preset>cmux config preset sidebar.quiet</preset>。", + "settingActionsLimits": "<confirm>confirm: true</confirm> を指定すると、cmux は保存前に確認し、同じ変更を行う cmux config コマンドを表示します。パスはすべての \".\" で分割されるため、キー自体に \".\" を含むもの(~/src/app.web 用の <byCwd>workspaceGroups.byCwd</byCwd> エントリなど)はこの方法では変更できません。cmux.json で直接編集してください。", "actionFields": "アクションのフィールド", "actionFieldTitle": "Command Palette の行タイトル、サーフェスボタンのラベル、メニュー項目タイトル、信頼確認のタイトルです。項目側で上書きできます。", "actionFieldSubtitle": "Command Palette の補助テキストです。description は subtitle の別名として使えます。", diff --git a/web/messages/km.json b/web/messages/km.json index 564955ca9691..49f66c6b5e69 100644 --- a/web/messages/km.json +++ b/web/messages/km.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "រត់ shell text ក្នុង terminal។ ប្រើ target ដើម្បីជ្រើស terminal បច្ចុប្បន្ន ឬ tab ថ្មីក្នុង pane បច្ចុប្បន្ន។", "actionTypeAgent": "ចាប់ផ្តើម coding agent ដែលគាំទ្រ។ បច្ចុប្បន្នគាំទ្រ codex និង claude ជាមួយ args ជម្រើស។", "actionTypeWorkspaceCommand": "រត់ named workspace definition ពី commands។ ប្រើវាសម្រាប់ multi-pane layouts, working directories ផ្ទាល់ខ្លួន និង startup commands។", + "actionTypeSetting": "ប្តូរ setting មួយក្នុង cmux.json global របស់អ្នក ឧទាហរណ៍ បិទ/បើក setting true/false ឬប្តូរទៅតម្លៃបន្ទាប់ក្នុងបញ្ជីតម្លៃ។ មើល Action ការកំណត់ ខាងក្រោម។", + "actionTypeSettingPreset": "អនុវត្តក្រុម settings ដែលមានឈ្មោះពី settingPresets ក្នុងមួយជំហាន។", + "settingActions": "Action ការកំណត់", + "settingActionsDesc": "Action ការកំណត់មួយកំណត់ <path>path</path> របស់ setting និងមួយគត់ក្នុងចំណោម <set>set</set> (សរសេរតម្លៃ), <toggle>toggle: true</toggle> (បិទ/បើក setting true/false), <cycle>cycle</cycle> (ទៅតម្លៃបន្ទាប់ក្នុងបញ្ជី ហើយត្រឡប់ទៅតម្លៃដំបូងវិញក្រោយតម្លៃចុងក្រោយ) ឬ <unset>unset: true</unset> (លុប key ចេញពី cmux.json ដើម្បីឱ្យប្រើតម្លៃពីបង្អួច ការកំណត់ ឬតម្លៃលំនាំដើម)។ toggle និង cycle ចាប់ផ្តើមពីតម្លៃដែល cmux កំពុងប្រើ រួមទាំងតម្លៃដែលអ្នកកំណត់ក្នុងបង្អួច ការកំណត់។ Action settingPreset អនុវត្ត entry មួយពី <presets>settingPresets</presets> ដែលជា cmux.json មួយផ្នែក ហើយ nested objects របស់វាត្រូវ merge តាម key នីមួយៗ។ cmux ពិនិត្យការផ្លាស់ប្តូរនីមួយៗជាមួយ schema មុនរក្សាទុក រក្សា comments និង keys ផ្សេងទៀតរបស់អ្នក ហើយអនុវត្តភ្លាមៗ។ Action ការកំណត់ និង presets រត់បានតែពី cmux.json global របស់អ្នក និង packs ដែលវាយោងទៅប៉ុណ្ណោះ; project configs មិនអាចប្រកាសវាបានទេ។", + "settingActionsCli": "ការផ្លាស់ប្តូរដូចគ្នាអាចធ្វើពី terminal បានដែរ: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> និង <preset>cmux config preset sidebar.quiet</preset>។", + "settingActionsLimits": "ជាមួយ <confirm>confirm: true</confirm>, cmux សួរមុនរក្សាទុក ហើយបង្ហាញ command cmux config ដែលស្មើគ្នា។ Paths ត្រូវបំបែកនៅគ្រប់ \".\" ដូច្នេះ key ដែលមាន \".\" ក្នុងឈ្មោះខ្លួនឯង (ដូចជា entry <byCwd>workspaceGroups.byCwd</byCwd> សម្រាប់ ~/src/app.web) មិនអាចប្តូរតាមវិធីនេះបានទេ។ សូមកែវាដោយផ្ទាល់ក្នុង cmux.json។", "actionFields": "វាល action", "actionFieldTitle": "ចំណងជើង row ក្នុង Command Palette, label របស់ surface button, title របស់ menu item និង title របស់ trust prompt លុះត្រាតែ entry មួយ override វា។", "actionFieldSubtitle": "អត្ថបទ secondary ក្នុង Command Palette។ description អាចប្រើជា alias សម្រាប់ subtitle។", diff --git a/web/messages/ko.json b/web/messages/ko.json index f3bd9164d0f5..d16cc9f838e1 100644 --- a/web/messages/ko.json +++ b/web/messages/ko.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "터미널에서 셸 텍스트를 실행합니다. target으로 현재 터미널 또는 현재 패널의 새 탭을 선택합니다.", "actionTypeAgent": "지원되는 코딩 에이전트를 시작합니다. 현재 codex와 claude를 지원하며 선택적 인수를 줄 수 있습니다.", "actionTypeWorkspaceCommand": "commands의 이름 있는 워크스페이스 정의를 실행합니다. 여러 패널 레이아웃, 사용자 지정 작업 디렉터리, 시작 명령에 사용합니다.", + "actionTypeSetting": "전역 cmux.json의 설정 하나를 변경합니다. 예를 들어 true/false 설정을 전환하거나 값 목록을 순환할 수 있습니다. 아래 설정 액션을 참고하세요.", + "actionTypeSettingPreset": "settingPresets에 있는 이름 있는 설정 그룹을 한 번에 적용합니다.", + "settingActions": "설정 액션", + "settingActionsDesc": "설정 액션은 설정 <path>path</path>와 다음 중 정확히 하나를 지정합니다: <set>set</set>(값 쓰기), <toggle>toggle: true</toggle>(true/false 설정 전환), <cycle>cycle</cycle>(목록의 다음 값으로 이동하고 마지막 값 다음에는 처음으로 돌아감), <unset>unset: true</unset>(cmux.json에서 키를 제거해 설정 창의 값이나 기본값이 적용되게 함). toggle과 cycle은 설정 창에서 지정한 값을 포함해 cmux가 현재 사용 중인 값에서 시작합니다. settingPreset 액션은 <presets>settingPresets</presets>의 항목을 적용합니다. 각 항목은 부분 cmux.json이며 중첩 객체는 키 단위로 병합됩니다. cmux는 저장하기 전에 모든 변경을 스키마로 검사하고, 주석과 다른 키는 그대로 두며, 변경을 즉시 적용합니다. 설정 액션과 프리셋은 전역 cmux.json과 그 파일이 참조하는 팩에서만 실행되며, 프로젝트 설정에서는 선언할 수 없습니다.", + "settingActionsCli": "같은 변경은 터미널에서도 할 수 있습니다: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle>, <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "<confirm>confirm: true</confirm>를 지정하면 cmux가 저장하기 전에 확인하고 같은 변경을 하는 cmux config 명령을 보여줍니다. 경로는 모든 \".\"에서 나뉘므로 키 자체에 \".\"가 들어 있으면(예: ~/src/app.web에 대한 <byCwd>workspaceGroups.byCwd</byCwd> 항목) 이 방법으로 변경할 수 없습니다. cmux.json에서 직접 편집하세요.", "actionFields": "액션 필드", "actionFieldTitle": "Command Palette 행 제목, 서피스 버튼 레이블, 메뉴 항목 제목, 신뢰 프롬프트 제목입니다. 항목에서 재정의할 수 있습니다.", "actionFieldSubtitle": "Command Palette의 보조 텍스트입니다. description은 subtitle의 별칭으로 사용할 수 있습니다.", diff --git a/web/messages/no.json b/web/messages/no.json index 025c5e33e119..67d20f14484f 100644 --- a/web/messages/no.json +++ b/web/messages/no.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Kjører shell-tekst i en terminal. Bruk target for å velge gjeldende terminal eller en ny fane i gjeldende panel.", "actionTypeAgent": "Starter en støttet kodeagent. I dag støttes codex og claude, med valgfrie argumenter.", "actionTypeWorkspaceCommand": "Kjører en navngitt arbeidsområdedefinisjon fra commands. Bruk dette for flerpane-layouter, egendefinerte arbeidsmapper og oppstartskommandoer.", + "actionTypeSetting": "Endrer én innstilling i din globale cmux.json, for eksempel slå en true/false-innstilling av eller på eller bla gjennom en liste med verdier. Se Innstillingshandlinger nedenfor.", + "actionTypeSettingPreset": "Bruker en navngitt gruppe innstillinger fra settingPresets i ett steg.", + "settingActions": "Innstillingshandlinger", + "settingActionsDesc": "En innstillingshandling angir en <path>path</path> til en innstilling og nøyaktig én av <set>set</set> (skriv en verdi), <toggle>toggle: true</toggle> (snu en true/false-innstilling), <cycle>cycle</cycle> (gå til neste verdi i en liste og start på nytt etter den siste) eller <unset>unset: true</unset> (fjern nøkkelen fra cmux.json, slik at verdien fra Innstillinger-vinduet eller standardverdien gjelder). toggle og cycle starter fra verdien cmux bruker, også en du har satt i Innstillinger-vinduet. En settingPreset-handling bruker en oppføring fra <presets>settingPresets</presets>, en delvis cmux.json der nestede objekter slås sammen nøkkel for nøkkel. cmux kontrollerer hver endring mot skjemaet før lagring, beholder kommentarene dine og andre nøkler og tar i bruk endringen med én gang. Innstillingshandlinger og presets kjører bare fra din globale cmux.json og pakkene den viser til; prosjektkonfigurasjoner kan ikke deklarere dem.", + "settingActionsCli": "De samme endringene fungerer fra en terminal: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> og <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Med <confirm>confirm: true</confirm> spør cmux før lagring og viser den tilsvarende cmux config-kommandoen. Stier deles ved hvert \".\", så en nøkkel som selv inneholder \".\" (for eksempel en <byCwd>workspaceGroups.byCwd</byCwd>-oppføring for ~/src/app.web), kan ikke endres på denne måten. Rediger den direkte i cmux.json.", "actionFields": "Handlingsfelt", "actionFieldTitle": "Tittel i Command Palette-raden, knappetekst, menypunkttittel og tittel i tillitsdialogen, med mindre en oppføring overstyrer den.", "actionFieldSubtitle": "Sekundærtekst i Command Palette. description godtas som alias for subtitle.", diff --git a/web/messages/pl.json b/web/messages/pl.json index 823ef3e96a94..ca74a541f535 100644 --- a/web/messages/pl.json +++ b/web/messages/pl.json @@ -2154,6 +2154,12 @@ "actionTypeCommand": "Uruchamia tekst shell w terminalu. Użyj target, aby wybrać bieżący terminal albo nową kartę w bieżącym panelu.", "actionTypeAgent": "Uruchamia obsługiwanego agenta programistycznego. Obecnie obsługuje codex i claude, z opcjonalnymi argumentami.", "actionTypeWorkspaceCommand": "Uruchamia nazwaną definicję obszaru roboczego z commands. Używaj do układów wielopanelowych, własnych katalogów roboczych i poleceń startowych.", + "actionTypeSetting": "Zmienia jedno ustawienie w globalnym pliku cmux.json, na przykład przełącza ustawienie true/false albo przechodzi przez listę wartości. Zobacz Akcje ustawień poniżej.", + "actionTypeSettingPreset": "Stosuje w jednym kroku nazwaną grupę ustawień z settingPresets.", + "settingActions": "Akcje ustawień", + "settingActionsDesc": "Akcja ustawienia podaje <path>path</path> ustawienia i dokładnie jedno z: <set>set</set> (zapisuje wartość), <toggle>toggle: true</toggle> (przełącza ustawienie true/false), <cycle>cycle</cycle> (przechodzi do następnej wartości z listy, a po ostatniej wraca do pierwszej) albo <unset>unset: true</unset> (usuwa klucz z cmux.json, więc obowiązuje wartość z okna Ustawienia lub wartość domyślna). toggle i cycle zaczynają od wartości, której cmux aktualnie używa, także tej ustawionej w oknie Ustawienia. Akcja settingPreset stosuje wpis z <presets>settingPresets</presets>, czyli częściowy cmux.json, którego zagnieżdżone obiekty są scalane klucz po kluczu. cmux przed zapisem sprawdza każdą zmianę ze schematem, zachowuje komentarze i pozostałe klucze, a potem od razu stosuje zmianę. Akcje ustawień i presety działają tylko z globalnego cmux.json i pakietów, do których się on odwołuje; konfiguracje projektu nie mogą ich deklarować.", + "settingActionsCli": "Te same zmiany działają z terminala: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> i <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Z <confirm>confirm: true</confirm> cmux pyta przed zapisem i pokazuje odpowiadające polecenie cmux config. Ścieżki są dzielone przy każdym znaku \".\", więc klucza, który sam zawiera \".\" (np. wpisu <byCwd>workspaceGroups.byCwd</byCwd> dla ~/src/app.web), nie da się zmienić w ten sposób. Edytuj go bezpośrednio w cmux.json.", "actionFields": "Pola akcji", "actionFieldTitle": "Tytuł wiersza Command Palette, etykieta przycisku, tytuł elementu menu i tytuł prośby o zaufanie, chyba że wpis go zastępuje.", "actionFieldSubtitle": "Tekst pomocniczy w Command Palette. description jest akceptowane jako alias dla subtitle.", diff --git a/web/messages/pt-BR.json b/web/messages/pt-BR.json index 16b6cf96ef75..7e569f4351cd 100644 --- a/web/messages/pt-BR.json +++ b/web/messages/pt-BR.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Executa texto shell em um terminal. Use target para escolher o terminal atual ou uma nova aba no painel atual.", "actionTypeAgent": "Inicia um agente de programação compatível. Hoje oferece suporte a codex e claude, com argumentos opcionais.", "actionTypeWorkspaceCommand": "Executa uma definição de workspace nomeada em commands. Use para layouts com vários painéis, diretórios de trabalho personalizados e comandos de inicialização.", + "actionTypeSetting": "Altera uma configuração no seu cmux.json global, por exemplo para alternar uma configuração true/false ou percorrer uma lista de valores. Veja Ações de configuração abaixo.", + "actionTypeSettingPreset": "Aplica de uma vez um grupo nomeado de configurações definido em settingPresets.", + "settingActions": "Ações de configuração", + "settingActionsDesc": "Uma ação de configuração indica o <path>path</path> de uma configuração e exatamente um entre <set>set</set> (grava um valor), <toggle>toggle: true</toggle> (alterna uma configuração true/false), <cycle>cycle</cycle> (avança para o próximo valor de uma lista, voltando ao primeiro depois do último) ou <unset>unset: true</unset> (remove a chave do cmux.json, para que valha o valor da janela Configurações ou o padrão). toggle e cycle partem do valor que o cmux está usando, inclusive um definido na janela Configurações. Uma ação settingPreset aplica uma entrada de <presets>settingPresets</presets>, um cmux.json parcial cujos objetos aninhados são mesclados chave por chave. O cmux valida cada alteração com o esquema antes de salvar, mantém seus comentários e as demais chaves e aplica a alteração na hora. Ações de configuração e presets só rodam a partir do seu cmux.json global e dos pacotes que ele referencia; configurações de projeto não podem declará-los.", + "settingActionsCli": "As mesmas alterações funcionam a partir de um terminal: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> e <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "Com <confirm>confirm: true</confirm>, o cmux pergunta antes de salvar e mostra o comando cmux config equivalente. Os caminhos são divididos em cada \".\", então uma chave que contém \".\" (como uma entrada de <byCwd>workspaceGroups.byCwd</byCwd> para ~/src/app.web) não pode ser alterada dessa forma. Edite-a diretamente no cmux.json.", "actionFields": "Campos da ação", "actionFieldTitle": "Título da linha na Command Palette, rótulo do botão, título do item de menu e título do prompt de confiança, a menos que uma entrada substitua.", "actionFieldSubtitle": "Texto secundário na Command Palette. description é aceito como alias de subtitle.", diff --git a/web/messages/ru.json b/web/messages/ru.json index 298af30b0720..c3c9e86b1019 100644 --- a/web/messages/ru.json +++ b/web/messages/ru.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Запускает shell-текст в терминале. Используйте target, чтобы выбрать текущий терминал или новую вкладку в текущей панели.", "actionTypeAgent": "Запускает поддерживаемого кодового агента. Сейчас поддерживаются codex и claude с необязательными аргументами.", "actionTypeWorkspaceCommand": "Запускает именованное определение рабочей области из commands. Используйте для многопанельных раскладок, пользовательских рабочих каталогов и стартовых команд.", + "actionTypeSetting": "Изменяет одну настройку в вашем глобальном cmux.json, например переключает настройку true/false или перебирает список значений. См. раздел «Действия с настройками» ниже.", + "actionTypeSettingPreset": "Применяет именованную группу настроек из settingPresets за один шаг.", + "settingActions": "Действия с настройками", + "settingActionsDesc": "Действие с настройкой указывает <path>path</path> настройки и ровно одно из полей: <set>set</set> (записать значение), <toggle>toggle: true</toggle> (переключить настройку true/false), <cycle>cycle</cycle> (перейти к следующему значению из списка, после последнего вернуться к первому) или <unset>unset: true</unset> (удалить ключ из cmux.json, чтобы действовало значение из окна «Настройки» или значение по умолчанию). toggle и cycle начинают со значения, которое cmux использует сейчас, в том числе заданного в окне «Настройки». Действие settingPreset применяет запись из <presets>settingPresets</presets> — частичный cmux.json, вложенные объекты которого объединяются по ключам. Перед сохранением cmux проверяет каждое изменение по схеме, сохраняет ваши комментарии и остальные ключи и сразу применяет изменение. Действия с настройками и пресеты работают только из вашего глобального cmux.json и пакетов, на которые он ссылается; конфигурации проектов не могут их объявлять.", + "settingActionsCli": "Те же изменения можно сделать из терминала: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> и <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "С <confirm>confirm: true</confirm> cmux спрашивает подтверждение перед сохранением и показывает эквивалентную команду cmux config. Пути разбиваются по каждому символу \".\", поэтому ключ, который сам содержит \".\" (например, запись <byCwd>workspaceGroups.byCwd</byCwd> для ~/src/app.web), так изменить нельзя. Отредактируйте его прямо в cmux.json.", "actionFields": "Поля действия", "actionFieldTitle": "Заголовок строки Command Palette, подпись кнопки, заголовок пункта меню и заголовок запроса доверия, если запись не переопределяет его.", "actionFieldSubtitle": "Вторичный текст в Command Palette. description принимается как псевдоним subtitle.", diff --git a/web/messages/th.json b/web/messages/th.json index 2db50b3404a0..af0a9ec10ef6 100644 --- a/web/messages/th.json +++ b/web/messages/th.json @@ -2155,6 +2155,12 @@ "actionTypeCommand": "รันข้อความ shell ใน terminal ใช้ target เพื่อเลือก terminal ปัจจุบันหรือ tab ใหม่ใน pane ปัจจุบัน", "actionTypeAgent": "เริ่ม coding agent ที่รองรับ ปัจจุบันรองรับ codex และ claude พร้อม args แบบเลือกได้", "actionTypeWorkspaceCommand": "รัน workspace definition ที่มีชื่อจาก commands ใช้สำหรับเลย์เอาต์หลาย pane, working directory แบบกำหนดเอง และ startup commands", + "actionTypeSetting": "เปลี่ยนการตั้งค่าหนึ่งรายการใน cmux.json แบบ global ของคุณ เช่น สลับการตั้งค่าแบบ true/false หรือวนผ่านรายการค่า ดู Action การตั้งค่า ด้านล่าง", + "actionTypeSettingPreset": "ใช้กลุ่มการตั้งค่าที่มีชื่อจาก settingPresets ในขั้นตอนเดียว", + "settingActions": "Action การตั้งค่า", + "settingActionsDesc": "action การตั้งค่าระบุ <path>path</path> ของการตั้งค่า และระบุเพียงหนึ่งอย่างจาก <set>set</set> (เขียนค่า), <toggle>toggle: true</toggle> (สลับการตั้งค่าแบบ true/false), <cycle>cycle</cycle> (ไปยังค่าถัดไปในรายการ และวนกลับไปค่าแรกเมื่อถึงค่าสุดท้าย) หรือ <unset>unset: true</unset> (ลบ key ออกจาก cmux.json เพื่อให้ใช้ค่าจากหน้าต่างการตั้งค่าหรือค่าเริ่มต้น) toggle และ cycle เริ่มจากค่าที่ cmux ใช้อยู่ รวมถึงค่าที่คุณตั้งไว้ในหน้าต่างการตั้งค่า action settingPreset จะใช้ entry จาก <presets>settingPresets</presets> ซึ่งเป็น cmux.json บางส่วนที่ object ซ้อนกันจะถูก merge ทีละ key cmux ตรวจสอบการเปลี่ยนแปลงแต่ละรายการกับ schema ก่อนบันทึก เก็บ comment และ key อื่นของคุณไว้ แล้วนำการเปลี่ยนแปลงไปใช้ทันที action การตั้งค่าและ preset ทำงานได้เฉพาะจาก cmux.json แบบ global ของคุณและ pack ที่ไฟล์นั้นอ้างถึงเท่านั้น config ของโปรเจกต์ประกาศสิ่งเหล่านี้ไม่ได้", + "settingActionsCli": "ทำการเปลี่ยนแปลงเดียวกันจาก terminal ได้เช่นกัน: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> และ <preset>cmux config preset sidebar.quiet</preset>", + "settingActionsLimits": "เมื่อใช้ <confirm>confirm: true</confirm> cmux จะถามก่อนบันทึกและแสดงคำสั่ง cmux config ที่เทียบเท่า path จะถูกแยกที่ \".\" ทุกตัว ดังนั้น key ที่มี \".\" อยู่ในชื่อเอง (เช่น entry <byCwd>workspaceGroups.byCwd</byCwd> สำหรับ ~/src/app.web) จึงเปลี่ยนด้วยวิธีนี้ไม่ได้ ให้แก้ไขใน cmux.json โดยตรง", "actionFields": "ฟิลด์ของ action", "actionFieldTitle": "ชื่อแถวใน Command Palette, label ของปุ่ม, ชื่อ item ในเมนู และชื่อ trust prompt เว้นแต่ entry จะ override ค่าไว้", "actionFieldSubtitle": "ข้อความรองใน Command Palette โดย description ใช้เป็น alias ของ subtitle ได้", diff --git a/web/messages/tr.json b/web/messages/tr.json index 54f0807af42a..a36e993a617e 100644 --- a/web/messages/tr.json +++ b/web/messages/tr.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "Terminalde shell metni çalıştırır. Geçerli terminali veya geçerli bölmedeki yeni sekmeyi seçmek için target kullanın.", "actionTypeAgent": "Desteklenen bir kodlama ajanı başlatır. Bugün codex ve claude desteklenir, isteğe bağlı argümanlarla.", "actionTypeWorkspaceCommand": "commands içinden adlandırılmış bir çalışma alanı tanımını çalıştırır. Çok bölmeli düzenler, özel çalışma dizinleri ve başlangıç komutları için kullanın.", + "actionTypeSetting": "Genel cmux.json dosyanızdaki bir ayarı değiştirir; örneğin true/false bir ayarı açıp kapatır veya bir değer listesinde sırayla ilerler. Aşağıdaki Ayar eylemleri bölümüne bakın.", + "actionTypeSettingPreset": "settingPresets içindeki adlandırılmış bir ayar grubunu tek adımda uygular.", + "settingActions": "Ayar eylemleri", + "settingActionsDesc": "Bir ayar eylemi, ayarın yolunu veren <path>path</path> ile şunlardan tam olarak birini belirtir: <set>set</set> (bir değer yazar), <toggle>toggle: true</toggle> (true/false bir ayarı tersine çevirir), <cycle>cycle</cycle> (listedeki sonraki değere geçer, sonuncudan sonra başa döner) veya <unset>unset: true</unset> (anahtarı cmux.json dosyasından kaldırır; böylece Ayarlar penceresindeki değer ya da varsayılan değer geçerli olur). toggle ve cycle, Ayarlar penceresinde belirlediğiniz değer dahil, cmux’un o anda kullandığı değerden başlar. settingPreset eylemi <presets>settingPresets</presets> içinden bir girdiyi uygular; bu girdi, iç içe nesneleri anahtar anahtar birleştirilen kısmi bir cmux.json’dur. cmux her değişikliği kaydetmeden önce şemaya göre denetler, yorumlarınızı ve diğer anahtarları korur ve değişikliği hemen uygular. Ayar eylemleri ve preset’ler yalnızca genel cmux.json dosyanızdan ve onun başvurduğu paketlerden çalışır; proje yapılandırmaları bunları tanımlayamaz.", + "settingActionsCli": "Aynı değişiklikler terminalden de yapılabilir: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> ve <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "<confirm>confirm: true</confirm> ile cmux kaydetmeden önce sorar ve eşdeğer cmux config komutunu gösterir. Yollar her \".\" karakterinde bölünür; bu yüzden kendisi \".\" içeren bir anahtar (örneğin ~/src/app.web için bir <byCwd>workspaceGroups.byCwd</byCwd> girdisi) bu yolla değiştirilemez. Onu doğrudan cmux.json içinde düzenleyin.", "actionFields": "Eylem alanları", "actionFieldTitle": "Command Palette satır başlığı, yüzey düğmesi etiketi, menü öğesi başlığı ve güven istemi başlığıdır, bir girdi üzerine yazmadığı sürece.", "actionFieldSubtitle": "Command Palette ikincil metni. description, subtitle için alias olarak kabul edilir.", diff --git a/web/messages/uk.json b/web/messages/uk.json index 571cc9de790c..4baf63cd2211 100644 --- a/web/messages/uk.json +++ b/web/messages/uk.json @@ -2133,6 +2133,12 @@ "actionTypeCommand": "Запускає shell-текст у терміналі. Використовуйте target, щоб вибрати поточний термінал або нову вкладку в поточній панелі.", "actionTypeAgent": "Запускає підтримуваного кодового агента. Наразі підтримуються codex і claude з необов’язковими аргументами.", "actionTypeWorkspaceCommand": "Запускає іменоване визначення робочого простору з commands. Використовуйте для багатопанельних розкладок, власних робочих каталогів і стартових команд.", + "actionTypeSetting": "Змінює один параметр у вашому глобальному cmux.json, наприклад перемикає параметр true/false або перебирає список значень. Див. розділ «Дії з параметрами» нижче.", + "actionTypeSettingPreset": "Застосовує іменовану групу параметрів із settingPresets за один крок.", + "settingActions": "Дії з параметрами", + "settingActionsDesc": "Дія з параметром вказує <path>path</path> параметра й рівно одне з полів: <set>set</set> (записати значення), <toggle>toggle: true</toggle> (перемкнути параметр true/false), <cycle>cycle</cycle> (перейти до наступного значення зі списку, а після останнього повернутися до першого) або <unset>unset: true</unset> (видалити ключ із cmux.json, щоб діяло значення з вікна «Параметри» або типове значення). toggle і cycle починають зі значення, яке cmux використовує зараз, зокрема заданого у вікні «Параметри». Дія settingPreset застосовує запис із <presets>settingPresets</presets> — частковий cmux.json, вкладені об’єкти якого об’єднуються за ключами. Перед збереженням cmux перевіряє кожну зміну за схемою, зберігає ваші коментарі та інші ключі й одразу застосовує зміну. Дії з параметрами та пресети працюють лише з вашого глобального cmux.json і пакетів, на які він посилається; конфігурації проєктів не можуть їх оголошувати.", + "settingActionsCli": "Ті самі зміни можна зробити з термінала: <set>cmux config set terminal.scrollSpeed 1.4</set>, <toggle>cmux config toggle fileEditor.wordWrap</toggle> і <preset>cmux config preset sidebar.quiet</preset>.", + "settingActionsLimits": "З <confirm>confirm: true</confirm> cmux запитує підтвердження перед збереженням і показує відповідну команду cmux config. Шляхи розбиваються за кожним символом \".\", тому ключ, який сам містить \".\" (наприклад, запис <byCwd>workspaceGroups.byCwd</byCwd> для ~/src/app.web), так змінити не можна. Відредагуйте його безпосередньо в cmux.json.", "actionFields": "Поля дії", "actionFieldTitle": "Заголовок рядка Command Palette, підпис кнопки, заголовок пункту меню та заголовок запиту довіри, якщо запис не перевизначає його.", "actionFieldSubtitle": "Вторинний текст у Command Palette. description приймається як псевдонім subtitle.", diff --git a/web/messages/zh-CN.json b/web/messages/zh-CN.json index 7fac3b0c81a6..9b618350edda 100644 --- a/web/messages/zh-CN.json +++ b/web/messages/zh-CN.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "在终端中运行 shell 文本。使用 target 选择当前终端或当前面板中的新标签。", "actionTypeAgent": "启动受支持的编码代理。目前支持 codex 和 claude,并可传入可选参数。", "actionTypeWorkspaceCommand": "运行 commands 中的命名工作区定义。用于多面板布局、自定义工作目录和启动命令。", + "actionTypeSetting": "修改全局 cmux.json 中的一项设置,例如切换 true/false 设置,或在一组值之间循环。请参阅下方的设置操作。", + "actionTypeSettingPreset": "一次性应用 settingPresets 中的一组命名设置。", + "settingActions": "设置操作", + "settingActionsDesc": "设置操作需指定设置的 <path>path</path>,并且只能指定以下其中一项:<set>set</set>(写入一个值)、<toggle>toggle: true</toggle>(切换 true/false 设置)、<cycle>cycle</cycle>(切换到列表中的下一个值,到末尾后回到开头)或 <unset>unset: true</unset>(从 cmux.json 中删除该键,改用设置窗口中的值或默认值)。toggle 和 cycle 从 cmux 当前使用的值开始,包括你在设置窗口中设定的值。settingPreset 操作会应用 <presets>settingPresets</presets> 中的一个条目,即一份部分 cmux.json,其中的嵌套对象按键逐一合并。cmux 在保存前会按 schema 检查每项更改,保留你的注释和其他键,并立即应用更改。设置操作和预设只能从全局 cmux.json 及其引用的包中运行,项目配置不能声明它们。", + "settingActionsCli": "同样的更改也可以在终端中完成:<set>cmux config set terminal.scrollSpeed 1.4</set>、<toggle>cmux config toggle fileEditor.wordWrap</toggle> 和 <preset>cmux config preset sidebar.quiet</preset>。", + "settingActionsLimits": "设置 <confirm>confirm: true</confirm> 后,cmux 会在保存前询问,并显示对应的 cmux config 命令。路径会在每个 \".\" 处拆分,因此本身包含 \".\" 的键(例如 ~/src/app.web 对应的 <byCwd>workspaceGroups.byCwd</byCwd> 条目)无法用这种方式修改。请直接在 cmux.json 中编辑。", "actionFields": "操作字段", "actionFieldTitle": "Command Palette 行标题、表面按钮标签、菜单项标题以及信任提示标题,除非条目自行覆盖。", "actionFieldSubtitle": "Command Palette 中的副标题文本。description 可作为 subtitle 的别名。", diff --git a/web/messages/zh-TW.json b/web/messages/zh-TW.json index f7c3f82a2d74..090b3df47573 100644 --- a/web/messages/zh-TW.json +++ b/web/messages/zh-TW.json @@ -2153,6 +2153,12 @@ "actionTypeCommand": "在終端機中執行 shell 文字。使用 target 選擇目前終端機或目前面板中的新分頁。", "actionTypeAgent": "啟動支援的程式碼代理。現在支援 codex 與 claude,並可使用選用引數。", "actionTypeWorkspaceCommand": "執行 commands 中具名的工作區定義。用於多面板配置、自訂工作目錄與啟動命令。", + "actionTypeSetting": "修改全域 cmux.json 中的一項設定,例如切換 true/false 設定,或在一組值之間循環。請參閱下方的設定動作。", + "actionTypeSettingPreset": "一次套用 settingPresets 中具名的一組設定。", + "settingActions": "設定動作", + "settingActionsDesc": "設定動作需指定設定的 <path>path</path>,並且只能指定以下其中一項:<set>set</set>(寫入值)、<toggle>toggle: true</toggle>(切換 true/false 設定)、<cycle>cycle</cycle>(移到清單中的下一個值,到結尾後回到開頭)或 <unset>unset: true</unset>(從 cmux.json 移除該鍵,改用設定視窗中的值或預設值)。toggle 與 cycle 會從 cmux 目前使用的值開始,包括你在設定視窗中設定的值。settingPreset 動作會套用 <presets>settingPresets</presets> 中的一個項目,也就是一份部分的 cmux.json,其中的巢狀物件會逐鍵合併。cmux 在儲存前會依 schema 檢查每項變更,保留你的註解與其他鍵,並立即套用變更。設定動作與預設組只能從全域 cmux.json 及其參照的套件中執行,專案設定無法宣告它們。", + "settingActionsCli": "同樣的變更也可以在終端機中完成:<set>cmux config set terminal.scrollSpeed 1.4</set>、<toggle>cmux config toggle fileEditor.wordWrap</toggle> 與 <preset>cmux config preset sidebar.quiet</preset>。", + "settingActionsLimits": "設定 <confirm>confirm: true</confirm> 後,cmux 會在儲存前詢問,並顯示對應的 cmux config 指令。路徑會在每個 \".\" 處拆分,因此本身包含 \".\" 的鍵(例如 ~/src/app.web 的 <byCwd>workspaceGroups.byCwd</byCwd> 項目)無法用這種方式修改。請直接在 cmux.json 中編輯。", "actionFields": "動作欄位", "actionFieldTitle": "Command Palette 列標題、表面按鈕標籤、選單項目標題,以及信任提示標題,除非項目另行覆寫。", "actionFieldSubtitle": "Command Palette 中的次要文字。description 可作為 subtitle 的別名。",