From 2b04534007ecab7d29f4d01673cf46025c3c8cee Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 20:20:21 -0700 Subject: [PATCH 01/16] test: reduce motion stops every loop; static status indicators; 2 Hz blink cap Red on the base: the Home typing bubble and transcript typing row loop forever under Reduce Motion; appearance.statusIndicator.animation is not in the settings schema; the pane attention blink and the flash verb flash faster than twice a second (0.3 s blinks; faster at the lowest Debug Settings loop periods). Co-Authored-By: Claude Opus 5.5 --- Packages/macOS/CmuxNext/Package.swift | 3 + .../CmuxNextAppTests/BlinkRateCapTests.swift | 77 +++++++++++ .../ReduceMotionLoopTests.swift | 120 ++++++++++++++++++ .../StaticStatusIndicatorTests.swift | 118 +++++++++++++++++ 4 files changed, 318 insertions(+) create mode 100644 Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/BlinkRateCapTests.swift create mode 100644 Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift create mode 100644 Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift diff --git a/Packages/macOS/CmuxNext/Package.swift b/Packages/macOS/CmuxNext/Package.swift index e6b0dd56f405..0653b58b1359 100644 --- a/Packages/macOS/CmuxNext/Package.swift +++ b/Packages/macOS/CmuxNext/Package.swift @@ -887,6 +887,9 @@ let package = Package( dependencies: ["CmuxNextWakeups", "CmuxNextLayout", "CmuxNextTasks", "CmuxNextAgentCursor", "CmuxNextTabs", "CmuxNextProcessEnvironment", "CmuxNextApp", "CmuxNextBrowserHistory", "CmuxNextCrashReporting", "CmuxNextActions", "CmuxNextHistory", "CmuxNextCopyMode", "CmuxNextComputerUse", "CmuxNextDaemon", "CmuxNextDaemonService", "CmuxNextFocusUI", "CmuxNextHome", "CmuxNextHomeEngine", .product(name: "CmuxHomeCore", package: "CmuxHomeCore"), .product(name: "CmuxHomeRender", package: "CmuxHomeRender"), + // ReduceMotionLoopTests builds the vendored Home typing indicators. + .product(name: "MessagesLabHome", package: "CmuxMessagesLab"), + .product(name: "MessagesLabSidebar", package: "CmuxMessagesLab"), .product(name: "CmuxAgentQuestion", package: "CmuxAgentQuestion"), // GhosttyGlassMinimumContrastTests builds a Ghostty config. .product(name: "CmuxGhosttyKit", package: "CmuxGhosttyKit")], diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/BlinkRateCapTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/BlinkRateCapTests.swift new file mode 100644 index 000000000000..26c1d31d37d9 --- /dev/null +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/BlinkRateCapTests.swift @@ -0,0 +1,77 @@ +import AppKit +@testable import CmuxNextDesign +import Testing + +/// Leo 2026-10-13 (cx-sya4n): nothing in cmux flashes faster than twice a second, in any mode: +/// every on-off-on cycle of an opacity flash lasts at least 0.5 s, also at the fastest Debug +/// Settings loop periods and the fast animation speed. The pane attention ring blinked about +/// three times a second (0.3 s per blink) and the flash verb faster. +@MainActor @Suite(.serialized) struct BlinkRateCapTests { + static let shortestCycle: TimeInterval = 0.5 + + /// The shortest on-off-on cycle of an opacity animation, in seconds; nil when it never + /// comes back on. + static func shortestFlashCycle(_ animation: CAAnimation) -> TimeInterval? { + if let group = animation as? CAAnimationGroup { return (group.animations ?? []).compactMap(shortestFlashCycle).min() } + if let basic = animation as? CABasicAnimation, basic.keyPath == "opacity" { + // There and back is one cycle. + if basic.autoreverses { return basic.duration * 2 } + return basic.repeatCount > 1 || basic.repeatDuration > basic.duration ? basic.duration : nil + } + guard let frames = animation as? CAKeyframeAnimation, frames.keyPath == "opacity", + let values = frames.values?.compactMap({ ($0 as? NSNumber)?.doubleValue }), values.count > 1, + let high = values.max(), let low = values.min(), high > low else { return nil } + let times = frames.keyTimes.map { $0.map { $0.doubleValue * frames.duration } } + ?? values.indices.map { Double($0) / Double(values.count - 1) * frames.duration } + let middle = (high + low) / 2 + var lastOn: TimeInterval? + var wentOff = false + var shortest: TimeInterval? + for (value, time) in zip(values, times) { + if value > middle { + if let lastOn, wentOff { shortest = min(shortest ?? .infinity, time - lastOn) } + lastOn = time + wentOff = false + } else if lastOn != nil { + wentOff = true + } + } + if frames.repeatCount > 1, let first = zip(values, times).first(where: { $0.0 > middle })?.1, let lastOn { + shortest = min(shortest ?? .infinity, frames.duration - lastOn + first) + } + return shortest + } + + @Test func nothingFlashesFasterThanTwiceASecond() throws { + // The fastest loop periods Debug Settings allows (a set value clamps to the tunable's range). + let store = TunableStore.shared + store.register(MotionTunables.all) + store.activate(file: nil) + let keys = MotionLoop.allCases.compactMap { MotionTunables.loops[$0]?.key } + for key in keys { store.set(key, .number(0)) } + defer { store.reset(keys) } + let speed = DesignSettings.shared.animationSpeed + DesignSettings.shared.animationSpeed = .fast + defer { DesignSettings.shared.animationSpeed = speed } + Motion.reduceMotionOverride = false + defer { Motion.reduceMotionOverride = nil } + + var flashes: [(String, CAAnimation?)] = [("flash verb", Motion.flashAnimation()), + ("status pulse", Motion.pulseAnimation(low: 0))] + var attention = AttentionSettings() + for look in AttentionHighlightLook.allCases { + attention.style = .pulse + flashes.append(("attention pulse \(look)", Motion.attentionAnimation(attention, look: look))) + attention.style = .blink + for count in [2, AttentionSettings.blinkRange.upperBound] { + attention.blinkCount = count + flashes.append(("attention \(count) blinks \(look)", Motion.attentionAnimation(attention, look: look))) + } + } + for (name, animation) in flashes { + let animation = try #require(animation, "\(name): no animation") + let cycle = try #require(Self.shortestFlashCycle(animation), "\(name) never flashes") + #expect(cycle >= Self.shortestCycle - 1e-6, "\(name) flashes every \(cycle) s") + } + } +} diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift new file mode 100644 index 000000000000..f432a2f68a9b --- /dev/null +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift @@ -0,0 +1,120 @@ +import AppKit +@testable import CmuxNextDesign +@testable import CmuxNextHome +@testable import CmuxNextSidebar +@testable import CmuxNextTabs +@testable import MessagesLabHome +@testable import MessagesLabSidebar +import Testing + +/// Leo 2026-10-13 (cx-sya4n): Austin gets headaches from blinking and pulsing status lights. +/// Under macOS Reduce Motion nothing in cmux may loop: the shared status indicators (sidebar +/// rows, tabs, chrome spinners), the pane attention ring, and the vendored Home transcript and +/// conversation list (their typing dots breathed and pulsed forever whatever the setting said). +@MainActor @Suite(.serialized) struct ReduceMotionLoopTests { + static func hasDisplay() -> Bool { !NSScreen.screens.isEmpty } + + /// Every animation on `layer` and the layers under it (masks included) that repeats. + static func loops(under layer: CALayer?, path: String = "") -> [String] { + guard let layer else { return [] } + let here = path + "/" + (layer.name ?? String(describing: type(of: layer))) + let own = (layer.animationKeys() ?? []).compactMap { key -> String? in + guard let animation = layer.animation(forKey: key), repeats(animation) else { return nil } + return "\(here) [\(key)]" + } + return own + ((layer.sublayers ?? []) + [layer.mask].compactMap { $0 }).flatMap { loops(under: $0, path: here) } + } + + static func repeats(_ animation: CAAnimation) -> Bool { + if animation.repeatCount >= .greatestFiniteMagnitude || animation.repeatDuration > 0 { return true } + if let group = animation as? CAAnimationGroup { return (group.animations ?? []).contains(where: repeats) } + return false + } + + /// One workspace per indicator state, in a sidebar laid out in a window. + static func sidebar(in window: NSWindow) -> SidebarView { + let states: [StatusIndicatorState] = [.working(progress: nil), .busy(progress: nil), .paused(progress: nil), .waiting(kind: nil), + .waiting(kind: .permission), .error, .success] + let workspaces = states.enumerated().map { index, state in + SidebarWorkspace(id: WorkspaceID("ws-\(index)"), title: "workspace \(index)", agentWorking: true, activity: state) + } + let machine = SidebarMachine(id: .local, name: "This Mac", kind: .local) + let model = SidebarModel(sections: [SidebarSection(kind: .machine(machine), nodes: workspaces.map { .workspace($0) })]) + let sidebar = SidebarView(model: model, design: DesignSettings()) + sidebar.frame = NSRect(x: 0, y: 0, width: 240, height: 600) + window.contentView?.addSubview(sidebar) + sidebar.layoutSubtreeIfNeeded() + sidebar.list.reload(animated: false) + sidebar.list.rowViews.values.forEach { $0.layoutSubtreeIfNeeded() } + return sidebar + } + + @Test(.enabled("indicators stop while their window is not on a screen") { await Self.hasDisplay() }) + func statusIndicatorsAndTheAttentionRingDoNotLoopUnderReduceMotion() throws { + Motion.reduceMotionOverride = true + defer { Motion.reduceMotionOverride = nil } + let window = NSWindow(contentRect: NSRect(x: 200, y: 200, width: 480, height: 600), styleMask: [.titled], + backing: .buffered, defer: false) + defer { window.orderOut(nil) } + window.orderFrontRegardless() + try #require(window.screen != nil) + let content = try #require(window.contentView) + content.wantsLayer = true + let sidebar = Self.sidebar(in: window) + + let spinner = StatusIndicatorView.spinner() + spinner.frame = NSRect(x: 300, y: 20, width: 16, height: 16) + content.addSubview(spinner) + spinner.spin(true) + + var working = TabItem(id: CmuxNextTabs.TabID("t-working"), title: "claude") + working.indicator = .working(progress: nil) + var loading = TabItem(id: CmuxNextTabs.TabID("t-busy"), title: "page") + loading.indicator = .busy(progress: nil) + for (index, item) in [working, loading].enumerated() { + let cell = TabCell(item: item) + cell.layer.frame = CGRect(x: 260, y: 60 + CGFloat(index) * 40, width: 180, height: 32) + content.layer?.addSublayer(cell.layer) + } + + // The pane attention ring (PaneOverlayView) and the flash verb (PaneHandlers+Verbs). + var attention = AttentionSettings() + attention.blinkCount = AttentionSettings.blinkRange.upperBound + for style in [AttentionStyle.blink, .pulse, .steady] { + attention.style = style + let ring = CALayer() + if let animation = Motion.attentionAnimation(attention) { ring.add(animation, forKey: "attention") } + content.layer?.addSublayer(ring) + } + let flash = CALayer() + if let animation = Motion.flashAnimation() { flash.add(animation, forKey: "flash") } + content.layer?.addSublayer(flash) + + content.layoutSubtreeIfNeeded() + #expect(sidebar.list.rowViews.count >= 7) + #expect(Self.loops(under: content.layer) == []) + } + + /// The Home conversation list's typing bubble (MessagesLabSidebar) and the transcript's + /// typing row (MessagesLabHome): still dots, no breathing, under Reduce Motion. + @Test func homesTypingIndicatorsDoNotLoopUnderReduceMotion() { + Motion.reduceMotionOverride = true + defer { Motion.reduceMotionOverride = nil } + // The Home column hosts the vendored list; building it wires cmux's motion into it. + let home = HomeSidebarView(frame: NSRect(x: 0, y: 0, width: 280, height: 600)) + home.list.show([CmuxSidebarEntry(id: "chief", title: "Chief", people: [], preview: "", previewSender: nil, lastAt: Date(), + unreadCount: 0, pinned: false, typing: true)], pinned: []) + home.layoutSubtreeIfNeeded() + #expect(Self.loops(under: home.layer) == []) + + let bubble = SidebarTypingLayer() + bubble.animate() + #expect(Self.loops(under: bubble) == [], "the list's typing bubble pulses") + + let cell = RowCell(frame: CGRect(x: 0, y: 0, width: 400, height: 40)) + cell.startTypingDots(begin: CACurrentMediaTime()) + cell.startTypingBreath(insert: CACurrentMediaTime()) + let typing = cell.dots + cell.typingDiscs + [cell.typingContainer, cell.typingClip] + #expect(typing.flatMap { Self.loops(under: $0) } == [], "the transcript's typing row breathes or its dots pulse") + } +} diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift new file mode 100644 index 000000000000..2c6abf0fee41 --- /dev/null +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift @@ -0,0 +1,118 @@ +import AppKit +import CmuxNextActions +@testable import CmuxNextDesign +import CmuxNextSettings +@testable import CmuxNextSidebar +@testable import CmuxNextTabs +import Foundation +import Testing + +/// Leo 2026-10-13 (cx-sya4n): "What if they were just colors or symbols or some text." +/// `appearance.statusIndicator.animation: "static"` (Settings > Appearance > Status indicators) +/// stills every status indicator, draws each state as its own shape (never color alone), and +/// names the state: the indicator's tooltip and VoiceOver label everywhere, and a short label +/// beside the mark on a sidebar workspace row. +@MainActor @Suite(.serialized) struct StaticStatusIndicatorTests { + static let states: [(name: String, state: StatusIndicatorState)] = [ + ("working", .working(progress: nil)), ("busy", .busy(progress: nil)), ("paused", .paused(progress: nil)), + ("waiting", .waiting(kind: nil)), ("permission", .waiting(kind: .permission)), ("question", .waiting(kind: .question)), + ("auth", .waiting(kind: .auth)), ("error", .error), ("done", .success), + ] + + /// Picks Static the way the Settings window does: through the schema's one write path. + private static func pickStatic() async throws -> URL { + let directory = FileManager.default.temporaryDirectory.appending(path: "cnc-static-status-\(UUID().uuidString)") + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + let url = directory.appending(path: "cmux.json") + try Data("{}".utf8).write(to: url) + let settings = SettingsController(registry: ActionRegistry(catalog: []), design: DesignSettings.shared, fileURL: url, + managedReader: FixedManagedPreferenceReader(ManagedPreferences()), managedWatchFiles: []) + await settings.reload() + try await settings.setSetting(at: ["appearance", "statusIndicator", "animation"], to: .string("static"), by: .user) + let saved = try String(contentsOf: url, encoding: .utf8) + #expect(saved.contains("\"static\"")) + // The appearance follows DesignSettings through an Observation stream; apply now. + StatusIndicatorAppearance.shared.apply(StatusIndicatorConfig.current) + return directory + } + + private static func sidebar(in window: NSWindow) -> CmuxNextSidebar.SidebarView { + let workspaces = states.enumerated().map { index, entry in + SidebarWorkspace(id: WorkspaceID("ws-\(entry.name)"), title: "w\(index)", agentWorking: true, activity: entry.state) + } + let machine = SidebarMachine(id: .local, name: "This Mac", kind: .local) + let model = SidebarModel(sections: [SidebarSection(kind: .machine(machine), nodes: workspaces.map { .workspace($0) })]) + let sidebar = SidebarView(model: model, design: DesignSettings()) + sidebar.frame = NSRect(x: 0, y: 0, width: 300, height: 600) + window.contentView?.addSubview(sidebar) + sidebar.layoutSubtreeIfNeeded() + sidebar.list.reload(animated: false) + sidebar.list.rowViews.values.forEach { $0.layoutSubtreeIfNeeded() } + return sidebar + } + + private static func tabs() -> [(name: String, cell: TabCell)] { + func tab(_ name: String, _ change: (inout TabItem) -> Void) -> (String, TabCell) { + var item = TabItem(id: CmuxNextTabs.TabID("t-\(name)"), title: name) + change(&item) + return (name, TabCell(item: item)) + } + return [ + tab("working") { $0.indicator = .working(progress: nil) }, + tab("busy") { $0.indicator = .busy(progress: nil) }, + tab("waiting") { $0.status = .needsInput }, + tab("permission") { $0.status = .needsInput; $0.blockedKind = .permission }, + tab("question") { $0.status = .needsInput; $0.blockedKind = .question }, + tab("auth") { $0.status = .needsInput; $0.blockedKind = .auth }, + tab("error") { $0.status = .failure }, + tab("done") { $0.status = .success }, + ] + } + + @Test func staticDrawsAStillDistinctMarkAndAShortLabelForEveryState() async throws { + let design = DesignSettings.shared + let before = design.statusIndicator + defer { + design.statusIndicator = before + StatusIndicatorAppearance.shared.apply(StatusIndicatorConfig.current) + } + let directory = try await Self.pickStatic() + defer { try? FileManager.default.removeItem(at: directory) } + + let window = NSWindow(contentRect: NSRect(x: 200, y: 200, width: 300, height: 600), styleMask: [.titled], + backing: .buffered, defer: false) + defer { window.orderOut(nil) } + if !NSScreen.screens.isEmpty { window.orderFrontRegardless() } + let sidebar = Self.sidebar(in: window) + + var glyphs: [String: StatusIndicatorPlan.Glyph] = [:] + var labels: [String: String] = [:] + for (name, _) in Self.states { + let row = try #require(sidebar.list.rowViews[.workspace(WorkspaceID("ws-\(name)"))] as? WorkspaceRowView, "\(name)") + let mark = try #require(row.subviews.lazy.compactMap { $0 as? StatusIndicatorView }.first, "\(name)") + #expect(!mark.isHidden, "\(name): the row shows no status mark") + #expect(mark.indicator.plan.animation == nil && mark.indicator.runningAnimation == nil, "\(name) animates") + #expect(ReduceMotionLoopTests.loops(under: row.layer) == [], "\(name) loops") + glyphs[name] = mark.indicator.plan.glyph + let label = mark.themedToolTip ?? "" + #expect(!label.isEmpty, "\(name): the mark has no tooltip") + labels[name] = label + let shown = row.subviews.contains { view in + guard let field = view as? NSTextField, field !== row.subtitle, !field.isHidden, field.frame.width > 0 else { return false } + return field.stringValue == label + } + #expect(shown, "\(name): the row does not show its label \"\(label)\"") + } + #expect(Set(glyphs.values).count == Self.states.count, "two states share a mark: \(glyphs)") + #expect(Set(labels.values).count == Self.states.count, "two states share a label: \(labels)") + + var tabGlyphs: [String: StatusIndicatorPlan.Glyph] = [:] + for (name, cell) in Self.tabs() { + let plan = try #require((cell.spinnerLayer ?? cell.statusGlyphLayer)?.plan, "\(name): the tab draws no mark") + #expect(plan.animation == nil, "\(name) animates on its tab") + #expect(ReduceMotionLoopTests.loops(under: cell.layer) == [], "\(name) loops on its tab") + tabGlyphs[name] = plan.glyph + } + #expect(Set(tabGlyphs.values).count == tabGlyphs.count, "two tab states share a mark: \(tabGlyphs)") + } +} From cd50c6c8b33e1e4b08754f963aeffea63a756044 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 20:31:13 -0700 Subject: [PATCH 02/16] Reduce Motion stills Home's caret and typing dots, the update and import spinners The vendored MessagesLab transcript and conversation list looped their caret blink, typing dots and typing breath whatever Reduce Motion said; cmux-next mirrors Motion.reduceMotionOverride into their new pins (blocker patches recorded in Patches/ and the README). The update sheet's symbol effect follows Motion.animatesLoops, and the onboarding import row uses the shared native spinner, still under Reduce Motion. Co-Authored-By: Claude Opus 5.5 --- ..._appkit-native__SidebarDrawing.swift.patch | 23 ++++++++++++++ .../appkit-native__Compose.swift.patch | 14 +++++++-- .../Patches/catalyst__Transcript.swift.patch | 29 +++++++++++++++++ Packages/Shared/CmuxMessagesLab/README.md | 1 + .../Cmux/MessagesLabHomeView+Motion.swift | 14 +++++++++ .../Vendor/appkit-native/Compose.swift | 3 +- .../Vendor/catalyst/Transcript.swift | 8 +++-- .../Cmux/CmuxSidebarView+Motion.swift | 14 +++++++++ .../Vendor/appkit-native/SidebarDrawing.swift | 6 ++-- .../CmuxNextHome/HomeReduceMotion.swift | 31 +++++++++++++++++++ .../HomeNativeTranscriptView.swift | 1 + .../Sidebar/HomeSidebarView.swift | 1 + .../Steps/ImportProfileRow.swift | 11 +++---- .../CmuxNextUpdater/UpdateSheetView.swift | 8 +++-- 14 files changed, 148 insertions(+), 16 deletions(-) create mode 100644 Packages/Shared/CmuxMessagesLab/Patches/Sources__MessagesLabSidebar__Vendor__appkit-native__SidebarDrawing.swift.patch create mode 100644 Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift create mode 100644 Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextHome/HomeReduceMotion.swift diff --git a/Packages/Shared/CmuxMessagesLab/Patches/Sources__MessagesLabSidebar__Vendor__appkit-native__SidebarDrawing.swift.patch b/Packages/Shared/CmuxMessagesLab/Patches/Sources__MessagesLabSidebar__Vendor__appkit-native__SidebarDrawing.swift.patch new file mode 100644 index 000000000000..e9cca84d2c4c --- /dev/null +++ b/Packages/Shared/CmuxMessagesLab/Patches/Sources__MessagesLabSidebar__Vendor__appkit-native__SidebarDrawing.swift.patch @@ -0,0 +1,23 @@ +--- a/Sources/MessagesLabSidebar/Vendor/appkit-native/SidebarDrawing.swift ++++ b/Sources/MessagesLabSidebar/Vendor/appkit-native/SidebarDrawing.swift +@@ -648,7 +648,7 @@ + for d in lit { d.backgroundColor = p.typingDot; d.contentsScale = scale } + } + /// The dots pulse (tests: every lit dot has its animation, or the still phase is set). +- var isPulsing: Bool { Self.stillPhase != nil || lit.allSatisfy { $0.animation(forKey: "pulse") != nil } } ++ var isPulsing: Bool { stillPhase != nil || lit.allSatisfy { $0.animation(forKey: "pulse") != nil } } + /// Still scenes: the dots stand at this phase of the pulse (0-1) instead of animating (nil: animate). + static var stillPhase: Double? + private static func level(_ i: Int, phase t: Double) -> Double { +@@ -658,8 +658,10 @@ + } + /// Starts the pulse once. Phase-locked to whole periods of the media clock, so every bubble + /// in the list pulses in step and a row that scrolls back in does not restart its cycle. ++ /// cmux: the still phase, also the first dot's peak under Reduce Motion (cx-sya4n: nothing loops). ++ private var stillPhase: Double? { Self.stillPhase ?? (CmuxSidebarView.reducesMotion ? 0.45 : nil) } + func animate() { +- if let ph = Self.stillPhase { ++ if let ph = stillPhase { + for (i, d) in lit.enumerated() { d.opacity = Float(Self.level(i, phase: ph)) } + return + } diff --git a/Packages/Shared/CmuxMessagesLab/Patches/appkit-native__Compose.swift.patch b/Packages/Shared/CmuxMessagesLab/Patches/appkit-native__Compose.swift.patch index 115e7cc3071e..b48255ec1dc5 100644 --- a/Packages/Shared/CmuxMessagesLab/Patches/appkit-native__Compose.swift.patch +++ b/Packages/Shared/CmuxMessagesLab/Patches/appkit-native__Compose.swift.patch @@ -10,7 +10,17 @@ /// Marked (IME) text changed. UITextView reports marked text through /// `textViewDidChange`, so the draft (and the field height) follows the /// composition; NSTextView does not post a text change for it. -@@ -417,6 +420,7 @@ +@@ -180,7 +183,8 @@ + if Self.caretLog { Self.log("blink restart \(CACurrentMediaTime())") } + caretLayer.removeAnimation(forKey: "blink") + caretLayer.opacity = 1 +- if Self.solidCaret { return } ++ // cmux: under Reduce Motion the caret holds solid (cx-sya4n: nothing loops). ++ if Self.solidCaret || MessagesLabHomeView.reducesMotion { return } + let a = CAKeyframeAnimation(keyPath: "opacity") + a.calculationMode = .discrete + // One period from the first fade-out: out 1 -> 0 in four steps, off, in 0 -> 1. +@@ -417,6 +421,7 @@ override func paste(_ sender: Any?) { let pb = pasteboard @@ -18,7 +28,7 @@ if pb.string(forType: .string) == nil, let img = NSImage(pasteboard: pb) { onPasteImage(img); return } super.paste(sender) } -@@ -920,11 +924,11 @@ +@@ -920,11 +925,11 @@ fmt.opaque = false let ph = placeholder placeholderLayer.contents = UIGraphicsImageRenderer(size: CGSize(width: 300, height: 30), format: fmt).image { ctx in diff --git a/Packages/Shared/CmuxMessagesLab/Patches/catalyst__Transcript.swift.patch b/Packages/Shared/CmuxMessagesLab/Patches/catalyst__Transcript.swift.patch index f0ad9a75ce92..4986f1ba7f57 100644 --- a/Packages/Shared/CmuxMessagesLab/Patches/catalyst__Transcript.swift.patch +++ b/Packages/Shared/CmuxMessagesLab/Patches/catalyst__Transcript.swift.patch @@ -45,3 +45,32 @@ /// Window y of the cell's top: the outgoing fill shades with it. var windowY: CGFloat = 0 { didSet { +@@ -1397,6 +1406,8 @@ + a.isRemovedOnCompletion = false + a.calculationMode = .linear + if let p = Springs.typingStillPhase { a.speed = 0; a.timeOffset = p } ++ // cmux: under Reduce Motion the dots stand at the first dot's peak, played once (cx-sya4n: nothing loops). ++ else if MessagesLabHomeView.reducesMotion { a.speed = 0; a.timeOffset = Self.typingDotPeak; a.repeatCount = 1 } + hi.add(a, forKey: "dots") + } + } +@@ -1406,7 +1417,8 @@ + /// (layer time). A still scene (--typing-phase) keeps them at rest. macOS only (no iOS reference). + func startTypingBreath(insert: CFTimeInterval) { + #if !os(iOS) || targetEnvironment(macCatalyst) +- guard Springs.typingStillPhase == nil else { return } ++ // cmux: no breathing under Reduce Motion (cx-sya4n). ++ guard Springs.typingStillPhase == nil, !MessagesLabHomeView.reducesMotion else { return } + let a = RowDraw.typingAnchor, b = Springs.typingBreathAnchor + // The container scales about RowDraw.typingAnchor; the opposite offset of a scale e about it moves the + // fixed point to b: e x (a - b). +@@ -1505,7 +1517,8 @@ + /// The typing row should breathe but does not (macOS, not a still scene): its breathing was stopped or never started. + var needsTypingBreath: Bool { + #if !os(iOS) || targetEnvironment(macCatalyst) +- Springs.typingStillPhase == nil && typingContainer.animation(forKey: "breath.transform.scale") == nil ++ // cmux: no breathing under Reduce Motion (cx-sya4n). ++ Springs.typingStillPhase == nil && !MessagesLabHomeView.reducesMotion && typingContainer.animation(forKey: "breath.transform.scale") == nil + #else + false + #endif diff --git a/Packages/Shared/CmuxMessagesLab/README.md b/Packages/Shared/CmuxMessagesLab/README.md index bbe3a3b509e0..1964d9f60dd5 100644 --- a/Packages/Shared/CmuxMessagesLab/README.md +++ b/Packages/Shared/CmuxMessagesLab/README.md @@ -70,6 +70,7 @@ and render-server field animation, blurred header and native scrolling. | RowDrawing | file, audio, contact and voice memo rows on my side use the theme's sent text colour (white by default; a light accent showed white text) | | Engine, WindowView | `cmuxSetAttachment`: an attachment part's picture or upload state changed in HomeStore (no content change, no transition; the row redraws in place) | | Engine, Layout, Transcript | `cmuxNotice`: the host's notice (Home's merge notice) is MessagesLab's centered system row under the newest message, not an overlay; its accessibility label has no leading space | +| Compose, Transcript, SidebarDrawing (sidebar) | Reduce Motion (cx-sya4n: nothing loops): the caret holds solid, the typing dots stand at one phase and the typing bubble does not breathe (`MessagesLabHomeView.reduceMotionOverride` / `CmuxSidebarView.reduceMotionOverride`: cmux-next mirrors its `Motion.reduceMotionOverride`; nil reads the system setting) | | Compose | `onPastePasteboard`: the field's paste reaches the host's attachment intake first (Home's type rule, prepared by HomeStore) | | Layout | `code` runs draw monospaced with one font held for the process (`HomeFonts.code`: a font made per run on the row render threads came back nil and crashed) | | LinkPreviews | the cache lives in the app's own caches folder (`/link-previews`), not MessagesLab's | diff --git a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift new file mode 100644 index 000000000000..2c7af53cc7e2 --- /dev/null +++ b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift @@ -0,0 +1,14 @@ +import AppKit + +/// cmux (cx-sya4n: Austin gets headaches from blinking lights; nothing loops under +/// Reduce Motion): the vendored transcript's caret and typing row read this. +extension MessagesLabHomeView { + /// The host's Reduce Motion pin (cmux-next mirrors `Motion.reduceMotionOverride`, the + /// tests' pin); nil reads the system setting. + nonisolated(unsafe) public static var reduceMotionOverride: Bool? + + /// Reduce Motion: the caret holds solid, the typing dots stand still and do not breathe. + nonisolated static var reducesMotion: Bool { + reduceMotionOverride ?? NSWorkspace.shared.accessibilityDisplayShouldReduceMotion + } +} diff --git a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/appkit-native/Compose.swift b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/appkit-native/Compose.swift index ca8184de9ec2..ef8644e30d3b 100644 --- a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/appkit-native/Compose.swift +++ b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/appkit-native/Compose.swift @@ -183,7 +183,8 @@ final class FieldTextView: NSTextView { if Self.caretLog { Self.log("blink restart \(CACurrentMediaTime())") } caretLayer.removeAnimation(forKey: "blink") caretLayer.opacity = 1 - if Self.solidCaret { return } + // cmux: under Reduce Motion the caret holds solid (cx-sya4n: nothing loops). + if Self.solidCaret || MessagesLabHomeView.reducesMotion { return } let a = CAKeyframeAnimation(keyPath: "opacity") a.calculationMode = .discrete // One period from the first fade-out: out 1 -> 0 in four steps, off, in 0 -> 1. diff --git a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/catalyst/Transcript.swift b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/catalyst/Transcript.swift index 6b476e3a1e9a..6d4d50ad2207 100644 --- a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/catalyst/Transcript.swift +++ b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Vendor/catalyst/Transcript.swift @@ -1406,6 +1406,8 @@ final class RowCell: UICollectionViewCell { a.isRemovedOnCompletion = false a.calculationMode = .linear if let p = Springs.typingStillPhase { a.speed = 0; a.timeOffset = p } + // cmux: under Reduce Motion the dots stand at the first dot's peak, played once (cx-sya4n: nothing loops). + else if MessagesLabHomeView.reducesMotion { a.speed = 0; a.timeOffset = Self.typingDotPeak; a.repeatCount = 1 } hi.add(a, forKey: "dots") } } @@ -1415,7 +1417,8 @@ final class RowCell: UICollectionViewCell { /// (layer time). A still scene (--typing-phase) keeps them at rest. macOS only (no iOS reference). func startTypingBreath(insert: CFTimeInterval) { #if !os(iOS) || targetEnvironment(macCatalyst) - guard Springs.typingStillPhase == nil else { return } + // cmux: no breathing under Reduce Motion (cx-sya4n). + guard Springs.typingStillPhase == nil, !MessagesLabHomeView.reducesMotion else { return } let a = RowDraw.typingAnchor, b = Springs.typingBreathAnchor // The container scales about RowDraw.typingAnchor; the opposite offset of a scale e about it moves the // fixed point to b: e x (a - b). @@ -1514,7 +1517,8 @@ final class RowCell: UICollectionViewCell { /// The typing row should breathe but does not (macOS, not a still scene): its breathing was stopped or never started. var needsTypingBreath: Bool { #if !os(iOS) || targetEnvironment(macCatalyst) - Springs.typingStillPhase == nil && typingContainer.animation(forKey: "breath.transform.scale") == nil + // cmux: no breathing under Reduce Motion (cx-sya4n). + Springs.typingStillPhase == nil && !MessagesLabHomeView.reducesMotion && typingContainer.animation(forKey: "breath.transform.scale") == nil #else false #endif diff --git a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift new file mode 100644 index 000000000000..d3cbe657a299 --- /dev/null +++ b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift @@ -0,0 +1,14 @@ +import AppKit + +/// cmux (cx-sya4n: Austin gets headaches from blinking lights; nothing loops under +/// Reduce Motion): the vendored list's typing bubble reads this. +extension CmuxSidebarView { + /// The host's Reduce Motion pin (cmux-next mirrors `Motion.reduceMotionOverride`, the + /// tests' pin); nil reads the system setting. + nonisolated(unsafe) public static var reduceMotionOverride: Bool? + + /// Reduce Motion: the typing bubble's dots stand still. + nonisolated static var reducesMotion: Bool { + reduceMotionOverride ?? NSWorkspace.shared.accessibilityDisplayShouldReduceMotion + } +} diff --git a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Vendor/appkit-native/SidebarDrawing.swift b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Vendor/appkit-native/SidebarDrawing.swift index 5f850c709c9b..0183e149a092 100644 --- a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Vendor/appkit-native/SidebarDrawing.swift +++ b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Vendor/appkit-native/SidebarDrawing.swift @@ -648,7 +648,7 @@ final class SidebarTypingLayer: CALayer { for d in lit { d.backgroundColor = p.typingDot; d.contentsScale = scale } } /// The dots pulse (tests: every lit dot has its animation, or the still phase is set). - var isPulsing: Bool { Self.stillPhase != nil || lit.allSatisfy { $0.animation(forKey: "pulse") != nil } } + var isPulsing: Bool { stillPhase != nil || lit.allSatisfy { $0.animation(forKey: "pulse") != nil } } /// Still scenes: the dots stand at this phase of the pulse (0-1) instead of animating (nil: animate). static var stillPhase: Double? private static func level(_ i: Int, phase t: Double) -> Double { @@ -658,8 +658,10 @@ final class SidebarTypingLayer: CALayer { } /// Starts the pulse once. Phase-locked to whole periods of the media clock, so every bubble /// in the list pulses in step and a row that scrolls back in does not restart its cycle. + /// cmux: the still phase, also the first dot's peak under Reduce Motion (cx-sya4n: nothing loops). + private var stillPhase: Double? { Self.stillPhase ?? (CmuxSidebarView.reducesMotion ? 0.45 : nil) } func animate() { - if let ph = Self.stillPhase { + if let ph = stillPhase { for (i, d) in lit.enumerated() { d.opacity = Float(Self.level(i, phase: ph)) } return } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHome/HomeReduceMotion.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/HomeReduceMotion.swift new file mode 100644 index 000000000000..7eb64f0d0213 --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/HomeReduceMotion.swift @@ -0,0 +1,31 @@ +import AppKit +import CmuxNextDesign +import CmuxNextWakeups +import MessagesLabHome +import MessagesLabSidebar + +/// The vendored Home transcript and conversation list cannot see `Motion` (they are +/// MessagesLab's code), so their Reduce Motion reads their own pin and else the system +/// setting. This keeps their pins equal to `Motion.reduceMotionOverride` (cx-sya4n), so a +/// Reduce Motion pin stills them as it stills every cmux loop. Installed by the views that +/// host them, before their first frame. +@MainActor +final class HomeReduceMotion { + private static let shared = HomeReduceMotion() + private var observer: (any NSObjectProtocol)? + + private init() { + Self.mirror() + observer = NotificationCenter.default.addObserver(forName: Motion.reduceMotionDidChange, object: nil, queue: nil) { _ in + MainDelivery().run { HomeReduceMotion.mirror() } + } + } + + /// Starts mirroring (once per process). + static func install() { _ = shared } + + private static func mirror() { + MessagesLabHomeView.reduceMotionOverride = Motion.reduceMotionOverride + CmuxSidebarView.reduceMotionOverride = Motion.reduceMotionOverride + } +} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift index 8468c53cf87c..3f5bc51b6709 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/NativeTranscript/HomeNativeTranscriptView.swift @@ -81,6 +81,7 @@ public final class HomeNativeTranscriptView: NSView { private var cursorHold: HomeCursorRectHold? public init(store: HomeStore, conversation: ConversationID, me: ParticipantID) { + HomeReduceMotion.install() self.me = me transcript = MessagesLabHomeView(store: store, conversation: conversation, me: me, wake: HomeDemandWake()) // One binding per shown conversation; it opens the conversation on diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextHome/Sidebar/HomeSidebarView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/Sidebar/HomeSidebarView.swift index fa1a15bfde83..71f7e61026fd 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextHome/Sidebar/HomeSidebarView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextHome/Sidebar/HomeSidebarView.swift @@ -41,6 +41,7 @@ public final class HomeSidebarView: NSView { public private(set) var model = HomeSidebarModel(rows: [], pins: HomePins(), me: nil) public override init(frame: NSRect) { + HomeReduceMotion.install() super.init(frame: frame) wantsLayer = true list.frame = bounds diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextOnboarding/Steps/ImportProfileRow.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextOnboarding/Steps/ImportProfileRow.swift index 84d03b0d284d..81edffd923d4 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextOnboarding/Steps/ImportProfileRow.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextOnboarding/Steps/ImportProfileRow.swift @@ -23,7 +23,8 @@ final class ImportProfileRow: NSView { static let height: CGFloat = 44 private var toggle: (() -> Void)? private let box = ThemedCheckbox(checkboxWithTitle: "", target: nil, action: nil) - private let spinner = NSProgressIndicator() + /// The shared native spinner: still under Reduce Motion (cx-sya4n), in the theme's ink. + private let spinner = StatusIndicatorView.spinner() private let detail = OnboardingLabel.make(font: OnboardingMetrics.captionFont, color: Palette.textSecondary) private let mark = NSImageView() private let icon = NSImageView() @@ -57,9 +58,7 @@ final class ImportProfileRow: NSView { box.action = #selector(boxPressed) accessButton.target = self accessButton.controlSize = .small - spinner.style = .spinning - spinner.controlSize = .small - spinner.isDisplayedWhenStopped = false + NSLayoutConstraint.activate([spinner.widthAnchor.constraint(equalToConstant: 16), spinner.heightAnchor.constraint(equalToConstant: 16)]) detail.alignment = .right let spinnerSlot = Self.slot(width: 18, containing: spinner) let markSlot = Self.slot(width: 18, containing: mark) @@ -146,7 +145,7 @@ final class ImportProfileRow: NSView { accessButton.alphaValue = 0 spinner.alphaValue = 0 mark.alphaValue = 0 - spinner.stopAnimation(nil) + spinner.spin(false) } /// The installed browser's own icon. Resolve the bundle again for rows @@ -231,7 +230,7 @@ final class ImportProfileRow: NSView { detail.themedToolTip = reason } box.alphaValue = showsBox ? 1 : 0 - if spins { spinner.startAnimation(nil) } else { spinner.stopAnimation(nil) } + spinner.spin(spins) spinner.alphaValue = spins ? 1 : 0 mark.image = markIcon.map { NSImage.icon($0, size: 14) } mark.contentTintColor = Palette.textSecondary diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextUpdater/UpdateSheetView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextUpdater/UpdateSheetView.swift index dbc4a17852dd..15058952a2e9 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextUpdater/UpdateSheetView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextUpdater/UpdateSheetView.swift @@ -84,15 +84,17 @@ struct UpdateSheetView: View { } /// The indeterminate-progress symbol effect: rotate on macOS 15 and newer, -/// pulse on macOS 14 (no rotate effect there). +/// pulse on macOS 14 (no rotate effect there). Still while loops are off +/// (Reduce Motion or `ui.animationSpeed` off; cx-sya4n: nothing loops). private struct IndeterminateSymbolEffect: ViewModifier { let isActive: Bool func body(content: Content) -> some View { + let runs = isActive && Motion.animatesLoops if #available(macOS 15, *) { - content.symbolEffect(.rotate, isActive: isActive) + content.symbolEffect(.rotate, isActive: runs) } else { - content.symbolEffect(.pulse, isActive: isActive) + content.symbolEffect(.pulse, isActive: runs) } } } From f4fe4c0f5bdb3b566e13a533a47d36616c1f0716 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 20:31:15 -0700 Subject: [PATCH 03/16] Status indicators: Animated or Static; 2 Hz blink cap appearance.statusIndicator.animation (animated by default, or static; Settings > Appearance > Loading Indicator > Status Indicators). Static, and always under Reduce Motion, stills every indicator and draws each state as its own shape whatever the Debug icon set: working a solid dot, waiting the kind marks (hand, ? bubble, key, !), error an x in a ring, done a check, paused an empty ring, busy the style's still glyph (an arc for the dot style). Tab badges draw the same marks. Every indicator's tooltip and VoiceOver label is the state's short name, and a static sidebar workspace row shows it beside its mark. Nothing flashes faster than twice a second: the flash loop is at least 1 s (two blinks half a period apart, the attention ring's blinks half a period each) and the pulse at least 0.5 s, Debug Settings overrides included. Co-Authored-By: Claude Opus 5.5 --- .../CmuxNextDesign/Motion/Motion+AppKit.swift | 4 +- .../Motion/MotionFadeTokens.swift | 19 +- .../Motion/MotionTunables.swift | 5 +- .../Resources/Localizable.xcstrings | 1188 +++++++++++++++++ .../StatusIndicatorAnimation.swift | 9 + .../StatusIndicatorAppearance.swift | 13 +- .../StatusIndicatorPlan+Still.swift | 46 + .../StatusIndicator/StatusIndicatorPlan.swift | 7 +- .../StatusIndicatorState+Label.swift | 25 + .../StatusIndicatorState.swift | 2 + .../StatusIndicatorView+Label.swift | 11 + .../StatusIndicator/StatusIndicatorView.swift | 6 +- .../CmuxNextSettings/Localizable.xcstrings | 528 ++++++++ .../Schema/SettingsSchema+AgentPolicy.swift | 1 + .../SettingsSchema+StatusIndicator.swift | 12 + .../StatusIndicatorConfigParser.swift | 1 + .../Views/WorkspaceRowView+StatusLabel.swift | 27 + .../Views/WorkspaceRowView.swift | 12 +- .../TabAccessibilityElement.swift | 3 +- .../CmuxNextTabs/TabCell+StatusBadge.swift | 8 +- .../TabCell+StatusIndicator.swift | 3 +- plans/cmux-next/motion.md | 18 +- plans/cmux-next/status-indicators.md | 13 + scripts/localization-allowed-omissions.json | 12 + 24 files changed, 1948 insertions(+), 25 deletions(-) create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAnimation.swift create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan+Still.swift create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView+Label.swift create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+AppKit.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+AppKit.swift index b3e0263c0ecb..e0d6a99022fa 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+AppKit.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+AppKit.swift @@ -343,11 +343,13 @@ extension Motion { } /// Attention flash: two blinks, one fade under Reduce Motion, nil when off. + /// The blinks peak half a `flash` period apart (the 2 Hz cap, + /// `MotionLoop.shortestFlashCycle`). public static func flashAnimation() -> CAAnimation? { guard animatesFades else { return nil } let flash = CAKeyframeAnimation(keyPath: "opacity") if animatesLoops { - flash.values = [0, 1, 1, 0, 1, 0] + flash.values = [0, 1, 0, 1, 0] flash.duration = MotionLoop.flash.period * speed.timeScale } else { flash.values = [1, 0] diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionFadeTokens.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionFadeTokens.swift index 2f5cc7695e73..f44a0c275cd2 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionFadeTokens.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionFadeTokens.swift @@ -45,5 +45,22 @@ public nonisolated enum MotionLoop: String, Sendable, CaseIterable { /// Pane attention flash (two blinks). case flash - public var period: TimeInterval { MotionTunables.loops[self]?.value ?? 1 } + /// Seconds per period, never under `minimumPeriod` (a Debug Settings + /// override included). + public var period: TimeInterval { max(MotionTunables.loops[self]?.value ?? 1, minimumPeriod) } + + /// The 2 Hz cap (cx-sya4n: Austin gets headaches from blinking lights): + /// nothing flashes faster than twice a second, so every on-off-on cycle + /// of an opacity loop lasts at least `shortestFlashCycle`. A pulse is + /// one cycle per period, a flash two blinks per period; a spinner turns + /// and does not flash. + public static let shortestFlashCycle: TimeInterval = 0.5 + + public var minimumPeriod: TimeInterval { + switch self { + case .spinner: 0.1 + case .pulse: Self.shortestFlashCycle + case .flash: Self.shortestFlashCycle * 2 + } + } } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionTunables.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionTunables.swift index 053f96985040..050a052e78dd 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionTunables.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/MotionTunables.swift @@ -54,13 +54,14 @@ public nonisolated enum MotionTunables { static let loopDefaults: [MotionLoop: (TimeInterval, String)] = [ .spinner: (0.9, "One turn of the busy spinner."), .pulse: (1.8, "One cycle of the agent-waiting pulse."), - .flash: (0.6, "Pane attention flash (two blinks)."), + .flash: (1, "Pane attention flash (two blinks; at least 1 s, the 2 Hz cap)."), ] static let loops: [MotionLoop: Tunable] = Dictionary(uniqueKeysWithValues: MotionLoop.allCases.map { loop in let entry = loopDefaults[loop] ?? (1, "") return (loop, Tunable.number("motion.loop.\(loop.rawValue)", .fades, "\(loop.rawValue) period", help: entry.1, - default: entry.0, range: 0.1...4, step: 0.05, unit: .seconds, code: "MotionTunables.loopDefaults[.\(loop.rawValue)]")) + default: entry.0, range: loop.minimumPeriod...4, step: 0.05, unit: .seconds, + code: "MotionTunables.loopDefaults[.\(loop.rawValue)]")) }) // MARK: Marquee and panel scale diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings index c3c52e87aae8..0b79d1d84405 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings @@ -1,6 +1,1194 @@ { "sourceLanguage": "en", "strings": { + "status.label.working": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent is working.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Working" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "قيد العمل" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Radi" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Arbejder" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "In Arbeit" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Trabajando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En cours" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "In corso" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "作業中" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "កំពុងធ្វើ" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "진행 중" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Arbeider" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "W toku" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Em andamento" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "В работе" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "กำลังทำ" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Çalışıyor" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "У роботі" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Đang làm" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "进行中" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "進行中" + } + } + } + }, + "status.label.loading": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. A page or command is loading.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Loading" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "جارٍ التحميل" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Učitava se" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Indlæser" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Lädt" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cargando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Chargement" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Caricamento" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "読み込み中" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "កំពុងផ្ទុក" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "로드 중" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Laster inn" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wczytywanie" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Carregando" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Загрузка" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "กำลังโหลด" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Yükleniyor" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Завантаження" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Đang tải" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "正在载入" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "正在載入" + } + } + } + }, + "status.label.paused": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. Work stopped part way.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Paused" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "متوقف مؤقتًا" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Pauzirano" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Sat på pause" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Pausiert" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "En pausa" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En pause" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "In pausa" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "一時停止中" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "បានផ្អាក" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "일시 정지됨" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Satt på pause" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wstrzymano" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Pausado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Приостановлено" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "หยุดชั่วคราว" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Duraklatıldı" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Призупинено" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Tạm dừng" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "已暂停" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "已暫停" + } + } + } + }, + "status.label.waiting": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent waits for the user.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Waiting" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "في الانتظار" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Čeka" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Venter" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wartet" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "En espera" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En attente" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "In attesa" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "待機中" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "កំពុងរង់ចាំ" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "대기 중" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Venter" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Oczekuje" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Aguardando" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ожидание" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "กำลังรอ" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Bekliyor" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Очікування" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Đang chờ" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "等待中" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "等待中" + } + } + } + }, + "status.label.permission": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent asks permission to run something.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Needs permission" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "يحتاج إلى إذن" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Treba dozvolu" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Kræver tilladelse" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Braucht Erlaubnis" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Necesita permiso" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Autorisation requise" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Serve un permesso" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "許可が必要" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "ត្រូវការការអនុញ្ញាត" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "권한 필요" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Trenger tillatelse" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wymaga zgody" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Precisa de permissão" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Нужно разрешение" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "ต้องการสิทธิ์" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "İzin gerekiyor" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Потрібен дозвіл" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Cần quyền" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "需要权限" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "需要權限" + } + } + } + }, + "status.label.question": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent asks the user a question.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Question" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "سؤال" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Pitanje" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Spørgsmål" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Frage" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Pregunta" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Question" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Domanda" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "質問" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "សំណួរ" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "질문" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Spørsmål" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pytanie" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Pergunta" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Вопрос" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "คำถาม" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Soru" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Питання" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Câu hỏi" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "问题" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "問題" + } + } + } + }, + "status.label.auth": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. A program needs the user to sign in.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sign-in needed" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "يلزم تسجيل الدخول" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Potrebna prijava" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Log ind kræves" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anmeldung nötig" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Hay que iniciar sesión" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connexion requise" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Accesso richiesto" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サインインが必要" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "ត្រូវការចូលគណនី" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "로그인 필요" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Pålogging kreves" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wymaga logowania" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Login necessário" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Нужен вход" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "ต้องลงชื่อเข้าใช้" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Oturum açılmalı" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Потрібен вхід" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Cần đăng nhập" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "需要登录" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "需要登入" + } + } + } + }, + "status.label.error": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. The run failed.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Error" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "خطأ" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Greška" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Fejl" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Fehler" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Error" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Erreur" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Errore" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "エラー" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "កំហុស" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "오류" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Feil" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Błąd" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Erro" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ошибка" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "ข้อผิดพลาด" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Hata" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Помилка" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Lỗi" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "错误" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "錯誤" + } + } + } + }, + "status.label.done": { + "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. The run finished.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Done" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "تم" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Gotovo" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Færdig" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Fertig" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Terminé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Fatto" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "完了" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "រួចរាល់" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "완료" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Ferdig" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowe" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Concluído" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "เสร็จแล้ว" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Bitti" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Готово" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Xong" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "完成" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "完成" + } + } + } + }, "dialog.ok": { "extractionState": "manual", "localizations": { diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAnimation.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAnimation.swift new file mode 100644 index 000000000000..275e240c7ec4 --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAnimation.swift @@ -0,0 +1,9 @@ +/// Whether status indicators move (`appearance.statusIndicator.animation`, +/// cx-sya4n). Static stills every indicator, draws each state as its own +/// shape and names it; Reduce Motion always gets the static look. +public nonisolated enum StatusIndicatorAnimation: String, Hashable, Sendable, CaseIterable { + /// Spinners, the working wave and pulses run (the default). + case animated + /// Steady colors, a distinct shape per state, and short labels. + case `static` +} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift index 7dcdb5199929..c4e17b32ae3d 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift @@ -27,11 +27,13 @@ public nonisolated struct StatusIndicatorConfig: Hashable, Sendable { public var terminalFontFamily: String? /// The status icon set (Debug Settings `status.iconSet`, cx-kxa2). public var iconSet: StatusIconSet + /// System Reduce Motion (or its test override). + public var reduceMotion: Bool public init(settings: StatusIndicatorSettings = StatusIndicatorSettings(), styleOverride: StatusIndicatorStyle? = nil, arcLength: Double = 0.72, trackOpacity: Double = 0.22, dotScale: Double = 0.5, pulseLow: Double = 0.35, nativeSteps: Int = 8, animatesLoops: Bool = true, spinnerPeriod: Double? = nil, pulsePeriod: Double? = nil, - terminalFontFamily: String? = nil, iconSet: StatusIconSet = .current) { + terminalFontFamily: String? = nil, iconSet: StatusIconSet = .current, reduceMotion: Bool = false) { self.settings = settings self.styleOverride = styleOverride self.arcLength = arcLength @@ -44,8 +46,14 @@ public nonisolated struct StatusIndicatorConfig: Hashable, Sendable { self.pulsePeriod = pulsePeriod self.terminalFontFamily = terminalFontFamily self.iconSet = iconSet + self.reduceMotion = reduceMotion } + /// The static look (cx-sya4n): the setting says static, or Reduce Motion + /// is on. Nothing animates, each state draws its own shape whatever the + /// icon set, and a sidebar row names the state beside its mark. + public var isStatic: Bool { settings.animation == .static || reduceMotion } + /// The style for a report that asked for `hint`: the Debug Settings /// override, else the hint, else the setting. public func style(hint: StatusIndicatorStyle?) -> StatusIndicatorStyle { @@ -66,7 +74,8 @@ public nonisolated struct StatusIndicatorConfig: Hashable, Sendable { spinnerPeriod: Motion.period(.spinner), pulsePeriod: Motion.period(.pulse), terminalFontFamily: DesignSettings.shared.terminalFontFamily, - iconSet: StatusIconSet.tunable.value) + iconSet: StatusIconSet.tunable.value, + reduceMotion: Motion.reduceMotion) } } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan+Still.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan+Still.swift new file mode 100644 index 000000000000..2f1ba89f1478 --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan+Still.swift @@ -0,0 +1,46 @@ +/// The static look (`appearance.statusIndicator.animation: "static"`, or +/// Reduce Motion; cx-sya4n, Leo 2026-10-13: "What if they were just colors or +/// symbols or some text"). Nothing moves, and every state draws its own +/// shape, so no two read apart by color alone. Independent of the Debug icon +/// set; the marks are the existing `StatusMark` art. +nonisolated extension StatusIndicatorPlan { + /// The still plan for `state`: never animated. + static func stillPlan(_ state: StatusIndicatorState, style: StatusIndicatorStyle) -> StatusIndicatorPlan { + switch state { + case .idle: + return .hidden + case .working: + // A solid dot: work under way, apart from loading's open arc. + return StatusIndicatorPlan(glyph: state.progress.map { Glyph.ring(progress: $0) } ?? .dot, animation: nil, tint: .accent) + case .waiting(let kind): + let figure: StatusMark.Figure = switch kind { + case .permission?: .hand + case .question?: .bubbleQuestion + case .auth?: .key + case nil: .exclamation + } + return StatusIndicatorPlan(glyph: .mark(.glyph(figure)), animation: nil, tint: .attention) + case .error: + return StatusIndicatorPlan(glyph: .mark(.outline(.circle, .cross)), animation: nil, tint: .danger) + case .success: + return StatusIndicatorPlan(glyph: .check, animation: nil, tint: .success) + case .paused: + guard style != .none else { return .hidden } + // An empty ring: stopped part way. + return StatusIndicatorPlan(glyph: state.progress.map { Glyph.ring(progress: $0) } ?? .mark(.outline(.circle, nil)), + animation: nil, tint: .attention) + case .busy: + if let progress = state.progress { + guard style != .none else { return .hidden } + return StatusIndicatorPlan(glyph: .ring(progress: progress), animation: nil, tint: .loading) + } + switch style { + case .none: return .hidden + // The still dot is working's mark: loading keeps an open arc. + case .arc, .dot: return StatusIndicatorPlan(glyph: .arc, animation: nil, tint: .loading) + case .native: return StatusIndicatorPlan(glyph: .native, animation: nil, tint: .loading) + case .braille: return StatusIndicatorPlan(glyph: .braille, animation: nil, tint: .loading) + } + } + } +} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan.swift index f185ae8f39cd..276f028f5a2e 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorPlan.swift @@ -73,9 +73,12 @@ public nonisolated struct StatusIndicatorPlan: Hashable, Sendable { /// (`Motion.animatesLoops`): then nothing animates and the static glyph /// stays, so an indicator never costs a frame it cannot be seen in. /// `set` restyles the attention and working marks (`StatusIconSet`); - /// the default `current` is the drawing above, unchanged. + /// the default `current` is the drawing above, unchanged. `isStatic` + /// (`StatusIndicatorConfig.isStatic`) draws the still look whatever the + /// set (`stillPlan`). public static func make(_ state: StatusIndicatorState, style: StatusIndicatorStyle, animates: Bool, - set: StatusIconSet = .current) -> StatusIndicatorPlan { + set: StatusIconSet = .current, isStatic: Bool = false) -> StatusIndicatorPlan { + if isStatic { return stillPlan(state, style: style) } var plan = set.plan(for: state) ?? staticPlan(state, style: style) if !animates { plan.animation = nil } return plan diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift new file mode 100644 index 000000000000..859166b77f3d --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift @@ -0,0 +1,25 @@ +import Foundation + +/// A state's name in a word or two (cx-sya4n): the indicator's tooltip and +/// VoiceOver label everywhere, and the text beside a sidebar row's mark in +/// the static look (`StatusIndicatorConfig.isStatic`). +nonisolated extension StatusIndicatorState { + /// Nil for idle. + public var shortLabel: String? { + switch self { + case .idle: nil + case .working: String(localized: "status.label.working", defaultValue: "Working", bundle: .module) + case .busy: String(localized: "status.label.loading", defaultValue: "Loading", bundle: .module) + case .paused: String(localized: "status.label.paused", defaultValue: "Paused", bundle: .module) + case .waiting(let kind): + switch kind { + case .permission?: String(localized: "status.label.permission", defaultValue: "Needs permission", bundle: .module) + case .question?: String(localized: "status.label.question", defaultValue: "Question", bundle: .module) + case .auth?: String(localized: "status.label.auth", defaultValue: "Sign-in needed", bundle: .module) + case nil: String(localized: "status.label.waiting", defaultValue: "Waiting", bundle: .module) + } + case .error: String(localized: "status.label.error", defaultValue: "Error", bundle: .module) + case .success: String(localized: "status.label.done", defaultValue: "Done", bundle: .module) + } + } +} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState.swift index 354150b37236..885ee68ff2a9 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState.swift @@ -93,6 +93,8 @@ nonisolated extension StatusIndicatorStyle: TunableChoice { /// `appearance.statusIndicator.*` in cmux.json. public nonisolated struct StatusIndicatorSettings: Hashable, Sendable { public var style: StatusIndicatorStyle = .arc + /// Animated or static indicators (`animation`). + public var animation: StatusIndicatorAnimation = .animated /// Share of the host's indicator slot the glyph fills. public var scale: CGFloat = 1 /// Stroke width of the arc and the progress ring, in points. diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView+Label.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView+Label.swift new file mode 100644 index 000000000000..85cac3301bdd --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView+Label.swift @@ -0,0 +1,11 @@ +import AppKit + +extension StatusIndicatorView { + /// The state's short name as the tooltip and the VoiceOver label, in every look (cx-sya4n), + /// so a mark never says what it means by color or motion alone. + func nameState() { + let label = state.shortLabel + if themedToolTip != label { themedToolTip = label } + if accessibilityLabel() != label { setAccessibilityLabel(label) } + } +} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift index 9e0c1f0912c7..3a0f376db709 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift @@ -81,14 +81,18 @@ public final class StatusIndicatorView: NSView, StatusIndicatorConfigClient { public func statusIndicatorConfigDidChange(_ config: StatusIndicatorConfig) { refresh() needsDisplay = true + // The host may name the state beside the mark in the static look. + superview?.needsLayout = true } private func refresh() { var config = StatusIndicatorAppearance.shared.config if ignoresScaleSetting { config.settings.scale = 1 } let animates = window != nil && isWindowVisible && config.animatesLoops - let plan = StatusIndicatorPlan.make(state, style: config.style(hint: styleHint), animates: animates, set: config.iconSet) + let plan = StatusIndicatorPlan.make(state, style: config.style(hint: styleHint), animates: animates, set: config.iconSet, + isStatic: config.isStatic) let showed = showsGlyph + nameState() indicator.apply(plan, config: config) isHidden = plan.glyph == .none // The host reserves trailing space only for a visible glyph. diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings index 7ff47e8a549e..84d0c3046a50 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings @@ -1,6 +1,534 @@ { "sourceLanguage": "en", "strings": { + "settings.statusIndicator.animation": { + "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): the row that picks animated or static status indicators.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Status Indicators" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "مؤشرات الحالة" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Indikatori statusa" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Statusindikatorer" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Statusanzeigen" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Indicadores de estado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Indicateurs d’état" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Indicatori di stato" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ステータスインジケーター" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "សូចនាករស្ថានភាព" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "상태 표시기" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Statusindikatorer" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wskaźniki stanu" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Indicadores de status" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Индикаторы состояния" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "ตัวบ่งชี้สถานะ" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Durum göstergeleri" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Індикатори стану" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Chỉ báo trạng thái" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "状态指示器" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "狀態指示器" + } + } + } + }, + "settings.statusIndicator.animation.help": { + "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): help for the Status Indicators row. \"Reduce Motion\" is the macOS accessibility setting; use its name in this language.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion." + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "يستخدم الوضع الثابت ألوانًا ثابتة وشكلًا مميزًا لكل حالة وتسميات قصيرة. وهو مفعّل دائمًا عند تشغيل «تقليل الحركة»." + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Statično koristi postojane boje, poseban oblik za svako stanje i kratke oznake. Uvijek je uključeno uz Smanji pokrete." + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Statisk bruger faste farver, en særskilt form for hver tilstand og korte etiketter. Det er altid slået til med Reducer bevægelse." + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "„Statisch“ verwendet gleichbleibende Farben, eine eigene Form für jeden Zustand und kurze Beschriftungen. Bei „Bewegung reduzieren“ ist es immer aktiv." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Estático usa colores fijos, una forma distinta para cada estado y etiquetas breves. Siempre está activo con Reducir movimiento." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statique utilise des couleurs fixes, une forme distincte pour chaque état et de courts libellés. Il est toujours actif avec Réduire les animations." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Statico usa colori fissi, una forma distinta per ogni stato ed etichette brevi. È sempre attivo con Riduci movimento." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "静的では、変化しない色、状態ごとに異なる形、短いラベルを使います。「視差効果を減らす」がオンのときは常に静的になります。" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "ឋិតិវន្តប្រើពណ៌ថេរ រូបរាងខុសគ្នាសម្រាប់ស្ថានភាពនីមួយៗ និងស្លាកខ្លីៗ។ វាតែងតែបើកនៅពេលកាត់បន្ថយចលនាបើក។" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "정적은 고정된 색상, 상태마다 다른 모양, 짧은 레이블을 사용합니다. 동작 줄이기가 켜져 있으면 항상 적용됩니다." + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Statisk bruker faste farger, en egen form for hver tilstand og korte etiketter. Det er alltid på med Reduser bevegelse." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Statyczne używa stałych kolorów, osobnego kształtu dla każdego stanu i krótkich etykiet. Jest zawsze włączone przy Ogranicz ruch." + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Estático usa cores fixas, uma forma diferente para cada estado e rótulos curtos. Fica sempre ativo com Reduzir movimento." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "В статичном режиме используются постоянные цвета, своя форма для каждого состояния и короткие подписи. При «Уменьшении движения» он включён всегда." + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "แบบคงที่ใช้สีคงที่ รูปทรงเฉพาะสำหรับแต่ละสถานะ และป้ายสั้นๆ และจะเปิดใช้เสมอเมื่อเปิดลดการเคลื่อนไหว" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Sabit; değişmeyen renkler, her durum için ayrı bir şekil ve kısa etiketler kullanır. Hareketi Azalt açıkken her zaman etkindir." + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Статичний режим використовує незмінні кольори, окрему форму для кожного стану та короткі підписи. Зі «Зменшенням руху» він завжди ввімкнений." + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Tĩnh dùng màu cố định, hình dạng riêng cho từng trạng thái và nhãn ngắn. Luôn bật khi Giảm chuyển động đang bật." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "静态使用固定颜色、每种状态独有的形状和简短标签。开启“减弱动态效果”时始终使用静态。" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "靜態使用固定顏色、每種狀態獨有的形狀和簡短標籤。開啟「減少動態效果」時一律使用靜態。" + } + } + } + }, + "settings.choice.animated": { + "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): choice: status indicators move (spinners, pulses).", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Animated" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "متحركة" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Animirano" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Animeret" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Animiert" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Animado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Animé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Animato" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アニメーション" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "មានចលនា" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "애니메이션" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Animert" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Animowane" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Animado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Анимированные" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "เคลื่อนไหว" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Animasyonlu" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Анімовані" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Động" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "动画" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "動畫" + } + } + } + }, + "settings.choice.static": { + "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): choice: status indicators stand still, with distinct shapes and short labels.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Static" + } + }, + "ar": { + "stringUnit": { + "state": "needs_review", + "value": "ثابتة" + } + }, + "bs": { + "stringUnit": { + "state": "needs_review", + "value": "Statično" + } + }, + "da": { + "stringUnit": { + "state": "needs_review", + "value": "Statisk" + } + }, + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Statisch" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Estático" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statique" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Statico" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "静的" + } + }, + "km": { + "stringUnit": { + "state": "needs_review", + "value": "ឋិតិវន្ត" + } + }, + "ko": { + "stringUnit": { + "state": "needs_review", + "value": "정적" + } + }, + "nb": { + "stringUnit": { + "state": "needs_review", + "value": "Statisk" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Statyczne" + } + }, + "pt-BR": { + "stringUnit": { + "state": "needs_review", + "value": "Estático" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Статичные" + } + }, + "th": { + "stringUnit": { + "state": "needs_review", + "value": "คงที่" + } + }, + "tr": { + "stringUnit": { + "state": "needs_review", + "value": "Sabit" + } + }, + "uk": { + "stringUnit": { + "state": "needs_review", + "value": "Статичні" + } + }, + "vi": { + "stringUnit": { + "state": "needs_review", + "value": "Tĩnh" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "needs_review", + "value": "静态" + } + }, + "zh-Hant": { + "stringUnit": { + "state": "needs_review", + "value": "靜態" + } + } + } + }, "settings.group.passwords": { "extractionState": "manual", "localizations": { diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift index 8db1c3405c53..125f89fc28c6 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift @@ -109,6 +109,7 @@ extension SettingsSchema { "focusRing.width", "focusRing.showWhenSinglePane", "appearance.statusIndicator.style", + "appearance.statusIndicator.animation", "appearance.statusIndicator.size", "appearance.statusIndicator.thickness", "appearance.statusIndicator.color", diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+StatusIndicator.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+StatusIndicator.swift index 276c45d8194c..3673c89599e2 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+StatusIndicator.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+StatusIndicator.swift @@ -23,6 +23,18 @@ nonisolated enum StatusIndicatorSettingsSchema { ]), default: .string(defaults.style.rawValue), keywords: ["spinner", "progress", "loading", "busy"] ), + SettingDescriptor( + path + ["animation"], section: .appearance, group: group, + title: SettingsText.keyed("settings.statusIndicator.animation", "Status Indicators"), + help: SettingsText.keyed("settings.statusIndicator.animation.help", + "Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion."), + kind: .choice([ + SettingChoice(StatusIndicatorAnimation.animated.rawValue, SettingsText.keyed("settings.choice.animated", "Animated")), + SettingChoice(StatusIndicatorAnimation.`static`.rawValue, SettingsText.keyed("settings.choice.static", "Static")), + ]), + default: .string(defaults.animation.rawValue), + keywords: ["animation", "motion", "blink", "pulse", "flash", "static", "reduce motion", "accessibility", "headache"] + ), SettingDescriptor( path + ["size"], section: .appearance, group: group, title: SettingsText.keyed("settings.statusIndicator.size", "Size"), diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/StatusIndicatorConfigParser.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/StatusIndicatorConfigParser.swift index d626e64c6c6c..b944824a7931 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/StatusIndicatorConfigParser.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/StatusIndicatorConfigParser.swift @@ -10,6 +10,7 @@ enum StatusIndicatorConfigParser { var settings = StatusIndicatorSettings() guard var reader = ConfigFieldReader(root, at: path, diagnostics: &diagnostics) else { return settings } if let value = reader.choice("style", StatusIndicatorStyle.self) { settings.style = value } + if let value = reader.choice("animation", StatusIndicatorAnimation.self) { settings.animation = value } if let value = reader.number("size", range: Double(StatusIndicatorSettings.scaleRange.lowerBound)...Double(StatusIndicatorSettings.scaleRange.upperBound)) { settings.scale = CGFloat(value) } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift new file mode 100644 index 000000000000..07ec12a18813 --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift @@ -0,0 +1,27 @@ +import AppKit +import CmuxNextDesign + +/// The static look (`appearance.statusIndicator.animation: "static"`, or +/// Reduce Motion; cx-sya4n): the row names its state in a word or two left of +/// the still mark, in the second line's font and color. It is one more mark +/// of the trailing cluster: the title keeps its place and only ends sooner, +/// and the hover actions fade it out with the marks they cover. +extension WorkspaceRowView { + /// The longest the label may get; a longer translation truncates. + static let statusLabelMaxWidth: CGFloat = 96 + + /// Lays out the status mark (when `shown`) and, in the static look, its + /// label left of it, ending at `trailing`; returns the new trailing edge. + func layoutActivity(trailing: CGFloat, titleTop: CGFloat, line: CGFloat, shown: Bool) -> CGFloat { + let text = shown && StatusIndicatorAppearance.shared.config.isStatic ? activity.state.shortLabel : nil + statusLabel.isHidden = text == nil + guard shown else { return trailing } + activity.frame = statusGlyphFrame(trailing: trailing, titleTop: titleTop) + let end = activity.frame.minX - Metrics.space2 + guard let text else { return end } + if statusLabel.stringValue != text { statusLabel.stringValue = text } + let width = min(ceil(statusLabel.intrinsicContentSize.width), Self.statusLabelMaxWidth) + statusLabel.frame = NSRect(x: end + Metrics.space1 - width, y: activity.frame.midY - line / 2, width: width, height: line) + return statusLabel.frame.minX - Metrics.space2 + } +} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift index fa1c7103fbd3..1074e42a58cd 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift @@ -13,7 +13,7 @@ final class WorkspaceRowView: SidebarRowView { let subtitle = SidebarRowView.label(font: SidebarStyle.subtitleFont) /// Expanded rows (`sidebar.density`, cx-13w3; WorkspaceRowView+Expanded): the age and the meta line. let timeLabel = SidebarRowView.label(font: SidebarStyle.subtitleFont), metaLabel = SidebarRowView.label(font: SidebarStyle.subtitleFont) - private let activity = StatusIndicatorView() + let activity = StatusIndicatorView(), statusLabel = SidebarRowView.label(font: SidebarStyle.subtitleFont) // the static look's state name /// The running agent's brand mark (`SidebarAgentMarkVariant`); hidden when off. private let agentMark = NSImageView() private(set) var agentMarkVariant = SidebarAgentMarkVariant.off @@ -89,7 +89,7 @@ final class WorkspaceRowView: SidebarRowView { mutedMark.imageScaling = .scaleProportionallyDown mutedMark.isHidden = true mutedMark.setAccessibilityElement(false) - [icon, title, subtitle, timeLabel, metaLabel, activity, agentMark, mutedMark, badge, presenceDots, closeButton, moreButton, pinButton, disclosureButton, tabCount, prBadge, placeholderBar, statusBlock] + [icon, title, subtitle, timeLabel, metaLabel, activity, statusLabel, agentMark, mutedMark, badge, presenceDots, closeButton, moreButton, pinButton, disclosureButton, tabCount, prBadge, placeholderBar, statusBlock] .forEach(addSubview) disclosureButton.isHidden = true tabCount.isHidden = true @@ -251,7 +251,7 @@ final class WorkspaceRowView: SidebarRowView { override func updateLayer() { performWithTheme { title.textColor = Palette.textPrimary - subtitle.textColor = Palette.textSecondary; [timeLabel, metaLabel].forEach { $0.textColor = Palette.textTertiary } + [subtitle, statusLabel].forEach { $0.textColor = Palette.textSecondary }; [timeLabel, metaLabel].forEach { $0.textColor = Palette.textTertiary } tabCount.textColor = Palette.textTertiary mutedMark.contentTintColor = Palette.textTertiary prBadge.textColor = Palette.textSecondary @@ -350,10 +350,8 @@ final class WorkspaceRowView: SidebarRowView { if markReplacesStatus { agentMark.frame = statusGlyphFrame(trailing: trailing, titleTop: top) trailing = agentMark.frame.minX - Metrics.space2 - } else if activity.showsGlyph { - activity.frame = statusGlyphFrame(trailing: trailing, titleTop: top) - trailing = activity.frame.minX - Metrics.space2 } + trailing = layoutActivity(trailing: trailing, titleTop: top, line: sh, shown: !markReplacesStatus && activity.showsGlyph) if !mutedMark.isHidden { mutedMark.frame = NSRect(x: trailing - ind, y: cy - ind / 2, width: ind, height: ind) trailing -= ind + Metrics.space2 @@ -388,7 +386,7 @@ final class WorkspaceRowView: SidebarRowView { title.setTrailingOcclusion(overlayStart.map { max(0, title.frame.maxX - ($0 - Metrics.space1)) } ?? 0, animated: fades) subtitle.wantsLayer = true subtitle.setTrailingFade(occlusion: overlayStart.map { max(0, subtitle.frame.maxX - ($0 - Metrics.space1)) } ?? 0, fade: fade, animated: fades) - for mark in [activity, agentMark, mutedMark, presenceDots, timeLabel] as [NSView] { + for mark in [activity, statusLabel, agentMark, mutedMark, presenceDots, timeLabel] as [NSView] { fadeOpacity(mark, to: overlayStart.map { mark.frame.maxX > $0 - Metrics.space1 } == true ? 0 : 1, fades: fades) } layoutStatus(x: textX, width: max(0, b.width - Metrics.space3 - textX), head: b.maxY, bottom: full.maxY) diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabAccessibilityElement.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabAccessibilityElement.swift index e6c0f3a57f00..c4d1a41e0f56 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabAccessibilityElement.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabAccessibilityElement.swift @@ -1,4 +1,5 @@ import AppKit +import CmuxNextDesign import os /// VoiceOver and automation element for one layer-drawn tab or chip. The @@ -68,7 +69,7 @@ extension TabCell { if let audio = item.audio { parts.append(audio == .muted ? Strings.axMuted : Strings.axPlayingAudio) } if let theme = item.themeBadge { parts.append(Strings.axTheme(theme.name)) } switch item.status { - case .needsInput: parts.append(Strings.axNeedsInput) + case .needsInput: parts.append(item.blockedKind.flatMap { StatusIndicatorState.waiting(kind: $0).shortLabel } ?? Strings.axNeedsInput) case .success: parts.append(Strings.axSuccess) case .failure: parts.append(Strings.axFailure) case .none: if item.isUnread { parts.append(Strings.axUnread) } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusBadge.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusBadge.swift index e5f1a307680d..4b99c1c794f7 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusBadge.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusBadge.swift @@ -18,10 +18,12 @@ extension TabCell { } } - /// The set's mark for the badge, or nil where the dot stays. + /// The set's mark for the badge, or nil where the dot stays. The static + /// look (`StatusIndicatorConfig.isStatic`) always draws a mark: each + /// state its own shape, never a dot told apart by color alone. func statusBadgePlan(config: StatusIndicatorConfig) -> StatusIndicatorPlan? { - guard config.iconSet != .current, let state = statusBadgeState else { return nil } - let plan = StatusIndicatorPlan.make(state, style: config.settings.style, animates: false, set: config.iconSet) + guard config.iconSet != .current || config.isStatic, let state = statusBadgeState else { return nil } + let plan = StatusIndicatorPlan.make(state, style: config.settings.style, animates: false, set: config.iconSet, isStatic: config.isStatic) return plan.glyph == .none ? nil : plan } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusIndicator.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusIndicator.swift index 43bf059b2a4c..07d9770835f3 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusIndicator.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextTabs/TabCell+StatusIndicator.swift @@ -10,7 +10,8 @@ extension TabCell: StatusIndicatorConfigClient { var spinnerPlan: StatusIndicatorPlan { guard item.indicator.replacesTabIcon else { return .hidden } let config = StatusIndicatorAppearance.shared.config - var plan = StatusIndicatorPlan.make(item.indicator, style: config.style(hint: item.busyStyle), animates: config.animatesLoops, set: config.iconSet) + var plan = StatusIndicatorPlan.make(item.indicator, style: config.style(hint: item.busyStyle), animates: config.animatesLoops, set: config.iconSet, + isStatic: config.isStatic) if item.isWaiting, plan.animation == .spin { plan.animation = .spinBackward } return plan } diff --git a/plans/cmux-next/motion.md b/plans/cmux-next/motion.md index f90111370a44..39387b4d7525 100644 --- a/plans/cmux-next/motion.md +++ b/plans/cmux-next/motion.md @@ -42,7 +42,10 @@ shown or hidden; tab animations must be fast and smooth. 7. Reduce Motion (`NSWorkspace.accessibilityDisplayShouldReduceMotion`): movement (position, size, scale, scroll) is instant; opacity changes stay as a crossfade of at most 0.1 s, and hover and pressed fills are - instant; spinners and pulses stop and show a static glyph. + instant; spinners and pulses stop and show a static glyph. Status + indicators take the static look (`appearance.statusIndicator.animation`: + a distinct still shape per state and a short label), and the vendored + Home transcript and list hold their caret and typing dots still. 8. `ui.animationSpeed` in cmux.json: `"fast"` (default), `"normal"` (every time constant x1.5, about Apple's system pacing), `"off"` (every change in one frame, no crossfade, no loops). Palette actions: Use Fast Animations, @@ -96,8 +99,15 @@ nxmot (MacBook Pro, 120 Hz). | Loop | Period | Used by | | --- | --- | --- | | `spinner` | 0.9 s | busy tab spinner, sidebar agent spinner | -| `pulse` | 1.8 s | sidebar agent-waiting pulse | -| `flash` | 0.6 s | pane attention flash (two blinks; one 0.3 s fade under Reduce Motion) | +| `pulse` | 1.8 s (at least 0.5 s) | sidebar agent-waiting pulse | +| `flash` | 1.0 s (at least 1.0 s) | pane attention flash (two blinks half a period apart; the attention ring's blinks take half a period each; one 0.5 s fade under Reduce Motion) | + +The 2 Hz cap (cx-sya4n): nothing flashes faster than twice a second, in any +mode. Every on-off-on cycle of an opacity loop lasts at least 0.5 s +(`MotionLoop.shortestFlashCycle`), so the `pulse` period is at least 0.5 s and +the `flash` period at least 1.0 s, Debug Settings overrides included +(`MotionLoop.minimumPeriod`); `normal` speed only slows them. +`BlinkRateCapTests` checks every flash at the fastest settings. | Marquee (`MotionMarquee`) | Value | Used by | | --- | --- | --- | @@ -182,7 +192,7 @@ rest). | Drop-zone overlay | display-link spring 0.20/0.90 | `track` | 192 / 250 ms | 117 / 167 ms | - | | Focus ring and inactive dim | CATransaction 0.16 s | `focus` | 160 ms | 100 ms | - | | Divider hover | CATransaction 0.12 s | `hover` | 120 ms | 80 ms | - | -| Pane attention flash | keyframes 0.9 s (0.35 s fade reduced) | `flash` 0.6 s (0.3 s reduced; none when off) | 900 ms | 600 ms | - | +| Pane attention flash | keyframes 0.9 s (0.35 s fade reduced) | `flash` 1.0 s (0.5 s reduced; none when off) | 900 ms | 1000 ms | - | | Programmatic window close | window fade 0.18 s ease-in | instant (the windows work on this branch made it close in the same turn as the transition) | 180 ms | 0 | - | | Notifications and bubbles | no dedicated animation; tab badge color changes with the tab fill fade | `hover` | 140 ms | 80 ms | - | diff --git a/plans/cmux-next/status-indicators.md b/plans/cmux-next/status-indicators.md index aba9e637a417..d9f91fed1ba1 100644 --- a/plans/cmux-next/status-indicators.md +++ b/plans/cmux-next/status-indicators.md @@ -55,6 +55,19 @@ opacity, dot size, pulse low opacity, native steps. Style precedence: Debug over hint (`--style`) when its source is honored (`appearance.statusIndicator.honorStatusStyle`: true by default, false, or a list of sources such as `["explicit", "run"]`), then the setting. +Static look (cx-sya4n, Leo 2026-10-13: Austin gets headaches from blinking and pulsing lights; "what if they +were just colors or symbols or some text"): `appearance.statusIndicator.animation` (`animated`, the default, or +`static`; Settings > Appearance > Loading Indicator > Status Indicators). Static, and always under Reduce Motion +(`StatusIndicatorConfig.isStatic`), nothing animates and every state draws its own shape whatever the Debug icon +set (`StatusIndicatorPlan.stillPlan`): working a solid accent dot; waiting the kind marks (hand for permission, +? bubble for a question, key for sign-in, ! for plain); error an x in a ring; done a check; paused an empty +ring; busy the style's still glyph (an open arc for `arc` and `dot`, the native spokes, the first braille +frame); known progress keeps the ring. A tab's needs-input, done and failed badge draws the same marks in place +of its colored dot. Every indicator's tooltip and VoiceOver label is the state's short name +(`StatusIndicatorState.shortLabel`: Working, Loading, Paused, Waiting, Needs permission, Question, Sign-in +needed, Error, Done); in the static look a sidebar workspace row also shows it, in the second line's font and +color, left of its mark (`WorkspaceRowView+StatusLabel`). Tabs have no room for it: VoiceOver names the state. + Behavior settings (`status.*`, Settings > Appearance > Loading Indicator and Settings > Notifications): `status.inferCommandBusy` (false since cx-ag5.6.5, Lawrence 2026-10-13: htop looked loading) and `status.inferCommandBusyAfter` (3 s): when on, a plain shell command shows as busy once it has run that long; diff --git a/scripts/localization-allowed-omissions.json b/scripts/localization-allowed-omissions.json index 97837d10c359..609a63de3840 100644 --- a/scripts/localization-allowed-omissions.json +++ b/scripts/localization-allowed-omissions.json @@ -6579,5 +6579,17 @@ ] } } + }, + "status.label.error": { + "source": "Error", + "identityLocales": { + "es": "Established UI or technical term with the same spelling in this locale; a translated entry is still required." + } + }, + "status.label.question": { + "source": "Question", + "identityLocales": { + "fr": "Question is the usual French noun for this status label; a translated entry is still required." + } } } From 13323e953c3943ef03e36b281d17788ac99ead51 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 20:36:28 -0700 Subject: [PATCH 04/16] settings: export appearance.statusIndicator.animation Regenerated on the fleet (export-settings-artifacts.sh) and gen-strings. Co-Authored-By: Claude Opus 5.5 --- docs/mdm/com.manaflow.cmux.json | 10 +++ docs/mdm/com.manaflow.cmux.plist | 17 ++++ docs/mdm/managed-preferences.md | 1 + schemas/settings/settings-schema.json | 72 +++++++++++++++- .../src/pages/settings/generated/strings.json | 84 +++++++++++++++++++ 5 files changed, 183 insertions(+), 1 deletion(-) diff --git a/docs/mdm/com.manaflow.cmux.json b/docs/mdm/com.manaflow.cmux.json index 2568b8b532d8..9787791b3135 100644 --- a/docs/mdm/com.manaflow.cmux.json +++ b/docs/mdm/com.manaflow.cmux.json @@ -673,6 +673,16 @@ "title" : "Sidebar Background", "type" : "string" }, + "appearance.statusIndicator.animation" : { + "default" : "animated", + "description" : "Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion.", + "enum" : [ + "animated", + "static" + ], + "title" : "Status Indicators", + "type" : "string" + }, "appearance.statusIndicator.color" : { "description" : "appearance.statusIndicator.color", "title" : "Color", diff --git a/docs/mdm/com.manaflow.cmux.plist b/docs/mdm/com.manaflow.cmux.plist index 422392bcde7c..f42818ad5303 100644 --- a/docs/mdm/com.manaflow.cmux.plist +++ b/docs/mdm/com.manaflow.cmux.plist @@ -2256,6 +2256,23 @@ pfm_type string + + pfm_default + animated + pfm_description + Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion. + pfm_name + appearance.statusIndicator.animation + pfm_range_list + + animated + static + + pfm_title + Status Indicators + pfm_type + string + pfm_default 1 diff --git a/docs/mdm/managed-preferences.md b/docs/mdm/managed-preferences.md index ae3ce6c8ee5b..62108b86e7ab 100644 --- a/docs/mdm/managed-preferences.md +++ b/docs/mdm/managed-preferences.md @@ -143,6 +143,7 @@ Files: `com.manaflow.cmux.plist` (ProfileManifests: iMazing Profile Editor, Prof | `appearance.surfaces.editor.color` | string | | | Code Editor Color | | `appearance.surfaces.editor.opacity` | real | | 0 to 1 | Code Editor Opacity | | `appearance.statusIndicator.style` | string | `"arc"` | `arc`, `native`, `dot`, `braille`, `none` | Style. How sidebar rows, tabs and panes show work in progress. | +| `appearance.statusIndicator.animation` | string | `"animated"` | `animated`, `static` | Status Indicators. Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion. | | `appearance.statusIndicator.size` | real | `1` | 0.5 to 1.5 | Size | | `appearance.statusIndicator.thickness` | real | `1.5` | 0.5 to 4 | Line Width | | `appearance.statusIndicator.color` | string | | | Color | diff --git a/schemas/settings/settings-schema.json b/schemas/settings/settings-schema.json index 88c0fe1dab4f..b2bd88e54e88 100644 --- a/schemas/settings/settings-schema.json +++ b/schemas/settings/settings-schema.json @@ -354,6 +354,7 @@ "key" : "settings.group.statusIndicator", "rows" : [ "appearance.statusIndicator.style", + "appearance.statusIndicator.animation", "appearance.statusIndicator.size", "appearance.statusIndicator.thickness", "appearance.statusIndicator.color", @@ -12233,6 +12234,75 @@ }, "validation" : "portable" }, + { + "accepts" : [ + "animated", + "static" + ], + "agent_refusal" : null, + "agent_settable" : true, + "choices" : [ + { + "title" : { + "key" : "settings.choice.animated", + "text" : "Animated" + }, + "value" : "animated" + }, + { + "title" : { + "key" : "settings.choice.static", + "text" : "Static" + }, + "value" : "static" + } + ], + "consumers" : [ + "cmux-next" + ], + "default" : "animated", + "default_label" : null, + "group" : { + "key" : "settings.group.statusIndicator", + "text" : "Loading Indicator" + }, + "help" : { + "key" : "settings.statusIndicator.animation.help", + "text" : "Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion." + }, + "kept_on_reset_all" : false, + "key" : "appearance.statusIndicator.animation", + "keywords" : [ + "animation", + "motion", + "blink", + "pulse", + "flash", + "static", + "reduce motion", + "accessibility", + "headache" + ], + "kind" : "choice", + "page_hidden" : false, + "path" : [ + "appearance", + "statusIndicator", + "animation" + ], + "refuses" : [ + "__not_a_choice__", + 1, + true + ], + "section" : "appearance", + "summary" : null, + "title" : { + "key" : "settings.statusIndicator.animation", + "text" : "Status Indicators" + }, + "validation" : "portable" + }, { "accepts" : [ 0.5, @@ -23295,7 +23365,7 @@ "validation" : "portable" } ], - "schema_hash" : "64d9a974884e7c1b45b39addb3195c498d94456d60e65de5dd67ec9628c11f81", + "schema_hash" : "377a98ac966aa50de064da932c8137620e76c0d891d6bff829255e98f3e14f59", "sections" : [ { "id" : "general", diff --git a/webviews/src/pages/settings/generated/strings.json b/webviews/src/pages/settings/generated/strings.json index 1c9d3d3c1ce9..c3a0ec800878 100644 --- a/webviews/src/pages/settings/generated/strings.json +++ b/webviews/src/pages/settings/generated/strings.json @@ -228,6 +228,7 @@ "settings.choice.agentPaneText": "Show as Text", "settings.choice.aggressive": "After 10 Minutes", "settings.choice.always": "Always", + "settings.choice.animated": "Animated", "settings.choice.blink": "Blink", "settings.choice.border": "Border", "settings.choice.borders": "Borders", @@ -331,6 +332,7 @@ "settings.choice.splitEven": "Even", "settings.choice.splitHalve": "Halve the Pane", "settings.choice.standard": "Standard", + "settings.choice.static": "Static", "settings.choice.steady": "Steady", "settings.choice.stripScrollbarAuto": "While Scrolling", "settings.choice.stripScrollbarSystem": "Follow System", @@ -611,6 +613,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run notifies when the command took at least this long.", "settings.status.runNotifyMinimumSeconds.summary": "Long runs notify when they finish", "settings.status.runNotifyWhenVisible": "Notify Even When the Terminal Is Visible", + "settings.statusIndicator.animation": "Status Indicators", + "settings.statusIndicator.animation.help": "Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion.", "settings.statusIndicator.color": "Color", "settings.statusIndicator.honorStatusStyle": "Let Statuses Choose Their Style", "settings.statusIndicator.honorStatusStyle.help": "A status that asks for a style (cmux status set --style) uses it.", @@ -1221,6 +1225,7 @@ "settings.choice.agentPaneText": "العرض كنص", "settings.choice.aggressive": "بعد 10 دقائق", "settings.choice.always": "دائمًا", + "settings.choice.animated": "متحركة", "settings.choice.blink": "وميض", "settings.choice.border": "الحد", "settings.choice.borders": "حدود", @@ -1324,6 +1329,7 @@ "settings.choice.splitEven": "متساوٍ", "settings.choice.splitHalve": "تنصيف الجزء", "settings.choice.standard": "قياسي", + "settings.choice.static": "ثابتة", "settings.choice.steady": "ثابت", "settings.choice.stripScrollbarAuto": "أثناء التمرير", "settings.choice.stripScrollbarSystem": "اتباع النظام", @@ -1604,6 +1610,8 @@ "settings.status.runNotifyMinimumSeconds.help": "يرسل cmux status run إشعارًا عندما يستغرق الأمر هذه المدة على الأقل.", "settings.status.runNotifyMinimumSeconds.summary": "تُرسل التشغيلات الطويلة إشعارًا عند انتهائها", "settings.status.runNotifyWhenVisible": "الإشعار حتى عندما تكون الطرفية ظاهرة", + "settings.statusIndicator.animation": "مؤشرات الحالة", + "settings.statusIndicator.animation.help": "يستخدم الوضع الثابت ألوانًا ثابتة وشكلًا مميزًا لكل حالة وتسميات قصيرة. وهو مفعّل دائمًا عند تشغيل «تقليل الحركة».", "settings.statusIndicator.color": "اللون", "settings.statusIndicator.honorStatusStyle": "السماح للحالات باختيار نمطها", "settings.statusIndicator.honorStatusStyle.help": "تستخدم الحالة التي تطلب نمطًا (cmux status set --style) ذلك النمط.", @@ -2214,6 +2222,7 @@ "settings.choice.agentPaneText": "Prikaži kao tekst", "settings.choice.aggressive": "Nakon 10 minuta", "settings.choice.always": "Uvijek", + "settings.choice.animated": "Animirano", "settings.choice.blink": "Treptanje", "settings.choice.border": "Okvir", "settings.choice.borders": "Obrubi", @@ -2317,6 +2326,7 @@ "settings.choice.splitEven": "Jednako", "settings.choice.splitHalve": "Prepolovi okno", "settings.choice.standard": "Standardno", + "settings.choice.static": "Statično", "settings.choice.steady": "Stalno", "settings.choice.stripScrollbarAuto": "Tokom pomicanja", "settings.choice.stripScrollbarSystem": "Prati sistem", @@ -2597,6 +2607,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run obavještava kad naredba traje barem ovoliko.", "settings.status.runNotifyMinimumSeconds.summary": "Duga izvršavanja javljaju kad završe", "settings.status.runNotifyWhenVisible": "Obavijesti i kad je terminal vidljiv", + "settings.statusIndicator.animation": "Indikatori statusa", + "settings.statusIndicator.animation.help": "Statično koristi postojane boje, poseban oblik za svako stanje i kratke oznake. Uvijek je uključeno uz Smanji pokrete.", "settings.statusIndicator.color": "Boja", "settings.statusIndicator.honorStatusStyle": "Dozvoli statusima da biraju stil", "settings.statusIndicator.honorStatusStyle.help": "Status koji traži stil (cmux status set --style) koristi ga.", @@ -3207,6 +3219,7 @@ "settings.choice.agentPaneText": "Vis som tekst", "settings.choice.aggressive": "Efter 10 minutter", "settings.choice.always": "Altid", + "settings.choice.animated": "Animeret", "settings.choice.blink": "Blink", "settings.choice.border": "Kant", "settings.choice.borders": "Kanter", @@ -3310,6 +3323,7 @@ "settings.choice.splitEven": "Lige", "settings.choice.splitHalve": "Halvér ruden", "settings.choice.standard": "Standard", + "settings.choice.static": "Statisk", "settings.choice.steady": "Konstant", "settings.choice.stripScrollbarAuto": "Under rulning", "settings.choice.stripScrollbarSystem": "Følg systemet", @@ -3590,6 +3604,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run giver besked, når kommandoen tog mindst så lang tid.", "settings.status.runNotifyMinimumSeconds.summary": "Lange kørsler giver besked, når de er færdige", "settings.status.runNotifyWhenVisible": "Giv besked, selv når terminalen er synlig", + "settings.statusIndicator.animation": "Statusindikatorer", + "settings.statusIndicator.animation.help": "Statisk bruger faste farver, en særskilt form for hver tilstand og korte etiketter. Det er altid slået til med Reducer bevægelse.", "settings.statusIndicator.color": "Farve", "settings.statusIndicator.honorStatusStyle": "Lad statusser vælge deres stil", "settings.statusIndicator.honorStatusStyle.help": "En status, der beder om en stil (cmux status set --style), bruger den.", @@ -4200,6 +4216,7 @@ "settings.choice.agentPaneText": "Als Text zeigen", "settings.choice.aggressive": "Nach 10 Minuten", "settings.choice.always": "Immer", + "settings.choice.animated": "Animiert", "settings.choice.blink": "Blinken", "settings.choice.border": "Rahmen", "settings.choice.borders": "Rahmen", @@ -4303,6 +4320,7 @@ "settings.choice.splitEven": "Gleichmäßig", "settings.choice.splitHalve": "Bereich halbieren", "settings.choice.standard": "Standard", + "settings.choice.static": "Statisch", "settings.choice.steady": "Dauerhaft", "settings.choice.stripScrollbarAuto": "Beim Scrollen", "settings.choice.stripScrollbarSystem": "Systemeinstellung", @@ -4583,6 +4601,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run benachrichtigt, wenn der Befehl mindestens so lange dauerte.", "settings.status.runNotifyMinimumSeconds.summary": "Lange Läufe melden sich, wenn sie fertig sind", "settings.status.runNotifyWhenVisible": "Auch benachrichtigen, wenn das Terminal sichtbar ist", + "settings.statusIndicator.animation": "Statusanzeigen", + "settings.statusIndicator.animation.help": "„Statisch“ verwendet gleichbleibende Farben, eine eigene Form für jeden Zustand und kurze Beschriftungen. Bei „Bewegung reduzieren“ ist es immer aktiv.", "settings.statusIndicator.color": "Farbe", "settings.statusIndicator.honorStatusStyle": "Status dürfen ihren Stil wählen", "settings.statusIndicator.honorStatusStyle.help": "Ein Status, der einen Stil anfordert (cmux status set --style), verwendet ihn.", @@ -5193,6 +5213,7 @@ "settings.choice.agentPaneText": "Mostrar como texto", "settings.choice.aggressive": "Tras 10 minutos", "settings.choice.always": "Siempre", + "settings.choice.animated": "Animado", "settings.choice.blink": "Parpadeo", "settings.choice.border": "Borde", "settings.choice.borders": "Bordes", @@ -5296,6 +5317,7 @@ "settings.choice.splitEven": "Igual", "settings.choice.splitHalve": "Dividir el panel a la mitad", "settings.choice.standard": "Estándar", + "settings.choice.static": "Estático", "settings.choice.steady": "Fijo", "settings.choice.stripScrollbarAuto": "Al desplazarse", "settings.choice.stripScrollbarSystem": "Seguir el sistema", @@ -5576,6 +5598,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run avisa cuando el comando tardó al menos esto.", "settings.status.runNotifyMinimumSeconds.summary": "Las ejecuciones largas avisan al terminar", "settings.status.runNotifyWhenVisible": "Avisar aunque el terminal esté visible", + "settings.statusIndicator.animation": "Indicadores de estado", + "settings.statusIndicator.animation.help": "Estático usa colores fijos, una forma distinta para cada estado y etiquetas breves. Siempre está activo con Reducir movimiento.", "settings.statusIndicator.color": "Color", "settings.statusIndicator.honorStatusStyle": "Permitir que los estados elijan su estilo", "settings.statusIndicator.honorStatusStyle.help": "Un estado que pide un estilo (cmux status set --style) lo usa.", @@ -6186,6 +6210,7 @@ "settings.choice.agentPaneText": "Afficher en texte", "settings.choice.aggressive": "Après 10 minutes", "settings.choice.always": "Toujours", + "settings.choice.animated": "Animé", "settings.choice.blink": "Clignotement", "settings.choice.border": "Bordure", "settings.choice.borders": "Bordures", @@ -6289,6 +6314,7 @@ "settings.choice.splitEven": "Égal", "settings.choice.splitHalve": "Diviser le panneau en deux", "settings.choice.standard": "Standard", + "settings.choice.static": "Statique", "settings.choice.steady": "Fixe", "settings.choice.stripScrollbarAuto": "Pendant le défilement", "settings.choice.stripScrollbarSystem": "Suivre le système", @@ -6569,6 +6595,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run notifie quand la commande a duré au moins ce temps.", "settings.status.runNotifyMinimumSeconds.summary": "Les exécutions longues préviennent à la fin", "settings.status.runNotifyWhenVisible": "Notifier même si le terminal est visible", + "settings.statusIndicator.animation": "Indicateurs d’état", + "settings.statusIndicator.animation.help": "Statique utilise des couleurs fixes, une forme distincte pour chaque état et de courts libellés. Il est toujours actif avec Réduire les animations.", "settings.statusIndicator.color": "Couleur", "settings.statusIndicator.honorStatusStyle": "Laisser les statuts choisir leur style", "settings.statusIndicator.honorStatusStyle.help": "Un statut qui demande un style (cmux status set --style) l’utilise.", @@ -7179,6 +7207,7 @@ "settings.choice.agentPaneText": "Mostra come testo", "settings.choice.aggressive": "Dopo 10 minuti", "settings.choice.always": "Sempre", + "settings.choice.animated": "Animato", "settings.choice.blink": "Lampeggio", "settings.choice.border": "Bordo", "settings.choice.borders": "Bordi", @@ -7282,6 +7311,7 @@ "settings.choice.splitEven": "Uguale", "settings.choice.splitHalve": "Dimezza il riquadro", "settings.choice.standard": "Standard", + "settings.choice.static": "Statico", "settings.choice.steady": "Fisso", "settings.choice.stripScrollbarAuto": "Durante lo scorrimento", "settings.choice.stripScrollbarSystem": "Segui il sistema", @@ -7562,6 +7592,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run notifica quando il comando ha impiegato almeno questo tempo.", "settings.status.runNotifyMinimumSeconds.summary": "Le esecuzioni lunghe avvisano quando finiscono", "settings.status.runNotifyWhenVisible": "Notifica anche se il terminale è visibile", + "settings.statusIndicator.animation": "Indicatori di stato", + "settings.statusIndicator.animation.help": "Statico usa colori fissi, una forma distinta per ogni stato ed etichette brevi. È sempre attivo con Riduci movimento.", "settings.statusIndicator.color": "Colore", "settings.statusIndicator.honorStatusStyle": "Consenti agli stati di scegliere lo stile", "settings.statusIndicator.honorStatusStyle.help": "Uno stato che chiede uno stile (cmux status set --style) lo usa.", @@ -8172,6 +8204,7 @@ "settings.choice.agentPaneText": "テキストで表示", "settings.choice.aggressive": "10分後", "settings.choice.always": "常に", + "settings.choice.animated": "アニメーション", "settings.choice.blink": "点滅", "settings.choice.border": "枠線", "settings.choice.borders": "枠線", @@ -8275,6 +8308,7 @@ "settings.choice.splitEven": "均等", "settings.choice.splitHalve": "ペインを半分に", "settings.choice.standard": "標準", + "settings.choice.static": "静的", "settings.choice.steady": "点灯", "settings.choice.stripScrollbarAuto": "スクロール中", "settings.choice.stripScrollbarSystem": "システムに従う", @@ -8555,6 +8589,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run はコマンドがこの時間以上かかったときに通知します。", "settings.status.runNotifyMinimumSeconds.summary": "時間のかかる実行は終了時に通知", "settings.status.runNotifyWhenVisible": "ターミナルが表示中でも通知", + "settings.statusIndicator.animation": "ステータスインジケーター", + "settings.statusIndicator.animation.help": "静的では、変化しない色、状態ごとに異なる形、短いラベルを使います。「視差効果を減らす」がオンのときは常に静的になります。", "settings.statusIndicator.color": "色", "settings.statusIndicator.honorStatusStyle": "ステータスのスタイル指定を許可", "settings.statusIndicator.honorStatusStyle.help": "スタイルを指定したステータス(cmux status set --style)はそのスタイルを使います。", @@ -9165,6 +9201,7 @@ "settings.choice.agentPaneText": "បង្ហាញជាអត្ថបទ", "settings.choice.aggressive": "បន្ទាប់ពី 10 នាទី", "settings.choice.always": "ជានិច្ច", + "settings.choice.animated": "មានចលនា", "settings.choice.blink": "ភ្លឹបភ្លែត", "settings.choice.border": "ស៊ុម", "settings.choice.borders": "ស៊ុម", @@ -9268,6 +9305,7 @@ "settings.choice.splitEven": "ស្មើគ្នា", "settings.choice.splitHalve": "ពាក់កណ្តាលផ្ទាំង", "settings.choice.standard": "ស្តង់ដារ", + "settings.choice.static": "ឋិតិវន្ត", "settings.choice.steady": "ថេរ", "settings.choice.stripScrollbarAuto": "ពេលរំកិល", "settings.choice.stripScrollbarSystem": "តាមប្រព័ន្ធ", @@ -9548,6 +9586,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run ជូនដំណឹងពេលពាក្យបញ្ជាយូរយ៉ាងហោចណាស់ប៉ុណ្ណេះ។", "settings.status.runNotifyMinimumSeconds.summary": "ការដំណើរការយូរជូនដំណឹងពេលបញ្ចប់", "settings.status.runNotifyWhenVisible": "ជូនដំណឹងទោះ terminal មើលឃើញ", + "settings.statusIndicator.animation": "សូចនាករស្ថានភាព", + "settings.statusIndicator.animation.help": "ឋិតិវន្តប្រើពណ៌ថេរ រូបរាងខុសគ្នាសម្រាប់ស្ថានភាពនីមួយៗ និងស្លាកខ្លីៗ។ វាតែងតែបើកនៅពេលកាត់បន្ថយចលនាបើក។", "settings.statusIndicator.color": "ពណ៌", "settings.statusIndicator.honorStatusStyle": "អនុញ្ញាតឱ្យស្ថានភាពជ្រើសរចនាប័ទ្ម", "settings.statusIndicator.honorStatusStyle.help": "ស្ថានភាពដែលស្នើរចនាប័ទ្ម (cmux status set --style) ប្រើវា។", @@ -10158,6 +10198,7 @@ "settings.choice.agentPaneText": "텍스트로 표시", "settings.choice.aggressive": "10분 후", "settings.choice.always": "항상", + "settings.choice.animated": "애니메이션", "settings.choice.blink": "깜박임", "settings.choice.border": "테두리", "settings.choice.borders": "테두리", @@ -10261,6 +10302,7 @@ "settings.choice.splitEven": "균등", "settings.choice.splitHalve": "창을 반으로", "settings.choice.standard": "표준", + "settings.choice.static": "정적", "settings.choice.steady": "고정", "settings.choice.stripScrollbarAuto": "스크롤할 때", "settings.choice.stripScrollbarSystem": "시스템 설정 따르기", @@ -10541,6 +10583,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run은 명령이 이 시간 이상 걸리면 알립니다.", "settings.status.runNotifyMinimumSeconds.summary": "오래 걸린 실행은 끝나면 알림", "settings.status.runNotifyWhenVisible": "터미널이 보여도 알림", + "settings.statusIndicator.animation": "상태 표시기", + "settings.statusIndicator.animation.help": "정적은 고정된 색상, 상태마다 다른 모양, 짧은 레이블을 사용합니다. 동작 줄이기가 켜져 있으면 항상 적용됩니다.", "settings.statusIndicator.color": "색상", "settings.statusIndicator.honorStatusStyle": "상태가 스타일을 고르도록 허용", "settings.statusIndicator.honorStatusStyle.help": "스타일을 요청한 상태(cmux status set --style)는 그 스타일을 씁니다.", @@ -11151,6 +11195,7 @@ "settings.choice.agentPaneText": "Vis som tekst", "settings.choice.aggressive": "Etter 10 minutter", "settings.choice.always": "Alltid", + "settings.choice.animated": "Animert", "settings.choice.blink": "Blink", "settings.choice.border": "Kant", "settings.choice.borders": "Kanter", @@ -11254,6 +11299,7 @@ "settings.choice.splitEven": "Jevn", "settings.choice.splitHalve": "Halver ruten", "settings.choice.standard": "Standard", + "settings.choice.static": "Statisk", "settings.choice.steady": "Konstant", "settings.choice.stripScrollbarAuto": "Under rulling", "settings.choice.stripScrollbarSystem": "Følg systemet", @@ -11534,6 +11580,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run varsler når kommandoen tok minst så lang tid.", "settings.status.runNotifyMinimumSeconds.summary": "Lange kjøringer varsler når de er ferdige", "settings.status.runNotifyWhenVisible": "Varsle selv når terminalen er synlig", + "settings.statusIndicator.animation": "Statusindikatorer", + "settings.statusIndicator.animation.help": "Statisk bruker faste farger, en egen form for hver tilstand og korte etiketter. Det er alltid på med Reduser bevegelse.", "settings.statusIndicator.color": "Farge", "settings.statusIndicator.honorStatusStyle": "La statuser velge stil", "settings.statusIndicator.honorStatusStyle.help": "En status som ber om en stil (cmux status set --style), bruker den.", @@ -12144,6 +12192,7 @@ "settings.choice.agentPaneText": "Pokaż jako tekst", "settings.choice.aggressive": "Po 10 minutach", "settings.choice.always": "Zawsze", + "settings.choice.animated": "Animowane", "settings.choice.blink": "Mignięcie", "settings.choice.border": "Obramowanie", "settings.choice.borders": "Ramki", @@ -12247,6 +12296,7 @@ "settings.choice.splitEven": "Równo", "settings.choice.splitHalve": "Podziel panel na pół", "settings.choice.standard": "Standardowy", + "settings.choice.static": "Statyczne", "settings.choice.steady": "Stały", "settings.choice.stripScrollbarAuto": "Podczas przewijania", "settings.choice.stripScrollbarSystem": "Zgodnie z systemem", @@ -12527,6 +12577,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run powiadamia, gdy polecenie trwało co najmniej tyle.", "settings.status.runNotifyMinimumSeconds.summary": "Długie uruchomienia powiadamiają po zakończeniu", "settings.status.runNotifyWhenVisible": "Powiadamiaj, nawet gdy terminal jest widoczny", + "settings.statusIndicator.animation": "Wskaźniki stanu", + "settings.statusIndicator.animation.help": "Statyczne używa stałych kolorów, osobnego kształtu dla każdego stanu i krótkich etykiet. Jest zawsze włączone przy Ogranicz ruch.", "settings.statusIndicator.color": "Kolor", "settings.statusIndicator.honorStatusStyle": "Pozwól statusom wybierać styl", "settings.statusIndicator.honorStatusStyle.help": "Status, który prosi o styl (cmux status set --style), używa go.", @@ -13137,6 +13189,7 @@ "settings.choice.agentPaneText": "Mostrar como texto", "settings.choice.aggressive": "Após 10 minutos", "settings.choice.always": "Sempre", + "settings.choice.animated": "Animado", "settings.choice.blink": "Piscar", "settings.choice.border": "Borda", "settings.choice.borders": "Bordas", @@ -13240,6 +13293,7 @@ "settings.choice.splitEven": "Igual", "settings.choice.splitHalve": "Dividir o painel ao meio", "settings.choice.standard": "Padrão", + "settings.choice.static": "Estático", "settings.choice.steady": "Fixo", "settings.choice.stripScrollbarAuto": "Ao rolar", "settings.choice.stripScrollbarSystem": "Seguir o sistema", @@ -13520,6 +13574,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run notifica quando o comando levou pelo menos esse tempo.", "settings.status.runNotifyMinimumSeconds.summary": "Execuções longas avisam quando terminam", "settings.status.runNotifyWhenVisible": "Notificar mesmo com o terminal visível", + "settings.statusIndicator.animation": "Indicadores de status", + "settings.statusIndicator.animation.help": "Estático usa cores fixas, uma forma diferente para cada estado e rótulos curtos. Fica sempre ativo com Reduzir movimento.", "settings.statusIndicator.color": "Cor", "settings.statusIndicator.honorStatusStyle": "Permitir que status escolham o estilo", "settings.statusIndicator.honorStatusStyle.help": "Um status que pede um estilo (cmux status set --style) o usa.", @@ -14130,6 +14186,7 @@ "settings.choice.agentPaneText": "Показывать как текст", "settings.choice.aggressive": "Через 10 минут", "settings.choice.always": "Всегда", + "settings.choice.animated": "Анимированные", "settings.choice.blink": "Мигание", "settings.choice.border": "Рамка", "settings.choice.borders": "Рамки", @@ -14233,6 +14290,7 @@ "settings.choice.splitEven": "Поровну", "settings.choice.splitHalve": "Делить панель пополам", "settings.choice.standard": "Стандартный", + "settings.choice.static": "Статичные", "settings.choice.steady": "Постоянно", "settings.choice.stripScrollbarAuto": "При прокрутке", "settings.choice.stripScrollbarSystem": "Как в системе", @@ -14513,6 +14571,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run уведомляет, если команда шла не меньше этого.", "settings.status.runNotifyMinimumSeconds.summary": "Долгие запуски уведомляют по завершении", "settings.status.runNotifyWhenVisible": "Уведомлять, даже если терминал виден", + "settings.statusIndicator.animation": "Индикаторы состояния", + "settings.statusIndicator.animation.help": "В статичном режиме используются постоянные цвета, своя форма для каждого состояния и короткие подписи. При «Уменьшении движения» он включён всегда.", "settings.statusIndicator.color": "Цвет", "settings.statusIndicator.honorStatusStyle": "Разрешить статусам выбирать стиль", "settings.statusIndicator.honorStatusStyle.help": "Статус, запросивший стиль (cmux status set --style), использует его.", @@ -15123,6 +15183,7 @@ "settings.choice.agentPaneText": "แสดงเป็นข้อความ", "settings.choice.aggressive": "หลัง 10 นาที", "settings.choice.always": "ทุกครั้ง", + "settings.choice.animated": "เคลื่อนไหว", "settings.choice.blink": "กะพริบ", "settings.choice.border": "ขอบ", "settings.choice.borders": "เส้นขอบ", @@ -15226,6 +15287,7 @@ "settings.choice.splitEven": "เท่ากัน", "settings.choice.splitHalve": "แบ่งบานครึ่งหนึ่ง", "settings.choice.standard": "มาตรฐาน", + "settings.choice.static": "คงที่", "settings.choice.steady": "คงที่", "settings.choice.stripScrollbarAuto": "ขณะเลื่อน", "settings.choice.stripScrollbarSystem": "ตามระบบ", @@ -15506,6 +15568,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run แจ้งเตือนเมื่อคำสั่งใช้เวลาอย่างน้อยเท่านี้", "settings.status.runNotifyMinimumSeconds.summary": "งานที่รันนานจะแจ้งเตือนเมื่อเสร็จ", "settings.status.runNotifyWhenVisible": "แจ้งเตือนแม้เทอร์มินัลมองเห็นอยู่", + "settings.statusIndicator.animation": "ตัวบ่งชี้สถานะ", + "settings.statusIndicator.animation.help": "แบบคงที่ใช้สีคงที่ รูปทรงเฉพาะสำหรับแต่ละสถานะ และป้ายสั้นๆ และจะเปิดใช้เสมอเมื่อเปิดลดการเคลื่อนไหว", "settings.statusIndicator.color": "สี", "settings.statusIndicator.honorStatusStyle": "ให้สถานะเลือกรูปแบบเอง", "settings.statusIndicator.honorStatusStyle.help": "สถานะที่ขอรูปแบบ (cmux status set --style) จะใช้รูปแบบนั้น", @@ -16116,6 +16180,7 @@ "settings.choice.agentPaneText": "Metin olarak göster", "settings.choice.aggressive": "10 Dakika Sonra", "settings.choice.always": "Her Zaman", + "settings.choice.animated": "Animasyonlu", "settings.choice.blink": "Yanıp Sönme", "settings.choice.border": "Kenarlık", "settings.choice.borders": "Kenarlıklar", @@ -16219,6 +16284,7 @@ "settings.choice.splitEven": "Eşit", "settings.choice.splitHalve": "Bölmeyi ikiye ayır", "settings.choice.standard": "Standart", + "settings.choice.static": "Sabit", "settings.choice.steady": "Sabit", "settings.choice.stripScrollbarAuto": "Kaydırırken", "settings.choice.stripScrollbarSystem": "Sistemi izle", @@ -16499,6 +16565,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run, komut en az bu kadar sürdüğünde bildirir.", "settings.status.runNotifyMinimumSeconds.summary": "Uzun çalıştırmalar bitince bildirir", "settings.status.runNotifyWhenVisible": "Terminal görünürken bile bildir", + "settings.statusIndicator.animation": "Durum göstergeleri", + "settings.statusIndicator.animation.help": "Sabit; değişmeyen renkler, her durum için ayrı bir şekil ve kısa etiketler kullanır. Hareketi Azalt açıkken her zaman etkindir.", "settings.statusIndicator.color": "Renk", "settings.statusIndicator.honorStatusStyle": "Durumlar kendi stilini seçsin", "settings.statusIndicator.honorStatusStyle.help": "Stil isteyen bir durum (cmux status set --style) onu kullanır.", @@ -17109,6 +17177,7 @@ "settings.choice.agentPaneText": "Показувати як текст", "settings.choice.aggressive": "Через 10 хвилин", "settings.choice.always": "Завжди", + "settings.choice.animated": "Анімовані", "settings.choice.blink": "Блимання", "settings.choice.border": "Рамка", "settings.choice.borders": "Рамки", @@ -17212,6 +17281,7 @@ "settings.choice.splitEven": "Порівну", "settings.choice.splitHalve": "Ділити панель навпіл", "settings.choice.standard": "Стандартний", + "settings.choice.static": "Статичні", "settings.choice.steady": "Постійно", "settings.choice.stripScrollbarAuto": "Під час прокручування", "settings.choice.stripScrollbarSystem": "Як у системі", @@ -17492,6 +17562,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run сповіщає, якщо команда тривала щонайменше стільки.", "settings.status.runNotifyMinimumSeconds.summary": "Довгі запуски сповіщають після завершення", "settings.status.runNotifyWhenVisible": "Сповіщати, навіть коли термінал видно", + "settings.statusIndicator.animation": "Індикатори стану", + "settings.statusIndicator.animation.help": "Статичний режим використовує незмінні кольори, окрему форму для кожного стану та короткі підписи. Зі «Зменшенням руху» він завжди ввімкнений.", "settings.statusIndicator.color": "Колір", "settings.statusIndicator.honorStatusStyle": "Дозволити статусам обирати стиль", "settings.statusIndicator.honorStatusStyle.help": "Статус, що просить стиль (cmux status set --style), використовує його.", @@ -18102,6 +18174,7 @@ "settings.choice.agentPaneText": "Hiển thị dạng văn bản", "settings.choice.aggressive": "Sau 10 phút", "settings.choice.always": "Luôn luôn", + "settings.choice.animated": "Động", "settings.choice.blink": "Nhấp nháy", "settings.choice.border": "Viền", "settings.choice.borders": "Viền", @@ -18205,6 +18278,7 @@ "settings.choice.splitEven": "Đều nhau", "settings.choice.splitHalve": "Chia đôi ô", "settings.choice.standard": "Tiêu chuẩn", + "settings.choice.static": "Tĩnh", "settings.choice.steady": "Cố định", "settings.choice.stripScrollbarAuto": "Khi cuộn", "settings.choice.stripScrollbarSystem": "Theo hệ thống", @@ -18485,6 +18559,8 @@ "settings.status.runNotifyMinimumSeconds.help": "cmux status run thông báo khi lệnh chạy ít nhất bằng thời gian này.", "settings.status.runNotifyMinimumSeconds.summary": "Lần chạy lâu sẽ báo khi xong", "settings.status.runNotifyWhenVisible": "Thông báo cả khi terminal đang hiện", + "settings.statusIndicator.animation": "Chỉ báo trạng thái", + "settings.statusIndicator.animation.help": "Tĩnh dùng màu cố định, hình dạng riêng cho từng trạng thái và nhãn ngắn. Luôn bật khi Giảm chuyển động đang bật.", "settings.statusIndicator.color": "Màu", "settings.statusIndicator.honorStatusStyle": "Cho phép trạng thái chọn kiểu", "settings.statusIndicator.honorStatusStyle.help": "Trạng thái yêu cầu một kiểu (cmux status set --style) sẽ dùng kiểu đó.", @@ -19095,6 +19171,7 @@ "settings.choice.agentPaneText": "显示为文本", "settings.choice.aggressive": "10 分钟后", "settings.choice.always": "始终", + "settings.choice.animated": "动画", "settings.choice.blink": "闪烁", "settings.choice.border": "边框", "settings.choice.borders": "边框", @@ -19198,6 +19275,7 @@ "settings.choice.splitEven": "均分", "settings.choice.splitHalve": "将窗格对半分", "settings.choice.standard": "标准", + "settings.choice.static": "静态", "settings.choice.steady": "常亮", "settings.choice.stripScrollbarAuto": "滚动时", "settings.choice.stripScrollbarSystem": "跟随系统", @@ -19478,6 +19556,8 @@ "settings.status.runNotifyMinimumSeconds.help": "命令至少运行这么久时 cmux status run 会通知。", "settings.status.runNotifyMinimumSeconds.summary": "耗时较长的运行结束时通知", "settings.status.runNotifyWhenVisible": "终端可见时也通知", + "settings.statusIndicator.animation": "状态指示器", + "settings.statusIndicator.animation.help": "静态使用固定颜色、每种状态独有的形状和简短标签。开启“减弱动态效果”时始终使用静态。", "settings.statusIndicator.color": "颜色", "settings.statusIndicator.honorStatusStyle": "允许状态选择样式", "settings.statusIndicator.honorStatusStyle.help": "请求样式的状态(cmux status set --style)会使用该样式。", @@ -20088,6 +20168,7 @@ "settings.choice.agentPaneText": "顯示為文字", "settings.choice.aggressive": "10 分鐘後", "settings.choice.always": "永遠", + "settings.choice.animated": "動畫", "settings.choice.blink": "閃爍", "settings.choice.border": "邊框", "settings.choice.borders": "邊框", @@ -20191,6 +20272,7 @@ "settings.choice.splitEven": "均分", "settings.choice.splitHalve": "將窗格對半分", "settings.choice.standard": "標準", + "settings.choice.static": "靜態", "settings.choice.steady": "恆亮", "settings.choice.stripScrollbarAuto": "捲動時", "settings.choice.stripScrollbarSystem": "跟隨系統", @@ -20471,6 +20553,8 @@ "settings.status.runNotifyMinimumSeconds.help": "命令至少執行這麼久時 cmux status run 會通知。", "settings.status.runNotifyMinimumSeconds.summary": "耗時較長的執行結束時通知", "settings.status.runNotifyWhenVisible": "終端機可見時也通知", + "settings.statusIndicator.animation": "狀態指示器", + "settings.statusIndicator.animation.help": "靜態使用固定顏色、每種狀態獨有的形狀和簡短標籤。開啟「減少動態效果」時一律使用靜態。", "settings.statusIndicator.color": "顏色", "settings.statusIndicator.honorStatusStyle": "允許狀態選擇樣式", "settings.statusIndicator.honorStatusStyle.help": "要求樣式的狀態(cmux status set --style)會使用該樣式。", From 708d01412b61f50d5a342625a1d820f9eedd71d4 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 21:12:15 -0700 Subject: [PATCH 05/16] MessagesLab: the Reduce Motion pin behind a lock (crash ratchet: no unchecked state) Co-Authored-By: Claude Opus 5.5 --- .../MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift | 7 ++++++- .../MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift index 2c7af53cc7e2..3ea6a9a18ab4 100644 --- a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift +++ b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabHome/Cmux/MessagesLabHomeView+Motion.swift @@ -1,11 +1,16 @@ import AppKit +import os /// cmux (cx-sya4n: Austin gets headaches from blinking lights; nothing loops under /// Reduce Motion): the vendored transcript's caret and typing row read this. extension MessagesLabHomeView { /// The host's Reduce Motion pin (cmux-next mirrors `Motion.reduceMotionOverride`, the /// tests' pin); nil reads the system setting. - nonisolated(unsafe) public static var reduceMotionOverride: Bool? + nonisolated public static var reduceMotionOverride: Bool? { + get { reduceMotionPin.withLock { $0 } } + set { reduceMotionPin.withLock { $0 = newValue } } + } + nonisolated private static let reduceMotionPin = OSAllocatedUnfairLock(initialState: nil) /// Reduce Motion: the caret holds solid, the typing dots stand still and do not breathe. nonisolated static var reducesMotion: Bool { diff --git a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift index d3cbe657a299..a9f5ce925172 100644 --- a/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift +++ b/Packages/Shared/CmuxMessagesLab/Sources/MessagesLabSidebar/Cmux/CmuxSidebarView+Motion.swift @@ -1,11 +1,16 @@ import AppKit +import os /// cmux (cx-sya4n: Austin gets headaches from blinking lights; nothing loops under /// Reduce Motion): the vendored list's typing bubble reads this. extension CmuxSidebarView { /// The host's Reduce Motion pin (cmux-next mirrors `Motion.reduceMotionOverride`, the /// tests' pin); nil reads the system setting. - nonisolated(unsafe) public static var reduceMotionOverride: Bool? + nonisolated public static var reduceMotionOverride: Bool? { + get { reduceMotionPin.withLock { $0 } } + set { reduceMotionPin.withLock { $0 = newValue } } + } + nonisolated private static let reduceMotionPin = OSAllocatedUnfairLock(initialState: nil) /// Reduce Motion: the typing bubble's dots stand still. nonisolated static var reducesMotion: Bool { From 17c38a4f2303403b80c9778a707808b5dc54492d Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 21:31:47 -0700 Subject: [PATCH 06/16] Static status indicators: the pane attention ring is the steady ring Coordinator 2026-10-13: in the static look the attention ring does not blink or pulse; it reuses the existing steady style (the default stays with cg-lane-adopt). Co-Authored-By: Claude Opus 5.5 --- .../CmuxNextDesign/Motion/Motion+Attention.swift | 3 +++ .../CmuxNextAppTests/StaticStatusIndicatorTests.swift | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Attention.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Attention.swift index 37da6665defb..7c28bad0aaba 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Attention.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Attention.swift @@ -16,6 +16,9 @@ extension Motion { public static func attentionAnimation(_ settings: AttentionSettings, look: AttentionHighlightLook = AttentionHighlightLook.tunable.value) -> CAAnimation? { guard animatesFades, settings.style != .none else { return nil } + // Static status indicators (cx-sya4n): the steady ring, no blink or pulse. + var settings = settings + if DesignSettings.shared.statusIndicator.animation == .static { settings.style = .steady } let rest = attentionRestingOpacity(settings, look: look) let peak = look.peakOpacity guard animatesLoops else { diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift index 2c6abf0fee41..503cf47f0caa 100644 --- a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift @@ -114,5 +114,15 @@ import Testing tabGlyphs[name] = plan.glyph } #expect(Set(tabGlyphs.values).count == tabGlyphs.count, "two tab states share a mark: \(tabGlyphs)") + + // The pane attention ring is the steady ring: it never blinks or pulses. + var attention = AttentionSettings() + for style in [AttentionStyle.blink, .pulse] { + attention.style = style + if let animation = Motion.attentionAnimation(attention) { + #expect(BlinkRateCapTests.shortestFlashCycle(animation) == nil, "the attention ring flashes (\(style))") + #expect(!ReduceMotionLoopTests.repeats(animation), "the attention ring loops (\(style))") + } + } } } From 68a1e5cdc8b0b3669117a084e97dd729e4955d7d Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 21:50:18 -0700 Subject: [PATCH 07/16] Static status indicators: no visible label on sidebar rows Lawrence is redoing the sidebar, so sidebar work stays additive (glyphs only). The static look keeps the distinct still glyph in the same slot and size; the short state name stays the indicator's tooltip and VoiceOver label everywhere. WorkspaceRowView is back to its base layout. Co-Authored-By: Claude Opus 5.5 --- .../StatusIndicatorAppearance.swift | 2 +- .../StatusIndicatorState+Label.swift | 3 +-- .../StatusIndicator/StatusIndicatorView.swift | 2 +- .../Views/WorkspaceRowView+StatusLabel.swift | 27 ------------------- .../Views/WorkspaceRowView.swift | 12 +++++---- .../StaticStatusIndicatorTests.swift | 12 +++------ plans/cmux-next/status-indicators.md | 4 +-- 7 files changed, 16 insertions(+), 46 deletions(-) delete mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift index c4e17b32ae3d..ae70698f507a 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorAppearance.swift @@ -51,7 +51,7 @@ public nonisolated struct StatusIndicatorConfig: Hashable, Sendable { /// The static look (cx-sya4n): the setting says static, or Reduce Motion /// is on. Nothing animates, each state draws its own shape whatever the - /// icon set, and a sidebar row names the state beside its mark. + /// icon set, in the same slot and size. public var isStatic: Bool { settings.animation == .static || reduceMotion } /// The style for a report that asked for `hint`: the Debug Settings diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift index 859166b77f3d..5d7d37f436ae 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorState+Label.swift @@ -1,8 +1,7 @@ import Foundation /// A state's name in a word or two (cx-sya4n): the indicator's tooltip and -/// VoiceOver label everywhere, and the text beside a sidebar row's mark in -/// the static look (`StatusIndicatorConfig.isStatic`). +/// VoiceOver label everywhere (sidebar rows, tabs, chrome), in every look. nonisolated extension StatusIndicatorState { /// Nil for idle. public var shortLabel: String? { diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift index 3a0f376db709..1a4ef2c33eb0 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/StatusIndicator/StatusIndicatorView.swift @@ -81,7 +81,7 @@ public final class StatusIndicatorView: NSView, StatusIndicatorConfigClient { public func statusIndicatorConfigDidChange(_ config: StatusIndicatorConfig) { refresh() needsDisplay = true - // The host may name the state beside the mark in the static look. + // The static look can show or hide the mark; the host lays out again. superview?.needsLayout = true } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift deleted file mode 100644 index 07ec12a18813..000000000000 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+StatusLabel.swift +++ /dev/null @@ -1,27 +0,0 @@ -import AppKit -import CmuxNextDesign - -/// The static look (`appearance.statusIndicator.animation: "static"`, or -/// Reduce Motion; cx-sya4n): the row names its state in a word or two left of -/// the still mark, in the second line's font and color. It is one more mark -/// of the trailing cluster: the title keeps its place and only ends sooner, -/// and the hover actions fade it out with the marks they cover. -extension WorkspaceRowView { - /// The longest the label may get; a longer translation truncates. - static let statusLabelMaxWidth: CGFloat = 96 - - /// Lays out the status mark (when `shown`) and, in the static look, its - /// label left of it, ending at `trailing`; returns the new trailing edge. - func layoutActivity(trailing: CGFloat, titleTop: CGFloat, line: CGFloat, shown: Bool) -> CGFloat { - let text = shown && StatusIndicatorAppearance.shared.config.isStatic ? activity.state.shortLabel : nil - statusLabel.isHidden = text == nil - guard shown else { return trailing } - activity.frame = statusGlyphFrame(trailing: trailing, titleTop: titleTop) - let end = activity.frame.minX - Metrics.space2 - guard let text else { return end } - if statusLabel.stringValue != text { statusLabel.stringValue = text } - let width = min(ceil(statusLabel.intrinsicContentSize.width), Self.statusLabelMaxWidth) - statusLabel.frame = NSRect(x: end + Metrics.space1 - width, y: activity.frame.midY - line / 2, width: width, height: line) - return statusLabel.frame.minX - Metrics.space2 - } -} diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift index 1074e42a58cd..fa1c7103fbd3 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift @@ -13,7 +13,7 @@ final class WorkspaceRowView: SidebarRowView { let subtitle = SidebarRowView.label(font: SidebarStyle.subtitleFont) /// Expanded rows (`sidebar.density`, cx-13w3; WorkspaceRowView+Expanded): the age and the meta line. let timeLabel = SidebarRowView.label(font: SidebarStyle.subtitleFont), metaLabel = SidebarRowView.label(font: SidebarStyle.subtitleFont) - let activity = StatusIndicatorView(), statusLabel = SidebarRowView.label(font: SidebarStyle.subtitleFont) // the static look's state name + private let activity = StatusIndicatorView() /// The running agent's brand mark (`SidebarAgentMarkVariant`); hidden when off. private let agentMark = NSImageView() private(set) var agentMarkVariant = SidebarAgentMarkVariant.off @@ -89,7 +89,7 @@ final class WorkspaceRowView: SidebarRowView { mutedMark.imageScaling = .scaleProportionallyDown mutedMark.isHidden = true mutedMark.setAccessibilityElement(false) - [icon, title, subtitle, timeLabel, metaLabel, activity, statusLabel, agentMark, mutedMark, badge, presenceDots, closeButton, moreButton, pinButton, disclosureButton, tabCount, prBadge, placeholderBar, statusBlock] + [icon, title, subtitle, timeLabel, metaLabel, activity, agentMark, mutedMark, badge, presenceDots, closeButton, moreButton, pinButton, disclosureButton, tabCount, prBadge, placeholderBar, statusBlock] .forEach(addSubview) disclosureButton.isHidden = true tabCount.isHidden = true @@ -251,7 +251,7 @@ final class WorkspaceRowView: SidebarRowView { override func updateLayer() { performWithTheme { title.textColor = Palette.textPrimary - [subtitle, statusLabel].forEach { $0.textColor = Palette.textSecondary }; [timeLabel, metaLabel].forEach { $0.textColor = Palette.textTertiary } + subtitle.textColor = Palette.textSecondary; [timeLabel, metaLabel].forEach { $0.textColor = Palette.textTertiary } tabCount.textColor = Palette.textTertiary mutedMark.contentTintColor = Palette.textTertiary prBadge.textColor = Palette.textSecondary @@ -350,8 +350,10 @@ final class WorkspaceRowView: SidebarRowView { if markReplacesStatus { agentMark.frame = statusGlyphFrame(trailing: trailing, titleTop: top) trailing = agentMark.frame.minX - Metrics.space2 + } else if activity.showsGlyph { + activity.frame = statusGlyphFrame(trailing: trailing, titleTop: top) + trailing = activity.frame.minX - Metrics.space2 } - trailing = layoutActivity(trailing: trailing, titleTop: top, line: sh, shown: !markReplacesStatus && activity.showsGlyph) if !mutedMark.isHidden { mutedMark.frame = NSRect(x: trailing - ind, y: cy - ind / 2, width: ind, height: ind) trailing -= ind + Metrics.space2 @@ -386,7 +388,7 @@ final class WorkspaceRowView: SidebarRowView { title.setTrailingOcclusion(overlayStart.map { max(0, title.frame.maxX - ($0 - Metrics.space1)) } ?? 0, animated: fades) subtitle.wantsLayer = true subtitle.setTrailingFade(occlusion: overlayStart.map { max(0, subtitle.frame.maxX - ($0 - Metrics.space1)) } ?? 0, fade: fade, animated: fades) - for mark in [activity, statusLabel, agentMark, mutedMark, presenceDots, timeLabel] as [NSView] { + for mark in [activity, agentMark, mutedMark, presenceDots, timeLabel] as [NSView] { fadeOpacity(mark, to: overlayStart.map { mark.frame.maxX > $0 - Metrics.space1 } == true ? 0 : 1, fades: fades) } layoutStatus(x: textX, width: max(0, b.width - Metrics.space3 - textX), head: b.maxY, bottom: full.maxY) diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift index 503cf47f0caa..28852c2b786b 100644 --- a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift @@ -8,10 +8,10 @@ import Foundation import Testing /// Leo 2026-10-13 (cx-sya4n): "What if they were just colors or symbols or some text." -/// `appearance.statusIndicator.animation: "static"` (Settings > Appearance > Status indicators) +/// `appearance.statusIndicator.animation: "static"` (Settings > Appearance > Loading Indicator > Status Indicators) /// stills every status indicator, draws each state as its own shape (never color alone), and -/// names the state: the indicator's tooltip and VoiceOver label everywhere, and a short label -/// beside the mark on a sidebar workspace row. +/// names the state in the indicator's tooltip and VoiceOver label. The sidebar only swaps glyphs +/// (Lawrence is redoing it, 2026-10-13): no visible label text. @MainActor @Suite(.serialized) struct StaticStatusIndicatorTests { static let states: [(name: String, state: StatusIndicatorState)] = [ ("working", .working(progress: nil)), ("busy", .busy(progress: nil)), ("paused", .paused(progress: nil)), @@ -97,11 +97,7 @@ import Testing let label = mark.themedToolTip ?? "" #expect(!label.isEmpty, "\(name): the mark has no tooltip") labels[name] = label - let shown = row.subviews.contains { view in - guard let field = view as? NSTextField, field !== row.subtitle, !field.isHidden, field.frame.width > 0 else { return false } - return field.stringValue == label - } - #expect(shown, "\(name): the row does not show its label \"\(label)\"") + #expect(mark.accessibilityLabel() == label, "\(name): VoiceOver does not read \"\(label)\"") } #expect(Set(glyphs.values).count == Self.states.count, "two states share a mark: \(glyphs)") #expect(Set(labels.values).count == Self.states.count, "two states share a label: \(labels)") diff --git a/plans/cmux-next/status-indicators.md b/plans/cmux-next/status-indicators.md index d9f91fed1ba1..b7938f1cbb11 100644 --- a/plans/cmux-next/status-indicators.md +++ b/plans/cmux-next/status-indicators.md @@ -65,8 +65,8 @@ ring; busy the style's still glyph (an open arc for `arc` and `dot`, the native frame); known progress keeps the ring. A tab's needs-input, done and failed badge draws the same marks in place of its colored dot. Every indicator's tooltip and VoiceOver label is the state's short name (`StatusIndicatorState.shortLabel`: Working, Loading, Paused, Waiting, Needs permission, Question, Sign-in -needed, Error, Done); in the static look a sidebar workspace row also shows it, in the second line's font and -color, left of its mark (`WorkspaceRowView+StatusLabel`). Tabs have no room for it: VoiceOver names the state. +needed, Error, Done). No surface shows it as visible text: the sidebar is being redone (Lawrence 2026-10-13), +so the static look only swaps glyphs in the same slot and size. Behavior settings (`status.*`, Settings > Appearance > Loading Indicator and Settings > Notifications): `status.inferCommandBusy` (false since cx-ag5.6.5, Lawrence 2026-10-13: htop looked loading) and From dcf69822e28d5f0edb5bd6f11f3f209035375528 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 21:55:19 -0700 Subject: [PATCH 08/16] Settings exports: regenerate on the merged head The textual merge dropped base's browser.omnibar.glass "transparent" choice from the exports; regenerated on the fleet and gen-strings. Co-Authored-By: Claude Opus 5.5 --- docs/mdm/com.manaflow.cmux.json | 5 +- docs/mdm/com.manaflow.cmux.plist | 5 +- docs/mdm/managed-preferences.md | 2 +- schemas/settings/settings-schema.json | 14 ++++- .../src/pages/settings/generated/strings.json | 63 ++++++++++++------- 5 files changed, 60 insertions(+), 29 deletions(-) diff --git a/docs/mdm/com.manaflow.cmux.json b/docs/mdm/com.manaflow.cmux.json index 9787791b3135..6cea289a216c 100644 --- a/docs/mdm/com.manaflow.cmux.json +++ b/docs/mdm/com.manaflow.cmux.json @@ -1068,9 +1068,10 @@ "type" : "string" }, "browser.omnibar.glass" : { - "default" : "regular", - "description" : "The material of the address bar. Clear shows more of what is behind it. Off uses the flat theme color.", + "default" : "transparent", + "description" : "The material of the address bar. Transparent draws no fill. Clear glass shows more of what is behind it. Off uses the flat theme color.", "enum" : [ + "transparent", "regular", "clear", "off" diff --git a/docs/mdm/com.manaflow.cmux.plist b/docs/mdm/com.manaflow.cmux.plist index f42818ad5303..c325929d88c1 100644 --- a/docs/mdm/com.manaflow.cmux.plist +++ b/docs/mdm/com.manaflow.cmux.plist @@ -3782,13 +3782,14 @@ pfm_default - regular + transparent pfm_description - The material of the address bar. Clear shows more of what is behind it. Off uses the flat theme color. + The material of the address bar. Transparent draws no fill. Clear glass shows more of what is behind it. Off uses the flat theme color. pfm_name browser.omnibar.glass pfm_range_list + transparent regular clear off diff --git a/docs/mdm/managed-preferences.md b/docs/mdm/managed-preferences.md index 62108b86e7ab..3aadf6f9f7bb 100644 --- a/docs/mdm/managed-preferences.md +++ b/docs/mdm/managed-preferences.md @@ -271,7 +271,7 @@ Files: `com.manaflow.cmux.plist` (ProfileManifests: iMazing Profile Editor, Prof | `browser.omnibar.inlineAutocomplete` | boolean | `true` | | Complete Addresses Inline. Completes a site you typed before or visit often. | | `browser.omnibar.maxRows` | real | `8` | 3 to 15 | Suggestions Shown | | `browser.omnibar.calculator` | boolean | `true` | | Calculator Answers. Shows the answer to arithmetic you type. Return copies it. | -| `browser.omnibar.glass` | string | `"regular"` | `regular`, `clear`, `off` | Address Bar Glass. The material of the address bar. Clear shows more of what is behind it. Off uses the flat theme color. | +| `browser.omnibar.glass` | string | `"transparent"` | `transparent`, `regular`, `clear`, `off` | Address Bar Glass. The material of the address bar. Transparent draws no fill. Clear glass shows more of what is behind it. Off uses the flat theme color. | | `browser.omnibar.glassTint` | string | `"background"` | `background`, `accent`, `none` | Glass Tint. The color over the glass, from the terminal theme. Accent is the theme's own accent color, or gray when the theme has none. | | `browser.omnibar.glassTintStrength` | real | `0.35` | 0 to 1 | Tint Strength | | `browser.omnibar.cornerRadius` | string | `"theme"` | `theme`, `capsule` | Address Bar Corners. Match Theme uses the standard bar radius. Capsule rounds the ends fully. Also accepts a number from 0 to 16 in a raw profile. | diff --git a/schemas/settings/settings-schema.json b/schemas/settings/settings-schema.json index b2bd88e54e88..b7d97c1d09f6 100644 --- a/schemas/settings/settings-schema.json +++ b/schemas/settings/settings-schema.json @@ -19335,6 +19335,7 @@ }, { "accepts" : [ + "transparent", "regular", "clear", "off" @@ -19342,6 +19343,13 @@ "agent_refusal" : null, "agent_settable" : true, "choices" : [ + { + "title" : { + "key" : "settings.choice.transparent", + "text" : "Transparent" + }, + "value" : "transparent" + }, { "title" : { "key" : "settings.choice.glass", @@ -19367,7 +19375,7 @@ "consumers" : [ "cmux-next" ], - "default" : "regular", + "default" : "transparent", "default_label" : null, "group" : { "key" : "settings.group.addressBar", @@ -19375,7 +19383,7 @@ }, "help" : { "key" : "settings.browser.omnibar.glass.help", - "text" : "The material of the address bar. Clear shows more of what is behind it. Off uses the flat theme color." + "text" : "The material of the address bar. Transparent draws no fill. Clear glass shows more of what is behind it. Off uses the flat theme color." }, "kept_on_reset_all" : false, "key" : "browser.omnibar.glass", @@ -23365,7 +23373,7 @@ "validation" : "portable" } ], - "schema_hash" : "377a98ac966aa50de064da932c8137620e76c0d891d6bff829255e98f3e14f59", + "schema_hash" : "d1c990c0f9d449bb6c2c0c72bdf07613174598229af03f04b590d16523eb1a81", "sections" : [ { "id" : "general", diff --git a/webviews/src/pages/settings/generated/strings.json b/webviews/src/pages/settings/generated/strings.json index c3a0ec800878..78bf4d467843 100644 --- a/webviews/src/pages/settings/generated/strings.json +++ b/webviews/src/pages/settings/generated/strings.json @@ -154,7 +154,7 @@ "settings.browser.omnibar.cornerRadius": "Address Bar Corners", "settings.browser.omnibar.cornerRadius.help": "Match Theme uses the standard bar radius. Capsule rounds the ends fully.", "settings.browser.omnibar.glass": "Address Bar Glass", - "settings.browser.omnibar.glass.help": "The material of the address bar. Clear shows more of what is behind it. Off uses the flat theme color.", + "settings.browser.omnibar.glass.help": "The material of the address bar. Transparent draws no fill. Clear glass shows more of what is behind it. Off uses the flat theme color.", "settings.browser.omnibar.glassTint": "Glass Tint", "settings.browser.omnibar.glassTint.help": "The color over the glass, from the terminal theme. Accent is the theme's own accent color, or gray when the theme has none.", "settings.browser.omnibar.glassTintStrength": "Tint Strength", @@ -351,6 +351,7 @@ "settings.choice.timeout": "After the Timeout", "settings.choice.tonal": "Tonal", "settings.choice.top": "Top", + "settings.choice.transparent": "Transparent", "settings.choice.unlessFocused": "Unless the Pane Is Focused", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -1151,7 +1152,7 @@ "settings.browser.omnibar.cornerRadius": "زوايا شريط العنوان", "settings.browser.omnibar.cornerRadius.help": "مطابقة السمة تستخدم نصف القطر القياسي للشريط. الكبسولة تجعل الطرفين مستديرين بالكامل.", "settings.browser.omnibar.glass": "زجاج شريط العنوان", - "settings.browser.omnibar.glass.help": "مادة شريط العنوان. يُظهر الشفاف المزيد مما خلفه. إيقاف يستخدم لون السمة المسطح.", + "settings.browser.omnibar.glass.help": "مادة شريط العنوان. «شفاف بالكامل» لا يرسم أي تعبئة. الزجاج الشفاف يُظهر المزيد مما خلفه. «إيقاف» يستخدم لون السمة المسطح.", "settings.browser.omnibar.glassTint": "صبغة الزجاج", "settings.browser.omnibar.glassTint.help": "اللون فوق الزجاج، من سمة الطرفية. التمييز هو لون التمييز الخاص بالسمة، أو رمادي إذا لم يكن لها لون.", "settings.browser.omnibar.glassTintStrength": "قوة الصبغة", @@ -1348,6 +1349,7 @@ "settings.choice.timeout": "بعد انتهاء المهلة", "settings.choice.tonal": "نغمي", "settings.choice.top": "أعلى", + "settings.choice.transparent": "شفاف بالكامل", "settings.choice.unlessFocused": "ما لم يكن الجزء في التركيز", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -2148,7 +2150,7 @@ "settings.browser.omnibar.cornerRadius": "Uglovi adresne trake", "settings.browser.omnibar.cornerRadius.help": "Prema temi koristi standardni radijus trake. Kapsula potpuno zaobljuje krajeve.", "settings.browser.omnibar.glass": "Staklo adresne trake", - "settings.browser.omnibar.glass.help": "Materijal adresne trake. Prozirno pokazuje više onoga što je iza nje. Isključeno koristi ravnu boju teme.", + "settings.browser.omnibar.glass.help": "Materijal adresne trake. Prozirno ne crta ispunu. Prozirno staklo pokazuje više onoga što je iza. Isključeno koristi ravnu boju teme.", "settings.browser.omnibar.glassTint": "Nijansa stakla", "settings.browser.omnibar.glassTint.help": "Boja preko stakla, iz teme terminala. Akcent je vlastita akcentna boja teme, ili siva kada je tema nema.", "settings.browser.omnibar.glassTintStrength": "Jačina nijanse", @@ -2345,6 +2347,7 @@ "settings.choice.timeout": "Nakon isteka vremena", "settings.choice.tonal": "Tonski", "settings.choice.top": "Gore", + "settings.choice.transparent": "Prozirno", "settings.choice.unlessFocused": "Osim ako okno nije u fokusu", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -3145,7 +3148,7 @@ "settings.browser.omnibar.cornerRadius": "Adresselinjens hjørner", "settings.browser.omnibar.cornerRadius.help": "Følg tema bruger linjens standardradius. Kapsel runder enderne helt.", "settings.browser.omnibar.glass": "Adresselinjens glas", - "settings.browser.omnibar.glass.help": "Adresselinjens materiale. Klart viser mere af det, der er bagved. Fra bruger temaets flade farve.", + "settings.browser.omnibar.glass.help": "Adresselinjens materiale. Gennemsigtig tegner ingen udfyldning. Klart glas viser mere af det bagved. Fra bruger temaets flade farve.", "settings.browser.omnibar.glassTint": "Glasfarvetone", "settings.browser.omnibar.glassTint.help": "Farven over glasset, fra terminaltemaet. Accent er temaets egen accentfarve, eller grå når temaet ikke har nogen.", "settings.browser.omnibar.glassTintStrength": "Farvetonestyrke", @@ -3342,6 +3345,7 @@ "settings.choice.timeout": "Efter timeout", "settings.choice.tonal": "Tonal", "settings.choice.top": "Øverst", + "settings.choice.transparent": "Gennemsigtig", "settings.choice.unlessFocused": "Medmindre ruden har fokus", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -4142,7 +4146,7 @@ "settings.browser.omnibar.cornerRadius": "Ecken der Adressleiste", "settings.browser.omnibar.cornerRadius.help": "Wie Thema verwendet den Standardradius der Leiste. Kapsel rundet die Enden vollständig ab.", "settings.browser.omnibar.glass": "Glas der Adressleiste", - "settings.browser.omnibar.glass.help": "Das Material der Adressleiste. Klar zeigt mehr vom Hintergrund. Aus verwendet die flache Themenfarbe.", + "settings.browser.omnibar.glass.help": "Das Material der Adressleiste. Transparent zeichnet keine Füllung. Klares Glas zeigt mehr vom Hintergrund. Aus verwendet die flache Themenfarbe.", "settings.browser.omnibar.glassTint": "Glastönung", "settings.browser.omnibar.glassTint.help": "Die Farbe über dem Glas, aus dem Terminal-Thema. Akzent ist die eigene Akzentfarbe des Themas, oder Grau, wenn es keine hat.", "settings.browser.omnibar.glassTintStrength": "Tönungsstärke", @@ -4339,6 +4343,7 @@ "settings.choice.timeout": "Nach Ablauf der Zeit", "settings.choice.tonal": "Tonal", "settings.choice.top": "Oben", + "settings.choice.transparent": "Transparent", "settings.choice.unlessFocused": "Außer der Bereich ist fokussiert", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -5139,7 +5144,7 @@ "settings.browser.omnibar.cornerRadius": "Esquinas de la barra de direcciones", "settings.browser.omnibar.cornerRadius.help": "Igual que el tema usa el radio estándar de la barra. Cápsula redondea por completo los extremos.", "settings.browser.omnibar.glass": "Cristal de la barra de direcciones", - "settings.browser.omnibar.glass.help": "El material de la barra de direcciones. Transparente muestra más de lo que hay detrás. Desactivado usa el color plano del tema.", + "settings.browser.omnibar.glass.help": "El material de la barra de direcciones. Transparente no dibuja relleno. El vidrio claro deja ver más de lo que hay detrás. Desactivado usa el color plano del tema.", "settings.browser.omnibar.glassTint": "Tinte del cristal", "settings.browser.omnibar.glassTint.help": "El color sobre el cristal, del tema del terminal. Acento es el color de acento propio del tema, o gris si no tiene.", "settings.browser.omnibar.glassTintStrength": "Intensidad del tinte", @@ -5336,6 +5341,7 @@ "settings.choice.timeout": "Tras el tiempo de espera", "settings.choice.tonal": "Tonal", "settings.choice.top": "Arriba", + "settings.choice.transparent": "Transparente", "settings.choice.unlessFocused": "Salvo si el panel tiene el foco", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -6136,7 +6142,7 @@ "settings.browser.omnibar.cornerRadius": "Coins de la barre d’adresse", "settings.browser.omnibar.cornerRadius.help": "Comme le thème utilise le rayon standard de la barre. Capsule arrondit entièrement les extrémités.", "settings.browser.omnibar.glass": "Verre de la barre d’adresse", - "settings.browser.omnibar.glass.help": "La matière de la barre d’adresse. Transparent laisse voir davantage l’arrière-plan. Désactivé utilise la couleur unie du thème.", + "settings.browser.omnibar.glass.help": "Le matériau de la barre d'adresse. Transparent ne dessine aucun fond. Le verre clair laisse voir davantage l'arrière-plan. Désactivé utilise la couleur unie du thème.", "settings.browser.omnibar.glassTint": "Teinte du verre", "settings.browser.omnibar.glassTint.help": "La couleur au-dessus du verre, issue du thème du terminal. Accent est la couleur d’accent du thème, ou gris s’il n’en a pas.", "settings.browser.omnibar.glassTintStrength": "Intensité de la teinte", @@ -6333,6 +6339,7 @@ "settings.choice.timeout": "Après le délai", "settings.choice.tonal": "Tonal", "settings.choice.top": "En haut", + "settings.choice.transparent": "Transparent", "settings.choice.unlessFocused": "Sauf si le panneau a le focus", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -7133,7 +7140,7 @@ "settings.browser.omnibar.cornerRadius": "Angoli della barra degli indirizzi", "settings.browser.omnibar.cornerRadius.help": "Come il tema usa il raggio standard della barra. Capsula arrotonda completamente le estremità.", "settings.browser.omnibar.glass": "Vetro della barra degli indirizzi", - "settings.browser.omnibar.glass.help": "Il materiale della barra degli indirizzi. Trasparente mostra di più ciò che c’è dietro. Disattivato usa il colore piatto del tema.", + "settings.browser.omnibar.glass.help": "Il materiale della barra degli indirizzi. Trasparente non disegna alcun riempimento. Il vetro chiaro mostra di più ciò che sta dietro. Disattivato usa il colore piatto del tema.", "settings.browser.omnibar.glassTint": "Tinta del vetro", "settings.browser.omnibar.glassTint.help": "Il colore sopra il vetro, dal tema del terminale. Accento è il colore di accento del tema, o grigio se non ne ha.", "settings.browser.omnibar.glassTintStrength": "Intensità della tinta", @@ -7330,6 +7337,7 @@ "settings.choice.timeout": "Dopo il timeout", "settings.choice.tonal": "Tonale", "settings.choice.top": "In alto", + "settings.choice.transparent": "Trasparente", "settings.choice.unlessFocused": "Tranne se il riquadro è attivo", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -8130,7 +8138,7 @@ "settings.browser.omnibar.cornerRadius": "アドレスバーの角", "settings.browser.omnibar.cornerRadius.help": "「テーマに合わせる」は標準のバーの半径を使います。「カプセル」は両端を完全に丸めます。", "settings.browser.omnibar.glass": "アドレスバーのガラス", - "settings.browser.omnibar.glass.help": "アドレスバーの素材です。クリアは背後をより多く見せます。オフはテーマの単色を使います。", + "settings.browser.omnibar.glass.help": "アドレスバーの素材です。「透明」は塗りを描きません。クリアガラスは背後をより多く見せます。「オフ」はテーマの単色を使います。", "settings.browser.omnibar.glassTint": "ガラスの色合い", "settings.browser.omnibar.glassTint.help": "ガラスに重ねる色で、ターミナルのテーマから取ります。アクセントはテーマ自身のアクセントカラーで、ない場合はグレーです。", "settings.browser.omnibar.glassTintStrength": "色合いの強さ", @@ -8327,6 +8335,7 @@ "settings.choice.timeout": "タイムアウト後", "settings.choice.tonal": "トーン", "settings.choice.top": "上", + "settings.choice.transparent": "透明", "settings.choice.unlessFocused": "ペインにフォーカスがないとき", "settings.choice.updatesBadge": "設定のバッジのみ", "settings.choice.updatesDeferExpensive": "モバイル通信と省データモードでは待つ", @@ -9127,7 +9136,7 @@ "settings.browser.omnibar.cornerRadius": "ជ្រុងរបារអាសយដ្ឋាន", "settings.browser.omnibar.cornerRadius.help": "ដូចធីមប្រើកាំស្តង់ដាររបស់របារ។ កន្សោមធ្វើឱ្យចុងទាំងពីរមូលទាំងស្រុង។", "settings.browser.omnibar.glass": "កញ្ចក់របារអាសយដ្ឋាន", - "settings.browser.omnibar.glass.help": "សម្ភារៈនៃរបារអាសយដ្ឋាន។ ថ្លាបង្ហាញអ្វីដែលនៅខាងក្រោយច្រើនជាង។ បិទប្រើពណ៌រាបស្មើនៃធីម។", + "settings.browser.omnibar.glass.help": "សម្ភារៈនៃរបារអាសយដ្ឋាន។ ថ្លា មិនគូរពណ៌ពេញទេ។ កញ្ចក់ថ្លា បង្ហាញអ្វីដែលនៅខាងក្រោយច្រើនជាង។ បិទ ប្រើពណ៌រាបស្មើរបស់ស្បែក។", "settings.browser.omnibar.glassTint": "ពណ៌លាបកញ្ចក់", "settings.browser.omnibar.glassTint.help": "ពណ៌លើកញ្ចក់ ពីធីមទែមីណាល់។ សង្កត់ធ្ងន់គឺពណ៌សង្កត់ធ្ងន់ផ្ទាល់របស់ធីម ឬពណ៌ប្រផេះ ពេលធីមគ្មាន។", "settings.browser.omnibar.glassTintStrength": "កម្លាំងពណ៌លាប", @@ -9324,6 +9333,7 @@ "settings.choice.timeout": "បន្ទាប់ពីអស់ពេល", "settings.choice.tonal": "ពណ៌ថ្នាក់", "settings.choice.top": "ខាងលើ", + "settings.choice.transparent": "ថ្លា", "settings.choice.unlessFocused": "លើកលែងតែផ្ទាំងត្រូវបានផ្ដោត", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -10124,7 +10134,7 @@ "settings.browser.omnibar.cornerRadius": "주소 막대 모서리", "settings.browser.omnibar.cornerRadius.help": "테마에 맞춤은 표준 막대 반경을 사용합니다. 캡슐은 양 끝을 완전히 둥글게 만듭니다.", "settings.browser.omnibar.glass": "주소 막대 글래스", - "settings.browser.omnibar.glass.help": "주소 막대의 재질입니다. 투명은 뒤에 있는 내용을 더 많이 보여 줍니다. 끔은 테마의 단색을 사용합니다.", + "settings.browser.omnibar.glass.help": "주소 표시줄의 재질입니다. 투명은 채우기를 그리지 않습니다. 맑은 유리는 뒤쪽을 더 많이 보여 줍니다. 끔은 테마의 단색을 사용합니다.", "settings.browser.omnibar.glassTint": "글래스 색조", "settings.browser.omnibar.glassTint.help": "글래스 위의 색상으로, 터미널 테마에서 가져옵니다. 강조는 테마 자체의 강조 색상이며, 없으면 회색입니다.", "settings.browser.omnibar.glassTintStrength": "색조 강도", @@ -10321,6 +10331,7 @@ "settings.choice.timeout": "시간 초과 후", "settings.choice.tonal": "톤", "settings.choice.top": "위", + "settings.choice.transparent": "투명", "settings.choice.unlessFocused": "창에 포커스가 없을 때", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -11121,7 +11132,7 @@ "settings.browser.omnibar.cornerRadius": "Adressefeltets hjørner", "settings.browser.omnibar.cornerRadius.help": "Følg tema bruker feltets standardradius. Kapsel runder endene helt.", "settings.browser.omnibar.glass": "Adressefeltets glass", - "settings.browser.omnibar.glass.help": "Materialet i adressefeltet. Klart viser mer av det som er bak. Av bruker temaets flate farge.", + "settings.browser.omnibar.glass.help": "Materialet i adresselinjen. Gjennomsiktig tegner ingen fyll. Klart glass viser mer av det som er bak. Av bruker temaets flate farge.", "settings.browser.omnibar.glassTint": "Glassfarge", "settings.browser.omnibar.glassTint.help": "Fargen over glasset, fra terminaltemaet. Aksent er temaets egen aksentfarge, eller grå når temaet ikke har noen.", "settings.browser.omnibar.glassTintStrength": "Fargestyrke", @@ -11318,6 +11329,7 @@ "settings.choice.timeout": "Etter tidsavbrudd", "settings.choice.tonal": "Tonal", "settings.choice.top": "Øverst", + "settings.choice.transparent": "Gjennomsiktig", "settings.choice.unlessFocused": "Med mindre ruten har fokus", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -12118,7 +12130,7 @@ "settings.browser.omnibar.cornerRadius": "Narożniki paska adresu", "settings.browser.omnibar.cornerRadius.help": "Jak motyw używa standardowego promienia paska. Kapsuła w pełni zaokrągla końce.", "settings.browser.omnibar.glass": "Szkło paska adresu", - "settings.browser.omnibar.glass.help": "Materiał paska adresu. Przezroczysty pokazuje więcej tego, co jest pod spodem. Wyłączone używa jednolitego koloru motywu.", + "settings.browser.omnibar.glass.help": "Materiał paska adresu. Przezroczysty nie rysuje wypełnienia. Przejrzyste szkło pokazuje więcej tego, co jest pod spodem. Wyłączony używa płaskiego koloru motywu.", "settings.browser.omnibar.glassTint": "Odcień szkła", "settings.browser.omnibar.glassTint.help": "Kolor nad szkłem, z motywu terminala. Akcent to własny kolor akcentu motywu lub szary, gdy motyw go nie ma.", "settings.browser.omnibar.glassTintStrength": "Siła odcienia", @@ -12315,6 +12327,7 @@ "settings.choice.timeout": "Po upływie czasu", "settings.choice.tonal": "Tonalny", "settings.choice.top": "Góra", + "settings.choice.transparent": "Przezroczysty", "settings.choice.unlessFocused": "Chyba że panel jest aktywny", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -13115,7 +13128,7 @@ "settings.browser.omnibar.cornerRadius": "Cantos da barra de endereços", "settings.browser.omnibar.cornerRadius.help": "Igual ao tema usa o raio padrão da barra. Cápsula arredonda totalmente as pontas.", "settings.browser.omnibar.glass": "Vidro da barra de endereços", - "settings.browser.omnibar.glass.help": "O material da barra de endereços. Transparente mostra mais do que está atrás. Desativado usa a cor sólida do tema.", + "settings.browser.omnibar.glass.help": "O material da barra de endereços. Transparente não desenha preenchimento. O vidro claro mostra mais do que está atrás. Desativado usa a cor plana do tema.", "settings.browser.omnibar.glassTint": "Tonalidade do vidro", "settings.browser.omnibar.glassTint.help": "A cor sobre o vidro, do tema do terminal. Destaque é a cor de destaque do próprio tema, ou cinza quando o tema não tem.", "settings.browser.omnibar.glassTintStrength": "Intensidade da tonalidade", @@ -13312,6 +13325,7 @@ "settings.choice.timeout": "Após o tempo limite", "settings.choice.tonal": "Tonal", "settings.choice.top": "Topo", + "settings.choice.transparent": "Transparente", "settings.choice.unlessFocused": "Exceto se o painel estiver em foco", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -14112,7 +14126,7 @@ "settings.browser.omnibar.cornerRadius": "Углы адресной строки", "settings.browser.omnibar.cornerRadius.help": "«Как в теме» использует стандартный радиус строки. «Капсула» полностью скругляет края.", "settings.browser.omnibar.glass": "Стекло адресной строки", - "settings.browser.omnibar.glass.help": "Материал адресной строки. Прозрачное показывает больше того, что за ней. «Выкл.» использует сплошной цвет темы.", + "settings.browser.omnibar.glass.help": "Материал адресной строки. «Прозрачный» не рисует заливку. Прозрачное стекло показывает больше того, что за ним. «Выкл.» использует плоский цвет темы.", "settings.browser.omnibar.glassTint": "Оттенок стекла", "settings.browser.omnibar.glassTint.help": "Цвет поверх стекла из темы терминала. Акцент — собственный акцентный цвет темы или серый, если его нет.", "settings.browser.omnibar.glassTintStrength": "Сила оттенка", @@ -14309,6 +14323,7 @@ "settings.choice.timeout": "По истечении времени", "settings.choice.tonal": "Тональный", "settings.choice.top": "Сверху", + "settings.choice.transparent": "Прозрачный", "settings.choice.unlessFocused": "Если панель не в фокусе", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -15109,7 +15124,7 @@ "settings.browser.omnibar.cornerRadius": "มุมของแถบที่อยู่", "settings.browser.omnibar.cornerRadius.help": "ตามธีมจะใช้รัศมีมาตรฐานของแถบ แคปซูลจะทำให้ปลายทั้งสองโค้งมนเต็มที่", "settings.browser.omnibar.glass": "กระจกแถบที่อยู่", - "settings.browser.omnibar.glass.help": "วัสดุของแถบที่อยู่ แบบใสจะแสดงสิ่งที่อยู่ด้านหลังมากขึ้น ปิดจะใช้สีเรียบของธีม", + "settings.browser.omnibar.glass.help": "วัสดุของแถบที่อยู่ โปร่งใสจะไม่วาดพื้นสี กระจกใสแสดงสิ่งที่อยู่ด้านหลังได้มากขึ้น ปิดจะใช้สีพื้นเรียบของธีม", "settings.browser.omnibar.glassTint": "สีกระจก", "settings.browser.omnibar.glassTint.help": "สีที่อยู่บนกระจก จากธีมของเทอร์มินัล สีเน้นคือสีเน้นของธีมเอง หรือสีเทาเมื่อธีมไม่มี", "settings.browser.omnibar.glassTintStrength": "ความเข้มของสี", @@ -15306,6 +15321,7 @@ "settings.choice.timeout": "หลังหมดเวลา", "settings.choice.tonal": "โทน", "settings.choice.top": "ด้านบน", + "settings.choice.transparent": "โปร่งใส", "settings.choice.unlessFocused": "ยกเว้นเมื่อแผงได้รับโฟกัส", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -16106,7 +16122,7 @@ "settings.browser.omnibar.cornerRadius": "Adres çubuğu köşeleri", "settings.browser.omnibar.cornerRadius.help": "Temaya uy, standart çubuk yarıçapını kullanır. Kapsül, uçları tamamen yuvarlar.", "settings.browser.omnibar.glass": "Adres çubuğu camı", - "settings.browser.omnibar.glass.help": "Adres çubuğunun malzemesi. Şeffaf, arkasındakileri daha çok gösterir. Kapalı, temanın düz rengini kullanır.", + "settings.browser.omnibar.glass.help": "Adres çubuğunun malzemesi. Saydam dolgu çizmez. Şeffaf cam arkasındakini daha çok gösterir. Kapalı, temanın düz rengini kullanır.", "settings.browser.omnibar.glassTint": "Cam tonu", "settings.browser.omnibar.glassTint.help": "Camın üzerindeki renk, terminal temasından. Vurgu, temanın kendi vurgu rengidir; yoksa gridir.", "settings.browser.omnibar.glassTintStrength": "Ton yoğunluğu", @@ -16303,6 +16319,7 @@ "settings.choice.timeout": "Zaman Aşımından Sonra", "settings.choice.tonal": "Tonal", "settings.choice.top": "Üst", + "settings.choice.transparent": "Saydam", "settings.choice.unlessFocused": "Bölme Odakta Değilse", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -17103,7 +17120,7 @@ "settings.browser.omnibar.cornerRadius": "Кути адресного рядка", "settings.browser.omnibar.cornerRadius.help": "«Як у темі» використовує стандартний радіус рядка. «Капсула» повністю заокруглює краї.", "settings.browser.omnibar.glass": "Скло адресного рядка", - "settings.browser.omnibar.glass.help": "Матеріал адресного рядка. Прозоре показує більше того, що за ним. «Вимк.» використовує суцільний колір теми.", + "settings.browser.omnibar.glass.help": "Матеріал адресного рядка. «Прозорий» не малює заливку. Прозоре скло показує більше того, що за ним. «Вимк.» використовує плаский колір теми.", "settings.browser.omnibar.glassTint": "Відтінок скла", "settings.browser.omnibar.glassTint.help": "Колір поверх скла з теми термінала. Акцент — власний акцентний колір теми або сірий, якщо його немає.", "settings.browser.omnibar.glassTintStrength": "Сила відтінку", @@ -17300,6 +17317,7 @@ "settings.choice.timeout": "Після тайм-ауту", "settings.choice.tonal": "Тональний", "settings.choice.top": "Зверху", + "settings.choice.transparent": "Прозорий", "settings.choice.unlessFocused": "Якщо панель не у фокусі", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -18100,7 +18118,7 @@ "settings.browser.omnibar.cornerRadius": "Góc thanh địa chỉ", "settings.browser.omnibar.cornerRadius.help": "Theo chủ đề dùng bán kính chuẩn của thanh. Viên nang bo tròn hoàn toàn hai đầu.", "settings.browser.omnibar.glass": "Kính thanh địa chỉ", - "settings.browser.omnibar.glass.help": "Chất liệu của thanh địa chỉ. Trong suốt cho thấy nhiều hơn phía sau. Tắt dùng màu phẳng của chủ đề.", + "settings.browser.omnibar.glass.help": "Chất liệu của thanh địa chỉ. Trong suốt không tô nền. Kính trong cho thấy nhiều hơn những gì phía sau. Tắt dùng màu phẳng của chủ đề.", "settings.browser.omnibar.glassTint": "Màu phủ kính", "settings.browser.omnibar.glassTint.help": "Màu phủ lên kính, lấy từ chủ đề terminal. Nhấn mạnh là màu nhấn của chính chủ đề, hoặc xám nếu chủ đề không có.", "settings.browser.omnibar.glassTintStrength": "Độ đậm màu phủ", @@ -18297,6 +18315,7 @@ "settings.choice.timeout": "Sau thời gian chờ", "settings.choice.tonal": "Sắc độ", "settings.choice.top": "Trên", + "settings.choice.transparent": "Trong suốt", "settings.choice.unlessFocused": "Trừ khi khung đang được chọn", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -19097,7 +19116,7 @@ "settings.browser.omnibar.cornerRadius": "地址栏圆角", "settings.browser.omnibar.cornerRadius.help": "“匹配主题”使用标准栏圆角。“胶囊”会将两端完全变圆。", "settings.browser.omnibar.glass": "地址栏玻璃", - "settings.browser.omnibar.glass.help": "地址栏的材质。透明会显示更多背后的内容。关闭则使用主题的纯色。", + "settings.browser.omnibar.glass.help": "地址栏的材质。“透明”不绘制填充。透明玻璃会显示更多背后的内容。“关闭”使用主题的纯色。", "settings.browser.omnibar.glassTint": "玻璃色调", "settings.browser.omnibar.glassTint.help": "玻璃上方的颜色,取自终端主题。强调色是主题自身的强调色,没有时为灰色。", "settings.browser.omnibar.glassTintStrength": "色调强度", @@ -19294,6 +19313,7 @@ "settings.choice.timeout": "超时后", "settings.choice.tonal": "色阶", "settings.choice.top": "顶部", + "settings.choice.transparent": "透明", "settings.choice.unlessFocused": "除非窗格有焦点", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", @@ -20094,7 +20114,7 @@ "settings.browser.omnibar.cornerRadius": "網址列圓角", "settings.browser.omnibar.cornerRadius.help": "「符合主題」使用標準列圓角。「膠囊」會將兩端完全變圓。", "settings.browser.omnibar.glass": "網址列玻璃", - "settings.browser.omnibar.glass.help": "網址列的材質。透明會顯示更多後方的內容。關閉則使用主題的純色。", + "settings.browser.omnibar.glass.help": "網址列的材質。「透明」不繪製填色。透明玻璃會顯示更多背後的內容。「關閉」使用主題的純色。", "settings.browser.omnibar.glassTint": "玻璃色調", "settings.browser.omnibar.glassTint.help": "玻璃上方的顏色,取自終端機主題。強調色是主題自身的強調色,沒有時為灰色。", "settings.browser.omnibar.glassTintStrength": "色調強度", @@ -20291,6 +20311,7 @@ "settings.choice.timeout": "逾時後", "settings.choice.tonal": "色階", "settings.choice.top": "頂部", + "settings.choice.transparent": "透明", "settings.choice.unlessFocused": "除非窗格有焦點", "settings.choice.updatesBadge": "Badge Settings Only", "settings.choice.updatesDeferExpensive": "Wait on Cellular and Low Data", From f98263dc38444ed57a20ca31bb40bf1108af0c6d Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 23:40:34 -0700 Subject: [PATCH 09/16] test: static status reaches the web pane; no web loop under static or Reduce Motion; late-content kit Red first (cx-sya4n phase 2): the pane theme has no statusIndicators, the stylesheets have no static rules and the color-only marks no shapes, and there is no shared reveal/stagger on either side. Co-Authored-By: Claude Opus 5.5 --- .../ReduceMotionLoopTests.swift | 33 ++++ .../StaticStatusIndicatorTests.swift | 21 +++ webviews/test/motion-kit.test.ts | 73 +++++++++ webviews/test/static-status-loops.test.ts | 148 ++++++++++++++++++ 4 files changed, 275 insertions(+) create mode 100644 webviews/test/motion-kit.test.ts create mode 100644 webviews/test/static-status-loops.test.ts diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift index f432a2f68a9b..74f403ba0ceb 100644 --- a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ReduceMotionLoopTests.swift @@ -117,4 +117,37 @@ import Testing let typing = cell.dots + cell.typingDiscs + [cell.typingContainer, cell.typingClip] #expect(typing.flatMap { Self.loops(under: $0) } == [], "the transcript's typing row breathes or its dots pulse") } + + /// Late content settles in (Leo 2026-10-14: motion is small and local): `Motion.reveal` fades a + /// layer in with a few points of rise, `Motion.stagger` delays the first few rows of a list by a + /// short step and no more; under Reduce Motion the reveal only fades and nothing waits. + @Test func lateContentSettlesInSmallAndLocal() throws { + let speed = DesignSettings.shared.animationSpeed + DesignSettings.shared.animationSpeed = .fast + defer { + DesignSettings.shared.animationSpeed = speed + Motion.reduceMotionOverride = nil + } + Motion.reduceMotionOverride = false + #expect(Motion.stagger(index: 0) == 0) + #expect(Motion.stagger(index: 1) > 0 && Motion.stagger(index: 1) <= 0.025) + #expect(Motion.stagger(index: 40) == Motion.stagger(index: Motion.staggerItems - 1)) + #expect(Motion.stagger(index: 40) <= 0.1) + + func keyPaths(_ animation: CAAnimation) -> [String] { + if let group = animation as? CAAnimationGroup { return (group.animations ?? []).flatMap(keyPaths) } + return [(animation as? CAPropertyAnimation)?.keyPath ?? "?"] + } + let layer = CALayer() + let moving = try #require(Motion.reveal(layer)) + #expect(Set(keyPaths(moving)) == ["opacity", "transform.translation.y"]) + #expect(moving.duration <= 0.25) + #expect(!Self.repeats(moving)) + + Motion.reduceMotionOverride = true + #expect(Motion.stagger(index: 3) == 0) + let still = try #require(Motion.reveal(layer, index: 3)) + #expect(keyPaths(still) == ["opacity"]) + #expect(still.beginTime == 0) + } } diff --git a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift index 28852c2b786b..34d904f9cbc6 100644 --- a/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift +++ b/Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/StaticStatusIndicatorTests.swift @@ -1,5 +1,6 @@ import AppKit import CmuxNextActions +@testable import CmuxNextAgentPane @testable import CmuxNextDesign import CmuxNextSettings @testable import CmuxNextSidebar @@ -121,4 +122,24 @@ import Testing } } } + + /// The agent pane's web page hears the static look through its theme (`statusIndicators`, + /// `data-status-indicators` on the page root): Static, or Reduce Motion with Animated picked. + @Test func theAgentPaneHearsTheStaticLook() { + let design = DesignSettings.shared + let before = design.statusIndicator + defer { + design.statusIndicator = before + Motion.reduceMotionOverride = nil + } + func look() -> String? { AgentPaneTheme.values(.unresolved)["statusIndicators"] as? String } + Motion.reduceMotionOverride = false + design.statusIndicator.animation = .animated + #expect(look() == "animated") + design.statusIndicator.animation = .static + #expect(look() == "static") + design.statusIndicator.animation = .animated + Motion.reduceMotionOverride = true + #expect(look() == "static") + } } diff --git a/webviews/test/motion-kit.test.ts b/webviews/test/motion-kit.test.ts new file mode 100644 index 000000000000..d02777688082 --- /dev/null +++ b/webviews/test/motion-kit.test.ts @@ -0,0 +1,73 @@ +// Two things the agent pane and pages share for calm motion (cx-sya4n): +// - The native Static status indicators setting (or Reduce Motion) reaches the page through the +// theme: applyAgentTheme sets `data-status-indicators`, which the stylesheets stop loops under. +// - The shared late-content kit (src/ui/motion.ts): content that arrives late settles in with a +// short fade and a few pixels of rise, a list staggers its first few rows only, and under Reduce +// Motion the reveal is a plain fade with no movement and no stagger (small and local, Leo 10-14). +import { afterAll, beforeAll, expect, test } from "bun:test"; +import { JSDOM } from "jsdom"; + +const scope = globalThis as Record; +const saved = ["window", "document"].map((key) => [key, key in scope, scope[key]] as const); + +beforeAll(() => { + const { window } = new JSDOM(""); + Object.assign(scope, { window, document: window.document }); +}); +afterAll(() => { + for (const [key, had, value] of saved) { + if (had) scope[key] = value; + else delete scope[key]; + } +}); + +const theme = { + isDark: false, + pageBackground: "#fff", + surfaceBackground: "#fff", + surfaceElevatedBackground: "#fff", + inputBackground: "#fff", + border: "#ddd", + borderStrong: "#ccc", + text: "#000", + mutedText: "#666", + softText: "#999", + accent: "#000", + accentSoft: "#eee", + danger: "#c00", + shadow: "#0003", +}; + +test("the theme's status indicators look reaches the root, and a theme without it clears it", async () => { + const { applyAgentTheme } = await import("../src/agent-session/shared/theme"); + const root = document.documentElement; + applyAgentTheme({ ...theme, statusIndicators: "static" }); + expect(root.dataset.statusIndicators).toBe("static"); + applyAgentTheme({ ...theme, statusIndicators: "animated" }); + expect(root.dataset.statusIndicators).toBe("animated"); + applyAgentTheme(theme); + expect(root.dataset.statusIndicators).toBeUndefined(); +}); + +test("a reveal fades in and rises a few pixels; under Reduce Motion it only fades", async () => { + const { revealKeyframes } = await import("../src/ui/motion"); + const moving = revealKeyframes({ reduced: false }); + expect(moving[0]).toMatchObject({ opacity: 0 }); + const rise = /translateY\((\d+(?:\.\d+)?)px\)/.exec(String(moving[0].transform)); + expect(Number(rise?.[1])).toBeGreaterThanOrEqual(2); + expect(Number(rise?.[1])).toBeLessThanOrEqual(4); + const reduced = revealKeyframes({ reduced: true }); + expect(reduced.every((frame) => frame.transform === undefined)).toBe(true); + expect(reduced[0]).toMatchObject({ opacity: 0 }); +}); + +test("a stagger is a few short steps, capped, and nothing under Reduce Motion", async () => { + const { stagger, STAGGER_STEP_MS, STAGGER_ITEMS } = await import("../src/ui/motion"); + expect(stagger(0, { reduced: false })).toBe(0); + expect(stagger(1, { reduced: false })).toBe(STAGGER_STEP_MS); + expect(STAGGER_STEP_MS).toBeLessThanOrEqual(25); + expect(STAGGER_ITEMS).toBeLessThanOrEqual(4); + expect(stagger(40, { reduced: false })).toBe(stagger(STAGGER_ITEMS - 1, { reduced: false })); + expect(stagger(40, { reduced: false })).toBeLessThanOrEqual(100); + for (const index of [0, 1, 3, 40]) expect(stagger(index, { reduced: true })).toBe(0); +}); diff --git a/webviews/test/static-status-loops.test.ts b/webviews/test/static-status-loops.test.ts new file mode 100644 index 000000000000..a516f1e14732 --- /dev/null +++ b/webviews/test/static-status-loops.test.ts @@ -0,0 +1,148 @@ +// Leo 2026-10-13 (cx-sya4n): Austin gets headaches from blinking and pulsing lights. The native +// Static status indicators setting (or macOS Reduce Motion) reaches the agent pane as +// `data-status-indicators="static"` on the root (applyAgentTheme), and under it, or under Reduce +// Motion, no web loop may run: the mic's wait pulse, the model picker and harness spinners, the +// floating chat's breathing dot, the Thinking sweep, the reply caret's wait pulse, the Jump to +// Latest dots and Home's "writing" pulse. The diff viewer does not get the pane's theme, so its +// spinners stop under Reduce Motion alone. Static also gives the color-only marks a shape each. +// This loads the real stylesheets in Chromium and lists the animations that never end. +import { readFileSync } from "node:fs"; +import { afterAll, beforeAll, describe, expect, setDefaultTimeout, test } from "bun:test"; +import path from "node:path"; +import { chromium, type Browser, type Page } from "playwright"; +import { requireBrowserLane } from "./support/requireBrowserLane"; + +await requireBrowserLane("static-status-loops.test.ts", async () => { + setDefaultTimeout(60_000); + try { + await (await chromium.launch({ headless: true })).close(); + } catch { + console.warn("static-status-loops: skipping (run `bunx playwright install chromium`)"); + describe.skip("static status loops", () => test("chromium", () => {})); + return; + } + + const src = path.resolve(import.meta.dir, "../src"); + const css = (file: string) => readFileSync(path.join(src, file), "utf8"); + const desktop = css("pages/shared/desktop.css"); + const pane = [ + "agent-session/acpmux/composerStates.css", + "agent-session/acpmux/styles.css", + "agent-session/acpmux/harnesses/harnesses.css", + "agent-session/acpmux/conversation/conversation.css", + "agent-session/acpmux/summary/summary.css", + ] + .map(css) + .join("\n"); + const home = css("pages/home-channels/styles.css"); + const diff = css("styles.css"); + + const paneLoops = + `` + + `` + + `` + + `
Thinking
` + + `
` + + `` + + `writing`; + const diffLoops = `
Loading
`; + + let browser: Browser | undefined; + beforeAll(async () => { + browser = await chromium.launch({ headless: true }); + }); + afterAll(async () => { + await browser?.close(); + }); + + async function page(style: string, body: string, reducedMotion: "reduce" | "no-preference", look?: "static"): Promise { + const p = await browser!.newPage(); + await p.emulateMedia({ reducedMotion }); + await p.setContent(`${body}`); + if (look) await p.evaluate((value) => (document.documentElement.dataset.statusIndicators = value), look); + // Let a changed rule take effect before reading the running animations. + await p.evaluate(() => new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)))); + return p; + } + + /** Every animation that repeats forever and is running, by the element it runs on. */ + async function loops(p: Page): Promise { + return p.evaluate(() => + document + .getAnimations() + .filter((animation) => animation.effect?.getTiming().iterations === Infinity && animation.playState === "running") + .map((animation) => { + const effect = animation.effect as KeyframeEffect | null; + const target = effect?.target as Element | null; + const name = (animation as CSSAnimation).animationName ?? "?"; + return `${target?.className || target?.id || target?.tagName} ${effect?.pseudoElement ?? ""} ${name}`.trim(); + }), + ); + } + + test("the loops run by default (the check sees them)", async () => { + const p = await page(`${desktop}${pane}${home}${diff}`, paneLoops + diffLoops, "no-preference"); + const running = await loops(p); + await p.close(); + expect(running.length).toBeGreaterThanOrEqual(10); + }); + + test("Static status indicators stop every pane loop", async () => { + const p = await page(`${desktop}${pane}${home}`, paneLoops, "no-preference", "static"); + const running = await loops(p); + await p.close(); + expect(running).toEqual([]); + }); + + test("Reduce Motion stops every loop, the diff viewer's too", async () => { + const p = await page(`${desktop}${pane}${home}${diff}`, paneLoops + diffLoops, "reduce"); + const running = await loops(p); + await p.close(); + expect(running).toEqual([]); + }); + + test("the diff base picker's spinner stops under Reduce Motion by its own rule", async () => { + const p = await page(diff, diffLoops, "reduce"); + const running = await loops(p); + await p.close(); + expect(running).toEqual([]); + }); + + test("Static keeps Thinking readable: muted text, no sweep band", async () => { + const p = await page(`${desktop}${pane}`, `
Thinking
`, "no-preference", "static"); + const thinking = await p.$eval(".cv-thinking", (node) => { + const style = getComputedStyle(node); + return { color: style.color, clip: style.backgroundClip, image: style.backgroundImage }; + }); + await p.close(); + expect(thinking.color).not.toBe("rgba(0, 0, 0, 0)"); + expect(thinking.clip).not.toBe("text"); + expect(thinking.image).toBe("none"); + }); + + test("Static gives each color-only status mark its own shape", async () => { + const body = + `` + + `` + + ["running", "done", "failed"].map((state) => ``).join("") + + ["running", "completed", "failed", "cancelled"] + .map((state) => ``) + .join(""); + const p = await page(`${desktop}${pane}`, body, "no-preference", "static"); + const shapes = await p.evaluate(() => { + const shape = (node: Element, pseudo?: string) => { + const style = getComputedStyle(node, pseudo); + return [style.content, style.clipPath, style.borderRadius, style.backgroundColor === "rgba(0, 0, 0, 0)" ? "hollow" : "filled"].join(" | "); + }; + return { + floating: [...document.querySelectorAll(".acpmux-floating-status")].map((node) => shape(node)), + summary: [...document.querySelectorAll(".acpmux-summary-dot")].map((node) => shape(node, "::after")), + lineage: [...document.querySelectorAll(".acpmux-lineage__icon")].map((node) => shape(node, "::after")), + }; + }); + await p.close(); + expect(new Set(shapes.floating).size).toBe(2); + expect(new Set(shapes.summary).size).toBe(3); + expect(new Set(shapes.lineage).size).toBe(4); + }); +}); From 1fb2d2d54cb3ce4a75aa87f9481cf00129b5a144 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Tue, 13 Oct 2026 23:49:47 -0700 Subject: [PATCH 10/16] test: the web red tests typecheck before the kit exists react-apps-check stopped at the typecheck on the red commit, so the browser test never ran; load the kit by path with its own type and format the file. Co-Authored-By: Claude Opus 5.5 --- webviews/test/motion-kit.test.ts | 18 ++++++++++---- webviews/test/static-status-loops.test.ts | 29 +++++++++++++++++++---- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/webviews/test/motion-kit.test.ts b/webviews/test/motion-kit.test.ts index d02777688082..44f56fd48551 100644 --- a/webviews/test/motion-kit.test.ts +++ b/webviews/test/motion-kit.test.ts @@ -21,6 +21,16 @@ afterAll(() => { } }); +// Loaded by path so this file typechecks before the kit exists (red first). +const motionKit = "../src/ui/motion"; +type MotionKit = { + revealKeyframes(options: { reduced: boolean }): Keyframe[]; + stagger(index: number, options: { reduced: boolean }): number; + STAGGER_STEP_MS: number; + STAGGER_ITEMS: number; +}; +const loadKit = () => import(motionKit) as Promise; + const theme = { isDark: false, pageBackground: "#fff", @@ -41,16 +51,16 @@ const theme = { test("the theme's status indicators look reaches the root, and a theme without it clears it", async () => { const { applyAgentTheme } = await import("../src/agent-session/shared/theme"); const root = document.documentElement; - applyAgentTheme({ ...theme, statusIndicators: "static" }); + applyAgentTheme({ ...theme, statusIndicators: "static" } as Parameters[0]); expect(root.dataset.statusIndicators).toBe("static"); - applyAgentTheme({ ...theme, statusIndicators: "animated" }); + applyAgentTheme({ ...theme, statusIndicators: "animated" } as Parameters[0]); expect(root.dataset.statusIndicators).toBe("animated"); applyAgentTheme(theme); expect(root.dataset.statusIndicators).toBeUndefined(); }); test("a reveal fades in and rises a few pixels; under Reduce Motion it only fades", async () => { - const { revealKeyframes } = await import("../src/ui/motion"); + const { revealKeyframes } = await loadKit(); const moving = revealKeyframes({ reduced: false }); expect(moving[0]).toMatchObject({ opacity: 0 }); const rise = /translateY\((\d+(?:\.\d+)?)px\)/.exec(String(moving[0].transform)); @@ -62,7 +72,7 @@ test("a reveal fades in and rises a few pixels; under Reduce Motion it only fade }); test("a stagger is a few short steps, capped, and nothing under Reduce Motion", async () => { - const { stagger, STAGGER_STEP_MS, STAGGER_ITEMS } = await import("../src/ui/motion"); + const { stagger, STAGGER_STEP_MS, STAGGER_ITEMS } = await loadKit(); expect(stagger(0, { reduced: false })).toBe(0); expect(stagger(1, { reduced: false })).toBe(STAGGER_STEP_MS); expect(STAGGER_STEP_MS).toBeLessThanOrEqual(25); diff --git a/webviews/test/static-status-loops.test.ts b/webviews/test/static-status-loops.test.ts index a516f1e14732..92b9fe326833 100644 --- a/webviews/test/static-status-loops.test.ts +++ b/webviews/test/static-status-loops.test.ts @@ -55,7 +55,12 @@ await requireBrowserLane("static-status-loops.test.ts", async () => { await browser?.close(); }); - async function page(style: string, body: string, reducedMotion: "reduce" | "no-preference", look?: "static"): Promise { + async function page( + style: string, + body: string, + reducedMotion: "reduce" | "no-preference", + look?: "static", + ): Promise { const p = await browser!.newPage(); await p.emulateMedia({ reducedMotion }); await p.setContent(`${body}`); @@ -70,7 +75,9 @@ await requireBrowserLane("static-status-loops.test.ts", async () => { return p.evaluate(() => document .getAnimations() - .filter((animation) => animation.effect?.getTiming().iterations === Infinity && animation.playState === "running") + .filter( + (animation) => animation.effect?.getTiming().iterations === Infinity && animation.playState === "running", + ) .map((animation) => { const effect = animation.effect as KeyframeEffect | null; const target = effect?.target as Element | null; @@ -109,7 +116,12 @@ await requireBrowserLane("static-status-loops.test.ts", async () => { }); test("Static keeps Thinking readable: muted text, no sweep band", async () => { - const p = await page(`${desktop}${pane}`, `
Thinking
`, "no-preference", "static"); + const p = await page( + `${desktop}${pane}`, + `
Thinking
`, + "no-preference", + "static", + ); const thinking = await p.$eval(".cv-thinking", (node) => { const style = getComputedStyle(node); return { color: style.color, clip: style.backgroundClip, image: style.backgroundImage }; @@ -124,7 +136,9 @@ await requireBrowserLane("static-status-loops.test.ts", async () => { const body = `` + `` + - ["running", "done", "failed"].map((state) => ``).join("") + + ["running", "done", "failed"] + .map((state) => ``) + .join("") + ["running", "completed", "failed", "cancelled"] .map((state) => ``) .join(""); @@ -132,7 +146,12 @@ await requireBrowserLane("static-status-loops.test.ts", async () => { const shapes = await p.evaluate(() => { const shape = (node: Element, pseudo?: string) => { const style = getComputedStyle(node, pseudo); - return [style.content, style.clipPath, style.borderRadius, style.backgroundColor === "rgba(0, 0, 0, 0)" ? "hollow" : "filled"].join(" | "); + return [ + style.content, + style.clipPath, + style.borderRadius, + style.backgroundColor === "rgba(0, 0, 0, 0)" ? "hollow" : "filled", + ].join(" | "); }; return { floating: [...document.querySelectorAll(".acpmux-floating-status")].map((node) => shape(node)), From 8b4c880f1b49a0766e4bd66ae0da09b873d66af0 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Wed, 14 Oct 2026 00:05:01 -0700 Subject: [PATCH 11/16] Static status reaches the web pane; shared late-content motion kit - AgentPaneTheme sends statusIndicators (static when the setting is static or Reduce Motion is on); AgentPaneView re-themes when it changes. applyAgentTheme sets data-status-indicators on the root. - Under it no pane loop runs: mic wait, model picker and harness spinners, floating breathe, Thinking sweep (text stays muted), reply caret, Jump to Latest dots, Home writing. The diff base picker's spinner stops under Reduce Motion (animation none). - Color-only marks get a shape each in static: the floating chat's attention triangle; subagent dots with a check or cross; lineage badges as dot, check, cross or ring. Subagent dot tooltips name the state. - Late content: webviews/src/ui/motion.ts + motion.css (reveal, crossfade, stagger, spring easings as CSS linear()) and Motion.reveal / Motion.stagger natively; Reduce Motion fades only, no stagger. plans/cmux-next/motion.md "Late content". Co-Authored-By: Claude Opus 5.5 --- .../CmuxNextAgentPane/AgentPaneTheme.swift | 3 + .../CmuxNextAgentPane/AgentPaneView.swift | 2 +- .../CmuxNextDesign/Motion/Motion+Reveal.swift | 55 +++++++++++++++++ plans/cmux-next/motion.md | 17 ++++++ .../acpmux/conversation/conversation.css | 15 +++++ .../acpmux/harnesses/harnesses.css | 1 + webviews/src/agent-session/acpmux/styles.css | 7 +++ .../acpmux/summary/SubagentStack.tsx | 8 ++- .../agent-session/acpmux/summary/summary.css | 13 ++++ webviews/src/agent-session/shared/theme.ts | 4 ++ webviews/src/agent-session/shared/types.ts | 4 ++ webviews/src/pages/home-channels/styles.css | 4 ++ webviews/src/styles.css | 3 +- webviews/src/ui/README.md | 14 +++++ webviews/src/ui/motion.css | 59 +++++++++++++++++++ webviews/src/ui/motion.ts | 59 +++++++++++++++++++ webviews/src/ui/ui.css | 1 + 17 files changed, 265 insertions(+), 4 deletions(-) create mode 100644 Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift create mode 100644 webviews/src/ui/motion.css create mode 100644 webviews/src/ui/motion.ts diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTheme.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTheme.swift index 7eed4bdbedc3..9fb114f1762d 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTheme.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTheme.swift @@ -58,6 +58,9 @@ enum AgentPaneTheme { "fadeOut": motion.duration(MotionFade.fadeOut), "move": motion.duration(MotionSpring.move), ], + // Static status indicators, or Reduce Motion (cx-sya4n): the page stops its status + // loops and draws a shape per state (`data-status-indicators`). + "statusIndicators": motion.reduceMotion || DesignSettings.shared.statusIndicator.animation == .static ? "static" : "animated", ] } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneView.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneView.swift index 7949a18cc8b0..284648c17383 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneView.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneView.swift @@ -220,7 +220,7 @@ public final class AgentPaneView: NSView { private func observeMotion() { motionObservation = Task { [weak self] in - for await _ in ObservationStream({ Motion.speed }) { + for await _ in ObservationStream({ (Motion.speed, DesignSettings.shared.statusIndicator.animation) }) { guard let self else { return } self.applyTheme() } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift new file mode 100644 index 000000000000..2316061046eb --- /dev/null +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift @@ -0,0 +1,55 @@ +import QuartzCore + +/// Late content settles in, it does not pop (cx-sya4n; plans/cmux-next/motion.md "Late +/// content"). Motion is small and local (Leo 2026-10-14): a short fade with a few points of +/// rise, the first few rows of a list a step apart, never a whole pane travelling. The web +/// side is webviews/src/ui/motion.ts with the same numbers. +extension Motion { + /// Items of a list that get their own stagger step; later ones arrive with the last. + public static let staggerItems = 4 + /// Seconds between two staggered items. + public static let staggerStep: TimeInterval = 0.025 + /// Points revealed content rises as it settles. + public static let revealRise: CGFloat = 3 + + /// The delay of item `index` of a list that arrives at once: a short step for the first + /// few items, none past them. 0 under Reduce Motion and with speed "off". + // TODO(#20467): also 0 during a live resize once `Motion.isLiveResizing` lands. + public static func stagger(index: Int) -> TimeInterval { + guard policy.animatesMovement, index > 0 else { return 0 } + return Double(min(index, staggerItems - 1)) * staggerStep + } + + /// Fades `layer` in from clear while it rises `revealRise` points into place on the `appear` + /// spring, after `stagger(index:)`; under Reduce Motion it only fades, at once. Returns the + /// added animation, or nil when fades are off. The layer's model values are unchanged. + @discardableResult + public static func reveal(_ layer: CALayer, index: Int = 0) -> CAAnimation? { + let policy = policy + let fade = policy.duration(MotionFade.fadeIn) + guard fade > 0 else { return nil } + let opacity = CABasicAnimation(keyPath: "opacity") + opacity.fromValue = 0 + opacity.toValue = layer.opacity + opacity.duration = fade + opacity.timingFunction = fadeCurve + var animation: CAAnimation = opacity + if policy.animatesMovement { + // Below its place: down is negative y unless the layer is flipped. + let below = layer.contentsAreFlipped() ? revealRise : -revealRise + let rise = springAnimation(.appear, "transform.translation.y", from: below, to: 0) + rise.duration = policy.spring(.appear).perceivedDuration + let group = CAAnimationGroup() + group.animations = [opacity, rise] + group.duration = max(opacity.duration, rise.duration) + animation = group + } + let delay = stagger(index: index) + if delay > 0 { + animation.beginTime = layer.convertTime(CACurrentMediaTime(), from: nil) + delay + animation.fillMode = .backwards + } + layer.add(animation, forKey: "cmux.reveal") + return animation + } +} diff --git a/plans/cmux-next/motion.md b/plans/cmux-next/motion.md index 39387b4d7525..2d62e423c55e 100644 --- a/plans/cmux-next/motion.md +++ b/plans/cmux-next/motion.md @@ -122,6 +122,23 @@ scroll and hold by 1.5; Reduce Motion and `off` never start it. "normal" multiplies every response and fade duration by 1.5; damping does not change. Loops keep their period (they show state, not transitions). +## Late content (cx-sya4n, Leo 2026-10-14) + +Motion is small and local: grow, fade, settle, hover, as short as still feels comfortable, never +whole panes travelling. Big or debatable motion ships only behind a Debug toggle, off by default. +Content that arrives late (a reply, a list that loads, a card filled in) settles in instead of +popping, with these helpers only; they add no tokens. + +| Helper | Native (CmuxNextDesign) | Web (webviews/src/ui/motion.ts, motion.css) | +| --- | --- | --- | +| Reveal: fade from clear plus a 3 pt/px rise | `Motion.reveal(layer, index:)`: `fadeIn` opacity with the `appear` spring cut at its 95% time | `reveal(element, index)` or `.ui-reveal` (`--ui-reveal-index`), 167 ms on `--motion-ease-appear` | +| Crossfade in place | `Motion.crossfadeInPlace(layer)` | `.ui-crossfade`, leaving child `data-leaving` | +| Stagger | `Motion.stagger(index:)`: 25 ms per item, first 4 items | `stagger(i)`, same numbers | +| Reduce Motion | reveal fades only, stagger 0 | reveal fades only, no rise, stagger 0 | + +The web easings (`--motion-ease-move|appear|settle`) are the native springs sampled as CSS +`linear()`. A live resize should also skip the stagger once `Motion.isLiveResizing` lands (#20467). + ## Why these values - Damping 0.9, not 1. A critically damped spring spends its last third diff --git a/webviews/src/agent-session/acpmux/conversation/conversation.css b/webviews/src/agent-session/acpmux/conversation/conversation.css index 74e2352949b5..0c77b24b255f 100644 --- a/webviews/src/agent-session/acpmux/conversation/conversation.css +++ b/webviews/src/agent-session/acpmux/conversation/conversation.css @@ -825,6 +825,14 @@ pre.cv-math-source { animation: cv-thinking-sweep 2s linear infinite; } } +/* Static status indicators (cx-sya4n): no sweep; the word stays muted. */ +:root[data-status-indicators="static"] .cv-thinking { + color: var(--cv-text-muted); + background: none; + -webkit-background-clip: border-box; + background-clip: border-box; + animation: none; +} .cv-tools { margin: 2px 0 0; @@ -1387,6 +1395,9 @@ pre.cv-math-source { animation: cv-caret-wait 1s ease-in-out infinite; } } +:root[data-status-indicators="static"] .cv-md.is-waiting .cv-caret::after { + animation: none; +} /* Footnotes (Markdown.tsx): a superscript number that scrolls to its note, and the notes under a rule at the end of the reply, in a smaller, quieter type. */ @@ -1988,6 +1999,10 @@ pre.cv-math-source { animation-delay: calc(var(--agent-motion-in) * 3); } } +/* Static status indicators (cx-sya4n): the new-content dots hold still. */ +:root[data-status-indicators="static"] .acpmux-jump-latest__dots i { + animation: none; +} @keyframes acpmux-jump-latest-dot { 0%, 60%, diff --git a/webviews/src/agent-session/acpmux/harnesses/harnesses.css b/webviews/src/agent-session/acpmux/harnesses/harnesses.css index 1c8b0f2aca54..df9169486539 100644 --- a/webviews/src/agent-session/acpmux/harnesses/harnesses.css +++ b/webviews/src/agent-session/acpmux/harnesses/harnesses.css @@ -15,6 +15,7 @@ .acpmux-harness-row[data-harness-status="failed"] .acpmux-harness-status{color:var(--agent-danger)} .acpmux-harness-spinner{flex:none;width:12px;height:12px;margin-right:4px;box-sizing:border-box;border:1.5px solid color-mix(in srgb,var(--agent-muted) 35%,transparent);border-top-color:var(--agent-muted);border-radius:50%} @media (prefers-reduced-motion: no-preference){.acpmux-harness-spinner{animation:acpmux-mp-spin 700ms linear infinite}} +:root[data-status-indicators=static] .acpmux-harness-spinner{animation:none} .acpmux-harness-action{flex:none;height:26px;padding:0 10px;border:0;border-radius:6px;background:var(--acpmux-composer-bg);box-shadow:inset 0 0 0 .5px var(--acpmux-composer-edge);color:var(--agent-text);font:inherit;font-size:var(--text-detail);white-space:nowrap;cursor:default} .acpmux-harness-action:hover{background:var(--acpmux-composer-hover)} .acpmux-harness-action.is-primary{background:var(--agent-accent);box-shadow:none;color:var(--agent-accent-text,#fff)} diff --git a/webviews/src/agent-session/acpmux/styles.css b/webviews/src/agent-session/acpmux/styles.css index 11a8a0bb37f6..abc97d3bbdbd 100644 --- a/webviews/src/agent-session/acpmux/styles.css +++ b/webviews/src/agent-session/acpmux/styles.css @@ -55,6 +55,8 @@ .acpmux-mic[data-state=finalizing] .acpmux-mic-meter{opacity:.55} @keyframes acpmux-mic-wait{50%{opacity:.45}} @media (prefers-reduced-motion:no-preference){.acpmux-mic[data-state=starting]{animation:acpmux-mic-wait calc(var(--agent-motion-in) * 10) var(--agent-ease-out) infinite}.acpmux-mic-meter span{transition:transform var(--agent-motion-hover) var(--agent-ease-out)}} +/* Static status indicators (cx-sya4n): the mic's wait pulse stops. */ +:root[data-status-indicators=static] .acpmux-mic[data-state=starting]{animation:none} .acpmux-dictation-notice{display:flex;align-items:center;gap:8px;margin:0 max(16px,calc((100% - 736px)/2)) 8px;padding:6px 6px 6px 12px;border-radius:12px;background:var(--acpmux-composer-bg);box-shadow:inset 0 0 0 .5px var(--acpmux-composer-edge);color:var(--agent-text);font-size:12px;line-height:18px} .acpmux-dictation-notice span{flex:1} .acpmux-dictation-settings,.acpmux-dictation-dismiss{height:24px;padding:0 10px;border:0;border-radius:6px;background:var(--acpmux-menu-hover);color:var(--agent-text);font:inherit;cursor:default} @@ -91,6 +93,7 @@ .acpmux-menu-search-value{display:none} .acpmux-mp-refresh-spinner{width:12px;height:12px;border:1.5px solid color-mix(in srgb,currentColor 35%,transparent);border-top-color:currentColor;border-radius:50%} @media (prefers-reduced-motion: no-preference){.acpmux-mp-refresh-spinner{animation:acpmux-mp-spin 700ms linear infinite}} +:root[data-status-indicators=static] .acpmux-mp-refresh-spinner{animation:none} @keyframes acpmux-mp-spin{to{transform:rotate(360deg)}} /* The context ring is a button the size of the mic; a click opens the usage details above the bar. */ .acpmux-context{flex:none} @@ -421,6 +424,10 @@ button.acpmux-edited-file:hover{background:color-mix(in srgb,var(--agent-text) 4 .acpmux-floating-status[data-status=attention]{background:var(--agent-warning)} @keyframes acpmux-floating-breathe{from{opacity:1}to{opacity:.35}} @media (prefers-reduced-motion:reduce){.acpmux-floating-status[data-status=streaming]{animation:none}} +/* Static status indicators (cx-sya4n): no breathing, and a shape per state, not color alone: a solid dot + while it works, a triangle when it needs you. */ +:root[data-status-indicators=static] .acpmux-floating-status[data-status=streaming]{animation:none} +:root[data-status-indicators=static] .acpmux-floating-status[data-status=attention]{width:8px;height:7px;border-radius:0;clip-path:polygon(50% 0,100% 100%,0 100%)} .acpmux-quick[data-floating=compact]{justify-content:center} .acpmux-floating-bar{display:flex;align-items:center;gap:4px;height:100%;box-sizing:border-box;padding:12px 8px 0 4px} .acpmux-floating-bar-open{flex:1;min-width:0;display:flex;align-items:center;gap:8px;height:32px;padding:0 8px;border:0;border-radius:6px;background:none;color:inherit;font:inherit;text-align:start;cursor:default;transition:background-color var(--acpmux-motion-hover,80ms) var(--acpmux-motion-ease,ease-out)} diff --git a/webviews/src/agent-session/acpmux/summary/SubagentStack.tsx b/webviews/src/agent-session/acpmux/summary/SubagentStack.tsx index 48ac76337f41..67280ccff98c 100644 --- a/webviews/src/agent-session/acpmux/summary/SubagentStack.tsx +++ b/webviews/src/agent-session/acpmux/summary/SubagentStack.tsx @@ -1,12 +1,16 @@ import React from "react"; import { useT } from "../i18n"; import type { SummarySubagent } from "./sessionSummary"; +import { STATE_LABEL } from "../subagents/SubagentGroup"; /// Dots shown before the counts; the rest are counted, not drawn. const STACK = 4; +const DOT_STATE = { running: STATE_LABEL.running, done: STATE_LABEL.completed, failed: STATE_LABEL.failed } as const; + /// The chat's subagents as one line: a dot per subagent, overlapping, then the counts by state -/// ("2 running · 19 done"). Each dot's tooltip names its subagent. +/// ("2 running · 19 done"). Each dot's tooltip names its subagent and its state, so the state is +/// never color alone (cx-sya4n); the counts carry it for VoiceOver. export function SubagentStack({ subagents }: { subagents: readonly SummarySubagent[] }) { const t = useT(); const count = (state: SummarySubagent["state"]) => subagents.filter((agent) => agent.state === state).length; @@ -24,7 +28,7 @@ export function SubagentStack({ subagents }: { subagents: readonly SummarySubage className="acpmux-summary-dot" data-state={agent.state} data-tone={index % STACK} - title={agent.title} + title={`${agent.title} · ${t(DOT_STATE[agent.state])}`} /> ))} diff --git a/webviews/src/agent-session/acpmux/summary/summary.css b/webviews/src/agent-session/acpmux/summary/summary.css index 6687abcf4b09..b48ab7f3eea2 100644 --- a/webviews/src/agent-session/acpmux/summary/summary.css +++ b/webviews/src/agent-session/acpmux/summary/summary.css @@ -35,6 +35,19 @@ .acpmux-lineage__icon[data-state=running]::after{background:var(--agent-accent)} .acpmux-lineage__icon[data-state=completed]::after{background:var(--agent-success,var(--acpmux-add,#3fb950))} .acpmux-lineage__icon[data-state=failed]::after{background:var(--agent-danger)} +/* Static status indicators (cx-sya4n): a shape per state, not color alone. A subagent dot carries + a check when done and a cross when it failed; the lineage badge is a dot while running, a check, + a cross, or a ring when it stopped otherwise. */ +:root[data-status-indicators=static] .acpmux-summary-dot{position:relative} +:root[data-status-indicators=static] .acpmux-summary-dot::after{position:absolute;inset:0;display:grid;place-items:center;font-size:var(--text-caption);transform:scale(.75);font-weight:700;line-height:1;color:var(--surface-popup)} +:root[data-status-indicators=static] .acpmux-summary-dot[data-state=done]::after{content:"✓"} +:root[data-status-indicators=static] .acpmux-summary-dot[data-state=failed]::after{content:"✕"} +:root[data-status-indicators=static] .acpmux-summary-dot[data-state=running]::after{content:"";inset:4px;border-radius:50%;background:var(--surface-popup)} +:root[data-status-indicators=static] .acpmux-lineage__icon::after{background:transparent;box-shadow:inset 0 0 0 1.5px var(--agent-muted)} +:root[data-status-indicators=static] .acpmux-lineage__icon[data-state=running]::after{background:var(--agent-accent);box-shadow:0 0 0 1.5px var(--surface-popup)} +:root[data-status-indicators=static] .acpmux-lineage__icon[data-state=completed]::after,:root[data-status-indicators=static] .acpmux-lineage__icon[data-state=failed]::after{width:8px;height:8px;right:-3px;bottom:-3px;border-radius:0;box-shadow:none;display:grid;place-items:center;font-size:var(--text-caption);transform:scale(.75);font-weight:700;line-height:1;background:var(--surface-popup)} +:root[data-status-indicators=static] .acpmux-lineage__icon[data-state=completed]::after{content:"✓";color:var(--agent-success,var(--acpmux-add,#3fb950))} +:root[data-status-indicators=static] .acpmux-lineage__icon[data-state=failed]::after{content:"✕";color:var(--agent-danger)} .acpmux-lineage__state{min-width:52px;text-align:right} .acpmux-lineage__previous{display:flex;align-items:center;gap:6px} @media (prefers-reduced-motion:no-preference){.acpmux-summary-popover{animation:ui-popup-open var(--ui-popup-open) ease-out}} diff --git a/webviews/src/agent-session/shared/theme.ts b/webviews/src/agent-session/shared/theme.ts index 8abb7b705dbd..95ee59984e37 100644 --- a/webviews/src/agent-session/shared/theme.ts +++ b/webviews/src/agent-session/shared/theme.ts @@ -23,6 +23,7 @@ const cssVariables: Record = { palette: null, borders: null, motion: null, + statusIndicators: null, }; const motionVariables = { @@ -47,6 +48,9 @@ export function applyAgentTheme(theme: AgentSessionTheme): void { // appearance.borders: the stylesheets clear their edges under `[data-borders="none"]`. if (theme.borders === "none") root.dataset.borders = "none"; else delete root.dataset.borders; + // Static status indicators (or Reduce Motion): the stylesheets stop their loops under it. + if (theme.statusIndicators) root.dataset.statusIndicators = theme.statusIndicators; + else delete root.dataset.statusIndicators; for (const [key, variable] of Object.entries(cssVariables) as Array<[keyof AgentSessionTheme, string | null]>) { if (!variable) { continue; diff --git a/webviews/src/agent-session/shared/types.ts b/webviews/src/agent-session/shared/types.ts index af8d87b01173..fd83056174c6 100644 --- a/webviews/src/agent-session/shared/types.ts +++ b/webviews/src/agent-session/shared/types.ts @@ -50,6 +50,10 @@ export type AgentSessionTheme = { /// `hoverOut` is how fast a hover fill clears (0 by default, as in Edge). `move` is the native /// `move` spring's timed equivalent (MotionSpring), 0 when movement is instant. motion?: { hover: number; hoverOut?: number; focus: number; fadeIn: number; fadeOut: number; move?: number }; + /// appearance.statusIndicator.animation, `static` also under Reduce Motion (cx-sya4n): sets + /// `data-status-indicators` on the root; under `static` no status loop runs and color-only + /// marks draw a shape each. Absent means the stylesheet defaults (animated). + statusIndicators?: "animated" | "static"; }; export type AppContext = { diff --git a/webviews/src/pages/home-channels/styles.css b/webviews/src/pages/home-channels/styles.css index 32350b2b9f44..721e7821a5ba 100644 --- a/webviews/src/pages/home-channels/styles.css +++ b/webviews/src/pages/home-channels/styles.css @@ -602,6 +602,10 @@ body, animation: hc-writing 1.4s ease-in-out infinite; } } +/* Static status indicators (cx-sya4n), where a page gets the pane's theme: no pulse. */ +:root[data-status-indicators="static"] .hc-writing { + animation: none; +} @keyframes hc-writing { 50% { opacity: 0.45; diff --git a/webviews/src/styles.css b/webviews/src/styles.css index 53d396c397e7..c0b12c7a0088 100644 --- a/webviews/src/styles.css +++ b/webviews/src/styles.css @@ -461,9 +461,10 @@ body { transform: rotate(360deg); } } +/* Reduce Motion stops it (cx-sya4n); the diff viewer has no Static setting of its own. */ @media (prefers-reduced-motion: reduce) { .base-picker-spinner { - animation-duration: 1.6s; + animation: none; } } .base-picker-popover { diff --git a/webviews/src/ui/README.md b/webviews/src/ui/README.md index 7fc87c36f9de..628d92640da8 100644 --- a/webviews/src/ui/README.md +++ b/webviews/src/ui/README.md @@ -141,3 +141,17 @@ Rules: (`font-size: 12px`, a `font:` shorthand with a size, `fontSize: 12`, Tailwind `text-[12px]`); the old ones sit in `scripts/cmux-next/type-scale-baseline.tsv`, which may only go down. Each component moves to the tokens in its UI-tournament round. + +## Late content (motion.ts, motion.css) + +Content that arrives late settles in instead of popping. Motion stays small and local: a fade, a +few pixels of rise, a crossfade in place, never a whole pane travelling. + +- `reveal(element, index)` or `.ui-reveal` (with `--ui-reveal-index`): a 167 ms fade with a 3 px rise + on the native `appear` spring. +- `.ui-crossfade`: the new child fades in over the old one (`data-leaving`) in the same cell. +- `stagger(i)`: 25 ms per item for the first four items; later items arrive with the fourth. +- Reduce Motion: a reveal is a plain fade, nothing rises, `stagger` returns 0. + +Tokens (`--motion-ease-move|appear|settle`, `--motion-move|appear|settle|fade`) mirror the native +springs; plans/cmux-next/motion.md "Late content" lists the native side. diff --git a/webviews/src/ui/motion.css b/webviews/src/ui/motion.css new file mode 100644 index 000000000000..2c5d710ef4e2 --- /dev/null +++ b/webviews/src/ui/motion.css @@ -0,0 +1,59 @@ +/* Late content settles in (cx-sya4n; ui/motion.ts says how). Small and local only: a fade, a few + pixels of rise, a crossfade in place. Easings are the native springs (MotionTunables, speed + fast) sampled to their 95% time as CSS linear(); the pane's host durations (--agent-motion-*) + win where they exist. */ +:root { + --motion-ease-move: linear(0, 0.073, 0.239, 0.394, 0.536, 0.656, 0.765, 0.835, 0.887, 0.929, 0.954, 0.971, 0.982, 0.99, 1); + --motion-ease-appear: linear(0, 0.088, 0.221, 0.394, 0.55, 0.679, 0.763, 0.84, 0.895, 0.927, 0.955, 0.973, 0.984, 0.99, 1); + --motion-ease-settle: linear(0, 0.062, 0.187, 0.308, 0.452, 0.582, 0.691, 0.766, 0.837, 0.891, 0.93, 0.957, 0.973, 0.987, 1); + --motion-move: var(--agent-motion-move, 183ms); + --motion-appear: 167ms; + --motion-settle: 169ms; + --motion-fade: var(--agent-motion-in, 120ms); + --motion-reveal-rise: 3px; + --motion-stagger-step: 25ms; +} + +/* Reveal: style="--ui-reveal-index: N" staggers it (the first four rows; later ones with the fourth). */ +.ui-reveal { + animation: ui-reveal var(--motion-appear) var(--motion-ease-appear) both; + animation-delay: calc(min(var(--ui-reveal-index, 0), 3) * var(--motion-stagger-step)); +} +@keyframes ui-reveal { + from { + opacity: 0; + transform: translateY(var(--motion-reveal-rise)); + } +} + +/* Crossfade: children share one cell; the old one (data-leaving) fades out as the new fades in. */ +.ui-crossfade { + display: grid; +} +.ui-crossfade > * { + grid-area: 1 / 1; + animation: ui-fade-in var(--motion-fade) ease-out both; +} +.ui-crossfade > [data-leaving] { + animation-name: ui-fade-out; + pointer-events: none; +} +@keyframes ui-fade-in { + from { + opacity: 0; + } +} +@keyframes ui-fade-out { + to { + opacity: 0; + } +} + +/* Reduce Motion: a plain short fade, no rise, no stagger (desktop.css shortens it further). */ +@media (prefers-reduced-motion: reduce) { + .ui-reveal { + animation-name: ui-fade-in; + animation-duration: var(--motion-fade); + animation-delay: 0ms; + } +} diff --git a/webviews/src/ui/motion.ts b/webviews/src/ui/motion.ts new file mode 100644 index 000000000000..1b6e974e649d --- /dev/null +++ b/webviews/src/ui/motion.ts @@ -0,0 +1,59 @@ +// Late content settles in, it does not pop (cx-sya4n, Leo 2026-10-14: motion is small and local, +// as short as still feels comfortable; never whole panes travelling). The shared pieces, matched +// to the native kit (CmuxNextDesign Motion.reveal / Motion.stagger, plans/cmux-next/motion.md +// "Late content"); their CSS side is ui/motion.css. +// +// - reveal: a short fade with a few pixels of rise (`.ui-reveal`, or `reveal(element)`). +// - crossfade: new content fades in over the old in place (`.ui-crossfade`, the leaving child +// marked `data-leaving`), so the layout never jumps. +// - stagger(i): the first few rows of a list arrive a step apart; later rows arrive with the last. +// Under Reduce Motion a reveal is a plain fade, nothing rises and nothing waits. + +/** Delay between two staggered items, in ms. */ +export const STAGGER_STEP_MS = 25; +/** Items that get their own step; later ones arrive with the last, so nothing lingers. */ +export const STAGGER_ITEMS = 4; +/** How far revealed content rises as it settles, in px. */ +export const REVEAL_RISE_PX = 3; +/** The reveal's length in ms: the native `appear` spring's settle time (MotionTunables, fast). */ +export const REVEAL_MS = 167; +/** The native `appear` spring (response 0.18, damping 0.9) sampled to its 95% time, as CSS `linear()`. */ +export const EASE_APPEAR = + "linear(0, 0.088, 0.221, 0.394, 0.55, 0.679, 0.763, 0.84, 0.895, 0.927, 0.955, 0.973, 0.984, 0.99, 1)"; + +type MotionOptions = { reduced?: boolean }; + +/** Whether the person asked for less motion (false where there is no window). */ +export function prefersReducedMotion(): boolean { + return typeof window !== "undefined" && typeof window.matchMedia === "function" + ? window.matchMedia("(prefers-reduced-motion: reduce)").matches + : false; +} + +/** The delay of item `index` in a staggered list, in ms; 0 under Reduce Motion. */ +export function stagger(index: number, { reduced = prefersReducedMotion() }: MotionOptions = {}): number { + if (reduced || !(index > 0)) return 0; + return Math.min(Math.floor(index), STAGGER_ITEMS - 1) * STAGGER_STEP_MS; +} + +/** A reveal's keyframes: fade and rise, or only the fade under Reduce Motion. */ +export function revealKeyframes({ reduced = prefersReducedMotion() }: MotionOptions = {}): Keyframe[] { + return reduced + ? [{ opacity: 0 }, { opacity: 1 }] + : [ + { opacity: 0, transform: `translateY(${REVEAL_RISE_PX}px)` }, + { opacity: 1, transform: "translateY(0)" }, + ]; +} + +/** Reveals `element` now (item `index` of a list); returns the animation, or null without one. */ +export function reveal(element: Element, index = 0, options: MotionOptions = {}): Animation | null { + if (typeof element.animate !== "function") return null; + const reduced = options.reduced ?? prefersReducedMotion(); + return element.animate(revealKeyframes({ reduced }), { + duration: reduced ? Math.min(REVEAL_MS, 100) : REVEAL_MS, + delay: stagger(index, { reduced }), + easing: reduced ? "ease-out" : EASE_APPEAR, + fill: "backwards", + }); +} diff --git a/webviews/src/ui/ui.css b/webviews/src/ui/ui.css index f36d4af3d192..e003698fff90 100644 --- a/webviews/src/ui/ui.css +++ b/webviews/src/ui/ui.css @@ -1,5 +1,6 @@ @import "./popupSurface.css"; @import "./ghost.css"; +@import "./motion.css"; /* The wrapper's look (R139 desktop feel): system font, chrome that is not selectable, focus rings only for keyboard focus (`:focus-visible`), colors only from the shared web theme (`--cmux-*`) From 114f0ca5af11205abb754cb6496bee1850398758 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Wed, 14 Oct 2026 00:21:03 -0700 Subject: [PATCH 12/16] Motion+Reveal: public import QuartzCore for its public API Co-Authored-By: Claude Opus 5.5 --- .../CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift index 2316061046eb..1b93d0eb5b6b 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Motion/Motion+Reveal.swift @@ -1,4 +1,4 @@ -import QuartzCore +public import QuartzCore /// Late content settles in, it does not pop (cx-sya4n; plans/cmux-next/motion.md "Late /// content"). Motion is small and local (Leo 2026-10-14): a short fade with a few points of From 395e0465c80fcbc63801c6f305ce4c80a2cbc91a Mon Sep 17 00:00:00 2001 From: Leo Li Date: Wed, 14 Oct 2026 00:25:26 -0700 Subject: [PATCH 13/16] test: the shape check resolves the pane's theme colors, as in the app The lineage badge's running dot and stopped ring differed only through theme variables the bare page did not define. Co-Authored-By: Claude Opus 5.5 --- webviews/test/static-status-loops.test.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/webviews/test/static-status-loops.test.ts b/webviews/test/static-status-loops.test.ts index 92b9fe326833..75cc7ae76988 100644 --- a/webviews/test/static-status-loops.test.ts +++ b/webviews/test/static-status-loops.test.ts @@ -142,7 +142,10 @@ await requireBrowserLane("static-status-loops.test.ts", async () => { ["running", "completed", "failed", "cancelled"] .map((state) => ``) .join(""); - const p = await page(`${desktop}${pane}`, body, "no-preference", "static"); + // The theme the pane always gets (applyAgentTheme), so state colors resolve as in the app. + const colors = + ":root{--agent-accent:#0a84ff;--agent-muted:#8e8e93;--agent-warning:#ff9f0a;--agent-danger:#ff453a;--surface-popup:#fff}"; + const p = await page(`${desktop}${pane}${colors}`, body, "no-preference", "static"); const shapes = await p.evaluate(() => { const shape = (node: Element, pseudo?: string) => { const style = getComputedStyle(node, pseudo); @@ -150,6 +153,7 @@ await requireBrowserLane("static-status-loops.test.ts", async () => { style.content, style.clipPath, style.borderRadius, + style.boxShadow.includes("inset") ? "ring" : "", style.backgroundColor === "rgba(0, 0, 0, 0)" ? "hollow" : "filled", ].join(" | "); }; From fd5c2b04cf1f9c537d56d7aebf91ff29a1c5f250 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Wed, 14 Oct 2026 01:11:03 -0700 Subject: [PATCH 14/16] fix: rebuild status catalogs as base text plus the new keys The base merge interleaved the new keys into the top of both catalogs. Co-Authored-By: Claude Opus 5.5 --- .../Resources/Localizable.xcstrings | 11360 ++++++++-------- .../CmuxNextSettings/Localizable.xcstrings | 1100 +- 2 files changed, 6230 insertions(+), 6230 deletions(-) diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings index 0b79d1d84405..5d56fa63e03c 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Resources/Localizable.xcstrings @@ -1,27924 +1,27924 @@ { "sourceLanguage": "en", "strings": { - "status.label.working": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent is working.", + "dialog.ok": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Working" + "value": "OK" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "قيد العمل" + "value": "موافق" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Radi" + "value": "U redu" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Arbejder" + "value": "OK" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "In Arbeit" + "value": "OK" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Trabajando" + "value": "Aceptar" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "En cours" + "value": "OK" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "In corso" + "value": "OK" } }, "ja": { "stringUnit": { "state": "translated", - "value": "作業中" + "value": "OK" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "កំពុងធ្វើ" + "value": "យល់ព្រម" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "진행 중" + "value": "확인" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Arbeider" + "value": "OK" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "W toku" + "value": "OK" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Em andamento" + "value": "OK" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "В работе" + "value": "ОК" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "กำลังทำ" + "value": "ตกลง" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Çalışıyor" + "value": "Tamam" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "У роботі" + "value": "OK" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Đang làm" + "value": "OK" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "进行中" + "value": "好" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "進行中" + "value": "好" } } } }, - "status.label.loading": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. A page or command is loading.", + "dialog.cancel": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Loading" + "value": "Cancel" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "جارٍ التحميل" + "value": "إلغاء" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Učitava se" + "value": "Otkaži" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Indlæser" + "value": "Annuller" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Lädt" + "value": "Abbrechen" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Cargando" + "value": "Cancelar" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Chargement" + "value": "Annuler" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Caricamento" + "value": "Annulla" } }, "ja": { "stringUnit": { "state": "translated", - "value": "読み込み中" + "value": "キャンセル" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "កំពុងផ្ទុក" + "value": "បោះបង់" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "로드 중" + "value": "취소" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Laster inn" + "value": "Avbryt" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Wczytywanie" + "value": "Anuluj" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Carregando" + "value": "Cancelar" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Загрузка" + "value": "Отменить" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "กำลังโหลด" + "value": "ยกเลิก" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Yükleniyor" + "value": "Vazgeç" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Завантаження" + "value": "Скасувати" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Đang tải" + "value": "Hủy" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "正在载入" + "value": "取消" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "正在載入" + "value": "取消" } } } }, - "status.label.paused": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. Work stopped part way.", + "dialog.from": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Paused" + "value": "From %@" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "متوقف مؤقتًا" + "value": "من %@" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Pauzirano" + "value": "Od %@" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Sat på pause" + "value": "Fra %@" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Pausiert" + "value": "Von %@" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "En pausa" + "value": "De %@" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "En pause" + "value": "De %@" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "In pausa" + "value": "Da %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "一時停止中" + "value": "%@ から" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "បានផ្អាក" + "value": "ពី %@" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "일시 정지됨" + "value": "%@에서" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Satt på pause" + "value": "Fra %@" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Wstrzymano" + "value": "Od %@" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Pausado" + "value": "De %@" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Приостановлено" + "value": "От %@" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "หยุดชั่วคราว" + "value": "จาก %@" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Duraklatıldı" + "value": "Gönderen: %@" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Призупинено" + "value": "Від %@" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Tạm dừng" + "value": "Từ %@" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "已暂停" + "value": "来自 %@" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "已暫停" + "value": "來自 %@" } } } }, - "status.label.waiting": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent waits for the user.", + "toast.undo": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Waiting" + "value": "Undo" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "في الانتظار" + "value": "تراجع" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Čeka" + "value": "Poništi" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Venter" + "value": "Fortryd" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Wartet" + "value": "Widerrufen" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "En espera" + "value": "Deshacer" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "En attente" + "value": "Annuler" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "In attesa" + "value": "Annulla" } }, "ja": { "stringUnit": { "state": "translated", - "value": "待機中" + "value": "取り消す" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "កំពុងរង់ចាំ" + "value": "មិនធ្វើវិញ" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "대기 중" + "value": "실행 취소" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Venter" + "value": "Angre" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Oczekuje" + "value": "Cofnij" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Aguardando" + "value": "Desfazer" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Ожидание" + "value": "Отменить" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "กำลังรอ" + "value": "เลิกทำ" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Bekliyor" + "value": "Geri Al" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Очікування" + "value": "Скасувати" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Đang chờ" + "value": "Hoàn tác" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "等待中" + "value": "撤销" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "等待中" + "value": "還原" } } } }, - "status.label.permission": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent asks permission to run something.", + "toast.reopen": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Needs permission" + "value": "Reopen" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "يحتاج إلى إذن" + "value": "إعادة الفتح" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Treba dozvolu" + "value": "Ponovo otvori" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Kræver tilladelse" + "value": "Genåbn" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Braucht Erlaubnis" + "value": "Wieder öffnen" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Necesita permiso" + "value": "Reabrir" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Autorisation requise" + "value": "Rouvrir" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Serve un permesso" + "value": "Riapri" } }, "ja": { "stringUnit": { "state": "translated", - "value": "許可が必要" + "value": "再度開く" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "ត្រូវការការអនុញ្ញាត" + "value": "បើកឡើងវិញ" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "권한 필요" + "value": "다시 열기" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Trenger tillatelse" + "value": "Åpne igjen" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Wymaga zgody" + "value": "Otwórz ponownie" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Precisa de permissão" + "value": "Reabrir" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Нужно разрешение" + "value": "Открыть снова" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "ต้องการสิทธิ์" + "value": "เปิดอีกครั้ง" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "İzin gerekiyor" + "value": "Yeniden Aç" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Потрібен дозвіл" + "value": "Відкрити знову" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Cần quyền" + "value": "Mở lại" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "需要权限" + "value": "重新打开" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "需要權限" + "value": "重新開啟" } } } }, - "status.label.question": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent asks the user a question.", + "toast.dismiss": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Question" + "value": "Dismiss" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "سؤال" + "value": "إغلاق" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Pitanje" + "value": "Odbaci" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Spørgsmål" + "value": "Luk" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Frage" + "value": "Schließen" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Pregunta" + "value": "Descartar" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Question" + "value": "Ignorer" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Domanda" + "value": "Chiudi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "質問" + "value": "閉じる" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "សំណួរ" + "value": "បិទ" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "질문" + "value": "닫기" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Spørsmål" + "value": "Lukk" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Pytanie" + "value": "Zamknij" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Pergunta" + "value": "Dispensar" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Вопрос" + "value": "Закрыть" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "คำถาม" + "value": "ปิด" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Soru" + "value": "Kapat" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Питання" + "value": "Закрити" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Câu hỏi" + "value": "Đóng" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "问题" + "value": "关闭" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "問題" + "value": "關閉" } } } }, - "status.label.auth": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. A program needs the user to sign in.", + "quitFlush.conflict": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sign-in needed" + "value": "%@ changed on disk" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "يلزم تسجيل الدخول" + "value": "تغيّر %@ على القرص" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Potrebna prijava" + "value": "%@ je promijenjen na disku" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Log ind kræves" + "value": "%@ er ændret på disken" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Anmeldung nötig" + "value": "%@ wurde auf dem Datenträger geändert" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Hay que iniciar sesión" + "value": "%@ cambió en el disco" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Connexion requise" + "value": "%@ a été modifié sur le disque" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Accesso richiesto" + "value": "%@ è cambiato sul disco" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サインインが必要" + "value": "%@ はディスク上で変更されました" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "ត្រូវការចូលគណនី" + "value": "%@ បានផ្លាស់ប្ដូរលើថាស" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "로그인 필요" + "value": "%@이(가) 디스크에서 변경되었습니다" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Pålogging kreves" + "value": "%@ er endret på disken" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Wymaga logowania" + "value": "%@ zmienił się na dysku" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Login necessário" + "value": "%@ foi alterado no disco" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Нужен вход" + "value": "%@ изменён на диске" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "ต้องลงชื่อเข้าใช้" + "value": "%@ เปลี่ยนแปลงบนดิสก์" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Oturum açılmalı" + "value": "%@ diskte değişti" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Потрібен вхід" + "value": "%@ змінено на диску" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Cần đăng nhập" + "value": "%@ đã thay đổi trên đĩa" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "需要登录" + "value": "%@ 已在磁盘上更改" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "需要登入" + "value": "%@ 已在磁碟上變更" } } } }, - "status.label.error": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. The run failed.", + "quitFlush.readOnly": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Error" + "value": "%@ is read-only" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "خطأ" + "value": "%@ للقراءة فقط" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Greška" + "value": "%@ je samo za čitanje" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Fejl" + "value": "%@ er skrivebeskyttet" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Fehler" + "value": "%@ ist schreibgeschützt" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Error" + "value": "%@ es de solo lectura" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Erreur" + "value": "%@ est en lecture seule" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Errore" + "value": "%@ è di sola lettura" } }, "ja": { "stringUnit": { "state": "translated", - "value": "エラー" + "value": "%@ は読み取り専用です" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "កំហុស" + "value": "%@ អានបានតែប៉ុណ្ណោះ" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "오류" + "value": "%@은(는) 읽기 전용입니다" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Feil" + "value": "%@ er skrivebeskyttet" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Błąd" + "value": "%@ jest tylko do odczytu" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Erro" + "value": "%@ é somente leitura" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Ошибка" + "value": "%@ только для чтения" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "ข้อผิดพลาด" + "value": "%@ เป็นแบบอ่านอย่างเดียว" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Hata" + "value": "%@ salt okunur" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Помилка" + "value": "%@ лише для читання" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Lỗi" + "value": "%@ chỉ đọc" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "错误" + "value": "%@ 为只读" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "錯誤" + "value": "%@ 為唯讀" } } } }, - "status.label.done": { - "comment": "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. The run finished.", + "quitFlush.timedOut": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Done" + "value": "Saving did not finish in time" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "تم" + "value": "لم يكتمل الحفظ في الوقت المحدد" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Gotovo" + "value": "Spremanje nije završeno na vrijeme" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Færdig" + "value": "Gemningen blev ikke færdig i tide" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Fertig" + "value": "Das Sichern wurde nicht rechtzeitig fertig" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Listo" + "value": "El guardado no terminó a tiempo" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Terminé" + "value": "L’enregistrement ne s’est pas terminé à temps" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Fatto" + "value": "Il salvataggio non è terminato in tempo" } }, "ja": { "stringUnit": { "state": "translated", - "value": "完了" + "value": "保存が時間内に終わりませんでした" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "រួចរាល់" + "value": "ការរក្សាទុកមិនបានបញ្ចប់ទាន់ពេល" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "완료" + "value": "저장이 제때 끝나지 않았습니다" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Ferdig" + "value": "Lagringen ble ikke ferdig i tide" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Gotowe" + "value": "Zapisywanie nie zakończyło się na czas" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Concluído" + "value": "O salvamento não terminou a tempo" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Готово" + "value": "Сохранение не завершилось вовремя" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "เสร็จแล้ว" + "value": "การบันทึกไม่เสร็จทันเวลา" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Bitti" + "value": "Kaydetme zamanında bitmedi" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Готово" + "value": "Збереження не завершилося вчасно" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Xong" + "value": "Việc lưu không hoàn tất kịp thời" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "完成" + "value": "保存未能及时完成" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "完成" + "value": "儲存未能及時完成" } } } }, - "dialog.ok": { + "statusIconSet.current": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): today's marks: working dots, a still dot for blocked, a check for done.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "Dots (original)" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "موافق" + "value": "نقاط (الحالي)" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "U redu" + "value": "Tačke (trenutno)" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Prikker (nuværende)" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Punkte (aktuell)" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Aceptar" + "value": "Puntos (actual)" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Points (actuel)" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Punti (attuale)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "OK" + "value": "ドット(元のデザイン)" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "យល់ព្រម" + "value": "ចំណុច (បច្ចុប្បន្ន)" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "확인" + "value": "점 (현재)" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Prikker (nåværende)" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Kropki (obecne)" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Pontos (atual)" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "ОК" + "value": "Точки (текущие)" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "ตกลง" + "value": "จุด (ปัจจุบัน)" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Tamam" + "value": "Noktalar (geçerli)" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Крапки (поточні)" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "OK" + "value": "Chấm (hiện tại)" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "好" + "value": "圆点(当前)" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "好" + "value": "圓點(目前)" } } } }, - "dialog.cancel": { + "statusIconSet.shapes": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): pictures: a raised hand, a speech bubble with a question mark, a key.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cancel" + "value": "Shapes" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "إلغاء" + "value": "أشكال" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Otkaži" + "value": "Oblici" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Annuller" + "value": "Former" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Abbrechen" + "value": "Formen" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Cancelar" + "value": "Formas" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Annuler" + "value": "Formes" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Annulla" + "value": "Forme" } }, "ja": { "stringUnit": { "state": "translated", - "value": "キャンセル" + "value": "図形" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "បោះបង់" + "value": "រាង" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "취소" + "value": "도형" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Avbryt" + "value": "Former" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Anuluj" + "value": "Kształty" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Cancelar" + "value": "Formas" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Отменить" + "value": "Фигуры" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "ยกเลิก" + "value": "รูปทรง" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Vazgeç" + "value": "Şekiller" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Скасувати" + "value": "Фігури" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Hủy" + "value": "Hình dạng" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "取消" + "value": "形状" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "取消" + "value": "形狀" } } } }, - "dialog.from": { + "statusIconSet.rings": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): outlined rings with a small mark inside.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "From %@" + "value": "Rings" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "من %@" + "value": "حلقات" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Od %@" + "value": "Prstenovi" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Fra %@" + "value": "Ringe" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Von %@" + "value": "Ringe" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "De %@" + "value": "Anillos" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "De %@" + "value": "Anneaux" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Da %@" + "value": "Anelli" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ から" + "value": "リング" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "ពី %@" + "value": "រង្វង់" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "%@에서" + "value": "링" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Fra %@" + "value": "Ringer" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Od %@" + "value": "Pierścienie" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "De %@" + "value": "Anéis" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "От %@" + "value": "Кольца" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "จาก %@" + "value": "วงแหวน" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Gönderen: %@" + "value": "Halkalar" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Від %@" + "value": "Кільця" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Từ %@" + "value": "Vòng" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "来自 %@" + "value": "圆环" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "來自 %@" + "value": "圓環" } } } }, - "toast.undo": { + "statusIconSet.badges": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): filled discs with a mark cut out.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Undo" + "value": "Badges" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "تراجع" + "value": "شارات" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Poništi" + "value": "Značke" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Fortryd" + "value": "Mærker" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Widerrufen" + "value": "Plaketten" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Deshacer" + "value": "Insignias" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Annuler" + "value": "Pastilles" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Annulla" + "value": "Badge" } }, "ja": { "stringUnit": { "state": "translated", - "value": "取り消す" + "value": "バッジ" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "មិនធ្វើវិញ" + "value": "ផ្លាកសញ្ញា" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "실행 취소" + "value": "배지" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Angre" + "value": "Merker" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Cofnij" + "value": "Plakietki" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Desfazer" + "value": "Selos" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Отменить" + "value": "Значки" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "เลิกทำ" + "value": "ป้าย" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Geri Al" + "value": "Rozetler" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Скасувати" + "value": "Бейджі" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Hoàn tác" + "value": "Huy hiệu" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "撤销" + "value": "徽章" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "還原" + "value": "徽章" } } } }, - "toast.reopen": { + "statusIconSet.bars": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): waving bars while an agent works.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Reopen" + "value": "Pulse Bars" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "إعادة الفتح" + "value": "أشرطة نابضة" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Ponovo otvori" + "value": "Pulsirajuće trake" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Genåbn" + "value": "Pulserende bjælker" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Wieder öffnen" + "value": "Pulsbalken" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Reabrir" + "value": "Barras pulsantes" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Rouvrir" + "value": "Barres pulsées" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Riapri" + "value": "Barre pulsanti" } }, "ja": { "stringUnit": { "state": "translated", - "value": "再度開く" + "value": "パルスバー" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "បើកឡើងវិញ" + "value": "របារលោត" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "다시 열기" + "value": "펄스 막대" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Åpne igjen" + "value": "Pulserende stolper" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Otwórz ponownie" + "value": "Pulsujące paski" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Reabrir" + "value": "Barras pulsantes" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Открыть снова" + "value": "Пульсирующие полосы" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "เปิดอีกครั้ง" + "value": "แถบกะพริบ" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Yeniden Aç" + "value": "Nabız Çubukları" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Відкрити знову" + "value": "Пульсуючі смуги" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Mở lại" + "value": "Thanh nhịp" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "重新打开" + "value": "脉冲条" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "重新開啟" + "value": "脈衝條" } } } }, - "toast.dismiss": { + "statusIconSet.pips": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): very small colored dots.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Dismiss" + "value": "Minimal Pips" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "إغلاق" + "value": "نقاط صغيرة" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Odbaci" + "value": "Minimalne tačke" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Luk" + "value": "Minimale prikker" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Schließen" + "value": "Minimale Punkte" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Descartar" + "value": "Puntos mínimos" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Ignorer" + "value": "Points minimaux" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Chiudi" + "value": "Punti minimi" } }, "ja": { "stringUnit": { "state": "translated", - "value": "閉じる" + "value": "ミニマルな点" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "បិទ" + "value": "ចំណុចតូចៗ" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "닫기" + "value": "최소 점" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Lukk" + "value": "Minimale prikker" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Zamknij" + "value": "Minimalne kropki" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Dispensar" + "value": "Pontos mínimos" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Закрыть" + "value": "Минимальные точки" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "ปิด" + "value": "จุดเล็ก" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Kapat" + "value": "Minimal Noktalar" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Закрити" + "value": "Мінімальні крапки" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Đóng" + "value": "Chấm tối giản" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "关闭" + "value": "极简圆点" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "關閉" + "value": "極簡圓點" } } } }, - "quitFlush.conflict": { + "statusIconSet.signs": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): warning triangles and a stop octagon, like road signs.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ changed on disk" + "value": "Signs" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "تغيّر %@ على القرص" + "value": "إشارات" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "%@ je promijenjen na disku" + "value": "Znakovi" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "%@ er ændret på disken" + "value": "Skilte" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "%@ wurde auf dem Datenträger geändert" + "value": "Schilder" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "%@ cambió en el disco" + "value": "Señales" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "%@ a été modifié sur le disque" + "value": "Panneaux" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "%@ è cambiato sul disco" + "value": "Segnali" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ はディスク上で変更されました" + "value": "標識" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "%@ បានផ្លាស់ប្ដូរលើថាស" + "value": "ផ្លាកសញ្ញាចរាចរណ៍" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "%@이(가) 디스크에서 변경되었습니다" + "value": "표지판" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "%@ er endret på disken" + "value": "Skilt" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "%@ zmienił się na dysku" + "value": "Znaki" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "%@ foi alterado no disco" + "value": "Sinais" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "%@ изменён на диске" + "value": "Знаки" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "%@ เปลี่ยนแปลงบนดิสก์" + "value": "ป้ายเตือน" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "%@ diskte değişti" + "value": "İşaretler" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "%@ змінено на диску" + "value": "Знаки" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "%@ đã thay đổi trên đĩa" + "value": "Biển báo" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "%@ 已在磁盘上更改" + "value": "标志" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "%@ 已在磁碟上變更" + "value": "標誌" } } } }, - "quitFlush.readOnly": { + "statusIconSet.letters": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): single letters P, Q, A in rounded squares.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "%@ is read-only" + "value": "Letters" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "%@ للقراءة فقط" + "value": "أحرف" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "%@ je samo za čitanje" + "value": "Slova" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "%@ er skrivebeskyttet" + "value": "Bogstaver" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "%@ ist schreibgeschützt" + "value": "Buchstaben" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "%@ es de solo lectura" + "value": "Letras" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "%@ est en lecture seule" + "value": "Lettres" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "%@ è di sola lettura" + "value": "Lettere" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%@ は読み取り専用です" + "value": "文字" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "%@ អានបានតែប៉ុណ្ណោះ" + "value": "អក្សរ" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "%@은(는) 읽기 전용입니다" + "value": "문자" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "%@ er skrivebeskyttet" + "value": "Bokstaver" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "%@ jest tylko do odczytu" + "value": "Litery" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "%@ é somente leitura" + "value": "Letras" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "%@ только для чтения" + "value": "Буквы" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "%@ เป็นแบบอ่านอย่างเดียว" + "value": "ตัวอักษร" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "%@ salt okunur" + "value": "Harfler" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "%@ лише для читання" + "value": "Літери" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "%@ chỉ đọc" + "value": "Chữ cái" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "%@ 为只读" + "value": "字母" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "%@ 為唯讀" + "value": "字母" } } } }, - "quitFlush.timedOut": { + "statusIconSet.symbols": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): filled system symbols.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Saving did not finish in time" + "value": "Symbols" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "لم يكتمل الحفظ في الوقت المحدد" + "value": "رموز" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Spremanje nije završeno na vrijeme" + "value": "Simboli" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Gemningen blev ikke færdig i tide" + "value": "Symboler" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Das Sichern wurde nicht rechtzeitig fertig" + "value": "Symbole" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "El guardado no terminó a tiempo" + "value": "Símbolos" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "L’enregistrement ne s’est pas terminé à temps" + "value": "Symboles" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Il salvataggio non è terminato in tempo" + "value": "Simboli" } }, "ja": { "stringUnit": { "state": "translated", - "value": "保存が時間内に終わりませんでした" + "value": "シンボル" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "ការរក្សាទុកមិនបានបញ្ចប់ទាន់ពេល" + "value": "និមិត្តសញ្ញា" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "저장이 제때 끝나지 않았습니다" + "value": "기호" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Lagringen ble ikke ferdig i tide" + "value": "Symboler" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Zapisywanie nie zakończyło się na czas" + "value": "Symbole" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "O salvamento não terminou a tempo" + "value": "Símbolos" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Сохранение не завершилось вовремя" + "value": "Символы" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "การบันทึกไม่เสร็จทันเวลา" + "value": "สัญลักษณ์" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Kaydetme zamanında bitmedi" + "value": "Semboller" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Збереження не завершилося вчасно" + "value": "Символи" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Việc lưu không hoàn tất kịp thời" + "value": "Ký hiệu" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "保存未能及时完成" + "value": "符号" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "儲存未能及時完成" + "value": "符號" } } } }, - "statusIconSet.current": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): today's marks: working dots, a still dot for blocked, a check for done.", + "statusIconSet.symbolsOutline": { + "comment": "Status icon set candidate (Debug menu, Debug Settings): outlined system symbols.", "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Dots (original)" + "value": "Outlined Symbols" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "نقاط (الحالي)" + "value": "رموز مفرغة" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Tačke (trenutno)" + "value": "Obrisani simboli" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Prikker (nuværende)" + "value": "Konturerede symboler" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Punkte (aktuell)" + "value": "Umrissene Symbole" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Puntos (actual)" + "value": "Símbolos con contorno" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Points (actuel)" + "value": "Symboles en contour" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Punti (attuale)" + "value": "Simboli con contorno" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ドット(元のデザイン)" + "value": "アウトラインのシンボル" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "ចំណុច (បច្ចុប្បន្ន)" + "value": "និមិត្តសញ្ញាបន្ទាត់" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "점 (현재)" + "value": "윤곽선 기호" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Prikker (nåværende)" + "value": "Konturerte symboler" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Kropki (obecne)" + "value": "Symbole konturowe" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Pontos (atual)" + "value": "Símbolos contornados" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Точки (текущие)" + "value": "Контурные символы" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "จุด (ปัจจุบัน)" + "value": "สัญลักษณ์แบบเส้น" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Noktalar (geçerli)" + "value": "Çerçeveli Semboller" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Крапки (поточні)" + "value": "Контурні символи" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Chấm (hiện tại)" + "value": "Ký hiệu viền" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "圆点(当前)" + "value": "轮廓符号" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "圓點(目前)" + "value": "輪廓符號" } } } }, - "statusIconSet.shapes": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): pictures: a raised hand, a speech bubble with a question mark, a key.", + "backdrop.label": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Shapes" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "أشكال" + "state": "translated", + "value": "%1$@ — %2$@" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Oblici" + "state": "translated", + "value": "%1$@ — %2$@" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Former" + "state": "translated", + "value": "%1$@ — %2$@" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Formen" + "state": "translated", + "value": "%1$@ — %2$@" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@ — %2$@" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Formas" + "state": "translated", + "value": "%1$@ — %2$@" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Formes" + "state": "translated", + "value": "%1$@ — %2$@" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Forme" + "state": "translated", + "value": "%1$@ — %2$@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "図形" + "value": "%1$@ — %2$@" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "រាង" + "state": "translated", + "value": "%1$@ — %2$@" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "도형" + "state": "translated", + "value": "%1$@ — %2$@" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Former" + "state": "translated", + "value": "%1$@ — %2$@" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Kształty" + "state": "translated", + "value": "%1$@ — %2$@" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Formas" + "state": "translated", + "value": "%1$@ — %2$@" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Фигуры" + "state": "translated", + "value": "%1$@ — %2$@" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "รูปทรง" + "state": "translated", + "value": "%1$@ — %2$@" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Şekiller" + "state": "translated", + "value": "%1$@ — %2$@" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Фігури" + "state": "translated", + "value": "%1$@ — %2$@" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Hình dạng" + "state": "translated", + "value": "%1$@ — %2$@" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "形状" + "state": "translated", + "value": "%1$@ — %2$@" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "形狀" + "state": "translated", + "value": "%1$@ — %2$@" } } } }, - "statusIconSet.rings": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): outlined rings with a small mark inside.", + "backdrop.publicDomain": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Rings" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "حلقات" + "state": "translated", + "value": "ملكية عامة" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Prstenovi" + "state": "translated", + "value": "Javno vlasništvo" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Ringe" + "state": "translated", + "value": "Offentligt domæne" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Ringe" + "state": "translated", + "value": "Gemeinfrei" } }, - "es": { + "en": { "stringUnit": { - "state": "needs_review", - "value": "Anillos" + "state": "translated", + "value": "Public domain" + } + }, + "es": { + "stringUnit": { + "state": "translated", + "value": "Dominio público" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Anneaux" + "state": "translated", + "value": "Domaine public" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Anelli" + "state": "translated", + "value": "Pubblico dominio" } }, "ja": { "stringUnit": { "state": "translated", - "value": "リング" + "value": "パブリックドメイン" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "រង្វង់" + "state": "translated", + "value": "កម្មសិទ្ធិសាធារណៈ" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "링" + "state": "translated", + "value": "퍼블릭 도메인" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Ringer" + "state": "translated", + "value": "Allemannseie" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Pierścienie" + "state": "translated", + "value": "Domena publiczna" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Anéis" + "state": "translated", + "value": "Domínio público" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Кольца" + "state": "translated", + "value": "Общественное достояние" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "วงแหวน" + "state": "translated", + "value": "สาธารณสมบัติ" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Halkalar" + "state": "translated", + "value": "Kamu malı" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Кільця" + "state": "translated", + "value": "Суспільне надбання" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Vòng" + "state": "translated", + "value": "Phạm vi công cộng" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "圆环" + "state": "translated", + "value": "公有领域" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "圓環" + "state": "translated", + "value": "公有領域" } } } }, - "statusIconSet.badges": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): filled discs with a mark cut out.", + "backdrop.collection.darkArt": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Badges" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "شارات" + "state": "translated", + "value": "فن مظلم" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Značke" + "state": "translated", + "value": "Mračna umjetnost" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Mærker" + "state": "translated", + "value": "Mørk kunst" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Plaketten" + "state": "translated", + "value": "Dunkle Kunst" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Dark Art" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Insignias" + "state": "translated", + "value": "Arte oscuro" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Pastilles" + "state": "translated", + "value": "Art sombre" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Badge" + "state": "translated", + "value": "Arte oscura" } }, "ja": { "stringUnit": { "state": "translated", - "value": "バッジ" + "value": "ダークアート" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "ផ្លាកសញ្ញា" + "state": "translated", + "value": "សិល្បៈងងឹត" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "배지" + "state": "translated", + "value": "다크 아트" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Merker" + "state": "translated", + "value": "Mørk kunst" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Plakietki" + "state": "translated", + "value": "Mroczna sztuka" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Selos" + "state": "translated", + "value": "Arte Sombria" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Значки" + "state": "translated", + "value": "Мрачное искусство" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "ป้าย" + "state": "translated", + "value": "ศิลปะโทนมืด" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Rozetler" + "state": "translated", + "value": "Karanlık Sanat" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Бейджі" + "state": "translated", + "value": "Похмуре мистецтво" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Huy hiệu" + "state": "translated", + "value": "Nghệ thuật u tối" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "徽章" + "state": "translated", + "value": "暗黑艺术" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "徽章" + "state": "translated", + "value": "暗黑藝術" } } } }, - "statusIconSet.bars": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): waving bars while an agent works.", + "backdrop.collection.museumIcons": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Pulse Bars" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "أشرطة نابضة" + "state": "translated", + "value": "روائع المتاحف" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Pulsirajuće trake" + "state": "translated", + "value": "Muzejska remek-djela" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Pulserende bjælker" + "state": "translated", + "value": "Museumsikoner" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Pulsbalken" + "state": "translated", + "value": "Museumsikonen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Museum Icons" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Barras pulsantes" + "state": "translated", + "value": "Iconos de museo" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Barres pulsées" + "state": "translated", + "value": "Icônes des musées" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Barre pulsanti" + "state": "translated", + "value": "Icone dei musei" } }, "ja": { "stringUnit": { "state": "translated", - "value": "パルスバー" + "value": "名画" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "របារលោត" + "state": "translated", + "value": "ស្នាដៃល្បីៗក្នុងសារមន្ទីរ" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "펄스 막대" + "state": "translated", + "value": "명화" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Pulserende stolper" + "state": "translated", + "value": "Museumsikoner" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Pulsujące paski" + "state": "translated", + "value": "Arcydzieła muzealne" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Barras pulsantes" + "state": "translated", + "value": "Ícones de Museu" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Пульсирующие полосы" + "state": "translated", + "value": "Шедевры музеев" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "แถบกะพริบ" + "state": "translated", + "value": "ผลงานชิ้นเอกในพิพิธภัณฑ์" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Nabız Çubukları" + "state": "translated", + "value": "Müze İkonları" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Пульсуючі смуги" + "state": "translated", + "value": "Шедеври музеїв" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Thanh nhịp" + "state": "translated", + "value": "Kiệt tác bảo tàng" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "脉冲条" + "state": "translated", + "value": "博物馆名作" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "脈衝條" + "state": "translated", + "value": "博物館名作" } } } }, - "statusIconSet.pips": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): very small colored dots.", + "backdrop.collection.calm": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Minimal Pips" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "نقاط صغيرة" + "state": "translated", + "value": "هدوء" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Minimalne tačke" + "state": "translated", + "value": "Smireno" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Minimale prikker" + "state": "translated", + "value": "Rolig" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Minimale Punkte" + "state": "translated", + "value": "Ruhig" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Calm" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Puntos mínimos" + "state": "translated", + "value": "Calma" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Points minimaux" + "state": "translated", + "value": "Calme" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Punti minimi" + "state": "translated", + "value": "Calma" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ミニマルな点" + "value": "穏やか" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "ចំណុចតូចៗ" + "state": "translated", + "value": "ស្ងប់ស្ងាត់" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "최소 점" + "state": "translated", + "value": "차분함" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Minimale prikker" + "state": "translated", + "value": "Rolig" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Minimalne kropki" + "state": "translated", + "value": "Spokój" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Pontos mínimos" + "state": "translated", + "value": "Calma" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Минимальные точки" + "state": "translated", + "value": "Спокойствие" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "จุดเล็ก" + "state": "translated", + "value": "สงบ" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Minimal Noktalar" + "state": "translated", + "value": "Sakin" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Мінімальні крапки" + "state": "translated", + "value": "Спокій" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Chấm tối giản" + "state": "translated", + "value": "Tĩnh lặng" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "极简圆点" + "state": "translated", + "value": "宁静" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "極簡圓點" + "state": "translated", + "value": "寧靜" } } } }, - "statusIconSet.signs": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): warning triangles and a stop octagon, like road signs.", + "backdrop.collection.dore": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Signs" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "إشارات" + "state": "translated", + "value": "دوريه" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Znakovi" + "state": "translated", + "value": "Doré" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Skilte" + "state": "translated", + "value": "Doré" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Schilder" + "state": "translated", + "value": "Doré" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Doré" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Señales" + "state": "translated", + "value": "Doré" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Panneaux" + "state": "translated", + "value": "Doré" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Segnali" + "state": "translated", + "value": "Doré" } }, "ja": { "stringUnit": { "state": "translated", - "value": "標識" + "value": "ドレ" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "ផ្លាកសញ្ញាចរាចរណ៍" + "state": "translated", + "value": "ដូរេ" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "표지판" + "state": "translated", + "value": "도레" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Skilt" + "state": "translated", + "value": "Doré" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Znaki" + "state": "translated", + "value": "Doré" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Sinais" + "state": "translated", + "value": "Doré" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Знаки" + "state": "translated", + "value": "Доре" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "ป้ายเตือน" + "state": "translated", + "value": "โดเร" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "İşaretler" + "state": "translated", + "value": "Doré" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Знаки" + "state": "translated", + "value": "Доре" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Biển báo" + "state": "translated", + "value": "Doré" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "标志" + "state": "translated", + "value": "多雷" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "標誌" + "state": "translated", + "value": "多雷" } } } }, - "statusIconSet.letters": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): single letters P, Q, A in rounded squares.", + "backdrop.desktop.title": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Letters" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "أحرف" + "state": "translated", + "value": "خلفية سطح المكتب" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Slova" + "state": "translated", + "value": "Desktop Wallpaper" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Bogstaver" + "state": "translated", + "value": "Desktop Wallpaper" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Buchstaben" + "state": "translated", + "value": "Schreibtischhintergrund" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Desktop Wallpaper" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Letras" + "state": "translated", + "value": "Fondo de escritorio" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Lettres" + "state": "translated", + "value": "Fond d’écran du bureau" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Lettere" + "state": "translated", + "value": "Desktop Wallpaper" } }, "ja": { "stringUnit": { "state": "translated", - "value": "文字" + "value": "デスクトップ壁紙" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "អក្សរ" + "state": "translated", + "value": "Desktop Wallpaper" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "문자" + "state": "translated", + "value": "데스크탑 배경화면" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Bokstaver" + "state": "translated", + "value": "Desktop Wallpaper" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Litery" + "state": "translated", + "value": "Desktop Wallpaper" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Letras" + "state": "translated", + "value": "Desktop Wallpaper" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Буквы" + "state": "translated", + "value": "Desktop Wallpaper" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "ตัวอักษร" + "state": "translated", + "value": "Desktop Wallpaper" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Harfler" + "state": "translated", + "value": "Desktop Wallpaper" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Літери" + "state": "translated", + "value": "Desktop Wallpaper" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Chữ cái" + "state": "translated", + "value": "Desktop Wallpaper" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "字母" + "state": "translated", + "value": "桌面墙纸" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "字母" + "state": "translated", + "value": "桌面背景" } } } }, - "statusIconSet.symbols": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): filled system symbols.", + "backdrop.desktop.attribution": { "extractionState": "manual", "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Symbols" - } - }, "ar": { "stringUnit": { - "state": "needs_review", - "value": "رموز" + "state": "translated", + "value": "صورة سطح مكتب macOS الحالية" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "Simboli" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "Symboler" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "de": { "stringUnit": { - "state": "needs_review", - "value": "Symbole" + "state": "translated", + "value": "Dein aktuelles macOS-Schreibtischbild" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Your current macOS desktop picture" } }, "es": { "stringUnit": { - "state": "needs_review", - "value": "Símbolos" + "state": "translated", + "value": "Tu imagen de escritorio actual de macOS" } }, "fr": { "stringUnit": { - "state": "needs_review", - "value": "Symboles" + "state": "translated", + "value": "Votre image de bureau macOS actuelle" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "Simboli" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "ja": { "stringUnit": { "state": "translated", - "value": "シンボル" + "value": "現在の macOS デスクトップピクチャ" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "និមិត្តសញ្ញា" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "ko": { "stringUnit": { - "state": "needs_review", - "value": "기호" + "state": "translated", + "value": "현재 macOS 데스크탑 사진" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "Symboler" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "Symbole" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "Símbolos" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "Символы" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "สัญลักษณ์" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "Semboller" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "Символи" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "Ký hiệu" + "state": "translated", + "value": "Your current macOS desktop picture" } }, "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "符号" + "state": "translated", + "value": "你当前的 macOS 桌面图片" } }, "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "符號" + "state": "translated", + "value": "你目前的 macOS 桌面圖片" } } } }, - "statusIconSet.symbolsOutline": { - "comment": "Status icon set candidate (Debug menu, Debug Settings): outlined system symbols.", + "backdrop.system.attribution": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Outlined Symbols" + "value": "macOS system wallpaper · %@" } }, - "ar": { + "de": { "stringUnit": { - "state": "needs_review", - "value": "رموز مفرغة" + "state": "translated", + "value": "macOS-Systembild · %@" } }, - "bs": { + "fr": { "stringUnit": { - "state": "needs_review", - "value": "Obrisani simboli" + "state": "translated", + "value": "Fond d’écran macOS · %@" } }, - "da": { + "ar": { "stringUnit": { - "state": "needs_review", - "value": "Konturerede symboler" + "state": "translated", + "value": "خلفية نظام macOS · %@" } }, - "de": { + "es": { "stringUnit": { - "state": "needs_review", - "value": "Umrissene Symbole" + "state": "translated", + "value": "Fondo de macOS · %@" } }, - "es": { + "zh-Hant": { "stringUnit": { - "state": "needs_review", - "value": "Símbolos con contorno" + "state": "translated", + "value": "macOS 系統桌布 · %@" } }, - "fr": { + "zh-Hans": { "stringUnit": { - "state": "needs_review", - "value": "Symboles en contour" + "state": "translated", + "value": "macOS 系统墙纸 · %@" } }, - "it": { + "ko": { "stringUnit": { - "state": "needs_review", - "value": "Simboli con contorno" + "state": "translated", + "value": "macOS 시스템 배경화면 · %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アウトラインのシンボル" + "value": "macOS システム壁紙 · %@" } }, - "km": { + "bs": { "stringUnit": { "state": "needs_review", - "value": "និមិត្តសញ្ញាបន្ទាត់" + "value": "macOS system wallpaper · %@" } }, - "ko": { + "da": { "stringUnit": { "state": "needs_review", - "value": "윤곽선 기호" + "value": "macOS system wallpaper · %@" } }, - "nb": { + "it": { "stringUnit": { "state": "needs_review", - "value": "Konturerte symboler" + "value": "macOS system wallpaper · %@" } }, - "pl": { + "km": { "stringUnit": { "state": "needs_review", - "value": "Symbole konturowe" + "value": "macOS system wallpaper · %@" } }, - "pt-BR": { + "nb": { "stringUnit": { "state": "needs_review", - "value": "Símbolos contornados" + "value": "macOS system wallpaper · %@" } }, - "ru": { + "pl": { "stringUnit": { "state": "needs_review", - "value": "Контурные символы" + "value": "macOS system wallpaper · %@" } }, - "th": { + "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "สัญลักษณ์แบบเส้น" + "value": "macOS system wallpaper · %@" } }, - "tr": { + "ru": { "stringUnit": { "state": "needs_review", - "value": "Çerçeveli Semboller" + "value": "macOS system wallpaper · %@" } }, - "uk": { + "th": { "stringUnit": { "state": "needs_review", - "value": "Контурні символи" + "value": "macOS system wallpaper · %@" } }, - "vi": { + "tr": { "stringUnit": { "state": "needs_review", - "value": "Ký hiệu viền" + "value": "macOS system wallpaper · %@" } }, - "zh-Hans": { + "uk": { "stringUnit": { "state": "needs_review", - "value": "轮廓符号" + "value": "macOS system wallpaper · %@" } }, - "zh-Hant": { + "vi": { "stringUnit": { "state": "needs_review", - "value": "輪廓符號" + "value": "macOS system wallpaper · %@" } } } }, - "backdrop.label": { + "backdrop.collection.yours": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "صورك" } }, "bs": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Vaše slike" } }, "da": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Dine billeder" } }, "de": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Deine Bilder" } }, "en": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Your images" } }, "es": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Tus imágenes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Vos images" } }, "it": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Le tue immagini" } }, "ja": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "自分の画像" } }, "km": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "រូបភាពរបស់អ្នក" } }, "ko": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "내 이미지" } }, "nb": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Dine bilder" } }, "pl": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Twoje obrazy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Suas imagens" } }, "ru": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Ваши изображения" } }, "th": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "รูปภาพของคุณ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Görselleriniz" } }, "uk": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Ваші зображення" } }, "vi": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "Hình ảnh của bạn" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "你的图片" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "%1$@ — %2$@" + "value": "你的圖片" } } } }, - "backdrop.publicDomain": { + "backdrop.file.attribution": { "extractionState": "manual", "localizations": { "ar": { "stringUnit": { "state": "translated", - "value": "ملكية عامة" + "value": "صورتك · %@" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Javno vlasništvo" + "value": "Vaša slika · %@" } }, "da": { "stringUnit": { "state": "translated", - "value": "Offentligt domæne" + "value": "Dit billede · %@" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gemeinfrei" + "value": "Dein Bild · %@" } }, "en": { "stringUnit": { "state": "translated", - "value": "Public domain" + "value": "Your image · %@" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dominio público" + "value": "Tu imagen · %@" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Domaine public" + "value": "Votre image · %@" } }, "it": { "stringUnit": { "state": "translated", - "value": "Pubblico dominio" + "value": "La tua immagine · %@" } }, "ja": { "stringUnit": { "state": "translated", - "value": "パブリックドメイン" + "value": "自分の画像 · %@" } }, "km": { "stringUnit": { "state": "translated", - "value": "កម្មសិទ្ធិសាធារណៈ" + "value": "រូបភាពរបស់អ្នក · %@" } }, "ko": { "stringUnit": { "state": "translated", - "value": "퍼블릭 도메인" + "value": "내 이미지 · %@" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Allemannseie" + "value": "Ditt bilde · %@" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Domena publiczna" + "value": "Twój obraz · %@" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Domínio público" + "value": "Sua imagem · %@" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Общественное достояние" + "value": "Ваше изображение · %@" } }, "th": { "stringUnit": { "state": "translated", - "value": "สาธารณสมบัติ" + "value": "รูปภาพของคุณ · %@" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kamu malı" + "value": "Görseliniz · %@" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Суспільне надбання" + "value": "Ваше зображення · %@" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Phạm vi công cộng" + "value": "Hình ảnh của bạn · %@" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "公有领域" + "value": "你的图片 · %@" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "公有領域" + "value": "你的圖片 · %@" } } } }, - "backdrop.collection.darkArt": { + "backdrop.david-death-of-marat.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "فن مظلم" + "value": "The Death of Marat" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Mračna umjetnost" + "value": "Der Tod des Marat" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Mørk kunst" + "value": "La Mort de Marat" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Dunkle Kunst" + "value": "موت مارا" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Dark Art" + "value": "La muerte de Marat" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Arte oscuro" + "value": "馬拉之死" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Art sombre" + "value": "马拉之死" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Arte oscura" + "value": "마라의 죽음" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ダークアート" + "value": "マラーの死" } }, - "km": { + "bs": { "stringUnit": { "state": "translated", - "value": "សិល្បៈងងឹត" + "value": "Maratova smrt" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "다크 아트" + "value": "Marats død" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "La morte di Marat" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មរណភាពរបស់ម៉ារ៉ាត់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Mørk kunst" + "value": "Marats død" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Mroczna sztuka" + "value": "Śmierć Marata" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Arte Sombria" + "value": "A Morte de Marat" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Мрачное искусство" + "value": "Смерть Марата" } }, "th": { "stringUnit": { "state": "translated", - "value": "ศิลปะโทนมืด" + "value": "การตายของมาราต์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Karanlık Sanat" + "value": "Marat'nın Ölümü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Похмуре мистецтво" + "value": "Смерть Марата" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Nghệ thuật u tối" + "value": "Cái chết của Marat" } - }, - "zh-Hans": { + } + } + }, + "backdrop.goya-saturn.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "暗黑艺术" + "value": "Saturn Devouring His Son" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "暗黑藝術" + "value": "Saturn verschlingt seinen Sohn" } - } - } - }, - "backdrop.collection.museumIcons": { - "extractionState": "manual", - "localizations": { - "ar": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "روائع المتاحف" + "value": "Saturne dévorant un de ses fils" } }, - "bs": { + "ar": { "stringUnit": { "state": "translated", - "value": "Muzejska remek-djela" + "value": "زحل يلتهم ابنه" } }, - "da": { + "es": { "stringUnit": { "state": "translated", - "value": "Museumsikoner" + "value": "Saturno devorando a su hijo" } }, - "de": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Museumsikonen" + "value": "農神吞噬其子" } }, - "en": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Museum Icons" + "value": "农神吞噬其子" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Iconos de museo" + "value": "자식을 잡아먹는 사투르누스" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Icônes des musées" + "value": "我が子を食らうサトゥルヌス" } }, - "it": { + "bs": { "stringUnit": { "state": "translated", - "value": "Icone dei musei" + "value": "Saturn proždire svog sina" } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "名画" + "value": "Saturn fortærer sin søn" } }, - "km": { + "it": { "stringUnit": { "state": "translated", - "value": "ស្នាដៃល្បីៗក្នុងសារមន្ទីរ" + "value": "Saturno che divora un figlio" } }, - "ko": { + "km": { "stringUnit": { "state": "translated", - "value": "명화" + "value": "សាទូរ៉នស៊ីកូនប្រុសរបស់ខ្លួន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Museumsikoner" + "value": "Saturn fortærer sin sønn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Arcydzieła muzealne" + "value": "Saturn pożerający swego syna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ícones de Museu" + "value": "Saturno Devorando um Filho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Шедевры музеев" + "value": "Сатурн, пожирающий своего сына" } }, "th": { "stringUnit": { "state": "translated", - "value": "ผลงานชิ้นเอกในพิพิธภัณฑ์" + "value": "แซตเทิร์นกินบุตรของตน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Müze İkonları" + "value": "Oğlunu Yiyen Satürn" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Шедеври музеїв" + "value": "Сатурн, що пожирає свого сина" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Kiệt tác bảo tàng" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "博物馆名作" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "博物館名作" + "value": "Saturn ăn thịt con trai" } } } }, - "backdrop.collection.calm": { + "backdrop.velde-small-ship-storm.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "هدوء" + "value": "A Small Dutch Ship Riding Out a Storm" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Smireno" + "value": "Ein kleines holländisches Schiff im Sturm" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Rolig" + "value": "Un petit navire hollandais dans la tempête" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Ruhig" + "value": "سفينة هولندية صغيرة تواجه العاصفة" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Calm" + "value": "Pequeño barco holandés capeando un temporal" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Calma" + "value": "風暴中的荷蘭小船" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Calme" + "value": "风暴中的荷兰小船" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Calma" + "value": "폭풍을 견디는 네덜란드 작은 배" } }, "ja": { "stringUnit": { "state": "translated", - "value": "穏やか" + "value": "嵐を乗り切るオランダの小型船" } }, - "km": { + "bs": { "stringUnit": { "state": "translated", - "value": "ស្ងប់ស្ងាត់" + "value": "Mali holandski brod u oluji" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "차분함" + "value": "Et lille hollandsk skib i storm" } }, - "nb": { + "it": { "stringUnit": { "state": "translated", - "value": "Rolig" + "value": "Una piccola nave olandese nella tempesta" } }, - "pl": { + "km": { "stringUnit": { "state": "translated", - "value": "Spokój" + "value": "កប៉ាល់ហូឡង់តូចមួយក្នុងព្យុះ" } }, - "pt-BR": { + "nb": { "stringUnit": { "state": "translated", - "value": "Calma" + "value": "Et lite nederlandsk skip i storm" } }, - "ru": { + "pl": { "stringUnit": { "state": "translated", - "value": "Спокойствие" + "value": "Mały holenderski statek w czasie sztormu" } }, - "th": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "สงบ" + "value": "Um Pequeno Navio Holandês na Tempestade" } }, - "tr": { + "ru": { "stringUnit": { "state": "translated", - "value": "Sakin" + "value": "Маленький голландский корабль в шторм" } }, - "uk": { + "th": { "stringUnit": { "state": "translated", - "value": "Спокій" + "value": "เรือดัตช์ลำเล็กฝ่าพายุ" } }, - "vi": { + "tr": { "stringUnit": { "state": "translated", - "value": "Tĩnh lặng" + "value": "Fırtınada Küçük Bir Hollanda Gemisi" } }, - "zh-Hans": { + "uk": { "stringUnit": { "state": "translated", - "value": "宁静" + "value": "Маленький голландський корабель у шторм" } }, - "zh-Hant": { + "vi": { "stringUnit": { "state": "translated", - "value": "寧靜" + "value": "Con tàu Hà Lan nhỏ vượt bão" } } } }, - "backdrop.collection.dore": { + "backdrop.bosch-garden-right.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "دوريه" + "value": "The Garden of Earthly Delights: Hell" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "Der Garten der Lüste: Hölle" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "Le Jardin des délices : l'Enfer" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "حديقة المباهج الأرضية: الجحيم" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "El jardín de las delicias: el Infierno" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "人間樂園:地獄" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "人间乐园:地狱" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "쾌락의 정원: 지옥" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ドレ" + "value": "快楽の園:地獄" } }, - "km": { + "bs": { "stringUnit": { "state": "translated", - "value": "ដូរេ" + "value": "Vrt zemaljskih užitaka: Pakao" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "도레" + "value": "Lysternes have: Helvede" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Il Giardino delle delizie: l'Inferno" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "សួនសុខារម្មណ៍លោកិយ៖ នរក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "Lystenes hage: Helvete" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "Ogród rozkoszy ziemskich: Piekło" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "O Jardim das Delícias Terrenas: Inferno" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Доре" + "value": "Сад земных наслаждений: Ад" } }, "th": { "stringUnit": { "state": "translated", - "value": "โดเร" + "value": "สวนแห่งความสุขทางโลก: นรก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "Dünyevi Zevkler Bahçesi: Cehennem" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Доре" + "value": "Сад земних насолод: Пекло" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Doré" + "value": "Khu vườn khoái lạc trần thế: Địa ngục" } - }, - "zh-Hans": { + } + } + }, + "backdrop.bosch-ascent-blessed.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "多雷" + "value": "Ascent of the Blessed" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "多雷" + "value": "Der Aufstieg der Seligen" } - } - } - }, - "backdrop.desktop.title": { - "extractionState": "manual", - "localizations": { - "ar": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "خلفية سطح المكتب" + "value": "L'Ascension vers l'Empyrée" } }, - "bs": { + "ar": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "صعود المباركين" } }, - "da": { + "es": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Ascenso al Empíreo" } }, - "de": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Schreibtischhintergrund" + "value": "升往淨土" } }, - "en": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "升入天堂" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Fondo de escritorio" + "value": "축복받은 자들의 승천" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Fond d’écran du bureau" + "value": "天上界への上昇" } }, - "it": { + "bs": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Uzašašće blaženih" } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "デスクトップ壁紙" + "value": "De saliges opstigning" } }, - "km": { + "it": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Ascesa all'Empireo" } }, - "ko": { + "km": { "stringUnit": { "state": "translated", - "value": "데스크탑 배경화면" + "value": "ការឡើងទៅស្ថានសួគ៌របស់អ្នកមានពរ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "De saliges oppstigning" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Wstąpienie do Empireum" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Ascensão ao Empíreo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Восхождение в Эмпирей" } }, "th": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "การขึ้นสู่สวรรค์ของผู้ได้รับพร" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Kutsanmışların Yükselişi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" + "value": "Сходження до Емпірею" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Desktop Wallpaper" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "桌面墙纸" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "桌面背景" + "value": "Sự thăng thiên của những người được phúc" } } } }, - "backdrop.desktop.attribution": { + "backdrop.goya-witches-flight.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "صورة سطح مكتب macOS الحالية" + "value": "Witches' Flight" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Hexenflug" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Le Vol des sorcières" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Dein aktuelles macOS-Schreibtischbild" + "value": "طيران الساحرات" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Vuelo de brujas" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Tu imagen de escritorio actual de macOS" + "value": "女巫飛行" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Votre image de bureau macOS actuelle" + "value": "女巫飞行" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "마녀들의 비행" } }, "ja": { "stringUnit": { "state": "translated", - "value": "現在の macOS デスクトップピクチャ" + "value": "魔女たちの飛翔" } }, - "km": { + "bs": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Let vještica" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "현재 macOS 데스크탑 사진" + "value": "Heksenes flugt" } }, - "nb": { + "it": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Volo di streghe" } }, - "pl": { + "km": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "ការហោះហើររបស់មេធ្មប់" } }, - "pt-BR": { + "nb": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Heksenes flukt" } }, - "ru": { + "pl": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Lot czarownic" } }, - "th": { + "pt-BR": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Voo das Bruxas" } }, - "tr": { + "ru": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Полёт ведьм" } }, - "uk": { + "th": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "การบินของแม่มด" } }, - "vi": { + "tr": { "stringUnit": { "state": "translated", - "value": "Your current macOS desktop picture" + "value": "Cadıların Uçuşu" } }, - "zh-Hans": { + "uk": { "stringUnit": { "state": "translated", - "value": "你当前的 macOS 桌面图片" + "value": "Політ відьом" } }, - "zh-Hant": { + "vi": { "stringUnit": { "state": "translated", - "value": "你目前的 macOS 桌面圖片" + "value": "Chuyến bay của các phù thủy" } } } }, - "backdrop.system.attribution": { + "backdrop.bocklin-self-portrait-death.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "macOS system wallpaper · %@" + "value": "Self-Portrait with Death Playing the Fiddle" } }, "de": { "stringUnit": { "state": "translated", - "value": "macOS-Systembild · %@" + "value": "Selbstbildnis mit fiedelndem Tod" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fond d’écran macOS · %@" + "value": "Autoportrait avec la Mort jouant du violon" } }, "ar": { "stringUnit": { "state": "translated", - "value": "خلفية نظام macOS · %@" + "value": "بورتريه ذاتي مع الموت عازفًا الكمان" } }, "es": { "stringUnit": { "state": "translated", - "value": "Fondo de macOS · %@" + "value": "Autorretrato con la muerte tocando el violín" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "macOS 系統桌布 · %@" + "value": "與拉小提琴的死神的自畫像" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "macOS 系统墙纸 · %@" + "value": "与拉小提琴的死神的自画像" } }, "ko": { "stringUnit": { "state": "translated", - "value": "macOS 시스템 배경화면 · %@" + "value": "바이올린을 켜는 죽음과 함께 있는 자화상" } }, "ja": { "stringUnit": { "state": "translated", - "value": "macOS システム壁紙 · %@" + "value": "ヴァイオリンを弾く死神のいる自画像" } }, "bs": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Autoportret sa smrću koja svira violinu" } }, "da": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Selvportræt med Døden, der spiller violin" } }, "it": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Autoritratto con la morte che suona il violino" } }, "km": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "រូបខ្លួនឯងជាមួយមច្ចុរាជលេងវីយូឡុង" } }, "nb": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Selvportrett med Døden som spiller fiolin" } }, "pl": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Autoportret ze śmiercią grającą na skrzypcach" } }, "pt-BR": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Autorretrato com a Morte Tocando Violino" } }, "ru": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Автопортрет со смертью, играющей на скрипке" } }, "th": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "ภาพเหมือนตนเองกับมัจจุราชสีไวโอลิน" } }, "tr": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Keman Çalan Ölümle Otoportre" } }, "uk": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Автопортрет зі смертю, що грає на скрипці" } }, "vi": { "stringUnit": { - "state": "needs_review", - "value": "macOS system wallpaper · %@" + "state": "translated", + "value": "Chân dung tự họa với Thần Chết chơi vĩ cầm" } } } }, - "backdrop.collection.yours": { + "backdrop.caravaggio-medusa.title": { "extractionState": "manual", "localizations": { - "ar": { + "en": { "stringUnit": { "state": "translated", - "value": "صورك" + "value": "Medusa" } }, - "bs": { + "de": { "stringUnit": { "state": "translated", - "value": "Vaše slike" + "value": "Medusa" } }, - "da": { + "fr": { "stringUnit": { "state": "translated", - "value": "Dine billeder" + "value": "Méduse" } }, - "de": { + "ar": { "stringUnit": { "state": "translated", - "value": "Deine Bilder" + "value": "ميدوسا" } }, - "en": { + "es": { "stringUnit": { "state": "translated", - "value": "Your images" + "value": "Medusa" } }, - "es": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Tus imágenes" + "value": "美杜莎" } }, - "fr": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Vos images" + "value": "美杜莎" } }, - "it": { + "ko": { "stringUnit": { "state": "translated", - "value": "Le tue immagini" + "value": "메두사" } }, "ja": { "stringUnit": { "state": "translated", - "value": "自分の画像" + "value": "メドゥーサ" } }, - "km": { + "bs": { "stringUnit": { "state": "translated", - "value": "រូបភាពរបស់អ្នក" + "value": "Meduza" } }, - "ko": { + "da": { "stringUnit": { "state": "translated", - "value": "내 이미지" + "value": "Medusa" + } + }, + "it": { + "stringUnit": { + "state": "translated", + "value": "Medusa" + } + }, + "km": { + "stringUnit": { + "state": "translated", + "value": "មេឌូសា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dine bilder" + "value": "Medusa" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Twoje obrazy" + "value": "Meduza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Suas imagens" + "value": "Medusa" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ваши изображения" + "value": "Медуза" } }, "th": { "stringUnit": { "state": "translated", - "value": "รูปภาพของคุณ" + "value": "เมดูซา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Görselleriniz" + "value": "Medusa" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ваші зображення" + "value": "Медуза" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hình ảnh của bạn" + "value": "Medusa" } - }, - "zh-Hans": { + } + } + }, + "backdrop.martin-pandemonium.title": { + "extractionState": "manual", + "localizations": { + "en": { "stringUnit": { "state": "translated", - "value": "你的图片" + "value": "Pandemonium" } }, - "zh-Hant": { + "de": { "stringUnit": { "state": "translated", - "value": "你的圖片" + "value": "Pandämonium" } - } - } - }, - "backdrop.file.attribution": { - "extractionState": "manual", - "localizations": { - "ar": { + }, + "fr": { "stringUnit": { "state": "translated", - "value": "صورتك · %@" + "value": "Pandémonium" } }, - "bs": { + "ar": { "stringUnit": { "state": "translated", - "value": "Vaša slika · %@" + "value": "بانديمونيوم" } }, - "da": { + "es": { "stringUnit": { "state": "translated", - "value": "Dit billede · %@" + "value": "Pandemónium" } }, - "de": { + "zh-Hant": { "stringUnit": { "state": "translated", - "value": "Dein Bild · %@" + "value": "萬魔殿" } }, - "en": { + "zh-Hans": { "stringUnit": { "state": "translated", - "value": "Your image · %@" + "value": "万魔殿" } }, - "es": { + "ko": { "stringUnit": { "state": "translated", - "value": "Tu imagen · %@" + "value": "판데모니움" } }, - "fr": { + "ja": { "stringUnit": { "state": "translated", - "value": "Votre image · %@" + "value": "万魔殿" } }, - "it": { + "bs": { "stringUnit": { "state": "translated", - "value": "La tua immagine · %@" + "value": "Pandemonij" } }, - "ja": { + "da": { "stringUnit": { "state": "translated", - "value": "自分の画像 · %@" + "value": "Pandæmonium" } }, - "km": { + "it": { "stringUnit": { "state": "translated", - "value": "រូបភាពរបស់អ្នក · %@" + "value": "Pandemonio" } }, - "ko": { + "km": { "stringUnit": { "state": "translated", - "value": "내 이미지 · %@" + "value": "ផេនដេម៉ូញ៉ូម" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ditt bilde · %@" + "value": "Pandemonium" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Twój obraz · %@" + "value": "Pandemonium" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Sua imagem · %@" + "value": "Pandemônio" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ваше изображение · %@" + "value": "Пандемониум" } }, "th": { "stringUnit": { "state": "translated", - "value": "รูปภาพของคุณ · %@" + "value": "แพนดีโมเนียม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Görseliniz · %@" + "value": "Pandemonium" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ваше зображення · %@" + "value": "Пандемоніум" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hình ảnh của bạn · %@" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "你的图片 · %@" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "你的圖片 · %@" + "value": "Pandemonium" } } } }, - "backdrop.david-death-of-marat.title": { + "backdrop.moran-burning-philadelphia.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Death of Marat" + "value": "Burning of the Frigate Philadelphia" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Tod des Marat" + "value": "Der Brand der Fregatte Philadelphia" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Mort de Marat" + "value": "L'Incendie de la frégate Philadelphia" } }, "ar": { "stringUnit": { "state": "translated", - "value": "موت مارا" + "value": "احتراق الفرقاطة فيلادلفيا" } }, "es": { "stringUnit": { "state": "translated", - "value": "La muerte de Marat" + "value": "Incendio de la fragata Philadelphia" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "馬拉之死" + "value": "費城號巡防艦焚燒" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "马拉之死" + "value": "费城号护卫舰焚毁" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마라의 죽음" + "value": "프리깃 필라델피아호의 화재" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マラーの死" + "value": "フリゲート艦フィラデルフィアの炎上" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Maratova smrt" + "value": "Paljenje fregate Philadelphia" } }, "da": { "stringUnit": { "state": "translated", - "value": "Marats død" + "value": "Fregatten Philadelphias brand" } }, "it": { "stringUnit": { "state": "translated", - "value": "La morte di Marat" + "value": "L'incendio della fregata Philadelphia" } }, "km": { "stringUnit": { "state": "translated", - "value": "មរណភាពរបស់ម៉ារ៉ាត់" + "value": "ការដុតនាវាហ្វ្រេហ្គាតហ្វីឡាដែលហ្វៀ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Marats død" + "value": "Brannen på fregatten Philadelphia" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Śmierć Marata" + "value": "Spalenie fregaty Philadelphia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Morte de Marat" + "value": "O Incêndio da Fragata Philadelphia" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Смерть Марата" + "value": "Сожжение фрегата «Филадельфия»" } }, "th": { "stringUnit": { "state": "translated", - "value": "การตายของมาราต์" + "value": "การเผาเรือฟริเกตฟิลาเดลเฟีย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Marat'nın Ölümü" + "value": "Philadelphia Firkateyninin Yakılışı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Смерть Марата" + "value": "Спалення фрегата «Філадельфія»" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cái chết của Marat" + "value": "Vụ đốt khinh hạm Philadelphia" } } } }, - "backdrop.goya-saturn.title": { + "backdrop.goya-burial-sardine.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Saturn Devouring His Son" + "value": "The Burial of the Sardine" } }, "de": { "stringUnit": { "state": "translated", - "value": "Saturn verschlingt seinen Sohn" + "value": "Das Begräbnis der Sardine" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Saturne dévorant un de ses fils" + "value": "L'Enterrement de la sardine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "زحل يلتهم ابنه" + "value": "دفن السردينة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Saturno devorando a su hijo" + "value": "El entierro de la sardina" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "農神吞噬其子" + "value": "埋葬沙丁魚" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "农神吞噬其子" + "value": "埋葬沙丁鱼" } }, "ko": { "stringUnit": { "state": "translated", - "value": "자식을 잡아먹는 사투르누스" + "value": "정어리의 매장" } }, "ja": { "stringUnit": { "state": "translated", - "value": "我が子を食らうサトゥルヌス" + "value": "鰯の埋葬" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Saturn proždire svog sina" + "value": "Sahrana sardine" } }, "da": { "stringUnit": { "state": "translated", - "value": "Saturn fortærer sin søn" + "value": "Sardinens begravelse" } }, "it": { "stringUnit": { "state": "translated", - "value": "Saturno che divora un figlio" + "value": "La sepoltura della sardina" } }, "km": { "stringUnit": { "state": "translated", - "value": "សាទូរ៉នស៊ីកូនប្រុសរបស់ខ្លួន" + "value": "ពិធីបញ្ចុះត្រីសាឌីន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Saturn fortærer sin sønn" + "value": "Sardinens begravelse" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Saturn pożerający swego syna" + "value": "Pogrzeb sardynki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Saturno Devorando um Filho" + "value": "O Enterro da Sardinha" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сатурн, пожирающий своего сына" + "value": "Похороны сардинки" } }, "th": { "stringUnit": { "state": "translated", - "value": "แซตเทิร์นกินบุตรของตน" + "value": "พิธีฝังปลาซาร์ดีน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Oğlunu Yiyen Satürn" + "value": "Sardalyanın Gömülüşü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сатурн, що пожирає свого сина" + "value": "Похорон сардини" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Saturn ăn thịt con trai" + "value": "Đám tang con cá mòi" } } } }, - "backdrop.velde-small-ship-storm.title": { + "backdrop.arbo-wild-hunt.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A Small Dutch Ship Riding Out a Storm" + "value": "The Wild Hunt of Odin" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein kleines holländisches Schiff im Sturm" + "value": "Die Wilde Jagd Odins" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un petit navire hollandais dans la tempête" + "value": "La Chasse sauvage d'Odin" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سفينة هولندية صغيرة تواجه العاصفة" + "value": "الصيد البري لأودين" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pequeño barco holandés capeando un temporal" + "value": "La cacería salvaje de Odín" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "風暴中的荷蘭小船" + "value": "奧丁的狂獵" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "风暴中的荷兰小船" + "value": "奥丁的狂猎" } }, "ko": { "stringUnit": { "state": "translated", - "value": "폭풍을 견디는 네덜란드 작은 배" + "value": "오딘의 와일드 헌트" } }, "ja": { "stringUnit": { "state": "translated", - "value": "嵐を乗り切るオランダの小型船" + "value": "オーディンのワイルドハント" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Mali holandski brod u oluji" + "value": "Odinov divlji lov" } }, "da": { "stringUnit": { "state": "translated", - "value": "Et lille hollandsk skib i storm" + "value": "Odins vilde jagt" } }, "it": { "stringUnit": { "state": "translated", - "value": "Una piccola nave olandese nella tempesta" + "value": "La caccia selvaggia di Odino" } }, "km": { "stringUnit": { "state": "translated", - "value": "កប៉ាល់ហូឡង់តូចមួយក្នុងព្យុះ" + "value": "ការបរបាញ់ដ៏សាហាវរបស់អូឌីន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Et lite nederlandsk skip i storm" + "value": "Åsgårdsreien" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Mały holenderski statek w czasie sztormu" + "value": "Dziki gon Odyna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Um Pequeno Navio Holandês na Tempestade" + "value": "A Caçada Selvagem de Odin" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Маленький голландский корабль в шторм" + "value": "Дикая охота Одина" } }, "th": { "stringUnit": { "state": "translated", - "value": "เรือดัตช์ลำเล็กฝ่าพายุ" + "value": "การล่าป่าของโอดิน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Fırtınada Küçük Bir Hollanda Gemisi" + "value": "Odin'in Vahşi Avı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Маленький голландський корабель у шторм" + "value": "Дике полювання Одіна" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Con tàu Hà Lan nhỏ vượt bão" + "value": "Cuộc săn hoang dã của Odin" } } } }, - "backdrop.bosch-garden-right.title": { + "backdrop.caravaggio-david-goliath.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Garden of Earthly Delights: Hell" + "value": "David with the Head of Goliath" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Garten der Lüste: Hölle" + "value": "David mit dem Haupt des Goliath" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Jardin des délices : l'Enfer" + "value": "David avec la tête de Goliath" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حديقة المباهج الأرضية: الجحيم" + "value": "داود ورأس جالوت" } }, "es": { "stringUnit": { "state": "translated", - "value": "El jardín de las delicias: el Infierno" + "value": "David con la cabeza de Goliat" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "人間樂園:地獄" + "value": "手提歌利亞頭的大衛" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "人间乐园:地狱" + "value": "手提歌利亚头的大卫" } }, "ko": { "stringUnit": { "state": "translated", - "value": "쾌락의 정원: 지옥" + "value": "골리앗의 머리를 든 다윗" } }, "ja": { "stringUnit": { "state": "translated", - "value": "快楽の園:地獄" + "value": "ゴリアテの首を持つダヴィデ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vrt zemaljskih užitaka: Pakao" + "value": "David s Golijatovom glavom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Lysternes have: Helvede" + "value": "David med Goliats hoved" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il Giardino delle delizie: l'Inferno" + "value": "Davide con la testa di Golia" } }, "km": { "stringUnit": { "state": "translated", - "value": "សួនសុខារម្មណ៍លោកិយ៖ នរក" + "value": "ដាវីឌជាមួយក្បាលកូលីយ៉ាត" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lystenes hage: Helvete" + "value": "David med Goliats hode" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ogród rozkoszy ziemskich: Piekło" + "value": "Dawid z głową Goliata" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Jardim das Delícias Terrenas: Inferno" + "value": "Davi com a Cabeça de Golias" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сад земных наслаждений: Ад" + "value": "Давид с головой Голиафа" } }, "th": { "stringUnit": { "state": "translated", - "value": "สวนแห่งความสุขทางโลก: นรก" + "value": "ดาวิดกับศีรษะของโกลิอัท" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dünyevi Zevkler Bahçesi: Cehennem" + "value": "Golyat'ın Başıyla Davut" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сад земних насолод: Пекло" + "value": "Давид з головою Голіафа" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Khu vườn khoái lạc trần thế: Địa ngục" + "value": "David với đầu của Goliath" } } } }, - "backdrop.bosch-ascent-blessed.title": { + "backdrop.van-gogh-skeleton-cigarette.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ascent of the Blessed" + "value": "Skeleton with a Burning Cigarette" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Aufstieg der Seligen" + "value": "Schädel mit brennender Zigarette" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Ascension vers l'Empyrée" + "value": "Crâne de squelette fumant une cigarette" } }, "ar": { "stringUnit": { "state": "translated", - "value": "صعود المباركين" + "value": "هيكل عظمي بسيجارة مشتعلة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ascenso al Empíreo" + "value": "Calavera con cigarrillo encendido" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "升往淨土" + "value": "叼著煙的骷髏" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "升入天堂" + "value": "叼着烟的骷髅" } }, "ko": { "stringUnit": { "state": "translated", - "value": "축복받은 자들의 승천" + "value": "불붙은 담배를 문 해골" } }, "ja": { "stringUnit": { "state": "translated", - "value": "天上界への上昇" + "value": "火のついた煙草をくわえた骸骨" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Uzašašće blaženih" + "value": "Lobanja kostura sa zapaljenom cigaretom" } }, "da": { "stringUnit": { "state": "translated", - "value": "De saliges opstigning" + "value": "Kranium af et skelet med brændende cigaret" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ascesa all'Empireo" + "value": "Teschio con sigaretta accesa" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការឡើងទៅស្ថានសួគ៌របស់អ្នកមានពរ" + "value": "គ្រោងឆ្អឹងជាមួយបារីកំពុងឆេះ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "De saliges oppstigning" + "value": "Hodeskalle med brennende sigarett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wstąpienie do Empireum" + "value": "Czaszka szkieletu z płonącym papierosem" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ascensão ao Empíreo" + "value": "Crânio de Esqueleto com Cigarro Aceso" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Восхождение в Эмпирей" + "value": "Череп скелета с горящей сигаретой" } }, "th": { "stringUnit": { "state": "translated", - "value": "การขึ้นสู่สวรรค์ของผู้ได้รับพร" + "value": "โครงกระดูกกับบุหรี่ที่ลุกไหม้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kutsanmışların Yükselişi" + "value": "Yanan Sigaralı İskelet Kafatası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сходження до Емпірею" + "value": "Череп скелета з палаючою цигаркою" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự thăng thiên của những người được phúc" + "value": "Đầu lâu với điếu thuốc đang cháy" } } } }, - "backdrop.goya-witches-flight.title": { + "backdrop.altdorfer-battle-of-issus.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Witches' Flight" + "value": "The Battle of Alexander at Issus" } }, "de": { "stringUnit": { "state": "translated", - "value": "Hexenflug" + "value": "Die Alexanderschlacht" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Vol des sorcières" + "value": "La Bataille d'Alexandre à Issos" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طيران الساحرات" + "value": "معركة الإسكندر في إسوس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Vuelo de brujas" + "value": "La batalla de Alejandro en Issos" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "女巫飛行" + "value": "亞歷山大在伊蘇斯之戰" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "女巫飞行" + "value": "亚历山大在伊苏斯之战" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마녀들의 비행" + "value": "이수스에서의 알렉산드로스 전투" } }, "ja": { "stringUnit": { "state": "translated", - "value": "魔女たちの飛翔" + "value": "アレクサンダー大王の戦い" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Let vještica" + "value": "Aleksandrova bitka kod Isa" } }, "da": { "stringUnit": { "state": "translated", - "value": "Heksenes flugt" + "value": "Alexanderslaget" } }, "it": { "stringUnit": { "state": "translated", - "value": "Volo di streghe" + "value": "La battaglia di Alessandro a Isso" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការហោះហើររបស់មេធ្មប់" + "value": "សមរភូមិរបស់អាឡិចសាន់ឌ័រនៅអ៊ីស៊ុស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Heksenes flukt" + "value": "Aleksanderslaget" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Lot czarownic" + "value": "Bitwa Aleksandra pod Issos" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Voo das Bruxas" + "value": "A Batalha de Alexandre em Isso" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Полёт ведьм" + "value": "Битва Александра при Иссе" } }, "th": { "stringUnit": { "state": "translated", - "value": "การบินของแม่มด" + "value": "ยุทธการของอเล็กซานเดอร์ที่อิสซัส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cadıların Uçuşu" + "value": "İskender'in İssos Savaşı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Політ відьом" + "value": "Битва Александра при Іссі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chuyến bay của các phù thủy" + "value": "Trận chiến của Alexander tại Issus" } } } }, - "backdrop.bocklin-self-portrait-death.title": { + "backdrop.gentileschi-judith.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Self-Portrait with Death Playing the Fiddle" + "value": "Judith Slaying Holofernes" } }, "de": { "stringUnit": { "state": "translated", - "value": "Selbstbildnis mit fiedelndem Tod" + "value": "Judith enthauptet Holofernes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Autoportrait avec la Mort jouant du violon" + "value": "Judith décapitant Holopherne" } }, "ar": { "stringUnit": { "state": "translated", - "value": "بورتريه ذاتي مع الموت عازفًا الكمان" + "value": "يهوديت تقطع رأس هولوفرنيس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Autorretrato con la muerte tocando el violín" + "value": "Judit decapitando a Holofernes" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "與拉小提琴的死神的自畫像" + "value": "朱迪斯斬殺赫羅弗尼斯" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "与拉小提琴的死神的自画像" + "value": "朱迪斯斩杀荷罗孚尼" } }, "ko": { "stringUnit": { "state": "translated", - "value": "바이올린을 켜는 죽음과 함께 있는 자화상" + "value": "홀로페르네스의 목을 베는 유디트" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ヴァイオリンを弾く死神のいる自画像" + "value": "ホロフェルネスの首を斬るユディト" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Autoportret sa smrću koja svira violinu" + "value": "Judita ubija Holoferna" } }, "da": { "stringUnit": { "state": "translated", - "value": "Selvportræt med Døden, der spiller violin" + "value": "Judith halshugger Holofernes" } }, "it": { "stringUnit": { "state": "translated", - "value": "Autoritratto con la morte che suona il violino" + "value": "Giuditta che decapita Oloferne" } }, "km": { "stringUnit": { "state": "translated", - "value": "រូបខ្លួនឯងជាមួយមច្ចុរាជលេងវីយូឡុង" + "value": "យូឌីតសម្លាប់ហូឡូហ្វឺណេស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Selvportrett med Døden som spiller fiolin" + "value": "Judit halshugger Holofernes" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Autoportret ze śmiercią grającą na skrzypcach" + "value": "Judyta odcinająca głowę Holofernesowi" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Autorretrato com a Morte Tocando Violino" + "value": "Judite Decapitando Holofernes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Автопортрет со смертью, играющей на скрипке" + "value": "Юдифь, обезглавливающая Олоферна" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภาพเหมือนตนเองกับมัจจุราชสีไวโอลิน" + "value": "จูดิธสังหารโฮโลเฟอร์เนส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Keman Çalan Ölümle Otoportre" + "value": "Holofernes'in Başını Kesen Judith" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Автопортрет зі смертю, що грає на скрипці" + "value": "Юдиф, що обезголовлює Олоферна" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chân dung tự họa với Thần Chết chơi vĩ cầm" + "value": "Judith chém đầu Holofernes" } } } }, - "backdrop.caravaggio-medusa.title": { + "backdrop.munch-madonna.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } }, "de": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Méduse" + "value": "Madone" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ميدوسا" + "value": "مادونا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "美杜莎" + "value": "聖母" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "美杜莎" + "value": "圣母" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메두사" + "value": "마돈나" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メドゥーサ" + "value": "マドンナ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Meduza" + "value": "Madona" } }, "da": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } }, "it": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } }, "km": { "stringUnit": { "state": "translated", - "value": "មេឌូសា" + "value": "ម៉ាដូណា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Meduza" + "value": "Madonna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madona" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Медуза" + "value": "Мадонна" } }, "th": { "stringUnit": { "state": "translated", - "value": "เมดูซา" + "value": "มาดอนนา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Медуза" + "value": "Мадонна" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Medusa" + "value": "Madonna" } } } }, - "backdrop.martin-pandemonium.title": { + "backdrop.bocklin-isle-of-the-dead.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Pandemonium" + "value": "Isle of the Dead" } }, "de": { "stringUnit": { "state": "translated", - "value": "Pandämonium" + "value": "Die Toteninsel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pandémonium" + "value": "L'Île des morts" } }, "ar": { "stringUnit": { "state": "translated", - "value": "بانديمونيوم" + "value": "جزيرة الموتى" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pandemónium" + "value": "La isla de los muertos" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "萬魔殿" + "value": "死亡之島" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "万魔殿" + "value": "死亡之岛" } }, "ko": { "stringUnit": { "state": "translated", - "value": "판데모니움" + "value": "죽음의 섬" } }, "ja": { "stringUnit": { "state": "translated", - "value": "万魔殿" + "value": "死の島" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pandemonij" + "value": "Ostrvo mrtvih" } }, "da": { "stringUnit": { "state": "translated", - "value": "Pandæmonium" + "value": "De dødes ø" } }, "it": { "stringUnit": { "state": "translated", - "value": "Pandemonio" + "value": "L'isola dei morti" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផេនដេម៉ូញ៉ូម" + "value": "កោះនៃមនុស្សស្លាប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Pandemonium" + "value": "De dødes øy" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pandemonium" + "value": "Wyspa umarłych" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pandemônio" + "value": "A Ilha dos Mortos" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Пандемониум" + "value": "Остров мёртвых" } }, "th": { "stringUnit": { "state": "translated", - "value": "แพนดีโมเนียม" + "value": "เกาะแห่งความตาย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pandemonium" + "value": "Ölüler Adası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Пандемоніум" + "value": "Острів мертвих" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Pandemonium" + "value": "Hòn đảo của người chết" } } } }, - "backdrop.moran-burning-philadelphia.title": { + "backdrop.klee-fish-magic.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Burning of the Frigate Philadelphia" + "value": "Fish Magic" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Brand der Fregatte Philadelphia" + "value": "Fischzauber" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Incendie de la frégate Philadelphia" + "value": "Magie des poissons" } }, "ar": { "stringUnit": { "state": "translated", - "value": "احتراق الفرقاطة فيلادلفيا" + "value": "سحر السمك" } }, "es": { "stringUnit": { "state": "translated", - "value": "Incendio de la fragata Philadelphia" + "value": "Magia de peces" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "費城號巡防艦焚燒" + "value": "魚的魔法" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "费城号护卫舰焚毁" + "value": "鱼的魔法" } }, "ko": { "stringUnit": { "state": "translated", - "value": "프리깃 필라델피아호의 화재" + "value": "물고기 마술" } }, "ja": { "stringUnit": { "state": "translated", - "value": "フリゲート艦フィラデルフィアの炎上" + "value": "魚の魔術" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Paljenje fregate Philadelphia" + "value": "Riblja magija" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fregatten Philadelphias brand" + "value": "Fiskemagi" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'incendio della fregata Philadelphia" + "value": "Magia dei pesci" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការដុតនាវាហ្វ្រេហ្គាតហ្វីឡាដែលហ្វៀ" + "value": "មន្តអាគមត្រី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Brannen på fregatten Philadelphia" + "value": "Fiskemagi" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spalenie fregaty Philadelphia" + "value": "Magia ryb" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Incêndio da Fragata Philadelphia" + "value": "Magia dos Peixes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сожжение фрегата «Филадельфия»" + "value": "Рыбное волшебство" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเผาเรือฟริเกตฟิลาเดลเฟีย" + "value": "มนตร์ปลา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Philadelphia Firkateyninin Yakılışı" + "value": "Balık Büyüsü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Спалення фрегата «Філадельфія»" + "value": "Рибне чаклунство" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Vụ đốt khinh hạm Philadelphia" + "value": "Phép thuật cá" } } } }, - "backdrop.goya-burial-sardine.title": { + "backdrop.friedrich-forest-moonlight.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Burial of the Sardine" + "value": "Forest Interior by Moonlight" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Begräbnis der Sardine" + "value": "Waldinneres bei Mondschein" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Enterrement de la sardine" + "value": "Intérieur de forêt au clair de lune" } }, "ar": { "stringUnit": { "state": "translated", - "value": "دفن السردينة" + "value": "داخل الغابة في ضوء القمر" } }, "es": { "stringUnit": { "state": "translated", - "value": "El entierro de la sardina" + "value": "Interior de bosque a la luz de la luna" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "埋葬沙丁魚" + "value": "月光下的森林" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "埋葬沙丁鱼" + "value": "月光下的森林" } }, "ko": { "stringUnit": { "state": "translated", - "value": "정어리의 매장" + "value": "달빛 아래 숲속" } }, "ja": { "stringUnit": { "state": "translated", - "value": "鰯の埋葬" + "value": "月明かりの森" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sahrana sardine" + "value": "Unutrašnjost šume pod mjesečinom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sardinens begravelse" + "value": "Skovinteriør i måneskin" } }, "it": { "stringUnit": { "state": "translated", - "value": "La sepoltura della sardina" + "value": "Interno di bosco al chiaro di luna" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពិធីបញ្ចុះត្រីសាឌីន" + "value": "ក្នុងព្រៃក្រោមពន្លឺព្រះចន្ទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Sardinens begravelse" + "value": "Skoginteriør i måneskinn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pogrzeb sardynki" + "value": "Wnętrze lasu w świetle księżyca" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Enterro da Sardinha" + "value": "Interior de Floresta ao Luar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Похороны сардинки" + "value": "Лес в лунном свете" } }, "th": { "stringUnit": { "state": "translated", - "value": "พิธีฝังปลาซาร์ดีน" + "value": "ภายในป่ายามแสงจันทร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sardalyanın Gömülüşü" + "value": "Ay Işığında Orman İçi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Похорон сардини" + "value": "Ліс у місячному світлі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đám tang con cá mòi" + "value": "Trong rừng dưới ánh trăng" } } } }, - "backdrop.arbo-wild-hunt.title": { + "backdrop.goya-witches-sabbath.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Wild Hunt of Odin" + "value": "Witches' Sabbath" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Wilde Jagd Odins" + "value": "Hexensabbat" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Chasse sauvage d'Odin" + "value": "Le Sabbat des sorcières" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الصيد البري لأودين" + "value": "سبت الساحرات" } }, "es": { "stringUnit": { "state": "translated", - "value": "La cacería salvaje de Odín" + "value": "El aquelarre" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "奧丁的狂獵" + "value": "女巫的安息日" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "奥丁的狂猎" + "value": "女巫的安息日" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오딘의 와일드 헌트" + "value": "마녀들의 집회" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オーディンのワイルドハント" + "value": "魔女の夜宴" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Odinov divlji lov" + "value": "Vještičji sabat" } }, "da": { "stringUnit": { "state": "translated", - "value": "Odins vilde jagt" + "value": "Heksesabbat" } }, "it": { "stringUnit": { "state": "translated", - "value": "La caccia selvaggia di Odino" + "value": "Il sabba delle streghe" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការបរបាញ់ដ៏សាហាវរបស់អូឌីន" + "value": "ពិធីជួបជុំរបស់មេធ្មប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åsgårdsreien" + "value": "Heksesabbat" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Dziki gon Odyna" + "value": "Sabat czarownic" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Caçada Selvagem de Odin" + "value": "O Sabá das Bruxas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Дикая охота Одина" + "value": "Шабаш ведьм" } }, "th": { "stringUnit": { "state": "translated", - "value": "การล่าป่าของโอดิน" + "value": "ชุมนุมแม่มด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Odin'in Vahşi Avı" + "value": "Cadılar Sabbatı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дике полювання Одіна" + "value": "Шабаш відьом" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cuộc săn hoang dã của Odin" + "value": "Hội phù thủy" } } } }, - "backdrop.caravaggio-david-goliath.title": { + "backdrop.bosch-garden-left.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "David with the Head of Goliath" + "value": "The Garden of Earthly Delights: Paradise" } }, "de": { "stringUnit": { "state": "translated", - "value": "David mit dem Haupt des Goliath" + "value": "Der Garten der Lüste: Paradies" } }, "fr": { "stringUnit": { "state": "translated", - "value": "David avec la tête de Goliath" + "value": "Le Jardin des délices : le Paradis" } }, "ar": { "stringUnit": { "state": "translated", - "value": "داود ورأس جالوت" + "value": "حديقة المباهج الأرضية: الجنة" } }, "es": { "stringUnit": { "state": "translated", - "value": "David con la cabeza de Goliat" + "value": "El jardín de las delicias: el Paraíso" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "手提歌利亞頭的大衛" + "value": "人間樂園:天堂" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "手提歌利亚头的大卫" + "value": "人间乐园:天堂" } }, "ko": { "stringUnit": { "state": "translated", - "value": "골리앗의 머리를 든 다윗" + "value": "쾌락의 정원: 낙원" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ゴリアテの首を持つダヴィデ" + "value": "快楽の園:楽園" } }, "bs": { "stringUnit": { "state": "translated", - "value": "David s Golijatovom glavom" + "value": "Vrt zemaljskih užitaka: Raj" } }, "da": { "stringUnit": { "state": "translated", - "value": "David med Goliats hoved" + "value": "Lysternes have: Paradis" } }, "it": { "stringUnit": { "state": "translated", - "value": "Davide con la testa di Golia" + "value": "Il Giardino delle delizie: il Paradiso" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដាវីឌជាមួយក្បាលកូលីយ៉ាត" + "value": "សួនសុខារម្មណ៍លោកិយ៖ ឋានសួគ៌" } }, "nb": { "stringUnit": { "state": "translated", - "value": "David med Goliats hode" + "value": "Lystenes hage: Paradis" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Dawid z głową Goliata" + "value": "Ogród rozkoszy ziemskich: Raj" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Davi com a Cabeça de Golias" + "value": "O Jardim das Delícias Terrenas: Paraíso" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Давид с головой Голиафа" + "value": "Сад земных наслаждений: Рай" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดาวิดกับศีรษะของโกลิอัท" + "value": "สวนแห่งความสุขทางโลก: สวรรค์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Golyat'ın Başıyla Davut" + "value": "Dünyevi Zevkler Bahçesi: Cennet" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Давид з головою Голіафа" + "value": "Сад земних насолод: Рай" } }, "vi": { "stringUnit": { "state": "translated", - "value": "David với đầu của Goliath" + "value": "Khu vườn khoái lạc trần thế: Thiên đường" } } } }, - "backdrop.van-gogh-skeleton-cigarette.title": { + "backdrop.rembrandt-storm-galilee.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Skeleton with a Burning Cigarette" + "value": "The Storm on the Sea of Galilee" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schädel mit brennender Zigarette" + "value": "Der Sturm auf dem See Genezareth" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Crâne de squelette fumant une cigarette" + "value": "Le Christ dans la tempête sur la mer de Galilée" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هيكل عظمي بسيجارة مشتعلة" + "value": "العاصفة على بحر الجليل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Calavera con cigarrillo encendido" + "value": "La tormenta en el mar de Galilea" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "叼著煙的骷髏" + "value": "加利利海上的風暴" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "叼着烟的骷髅" + "value": "加利利海上的风暴" } }, "ko": { "stringUnit": { "state": "translated", - "value": "불붙은 담배를 문 해골" + "value": "갈릴리 바다의 폭풍" } }, "ja": { "stringUnit": { "state": "translated", - "value": "火のついた煙草をくわえた骸骨" + "value": "ガリラヤの海の嵐" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lobanja kostura sa zapaljenom cigaretom" + "value": "Oluja na Galilejskom moru" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kranium af et skelet med brændende cigaret" + "value": "Stormen på Genesaret Sø" } }, "it": { "stringUnit": { "state": "translated", - "value": "Teschio con sigaretta accesa" + "value": "Cristo nella tempesta sul mare di Galilea" } }, "km": { "stringUnit": { "state": "translated", - "value": "គ្រោងឆ្អឹងជាមួយបារីកំពុងឆេះ" + "value": "ព្យុះនៅលើសមុទ្រកាលីឡេ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hodeskalle med brennende sigarett" + "value": "Stormen på Genesaretsjøen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Czaszka szkieletu z płonącym papierosem" + "value": "Burza na Jeziorze Galilejskim" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Crânio de Esqueleto com Cigarro Aceso" + "value": "Tempestade no Mar da Galileia" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Череп скелета с горящей сигаретой" + "value": "Христос во время шторма на море Галилейском" } }, "th": { "stringUnit": { "state": "translated", - "value": "โครงกระดูกกับบุหรี่ที่ลุกไหม้" + "value": "พายุบนทะเลกาลิลี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yanan Sigaralı İskelet Kafatası" + "value": "Celile Denizi'nde Fırtına" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Череп скелета з палаючою цигаркою" + "value": "Буря на Галілейському морі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đầu lâu với điếu thuốc đang cháy" + "value": "Cơn bão trên biển Galilê" } } } }, - "backdrop.altdorfer-battle-of-issus.title": { + "backdrop.cole-voyage-manhood.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Battle of Alexander at Issus" + "value": "The Voyage of Life: Manhood" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Alexanderschlacht" + "value": "Die Lebensreise: Mannesalter" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Bataille d'Alexandre à Issos" + "value": "Le Voyage de la vie : l'Âge mûr" } }, "ar": { "stringUnit": { "state": "translated", - "value": "معركة الإسكندر في إسوس" + "value": "رحلة الحياة: الرجولة" } }, "es": { "stringUnit": { "state": "translated", - "value": "La batalla de Alejandro en Issos" + "value": "El viaje de la vida: la madurez" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "亞歷山大在伊蘇斯之戰" + "value": "生命之旅:壯年" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "亚历山大在伊苏斯之战" + "value": "生命之旅:壮年" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이수스에서의 알렉산드로스 전투" + "value": "인생의 항해: 장년기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アレクサンダー大王の戦い" + "value": "人生の航路:壮年期" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Aleksandrova bitka kod Isa" + "value": "Putovanje života: Zrelost" } }, "da": { "stringUnit": { "state": "translated", - "value": "Alexanderslaget" + "value": "Livets rejse: Manddom" } }, "it": { "stringUnit": { "state": "translated", - "value": "La battaglia di Alessandro a Isso" + "value": "Il viaggio della vita: l'età adulta" } }, "km": { "stringUnit": { "state": "translated", - "value": "សមរភូមិរបស់អាឡិចសាន់ឌ័រនៅអ៊ីស៊ុស" + "value": "ដំណើរជីវិត៖ វ័យពេញវ័យ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Aleksanderslaget" + "value": "Livets reise: Manndom" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Bitwa Aleksandra pod Issos" + "value": "Podróż życia: Dojrzałość" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Batalha de Alexandre em Isso" + "value": "A Viagem da Vida: Idade Adulta" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Битва Александра при Иссе" + "value": "Путешествие жизни: Зрелость" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยุทธการของอเล็กซานเดอร์ที่อิสซัส" + "value": "การเดินทางของชีวิต: วัยผู้ใหญ่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İskender'in İssos Savaşı" + "value": "Hayatın Yolculuğu: Yetişkinlik" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Битва Александра при Іссі" + "value": "Подорож життя: Зрілість" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Trận chiến của Alexander tại Issus" + "value": "Hành trình cuộc đời: Tuổi trưởng thành" } } } }, - "backdrop.gentileschi-judith.title": { + "backdrop.fuseli-nightmare-2.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Judith Slaying Holofernes" + "value": "The Nightmare (1791)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Judith enthauptet Holofernes" + "value": "Der Nachtmahr (1791)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Judith décapitant Holopherne" + "value": "Le Cauchemar (1791)" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يهوديت تقطع رأس هولوفرنيس" + "value": "الكابوس (1791)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Judit decapitando a Holofernes" + "value": "La pesadilla (1791)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "朱迪斯斬殺赫羅弗尼斯" + "value": "夢魘 (1791)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "朱迪斯斩杀荷罗孚尼" + "value": "梦魇 (1791)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "홀로페르네스의 목을 베는 유디트" + "value": "악몽 (1791)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ホロフェルネスの首を斬るユディト" + "value": "夢魔 (1791)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Judita ubija Holoferna" + "value": "Noćna mora (1791)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Judith halshugger Holofernes" + "value": "Mareridtet (1791)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Giuditta che decapita Oloferne" + "value": "L'incubo (1791)" } }, "km": { "stringUnit": { "state": "translated", - "value": "យូឌីតសម្លាប់ហូឡូហ្វឺណេស" + "value": "សុបិន្តអាក្រក់ (1791)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Judit halshugger Holofernes" + "value": "Marerittet (1791)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Judyta odcinająca głowę Holofernesowi" + "value": "Koszmar nocny (1791)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Judite Decapitando Holofernes" + "value": "O Pesadelo (1791)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Юдифь, обезглавливающая Олоферна" + "value": "Ночной кошмар (1791)" } }, "th": { "stringUnit": { "state": "translated", - "value": "จูดิธสังหารโฮโลเฟอร์เนส" + "value": "ฝันร้าย (1791)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Holofernes'in Başını Kesen Judith" + "value": "Kâbus (1791)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Юдиф, що обезголовлює Олоферна" + "value": "Нічний кошмар (1791)" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Judith chém đầu Holofernes" + "value": "Cơn ác mộng (1791)" } } } }, - "backdrop.munch-madonna.title": { + "backdrop.hiremy-hirschl-souls-of-acheron.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "The Souls of Acheron" } }, "de": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Die Seelen am Acheron" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Madone" + "value": "Les Âmes de l'Achéron" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مادونا" + "value": "أرواح أخيرون" } }, "es": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Las almas del Aqueronte" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "聖母" + "value": "阿刻戎河畔的亡魂" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "圣母" + "value": "阿刻戎河畔的亡魂" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마돈나" + "value": "아케론의 영혼들" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マドンナ" + "value": "アケローンの魂" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Madona" + "value": "Duše Aheronta" } }, "da": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Sjælene ved Acheron" } }, "it": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Le anime dell'Acheronte" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាដូណា" + "value": "វិញ្ញាណក្ខន្ធនៃទន្លេអាខេរ៉ុន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Sjelene ved Akheron" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Dusze nad Acheronem" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Madona" + "value": "As Almas do Aqueronte" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Мадонна" + "value": "Души Ахерона" } }, "th": { "stringUnit": { "state": "translated", - "value": "มาดอนนา" + "value": "วิญญาณแห่งอะเคอรอน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Akheron'un Ruhları" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Мадонна" + "value": "Душі Ахерону" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Madonna" + "value": "Những linh hồn bên sông Acheron" } } } }, - "backdrop.bocklin-isle-of-the-dead.title": { + "backdrop.munch-scream.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Isle of the Dead" + "value": "The Scream" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Toteninsel" + "value": "Der Schrei" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Île des morts" + "value": "Le Cri" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جزيرة الموتى" + "value": "الصرخة" } }, "es": { "stringUnit": { "state": "translated", - "value": "La isla de los muertos" + "value": "El grito" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "死亡之島" + "value": "吶喊" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "死亡之岛" + "value": "呐喊" } }, "ko": { "stringUnit": { "state": "translated", - "value": "죽음의 섬" + "value": "절규" } }, "ja": { "stringUnit": { "state": "translated", - "value": "死の島" + "value": "叫び" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ostrvo mrtvih" + "value": "Krik" } }, "da": { "stringUnit": { "state": "translated", - "value": "De dødes ø" + "value": "Skriget" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'isola dei morti" + "value": "L'urlo" } }, "km": { "stringUnit": { "state": "translated", - "value": "កោះនៃមនុស្សស្លាប់" + "value": "ការស្រែក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "De dødes øy" + "value": "Skrik" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wyspa umarłych" + "value": "Krzyk" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Ilha dos Mortos" + "value": "O Grito" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Остров мёртвых" + "value": "Крик" } }, "th": { "stringUnit": { "state": "translated", - "value": "เกาะแห่งความตาย" + "value": "เสียงกรีดร้อง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ölüler Adası" + "value": "Çığlık" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Острів мертвих" + "value": "Крик" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hòn đảo của người chết" + "value": "Tiếng thét" } } } }, - "backdrop.klee-fish-magic.title": { + "backdrop.klimt-judith.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fish Magic" + "value": "Judith I" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fischzauber" + "value": "Judith I" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Magie des poissons" + "value": "Judith I" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سحر السمك" + "value": "يهوديت الأولى" } }, "es": { "stringUnit": { "state": "translated", - "value": "Magia de peces" + "value": "Judith I" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "魚的魔法" + "value": "朱迪斯一號" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "鱼的魔法" + "value": "朱迪斯一号" } }, "ko": { "stringUnit": { "state": "translated", - "value": "물고기 마술" + "value": "유디트 1" } }, "ja": { "stringUnit": { "state": "translated", - "value": "魚の魔術" + "value": "ユディト I" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Riblja magija" + "value": "Judita I" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fiskemagi" + "value": "Judith I" } }, "it": { "stringUnit": { "state": "translated", - "value": "Magia dei pesci" + "value": "Giuditta I" } }, "km": { "stringUnit": { "state": "translated", - "value": "មន្តអាគមត្រី" + "value": "យូឌីត I" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fiskemagi" + "value": "Judith I" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Magia ryb" + "value": "Judyta I" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Magia dos Peixes" + "value": "Judite I" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рыбное волшебство" + "value": "Юдифь I" } }, "th": { "stringUnit": { "state": "translated", - "value": "มนตร์ปลา" + "value": "จูดิธ I" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Balık Büyüsü" + "value": "Judith I" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Рибне чаклунство" + "value": "Юдиф I" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Phép thuật cá" + "value": "Judith I" } } } }, - "backdrop.friedrich-forest-moonlight.title": { + "backdrop.repin-ivan.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Forest Interior by Moonlight" + "value": "Ivan the Terrible and His Son Ivan" } }, "de": { "stringUnit": { "state": "translated", - "value": "Waldinneres bei Mondschein" + "value": "Iwan der Schreckliche und sein Sohn Iwan" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Intérieur de forêt au clair de lune" + "value": "Ivan le Terrible et son fils Ivan" } }, "ar": { "stringUnit": { "state": "translated", - "value": "داخل الغابة في ضوء القمر" + "value": "إيفان الرهيب وابنه إيفان" } }, "es": { "stringUnit": { "state": "translated", - "value": "Interior de bosque a la luz de la luna" + "value": "Iván el Terrible y su hijo Iván" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "月光下的森林" + "value": "伊凡雷帝殺子" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "月光下的森林" + "value": "伊凡雷帝杀子" } }, "ko": { "stringUnit": { "state": "translated", - "value": "달빛 아래 숲속" + "value": "이반 뇌제와 그의 아들 이반" } }, "ja": { "stringUnit": { "state": "translated", - "value": "月明かりの森" + "value": "イワン雷帝とその息子" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Unutrašnjost šume pod mjesečinom" + "value": "Ivan Grozni i njegov sin Ivan" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skovinteriør i måneskin" + "value": "Ivan den Grusomme og hans søn Ivan" } }, "it": { "stringUnit": { "state": "translated", - "value": "Interno di bosco al chiaro di luna" + "value": "Ivan il Terribile e suo figlio Ivan" } }, "km": { "stringUnit": { "state": "translated", - "value": "ក្នុងព្រៃក្រោមពន្លឺព្រះចន្ទ" + "value": "អ៊ីវ៉ានដ៏សាហាវ និងកូនប្រុសរបស់គាត់អ៊ីវ៉ាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skoginteriør i måneskinn" + "value": "Ivan den grusomme og hans sønn Ivan" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wnętrze lasu w świetle księżyca" + "value": "Iwan Groźny i jego syn Iwan" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Interior de Floresta ao Luar" + "value": "Ivã, o Terrível, e Seu Filho Ivã" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Лес в лунном свете" + "value": "Иван Грозный и сын его Иван" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภายในป่ายามแสงจันทร์" + "value": "อีวานผู้เหี้ยมโหดกับอีวานบุตรชาย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ay Işığında Orman İçi" + "value": "Korkunç İvan ve Oğlu İvan" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ліс у місячному світлі" + "value": "Іван Грозний і син його Іван" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Trong rừng dưới ánh trăng" + "value": "Ivan Bạo chúa và con trai Ivan" } } } }, - "backdrop.goya-witches-sabbath.title": { + "backdrop.millais-ophelia.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Witches' Sabbath" + "value": "Ophelia" } }, "de": { "stringUnit": { "state": "translated", - "value": "Hexensabbat" + "value": "Ophelia" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Sabbat des sorcières" + "value": "Ophélie" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سبت الساحرات" + "value": "أوفيليا" } }, "es": { "stringUnit": { "state": "translated", - "value": "El aquelarre" + "value": "Ofelia" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "女巫的安息日" + "value": "奧菲莉亞" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "女巫的安息日" + "value": "奥菲莉亚" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마녀들의 집회" + "value": "오필리아" } }, "ja": { "stringUnit": { "state": "translated", - "value": "魔女の夜宴" + "value": "オフィーリア" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vještičji sabat" + "value": "Ofelija" } }, "da": { "stringUnit": { "state": "translated", - "value": "Heksesabbat" + "value": "Ofelia" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il sabba delle streghe" + "value": "Ofelia" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពិធីជួបជុំរបស់មេធ្មប់" + "value": "អូហ្វេលៀ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Heksesabbat" + "value": "Ofelia" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Sabat czarownic" + "value": "Ofelia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Sabá das Bruxas" + "value": "Ofélia" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Шабаш ведьм" + "value": "Офелия" } }, "th": { "stringUnit": { "state": "translated", - "value": "ชุมนุมแม่มด" + "value": "โอฟีเลีย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Cadılar Sabbatı" + "value": "Ophelia" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Шабаш відьом" + "value": "Офелія" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hội phù thủy" + "value": "Ophelia" } } } }, - "backdrop.bosch-garden-left.title": { + "backdrop.bruegel-fall-rebel-angels.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Garden of Earthly Delights: Paradise" + "value": "The Fall of the Rebel Angels" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Garten der Lüste: Paradies" + "value": "Der Sturz der rebellierenden Engel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Jardin des délices : le Paradis" + "value": "La Chute des anges rebelles" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حديقة المباهج الأرضية: الجنة" + "value": "سقوط الملائكة المتمردين" } }, "es": { "stringUnit": { "state": "translated", - "value": "El jardín de las delicias: el Paraíso" + "value": "La caída de los ángeles rebeldes" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "人間樂園:天堂" + "value": "叛逆天使的墮落" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "人间乐园:天堂" + "value": "叛逆天使的堕落" } }, "ko": { "stringUnit": { "state": "translated", - "value": "쾌락의 정원: 낙원" + "value": "반역 천사들의 추락" } }, "ja": { "stringUnit": { "state": "translated", - "value": "快楽の園:楽園" + "value": "反逆天使の墜落" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vrt zemaljskih užitaka: Raj" + "value": "Pad pobunjenih anđela" } }, "da": { "stringUnit": { "state": "translated", - "value": "Lysternes have: Paradis" + "value": "De oprørske englers fald" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il Giardino delle delizie: il Paradiso" + "value": "La caduta degli angeli ribelli" } }, "km": { "stringUnit": { "state": "translated", - "value": "សួនសុខារម្មណ៍លោកិយ៖ ឋានសួគ៌" + "value": "ការធ្លាក់របស់ទេវតាបះបោរ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lystenes hage: Paradis" + "value": "De opprørske englenes fall" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ogród rozkoszy ziemskich: Raj" + "value": "Upadek aniołów buntowników" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Jardim das Delícias Terrenas: Paraíso" + "value": "A Queda dos Anjos Rebeldes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сад земных наслаждений: Рай" + "value": "Падение мятежных ангелов" } }, "th": { "stringUnit": { "state": "translated", - "value": "สวนแห่งความสุขทางโลก: สวรรค์" + "value": "การตกสวรรค์ของเหล่าทูตกบฏ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dünyevi Zevkler Bahçesi: Cennet" + "value": "Asi Meleklerin Düşüşü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сад земних насолод: Рай" + "value": "Падіння бунтівних ангелів" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Khu vườn khoái lạc trần thế: Thiên đường" + "value": "Sự sa ngã của các thiên thần nổi loạn" } } } }, - "backdrop.rembrandt-storm-galilee.title": { + "backdrop.fuseli-nightmare.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Storm on the Sea of Galilee" + "value": "The Nightmare" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Sturm auf dem See Genezareth" + "value": "Der Nachtmahr" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Christ dans la tempête sur la mer de Galilée" + "value": "Le Cauchemar" } }, "ar": { "stringUnit": { "state": "translated", - "value": "العاصفة على بحر الجليل" + "value": "الكابوس" } }, "es": { "stringUnit": { "state": "translated", - "value": "La tormenta en el mar de Galilea" + "value": "La pesadilla" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "加利利海上的風暴" + "value": "夢魘" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "加利利海上的风暴" + "value": "梦魇" } }, "ko": { "stringUnit": { "state": "translated", - "value": "갈릴리 바다의 폭풍" + "value": "악몽" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ガリラヤの海の嵐" + "value": "夢魔" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Oluja na Galilejskom moru" + "value": "Noćna mora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Stormen på Genesaret Sø" + "value": "Mareridtet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Cristo nella tempesta sul mare di Galilea" + "value": "L'incubo" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្យុះនៅលើសមុទ្រកាលីឡេ" + "value": "សុបិន្តអាក្រក់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Stormen på Genesaretsjøen" + "value": "Marerittet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Burza na Jeziorze Galilejskim" + "value": "Koszmar nocny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tempestade no Mar da Galileia" + "value": "O Pesadelo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Христос во время шторма на море Галилейском" + "value": "Ночной кошмар" } }, "th": { "stringUnit": { "state": "translated", - "value": "พายุบนทะเลกาลิลี" + "value": "ฝันร้าย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Celile Denizi'nde Fırtına" + "value": "Kâbus" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Буря на Галілейському морі" + "value": "Нічний кошмар" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cơn bão trên biển Galilê" + "value": "Cơn ác mộng" } } } }, - "backdrop.cole-voyage-manhood.title": { + "backdrop.bundy-death-general.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Voyage of Life: Manhood" + "value": "Death as General" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Lebensreise: Mannesalter" + "value": "Der Tod als Feldherr" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Voyage de la vie : l'Âge mûr" + "value": "La Mort comme général" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رحلة الحياة: الرجولة" + "value": "الموت قائدًا" } }, "es": { "stringUnit": { "state": "translated", - "value": "El viaje de la vida: la madurez" + "value": "La Muerte como general" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "生命之旅:壯年" + "value": "死神將軍" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "生命之旅:壮年" + "value": "死神将军" } }, "ko": { "stringUnit": { "state": "translated", - "value": "인생의 항해: 장년기" + "value": "장군이 된 죽음" } }, "ja": { "stringUnit": { "state": "translated", - "value": "人生の航路:壮年期" + "value": "将軍としての死" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Putovanje života: Zrelost" + "value": "Smrt kao general" } }, "da": { "stringUnit": { "state": "translated", - "value": "Livets rejse: Manddom" + "value": "Døden som general" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il viaggio della vita: l'età adulta" + "value": "La morte come generale" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដំណើរជីវិត៖ វ័យពេញវ័យ" + "value": "មច្ចុរាជជាឧត្តមសេនីយ៍" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Livets reise: Manndom" + "value": "Døden som general" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podróż życia: Dojrzałość" + "value": "Śmierć jako generał" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Viagem da Vida: Idade Adulta" + "value": "A Morte como General" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Путешествие жизни: Зрелость" + "value": "Смерть-полководец" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเดินทางของชีวิต: วัยผู้ใหญ่" + "value": "มัจจุราชในฐานะแม่ทัพ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hayatın Yolculuğu: Yetişkinlik" + "value": "General Olarak Ölüm" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Подорож життя: Зрілість" + "value": "Смерть-полководець" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hành trình cuộc đời: Tuổi trưởng thành" + "value": "Thần Chết làm tướng" } } } }, - "backdrop.fuseli-nightmare-2.title": { + "backdrop.wright-vesuvius.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Nightmare (1791)" + "value": "Vesuvius in Eruption" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Nachtmahr (1791)" + "value": "Der Ausbruch des Vesuvs" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Cauchemar (1791)" + "value": "Le Vésuve en éruption" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الكابوس (1791)" + "value": "بركان فيزوف ثائرًا" } }, "es": { "stringUnit": { "state": "translated", - "value": "La pesadilla (1791)" + "value": "El Vesubio en erupción" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "夢魘 (1791)" + "value": "維蘇威火山爆發" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "梦魇 (1791)" + "value": "维苏威火山爆发" } }, "ko": { "stringUnit": { "state": "translated", - "value": "악몽 (1791)" + "value": "분화하는 베수비오산" } }, "ja": { "stringUnit": { "state": "translated", - "value": "夢魔 (1791)" + "value": "噴火するヴェスヴィオ山" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Noćna mora (1791)" + "value": "Erupcija Vezuva" } }, "da": { "stringUnit": { "state": "translated", - "value": "Mareridtet (1791)" + "value": "Vesuv i udbrud" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'incubo (1791)" + "value": "Il Vesuvio in eruzione" } }, "km": { "stringUnit": { "state": "translated", - "value": "សុបិន្តអាក្រក់ (1791)" + "value": "ភ្នំភ្លើងវេស៊ូវៀសផ្ទុះ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Marerittet (1791)" + "value": "Vesuv i utbrudd" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Koszmar nocny (1791)" + "value": "Wybuch Wezuwiusza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Pesadelo (1791)" + "value": "Vesúvio em Erupção" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ночной кошмар (1791)" + "value": "Извержение Везувия" } }, "th": { "stringUnit": { "state": "translated", - "value": "ฝันร้าย (1791)" + "value": "ภูเขาไฟวิสุเวียสปะทุ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kâbus (1791)" + "value": "Vezüv'ün Patlaması" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нічний кошмар (1791)" + "value": "Виверження Везувію" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cơn ác mộng (1791)" + "value": "Núi Vesuvius phun trào" } } } }, - "backdrop.hiremy-hirschl-souls-of-acheron.title": { + "backdrop.gerome-botsaris.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Souls of Acheron" + "value": "Markos Botsaris" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Seelen am Acheron" + "value": "Markos Botsaris" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Âmes de l'Achéron" + "value": "Markos Botsaris" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أرواح أخيرون" + "value": "ماركوس بوتساريس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Las almas del Aqueronte" + "value": "Markos Botsaris" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "阿刻戎河畔的亡魂" + "value": "馬可斯·博薩里斯" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "阿刻戎河畔的亡魂" + "value": "马科斯·博察里斯" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아케론의 영혼들" + "value": "마르코스 보차리스" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アケローンの魂" + "value": "マルコス・ボツァリス" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Duše Aheronta" + "value": "Markos Bocaris" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sjælene ved Acheron" + "value": "Markos Botsaris" } }, "it": { "stringUnit": { "state": "translated", - "value": "Le anime dell'Acheronte" + "value": "Markos Botsaris" } }, "km": { "stringUnit": { "state": "translated", - "value": "វិញ្ញាណក្ខន្ធនៃទន្លេអាខេរ៉ុន" + "value": "ម៉ាកូស បូតសារីស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Sjelene ved Akheron" + "value": "Markos Botsaris" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Dusze nad Acheronem" + "value": "Markos Botsaris" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "As Almas do Aqueronte" + "value": "Markos Botsaris" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Души Ахерона" + "value": "Маркос Боцарис" } }, "th": { "stringUnit": { "state": "translated", - "value": "วิญญาณแห่งอะเคอรอน" + "value": "มาร์โกส บอตซาริส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Akheron'un Ruhları" + "value": "Markos Botsaris" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Душі Ахерону" + "value": "Маркос Боцаріс" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Những linh hồn bên sông Acheron" + "value": "Markos Botsaris" } } } }, - "backdrop.munch-scream.title": { + "backdrop.durer-knight-death-devil.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Scream" + "value": "Knight, Death and the Devil" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Schrei" + "value": "Ritter, Tod und Teufel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Cri" + "value": "Le Chevalier, la Mort et le Diable" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الصرخة" + "value": "الفارس والموت والشيطان" } }, "es": { "stringUnit": { "state": "translated", - "value": "El grito" + "value": "El caballero, la muerte y el diablo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "吶喊" + "value": "騎士、死神與魔鬼" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "呐喊" + "value": "骑士、死神与魔鬼" } }, "ko": { "stringUnit": { "state": "translated", - "value": "절규" + "value": "기사, 죽음과 악마" } }, "ja": { "stringUnit": { "state": "translated", - "value": "叫び" + "value": "騎士と死と悪魔" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Krik" + "value": "Vitez, smrt i đavo" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skriget" + "value": "Ridder, død og djævel" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'urlo" + "value": "Il cavaliere, la morte e il diavolo" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការស្រែក" + "value": "អ្នកចម្បាំង មច្ចុរាជ និងអារក្ស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skrik" + "value": "Ridder, død og djevel" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Krzyk" + "value": "Rycerz, śmierć i diabeł" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Grito" + "value": "O Cavaleiro, a Morte e o Diabo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Крик" + "value": "Рыцарь, смерть и дьявол" } }, "th": { "stringUnit": { "state": "translated", - "value": "เสียงกรีดร้อง" + "value": "อัศวิน ความตาย และปีศาจ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çığlık" + "value": "Şövalye, Ölüm ve Şeytan" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Крик" + "value": "Лицар, смерть і диявол" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Tiếng thét" + "value": "Hiệp sĩ, Thần Chết và Quỷ dữ" } } } }, - "backdrop.klimt-judith.title": { + "backdrop.martin-joshua.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Joshua Commanding the Sun to Stand Still" } }, "de": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Josua gebietet der Sonne stillzustehen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Josué arrêtant le soleil" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يهوديت الأولى" + "value": "يشوع يأمر الشمس بالتوقف" } }, "es": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Josué ordena al sol detenerse" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "朱迪斯一號" + "value": "約書亞命令太陽停住" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "朱迪斯一号" + "value": "约书亚命令太阳停住" } }, "ko": { "stringUnit": { "state": "translated", - "value": "유디트 1" + "value": "태양을 멈추게 하는 여호수아" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ユディト I" + "value": "太陽を止めるヨシュア" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Judita I" + "value": "Jošua zapovijeda suncu da stane" } }, "da": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Josva befaler solen at stå stille" } }, "it": { "stringUnit": { "state": "translated", - "value": "Giuditta I" + "value": "Giosuè ferma il sole" } }, "km": { "stringUnit": { "state": "translated", - "value": "យូឌីត I" + "value": "យ៉ូស្វេបញ្ជាព្រះអាទិត្យឱ្យឈប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Josva befaler solen å stå stille" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Judyta I" + "value": "Jozue nakazujący słońcu zatrzymać się" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Judite I" + "value": "Josué Ordenando ao Sol que Pare" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Юдифь I" + "value": "Иисус Навин останавливает солнце" } }, "th": { "stringUnit": { "state": "translated", - "value": "จูดิธ I" + "value": "โยชูวาสั่งดวงอาทิตย์ให้หยุดนิ่ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Yeşu Güneşe Durmasını Emrediyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Юдиф I" + "value": "Ісус Навин зупиняє сонце" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Judith I" + "value": "Giô-suê truyền lệnh cho mặt trời đứng yên" } } } }, - "backdrop.repin-ivan.title": { + "backdrop.velde-gale.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ivan the Terrible and His Son Ivan" + "value": "The Gust" } }, "de": { "stringUnit": { "state": "translated", - "value": "Iwan der Schreckliche und sein Sohn Iwan" + "value": "Die Bö" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ivan le Terrible et son fils Ivan" + "value": "Le Coup de vent" } }, "ar": { "stringUnit": { "state": "translated", - "value": "إيفان الرهيب وابنه إيفان" + "value": "هبة الريح" } }, "es": { "stringUnit": { "state": "translated", - "value": "Iván el Terrible y su hijo Iván" + "value": "La ráfaga" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "伊凡雷帝殺子" + "value": "陣風" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "伊凡雷帝杀子" + "value": "阵风" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이반 뇌제와 그의 아들 이반" + "value": "돌풍" } }, "ja": { "stringUnit": { "state": "translated", - "value": "イワン雷帝とその息子" + "value": "突風" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ivan Grozni i njegov sin Ivan" + "value": "Udar vjetra" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ivan den Grusomme og hans søn Ivan" + "value": "Vindstødet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ivan il Terribile e suo figlio Ivan" + "value": "La raffica" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ៊ីវ៉ានដ៏សាហាវ និងកូនប្រុសរបស់គាត់អ៊ីវ៉ាន" + "value": "ខ្យល់បក់ខ្លាំង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ivan den grusomme og hans sønn Ivan" + "value": "Vindkastet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Iwan Groźny i jego syn Iwan" + "value": "Poryw wiatru" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ivã, o Terrível, e Seu Filho Ivã" + "value": "A Rajada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Иван Грозный и сын его Иван" + "value": "Порыв ветра" } }, "th": { "stringUnit": { "state": "translated", - "value": "อีวานผู้เหี้ยมโหดกับอีวานบุตรชาย" + "value": "ลมกระโชก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Korkunç İvan ve Oğlu İvan" + "value": "Ani Rüzgâr" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Іван Грозний і син його Іван" + "value": "Порив вітру" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Ivan Bạo chúa và con trai Ivan" + "value": "Cơn gió giật" } } } }, - "backdrop.millais-ophelia.title": { + "backdrop.hogai-nio.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Niō Seizing an Evil Spirit" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Niō packt einen bösen Geist" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ophélie" + "value": "Niō saisissant un démon" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أوفيليا" + "value": "نيو يمسك بروح شريرة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Niō atrapando a un espíritu maligno" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "奧菲莉亞" + "value": "仁王捉鬼圖" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "奥菲莉亚" + "value": "仁王捉鬼图" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오필리아" + "value": "악귀를 붙잡는 인왕" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフィーリア" + "value": "仁王捉鬼図" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ofelija" + "value": "Nio hvata zlog duha" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Niō griber en ond ånd" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Niō che afferra uno spirito maligno" } }, "km": { "stringUnit": { "state": "translated", - "value": "អូហ្វេលៀ" + "value": "នីអូចាប់វិញ្ញាណអាក្រក់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Niō griper en ond ånd" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Niō chwytający złego ducha" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ofélia" + "value": "Niō Agarrando um Espírito Maligno" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Офелия" + "value": "Нио, хватающий злого духа" } }, "th": { "stringUnit": { "state": "translated", - "value": "โอฟีเลีย" + "value": "นิโอจับวิญญาณร้าย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Kötü Bir Ruhu Yakalayan Niō" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Офелія" + "value": "Ніо, що хапає злого духа" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Niō bắt giữ ác linh" } } } }, - "backdrop.bruegel-fall-rebel-angels.title": { + "backdrop.klimt-death-and-life.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Fall of the Rebel Angels" + "value": "Death and Life" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Sturz der rebellierenden Engel" + "value": "Tod und Leben" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Chute des anges rebelles" + "value": "La Mort et la Vie" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سقوط الملائكة المتمردين" + "value": "الموت والحياة" } }, "es": { "stringUnit": { "state": "translated", - "value": "La caída de los ángeles rebeldes" + "value": "Muerte y vida" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "叛逆天使的墮落" + "value": "死亡與生命" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "叛逆天使的堕落" + "value": "死亡与生命" } }, "ko": { "stringUnit": { "state": "translated", - "value": "반역 천사들의 추락" + "value": "죽음과 삶" } }, "ja": { "stringUnit": { "state": "translated", - "value": "反逆天使の墜落" + "value": "死と生" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pad pobunjenih anđela" + "value": "Smrt i život" } }, "da": { "stringUnit": { "state": "translated", - "value": "De oprørske englers fald" + "value": "Død og liv" } }, "it": { "stringUnit": { "state": "translated", - "value": "La caduta degli angeli ribelli" + "value": "Morte e vita" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការធ្លាក់របស់ទេវតាបះបោរ" + "value": "មរណភាព និងជីវិត" } }, "nb": { "stringUnit": { "state": "translated", - "value": "De opprørske englenes fall" + "value": "Død og liv" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Upadek aniołów buntowników" + "value": "Śmierć i życie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Queda dos Anjos Rebeldes" + "value": "Morte e Vida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Падение мятежных ангелов" + "value": "Смерть и жизнь" } }, "th": { "stringUnit": { "state": "translated", - "value": "การตกสวรรค์ของเหล่าทูตกบฏ" + "value": "ความตายและชีวิต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Asi Meleklerin Düşüşü" + "value": "Ölüm ve Yaşam" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Падіння бунтівних ангелів" + "value": "Смерть і життя" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự sa ngã của các thiên thần nổi loạn" + "value": "Cái chết và sự sống" } } } }, - "backdrop.fuseli-nightmare.title": { + "backdrop.klimt-medicine.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Nightmare" + "value": "Medicine" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Nachtmahr" + "value": "Die Medizin" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Cauchemar" + "value": "La Médecine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الكابوس" + "value": "الطب" } }, "es": { "stringUnit": { "state": "translated", - "value": "La pesadilla" + "value": "La Medicina" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "夢魘" + "value": "醫學" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "梦魇" + "value": "医学" } }, "ko": { "stringUnit": { "state": "translated", - "value": "악몽" + "value": "의학" } }, "ja": { "stringUnit": { "state": "translated", - "value": "夢魔" + "value": "医学" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Noćna mora" + "value": "Medicina" } }, "da": { "stringUnit": { "state": "translated", - "value": "Mareridtet" + "value": "Medicinen" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'incubo" + "value": "La Medicina" } }, "km": { "stringUnit": { "state": "translated", - "value": "សុបិន្តអាក្រក់" + "value": "វេជ្ជសាស្ត្រ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Marerittet" + "value": "Medisinen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Koszmar nocny" + "value": "Medycyna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Pesadelo" + "value": "Medicina" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ночной кошмар" + "value": "Медицина" } }, "th": { "stringUnit": { "state": "translated", - "value": "ฝันร้าย" + "value": "การแพทย์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kâbus" + "value": "Tıp" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нічний кошмар" + "value": "Медицина" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cơn ác mộng" + "value": "Y học" } } } }, - "backdrop.bundy-death-general.title": { + "backdrop.bosch-garden-central.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Death as General" + "value": "The Garden of Earthly Delights" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Tod als Feldherr" + "value": "Der Garten der Lüste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Mort comme général" + "value": "Le Jardin des délices" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الموت قائدًا" + "value": "حديقة المباهج الأرضية" } }, "es": { "stringUnit": { "state": "translated", - "value": "La Muerte como general" + "value": "El jardín de las delicias" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "死神將軍" + "value": "人間樂園" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "死神将军" + "value": "人间乐园" } }, "ko": { "stringUnit": { "state": "translated", - "value": "장군이 된 죽음" + "value": "쾌락의 정원" } }, "ja": { "stringUnit": { "state": "translated", - "value": "将軍としての死" + "value": "快楽の園" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Smrt kao general" + "value": "Vrt zemaljskih užitaka" } }, "da": { "stringUnit": { "state": "translated", - "value": "Døden som general" + "value": "Lysternes have" } }, "it": { "stringUnit": { "state": "translated", - "value": "La morte come generale" + "value": "Il Giardino delle delizie" } }, "km": { "stringUnit": { "state": "translated", - "value": "មច្ចុរាជជាឧត្តមសេនីយ៍" + "value": "សួនសុខារម្មណ៍លោកិយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Døden som general" + "value": "Lystenes hage" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Śmierć jako generał" + "value": "Ogród rozkoszy ziemskich" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Morte como General" + "value": "O Jardim das Delícias Terrenas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Смерть-полководец" + "value": "Сад земных наслаждений" } }, "th": { "stringUnit": { "state": "translated", - "value": "มัจจุราชในฐานะแม่ทัพ" + "value": "สวนแห่งความสุขทางโลก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "General Olarak Ölüm" + "value": "Dünyevi Zevkler Bahçesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Смерть-полководець" + "value": "Сад земних насолод" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Thần Chết làm tướng" + "value": "Khu vườn khoái lạc trần thế" } } } }, - "backdrop.wright-vesuvius.title": { + "backdrop.martin-great-day-wrath.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Vesuvius in Eruption" + "value": "The Great Day of His Wrath" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Ausbruch des Vesuvs" + "value": "Der große Tag seines Zorns" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Vésuve en éruption" + "value": "Le Grand Jour de sa colère" } }, "ar": { "stringUnit": { "state": "translated", - "value": "بركان فيزوف ثائرًا" + "value": "اليوم العظيم لغضبه" } }, "es": { "stringUnit": { "state": "translated", - "value": "El Vesubio en erupción" + "value": "El gran día de su ira" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "維蘇威火山爆發" + "value": "祂忿怒的大日" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "维苏威火山爆发" + "value": "他忿怒的大日" } }, "ko": { "stringUnit": { "state": "translated", - "value": "분화하는 베수비오산" + "value": "진노의 큰 날" } }, "ja": { "stringUnit": { "state": "translated", - "value": "噴火するヴェスヴィオ山" + "value": "神の大いなる怒りの日" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Erupcija Vezuva" + "value": "Veliki dan Njegova gnjeva" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vesuv i udbrud" + "value": "Hans vredes store dag" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il Vesuvio in eruzione" + "value": "Il grande giorno della sua ira" } }, "km": { "stringUnit": { "state": "translated", - "value": "ភ្នំភ្លើងវេស៊ូវៀសផ្ទុះ" + "value": "ថ្ងៃដ៏ធំនៃសេចក្ដីក្រោធរបស់ទ្រង់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vesuv i utbrudd" + "value": "Hans vredes store dag" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybuch Wezuwiusza" + "value": "Wielki dzień Jego gniewu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Vesúvio em Erupção" + "value": "O Grande Dia da Sua Ira" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Извержение Везувия" + "value": "Великий день гнева Его" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภูเขาไฟวิสุเวียสปะทุ" + "value": "วันยิ่งใหญ่แห่งพระพิโรธ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Vezüv'ün Patlaması" + "value": "O'nun Gazabının Büyük Günü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Виверження Везувію" + "value": "Великий день гніву Його" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Núi Vesuvius phun trào" + "value": "Ngày thịnh nộ lớn của Ngài" } } } }, - "backdrop.gerome-botsaris.title": { + "backdrop.bonheur-wounded-eagle.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "The Wounded Eagle" } }, "de": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "Der verwundete Adler" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "L'Aigle blessé" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ماركوس بوتساريس" + "value": "النسر الجريح" } }, "es": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "El águila herida" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "馬可斯·博薩里斯" + "value": "受傷的鷹" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "马科斯·博察里斯" + "value": "受伤的鹰" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마르코스 보차리스" + "value": "상처 입은 독수리" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マルコス・ボツァリス" + "value": "傷ついた鷲" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Markos Bocaris" + "value": "Ranjeni orao" } }, "da": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "Den sårede ørn" } }, "it": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "L'aquila ferita" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាកូស បូតសារីស" + "value": "សត្វឥន្ទ្រីរងរបួស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "Den sårede ørnen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "Zraniony orzeł" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "A Águia Ferida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Маркос Боцарис" + "value": "Раненый орёл" } }, "th": { "stringUnit": { "state": "translated", - "value": "มาร์โกส บอตซาริส" + "value": "อินทรีบาดเจ็บ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "Yaralı Kartal" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Маркос Боцаріс" + "value": "Поранений орел" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Markos Botsaris" + "value": "Con đại bàng bị thương" } } } }, - "backdrop.durer-knight-death-devil.title": { + "backdrop.gerome-pollice-verso.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Knight, Death and the Devil" + "value": "Pollice Verso" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ritter, Tod und Teufel" + "value": "Pollice Verso" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Chevalier, la Mort et le Diable" + "value": "Pollice Verso" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الفارس والموت والشيطان" + "value": "بوليتشي فيرسو" } }, "es": { "stringUnit": { "state": "translated", - "value": "El caballero, la muerte y el diablo" + "value": "Pollice verso" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "騎士、死神與魔鬼" + "value": "拇指朝下" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "骑士、死神与魔鬼" + "value": "拇指朝下" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기사, 죽음과 악마" + "value": "폴리케 베르소" } }, "ja": { "stringUnit": { "state": "translated", - "value": "騎士と死と悪魔" + "value": "差し下ろされた親指" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vitez, smrt i đavo" + "value": "Pollice Verso" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ridder, død og djævel" + "value": "Pollice Verso" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il cavaliere, la morte e il diavolo" + "value": "Pollice Verso" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកចម្បាំង មច្ចុរាជ និងអារក្ស" + "value": "Pollice Verso" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ridder, død og djevel" + "value": "Pollice Verso" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Rycerz, śmierć i diabeł" + "value": "Pollice Verso" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Cavaleiro, a Morte e o Diabo" + "value": "Pollice Verso" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рыцарь, смерть и дьявол" + "value": "Pollice Verso" } }, "th": { "stringUnit": { "state": "translated", - "value": "อัศวิน ความตาย และปีศาจ" + "value": "Pollice Verso" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Şövalye, Ölüm ve Şeytan" + "value": "Pollice Verso" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Лицар, смерть і диявол" + "value": "Pollice Verso" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hiệp sĩ, Thần Chết và Quỷ dữ" + "value": "Pollice Verso" } } } }, - "backdrop.martin-joshua.title": { + "backdrop.cole-voyage-old-age.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Joshua Commanding the Sun to Stand Still" + "value": "The Voyage of Life: Old Age" } }, "de": { "stringUnit": { "state": "translated", - "value": "Josua gebietet der Sonne stillzustehen" + "value": "Die Lebensreise: Alter" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Josué arrêtant le soleil" + "value": "Le Voyage de la vie : la Vieillesse" } }, "ar": { "stringUnit": { "state": "translated", - "value": "يشوع يأمر الشمس بالتوقف" + "value": "رحلة الحياة: الشيخوخة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Josué ordena al sol detenerse" + "value": "El viaje de la vida: la vejez" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "約書亞命令太陽停住" + "value": "生命之旅:老年" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "约书亚命令太阳停住" + "value": "生命之旅:老年" } }, "ko": { "stringUnit": { "state": "translated", - "value": "태양을 멈추게 하는 여호수아" + "value": "인생의 항해: 노년기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "太陽を止めるヨシュア" + "value": "人生の航路:老年期" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Jošua zapovijeda suncu da stane" + "value": "Putovanje života: Starost" } }, "da": { "stringUnit": { "state": "translated", - "value": "Josva befaler solen at stå stille" + "value": "Livets rejse: Alderdom" } }, "it": { "stringUnit": { "state": "translated", - "value": "Giosuè ferma il sole" + "value": "Il viaggio della vita: la vecchiaia" } }, "km": { "stringUnit": { "state": "translated", - "value": "យ៉ូស្វេបញ្ជាព្រះអាទិត្យឱ្យឈប់" + "value": "ដំណើរជីវិត៖ វ័យចាស់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Josva befaler solen å stå stille" + "value": "Livets reise: Alderdom" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Jozue nakazujący słońcu zatrzymać się" + "value": "Podróż życia: Starość" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Josué Ordenando ao Sol que Pare" + "value": "A Viagem da Vida: Velhice" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Иисус Навин останавливает солнце" + "value": "Путешествие жизни: Старость" } }, "th": { "stringUnit": { "state": "translated", - "value": "โยชูวาสั่งดวงอาทิตย์ให้หยุดนิ่ง" + "value": "การเดินทางของชีวิต: วัยชรา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeşu Güneşe Durmasını Emrediyor" + "value": "Hayatın Yolculuğu: Yaşlılık" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ісус Навин зупиняє сонце" + "value": "Подорож життя: Старість" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Giô-suê truyền lệnh cho mặt trời đứng yên" + "value": "Hành trình cuộc đời: Tuổi già" } } } }, - "backdrop.velde-gale.title": { + "backdrop.friedrich-abbey-oakwood.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Gust" + "value": "The Abbey in the Oakwood" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Bö" + "value": "Abtei im Eichwald" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Coup de vent" + "value": "L'Abbaye dans une forêt de chênes" } }, "ar": { "stringUnit": { "state": "translated", - "value": "هبة الريح" + "value": "الدير في غابة البلوط" } }, "es": { "stringUnit": { "state": "translated", - "value": "La ráfaga" + "value": "La abadía en el robledal" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "陣風" + "value": "橡樹林中的修道院" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "阵风" + "value": "橡树林中的修道院" } }, "ko": { "stringUnit": { "state": "translated", - "value": "돌풍" + "value": "떡갈나무 숲속의 수도원" } }, "ja": { "stringUnit": { "state": "translated", - "value": "突風" + "value": "樫の森の中の修道院" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Udar vjetra" + "value": "Opatija u hrastovoj šumi" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vindstødet" + "value": "Klosteret i egeskoven" } }, "it": { "stringUnit": { "state": "translated", - "value": "La raffica" + "value": "Abbazia nel querceto" } }, "km": { "stringUnit": { "state": "translated", - "value": "ខ្យល់បក់ខ្លាំង" + "value": "វត្តអារាមក្នុងព្រៃដើមអូក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vindkastet" + "value": "Klosteret i eikeskogen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Poryw wiatru" + "value": "Opactwo w dębowym lesie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Rajada" + "value": "A Abadia no Carvalhal" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Порыв ветра" + "value": "Аббатство в дубовом лесу" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลมกระโชก" + "value": "อารามในป่าโอ๊ก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ani Rüzgâr" + "value": "Meşe Ormanındaki Manastır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Порив вітру" + "value": "Абатство в дубовому лісі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cơn gió giật" + "value": "Tu viện trong rừng sồi" } } } }, - "backdrop.hogai-nio.title": { + "backdrop.goya-sleep-of-reason.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Niō Seizing an Evil Spirit" + "value": "The Sleep of Reason Produces Monsters" } }, "de": { "stringUnit": { "state": "translated", - "value": "Niō packt einen bösen Geist" + "value": "Der Schlaf der Vernunft gebiert Ungeheuer" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Niō saisissant un démon" + "value": "Le Sommeil de la raison engendre des monstres" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نيو يمسك بروح شريرة" + "value": "نوم العقل يولد الوحوش" } }, "es": { "stringUnit": { "state": "translated", - "value": "Niō atrapando a un espíritu maligno" + "value": "El sueño de la razón produce monstruos" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "仁王捉鬼圖" + "value": "理性沉睡,心魔生焉" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "仁王捉鬼图" + "value": "理性沉睡,心魔生焉" } }, "ko": { "stringUnit": { "state": "translated", - "value": "악귀를 붙잡는 인왕" + "value": "이성이 잠들면 괴물이 깨어난다" } }, "ja": { "stringUnit": { "state": "translated", - "value": "仁王捉鬼図" + "value": "理性の眠りは怪物を生む" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nio hvata zlog duha" + "value": "San razuma rađa čudovišta" } }, "da": { "stringUnit": { "state": "translated", - "value": "Niō griber en ond ånd" + "value": "Fornuftens søvn føder uhyrer" } }, "it": { "stringUnit": { "state": "translated", - "value": "Niō che afferra uno spirito maligno" + "value": "Il sonno della ragione genera mostri" } }, "km": { "stringUnit": { "state": "translated", - "value": "នីអូចាប់វិញ្ញាណអាក្រក់" + "value": "ការដេកលក់នៃហេតុផលបង្កើតបិសាច" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Niō griper en ond ånd" + "value": "Fornuftens søvn føder uhyrer" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Niō chwytający złego ducha" + "value": "Gdy rozum śpi, budzą się upiory" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Niō Agarrando um Espírito Maligno" + "value": "O Sono da Razão Produz Monstros" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Нио, хватающий злого духа" + "value": "Сон разума рождает чудовищ" } }, "th": { "stringUnit": { "state": "translated", - "value": "นิโอจับวิญญาณร้าย" + "value": "เมื่อเหตุผลหลับใหล ปีศาจก็ถือกำเนิด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kötü Bir Ruhu Yakalayan Niō" + "value": "Aklın Uykusu Canavarlar Doğurur" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ніо, що хапає злого духа" + "value": "Сон розуму породжує чудовиськ" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Niō bắt giữ ác linh" + "value": "Giấc ngủ của lý trí sinh ra quái vật" } } } }, - "backdrop.klimt-death-and-life.title": { + "backdrop.bosch-garden-fragment.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Death and Life" + "value": "The Garden of Earthly Delights (Detail)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tod und Leben" + "value": "Der Garten der Lüste (Detail)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Mort et la Vie" + "value": "Le Jardin des délices (détail)" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الموت والحياة" + "value": "حديقة المباهج الأرضية (تفصيل)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Muerte y vida" + "value": "El jardín de las delicias (detalle)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "死亡與生命" + "value": "人間樂園(局部)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "死亡与生命" + "value": "人间乐园(局部)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "죽음과 삶" + "value": "쾌락의 정원 (부분)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "死と生" + "value": "快楽の園(部分)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Smrt i život" + "value": "Vrt zemaljskih užitaka (detalj)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Død og liv" + "value": "Lysternes have (detalje)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Morte e vita" + "value": "Il Giardino delle delizie (dettaglio)" } }, "km": { "stringUnit": { "state": "translated", - "value": "មរណភាព និងជីវិត" + "value": "សួនសុខារម្មណ៍លោកិយ (ផ្នែកលម្អិត)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Død og liv" + "value": "Lystenes hage (detalj)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Śmierć i życie" + "value": "Ogród rozkoszy ziemskich (fragment)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Morte e Vida" + "value": "O Jardim das Delícias Terrenas (Detalhe)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Смерть и жизнь" + "value": "Сад земных наслаждений (фрагмент)" } }, "th": { "stringUnit": { "state": "translated", - "value": "ความตายและชีวิต" + "value": "สวนแห่งความสุขทางโลก (รายละเอียด)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ölüm ve Yaşam" + "value": "Dünyevi Zevkler Bahçesi (Detay)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Смерть і життя" + "value": "Сад земних насолод (фрагмент)" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cái chết và sự sống" + "value": "Khu vườn khoái lạc trần thế (chi tiết)" } } } }, - "backdrop.klimt-medicine.title": { + "backdrop.bruegel-triumph-death.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Medicine" + "value": "The Triumph of Death" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Medizin" + "value": "Der Triumph des Todes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Médecine" + "value": "Le Triomphe de la Mort" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الطب" + "value": "انتصار الموت" } }, "es": { "stringUnit": { "state": "translated", - "value": "La Medicina" + "value": "El triunfo de la Muerte" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "醫學" + "value": "死亡的勝利" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "医学" + "value": "死亡的胜利" } }, "ko": { "stringUnit": { "state": "translated", - "value": "의학" + "value": "죽음의 승리" } }, "ja": { "stringUnit": { "state": "translated", - "value": "医学" + "value": "死の勝利" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Medicina" + "value": "Trijumf smrti" } }, "da": { "stringUnit": { "state": "translated", - "value": "Medicinen" + "value": "Dødens triumf" } }, "it": { "stringUnit": { "state": "translated", - "value": "La Medicina" + "value": "Il trionfo della morte" } }, "km": { "stringUnit": { "state": "translated", - "value": "វេជ្ជសាស្ត្រ" + "value": "ជ័យជម្នះនៃមរណភាព" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Medisinen" + "value": "Dødens triumf" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Medycyna" + "value": "Triumf śmierci" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Medicina" + "value": "O Triunfo da Morte" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Медицина" + "value": "Триумф смерти" } }, "th": { "stringUnit": { "state": "translated", - "value": "การแพทย์" + "value": "ชัยชนะแห่งความตาย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tıp" + "value": "Ölümün Zaferi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Медицина" + "value": "Тріумф смерті" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Y học" + "value": "Chiến thắng của Thần Chết" } } } }, - "backdrop.bosch-garden-central.title": { + "backdrop.spilliaert-vertigo.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Garden of Earthly Delights" + "value": "Vertigo" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Garten der Lüste" + "value": "Schwindel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Jardin des délices" + "value": "Vertige" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حديقة المباهج الأرضية" + "value": "الدوار" } }, "es": { "stringUnit": { "state": "translated", - "value": "El jardín de las delicias" + "value": "Vértigo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "人間樂園" + "value": "暈眩" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "人间乐园" + "value": "晕眩" } }, "ko": { "stringUnit": { "state": "translated", - "value": "쾌락의 정원" + "value": "현기증" } }, "ja": { "stringUnit": { "state": "translated", - "value": "快楽の園" + "value": "めまい" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vrt zemaljskih užitaka" + "value": "Vrtoglavica" } }, "da": { "stringUnit": { "state": "translated", - "value": "Lysternes have" + "value": "Svimmelhed" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il Giardino delle delizie" + "value": "Vertigine" } }, "km": { "stringUnit": { "state": "translated", - "value": "សួនសុខារម្មណ៍លោកិយ" + "value": "វិលមុខ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lystenes hage" + "value": "Svimmelhet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ogród rozkoszy ziemskich" + "value": "Zawrót głowy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Jardim das Delícias Terrenas" + "value": "Vertigem" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сад земных наслаждений" + "value": "Головокружение" } }, "th": { "stringUnit": { "state": "translated", - "value": "สวนแห่งความสุขทางโลก" + "value": "เวียนศีรษะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dünyevi Zevkler Bahçesi" + "value": "Baş Dönmesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сад земних насолод" + "value": "Запаморочення" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Khu vườn khoái lạc trần thế" + "value": "Chóng mặt" } } } }, - "backdrop.martin-great-day-wrath.title": { + "backdrop.rothaug-melpomene.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Great Day of His Wrath" + "value": "Melpomene" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der große Tag seines Zorns" + "value": "Melpomene" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Grand Jour de sa colère" + "value": "Melpomène" } }, "ar": { "stringUnit": { "state": "translated", - "value": "اليوم العظيم لغضبه" + "value": "ميلبوميني" } }, "es": { "stringUnit": { "state": "translated", - "value": "El gran día de su ira" + "value": "Melpómene" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "祂忿怒的大日" + "value": "墨爾波墨涅" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "他忿怒的大日" + "value": "墨尔波墨涅" } }, "ko": { "stringUnit": { "state": "translated", - "value": "진노의 큰 날" + "value": "멜포메네" } }, "ja": { "stringUnit": { "state": "translated", - "value": "神の大いなる怒りの日" + "value": "メルポメネ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Veliki dan Njegova gnjeva" + "value": "Melpomena" } }, "da": { "stringUnit": { "state": "translated", - "value": "Hans vredes store dag" + "value": "Melpomene" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il grande giorno della sua ira" + "value": "Melpomene" } }, "km": { "stringUnit": { "state": "translated", - "value": "ថ្ងៃដ៏ធំនៃសេចក្ដីក្រោធរបស់ទ្រង់" + "value": "មែលប៉ូមេនេ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hans vredes store dag" + "value": "Melpomene" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wielki dzień Jego gniewu" + "value": "Melpomena" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Grande Dia da Sua Ira" + "value": "Melpômene" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Великий день гнева Его" + "value": "Мельпомена" } }, "th": { "stringUnit": { "state": "translated", - "value": "วันยิ่งใหญ่แห่งพระพิโรธ" + "value": "เมลโพมีนี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "O'nun Gazabının Büyük Günü" + "value": "Melpomene" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Великий день гніву Його" + "value": "Мельпомена" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Ngày thịnh nộ lớn của Ngài" + "value": "Melpomene" } } } }, - "backdrop.bonheur-wounded-eagle.title": { + "backdrop.schiele-death-and-the-maiden.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Wounded Eagle" + "value": "Death and the Maiden" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der verwundete Adler" + "value": "Tod und Mädchen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Aigle blessé" + "value": "La Mort et la Jeune Fille" } }, "ar": { "stringUnit": { "state": "translated", - "value": "النسر الجريح" + "value": "الموت والعذراء" } }, "es": { "stringUnit": { "state": "translated", - "value": "El águila herida" + "value": "La muerte y la doncella" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "受傷的鷹" + "value": "死神與少女" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "受伤的鹰" + "value": "死神与少女" } }, "ko": { "stringUnit": { "state": "translated", - "value": "상처 입은 독수리" + "value": "죽음과 소녀" } }, "ja": { "stringUnit": { "state": "translated", - "value": "傷ついた鷲" + "value": "死と乙女" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ranjeni orao" + "value": "Smrt i djevojka" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den sårede ørn" + "value": "Døden og pigen" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'aquila ferita" + "value": "La morte e la fanciulla" } }, "km": { "stringUnit": { "state": "translated", - "value": "សត្វឥន្ទ្រីរងរបួស" + "value": "មច្ចុរាជ និងនារី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den sårede ørnen" + "value": "Døden og piken" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zraniony orzeł" + "value": "Śmierć i dziewczyna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Águia Ferida" + "value": "A Morte e a Donzela" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Раненый орёл" + "value": "Смерть и дева" } }, "th": { "stringUnit": { "state": "translated", - "value": "อินทรีบาดเจ็บ" + "value": "ความตายกับหญิงสาว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yaralı Kartal" + "value": "Ölüm ve Genç Kız" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Поранений орел" + "value": "Смерть і дівчина" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Con đại bàng bị thương" + "value": "Thần Chết và thiếu nữ" } } } }, - "backdrop.gerome-pollice-verso.title": { + "backdrop.aivazovsky-ship-stormy-seas.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Ship on Stormy Seas" } }, "de": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Schiff auf stürmischer See" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Navire dans la tempête" } }, "ar": { "stringUnit": { "state": "translated", - "value": "بوليتشي فيرسو" + "value": "سفينة في بحر هائج" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pollice verso" + "value": "Barco en mar tempestuoso" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "拇指朝下" + "value": "暴風海上的船" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "拇指朝下" + "value": "暴风海上的船" } }, "ko": { "stringUnit": { "state": "translated", - "value": "폴리케 베르소" + "value": "폭풍우 치는 바다 위의 배" } }, "ja": { "stringUnit": { "state": "translated", - "value": "差し下ろされた親指" + "value": "嵐の海の船" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Brod na olujnom moru" } }, "da": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Skib på stormfuldt hav" } }, "it": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Nave nel mare in tempesta" } }, "km": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "កប៉ាល់លើសមុទ្រព្យុះ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Skip på stormfullt hav" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Statek na wzburzonym morzu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Navio em Mar Tempestuoso" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Корабль в бурном море" } }, "th": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "เรือกลางทะเลคลั่ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Fırtınalı Denizde Gemi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Корабель у бурхливому морі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Pollice Verso" + "value": "Con tàu trên biển động" } } } }, - "backdrop.cole-voyage-old-age.title": { + "backdrop.vereshchagin-apotheosis-war.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Voyage of Life: Old Age" + "value": "The Apotheosis of War" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Lebensreise: Alter" + "value": "Die Apotheose des Krieges" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Voyage de la vie : la Vieillesse" + "value": "L'Apothéose de la guerre" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رحلة الحياة: الشيخوخة" + "value": "تأليه الحرب" } }, "es": { "stringUnit": { "state": "translated", - "value": "El viaje de la vida: la vejez" + "value": "La apoteosis de la guerra" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "生命之旅:老年" + "value": "戰爭的禮讚" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "生命之旅:老年" + "value": "战争的颂歌" } }, "ko": { "stringUnit": { "state": "translated", - "value": "인생의 항해: 노년기" + "value": "전쟁의 신격화" } }, "ja": { "stringUnit": { "state": "translated", - "value": "人生の航路:老年期" + "value": "戦争の結末" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Putovanje života: Starost" + "value": "Apoteoza rata" } }, "da": { "stringUnit": { "state": "translated", - "value": "Livets rejse: Alderdom" + "value": "Krigens apoteose" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il viaggio della vita: la vecchiaia" + "value": "L'apoteosi della guerra" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដំណើរជីវិត៖ វ័យចាស់" + "value": "ការលើកតម្កើងសង្គ្រាម" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Livets reise: Alderdom" + "value": "Krigens apoteose" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podróż życia: Starość" + "value": "Apoteoza wojny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Viagem da Vida: Velhice" + "value": "A Apoteose da Guerra" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Путешествие жизни: Старость" + "value": "Апофеоз войны" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเดินทางของชีวิต: วัยชรา" + "value": "อภิเทวภาพแห่งสงคราม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hayatın Yolculuğu: Yaşlılık" + "value": "Savaşın Apoteozu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Подорож життя: Старість" + "value": "Апофеоз війни" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hành trình cuộc đời: Tuổi già" + "value": "Sự tôn vinh chiến tranh" } } } }, - "backdrop.friedrich-abbey-oakwood.title": { + "backdrop.ensor-skeleton-painter.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Abbey in the Oakwood" + "value": "The Skeleton Painter" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abtei im Eichwald" + "value": "Das malende Skelett" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Abbaye dans une forêt de chênes" + "value": "Le Squelette peintre" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الدير في غابة البلوط" + "value": "الهيكل العظمي الرسام" } }, "es": { "stringUnit": { "state": "translated", - "value": "La abadía en el robledal" + "value": "El esqueleto pintor" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "橡樹林中的修道院" + "value": "骷髏畫家" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "橡树林中的修道院" + "value": "骷髅画家" } }, "ko": { "stringUnit": { "state": "translated", - "value": "떡갈나무 숲속의 수도원" + "value": "그림 그리는 해골" } }, "ja": { "stringUnit": { "state": "translated", - "value": "樫の森の中の修道院" + "value": "骸骨の画家" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Opatija u hrastovoj šumi" + "value": "Kostur slikar" } }, "da": { "stringUnit": { "state": "translated", - "value": "Klosteret i egeskoven" + "value": "Skelettet, der maler" } }, "it": { "stringUnit": { "state": "translated", - "value": "Abbazia nel querceto" + "value": "Lo scheletro pittore" } }, "km": { "stringUnit": { "state": "translated", - "value": "វត្តអារាមក្នុងព្រៃដើមអូក" + "value": "គ្រោងឆ្អឹងវិចិត្រករ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Klosteret i eikeskogen" + "value": "Skjelettet som maler" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opactwo w dębowym lesie" + "value": "Szkielet malarz" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Abadia no Carvalhal" + "value": "O Esqueleto Pintor" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Аббатство в дубовом лесу" + "value": "Скелет-художник" } }, "th": { "stringUnit": { "state": "translated", - "value": "อารามในป่าโอ๊ก" + "value": "โครงกระดูกจิตรกร" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Meşe Ormanındaki Manastır" + "value": "Ressam İskelet" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Абатство в дубовому лісі" + "value": "Скелет-художник" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Tu viện trong rừng sồi" + "value": "Bộ xương họa sĩ" } } } }, - "backdrop.goya-sleep-of-reason.title": { + "backdrop.cabanel-fallen-angel.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Sleep of Reason Produces Monsters" + "value": "The Fallen Angel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Schlaf der Vernunft gebiert Ungeheuer" + "value": "Der gefallene Engel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Sommeil de la raison engendre des monstres" + "value": "L'Ange déchu" } }, "ar": { "stringUnit": { "state": "translated", - "value": "نوم العقل يولد الوحوش" + "value": "الملاك الساقط" } }, "es": { "stringUnit": { "state": "translated", - "value": "El sueño de la razón produce monstruos" + "value": "El ángel caído" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "理性沉睡,心魔生焉" + "value": "墮落天使" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "理性沉睡,心魔生焉" + "value": "堕落天使" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이성이 잠들면 괴물이 깨어난다" + "value": "타락천사" } }, "ja": { "stringUnit": { "state": "translated", - "value": "理性の眠りは怪物を生む" + "value": "堕天使" } }, "bs": { "stringUnit": { "state": "translated", - "value": "San razuma rađa čudovišta" + "value": "Pali anđeo" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fornuftens søvn føder uhyrer" + "value": "Den faldne engel" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il sonno della ragione genera mostri" + "value": "L'angelo caduto" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការដេកលក់នៃហេតុផលបង្កើតបិសាច" + "value": "ទេវតាធ្លាក់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fornuftens søvn føder uhyrer" + "value": "Den falne engelen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Gdy rozum śpi, budzą się upiory" + "value": "Upadły anioł" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Sono da Razão Produz Monstros" + "value": "O Anjo Caído" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сон разума рождает чудовищ" + "value": "Падший ангел" } }, "th": { "stringUnit": { "state": "translated", - "value": "เมื่อเหตุผลหลับใหล ปีศาจก็ถือกำเนิด" + "value": "ทูตสวรรค์ผู้ตกสวรรค์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Aklın Uykusu Canavarlar Doğurur" + "value": "Düşmüş Melek" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сон розуму породжує чудовиськ" + "value": "Занепалий ангел" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Giấc ngủ của lý trí sinh ra quái vật" + "value": "Thiên thần sa ngã" } } } }, - "backdrop.bosch-garden-fragment.title": { + "backdrop.spilliaert-woman-shoreline.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Garden of Earthly Delights (Detail)" + "value": "Woman at the Shoreline" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Garten der Lüste (Detail)" + "value": "Frau am Ufer" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Jardin des délices (détail)" + "value": "Femme au bord de l'eau" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حديقة المباهج الأرضية (تفصيل)" + "value": "امرأة على الشاطئ" } }, "es": { "stringUnit": { "state": "translated", - "value": "El jardín de las delicias (detalle)" + "value": "Mujer en la orilla" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "人間樂園(局部)" + "value": "海岸邊的女人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "人间乐园(局部)" + "value": "海岸边的女人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "쾌락의 정원 (부분)" + "value": "해변의 여인" } }, "ja": { "stringUnit": { "state": "translated", - "value": "快楽の園(部分)" + "value": "波打ち際の女" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vrt zemaljskih užitaka (detalj)" + "value": "Žena na obali" } }, "da": { "stringUnit": { "state": "translated", - "value": "Lysternes have (detalje)" + "value": "Kvinde ved strandkanten" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il Giardino delle delizie (dettaglio)" + "value": "Donna sulla riva" } }, "km": { "stringUnit": { "state": "translated", - "value": "សួនសុខារម្មណ៍លោកិយ (ផ្នែកលម្អិត)" + "value": "ស្ត្រីនៅមាត់ឆ្នេរ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Lystenes hage (detalj)" + "value": "Kvinne ved strandkanten" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ogród rozkoszy ziemskich (fragment)" + "value": "Kobieta na brzegu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Jardim das Delícias Terrenas (Detalhe)" + "value": "Mulher à Beira-Mar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сад земных наслаждений (фрагмент)" + "value": "Женщина на берегу" } }, "th": { "stringUnit": { "state": "translated", - "value": "สวนแห่งความสุขทางโลก (รายละเอียด)" + "value": "หญิงสาวริมฝั่ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dünyevi Zevkler Bahçesi (Detay)" + "value": "Kıyıdaki Kadın" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сад земних насолод (фрагмент)" + "value": "Жінка на березі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Khu vườn khoái lạc trần thế (chi tiết)" + "value": "Người phụ nữ bên bờ biển" } } } }, - "backdrop.bruegel-triumph-death.title": { + "backdrop.el-greco-view-of-toledo.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Triumph of Death" + "value": "View of Toledo" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Triumph des Todes" + "value": "Ansicht von Toledo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Triomphe de la Mort" + "value": "Vue de Tolède" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انتصار الموت" + "value": "منظر لطليطلة" } }, "es": { "stringUnit": { "state": "translated", - "value": "El triunfo de la Muerte" + "value": "Vista de Toledo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "死亡的勝利" + "value": "托雷多風景" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "死亡的胜利" + "value": "托莱多风景" } }, "ko": { "stringUnit": { "state": "translated", - "value": "죽음의 승리" + "value": "톨레도 풍경" } }, "ja": { "stringUnit": { "state": "translated", - "value": "死の勝利" + "value": "トレド眺望" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Trijumf smrti" + "value": "Pogled na Toledo" } }, "da": { "stringUnit": { "state": "translated", - "value": "Dødens triumf" + "value": "Udsigt over Toledo" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il trionfo della morte" + "value": "Veduta di Toledo" } }, "km": { "stringUnit": { "state": "translated", - "value": "ជ័យជម្នះនៃមរណភាព" + "value": "ទិដ្ឋភាពទីក្រុងតូលេដូ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Dødens triumf" + "value": "Utsikt over Toledo" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Triumf śmierci" + "value": "Widok Toledo" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Triunfo da Morte" + "value": "Vista de Toledo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Триумф смерти" + "value": "Вид Толедо" } }, "th": { "stringUnit": { "state": "translated", - "value": "ชัยชนะแห่งความตาย" + "value": "ทิวทัศน์เมืองโตเลโด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ölümün Zaferi" + "value": "Toledo Manzarası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Тріумф смерті" + "value": "Вид Толедо" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chiến thắng của Thần Chết" + "value": "Quang cảnh Toledo" } } } }, - "backdrop.spilliaert-vertigo.title": { + "backdrop.gericault-raft-of-the-medusa.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Vertigo" + "value": "The Raft of the Medusa" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schwindel" + "value": "Das Floß der Medusa" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vertige" + "value": "Le Radeau de La Méduse" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الدوار" + "value": "طوف ميدوسا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Vértigo" + "value": "La balsa de la Medusa" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "暈眩" + "value": "梅杜莎之筏" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "晕眩" + "value": "梅杜萨之筏" } }, "ko": { "stringUnit": { "state": "translated", - "value": "현기증" + "value": "메두사호의 뗏목" } }, "ja": { "stringUnit": { "state": "translated", - "value": "めまい" + "value": "メデューズ号の筏" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vrtoglavica" + "value": "Splav Meduze" } }, "da": { "stringUnit": { "state": "translated", - "value": "Svimmelhed" + "value": "Medusas tømmerflåde" } }, "it": { "stringUnit": { "state": "translated", - "value": "Vertigine" + "value": "La zattera della Medusa" } }, "km": { "stringUnit": { "state": "translated", - "value": "វិលមុខ" + "value": "ក្បូនរបស់មេឌូសា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Svimmelhet" + "value": "Medusas flåte" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zawrót głowy" + "value": "Tratwa Meduzy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Vertigem" + "value": "A Jangada da Medusa" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Головокружение" + "value": "Плот «Медузы»" } }, "th": { "stringUnit": { "state": "translated", - "value": "เวียนศีรษะ" + "value": "แพแห่งเมดูซา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Baş Dönmesi" + "value": "Medusa'nın Salı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Запаморочення" + "value": "Пліт «Медузи»" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chóng mặt" + "value": "Chiếc bè của tàu Medusa" } } } }, - "backdrop.rothaug-melpomene.title": { + "backdrop.moreau-apparition.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Melpomene" + "value": "The Apparition" } }, "de": { "stringUnit": { "state": "translated", - "value": "Melpomene" + "value": "Die Erscheinung" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Melpomène" + "value": "L'Apparition" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ميلبوميني" + "value": "الظهور" } }, "es": { "stringUnit": { "state": "translated", - "value": "Melpómene" + "value": "La aparición" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "墨爾波墨涅" + "value": "顯靈" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "墨尔波墨涅" + "value": "显灵" } }, "ko": { "stringUnit": { "state": "translated", - "value": "멜포메네" + "value": "환영" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メルポメネ" + "value": "出現" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Melpomena" + "value": "Priviđenje" } }, "da": { "stringUnit": { "state": "translated", - "value": "Melpomene" + "value": "Åbenbaringen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Melpomene" + "value": "L'apparizione" } }, "km": { "stringUnit": { "state": "translated", - "value": "មែលប៉ូមេនេ" + "value": "ការលេចរូបរាង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Melpomene" + "value": "Åpenbaringen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Melpomena" + "value": "Zjawa" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Melpômene" + "value": "A Aparição" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Мельпомена" + "value": "Явление" } }, "th": { "stringUnit": { "state": "translated", - "value": "เมลโพมีนี" + "value": "การปรากฏ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Melpomene" + "value": "Görünme" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Мельпомена" + "value": "Явлення" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Melpomene" + "value": "Sự hiện hình" } } } }, - "backdrop.schiele-death-and-the-maiden.title": { + "backdrop.rembrandt-prodigal-son.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Death and the Maiden" + "value": "The Return of the Prodigal Son" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tod und Mädchen" + "value": "Die Rückkehr des verlorenen Sohnes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Mort et la Jeune Fille" + "value": "Le Retour du fils prodigue" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الموت والعذراء" + "value": "عودة الابن الضال" } }, "es": { "stringUnit": { "state": "translated", - "value": "La muerte y la doncella" + "value": "El regreso del hijo pródigo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "死神與少女" + "value": "浪子回頭" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "死神与少女" + "value": "浪子回头" } }, "ko": { "stringUnit": { "state": "translated", - "value": "죽음과 소녀" + "value": "돌아온 탕자" } }, "ja": { "stringUnit": { "state": "translated", - "value": "死と乙女" + "value": "放蕩息子の帰還" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Smrt i djevojka" + "value": "Povratak izgubljenog sina" } }, "da": { "stringUnit": { "state": "translated", - "value": "Døden og pigen" + "value": "Den fortabte søns hjemkomst" } }, "it": { "stringUnit": { "state": "translated", - "value": "La morte e la fanciulla" + "value": "Il ritorno del figliol prodigo" } }, "km": { "stringUnit": { "state": "translated", - "value": "មច្ចុរាជ និងនារី" + "value": "ការវិលត្រឡប់មកវិញរបស់កូនខ្ជះខ្ជាយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Døden og piken" + "value": "Den bortkomne sønns hjemkomst" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Śmierć i dziewczyna" + "value": "Powrót syna marnotrawnego" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Morte e a Donzela" + "value": "O Retorno do Filho Pródigo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Смерть и дева" + "value": "Возвращение блудного сына" } }, "th": { "stringUnit": { "state": "translated", - "value": "ความตายกับหญิงสาว" + "value": "การกลับมาของบุตรน้อยหลงหาย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ölüm ve Genç Kız" + "value": "Müsrif Oğulun Dönüşü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Смерть і дівчина" + "value": "Повернення блудного сина" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Thần Chết và thiếu nữ" + "value": "Sự trở về của người con hoang đàng" } } } }, - "backdrop.aivazovsky-ship-stormy-seas.title": { + "backdrop.velazquez-las-meninas.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ship on Stormy Seas" + "value": "Las Meninas" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schiff auf stürmischer See" + "value": "Las Meninas" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Navire dans la tempête" + "value": "Les Ménines" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سفينة في بحر هائج" + "value": "وصيفات الشرف" } }, "es": { "stringUnit": { "state": "translated", - "value": "Barco en mar tempestuoso" + "value": "Las meninas" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "暴風海上的船" + "value": "侍女" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "暴风海上的船" + "value": "宫娥" } }, "ko": { "stringUnit": { "state": "translated", - "value": "폭풍우 치는 바다 위의 배" + "value": "시녀들" } }, "ja": { "stringUnit": { "state": "translated", - "value": "嵐の海の船" + "value": "ラス・メニーナス" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Brod na olujnom moru" + "value": "Las Meninas" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skib på stormfuldt hav" + "value": "Las Meninas" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nave nel mare in tempesta" + "value": "Las Meninas" } }, "km": { "stringUnit": { "state": "translated", - "value": "កប៉ាល់លើសមុទ្រព្យុះ" + "value": "Las Meninas" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skip på stormfullt hav" + "value": "Las Meninas" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Statek na wzburzonym morzu" + "value": "Panny dworskie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Navio em Mar Tempestuoso" + "value": "As Meninas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Корабль в бурном море" + "value": "Менины" } }, "th": { "stringUnit": { "state": "translated", - "value": "เรือกลางทะเลคลั่ง" + "value": "ลัสเมนีนัส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Fırtınalı Denizde Gemi" + "value": "Las Meninas" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Корабель у бурхливому морі" + "value": "Меніни" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Con tàu trên biển động" + "value": "Las Meninas" } } } }, - "backdrop.vereshchagin-apotheosis-war.title": { + "backdrop.matejko-stanczyk.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Apotheosis of War" + "value": "Stańczyk" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Apotheose des Krieges" + "value": "Stańczyk" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Apothéose de la guerre" + "value": "Stańczyk" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تأليه الحرب" + "value": "ستانتشيك" } }, "es": { "stringUnit": { "state": "translated", - "value": "La apoteosis de la guerra" + "value": "Stańczyk" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "戰爭的禮讚" + "value": "斯坦奇克" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "战争的颂歌" + "value": "斯坦奇克" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전쟁의 신격화" + "value": "스탄치크" } }, "ja": { "stringUnit": { "state": "translated", - "value": "戦争の結末" + "value": "スタンチク" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Apoteoza rata" + "value": "Stańczyk" } }, "da": { "stringUnit": { "state": "translated", - "value": "Krigens apoteose" + "value": "Stańczyk" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'apoteosi della guerra" + "value": "Stańczyk" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការលើកតម្កើងសង្គ្រាម" + "value": "ស្តាញឈិក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Krigens apoteose" + "value": "Stańczyk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Apoteoza wojny" + "value": "Stańczyk" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Apoteose da Guerra" + "value": "Stańczyk" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Апофеоз войны" + "value": "Станьчик" } }, "th": { "stringUnit": { "state": "translated", - "value": "อภิเทวภาพแห่งสงคราม" + "value": "สตาญชิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Savaşın Apoteozu" + "value": "Stańczyk" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Апофеоз війни" + "value": "Станчик" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự tôn vinh chiến tranh" + "value": "Stańczyk" } } } }, - "backdrop.ensor-skeleton-painter.title": { + "backdrop.sargent-madame-x.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Skeleton Painter" + "value": "Madame X" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das malende Skelett" + "value": "Madame X" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Squelette peintre" + "value": "Madame X" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الهيكل العظمي الرسام" + "value": "مدام إكس" } }, "es": { "stringUnit": { "state": "translated", - "value": "El esqueleto pintor" + "value": "Madame X" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "骷髏畫家" + "value": "X夫人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "骷髅画家" + "value": "X夫人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그림 그리는 해골" + "value": "마담 X" } }, "ja": { "stringUnit": { "state": "translated", - "value": "骸骨の画家" + "value": "マダム X" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kostur slikar" + "value": "Madame X" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skelettet, der maler" + "value": "Madame X" } }, "it": { "stringUnit": { "state": "translated", - "value": "Lo scheletro pittore" + "value": "Madame X" } }, "km": { "stringUnit": { "state": "translated", - "value": "គ្រោងឆ្អឹងវិចិត្រករ" + "value": "Madame X" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skjelettet som maler" + "value": "Madame X" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Szkielet malarz" + "value": "Madame X" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Esqueleto Pintor" + "value": "Madame X" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Скелет-художник" + "value": "Мадам X" } }, "th": { "stringUnit": { "state": "translated", - "value": "โครงกระดูกจิตรกร" + "value": "มาดามเอ็กซ์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ressam İskelet" + "value": "Madame X" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Скелет-художник" + "value": "Мадам X" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Bộ xương họa sĩ" + "value": "Madame X" } } } }, - "backdrop.cabanel-fallen-angel.title": { + "backdrop.millais-joan-of-arc.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Fallen Angel" + "value": "Joan of Arc" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der gefallene Engel" + "value": "Jeanne d'Arc" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Ange déchu" + "value": "Jeanne d'Arc" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الملاك الساقط" + "value": "جان دارك" } }, "es": { "stringUnit": { "state": "translated", - "value": "El ángel caído" + "value": "Juana de Arco" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "墮落天使" + "value": "聖女貞德" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "堕落天使" + "value": "圣女贞德" } }, "ko": { "stringUnit": { "state": "translated", - "value": "타락천사" + "value": "잔 다르크" } }, "ja": { "stringUnit": { "state": "translated", - "value": "堕天使" + "value": "ジャンヌ・ダルク" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pali anđeo" + "value": "Ivana Orleanska" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den faldne engel" + "value": "Jeanne d'Arc" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'angelo caduto" + "value": "Giovanna d'Arco" } }, "km": { "stringUnit": { "state": "translated", - "value": "ទេវតាធ្លាក់" + "value": "ហ្សង់ដាក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den falne engelen" + "value": "Jeanne d'Arc" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Upadły anioł" + "value": "Joanna d'Arc" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Anjo Caído" + "value": "Joana d'Arc" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Падший ангел" + "value": "Жанна д'Арк" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทูตสวรรค์ผู้ตกสวรรค์" + "value": "ฌานดาร์ก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Düşmüş Melek" + "value": "Jeanne d'Arc" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Занепалий ангел" + "value": "Жанна д'Арк" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Thiên thần sa ngã" + "value": "Jeanne d'Arc" } } } }, - "backdrop.spilliaert-woman-shoreline.title": { + "backdrop.cot-storm.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Woman at the Shoreline" + "value": "The Storm" } }, "de": { "stringUnit": { "state": "translated", - "value": "Frau am Ufer" + "value": "Das Gewitter" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Femme au bord de l'eau" + "value": "L'Orage" } }, "ar": { "stringUnit": { "state": "translated", - "value": "امرأة على الشاطئ" + "value": "العاصفة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mujer en la orilla" + "value": "La tormenta" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "海岸邊的女人" + "value": "暴風雨" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "海岸边的女人" + "value": "暴风雨" } }, "ko": { "stringUnit": { "state": "translated", - "value": "해변의 여인" + "value": "폭풍" } }, "ja": { "stringUnit": { "state": "translated", - "value": "波打ち際の女" + "value": "嵐" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Žena na obali" + "value": "Oluja" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kvinde ved strandkanten" + "value": "Uvejret" } }, "it": { "stringUnit": { "state": "translated", - "value": "Donna sulla riva" + "value": "La tempesta" } }, "km": { "stringUnit": { "state": "translated", - "value": "ស្ត្រីនៅមាត់ឆ្នេរ" + "value": "ព្យុះ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kvinne ved strandkanten" + "value": "Uværet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kobieta na brzegu" + "value": "Burza" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mulher à Beira-Mar" + "value": "A Tempestade" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Женщина на берегу" + "value": "Гроза" } }, "th": { "stringUnit": { "state": "translated", - "value": "หญิงสาวริมฝั่ง" + "value": "พายุ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kıyıdaki Kadın" + "value": "Fırtına" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Жінка на березі" + "value": "Гроза" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Người phụ nữ bên bờ biển" + "value": "Cơn bão" } } } }, - "backdrop.el-greco-view-of-toledo.title": { + "backdrop.rembrandt-night-watch.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "View of Toledo" + "value": "The Night Watch" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ansicht von Toledo" + "value": "Die Nachtwache" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vue de Tolède" + "value": "La Ronde de nuit" } }, "ar": { "stringUnit": { "state": "translated", - "value": "منظر لطليطلة" + "value": "دورية الليل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Vista de Toledo" + "value": "La ronda de noche" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "托雷多風景" + "value": "夜巡" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "托莱多风景" + "value": "夜巡" } }, "ko": { "stringUnit": { "state": "translated", - "value": "톨레도 풍경" + "value": "야간 순찰" } }, "ja": { "stringUnit": { "state": "translated", - "value": "トレド眺望" + "value": "夜警" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pogled na Toledo" + "value": "Noćna straža" } }, "da": { "stringUnit": { "state": "translated", - "value": "Udsigt over Toledo" + "value": "Nattevagten" } }, "it": { "stringUnit": { "state": "translated", - "value": "Veduta di Toledo" + "value": "La ronda di notte" } }, "km": { "stringUnit": { "state": "translated", - "value": "ទិដ្ឋភាពទីក្រុងតូលេដូ" + "value": "ឆ្មាំយាមពេលយប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Utsikt over Toledo" + "value": "Nattevakten" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Widok Toledo" + "value": "Straż nocna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Vista de Toledo" + "value": "A Ronda Noturna" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вид Толедо" + "value": "Ночной дозор" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทิวทัศน์เมืองโตเลโด" + "value": "ยามรักษาการณ์กลางคืน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Toledo Manzarası" + "value": "Gece Devriyesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вид Толедо" + "value": "Нічна варта" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Quang cảnh Toledo" + "value": "Đội tuần đêm" } } } }, - "backdrop.gericault-raft-of-the-medusa.title": { + "backdrop.vigee-lebrun-madame-grand.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Raft of the Medusa" + "value": "Madame Grand" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Floß der Medusa" + "value": "Madame Grand" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Radeau de La Méduse" + "value": "Madame Grand" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طوف ميدوسا" + "value": "مدام غران" } }, "es": { "stringUnit": { "state": "translated", - "value": "La balsa de la Medusa" + "value": "Madame Grand" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "梅杜莎之筏" + "value": "格蘭夫人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "梅杜萨之筏" + "value": "格朗夫人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메두사호의 뗏목" + "value": "그랑 부인" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メデューズ号の筏" + "value": "グラン夫人" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Splav Meduze" + "value": "Madame Grand" } }, "da": { "stringUnit": { "state": "translated", - "value": "Medusas tømmerflåde" + "value": "Madame Grand" } }, "it": { "stringUnit": { "state": "translated", - "value": "La zattera della Medusa" + "value": "Madame Grand" } }, "km": { "stringUnit": { "state": "translated", - "value": "ក្បូនរបស់មេឌូសា" + "value": "Madame Grand" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Medusas flåte" + "value": "Madame Grand" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Tratwa Meduzy" + "value": "Madame Grand" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Jangada da Medusa" + "value": "Madame Grand" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Плот «Медузы»" + "value": "Мадам Гран" } }, "th": { "stringUnit": { "state": "translated", - "value": "แพแห่งเมดูซา" + "value": "มาดามกร็อง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Medusa'nın Salı" + "value": "Madame Grand" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Пліт «Медузи»" + "value": "Мадам Гран" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chiếc bè của tàu Medusa" + "value": "Madame Grand" } } } }, - "backdrop.moreau-apparition.title": { + "backdrop.waterhouse-lady-shalott.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Apparition" + "value": "The Lady of Shalott" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Erscheinung" + "value": "Die Dame von Shalott" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Apparition" + "value": "La Dame de Shalott" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الظهور" + "value": "سيدة شالوت" } }, "es": { "stringUnit": { "state": "translated", - "value": "La aparición" + "value": "La dama de Shalott" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "顯靈" + "value": "夏洛特夫人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "显灵" + "value": "夏洛特夫人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "환영" + "value": "샬롯의 여인" } }, "ja": { "stringUnit": { "state": "translated", - "value": "出現" + "value": "シャロットの女" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Priviđenje" + "value": "Gospa od Shalotta" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åbenbaringen" + "value": "Damen fra Shalott" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'apparizione" + "value": "La dama di Shalott" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការលេចរូបរាង" + "value": "នារីនៃសាឡុត" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Åpenbaringen" + "value": "Damen fra Shalott" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zjawa" + "value": "Pani na Shalott" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Aparição" + "value": "A Dama de Shalott" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Явление" + "value": "Леди Шалотт" } }, "th": { "stringUnit": { "state": "translated", - "value": "การปรากฏ" + "value": "สุภาพสตรีแห่งชาลอตต์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Görünme" + "value": "Shalott Leydisi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Явлення" + "value": "Леді Шалотт" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự hiện hình" + "value": "Quý cô xứ Shalott" } } } }, - "backdrop.rembrandt-prodigal-son.title": { + "backdrop.draper-lament-icarus.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Return of the Prodigal Son" + "value": "The Lament for Icarus" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Rückkehr des verlorenen Sohnes" + "value": "Die Klage um Ikarus" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Retour du fils prodigue" + "value": "La Lamentation pour Icare" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عودة الابن الضال" + "value": "رثاء إيكاروس" } }, "es": { "stringUnit": { "state": "translated", - "value": "El regreso del hijo pródigo" + "value": "El lamento por Ícaro" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "浪子回頭" + "value": "哀悼伊卡洛斯" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "浪子回头" + "value": "哀悼伊卡洛斯" } }, "ko": { "stringUnit": { "state": "translated", - "value": "돌아온 탕자" + "value": "이카로스를 위한 애도" } }, "ja": { "stringUnit": { "state": "translated", - "value": "放蕩息子の帰還" + "value": "イカロス哀悼" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Povratak izgubljenog sina" + "value": "Tužbalica za Ikarom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den fortabte søns hjemkomst" + "value": "Klagen over Ikaros" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il ritorno del figliol prodigo" + "value": "Il lamento per Icaro" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការវិលត្រឡប់មកវិញរបស់កូនខ្ជះខ្ជាយ" + "value": "ការយំសោកចំពោះអ៊ីការ៉ុស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den bortkomne sønns hjemkomst" + "value": "Klagen over Ikaros" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Powrót syna marnotrawnego" + "value": "Opłakiwanie Ikara" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Retorno do Filho Pródigo" + "value": "O Lamento por Ícaro" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Возвращение блудного сына" + "value": "Оплакивание Икара" } }, "th": { "stringUnit": { "state": "translated", - "value": "การกลับมาของบุตรน้อยหลงหาย" + "value": "การไว้อาลัยอิคารัส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Müsrif Oğulun Dönüşü" + "value": "İkarus için Ağıt" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Повернення блудного сина" + "value": "Оплакування Ікара" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự trở về của người con hoang đàng" + "value": "Khóc thương Icarus" } } } }, - "backdrop.velazquez-las-meninas.title": { + "backdrop.fragonard-swing.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "The Swing" } }, "de": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "Die Schaukel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Ménines" + "value": "Les Hasards heureux de l'escarpolette" } }, "ar": { "stringUnit": { "state": "translated", - "value": "وصيفات الشرف" + "value": "الأرجوحة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Las meninas" + "value": "El columpio" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "侍女" + "value": "鞦韆" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "宫娥" + "value": "秋千" } }, "ko": { "stringUnit": { "state": "translated", - "value": "시녀들" + "value": "그네" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ラス・メニーナス" + "value": "ぶらんこ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "Ljuljačka" } }, "da": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "Gyngen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "L'altalena" } }, "km": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "ជិះយោល" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "Huska" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Panny dworskie" + "value": "Huśtawka" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "As Meninas" + "value": "O Balanço" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Менины" + "value": "Качели" } }, "th": { "stringUnit": { "state": "translated", - "value": "ลัสเมนีนัส" + "value": "ชิงช้า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "Salıncak" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Меніни" + "value": "Гойдалка" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Las Meninas" + "value": "Chiếc xích đu" } } } }, - "backdrop.matejko-stanczyk.title": { + "backdrop.rubens-st-francis-xavier.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "The Miracles of St Francis Xavier" } }, "de": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Die Wunder des hl. Franz Xaver" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Les Miracles de saint François Xavier" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ستانتشيك" + "value": "معجزات القديس فرنسيس كسفاريوس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Los milagros de san Francisco Javier" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "斯坦奇克" + "value": "聖方濟·沙勿略的神蹟" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "斯坦奇克" + "value": "圣方济各·沙勿略的奇迹" } }, "ko": { "stringUnit": { "state": "translated", - "value": "스탄치크" + "value": "성 프란치스코 하비에르의 기적" } }, "ja": { "stringUnit": { "state": "translated", - "value": "スタンチク" + "value": "聖フランシスコ・ザビエルの奇跡" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Čuda svetog Franje Ksaverskog" } }, "da": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Den hellige Frans Xaviers mirakler" } }, "it": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "I miracoli di san Francesco Saverio" } }, "km": { "stringUnit": { "state": "translated", - "value": "ស្តាញឈិក" + "value": "អព្ភូតហេតុរបស់សន្តហ្វ្រង់ស៊ីស សាវីយេ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Den hellige Frans Xaviers mirakler" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Cuda św. Franciszka Ksawerego" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Os Milagres de São Francisco Xavier" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Станьчик" + "value": "Чудеса святого Франциска Ксаверия" } }, "th": { "stringUnit": { "state": "translated", - "value": "สตาญชิก" + "value": "ปาฏิหาริย์ของนักบุญฟรังซิสเซเวียร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Aziz Francis Xavier'in Mucizeleri" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Станчик" + "value": "Чудеса святого Франциска Ксаверія" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Stańczyk" + "value": "Những phép lạ của Thánh Phanxicô Xaviê" } } } }, - "backdrop.sargent-madame-x.title": { + "backdrop.vermeer-pearl-earring.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Girl with a Pearl Earring" } }, "de": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Das Mädchen mit dem Perlenohrgehänge" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "La Jeune Fille à la perle" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مدام إكس" + "value": "الفتاة ذات القرط اللؤلؤي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "La joven de la perla" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "X夫人" + "value": "戴珍珠耳環的少女" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "X夫人" + "value": "戴珍珠耳环的少女" } }, "ko": { "stringUnit": { "state": "translated", - "value": "마담 X" + "value": "진주 귀걸이를 한 소녀" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マダム X" + "value": "真珠の耳飾りの少女" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Djevojka s bisernom naušnicom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Pigen med perleøreringen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "La ragazza con l'orecchino di perla" } }, "km": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "ក្មេងស្រីពាក់ក្រវិលគុជ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Piken med perleøredobben" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Dziewczyna z perłą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Moça com Brinco de Pérola" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Мадам X" + "value": "Девушка с жемчужной серёжкой" } }, "th": { "stringUnit": { "state": "translated", - "value": "มาดามเอ็กซ์" + "value": "หญิงสาวกับต่างหูมุก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "İnci Küpeli Kız" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Мадам X" + "value": "Дівчина з перловою сережкою" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Madame X" + "value": "Thiếu nữ đeo hoa tai ngọc trai" } } } }, - "backdrop.millais-joan-of-arc.title": { + "backdrop.danielson-gambogi-self.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Joan of Arc" + "value": "Self-Portrait" } }, "de": { "stringUnit": { "state": "translated", - "value": "Jeanne d'Arc" + "value": "Selbstbildnis" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jeanne d'Arc" + "value": "Autoportrait" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جان دارك" + "value": "بورتريه ذاتي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Juana de Arco" + "value": "Autorretrato" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "聖女貞德" + "value": "自畫像" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "圣女贞德" + "value": "自画像" } }, "ko": { "stringUnit": { "state": "translated", - "value": "잔 다르크" + "value": "자화상" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ジャンヌ・ダルク" + "value": "自画像" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ivana Orleanska" + "value": "Autoportret" } }, "da": { "stringUnit": { "state": "translated", - "value": "Jeanne d'Arc" + "value": "Selvportræt" } }, "it": { "stringUnit": { "state": "translated", - "value": "Giovanna d'Arco" + "value": "Autoritratto" } }, "km": { "stringUnit": { "state": "translated", - "value": "ហ្សង់ដាក" + "value": "រូបខ្លួនឯង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Jeanne d'Arc" + "value": "Selvportrett" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Joanna d'Arc" + "value": "Autoportret" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Joana d'Arc" + "value": "Autorretrato" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Жанна д'Арк" + "value": "Автопортрет" } }, "th": { "stringUnit": { "state": "translated", - "value": "ฌานดาร์ก" + "value": "ภาพเหมือนตนเอง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Jeanne d'Arc" + "value": "Otoportre" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Жанна д'Арк" + "value": "Автопортрет" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Jeanne d'Arc" + "value": "Chân dung tự họa" } } } }, - "backdrop.cot-storm.title": { + "backdrop.beard-his-majesty.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Storm" + "value": "His Majesty Receives" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Gewitter" + "value": "Seine Majestät empfängt" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Orage" + "value": "Sa Majesté reçoit" } }, "ar": { "stringUnit": { "state": "translated", - "value": "العاصفة" + "value": "جلالته يستقبل" } }, "es": { "stringUnit": { "state": "translated", - "value": "La tormenta" + "value": "Su Majestad recibe" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "暴風雨" + "value": "陛下接見" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "暴风雨" + "value": "陛下接见" } }, "ko": { "stringUnit": { "state": "translated", - "value": "폭풍" + "value": "폐하의 접견" } }, "ja": { "stringUnit": { "state": "translated", - "value": "嵐" + "value": "陛下の謁見" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Oluja" + "value": "Njegovo veličanstvo prima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Uvejret" + "value": "Hans Majestæt modtager" } }, "it": { "stringUnit": { "state": "translated", - "value": "La tempesta" + "value": "Sua Maestà riceve" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្យុះ" + "value": "ព្រះករុណាទទួលភ្ញៀវ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Uværet" + "value": "Hans Majestet tar imot" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Burza" + "value": "Jego Wysokość przyjmuje" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Tempestade" + "value": "Sua Majestade Recebe" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Гроза" + "value": "Его величество принимает" } }, "th": { "stringUnit": { "state": "translated", - "value": "พายุ" + "value": "ฝ่าบาททรงต้อนรับ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Fırtına" + "value": "Majesteleri Kabul Ediyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Гроза" + "value": "Його величність приймає" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cơn bão" + "value": "Bệ hạ tiếp kiến" } } } }, - "backdrop.rembrandt-night-watch.title": { + "backdrop.marc-foxes.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Night Watch" + "value": "The Foxes" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Nachtwache" + "value": "Die Füchse" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Ronde de nuit" + "value": "Les Renards" } }, "ar": { "stringUnit": { "state": "translated", - "value": "دورية الليل" + "value": "الثعالب" } }, "es": { "stringUnit": { "state": "translated", - "value": "La ronda de noche" + "value": "Los zorros" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "夜巡" + "value": "狐狸" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "夜巡" + "value": "狐狸" } }, "ko": { "stringUnit": { "state": "translated", - "value": "야간 순찰" + "value": "여우들" } }, "ja": { "stringUnit": { "state": "translated", - "value": "夜警" + "value": "狐" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Noćna straža" + "value": "Lisice" } }, "da": { "stringUnit": { "state": "translated", - "value": "Nattevagten" + "value": "Rævene" } }, "it": { "stringUnit": { "state": "translated", - "value": "La ronda di notte" + "value": "Le volpi" } }, "km": { "stringUnit": { "state": "translated", - "value": "ឆ្មាំយាមពេលយប់" + "value": "សត្វកញ្ជ្រោង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Nattevakten" + "value": "Revene" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Straż nocna" + "value": "Lisy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Ronda Noturna" + "value": "As Raposas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ночной дозор" + "value": "Лисы" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยามรักษาการณ์กลางคืน" + "value": "หมาจิ้งจอก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gece Devriyesi" + "value": "Tilkiler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нічна варта" + "value": "Лиси" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đội tuần đêm" + "value": "Những con cáo" } } } }, - "backdrop.vigee-lebrun-madame-grand.title": { + "backdrop.degas-green-dancers.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Dancer in Green" } }, "de": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Tänzerin in Grün" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Danseuse en vert" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مدام غران" + "value": "راقصة بالأخضر" } }, "es": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Bailarina de verde" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "格蘭夫人" + "value": "綠衣舞者" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "格朗夫人" + "value": "绿衣舞者" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그랑 부인" + "value": "초록 옷의 무희" } }, "ja": { "stringUnit": { "state": "translated", - "value": "グラン夫人" + "value": "緑の踊り子" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Plesačica u zelenom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Danserinde i grønt" } }, "it": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Ballerina in verde" } }, "km": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "អ្នករាំក្នុងសម្លៀកបំពាក់ពណ៌បៃតង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Danserinne i grønt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Tancerka w zieleni" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Bailarina de Verde" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Мадам Гран" + "value": "Танцовщица в зелёном" } }, "th": { "stringUnit": { "state": "translated", - "value": "มาดามกร็อง" + "value": "นักเต้นในชุดเขียว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Yeşilli Dansçı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Мадам Гран" + "value": "Танцівниця в зеленому" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Madame Grand" + "value": "Vũ nữ áo xanh lục" } } } }, - "backdrop.waterhouse-lady-shalott.title": { + "backdrop.modigliani-nude-divan.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Lady of Shalott" + "value": "Nude Sitting on a Divan" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Dame von Shalott" + "value": "Akt auf einem Diwan sitzend" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Dame de Shalott" + "value": "Nu assis sur un divan" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سيدة شالوت" + "value": "عارية جالسة على أريكة" } }, "es": { "stringUnit": { "state": "translated", - "value": "La dama de Shalott" + "value": "Desnudo sentado en un diván" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "夏洛特夫人" + "value": "坐在長沙發上的裸女" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "夏洛特夫人" + "value": "坐在长沙发上的裸女" } }, "ko": { "stringUnit": { "state": "translated", - "value": "샬롯의 여인" + "value": "소파에 앉은 나부" } }, "ja": { "stringUnit": { "state": "translated", - "value": "シャロットの女" + "value": "長椅子に座る裸婦" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Gospa od Shalotta" + "value": "Akt koji sjedi na divanu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Damen fra Shalott" + "value": "Nøgen siddende på en divan" } }, "it": { "stringUnit": { "state": "translated", - "value": "La dama di Shalott" + "value": "Nudo seduto su un divano" } }, "km": { "stringUnit": { "state": "translated", - "value": "នារីនៃសាឡុត" + "value": "រូបអាក្រាតអង្គុយលើសាឡុង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Damen fra Shalott" + "value": "Naken sittende på en divan" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pani na Shalott" + "value": "Akt siedzący na sofie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Dama de Shalott" + "value": "Nu Sentado num Divã" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Леди Шалотт" + "value": "Обнажённая, сидящая на диване" } }, "th": { "stringUnit": { "state": "translated", - "value": "สุภาพสตรีแห่งชาลอตต์" + "value": "ภาพเปลือยนั่งบนเก้าอี้ยาว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Shalott Leydisi" + "value": "Divanda Oturan Çıplak" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Леді Шалотт" + "value": "Оголена, що сидить на дивані" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Quý cô xứ Shalott" + "value": "Thiếu nữ khỏa thân ngồi trên trường kỷ" } } } }, - "backdrop.draper-lament-icarus.title": { + "backdrop.raphael-sistine-madonna.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Lament for Icarus" + "value": "Sistine Madonna" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Klage um Ikarus" + "value": "Sixtinische Madonna" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Lamentation pour Icare" + "value": "La Madone Sixtine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رثاء إيكاروس" + "value": "مادونا سيستينا" } }, "es": { "stringUnit": { "state": "translated", - "value": "El lamento por Ícaro" + "value": "Madonna Sixtina" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "哀悼伊卡洛斯" + "value": "西斯汀聖母" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "哀悼伊卡洛斯" + "value": "西斯廷圣母" } }, "ko": { "stringUnit": { "state": "translated", - "value": "이카로스를 위한 애도" + "value": "시스티나 성모" } }, "ja": { "stringUnit": { "state": "translated", - "value": "イカロス哀悼" + "value": "システィーナの聖母" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Tužbalica za Ikarom" + "value": "Sikstinska Madona" } }, "da": { "stringUnit": { "state": "translated", - "value": "Klagen over Ikaros" + "value": "Den sixtinske Madonna" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il lamento per Icaro" + "value": "Madonna Sistina" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការយំសោកចំពោះអ៊ីការ៉ុស" + "value": "ម៉ាដូណាស៊ីស្ទីន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Klagen over Ikaros" + "value": "Den sixtinske madonna" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Opłakiwanie Ikara" + "value": "Madonna Sykstyńska" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Lamento por Ícaro" + "value": "Madona Sistina" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Оплакивание Икара" + "value": "Сикстинская мадонна" } }, "th": { "stringUnit": { "state": "translated", - "value": "การไว้อาลัยอิคารัส" + "value": "พระแม่ซิสทีน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İkarus için Ağıt" + "value": "Sistina Madonnası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Оплакування Ікара" + "value": "Сікстинська мадонна" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Khóc thương Icarus" + "value": "Đức Mẹ Sistine" } } } }, - "backdrop.fragonard-swing.title": { + "backdrop.bouguereau-virgin-lilies.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Swing" + "value": "The Virgin of the Lilies" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Schaukel" + "value": "Die Jungfrau mit den Lilien" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Hasards heureux de l'escarpolette" + "value": "La Vierge au lys" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأرجوحة" + "value": "العذراء والزنابق" } }, "es": { "stringUnit": { "state": "translated", - "value": "El columpio" + "value": "La Virgen de los lirios" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "鞦韆" + "value": "百合聖母" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "秋千" + "value": "百合圣母" } }, "ko": { "stringUnit": { "state": "translated", - "value": "그네" + "value": "백합의 성모" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ぶらんこ" + "value": "百合の聖母" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ljuljačka" + "value": "Djevica s ljiljanima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Gyngen" + "value": "Jomfruen med liljerne" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'altalena" + "value": "La Vergine dei gigli" } }, "km": { "stringUnit": { "state": "translated", - "value": "ជិះយោល" + "value": "ព្រះនាងព្រហ្មចារីនៃផ្កាលីលី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Huska" + "value": "Jomfruen med liljene" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Huśtawka" + "value": "Madonna z liliami" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Balanço" + "value": "A Virgem dos Lírios" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Качели" + "value": "Дева с лилиями" } }, "th": { "stringUnit": { "state": "translated", - "value": "ชิงช้า" + "value": "พระแม่พรหมจารีกับดอกลิลลี่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Salıncak" + "value": "Zambaklı Meryem" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Гойдалка" + "value": "Діва з ліліями" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chiếc xích đu" + "value": "Đức Trinh Nữ với hoa huệ" } } } }, - "backdrop.rubens-st-francis-xavier.title": { + "backdrop.wood-american-gothic.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Miracles of St Francis Xavier" + "value": "American Gothic" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Wunder des hl. Franz Xaver" + "value": "American Gothic" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Miracles de saint François Xavier" + "value": "American Gothic" } }, "ar": { "stringUnit": { "state": "translated", - "value": "معجزات القديس فرنسيس كسفاريوس" + "value": "القوطية الأمريكية" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los milagros de san Francisco Javier" + "value": "Gótico estadounidense" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "聖方濟·沙勿略的神蹟" + "value": "美國哥德式" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "圣方济各·沙勿略的奇迹" + "value": "美国哥特式" } }, "ko": { "stringUnit": { "state": "translated", - "value": "성 프란치스코 하비에르의 기적" + "value": "아메리칸 고딕" } }, "ja": { "stringUnit": { "state": "translated", - "value": "聖フランシスコ・ザビエルの奇跡" + "value": "アメリカン・ゴシック" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Čuda svetog Franje Ksaverskog" + "value": "Američka gotika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den hellige Frans Xaviers mirakler" + "value": "American Gothic" } }, "it": { "stringUnit": { "state": "translated", - "value": "I miracoli di san Francesco Saverio" + "value": "American Gothic" } }, "km": { "stringUnit": { "state": "translated", - "value": "អព្ភូតហេតុរបស់សន្តហ្វ្រង់ស៊ីស សាវីយេ" + "value": "American Gothic" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den hellige Frans Xaviers mirakler" + "value": "American Gothic" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Cuda św. Franciszka Ksawerego" + "value": "Amerykański gotyk" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Os Milagres de São Francisco Xavier" + "value": "Gótico Americano" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Чудеса святого Франциска Ксаверия" + "value": "Американская готика" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปาฏิหาริย์ของนักบุญฟรังซิสเซเวียร์" + "value": "อเมริกันโกธิก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Aziz Francis Xavier'in Mucizeleri" + "value": "Amerikan Gotiği" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Чудеса святого Франциска Ксаверія" + "value": "Американська готика" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Những phép lạ của Thánh Phanxicô Xaviê" + "value": "American Gothic" } } } }, - "backdrop.vermeer-pearl-earring.title": { + "backdrop.steinlen-chat-noir.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Girl with a Pearl Earring" + "value": "Tournée du Chat Noir" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das Mädchen mit dem Perlenohrgehänge" + "value": "Tournée du Chat Noir" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Jeune Fille à la perle" + "value": "Tournée du Chat Noir" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الفتاة ذات القرط اللؤلؤي" + "value": "جولة القط الأسود" } }, "es": { "stringUnit": { "state": "translated", - "value": "La joven de la perla" + "value": "Tournée du Chat Noir" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "戴珍珠耳環的少女" + "value": "黑貓巡演" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "戴珍珠耳环的少女" + "value": "黑猫巡演" } }, "ko": { "stringUnit": { "state": "translated", - "value": "진주 귀걸이를 한 소녀" + "value": "검은 고양이 순회공연" } }, "ja": { "stringUnit": { "state": "translated", - "value": "真珠の耳飾りの少女" + "value": "黒猫の巡業" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Djevojka s bisernom naušnicom" + "value": "Tournée du Chat Noir" } }, "da": { "stringUnit": { "state": "translated", - "value": "Pigen med perleøreringen" + "value": "Tournée du Chat Noir" } }, "it": { "stringUnit": { "state": "translated", - "value": "La ragazza con l'orecchino di perla" + "value": "Tournée du Chat Noir" } }, "km": { "stringUnit": { "state": "translated", - "value": "ក្មេងស្រីពាក់ក្រវិលគុជ" + "value": "Tournée du Chat Noir" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Piken med perleøredobben" + "value": "Tournée du Chat Noir" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Dziewczyna z perłą" + "value": "Tournée du Chat Noir" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Moça com Brinco de Pérola" + "value": "Tournée du Chat Noir" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Девушка с жемчужной серёжкой" + "value": "Tournée du Chat Noir" } }, "th": { "stringUnit": { "state": "translated", - "value": "หญิงสาวกับต่างหูมุก" + "value": "Tournée du Chat Noir" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İnci Küpeli Kız" + "value": "Tournée du Chat Noir" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дівчина з перловою сережкою" + "value": "Tournée du Chat Noir" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Thiếu nữ đeo hoa tai ngọc trai" + "value": "Tournée du Chat Noir" } } } }, - "backdrop.danielson-gambogi-self.title": { + "backdrop.degas-blue-dancers.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Self-Portrait" + "value": "Blue Dancers" } }, "de": { "stringUnit": { "state": "translated", - "value": "Selbstbildnis" + "value": "Blaue Tänzerinnen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Autoportrait" + "value": "Danseuses bleues" } }, "ar": { "stringUnit": { "state": "translated", - "value": "بورتريه ذاتي" + "value": "راقصات باللون الأزرق" } }, "es": { "stringUnit": { "state": "translated", - "value": "Autorretrato" + "value": "Bailarinas azules" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "自畫像" + "value": "藍色舞者" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "自画像" + "value": "蓝色舞者" } }, "ko": { "stringUnit": { "state": "translated", - "value": "자화상" + "value": "파란 옷의 무희들" } }, "ja": { "stringUnit": { "state": "translated", - "value": "自画像" + "value": "青い踊り子たち" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Autoportret" + "value": "Plave plesačice" } }, "da": { "stringUnit": { "state": "translated", - "value": "Selvportræt" + "value": "Blå danserinder" } }, "it": { "stringUnit": { "state": "translated", - "value": "Autoritratto" + "value": "Ballerine blu" } }, "km": { "stringUnit": { "state": "translated", - "value": "រូបខ្លួនឯង" + "value": "អ្នករាំពណ៌ខៀវ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Selvportrett" + "value": "Blå danserinner" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Autoportret" + "value": "Błękitne tancerki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Autorretrato" + "value": "Bailarinas Azuis" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Автопортрет" + "value": "Голубые танцовщицы" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภาพเหมือนตนเอง" + "value": "นักเต้นสีน้ำเงิน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Otoportre" + "value": "Mavi Dansçılar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Автопортрет" + "value": "Блакитні танцівниці" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chân dung tự họa" + "value": "Những vũ nữ xanh" } } } }, - "backdrop.beard-his-majesty.title": { + "backdrop.botticelli-primavera.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "His Majesty Receives" + "value": "Primavera" } }, "de": { "stringUnit": { "state": "translated", - "value": "Seine Majestät empfängt" + "value": "Primavera" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Sa Majesté reçoit" + "value": "Le Printemps" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جلالته يستقبل" + "value": "الربيع" } }, "es": { "stringUnit": { "state": "translated", - "value": "Su Majestad recibe" + "value": "La primavera" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "陛下接見" + "value": "春" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "陛下接见" + "value": "春" } }, "ko": { "stringUnit": { "state": "translated", - "value": "폐하의 접견" + "value": "프리마베라" } }, "ja": { "stringUnit": { "state": "translated", - "value": "陛下の謁見" + "value": "プリマヴェーラ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Njegovo veličanstvo prima" + "value": "Proljeće" } }, "da": { "stringUnit": { "state": "translated", - "value": "Hans Majestæt modtager" + "value": "Primavera" } }, "it": { "stringUnit": { "state": "translated", - "value": "Sua Maestà riceve" + "value": "Primavera" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្រះករុណាទទួលភ្ញៀវ" + "value": "ព្រីម៉ាវេរ៉ា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hans Majestet tar imot" + "value": "Primavera" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Jego Wysokość przyjmuje" + "value": "Wiosna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Sua Majestade Recebe" + "value": "Primavera" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Его величество принимает" + "value": "Весна" } }, "th": { "stringUnit": { "state": "translated", - "value": "ฝ่าบาททรงต้อนรับ" + "value": "พรีมาเวรา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Majesteleri Kabul Ediyor" + "value": "İlkbahar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Його величність приймає" + "value": "Весна" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Bệ hạ tiếp kiến" + "value": "Mùa xuân" } } } }, - "backdrop.marc-foxes.title": { + "backdrop.van-gogh-cafe-terrace.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Foxes" + "value": "Café Terrace at Night" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Füchse" + "value": "Caféterrasse am Abend" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Renards" + "value": "Terrasse du café le soir" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الثعالب" + "value": "شرفة المقهى في الليل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los zorros" + "value": "Terraza de café por la noche" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "狐狸" + "value": "夜間露天咖啡座" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "狐狸" + "value": "夜晚露天咖啡座" } }, "ko": { "stringUnit": { "state": "translated", - "value": "여우들" + "value": "밤의 카페 테라스" } }, "ja": { "stringUnit": { "state": "translated", - "value": "狐" + "value": "夜のカフェテラス" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lisice" + "value": "Terasa kafane noću" } }, "da": { "stringUnit": { "state": "translated", - "value": "Rævene" + "value": "Caféterrassen om aftenen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Le volpi" + "value": "Terrazza del caffè la sera" } }, "km": { "stringUnit": { "state": "translated", - "value": "សត្វកញ្ជ្រោង" + "value": "រានកាហ្វេពេលយប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Revene" + "value": "Kafeterrassen om kvelden" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Lisy" + "value": "Taras kawiarni w nocy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "As Raposas" + "value": "Terraço do Café à Noite" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Лисы" + "value": "Ночная терраса кафе" } }, "th": { "stringUnit": { "state": "translated", - "value": "หมาจิ้งจอก" + "value": "ระเบียงคาเฟ่ยามค่ำคืน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tilkiler" + "value": "Gece Kafe Terası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Лиси" + "value": "Нічна тераса кафе" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Những con cáo" + "value": "Hiên quán cà phê về đêm" } } } }, - "backdrop.degas-green-dancers.title": { + "backdrop.matisse-red-room.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Dancer in Green" + "value": "The Red Room" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tänzerin in Grün" + "value": "Das rote Zimmer" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Danseuse en vert" + "value": "La Chambre rouge" } }, "ar": { "stringUnit": { "state": "translated", - "value": "راقصة بالأخضر" + "value": "الغرفة الحمراء" } }, "es": { "stringUnit": { "state": "translated", - "value": "Bailarina de verde" + "value": "La habitación roja" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "綠衣舞者" + "value": "紅色的和諧" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "绿衣舞者" + "value": "红色的和谐" } }, "ko": { "stringUnit": { "state": "translated", - "value": "초록 옷의 무희" + "value": "붉은 방" } }, "ja": { "stringUnit": { "state": "translated", - "value": "緑の踊り子" + "value": "赤い部屋" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Plesačica u zelenom" + "value": "Crvena soba" } }, "da": { "stringUnit": { "state": "translated", - "value": "Danserinde i grønt" + "value": "Det røde rum" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ballerina in verde" + "value": "La stanza rossa" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នករាំក្នុងសម្លៀកបំពាក់ពណ៌បៃតង" + "value": "បន្ទប់ក្រហម" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Danserinne i grønt" + "value": "Det røde rommet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Tancerka w zieleni" + "value": "Czerwony pokój" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Bailarina de Verde" + "value": "O Quarto Vermelho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Танцовщица в зелёном" + "value": "Красная комната" } }, "th": { "stringUnit": { "state": "translated", - "value": "นักเต้นในชุดเขียว" + "value": "ห้องสีแดง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yeşilli Dansçı" + "value": "Kırmızı Oda" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Танцівниця в зеленому" + "value": "Червона кімната" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Vũ nữ áo xanh lục" + "value": "Căn phòng đỏ" } } } }, - "backdrop.modigliani-nude-divan.title": { + "backdrop.kandinsky-deepened-impulse.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Nude Sitting on a Divan" + "value": "Deepened Impulse" } }, "de": { "stringUnit": { "state": "translated", - "value": "Akt auf einem Diwan sitzend" + "value": "Vertiefte Regung" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nu assis sur un divan" + "value": "Impulsion approfondie" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عارية جالسة على أريكة" + "value": "الدافع العميق" } }, "es": { "stringUnit": { "state": "translated", - "value": "Desnudo sentado en un diván" + "value": "Impulso profundizado" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "坐在長沙發上的裸女" + "value": "深化的衝動" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "坐在长沙发上的裸女" + "value": "深化的冲动" } }, "ko": { "stringUnit": { "state": "translated", - "value": "소파에 앉은 나부" + "value": "깊어진 충동" } }, "ja": { "stringUnit": { "state": "translated", - "value": "長椅子に座る裸婦" + "value": "深まる衝動" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Akt koji sjedi na divanu" + "value": "Produbljeni impuls" } }, "da": { "stringUnit": { "state": "translated", - "value": "Nøgen siddende på en divan" + "value": "Uddybet impuls" } }, "it": { "stringUnit": { "state": "translated", - "value": "Nudo seduto su un divano" + "value": "Impulso approfondito" } }, "km": { "stringUnit": { "state": "translated", - "value": "រូបអាក្រាតអង្គុយលើសាឡុង" + "value": "កម្លាំងជំរុញដ៏ជ្រៅ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Naken sittende på en divan" + "value": "Fordypet impuls" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Akt siedzący na sofie" + "value": "Pogłębiony impuls" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Nu Sentado num Divã" + "value": "Impulso Aprofundado" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Обнажённая, сидящая на диване" + "value": "Углублённый импульс" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภาพเปลือยนั่งบนเก้าอี้ยาว" + "value": "แรงกระตุ้นอันลึกซึ้ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Divanda Oturan Çıplak" + "value": "Derinleşen Dürtü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Оголена, що сидить на дивані" + "value": "Поглиблений імпульс" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Thiếu nữ khỏa thân ngồi trên trường kỷ" + "value": "Xung lực sâu sắc" } } } }, - "backdrop.raphael-sistine-madonna.title": { + "backdrop.friedrich-wanderer.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sistine Madonna" + "value": "Wanderer above the Sea of Fog" } }, "de": { "stringUnit": { "state": "translated", - "value": "Sixtinische Madonna" + "value": "Der Wanderer über dem Nebelmeer" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Madone Sixtine" + "value": "Le Voyageur contemplant une mer de nuages" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مادونا سيستينا" + "value": "المتجول فوق بحر الضباب" } }, "es": { "stringUnit": { "state": "translated", - "value": "Madonna Sixtina" + "value": "El caminante sobre el mar de nubes" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "西斯汀聖母" + "value": "霧海上的旅人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "西斯廷圣母" + "value": "雾海上的旅人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "시스티나 성모" + "value": "안개 바다 위의 방랑자" } }, "ja": { "stringUnit": { "state": "translated", - "value": "システィーナの聖母" + "value": "雲海の上の旅人" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sikstinska Madona" + "value": "Lutalica iznad mora magle" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den sixtinske Madonna" + "value": "Vandreren over tågehavet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Madonna Sistina" + "value": "Viandante sul mare di nebbia" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ាដូណាស៊ីស្ទីន" + "value": "អ្នកដើរលើសមុទ្រអ័ព្ទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den sixtinske madonna" + "value": "Vandreren over tåkehavet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Madonna Sykstyńska" + "value": "Wędrowiec nad morzem mgły" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Madona Sistina" + "value": "O Viajante sobre o Mar de Névoa" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сикстинская мадонна" + "value": "Странник над морем тумана" } }, "th": { "stringUnit": { "state": "translated", - "value": "พระแม่ซิสทีน" + "value": "นักเดินทางเหนือทะเลหมอก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sistina Madonnası" + "value": "Sis Denizi Üzerindeki Gezgin" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сікстинська мадонна" + "value": "Мандрівник над морем туману" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đức Mẹ Sistine" + "value": "Kẻ lang thang trên biển sương mù" } } } }, - "backdrop.bouguereau-virgin-lilies.title": { + "backdrop.klimt-adele.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Virgin of the Lilies" + "value": "Adele Bloch-Bauer I" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Jungfrau mit den Lilien" + "value": "Adele Bloch-Bauer I" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Vierge au lys" + "value": "Adele Bloch-Bauer I" } }, "ar": { "stringUnit": { "state": "translated", - "value": "العذراء والزنابق" + "value": "أديل بلوخ باور الأولى" } }, "es": { "stringUnit": { "state": "translated", - "value": "La Virgen de los lirios" + "value": "Adele Bloch-Bauer I" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "百合聖母" + "value": "艾蒂爾·布洛赫-鮑爾肖像一號" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "百合圣母" + "value": "阿黛尔·布洛赫-鲍尔肖像一号" } }, "ko": { "stringUnit": { "state": "translated", - "value": "백합의 성모" + "value": "아델레 블로흐바우어의 초상 1" } }, "ja": { "stringUnit": { "state": "translated", - "value": "百合の聖母" + "value": "アデーレ・ブロッホ=バウアーの肖像 I" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Djevica s ljiljanima" + "value": "Adele Bloch-Bauer I" } }, "da": { "stringUnit": { "state": "translated", - "value": "Jomfruen med liljerne" + "value": "Adele Bloch-Bauer I" } }, "it": { "stringUnit": { "state": "translated", - "value": "La Vergine dei gigli" + "value": "Ritratto di Adele Bloch-Bauer I" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្រះនាងព្រហ្មចារីនៃផ្កាលីលី" + "value": "អាដែល ប្លុក-បាវើរ I" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Jomfruen med liljene" + "value": "Adele Bloch-Bauer I" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Madonna z liliami" + "value": "Portret Adele Bloch-Bauer I" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Virgem dos Lírios" + "value": "Adele Bloch-Bauer I" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Дева с лилиями" + "value": "Портрет Адели Блох-Бауэр I" } }, "th": { "stringUnit": { "state": "translated", - "value": "พระแม่พรหมจารีกับดอกลิลลี่" + "value": "อาเดเล บล็อค-บาวเออร์ I" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Zambaklı Meryem" + "value": "Adele Bloch-Bauer I" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Діва з ліліями" + "value": "Портрет Аделі Блох-Бауер I" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đức Trinh Nữ với hoa huệ" + "value": "Adele Bloch-Bauer I" } } } }, - "backdrop.wood-american-gothic.title": { + "backdrop.mucha-job.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } }, "de": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } }, "fr": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } }, "ar": { "stringUnit": { "state": "translated", - "value": "القوطية الأمريكية" + "value": "جوب" } }, "es": { "stringUnit": { "state": "translated", - "value": "Gótico estadounidense" + "value": "Job" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "美國哥德式" + "value": "JOB" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "美国哥特式" + "value": "JOB" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아메리칸 고딕" + "value": "JOB" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アメリカン・ゴシック" + "value": "ジョブ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Američka gotika" + "value": "Job" } }, "da": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } }, "it": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } }, "km": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } }, "nb": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Amerykański gotyk" + "value": "Job" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Gótico Americano" + "value": "Job" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Американская готика" + "value": "Job" } }, "th": { "stringUnit": { "state": "translated", - "value": "อเมริกันโกธิก" + "value": "Job" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Amerikan Gotiği" + "value": "Job" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Американська готика" + "value": "Job" } }, "vi": { "stringUnit": { "state": "translated", - "value": "American Gothic" + "value": "Job" } } } }, - "backdrop.steinlen-chat-noir.title": { + "backdrop.van-gogh-starry-night.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "The Starry Night" } }, "de": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Die Sternennacht" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "La Nuit étoilée" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جولة القط الأسود" + "value": "ليلة النجوم" } }, "es": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "La noche estrellada" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "黑貓巡演" + "value": "星夜" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "黑猫巡演" + "value": "星月夜" } }, "ko": { "stringUnit": { "state": "translated", - "value": "검은 고양이 순회공연" + "value": "별이 빛나는 밤" } }, "ja": { "stringUnit": { "state": "translated", - "value": "黒猫の巡業" + "value": "星月夜" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Zvjezdana noć" } }, "da": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Stjernenatten" } }, "it": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Notte stellata" } }, "km": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "រាត្រីពោរពេញដោយផ្កាយ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Stjernenatt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Gwiaździsta noc" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "A Noite Estrelada" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Звёздная ночь" } }, "th": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "ราตรีประดับดาว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Yıldızlı Gece" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Зоряна ніч" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Tournée du Chat Noir" + "value": "Đêm đầy sao" } } } }, - "backdrop.degas-blue-dancers.title": { + "backdrop.klimt-tree-of-life.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Blue Dancers" + "value": "The Tree of Life" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blaue Tänzerinnen" + "value": "Der Lebensbaum" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Danseuses bleues" + "value": "L'Arbre de vie" } }, "ar": { "stringUnit": { "state": "translated", - "value": "راقصات باللون الأزرق" + "value": "شجرة الحياة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Bailarinas azules" + "value": "El árbol de la vida" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "藍色舞者" + "value": "生命之樹" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "蓝色舞者" + "value": "生命之树" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파란 옷의 무희들" + "value": "생명의 나무" } }, "ja": { "stringUnit": { "state": "translated", - "value": "青い踊り子たち" + "value": "生命の樹" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Plave plesačice" + "value": "Drvo života" } }, "da": { "stringUnit": { "state": "translated", - "value": "Blå danserinder" + "value": "Livets træ" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ballerine blu" + "value": "L'albero della vita" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នករាំពណ៌ខៀវ" + "value": "ដើមឈើនៃជីវិត" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Blå danserinner" + "value": "Livets tre" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Błękitne tancerki" + "value": "Drzewo życia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Bailarinas Azuis" + "value": "A Árvore da Vida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Голубые танцовщицы" + "value": "Древо жизни" } }, "th": { "stringUnit": { "state": "translated", - "value": "นักเต้นสีน้ำเงิน" + "value": "ต้นไม้แห่งชีวิต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Mavi Dansçılar" + "value": "Hayat Ağacı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Блакитні танцівниці" + "value": "Дерево життя" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Những vũ nữ xanh" + "value": "Cây sự sống" } } } }, - "backdrop.botticelli-primavera.title": { + "backdrop.klimt-the-kiss.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "The Kiss" } }, "de": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "Der Kuss" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Printemps" + "value": "Le Baiser" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الربيع" + "value": "القبلة" } }, "es": { "stringUnit": { "state": "translated", - "value": "La primavera" + "value": "El beso" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "春" + "value": "吻" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "春" + "value": "吻" } }, "ko": { "stringUnit": { "state": "translated", - "value": "프리마베라" + "value": "키스" } }, "ja": { "stringUnit": { "state": "translated", - "value": "プリマヴェーラ" + "value": "接吻" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Proljeće" + "value": "Poljubac" } }, "da": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "Kysset" } }, "it": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "Il bacio" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្រីម៉ាវេរ៉ា" + "value": "ការថើប" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "Kysset" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wiosna" + "value": "Pocałunek" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "O Beijo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Весна" + "value": "Поцелуй" } }, "th": { "stringUnit": { "state": "translated", - "value": "พรีมาเวรา" + "value": "จุมพิต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İlkbahar" + "value": "Öpücük" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Весна" + "value": "Поцілунок" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Mùa xuân" + "value": "Nụ hôn" } } } }, - "backdrop.van-gogh-cafe-terrace.title": { + "backdrop.van-gogh-starry-night-rhone.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Café Terrace at Night" + "value": "Starry Night over the Rhône" } }, "de": { "stringUnit": { "state": "translated", - "value": "Caféterrasse am Abend" + "value": "Sternennacht über der Rhône" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Terrasse du café le soir" + "value": "Nuit étoilée sur le Rhône" } }, "ar": { "stringUnit": { "state": "translated", - "value": "شرفة المقهى في الليل" + "value": "ليلة مرصعة بالنجوم فوق الرون" } }, "es": { "stringUnit": { "state": "translated", - "value": "Terraza de café por la noche" + "value": "Noche estrellada sobre el Ródano" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "夜間露天咖啡座" + "value": "隆河上的星夜" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "夜晚露天咖啡座" + "value": "罗讷河上的星夜" } }, "ko": { "stringUnit": { "state": "translated", - "value": "밤의 카페 테라스" + "value": "론강의 별이 빛나는 밤" } }, "ja": { "stringUnit": { "state": "translated", - "value": "夜のカフェテラス" + "value": "ローヌ川の星月夜" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Terasa kafane noću" + "value": "Zvjezdana noć nad Ronom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Caféterrassen om aftenen" + "value": "Stjernenat over Rhône" } }, "it": { "stringUnit": { "state": "translated", - "value": "Terrazza del caffè la sera" + "value": "Notte stellata sul Rodano" } }, "km": { "stringUnit": { "state": "translated", - "value": "រានកាហ្វេពេលយប់" + "value": "រាត្រីផ្កាយលើទន្លេរ៉ូន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kafeterrassen om kvelden" + "value": "Stjernenatt over Rhône" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Taras kawiarni w nocy" + "value": "Gwiaździsta noc nad Rodanem" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Terraço do Café à Noite" + "value": "Noite Estrelada sobre o Ródano" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ночная терраса кафе" + "value": "Звёздная ночь над Роной" } }, "th": { "stringUnit": { "state": "translated", - "value": "ระเบียงคาเฟ่ยามค่ำคืน" + "value": "ราตรีประดับดาวเหนือแม่น้ำโรน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gece Kafe Terası" + "value": "Rhône Üzerinde Yıldızlı Gece" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Нічна тераса кафе" + "value": "Зоряна ніч над Роною" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hiên quán cà phê về đêm" + "value": "Đêm đầy sao trên sông Rhône" } } } }, - "backdrop.matisse-red-room.title": { + "backdrop.delacroix-liberty.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Red Room" + "value": "Liberty Leading the People" } }, "de": { "stringUnit": { "state": "translated", - "value": "Das rote Zimmer" + "value": "Die Freiheit führt das Volk" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Chambre rouge" + "value": "La Liberté guidant le peuple" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الغرفة الحمراء" + "value": "الحرية تقود الشعب" } }, "es": { "stringUnit": { "state": "translated", - "value": "La habitación roja" + "value": "La Libertad guiando al pueblo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "紅色的和諧" + "value": "自由引導人民" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "红色的和谐" + "value": "自由引导人民" } }, "ko": { "stringUnit": { "state": "translated", - "value": "붉은 방" + "value": "민중을 이끄는 자유의 여신" } }, "ja": { "stringUnit": { "state": "translated", - "value": "赤い部屋" + "value": "民衆を導く自由の女神" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Crvena soba" + "value": "Sloboda predvodi narod" } }, "da": { "stringUnit": { "state": "translated", - "value": "Det røde rum" + "value": "Friheden fører folket" } }, "it": { "stringUnit": { "state": "translated", - "value": "La stanza rossa" + "value": "La Libertà che guida il popolo" } }, "km": { "stringUnit": { "state": "translated", - "value": "បន្ទប់ក្រហម" + "value": "សេរីភាពដឹកនាំប្រជាជន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Det røde rommet" + "value": "Friheten leder folket" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Czerwony pokój" + "value": "Wolność wiodąca lud na barykady" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Quarto Vermelho" + "value": "A Liberdade Guiando o Povo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Красная комната" + "value": "Свобода, ведущая народ" } }, "th": { "stringUnit": { "state": "translated", - "value": "ห้องสีแดง" + "value": "เสรีภาพนำประชาชน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kırmızı Oda" + "value": "Halka Yol Gösteren Özgürlük" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Червона кімната" + "value": "Свобода, що веде народ" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Căn phòng đỏ" + "value": "Nữ thần Tự do dẫn dắt nhân dân" } } } }, - "backdrop.kandinsky-deepened-impulse.title": { + "backdrop.van-gogh-sunflowers.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Deepened Impulse" + "value": "Sunflowers" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vertiefte Regung" + "value": "Sonnenblumen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impulsion approfondie" + "value": "Les Tournesols" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الدافع العميق" + "value": "عباد الشمس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Impulso profundizado" + "value": "Los girasoles" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "深化的衝動" + "value": "向日葵" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "深化的冲动" + "value": "向日葵" } }, "ko": { "stringUnit": { "state": "translated", - "value": "깊어진 충동" + "value": "해바라기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "深まる衝動" + "value": "ひまわり" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Produbljeni impuls" + "value": "Suncokreti" } }, "da": { "stringUnit": { "state": "translated", - "value": "Uddybet impuls" + "value": "Solsikker" } }, "it": { "stringUnit": { "state": "translated", - "value": "Impulso approfondito" + "value": "I girasoli" } }, "km": { "stringUnit": { "state": "translated", - "value": "កម្លាំងជំរុញដ៏ជ្រៅ" + "value": "ផ្កាឈូករ័ត្ន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fordypet impuls" + "value": "Solsikker" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pogłębiony impuls" + "value": "Słoneczniki" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Impulso Aprofundado" + "value": "Os Girassóis" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Углублённый импульс" + "value": "Подсолнухи" } }, "th": { "stringUnit": { "state": "translated", - "value": "แรงกระตุ้นอันลึกซึ้ง" + "value": "ดอกทานตะวัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Derinleşen Dürtü" + "value": "Ayçiçekleri" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Поглиблений імпульс" + "value": "Соняшники" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Xung lực sâu sắc" + "value": "Hoa hướng dương" } } } }, - "backdrop.friedrich-wanderer.title": { + "backdrop.klimt-mada-primavesi.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wanderer above the Sea of Fog" + "value": "Mäda Primavesi" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Wanderer über dem Nebelmeer" + "value": "Mäda Primavesi" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Voyageur contemplant une mer de nuages" + "value": "Mäda Primavesi" } }, "ar": { "stringUnit": { "state": "translated", - "value": "المتجول فوق بحر الضباب" + "value": "مادا بريمافيزي" } }, "es": { "stringUnit": { "state": "translated", - "value": "El caminante sobre el mar de nubes" + "value": "Mäda Primavesi" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "霧海上的旅人" + "value": "瑪達·普里馬韋西" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "雾海上的旅人" + "value": "玛达·普里马韦西" } }, "ko": { "stringUnit": { "state": "translated", - "value": "안개 바다 위의 방랑자" + "value": "메다 프리마베시" } }, "ja": { "stringUnit": { "state": "translated", - "value": "雲海の上の旅人" + "value": "メーダ・プリマヴェージ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lutalica iznad mora magle" + "value": "Mäda Primavesi" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vandreren over tågehavet" + "value": "Mäda Primavesi" } }, "it": { "stringUnit": { "state": "translated", - "value": "Viandante sul mare di nebbia" + "value": "Mäda Primavesi" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកដើរលើសមុទ្រអ័ព្ទ" + "value": "ម៉ែដា ព្រីម៉ាវេស៊ី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vandreren over tåkehavet" + "value": "Mäda Primavesi" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wędrowiec nad morzem mgły" + "value": "Mäda Primavesi" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Viajante sobre o Mar de Névoa" + "value": "Mäda Primavesi" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Странник над морем тумана" + "value": "Мэда Примавези" } }, "th": { "stringUnit": { "state": "translated", - "value": "นักเดินทางเหนือทะเลหมอก" + "value": "เมดา พรีมาเวซี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sis Denizi Üzerindeki Gezgin" + "value": "Mäda Primavesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Мандрівник над морем туману" + "value": "Меда Прімавезі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Kẻ lang thang trên biển sương mù" + "value": "Mäda Primavesi" } } } }, - "backdrop.klimt-adele.title": { + "backdrop.schiele-kneeling-orange.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Kneeling Woman in Orange-Red Dress" } }, "de": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Kniende in orangerotem Kleid" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Femme agenouillée en robe rouge orangé" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أديل بلوخ باور الأولى" + "value": "امرأة راكعة بفستان برتقالي أحمر" } }, "es": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Mujer arrodillada con vestido rojo anaranjado" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "艾蒂爾·布洛赫-鮑爾肖像一號" + "value": "穿橙紅色衣裙的跪姿女子" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "阿黛尔·布洛赫-鲍尔肖像一号" + "value": "穿橙红色衣裙的跪姿女子" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아델레 블로흐바우어의 초상 1" + "value": "주홍 드레스를 입고 무릎 꿇은 여인" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アデーレ・ブロッホ=バウアーの肖像 I" + "value": "オレンジ色の服でひざまずく女" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Klečeća žena u narandžasto-crvenoj haljini" } }, "da": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Knælende kvinde i orangerød kjole" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ritratto di Adele Bloch-Bauer I" + "value": "Donna inginocchiata in abito rosso-arancio" } }, "km": { "stringUnit": { "state": "translated", - "value": "អាដែល ប្លុក-បាវើរ I" + "value": "ស្ត្រីលុតជង្គង់ក្នុងរ៉ូបពណ៌ទឹកក្រូចក្រហម" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Knelende kvinne i oransjerød kjole" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Portret Adele Bloch-Bauer I" + "value": "Klęcząca kobieta w pomarańczowoczerwonej sukni" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Mulher Ajoelhada em Vestido Vermelho-Alaranjado" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Портрет Адели Блох-Бауэр I" + "value": "Коленопреклонённая женщина в оранжево-красном платье" } }, "th": { "stringUnit": { "state": "translated", - "value": "อาเดเล บล็อค-บาวเออร์ I" + "value": "หญิงคุกเข่าในชุดสีส้มแดง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Turuncu-Kırmızı Elbiseli Diz Çökmüş Kadın" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Портрет Аделі Блох-Бауер I" + "value": "Жінка на колінах в оранжево-червоній сукні" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Adele Bloch-Bauer I" + "value": "Người phụ nữ quỳ trong váy đỏ cam" } } } }, - "backdrop.mucha-job.title": { + "backdrop.van-gogh-sunflowers-munich.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vase with Twelve Sunflowers" } }, "de": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vase mit zwölf Sonnenblumen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vase avec douze tournesols" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جوب" + "value": "مزهرية بها اثنتا عشرة زهرة عباد الشمس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Jarrón con doce girasoles" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "JOB" + "value": "花瓶裡的十二朵向日葵" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "JOB" + "value": "花瓶里的十二朵向日葵" } }, "ko": { "stringUnit": { "state": "translated", - "value": "JOB" + "value": "열두 송이 해바라기가 있는 꽃병" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ジョブ" + "value": "12本のひまわり" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vaza s dvanaest suncokreta" } }, "da": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vase med tolv solsikker" } }, "it": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vaso con dodici girasoli" } }, "km": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "ថូផ្កាឈូករ័ត្នដប់ពីរទង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vase med tolv solsikker" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Wazon z dwunastoma słonecznikami" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Vaso com Doze Girassóis" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Ваза с двенадцатью подсолнухами" } }, "th": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "แจกันดอกทานตะวันสิบสองดอก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "On İki Ayçiçekli Vazo" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Ваза з дванадцятьма соняшниками" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Job" + "value": "Bình mười hai bông hướng dương" } } } }, - "backdrop.van-gogh-starry-night.title": { + "backdrop.michelangelo-sistine-ceiling.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Starry Night" + "value": "The Sistine Chapel Ceiling" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Sternennacht" + "value": "Die Decke der Sixtinischen Kapelle" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Nuit étoilée" + "value": "Le Plafond de la chapelle Sixtine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ليلة النجوم" + "value": "سقف كنيسة سيستينا" } }, "es": { "stringUnit": { "state": "translated", - "value": "La noche estrellada" + "value": "La bóveda de la Capilla Sixtina" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "星夜" + "value": "西斯汀禮拜堂天頂畫" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "星月夜" + "value": "西斯廷礼拜堂天顶画" } }, "ko": { "stringUnit": { "state": "translated", - "value": "별이 빛나는 밤" + "value": "시스티나 성당 천장화" } }, "ja": { "stringUnit": { "state": "translated", - "value": "星月夜" + "value": "システィーナ礼拝堂天井画" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zvjezdana noć" + "value": "Strop Sikstinske kapele" } }, "da": { "stringUnit": { "state": "translated", - "value": "Stjernenatten" + "value": "Det Sixtinske Kapels loft" } }, "it": { "stringUnit": { "state": "translated", - "value": "Notte stellata" + "value": "La volta della Cappella Sistina" } }, "km": { "stringUnit": { "state": "translated", - "value": "រាត្រីពោរពេញដោយផ្កាយ" + "value": "ពិដានវិហារស៊ីស្ទីន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Stjernenatt" + "value": "Taket i Det sixtinske kapell" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Gwiaździsta noc" + "value": "Sklepienie Kaplicy Sykstyńskiej" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Noite Estrelada" + "value": "O Teto da Capela Sistina" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Звёздная ночь" + "value": "Потолок Сикстинской капеллы" } }, "th": { "stringUnit": { "state": "translated", - "value": "ราตรีประดับดาว" + "value": "เพดานโบสถ์น้อยซิสทีน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Yıldızlı Gece" + "value": "Sistina Şapeli Tavanı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зоряна ніч" + "value": "Стеля Сікстинської капели" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đêm đầy sao" + "value": "Trần nhà nguyện Sistine" } } } }, - "backdrop.klimt-tree-of-life.title": { + "backdrop.mondrian-composition-red-plane.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Tree of Life" + "value": "Composition with Large Red Plane" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Lebensbaum" + "value": "Komposition mit großer roter Fläche" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Arbre de vie" + "value": "Composition avec grand plan rouge" } }, "ar": { "stringUnit": { "state": "translated", - "value": "شجرة الحياة" + "value": "تكوين مع مستوى أحمر كبير" } }, "es": { "stringUnit": { "state": "translated", - "value": "El árbol de la vida" + "value": "Composición con gran plano rojo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "生命之樹" + "value": "大紅色平面構成" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "生命之树" + "value": "大红色平面构成" } }, "ko": { "stringUnit": { "state": "translated", - "value": "생명의 나무" + "value": "큰 빨강 면이 있는 구성" } }, "ja": { "stringUnit": { "state": "translated", - "value": "生命の樹" + "value": "大きな赤の平面のあるコンポジション" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Drvo života" + "value": "Kompozicija s velikom crvenom plohom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Livets træ" + "value": "Komposition med stort rødt felt" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'albero della vita" + "value": "Composizione con grande piano rosso" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដើមឈើនៃជីវិត" + "value": "សមាសភាពជាមួយផ្ទៃក្រហមធំ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Livets tre" + "value": "Komposisjon med stort rødt felt" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Drzewo życia" + "value": "Kompozycja z dużą czerwoną płaszczyzną" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Árvore da Vida" + "value": "Composição com Grande Plano Vermelho" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Древо жизни" + "value": "Композиция с большой красной плоскостью" } }, "th": { "stringUnit": { "state": "translated", - "value": "ต้นไม้แห่งชีวิต" + "value": "องค์ประกอบกับระนาบสีแดงขนาดใหญ่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hayat Ağacı" + "value": "Büyük Kırmızı Düzlemli Kompozisyon" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дерево життя" + "value": "Композиція з великою червоною площиною" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cây sự sống" + "value": "Bố cục với mảng đỏ lớn" } } } }, - "backdrop.klimt-the-kiss.title": { + "backdrop.lemoyne-apotheosis-hercules.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Kiss" + "value": "The Apotheosis of Hercules" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Kuss" + "value": "Die Apotheose des Herkules" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Baiser" + "value": "L'Apothéose d'Hercule" } }, "ar": { "stringUnit": { "state": "translated", - "value": "القبلة" + "value": "تأليه هرقل" } }, "es": { "stringUnit": { "state": "translated", - "value": "El beso" + "value": "La apoteosis de Hércules" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "吻" + "value": "海克力斯的神化" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "吻" + "value": "赫拉克勒斯的封神" } }, "ko": { "stringUnit": { "state": "translated", - "value": "키스" + "value": "헤라클레스의 신격화" } }, "ja": { "stringUnit": { "state": "translated", - "value": "接吻" + "value": "ヘラクレスの神格化" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Poljubac" + "value": "Apoteoza Herkula" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kysset" + "value": "Herkules' apoteose" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il bacio" + "value": "L'apoteosi di Ercole" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការថើប" + "value": "ការលើកតម្កើងហឺគ្យូលីស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kysset" + "value": "Herkules' apoteose" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pocałunek" + "value": "Apoteoza Herkulesa" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Beijo" + "value": "A Apoteose de Hércules" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Поцелуй" + "value": "Апофеоз Геркулеса" } }, "th": { "stringUnit": { "state": "translated", - "value": "จุมพิต" + "value": "อภิเทวภาพของเฮอร์คิวลีส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Öpücük" + "value": "Herkül'ün Apoteozu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Поцілунок" + "value": "Апофеоз Геркулеса" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Nụ hôn" + "value": "Sự tôn vinh Hercules" } } } }, - "backdrop.van-gogh-starry-night-rhone.title": { + "backdrop.schiele-moa.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Starry Night over the Rhône" + "value": "Moa" } }, "de": { "stringUnit": { "state": "translated", - "value": "Sternennacht über der Rhône" + "value": "Moa" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nuit étoilée sur le Rhône" + "value": "Moa" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ليلة مرصعة بالنجوم فوق الرون" + "value": "موا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Noche estrellada sobre el Ródano" + "value": "Moa" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "隆河上的星夜" + "value": "莫阿" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "罗讷河上的星夜" + "value": "莫阿" } }, "ko": { "stringUnit": { "state": "translated", - "value": "론강의 별이 빛나는 밤" + "value": "모아" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ローヌ川の星月夜" + "value": "モア" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zvjezdana noć nad Ronom" + "value": "Moa" } }, "da": { "stringUnit": { "state": "translated", - "value": "Stjernenat over Rhône" + "value": "Moa" } }, "it": { "stringUnit": { "state": "translated", - "value": "Notte stellata sul Rodano" + "value": "Moa" } }, "km": { "stringUnit": { "state": "translated", - "value": "រាត្រីផ្កាយលើទន្លេរ៉ូន" + "value": "ម៉ូអា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Stjernenatt over Rhône" + "value": "Moa" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Gwiaździsta noc nad Rodanem" + "value": "Moa" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Noite Estrelada sobre o Ródano" + "value": "Moa" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Звёздная ночь над Роной" + "value": "Моа" } }, "th": { "stringUnit": { "state": "translated", - "value": "ราตรีประดับดาวเหนือแม่น้ำโรน" + "value": "โมอา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Rhône Üzerinde Yıldızlı Gece" + "value": "Moa" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зоряна ніч над Роною" + "value": "Моа" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đêm đầy sao trên sông Rhône" + "value": "Moa" } } } }, - "backdrop.delacroix-liberty.title": { + "backdrop.aivazovsky-ninth-wave.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Liberty Leading the People" + "value": "The Ninth Wave" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Freiheit führt das Volk" + "value": "Die neunte Woge" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Liberté guidant le peuple" + "value": "La Neuvième Vague" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الحرية تقود الشعب" + "value": "الموجة التاسعة" } }, "es": { "stringUnit": { "state": "translated", - "value": "La Libertad guiando al pueblo" + "value": "La novena ola" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "自由引導人民" + "value": "第九濤" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "自由引导人民" + "value": "九级浪" } }, "ko": { "stringUnit": { "state": "translated", - "value": "민중을 이끄는 자유의 여신" + "value": "아홉 번째 파도" } }, "ja": { "stringUnit": { "state": "translated", - "value": "民衆を導く自由の女神" + "value": "第九の怒濤" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sloboda predvodi narod" + "value": "Deveti val" } }, "da": { "stringUnit": { "state": "translated", - "value": "Friheden fører folket" + "value": "Den niende bølge" } }, "it": { "stringUnit": { "state": "translated", - "value": "La Libertà che guida il popolo" + "value": "La nona onda" } }, "km": { "stringUnit": { "state": "translated", - "value": "សេរីភាពដឹកនាំប្រជាជន" + "value": "រលកទីប្រាំបួន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Friheten leder folket" + "value": "Den niende bølgen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wolność wiodąca lud na barykady" + "value": "Dziewiąta fala" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Liberdade Guiando o Povo" + "value": "A Nona Onda" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Свобода, ведущая народ" + "value": "Девятый вал" } }, "th": { "stringUnit": { "state": "translated", - "value": "เสรีภาพนำประชาชน" + "value": "คลื่นลูกที่เก้า" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Halka Yol Gösteren Özgürlük" + "value": "Dokuzuncu Dalga" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Свобода, що веде народ" + "value": "Дев'ятий вал" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Nữ thần Tự do dẫn dắt nhân dân" + "value": "Con sóng thứ chín" } } } }, - "backdrop.van-gogh-sunflowers.title": { + "backdrop.popova-painterly-architectonic.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Sunflowers" + "value": "Painterly Architectonic" } }, "de": { "stringUnit": { "state": "translated", - "value": "Sonnenblumen" + "value": "Malerische Architektonik" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Tournesols" + "value": "Architectonique picturale" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عباد الشمس" + "value": "معمارية تصويرية" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los girasoles" + "value": "Arquitectónica pictórica" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "向日葵" + "value": "繪畫式建築結構" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "向日葵" + "value": "绘画式建筑结构" } }, "ko": { "stringUnit": { "state": "translated", - "value": "해바라기" + "value": "회화적 건축 구성" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ひまわり" + "value": "絵画的建築術" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Suncokreti" + "value": "Slikarska arhitektonika" } }, "da": { "stringUnit": { "state": "translated", - "value": "Solsikker" + "value": "Malerisk arkitektonik" } }, "it": { "stringUnit": { "state": "translated", - "value": "I girasoli" + "value": "Architettonica pittorica" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាឈូករ័ត្ន" + "value": "ស្ថាបត្យកម្មគំនូរ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Solsikker" + "value": "Malerisk arkitektonikk" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Słoneczniki" + "value": "Architektonika malarska" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Os Girassóis" + "value": "Arquitetônica Pictórica" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Подсолнухи" + "value": "Живописная архитектоника" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกทานตะวัน" + "value": "สถาปัตยกรรมเชิงจิตรกรรม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ayçiçekleri" + "value": "Resimsel Mimari" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Соняшники" + "value": "Живописна архітектоніка" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa hướng dương" + "value": "Kiến trúc hội họa" } } } }, - "backdrop.klimt-mada-primavesi.title": { + "backdrop.bruegel-tower-babel.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "The Tower of Babel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "Der Turmbau zu Babel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "La Tour de Babel" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مادا بريمافيزي" + "value": "برج بابل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "La torre de Babel" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瑪達·普里馬韋西" + "value": "巴別塔" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "玛达·普里马韦西" + "value": "巴别塔" } }, "ko": { "stringUnit": { "state": "translated", - "value": "메다 프리마베시" + "value": "바벨탑" } }, "ja": { "stringUnit": { "state": "translated", - "value": "メーダ・プリマヴェージ" + "value": "バベルの塔" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "Babilonska kula" } }, "da": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "Babelstårnet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "La Torre di Babele" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ែដា ព្រីម៉ាវេស៊ី" + "value": "ប៉មបាបិល" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "Babels tårn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "Wieża Babel" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "A Torre de Babel" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Мэда Примавези" + "value": "Вавилонская башня" } }, "th": { "stringUnit": { "state": "translated", - "value": "เมดา พรีมาเวซี" + "value": "หอคอยบาเบล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "Babil Kulesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Меда Прімавезі" + "value": "Вавилонська вежа" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Mäda Primavesi" + "value": "Tháp Babel" } } } }, - "backdrop.schiele-kneeling-orange.title": { + "backdrop.botticelli-birth-of-venus.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Kneeling Woman in Orange-Red Dress" + "value": "The Birth of Venus" } }, "de": { "stringUnit": { "state": "translated", - "value": "Kniende in orangerotem Kleid" + "value": "Die Geburt der Venus" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Femme agenouillée en robe rouge orangé" + "value": "La Naissance de Vénus" } }, "ar": { "stringUnit": { "state": "translated", - "value": "امرأة راكعة بفستان برتقالي أحمر" + "value": "مولد فينوس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mujer arrodillada con vestido rojo anaranjado" + "value": "El nacimiento de Venus" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "穿橙紅色衣裙的跪姿女子" + "value": "維納斯的誕生" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "穿橙红色衣裙的跪姿女子" + "value": "维纳斯的诞生" } }, "ko": { "stringUnit": { "state": "translated", - "value": "주홍 드레스를 입고 무릎 꿇은 여인" + "value": "비너스의 탄생" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オレンジ色の服でひざまずく女" + "value": "ヴィーナスの誕生" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Klečeća žena u narandžasto-crvenoj haljini" + "value": "Rođenje Venere" } }, "da": { "stringUnit": { "state": "translated", - "value": "Knælende kvinde i orangerød kjole" + "value": "Venus' fødsel" } }, "it": { "stringUnit": { "state": "translated", - "value": "Donna inginocchiata in abito rosso-arancio" + "value": "La nascita di Venere" } }, "km": { "stringUnit": { "state": "translated", - "value": "ស្ត្រីលុតជង្គង់ក្នុងរ៉ូបពណ៌ទឹកក្រូចក្រហម" + "value": "កំណើតរបស់វីនុស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Knelende kvinne i oransjerød kjole" + "value": "Venus' fødsel" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Klęcząca kobieta w pomarańczowoczerwonej sukni" + "value": "Narodziny Wenus" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mulher Ajoelhada em Vestido Vermelho-Alaranjado" + "value": "O Nascimento de Vênus" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Коленопреклонённая женщина в оранжево-красном платье" + "value": "Рождение Венеры" } }, "th": { "stringUnit": { "state": "translated", - "value": "หญิงคุกเข่าในชุดสีส้มแดง" + "value": "กำเนิดวีนัส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Turuncu-Kırmızı Elbiseli Diz Çökmüş Kadın" + "value": "Venüs'ün Doğuşu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Жінка на колінах в оранжево-червоній сукні" + "value": "Народження Венери" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Người phụ nữ quỳ trong váy đỏ cam" + "value": "Sự ra đời của thần Vệ Nữ" } } } }, - "backdrop.van-gogh-sunflowers-munich.title": { + "backdrop.kandinsky-yellow-red-blue.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Vase with Twelve Sunflowers" + "value": "Yellow-Red-Blue" } }, "de": { "stringUnit": { "state": "translated", - "value": "Vase mit zwölf Sonnenblumen" + "value": "Gelb-Rot-Blau" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vase avec douze tournesols" + "value": "Jaune-Rouge-Bleu" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مزهرية بها اثنتا عشرة زهرة عباد الشمس" + "value": "أصفر-أحمر-أزرق" } }, "es": { "stringUnit": { "state": "translated", - "value": "Jarrón con doce girasoles" + "value": "Amarillo-Rojo-Azul" } }, "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": "12本のひまわり" + "value": "黄・赤・青" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vaza s dvanaest suncokreta" + "value": "Žuto-crveno-plavo" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vase med tolv solsikker" + "value": "Gul-rød-blå" } }, "it": { "stringUnit": { "state": "translated", - "value": "Vaso con dodici girasoli" + "value": "Giallo-rosso-blu" } }, "km": { "stringUnit": { "state": "translated", - "value": "ថូផ្កាឈូករ័ត្នដប់ពីរទង" + "value": "លឿង-ក្រហម-ខៀវ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vase med tolv solsikker" + "value": "Gul-rød-blå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wazon z dwunastoma słonecznikami" + "value": "Żółty-czerwony-niebieski" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Vaso com Doze Girassóis" + "value": "Amarelo-Vermelho-Azul" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ваза с двенадцатью подсолнухами" + "value": "Жёлтое — красное — синее" } }, "th": { "stringUnit": { "state": "translated", - "value": "แจกันดอกทานตะวันสิบสองดอก" + "value": "เหลือง-แดง-น้ำเงิน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "On İki Ayçiçekli Vazo" + "value": "Sarı-Kırmızı-Mavi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ваза з дванадцятьма соняшниками" + "value": "Жовте — червоне — синє" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Bình mười hai bông hướng dương" + "value": "Vàng-Đỏ-Xanh" } } } }, - "backdrop.michelangelo-sistine-ceiling.title": { + "backdrop.kandinsky-composition-viii.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Sistine Chapel Ceiling" + "value": "Composition VIII" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Decke der Sixtinischen Kapelle" + "value": "Komposition VIII" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Plafond de la chapelle Sixtine" + "value": "Composition VIII" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سقف كنيسة سيستينا" + "value": "تكوين 8" } }, "es": { "stringUnit": { "state": "translated", - "value": "La bóveda de la Capilla Sixtina" + "value": "Composición VIII" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "西斯汀禮拜堂天頂畫" + "value": "構成第八號" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "西斯廷礼拜堂天顶画" + "value": "构成第八号" } }, "ko": { "stringUnit": { "state": "translated", - "value": "시스티나 성당 천장화" + "value": "구성 8" } }, "ja": { "stringUnit": { "state": "translated", - "value": "システィーナ礼拝堂天井画" + "value": "コンポジション VIII" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Strop Sikstinske kapele" + "value": "Kompozicija VIII" } }, "da": { "stringUnit": { "state": "translated", - "value": "Det Sixtinske Kapels loft" + "value": "Komposition VIII" } }, "it": { "stringUnit": { "state": "translated", - "value": "La volta della Cappella Sistina" + "value": "Composizione VIII" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពិដានវិហារស៊ីស្ទីន" + "value": "សមាសភាព VIII" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Taket i Det sixtinske kapell" + "value": "Komposisjon VIII" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Sklepienie Kaplicy Sykstyńskiej" + "value": "Kompozycja VIII" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Teto da Capela Sistina" + "value": "Composição VIII" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Потолок Сикстинской капеллы" + "value": "Композиция VIII" } }, "th": { "stringUnit": { "state": "translated", - "value": "เพดานโบสถ์น้อยซิสทีน" + "value": "องค์ประกอบ VIII" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sistina Şapeli Tavanı" + "value": "Kompozisyon VIII" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Стеля Сікстинської капели" + "value": "Композиція VIII" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Trần nhà nguyện Sistine" + "value": "Bố cục VIII" } } } }, - "backdrop.mondrian-composition-red-plane.title": { + "backdrop.kramskoi-unknown-woman.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Composition with Large Red Plane" + "value": "Unknown Woman" } }, "de": { "stringUnit": { "state": "translated", - "value": "Komposition mit großer roter Fläche" + "value": "Die Unbekannte" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Composition avec grand plan rouge" + "value": "L'Inconnue" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تكوين مع مستوى أحمر كبير" + "value": "امرأة مجهولة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Composición con gran plano rojo" + "value": "La desconocida" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "大紅色平面構成" + "value": "無名女郎" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "大红色平面构成" + "value": "无名女郎" } }, "ko": { "stringUnit": { "state": "translated", - "value": "큰 빨강 면이 있는 구성" + "value": "미지의 여인" } }, "ja": { "stringUnit": { "state": "translated", - "value": "大きな赤の平面のあるコンポジション" + "value": "見知らぬ女" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kompozicija s velikom crvenom plohom" + "value": "Nepoznata" } }, "da": { "stringUnit": { "state": "translated", - "value": "Komposition med stort rødt felt" + "value": "Den ukendte kvinde" } }, "it": { "stringUnit": { "state": "translated", - "value": "Composizione con grande piano rosso" + "value": "Ritratto di sconosciuta" } }, "km": { "stringUnit": { "state": "translated", - "value": "សមាសភាពជាមួយផ្ទៃក្រហមធំ" + "value": "ស្ត្រីមិនស្គាល់មុខ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Komposisjon med stort rødt felt" + "value": "Ukjent kvinne" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kompozycja z dużą czerwoną płaszczyzną" + "value": "Nieznajoma" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Composição com Grande Plano Vermelho" + "value": "A Desconhecida" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Композиция с большой красной плоскостью" + "value": "Неизвестная" } }, "th": { "stringUnit": { "state": "translated", - "value": "องค์ประกอบกับระนาบสีแดงขนาดใหญ่" + "value": "หญิงนิรนาม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Büyük Kırmızı Düzlemli Kompozisyon" + "value": "Bilinmeyen Kadın" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Композиція з великою червоною площиною" + "value": "Невідома" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Bố cục với mảng đỏ lớn" + "value": "Người đàn bà xa lạ" } } } }, - "backdrop.lemoyne-apotheosis-hercules.title": { + "backdrop.michelangelo-creation-of-adam.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Apotheosis of Hercules" + "value": "The Creation of Adam" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Apotheose des Herkules" + "value": "Die Erschaffung Adams" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Apothéose d'Hercule" + "value": "La Création d'Adam" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تأليه هرقل" + "value": "خلق آدم" } }, "es": { "stringUnit": { "state": "translated", - "value": "La apoteosis de Hércules" + "value": "La creación de Adán" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "海克力斯的神化" + "value": "創造亞當" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "赫拉克勒斯的封神" + "value": "创造亚当" } }, "ko": { "stringUnit": { "state": "translated", - "value": "헤라클레스의 신격화" + "value": "아담의 창조" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ヘラクレスの神格化" + "value": "アダムの創造" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Apoteoza Herkula" + "value": "Stvaranje Adama" } }, "da": { "stringUnit": { "state": "translated", - "value": "Herkules' apoteose" + "value": "Adams skabelse" } }, "it": { "stringUnit": { "state": "translated", - "value": "L'apoteosi di Ercole" + "value": "La creazione di Adamo" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការលើកតម្កើងហឺគ្យូលីស" + "value": "ការបង្កើតអ័ដាម" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Herkules' apoteose" + "value": "Adams skapelse" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Apoteoza Herkulesa" + "value": "Stworzenie Adama" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Apoteose de Hércules" + "value": "A Criação de Adão" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Апофеоз Геркулеса" + "value": "Сотворение Адама" } }, "th": { "stringUnit": { "state": "translated", - "value": "อภิเทวภาพของเฮอร์คิวลีส" + "value": "การสร้างอาดัม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Herkül'ün Apoteozu" + "value": "Âdem'in Yaratılışı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Апофеоз Геркулеса" + "value": "Створення Адама" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự tôn vinh Hercules" + "value": "Sự sáng tạo Adam" } } } }, - "backdrop.schiele-moa.title": { + "backdrop.hokusai-great-wave.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "The Great Wave off Kanagawa" } }, "de": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "Die große Welle vor Kanagawa" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "La Grande Vague de Kanagawa" } }, "ar": { "stringUnit": { "state": "translated", - "value": "موا" + "value": "موجة كاناغاوا العظيمة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "La gran ola de Kanagawa" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "莫阿" + "value": "神奈川沖浪裏" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "莫阿" + "value": "神奈川冲浪里" } }, "ko": { "stringUnit": { "state": "translated", - "value": "모아" + "value": "가나가와 해변의 높은 파도 아래" } }, "ja": { "stringUnit": { "state": "translated", - "value": "モア" + "value": "神奈川沖浪裏" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "Veliki val kod Kanagawe" } }, "da": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "Den store bølge ud for Kanagawa" } }, "it": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "La grande onda di Kanagawa" } }, "km": { "stringUnit": { "state": "translated", - "value": "ម៉ូអា" + "value": "រលកធំនៅកាណាហ្គាវ៉ា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "Den store bølgen utenfor Kanagawa" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "Wielka fala w Kanagawie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "A Grande Onda de Kanagawa" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Моа" + "value": "Большая волна в Канагаве" } }, "th": { "stringUnit": { "state": "translated", - "value": "โมอา" + "value": "คลื่นยักษ์นอกชายฝั่งคานางาวะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "Kanagawa Açıklarında Büyük Dalga" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Моа" + "value": "Велика хвиля в Канаґаві" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Moa" + "value": "Sóng lừng ngoài khơi Kanagawa" } } } }, - "backdrop.aivazovsky-ninth-wave.title": { + "backdrop.holbein-ambassadors.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Ninth Wave" + "value": "The Ambassadors" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die neunte Woge" + "value": "Die Gesandten" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Neuvième Vague" + "value": "Les Ambassadeurs" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الموجة التاسعة" + "value": "السفراء" } }, "es": { "stringUnit": { "state": "translated", - "value": "La novena ola" + "value": "Los embajadores" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "第九濤" + "value": "大使們" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "九级浪" + "value": "大使们" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아홉 번째 파도" + "value": "대사들" } }, "ja": { "stringUnit": { "state": "translated", - "value": "第九の怒濤" + "value": "大使たち" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Deveti val" + "value": "Ambasadori" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den niende bølge" + "value": "Ambassadørerne" } }, "it": { "stringUnit": { "state": "translated", - "value": "La nona onda" + "value": "Gli ambasciatori" } }, "km": { "stringUnit": { "state": "translated", - "value": "រលកទីប្រាំបួន" + "value": "ពួកឯកអគ្គរដ្ឋទូត" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den niende bølgen" + "value": "Ambassadørene" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Dziewiąta fala" + "value": "Ambasadorowie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Nona Onda" + "value": "Os Embaixadores" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Девятый вал" + "value": "Послы" } }, "th": { "stringUnit": { "state": "translated", - "value": "คลื่นลูกที่เก้า" + "value": "เอกอัครราชทูต" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dokuzuncu Dalga" + "value": "Elçiler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Дев'ятий вал" + "value": "Посли" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Con sóng thứ chín" + "value": "Các đại sứ" } } } }, - "backdrop.popova-painterly-architectonic.title": { + "backdrop.brueghel-wooden-vessel.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Painterly Architectonic" + "value": "Flowers in a Wooden Vessel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Malerische Architektonik" + "value": "Blumen in einem Holzgefäß" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Architectonique picturale" + "value": "Fleurs dans un vase en bois" } }, "ar": { "stringUnit": { "state": "translated", - "value": "معمارية تصويرية" + "value": "أزهار في وعاء خشبي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Arquitectónica pictórica" + "value": "Flores en un recipiente de madera" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "繪畫式建築結構" + "value": "木桶中的花" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "绘画式建筑结构" + "value": "木桶中的花" } }, "ko": { "stringUnit": { "state": "translated", - "value": "회화적 건축 구성" + "value": "나무 그릇의 꽃" } }, "ja": { "stringUnit": { "state": "translated", - "value": "絵画的建築術" + "value": "木桶の花" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Slikarska arhitektonika" + "value": "Cvijeće u drvenoj posudi" } }, "da": { "stringUnit": { "state": "translated", - "value": "Malerisk arkitektonik" + "value": "Blomster i en trækrukke" } }, "it": { "stringUnit": { "state": "translated", - "value": "Architettonica pittorica" + "value": "Fiori in un vaso di legno" } }, "km": { "stringUnit": { "state": "translated", - "value": "ស្ថាបត្យកម្មគំនូរ" + "value": "ផ្កាក្នុងធុងឈើ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Malerisk arkitektonikk" + "value": "Blomster i et trekar" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Architektonika malarska" + "value": "Kwiaty w drewnianym naczyniu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Arquitetônica Pictórica" + "value": "Flores num Vaso de Madeira" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Живописная архитектоника" + "value": "Цветы в деревянном сосуде" } }, "th": { "stringUnit": { "state": "translated", - "value": "สถาปัตยกรรมเชิงจิตรกรรม" + "value": "ดอกไม้ในภาชนะไม้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Resimsel Mimari" + "value": "Ahşap Kapta Çiçekler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Живописна архітектоніка" + "value": "Квіти в дерев'яній посудині" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Kiến trúc hội họa" + "value": "Hoa trong bình gỗ" } } } }, - "backdrop.bruegel-tower-babel.title": { + "backdrop.dahl-dresden-moonlight.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Tower of Babel" + "value": "View of Dresden by Moonlight" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Turmbau zu Babel" + "value": "Dresden bei Mondschein" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Tour de Babel" + "value": "Vue de Dresde au clair de lune" } }, "ar": { "stringUnit": { "state": "translated", - "value": "برج بابل" + "value": "منظر دريسدن في ضوء القمر" } }, "es": { "stringUnit": { "state": "translated", - "value": "La torre de Babel" + "value": "Vista de Dresde a la luz de la luna" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "巴別塔" + "value": "月光下的德勒斯登" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "巴别塔" + "value": "月光下的德累斯顿" } }, "ko": { "stringUnit": { "state": "translated", - "value": "바벨탑" + "value": "달빛 아래 드레스덴 풍경" } }, "ja": { "stringUnit": { "state": "translated", - "value": "バベルの塔" + "value": "月明かりのドレスデン" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Babilonska kula" + "value": "Pogled na Dresden pod mjesečinom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Babelstårnet" + "value": "Udsigt over Dresden i måneskin" } }, "it": { "stringUnit": { "state": "translated", - "value": "La Torre di Babele" + "value": "Veduta di Dresda al chiaro di luna" } }, "km": { "stringUnit": { "state": "translated", - "value": "ប៉មបាបិល" + "value": "ទិដ្ឋភាពទីក្រុងដ្រេសដិនក្រោមពន្លឺព្រះចន្ទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Babels tårn" + "value": "Utsikt over Dresden i måneskinn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wieża Babel" + "value": "Widok Drezna w świetle księżyca" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Torre de Babel" + "value": "Vista de Dresden ao Luar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вавилонская башня" + "value": "Вид Дрездена при лунном свете" } }, "th": { "stringUnit": { "state": "translated", - "value": "หอคอยบาเบล" + "value": "ทิวทัศน์เดรสเดนยามแสงจันทร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Babil Kulesi" + "value": "Ay Işığında Dresden Manzarası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вавилонська вежа" + "value": "Вид Дрездена в місячному світлі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Tháp Babel" + "value": "Quang cảnh Dresden dưới ánh trăng" } } } }, - "backdrop.botticelli-birth-of-venus.title": { + "backdrop.bosschaert-wan-li-vase.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Birth of Venus" + "value": "Flowers in a Wan-Li Vase" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Geburt der Venus" + "value": "Blumen in einer Wan-Li-Vase" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Naissance de Vénus" + "value": "Fleurs dans un vase Wan-Li" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مولد فينوس" + "value": "أزهار في مزهرية وان لي" } }, "es": { "stringUnit": { "state": "translated", - "value": "El nacimiento de Venus" + "value": "Flores en un jarrón Wan-Li" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "維納斯的誕生" + "value": "萬曆花瓶中的花" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "维纳斯的诞生" + "value": "万历花瓶中的花" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비너스의 탄생" + "value": "만력 꽃병의 꽃" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ヴィーナスの誕生" + "value": "万暦の花瓶の花" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Rođenje Venere" + "value": "Cvijeće u Wan-Li vazi" } }, "da": { "stringUnit": { "state": "translated", - "value": "Venus' fødsel" + "value": "Blomster i en Wan-Li-vase" } }, "it": { "stringUnit": { "state": "translated", - "value": "La nascita di Venere" + "value": "Fiori in un vaso Wan-Li" } }, "km": { "stringUnit": { "state": "translated", - "value": "កំណើតរបស់វីនុស" + "value": "ផ្កាក្នុងថូវ៉ាន់លី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Venus' fødsel" + "value": "Blomster i en Wan-Li-vase" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Narodziny Wenus" + "value": "Kwiaty w wazonie Wan-Li" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Nascimento de Vênus" + "value": "Flores num Vaso Wan-Li" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рождение Венеры" + "value": "Цветы в вазе Ван-Ли" } }, "th": { "stringUnit": { "state": "translated", - "value": "กำเนิดวีนัส" + "value": "ดอกไม้ในแจกันว่านลี่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Venüs'ün Doğuşu" + "value": "Wan-Li Vazoda Çiçekler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Народження Венери" + "value": "Квіти у вазі Ван-Лі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự ra đời của thần Vệ Nữ" + "value": "Hoa trong bình Vạn Lịch" } } } }, - "backdrop.kandinsky-yellow-red-blue.title": { + "backdrop.cot-springtime.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Yellow-Red-Blue" + "value": "Springtime" } }, "de": { "stringUnit": { "state": "translated", - "value": "Gelb-Rot-Blau" + "value": "Frühling" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jaune-Rouge-Bleu" + "value": "Le Printemps" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أصفر-أحمر-أزرق" + "value": "الربيع" } }, "es": { "stringUnit": { "state": "translated", - "value": "Amarillo-Rojo-Azul" + "value": "Primavera" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "黃-紅-藍" + "value": "春" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "黄-红-蓝" + "value": "春" } }, "ko": { "stringUnit": { "state": "translated", - "value": "노랑-빨강-파랑" + "value": "봄" } }, "ja": { "stringUnit": { "state": "translated", - "value": "黄・赤・青" + "value": "春" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Žuto-crveno-plavo" + "value": "Proljeće" } }, "da": { "stringUnit": { "state": "translated", - "value": "Gul-rød-blå" + "value": "Foråret" } }, "it": { "stringUnit": { "state": "translated", - "value": "Giallo-rosso-blu" + "value": "Primavera" } }, "km": { "stringUnit": { "state": "translated", - "value": "លឿង-ក្រហម-ខៀវ" + "value": "និទាឃរដូវ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Gul-rød-blå" + "value": "Våren" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Żółty-czerwony-niebieski" + "value": "Wiosna" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Amarelo-Vermelho-Azul" + "value": "Primavera" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Жёлтое — красное — синее" + "value": "Весна" } }, "th": { "stringUnit": { "state": "translated", - "value": "เหลือง-แดง-น้ำเงิน" + "value": "ฤดูใบไม้ผลิ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sarı-Kırmızı-Mavi" + "value": "İlkbahar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Жовте — червоне — синє" + "value": "Весна" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Vàng-Đỏ-Xanh" + "value": "Mùa xuân" } } } }, - "backdrop.kandinsky-composition-viii.title": { + "backdrop.ruysch-flowers.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Composition VIII" + "value": "Still Life with Flowers" } }, "de": { "stringUnit": { "state": "translated", - "value": "Komposition VIII" + "value": "Blumenstillleben" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Composition VIII" + "value": "Nature morte aux fleurs" } }, "ar": { "stringUnit": { "state": "translated", - "value": "تكوين 8" + "value": "طبيعة صامتة مع أزهار" } }, "es": { "stringUnit": { "state": "translated", - "value": "Composición VIII" + "value": "Naturaleza muerta con flores" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "構成第八號" + "value": "花卉靜物" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "构成第八号" + "value": "花卉静物" } }, "ko": { "stringUnit": { "state": "translated", - "value": "구성 8" + "value": "꽃 정물" } }, "ja": { "stringUnit": { "state": "translated", - "value": "コンポジション VIII" + "value": "花の静物画" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Kompozicija VIII" + "value": "Mrtva priroda s cvijećem" } }, "da": { "stringUnit": { "state": "translated", - "value": "Komposition VIII" + "value": "Opstilling med blomster" } }, "it": { "stringUnit": { "state": "translated", - "value": "Composizione VIII" + "value": "Natura morta con fiori" } }, "km": { "stringUnit": { "state": "translated", - "value": "សមាសភាព VIII" + "value": "រូបវត្ថុស្ងៀមជាមួយផ្កា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Komposisjon VIII" + "value": "Stilleben med blomster" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kompozycja VIII" + "value": "Martwa natura z kwiatami" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Composição VIII" + "value": "Natureza-Morta com Flores" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Композиция VIII" + "value": "Натюрморт с цветами" } }, "th": { "stringUnit": { "state": "translated", - "value": "องค์ประกอบ VIII" + "value": "ภาพหุ่นนิ่งดอกไม้" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kompozisyon VIII" + "value": "Çiçekli Natürmort" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Композиція VIII" + "value": "Натюрморт із квітами" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Bố cục VIII" + "value": "Tĩnh vật với hoa" } } } }, - "backdrop.kramskoi-unknown-woman.title": { + "backdrop.van-gogh-flowering-plum.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Unknown Woman" + "value": "Flowering Plum Orchard" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Unbekannte" + "value": "Blühender Pflaumengarten" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Inconnue" + "value": "Verger de pruniers en fleurs" } }, "ar": { "stringUnit": { "state": "translated", - "value": "امرأة مجهولة" + "value": "بستان البرقوق المزهر" } }, "es": { "stringUnit": { "state": "translated", - "value": "La desconocida" + "value": "Huerto de ciruelos en flor" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "無名女郎" + "value": "盛開的梅樹果園" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "无名女郎" + "value": "盛开的李树果园" } }, "ko": { "stringUnit": { "state": "translated", - "value": "미지의 여인" + "value": "꽃 피는 자두 과수원" } }, "ja": { "stringUnit": { "state": "translated", - "value": "見知らぬ女" + "value": "花咲くプラム園" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nepoznata" + "value": "Rascvjetali voćnjak šljiva" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den ukendte kvinde" + "value": "Blomstrende blommehave" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ritratto di sconosciuta" + "value": "Frutteto di susini in fiore" } }, "km": { "stringUnit": { "state": "translated", - "value": "ស្ត្រីមិនស្គាល់មុខ" + "value": "ចម្ការផ្លែព្រូនកំពុងរីក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ukjent kvinne" + "value": "Blomstrende plommehage" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Nieznajoma" + "value": "Kwitnący sad śliwowy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Desconhecida" + "value": "Pomar de Ameixeiras em Flor" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Неизвестная" + "value": "Цветущий сливовый сад" } }, "th": { "stringUnit": { "state": "translated", - "value": "หญิงนิรนาม" + "value": "สวนพลัมผลิบาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Bilinmeyen Kadın" + "value": "Çiçek Açan Erik Bahçesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Невідома" + "value": "Квітучий сливовий сад" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Người đàn bà xa lạ" + "value": "Vườn mận nở hoa" } } } }, - "backdrop.michelangelo-creation-of-adam.title": { + "backdrop.toulmouche-reluctant-bride.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Creation of Adam" + "value": "The Reluctant Bride" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Erschaffung Adams" + "value": "Die widerwillige Braut" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Création d'Adam" + "value": "La Fiancée réticente" } }, "ar": { "stringUnit": { "state": "translated", - "value": "خلق آدم" + "value": "العروس المترددة" } }, "es": { "stringUnit": { "state": "translated", - "value": "La creación de Adán" + "value": "La novia reacia" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "創造亞當" + "value": "不情願的新娘" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "创造亚当" + "value": "不情愿的新娘" } }, "ko": { "stringUnit": { "state": "translated", - "value": "아담의 창조" + "value": "내키지 않는 신부" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アダムの創造" + "value": "気の進まない花嫁" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Stvaranje Adama" + "value": "Nevoljna nevjesta" } }, "da": { "stringUnit": { "state": "translated", - "value": "Adams skabelse" + "value": "Den uvillige brud" } }, "it": { "stringUnit": { "state": "translated", - "value": "La creazione di Adamo" + "value": "La sposa riluttante" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការបង្កើតអ័ដាម" + "value": "កូនក្រមុំដែលមិនព្រមចិត្ត" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Adams skapelse" + "value": "Den motvillige bruden" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Stworzenie Adama" + "value": "Niechętna panna młoda" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Criação de Adão" + "value": "A Noiva Relutante" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сотворение Адама" + "value": "Невеста поневоле" } }, "th": { "stringUnit": { "state": "translated", - "value": "การสร้างอาดัม" + "value": "เจ้าสาวผู้ไม่เต็มใจ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Âdem'in Yaratılışı" + "value": "İsteksiz Gelin" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Створення Адама" + "value": "Неохоча наречена" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sự sáng tạo Adam" + "value": "Cô dâu bất đắc dĩ" } } } }, - "backdrop.hokusai-great-wave.title": { + "backdrop.rosso-musical-angel.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Great Wave off Kanagawa" + "value": "Musical Angel" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die große Welle vor Kanagawa" + "value": "Musizierender Engel" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Grande Vague de Kanagawa" + "value": "Ange musicien" } }, "ar": { "stringUnit": { "state": "translated", - "value": "موجة كاناغاوا العظيمة" + "value": "ملاك موسيقي" } }, "es": { "stringUnit": { "state": "translated", - "value": "La gran ola de Kanagawa" + "value": "Ángel músico" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "神奈川沖浪裏" + "value": "奏樂天使" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "神奈川冲浪里" + "value": "奏乐天使" } }, "ko": { "stringUnit": { "state": "translated", - "value": "가나가와 해변의 높은 파도 아래" + "value": "음악을 연주하는 천사" } }, "ja": { "stringUnit": { "state": "translated", - "value": "神奈川沖浪裏" + "value": "奏楽の天使" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Veliki val kod Kanagawe" + "value": "Anđeo muzičar" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den store bølge ud for Kanagawa" + "value": "Musicerende engel" } }, "it": { "stringUnit": { "state": "translated", - "value": "La grande onda di Kanagawa" + "value": "Angelo musicante" } }, "km": { "stringUnit": { "state": "translated", - "value": "រលកធំនៅកាណាហ្គាវ៉ា" + "value": "ទេវតាលេងភ្លេង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den store bølgen utenfor Kanagawa" + "value": "Musiserende engel" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wielka fala w Kanagawie" + "value": "Muzykujący anioł" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Grande Onda de Kanagawa" + "value": "Anjo Músico" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Большая волна в Канагаве" + "value": "Музицирующий ангел" } }, "th": { "stringUnit": { "state": "translated", - "value": "คลื่นยักษ์นอกชายฝั่งคานางาวะ" + "value": "ทูตสวรรค์นักดนตรี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kanagawa Açıklarında Büyük Dalga" + "value": "Müzisyen Melek" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Велика хвиля в Канаґаві" + "value": "Ангел-музикант" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Sóng lừng ngoài khơi Kanagawa" + "value": "Thiên thần chơi nhạc" } } } }, - "backdrop.holbein-ambassadors.title": { + "backdrop.grimshaw-blackman-street.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Ambassadors" + "value": "Blackman Street, London" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Gesandten" + "value": "Blackman Street, London" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Ambassadeurs" + "value": "Blackman Street, Londres" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السفراء" + "value": "شارع بلاكمان، لندن" } }, "es": { "stringUnit": { "state": "translated", - "value": "Los embajadores" + "value": "Blackman Street, Londres" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "大使們" + "value": "倫敦布萊克曼街" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "大使们" + "value": "伦敦布莱克曼街" } }, "ko": { "stringUnit": { "state": "translated", - "value": "대사들" + "value": "런던 블랙맨 스트리트" } }, "ja": { "stringUnit": { "state": "translated", - "value": "大使たち" + "value": "ロンドン、ブラックマン通り" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ambasadori" + "value": "Blackman Street, London" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ambassadørerne" + "value": "Blackman Street, London" } }, "it": { "stringUnit": { "state": "translated", - "value": "Gli ambasciatori" + "value": "Blackman Street, Londra" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពួកឯកអគ្គរដ្ឋទូត" + "value": "ផ្លូវ Blackman, ឡុងដ៍" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ambassadørene" + "value": "Blackman Street, London" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ambasadorowie" + "value": "Blackman Street, Londyn" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Os Embaixadores" + "value": "Blackman Street, Londres" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Послы" + "value": "Блэкман-стрит, Лондон" } }, "th": { "stringUnit": { "state": "translated", - "value": "เอกอัครราชทูต" + "value": "ถนนแบล็กแมน ลอนดอน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Elçiler" + "value": "Blackman Street, Londra" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Посли" + "value": "Блекмен-стріт, Лондон" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Các đại sứ" + "value": "Phố Blackman, Luân Đôn" } } } }, - "backdrop.brueghel-wooden-vessel.title": { + "backdrop.waterhouse-ophelia.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Flowers in a Wooden Vessel" + "value": "Ophelia" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blumen in einem Holzgefäß" + "value": "Ophelia" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fleurs dans un vase en bois" + "value": "Ophélie" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أزهار في وعاء خشبي" + "value": "أوفيليا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Flores en un recipiente de madera" + "value": "Ofelia" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "木桶中的花" + "value": "奧菲莉亞" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "木桶中的花" + "value": "奥菲莉亚" } }, "ko": { "stringUnit": { "state": "translated", - "value": "나무 그릇의 꽃" + "value": "오필리아" } }, "ja": { "stringUnit": { "state": "translated", - "value": "木桶の花" + "value": "オフィーリア" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Cvijeće u drvenoj posudi" + "value": "Ofelija" } }, "da": { "stringUnit": { "state": "translated", - "value": "Blomster i en trækrukke" + "value": "Ofelia" } }, "it": { "stringUnit": { "state": "translated", - "value": "Fiori in un vaso di legno" + "value": "Ofelia" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាក្នុងធុងឈើ" + "value": "អូហ្វេលៀ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Blomster i et trekar" + "value": "Ofelia" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kwiaty w drewnianym naczyniu" + "value": "Ofelia" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Flores num Vaso de Madeira" + "value": "Ofélia" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Цветы в деревянном сосуде" + "value": "Офелия" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกไม้ในภาชนะไม้" + "value": "โอฟีเลีย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ahşap Kapta Çiçekler" + "value": "Ophelia" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Квіти в дерев'яній посудині" + "value": "Офелія" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa trong bình gỗ" + "value": "Ophelia" } } } }, - "backdrop.dahl-dresden-moonlight.title": { + "backdrop.biard-magdalena-bay.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "View of Dresden by Moonlight" + "value": "Magdalena Bay" } }, "de": { "stringUnit": { "state": "translated", - "value": "Dresden bei Mondschein" + "value": "Magdalenenbucht" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vue de Dresde au clair de lune" + "value": "La Baie de la Madeleine" } }, "ar": { "stringUnit": { "state": "translated", - "value": "منظر دريسدن في ضوء القمر" + "value": "خليج ماغدالينا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Vista de Dresde a la luz de la luna" + "value": "Bahía Magdalena" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "月光下的德勒斯登" + "value": "瑪格達萊納灣" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "月光下的德累斯顿" + "value": "玛格达莱纳湾" } }, "ko": { "stringUnit": { "state": "translated", - "value": "달빛 아래 드레스덴 풍경" + "value": "막달레나 만" } }, "ja": { "stringUnit": { "state": "translated", - "value": "月明かりのドレスデン" + "value": "マグダレナ湾" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pogled na Dresden pod mjesečinom" + "value": "Zaljev Magdalena" } }, "da": { "stringUnit": { "state": "translated", - "value": "Udsigt over Dresden i måneskin" + "value": "Magdalenefjorden" } }, "it": { "stringUnit": { "state": "translated", - "value": "Veduta di Dresda al chiaro di luna" + "value": "Baia della Maddalena" } }, "km": { "stringUnit": { "state": "translated", - "value": "ទិដ្ឋភាពទីក្រុងដ្រេសដិនក្រោមពន្លឺព្រះចន្ទ" + "value": "ឈូងសមុទ្រម៉ាក់ដាឡេណា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Utsikt over Dresden i måneskinn" + "value": "Magdalenefjorden" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Widok Drezna w świetle księżyca" + "value": "Zatoka Magdaleny" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Vista de Dresden ao Luar" + "value": "Baía de Madalena" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вид Дрездена при лунном свете" + "value": "Залив Магдалены" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทิวทัศน์เดรสเดนยามแสงจันทร์" + "value": "อ่าวแม็กดาเลนา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ay Işığında Dresden Manzarası" + "value": "Magdalena Körfezi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вид Дрездена в місячному світлі" + "value": "Затока Магдалини" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Quang cảnh Dresden dưới ánh trăng" + "value": "Vịnh Magdalena" } } } }, - "backdrop.bosschaert-wan-li-vase.title": { + "backdrop.renoir-vase-roses.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Flowers in a Wan-Li Vase" + "value": "Roses in a Vase" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blumen in einer Wan-Li-Vase" + "value": "Rosen in einer Vase" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Fleurs dans un vase Wan-Li" + "value": "Roses dans un vase" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أزهار في مزهرية وان لي" + "value": "ورود في مزهرية" } }, "es": { "stringUnit": { "state": "translated", - "value": "Flores en un jarrón Wan-Li" + "value": "Rosas en un jarrón" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "萬曆花瓶中的花" + "value": "花瓶中的玫瑰" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "万历花瓶中的花" + "value": "花瓶中的玫瑰" } }, "ko": { "stringUnit": { "state": "translated", - "value": "만력 꽃병의 꽃" + "value": "꽃병의 장미" } }, "ja": { "stringUnit": { "state": "translated", - "value": "万暦の花瓶の花" + "value": "花瓶の薔薇" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Cvijeće u Wan-Li vazi" + "value": "Ruže u vazi" } }, "da": { "stringUnit": { "state": "translated", - "value": "Blomster i en Wan-Li-vase" + "value": "Roser i en vase" } }, "it": { "stringUnit": { "state": "translated", - "value": "Fiori in un vaso Wan-Li" + "value": "Rose in un vaso" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាក្នុងថូវ៉ាន់លី" + "value": "ផ្កាកុលាបក្នុងថូ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Blomster i en Wan-Li-vase" + "value": "Roser i en vase" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kwiaty w wazonie Wan-Li" + "value": "Róże w wazonie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Flores num Vaso Wan-Li" + "value": "Rosas num Vaso" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Цветы в вазе Ван-Ли" + "value": "Розы в вазе" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกไม้ในแจกันว่านลี่" + "value": "ดอกกุหลาบในแจกัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Wan-Li Vazoda Çiçekler" + "value": "Vazoda Güller" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Квіти у вазі Ван-Лі" + "value": "Троянди у вазі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa trong bình Vạn Lịch" + "value": "Hoa hồng trong bình" } } } }, - "backdrop.cot-springtime.title": { + "backdrop.roerich-himalayas.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Springtime" + "value": "Himalayas" } }, "de": { "stringUnit": { "state": "translated", - "value": "Frühling" + "value": "Himalaya" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Printemps" + "value": "Himalaya" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الربيع" + "value": "الهيمالايا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "Himalaya" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "春" + "value": "喜馬拉雅" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "春" + "value": "喜马拉雅" } }, "ko": { "stringUnit": { "state": "translated", - "value": "봄" + "value": "히말라야" } }, "ja": { "stringUnit": { "state": "translated", - "value": "春" + "value": "ヒマラヤ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Proljeće" + "value": "Himalaji" } }, "da": { "stringUnit": { "state": "translated", - "value": "Foråret" + "value": "Himalaya" } }, "it": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "Himalaya" } }, "km": { "stringUnit": { "state": "translated", - "value": "និទាឃរដូវ" + "value": "ហិមាល័យ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Våren" + "value": "Himalaya" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wiosna" + "value": "Himalaje" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Primavera" + "value": "Himalaia" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Весна" + "value": "Гималаи" } }, "th": { "stringUnit": { "state": "translated", - "value": "ฤดูใบไม้ผลิ" + "value": "หิมาลัย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İlkbahar" + "value": "Himalayalar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Весна" + "value": "Гімалаї" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Mùa xuân" + "value": "Dãy Himalaya" } } } }, - "backdrop.ruysch-flowers.title": { + "backdrop.velde-close-hauled.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Still Life with Flowers" + "value": "A Small Dutch Vessel Close-hauled" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blumenstillleben" + "value": "Ein kleines holländisches Schiff hart am Wind" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nature morte aux fleurs" + "value": "Un petit navire hollandais au plus près" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طبيعة صامتة مع أزهار" + "value": "سفينة هولندية صغيرة تبحر عكس الريح" } }, "es": { "stringUnit": { "state": "translated", - "value": "Naturaleza muerta con flores" + "value": "Pequeño barco holandés ciñendo el viento" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "花卉靜物" + "value": "逆風航行的荷蘭小船" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "花卉静物" + "value": "逆风航行的荷兰小船" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꽃 정물" + "value": "바람을 거슬러 항해하는 네덜란드 작은 배" } }, "ja": { "stringUnit": { "state": "translated", - "value": "花の静物画" + "value": "風上に進むオランダの小型船" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Mrtva priroda s cvijećem" + "value": "Mali holandski brod u oštroj plovidbi" } }, "da": { "stringUnit": { "state": "translated", - "value": "Opstilling med blomster" + "value": "Et lille hollandsk fartøj for bidevind" } }, "it": { "stringUnit": { "state": "translated", - "value": "Natura morta con fiori" + "value": "Una piccola nave olandese di bolina" } }, "km": { "stringUnit": { "state": "translated", - "value": "រូបវត្ថុស្ងៀមជាមួយផ្កា" + "value": "នាវាហូឡង់តូចមួយបើកទល់ខ្យល់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Stilleben med blomster" + "value": "Et lite nederlandsk fartøy for bidevind" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Martwa natura z kwiatami" + "value": "Mały holenderski statek płynący ostro na wiatr" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Natureza-Morta com Flores" + "value": "Uma Pequena Embarcação Holandesa à Bolina" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Натюрморт с цветами" + "value": "Маленькое голландское судно в бейдевинд" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภาพหุ่นนิ่งดอกไม้" + "value": "เรือดัตช์ลำเล็กแล่นทวนลม" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çiçekli Natürmort" + "value": "Orsa Seyrinde Küçük Bir Hollanda Teknesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Натюрморт із квітами" + "value": "Маленьке голландське судно в бейдевінд" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Tĩnh vật với hoa" + "value": "Con thuyền Hà Lan nhỏ chạy ngược gió" } } } }, - "backdrop.van-gogh-flowering-plum.title": { + "backdrop.sohlberg-flower-meadow.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Flowering Plum Orchard" + "value": "Flower Meadow in the North" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blühender Pflaumengarten" + "value": "Blumenwiese im Norden" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Verger de pruniers en fleurs" + "value": "Prairie fleurie dans le Nord" } }, "ar": { "stringUnit": { "state": "translated", - "value": "بستان البرقوق المزهر" + "value": "مرج الزهور في الشمال" } }, "es": { "stringUnit": { "state": "translated", - "value": "Huerto de ciruelos en flor" + "value": "Prado florido en el norte" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "盛開的梅樹果園" + "value": "北國的花草地" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "盛开的李树果园" + "value": "北国的花草地" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꽃 피는 자두 과수원" + "value": "북쪽의 꽃밭" } }, "ja": { "stringUnit": { "state": "translated", - "value": "花咲くプラム園" + "value": "北の花畑" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Rascvjetali voćnjak šljiva" + "value": "Cvjetna livada na sjeveru" } }, "da": { "stringUnit": { "state": "translated", - "value": "Blomstrende blommehave" + "value": "Blomstereng nordpå" } }, "it": { "stringUnit": { "state": "translated", - "value": "Frutteto di susini in fiore" + "value": "Prato fiorito al Nord" } }, "km": { "stringUnit": { "state": "translated", - "value": "ចម្ការផ្លែព្រូនកំពុងរីក" + "value": "វាលផ្កានៅភាគខាងជើង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Blomstrende plommehage" + "value": "Blomstereng nordpå" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kwitnący sad śliwowy" + "value": "Kwietna łąka na północy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Pomar de Ameixeiras em Flor" + "value": "Prado Florido no Norte" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Цветущий сливовый сад" + "value": "Цветущий луг на севере" } }, "th": { "stringUnit": { "state": "translated", - "value": "สวนพลัมผลิบาน" + "value": "ทุ่งดอกไม้แดนเหนือ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çiçek Açan Erik Bahçesi" + "value": "Kuzeyde Çiçekli Çayır" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Квітучий сливовий сад" + "value": "Квітучий луг на півночі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Vườn mận nở hoa" + "value": "Đồng hoa phương Bắc" } } } }, - "backdrop.toulmouche-reluctant-bride.title": { + "backdrop.dahl-cloud-study.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Reluctant Bride" + "value": "Cloud Study by Moonlight" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die widerwillige Braut" + "value": "Wolkenstudie im Mondschein" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Fiancée réticente" + "value": "Étude de nuages au clair de lune" } }, "ar": { "stringUnit": { "state": "translated", - "value": "العروس المترددة" + "value": "دراسة للغيوم في ضوء القمر" } }, "es": { "stringUnit": { "state": "translated", - "value": "La novia reacia" + "value": "Estudio de nubes a la luz de la luna" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "不情願的新娘" + "value": "月光下的雲彩習作" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "不情愿的新娘" + "value": "月光下的云彩习作" } }, "ko": { "stringUnit": { "state": "translated", - "value": "내키지 않는 신부" + "value": "달빛 아래 구름 연구" } }, "ja": { "stringUnit": { "state": "translated", - "value": "気の進まない花嫁" + "value": "月明かりの雲の習作" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Nevoljna nevjesta" + "value": "Studija oblaka pod mjesečinom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den uvillige brud" + "value": "Skystudie i måneskin" } }, "it": { "stringUnit": { "state": "translated", - "value": "La sposa riluttante" + "value": "Studio di nuvole al chiaro di luna" } }, "km": { "stringUnit": { "state": "translated", - "value": "កូនក្រមុំដែលមិនព្រមចិត្ត" + "value": "ការសិក្សាពពកក្រោមពន្លឺព្រះចន្ទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den motvillige bruden" + "value": "Skystudie i måneskinn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Niechętna panna młoda" + "value": "Studium chmur w świetle księżyca" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Noiva Relutante" + "value": "Estudo de Nuvens ao Luar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Невеста поневоле" + "value": "Этюд облаков при лунном свете" } }, "th": { "stringUnit": { "state": "translated", - "value": "เจ้าสาวผู้ไม่เต็มใจ" + "value": "ภาพศึกษาเมฆยามแสงจันทร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İsteksiz Gelin" + "value": "Ay Işığında Bulut Etüdü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Неохоча наречена" + "value": "Етюд хмар у місячному світлі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cô dâu bất đắc dĩ" + "value": "Nghiên cứu mây dưới ánh trăng" } } } }, - "backdrop.rosso-musical-angel.title": { + "backdrop.friedrich-two-men-moon.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Musical Angel" + "value": "Two Men Contemplating the Moon" } }, "de": { "stringUnit": { "state": "translated", - "value": "Musizierender Engel" + "value": "Zwei Männer in Betrachtung des Mondes" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ange musicien" + "value": "Deux hommes contemplant la lune" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ملاك موسيقي" + "value": "رجلان يتأملان القمر" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ángel músico" + "value": "Dos hombres contemplando la luna" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "奏樂天使" + "value": "兩個男人凝望月亮" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "奏乐天使" + "value": "两个男人凝望月亮" } }, "ko": { "stringUnit": { "state": "translated", - "value": "음악을 연주하는 천사" + "value": "달을 바라보는 두 남자" } }, "ja": { "stringUnit": { "state": "translated", - "value": "奏楽の天使" + "value": "月を眺める二人の男" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Anđeo muzičar" + "value": "Dvojica muškaraca promatraju Mjesec" } }, "da": { "stringUnit": { "state": "translated", - "value": "Musicerende engel" + "value": "To mænd betragter månen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Angelo musicante" + "value": "Due uomini che contemplano la luna" } }, "km": { "stringUnit": { "state": "translated", - "value": "ទេវតាលេងភ្លេង" + "value": "បុរសពីរនាក់សម្លឹងមើលព្រះចន្ទ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Musiserende engel" + "value": "To menn betrakter månen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Muzykujący anioł" + "value": "Dwaj mężczyźni kontemplujący księżyc" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Anjo Músico" + "value": "Dois Homens Contemplando a Lua" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Музицирующий ангел" + "value": "Двое, созерцающие луну" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทูตสวรรค์นักดนตรี" + "value": "ชายสองคนเพ่งพินิจดวงจันทร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Müzisyen Melek" + "value": "Ayı Seyreden İki Adam" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ангел-музикант" + "value": "Двоє чоловіків, що споглядають місяць" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Thiên thần chơi nhạc" + "value": "Hai người đàn ông ngắm trăng" } } } }, - "backdrop.grimshaw-blackman-street.title": { + "backdrop.monet-waterlily-pond.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Blackman Street, London" + "value": "The Water-Lily Pond" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blackman Street, London" + "value": "Der Seerosenteich" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Blackman Street, Londres" + "value": "Le Bassin aux nymphéas" } }, "ar": { "stringUnit": { "state": "translated", - "value": "شارع بلاكمان، لندن" + "value": "بركة زنابق الماء" } }, "es": { "stringUnit": { "state": "translated", - "value": "Blackman Street, Londres" + "value": "El estanque de nenúfares" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "倫敦布萊克曼街" + "value": "睡蓮池" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "伦敦布莱克曼街" + "value": "睡莲池" } }, "ko": { "stringUnit": { "state": "translated", - "value": "런던 블랙맨 스트리트" + "value": "수련 연못" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ロンドン、ブラックマン通り" + "value": "睡蓮の池" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Blackman Street, London" + "value": "Jezerce s lopočima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Blackman Street, London" + "value": "Åkandedammen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Blackman Street, Londra" + "value": "Lo stagno delle ninfee" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្លូវ Blackman, ឡុងដ៍" + "value": "ស្រះផ្កាឈូក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Blackman Street, London" + "value": "Vannliljedammen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Blackman Street, Londyn" + "value": "Staw z liliami wodnymi" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Blackman Street, Londres" + "value": "O Lago das Ninfeias" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Блэкман-стрит, Лондон" + "value": "Пруд с кувшинками" } }, "th": { "stringUnit": { "state": "translated", - "value": "ถนนแบล็กแมน ลอนดอน" + "value": "สระบัว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Blackman Street, Londra" + "value": "Nilüfer Havuzu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Блекмен-стріт, Лондон" + "value": "Ставок з лататтям" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Phố Blackman, Luân Đôn" + "value": "Hồ hoa súng" } } } }, - "backdrop.waterhouse-ophelia.title": { + "backdrop.hesselbom-dusk.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Dusk" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Abenddämmerung" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ophélie" + "value": "Crépuscule" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أوفيليا" + "value": "الغسق" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Anochecer" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "奧菲莉亞" + "value": "黃昏" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "奥菲莉亚" + "value": "黄昏" } }, "ko": { "stringUnit": { "state": "translated", - "value": "오필리아" + "value": "황혼" } }, "ja": { "stringUnit": { "state": "translated", - "value": "オフィーリア" + "value": "夕暮れ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ofelija" + "value": "Sumrak" } }, "da": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Skumring" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Crepuscolo" } }, "km": { "stringUnit": { "state": "translated", - "value": "អូហ្វេលៀ" + "value": "ពេលព្រលប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Skumring" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ofelia" + "value": "Zmierzch" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ofélia" + "value": "Crepúsculo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Офелия" + "value": "Сумерки" } }, "th": { "stringUnit": { "state": "translated", - "value": "โอฟีเลีย" + "value": "ยามสนธยา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Alacakaranlık" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Офелія" + "value": "Сутінки" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Ophelia" + "value": "Hoàng hôn" } } } }, - "backdrop.biard-magdalena-bay.title": { + "backdrop.toulmouche-vanity.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Magdalena Bay" + "value": "Vanity" } }, "de": { "stringUnit": { "state": "translated", - "value": "Magdalenenbucht" + "value": "Eitelkeit" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Baie de la Madeleine" + "value": "Vanité" } }, "ar": { "stringUnit": { "state": "translated", - "value": "خليج ماغدالينا" + "value": "الغرور" } }, "es": { "stringUnit": { "state": "translated", - "value": "Bahía Magdalena" + "value": "Vanidad" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "瑪格達萊納灣" + "value": "虛榮" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "玛格达莱纳湾" + "value": "虚荣" } }, "ko": { "stringUnit": { "state": "translated", - "value": "막달레나 만" + "value": "허영" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マグダレナ湾" + "value": "虚栄" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zaljev Magdalena" + "value": "Taština" } }, "da": { "stringUnit": { "state": "translated", - "value": "Magdalenefjorden" + "value": "Forfængelighed" } }, "it": { "stringUnit": { "state": "translated", - "value": "Baia della Maddalena" + "value": "Vanità" } }, "km": { "stringUnit": { "state": "translated", - "value": "ឈូងសមុទ្រម៉ាក់ដាឡេណា" + "value": "ភាពអួតអាង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Magdalenefjorden" + "value": "Forfengelighet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zatoka Magdaleny" + "value": "Próżność" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Baía de Madalena" + "value": "Vaidade" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Залив Магдалены" + "value": "Тщеславие" } }, "th": { "stringUnit": { "state": "translated", - "value": "อ่าวแม็กดาเลนา" + "value": "ความหลงตัวเอง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Magdalena Körfezi" + "value": "Kibir" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Затока Магдалини" + "value": "Марнославство" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Vịnh Magdalena" + "value": "Phù hoa" } } } }, - "backdrop.renoir-vase-roses.title": { + "backdrop.hiroshige-zoshigaya.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Roses in a Vase" + "value": "Fuji-view Teahouse at Zōshigaya" } }, "de": { "stringUnit": { "state": "translated", - "value": "Rosen in einer Vase" + "value": "Teehaus mit Fuji-Blick in Zōshigaya" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Roses dans un vase" + "value": "Maison de thé à Zōshigaya avec vue sur le Fuji" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ورود في مزهرية" + "value": "مقهى الشاي المطل على فوجي في زوشيغايا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Rosas en un jarrón" + "value": "Casa de té con vista al Fuji en Zōshigaya" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "花瓶中的玫瑰" + "value": "雜司谷不二見茶屋" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "花瓶中的玫瑰" + "value": "杂司谷不二见茶屋" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꽃병의 장미" + "value": "조시가야 후지미 찻집" } }, "ja": { "stringUnit": { "state": "translated", - "value": "花瓶の薔薇" + "value": "雑司ケ谷不二見茶屋" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ruže u vazi" + "value": "Čajdžinica s pogledom na Fuji u Zošigaji" } }, "da": { "stringUnit": { "state": "translated", - "value": "Roser i en vase" + "value": "Tehus med udsigt til Fuji i Zōshigaya" } }, "it": { "stringUnit": { "state": "translated", - "value": "Rose in un vaso" + "value": "Casa da tè con vista sul Fuji a Zōshigaya" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាកុលាបក្នុងថូ" + "value": "ផ្ទះតែមើលឃើញភ្នំហ្វូជីនៅហ្សូស៊ីហ្គាយ៉ា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Roser i en vase" + "value": "Tehus med utsikt mot Fuji i Zōshigaya" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Róże w wazonie" + "value": "Herbaciarnia z widokiem na Fuji w Zōshigaya" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Rosas num Vaso" + "value": "Casa de Chá com Vista do Fuji em Zōshigaya" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Розы в вазе" + "value": "Чайный домик с видом на Фудзи в Дзосигая" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกกุหลาบในแจกัน" + "value": "โรงน้ำชาชมฟูจิที่โซชิงายะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Vazoda Güller" + "value": "Zōshigaya'da Fuji Manzaralı Çayevi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Троянди у вазі" + "value": "Чайний будиночок із видом на Фудзі в Дзосіґаї" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa hồng trong bình" + "value": "Quán trà ngắm Phú Sĩ ở Zōshigaya" } } } }, - "backdrop.roerich-himalayas.title": { + "backdrop.monet-water-lilies.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Himalayas" + "value": "Water Lilies (1906)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Himalaya" + "value": "Seerosen (1906)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Himalaya" + "value": "Nymphéas (1906)" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الهيمالايا" + "value": "زنابق الماء (1906)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Himalaya" + "value": "Nenúfares (1906)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "喜馬拉雅" + "value": "睡蓮 (1906)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "喜马拉雅" + "value": "睡莲 (1906)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "히말라야" + "value": "수련 (1906)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ヒマラヤ" + "value": "睡蓮 (1906)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Himalaji" + "value": "Lopoči (1906)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Himalaya" + "value": "Åkander (1906)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Himalaya" + "value": "Ninfee (1906)" } }, "km": { "stringUnit": { "state": "translated", - "value": "ហិមាល័យ" + "value": "ផ្កាឈូក (1906)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Himalaya" + "value": "Vannliljer (1906)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Himalaje" + "value": "Lilie wodne (1906)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Himalaia" + "value": "Ninfeias (1906)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Гималаи" + "value": "Кувшинки (1906)" } }, "th": { "stringUnit": { "state": "translated", - "value": "หิมาลัย" + "value": "ดอกบัว (1906)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Himalayalar" + "value": "Nilüferler (1906)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Гімалаї" + "value": "Латаття (1906)" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Dãy Himalaya" + "value": "Hoa súng (1906)" } } } }, - "backdrop.velde-close-hauled.title": { + "backdrop.monet-water-lilies-1907.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A Small Dutch Vessel Close-hauled" + "value": "Water Lilies (1907)" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein kleines holländisches Schiff hart am Wind" + "value": "Seerosen (1907)" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un petit navire hollandais au plus près" + "value": "Nymphéas (1907)" } }, "ar": { "stringUnit": { "state": "translated", - "value": "سفينة هولندية صغيرة تبحر عكس الريح" + "value": "زنابق الماء (1907)" } }, "es": { "stringUnit": { "state": "translated", - "value": "Pequeño barco holandés ciñendo el viento" + "value": "Nenúfares (1907)" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "逆風航行的荷蘭小船" + "value": "睡蓮 (1907)" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "逆风航行的荷兰小船" + "value": "睡莲 (1907)" } }, "ko": { "stringUnit": { "state": "translated", - "value": "바람을 거슬러 항해하는 네덜란드 작은 배" + "value": "수련 (1907)" } }, "ja": { "stringUnit": { "state": "translated", - "value": "風上に進むオランダの小型船" + "value": "睡蓮 (1907)" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Mali holandski brod u oštroj plovidbi" + "value": "Lopoči (1907)" } }, "da": { "stringUnit": { "state": "translated", - "value": "Et lille hollandsk fartøj for bidevind" + "value": "Åkander (1907)" } }, "it": { "stringUnit": { "state": "translated", - "value": "Una piccola nave olandese di bolina" + "value": "Ninfee (1907)" } }, "km": { "stringUnit": { "state": "translated", - "value": "នាវាហូឡង់តូចមួយបើកទល់ខ្យល់" + "value": "ផ្កាឈូក (1907)" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Et lite nederlandsk fartøy for bidevind" + "value": "Vannliljer (1907)" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Mały holenderski statek płynący ostro na wiatr" + "value": "Lilie wodne (1907)" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Uma Pequena Embarcação Holandesa à Bolina" + "value": "Ninfeias (1907)" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Маленькое голландское судно в бейдевинд" + "value": "Кувшинки (1907)" } }, "th": { "stringUnit": { "state": "translated", - "value": "เรือดัตช์ลำเล็กแล่นทวนลม" + "value": "ดอกบัว (1907)" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Orsa Seyrinde Küçük Bir Hollanda Teknesi" + "value": "Nilüferler (1907)" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Маленьке голландське судно в бейдевінд" + "value": "Латаття (1907)" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Con thuyền Hà Lan nhỏ chạy ngược gió" + "value": "Hoa súng (1907)" } } } }, - "backdrop.sohlberg-flower-meadow.title": { + "backdrop.bierstadt-storm-rockies.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Flower Meadow in the North" + "value": "A Storm in the Rocky Mountains" } }, "de": { "stringUnit": { "state": "translated", - "value": "Blumenwiese im Norden" + "value": "Ein Sturm in den Rocky Mountains" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Prairie fleurie dans le Nord" + "value": "Un orage dans les montagnes Rocheuses" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مرج الزهور في الشمال" + "value": "عاصفة في جبال روكي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Prado florido en el norte" + "value": "Una tormenta en las Montañas Rocosas" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "北國的花草地" + "value": "落基山脈的風暴" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "北国的花草地" + "value": "落基山脉的风暴" } }, "ko": { "stringUnit": { "state": "translated", - "value": "북쪽의 꽃밭" + "value": "로키산맥의 폭풍" } }, "ja": { "stringUnit": { "state": "translated", - "value": "北の花畑" + "value": "ロッキー山脈の嵐" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Cvjetna livada na sjeveru" + "value": "Oluja u Stjenovitim planinama" } }, "da": { "stringUnit": { "state": "translated", - "value": "Blomstereng nordpå" + "value": "Et uvejr i Rocky Mountains" } }, "it": { "stringUnit": { "state": "translated", - "value": "Prato fiorito al Nord" + "value": "Una tempesta sulle Montagne Rocciose" } }, "km": { "stringUnit": { "state": "translated", - "value": "វាលផ្កានៅភាគខាងជើង" + "value": "ព្យុះនៅភ្នំរ៉ុកគី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Blomstereng nordpå" + "value": "Et uvær i Rocky Mountains" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kwietna łąka na północy" + "value": "Burza w Górach Skalistych" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Prado Florido no Norte" + "value": "Uma Tempestade nas Montanhas Rochosas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Цветущий луг на севере" + "value": "Гроза в Скалистых горах" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทุ่งดอกไม้แดนเหนือ" + "value": "พายุในเทือกเขาร็อกกี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kuzeyde Çiçekli Çayır" + "value": "Rocky Dağları'nda Fırtına" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Квітучий луг на півночі" + "value": "Буря в Скелястих горах" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đồng hoa phương Bắc" + "value": "Cơn bão trên dãy Rocky" } } } }, - "backdrop.dahl-cloud-study.title": { + "backdrop.korovin-place-opera.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Cloud Study by Moonlight" + "value": "Paris at Night" } }, "de": { "stringUnit": { "state": "translated", - "value": "Wolkenstudie im Mondschein" + "value": "Paris bei Nacht" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Étude de nuages au clair de lune" + "value": "Paris la nuit" } }, "ar": { "stringUnit": { "state": "translated", - "value": "دراسة للغيوم في ضوء القمر" + "value": "باريس ليلًا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Estudio de nubes a la luz de la luna" + "value": "París de noche" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "月光下的雲彩習作" + "value": "巴黎之夜" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "月光下的云彩习作" + "value": "巴黎之夜" } }, "ko": { "stringUnit": { "state": "translated", - "value": "달빛 아래 구름 연구" + "value": "파리의 밤" } }, "ja": { "stringUnit": { "state": "translated", - "value": "月明かりの雲の習作" + "value": "夜のパリ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Studija oblaka pod mjesečinom" + "value": "Pariz noću" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skystudie i måneskin" + "value": "Paris om natten" } }, "it": { "stringUnit": { "state": "translated", - "value": "Studio di nuvole al chiaro di luna" + "value": "Parigi di notte" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការសិក្សាពពកក្រោមពន្លឺព្រះចន្ទ" + "value": "ប៉ារីសពេលយប់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skystudie i måneskinn" + "value": "Paris om natten" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Studium chmur w świetle księżyca" + "value": "Paryż nocą" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Estudo de Nuvens ao Luar" + "value": "Paris à Noite" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Этюд облаков при лунном свете" + "value": "Париж ночью" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภาพศึกษาเมฆยามแสงจันทร์" + "value": "ปารีสยามราตรี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ay Işığında Bulut Etüdü" + "value": "Gece Paris" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Етюд хмар у місячному світлі" + "value": "Париж уночі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Nghiên cứu mây dưới ánh trăng" + "value": "Paris về đêm" } } } }, - "backdrop.friedrich-two-men-moon.title": { + "backdrop.klimt-garden-sunflowers.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Two Men Contemplating the Moon" + "value": "Farm Garden with Sunflowers" } }, "de": { "stringUnit": { "state": "translated", - "value": "Zwei Männer in Betrachtung des Mondes" + "value": "Bauerngarten mit Sonnenblumen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Deux hommes contemplant la lune" + "value": "Jardin de ferme aux tournesols" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رجلان يتأملان القمر" + "value": "حديقة ريفية مع عباد الشمس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Dos hombres contemplando la luna" + "value": "Jardín de granja con girasoles" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "兩個男人凝望月亮" + "value": "農莊花園與向日葵" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "两个男人凝望月亮" + "value": "农庄花园与向日葵" } }, "ko": { "stringUnit": { "state": "translated", - "value": "달을 바라보는 두 남자" + "value": "해바라기가 있는 농가 정원" } }, "ja": { "stringUnit": { "state": "translated", - "value": "月を眺める二人の男" + "value": "ひまわりの咲く農家の庭" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Dvojica muškaraca promatraju Mjesec" + "value": "Seoski vrt sa suncokretima" } }, "da": { "stringUnit": { "state": "translated", - "value": "To mænd betragter månen" + "value": "Bondehave med solsikker" } }, "it": { "stringUnit": { "state": "translated", - "value": "Due uomini che contemplano la luna" + "value": "Giardino di campagna con girasoli" } }, "km": { "stringUnit": { "state": "translated", - "value": "បុរសពីរនាក់សម្លឹងមើលព្រះចន្ទ" + "value": "សួនកសិដ្ឋានជាមួយផ្កាឈូករ័ត្ន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "To menn betrakter månen" + "value": "Bondehage med solsikker" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Dwaj mężczyźni kontemplujący księżyc" + "value": "Wiejski ogród ze słonecznikami" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Dois Homens Contemplando a Lua" + "value": "Jardim Rural com Girassóis" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Двое, созерцающие луну" + "value": "Сельский сад с подсолнухами" } }, "th": { "stringUnit": { "state": "translated", - "value": "ชายสองคนเพ่งพินิจดวงจันทร์" + "value": "สวนชนบทกับดอกทานตะวัน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ayı Seyreden İki Adam" + "value": "Ayçiçekli Köy Bahçesi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Двоє чоловіків, що споглядають місяць" + "value": "Сільський сад із соняшниками" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hai người đàn ông ngắm trăng" + "value": "Vườn trại với hoa hướng dương" } } } }, - "backdrop.monet-waterlily-pond.title": { + "backdrop.redon-butterflies.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Water-Lily Pond" + "value": "Butterflies" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Seerosenteich" + "value": "Schmetterlinge" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Bassin aux nymphéas" + "value": "Papillons" } }, "ar": { "stringUnit": { "state": "translated", - "value": "بركة زنابق الماء" + "value": "فراشات" } }, "es": { "stringUnit": { "state": "translated", - "value": "El estanque de nenúfares" + "value": "Mariposas" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "睡蓮池" + "value": "蝴蝶" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "睡莲池" + "value": "蝴蝶" } }, "ko": { "stringUnit": { "state": "translated", - "value": "수련 연못" + "value": "나비" } }, "ja": { "stringUnit": { "state": "translated", - "value": "睡蓮の池" + "value": "蝶" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Jezerce s lopočima" + "value": "Leptiri" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åkandedammen" + "value": "Sommerfugle" } }, "it": { "stringUnit": { "state": "translated", - "value": "Lo stagno delle ninfee" + "value": "Farfalle" } }, "km": { "stringUnit": { "state": "translated", - "value": "ស្រះផ្កាឈូក" + "value": "មេអំបៅ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vannliljedammen" + "value": "Sommerfugler" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Staw z liliami wodnymi" + "value": "Motyle" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Lago das Ninfeias" + "value": "Borboletas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Пруд с кувшинками" + "value": "Бабочки" } }, "th": { "stringUnit": { "state": "translated", - "value": "สระบัว" + "value": "ผีเสื้อ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Nilüfer Havuzu" + "value": "Kelebekler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Ставок з лататтям" + "value": "Метелики" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hồ hoa súng" + "value": "Những cánh bướm" } } } }, - "backdrop.hesselbom-dusk.title": { + "backdrop.aivazovsky-winter-landscape.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Dusk" + "value": "Winter Landscape" } }, "de": { "stringUnit": { "state": "translated", - "value": "Abenddämmerung" + "value": "Winterlandschaft" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Crépuscule" + "value": "Paysage d'hiver" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الغسق" + "value": "منظر شتوي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Anochecer" + "value": "Paisaje invernal" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "黃昏" + "value": "冬景" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "黄昏" + "value": "冬景" } }, "ko": { "stringUnit": { "state": "translated", - "value": "황혼" + "value": "겨울 풍경" } }, "ja": { "stringUnit": { "state": "translated", - "value": "夕暮れ" + "value": "冬景色" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Sumrak" + "value": "Zimski pejzaž" } }, "da": { "stringUnit": { "state": "translated", - "value": "Skumring" + "value": "Vinterlandskab" } }, "it": { "stringUnit": { "state": "translated", - "value": "Crepuscolo" + "value": "Paesaggio invernale" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពេលព្រលប់" + "value": "ទេសភាពរដូវរងា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Skumring" + "value": "Vinterlandskap" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Zmierzch" + "value": "Pejzaż zimowy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Crepúsculo" + "value": "Paisagem de Inverno" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сумерки" + "value": "Зимний пейзаж" } }, "th": { "stringUnit": { "state": "translated", - "value": "ยามสนธยา" + "value": "ภูมิทัศน์ฤดูหนาว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Alacakaranlık" + "value": "Kış Manzarası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сутінки" + "value": "Зимовий пейзаж" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoàng hôn" + "value": "Phong cảnh mùa đông" } } } }, - "backdrop.toulmouche-vanity.title": { + "backdrop.aivazovsky-along-coast.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Vanity" + "value": "Along the Coast" } }, "de": { "stringUnit": { "state": "translated", - "value": "Eitelkeit" + "value": "An der Küste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vanité" + "value": "Le long de la côte" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الغرور" + "value": "على طول الساحل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Vanidad" + "value": "A lo largo de la costa" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "虛榮" + "value": "沿岸" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "虚荣" + "value": "沿岸" } }, "ko": { "stringUnit": { "state": "translated", - "value": "허영" + "value": "해안을 따라" } }, "ja": { "stringUnit": { "state": "translated", - "value": "虚栄" + "value": "海岸に沿って" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Taština" + "value": "Uz obalu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Forfængelighed" + "value": "Langs kysten" } }, "it": { "stringUnit": { "state": "translated", - "value": "Vanità" + "value": "Lungo la costa" } }, "km": { "stringUnit": { "state": "translated", - "value": "ភាពអួតអាង" + "value": "តាមបណ្ដោយឆ្នេរ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Forfengelighet" + "value": "Langs kysten" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Próżność" + "value": "Wzdłuż wybrzeża" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Vaidade" + "value": "Ao Longo da Costa" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Тщеславие" + "value": "Вдоль берега" } }, "th": { "stringUnit": { "state": "translated", - "value": "ความหลงตัวเอง" + "value": "เลียบชายฝั่ง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kibir" + "value": "Kıyı Boyunca" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Марнославство" + "value": "Уздовж берега" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Phù hoa" + "value": "Dọc bờ biển" } } } }, - "backdrop.hiroshige-zoshigaya.title": { + "backdrop.grimshaw-silver-moonlight.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fuji-view Teahouse at Zōshigaya" + "value": "Silver Moonlight" } }, "de": { "stringUnit": { "state": "translated", - "value": "Teehaus mit Fuji-Blick in Zōshigaya" + "value": "Silbernes Mondlicht" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Maison de thé à Zōshigaya avec vue sur le Fuji" + "value": "Clair de lune argenté" } }, "ar": { "stringUnit": { "state": "translated", - "value": "مقهى الشاي المطل على فوجي في زوشيغايا" + "value": "ضوء القمر الفضي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Casa de té con vista al Fuji en Zōshigaya" + "value": "Luz de luna plateada" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雜司谷不二見茶屋" + "value": "銀色月光" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "杂司谷不二见茶屋" + "value": "银色月光" } }, "ko": { "stringUnit": { "state": "translated", - "value": "조시가야 후지미 찻집" + "value": "은빛 달빛" } }, "ja": { "stringUnit": { "state": "translated", - "value": "雑司ケ谷不二見茶屋" + "value": "銀色の月光" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Čajdžinica s pogledom na Fuji u Zošigaji" + "value": "Srebrna mjesečina" } }, "da": { "stringUnit": { "state": "translated", - "value": "Tehus med udsigt til Fuji i Zōshigaya" + "value": "Sølvmåneskin" } }, "it": { "stringUnit": { "state": "translated", - "value": "Casa da tè con vista sul Fuji a Zōshigaya" + "value": "Chiaro di luna argentato" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្ទះតែមើលឃើញភ្នំហ្វូជីនៅហ្សូស៊ីហ្គាយ៉ា" + "value": "ពន្លឺព្រះចន្ទពណ៌ប្រាក់" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Tehus med utsikt mot Fuji i Zōshigaya" + "value": "Sølvmåneskinn" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Herbaciarnia z widokiem na Fuji w Zōshigaya" + "value": "Srebrzysty blask księżyca" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Casa de Chá com Vista do Fuji em Zōshigaya" + "value": "Luar Prateado" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Чайный домик с видом на Фудзи в Дзосигая" + "value": "Серебряный лунный свет" } }, "th": { "stringUnit": { "state": "translated", - "value": "โรงน้ำชาชมฟูจิที่โซชิงายะ" + "value": "แสงจันทร์สีเงิน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Zōshigaya'da Fuji Manzaralı Çayevi" + "value": "Gümüş Ay Işığı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Чайний будиночок із видом на Фудзі в Дзосіґаї" + "value": "Срібне місячне світло" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Quán trà ngắm Phú Sĩ ở Zōshigaya" + "value": "Ánh trăng bạc" } } } }, - "backdrop.monet-water-lilies.title": { + "backdrop.monet-water-lilies-setting-sun.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Water Lilies (1906)" + "value": "Water Lilies, Setting Sun" } }, "de": { "stringUnit": { "state": "translated", - "value": "Seerosen (1906)" + "value": "Seerosen, Sonnenuntergang" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nymphéas (1906)" + "value": "Nymphéas, soleil couchant" } }, "ar": { "stringUnit": { "state": "translated", - "value": "زنابق الماء (1906)" + "value": "زنابق الماء، غروب الشمس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nenúfares (1906)" + "value": "Nenúfares, sol poniente" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "睡蓮 (1906)" + "value": "睡蓮,落日" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "睡莲 (1906)" + "value": "睡莲,落日" } }, "ko": { "stringUnit": { "state": "translated", - "value": "수련 (1906)" + "value": "수련, 해질녘" } }, "ja": { "stringUnit": { "state": "translated", - "value": "睡蓮 (1906)" + "value": "睡蓮、夕日" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lopoči (1906)" + "value": "Lopoči, zalazak sunca" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åkander (1906)" + "value": "Åkander, solnedgang" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ninfee (1906)" + "value": "Ninfee, sole al tramonto" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាឈូក (1906)" + "value": "ផ្កាឈូក ថ្ងៃលិច" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vannliljer (1906)" + "value": "Vannliljer, solnedgang" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Lilie wodne (1906)" + "value": "Lilie wodne, zachód słońca" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ninfeias (1906)" + "value": "Ninfeias, Pôr do Sol" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Кувшинки (1906)" + "value": "Кувшинки. Закат" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกบัว (1906)" + "value": "ดอกบัว ยามอาทิตย์อัสดง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Nilüferler (1906)" + "value": "Nilüferler, Gün Batımı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Латаття (1906)" + "value": "Латаття. Захід сонця" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa súng (1906)" + "value": "Hoa súng, hoàng hôn" } } } }, - "backdrop.monet-water-lilies-1907.title": { + "backdrop.hiroshige-hota-coast.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Water Lilies (1907)" + "value": "The Coast at Hota" } }, "de": { "stringUnit": { "state": "translated", - "value": "Seerosen (1907)" + "value": "Die Küste bei Hota" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nymphéas (1907)" + "value": "La Côte à Hota" } }, "ar": { "stringUnit": { "state": "translated", - "value": "زنابق الماء (1907)" + "value": "ساحل هوتا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nenúfares (1907)" + "value": "La costa de Hota" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "睡蓮 (1907)" + "value": "保田之海岸" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "睡莲 (1907)" + "value": "保田之海岸" } }, "ko": { "stringUnit": { "state": "translated", - "value": "수련 (1907)" + "value": "호타 해안" } }, "ja": { "stringUnit": { "state": "translated", - "value": "睡蓮 (1907)" + "value": "房州保田ノ海岸" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lopoči (1907)" + "value": "Obala kod Hote" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åkander (1907)" + "value": "Kysten ved Hota" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ninfee (1907)" + "value": "La costa a Hota" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាឈូក (1907)" + "value": "ឆ្នេរនៅហូតា" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vannliljer (1907)" + "value": "Kysten ved Hota" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Lilie wodne (1907)" + "value": "Wybrzeże w Hota" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ninfeias (1907)" + "value": "A Costa em Hota" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Кувшинки (1907)" + "value": "Побережье в Хота" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกบัว (1907)" + "value": "ชายฝั่งที่โฮตะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Nilüferler (1907)" + "value": "Hota Kıyısı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Латаття (1907)" + "value": "Узбережжя в Хоті" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa súng (1907)" + "value": "Bờ biển Hota" } } } }, - "backdrop.bierstadt-storm-rockies.title": { + "backdrop.durer-praying-hands.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "A Storm in the Rocky Mountains" + "value": "Praying Hands" } }, "de": { "stringUnit": { "state": "translated", - "value": "Ein Sturm in den Rocky Mountains" + "value": "Betende Hände" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un orage dans les montagnes Rocheuses" + "value": "Les Mains en prière" } }, "ar": { "stringUnit": { "state": "translated", - "value": "عاصفة في جبال روكي" + "value": "الأيدي المصلية" } }, "es": { "stringUnit": { "state": "translated", - "value": "Una tormenta en las Montañas Rocosas" + "value": "Manos que oran" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "落基山脈的風暴" + "value": "祈禱的手" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "落基山脉的风暴" + "value": "祈祷的手" } }, "ko": { "stringUnit": { "state": "translated", - "value": "로키산맥의 폭풍" + "value": "기도하는 손" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ロッキー山脈の嵐" + "value": "祈る手" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Oluja u Stjenovitim planinama" + "value": "Ruke koje se mole" } }, "da": { "stringUnit": { "state": "translated", - "value": "Et uvejr i Rocky Mountains" + "value": "Bedende hænder" } }, "it": { "stringUnit": { "state": "translated", - "value": "Una tempesta sulle Montagne Rocciose" + "value": "Mani che pregano" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្យុះនៅភ្នំរ៉ុកគី" + "value": "ដៃកំពុងអធិស្ឋាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Et uvær i Rocky Mountains" + "value": "Bedende hender" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Burza w Górach Skalistych" + "value": "Modlące się dłonie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Uma Tempestade nas Montanhas Rochosas" + "value": "Mãos em Oração" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Гроза в Скалистых горах" + "value": "Руки молящегося" } }, "th": { "stringUnit": { "state": "translated", - "value": "พายุในเทือกเขาร็อกกี" + "value": "มือที่กำลังอธิษฐาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Rocky Dağları'nda Fırtına" + "value": "Dua Eden Eller" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Буря в Скелястих горах" + "value": "Руки, що моляться" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cơn bão trên dãy Rocky" + "value": "Đôi bàn tay cầu nguyện" } } } }, - "backdrop.korovin-place-opera.title": { + "backdrop.cole-voyage-childhood.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Paris at Night" + "value": "The Voyage of Life: Childhood" } }, "de": { "stringUnit": { "state": "translated", - "value": "Paris bei Nacht" + "value": "Die Lebensreise: Kindheit" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Paris la nuit" + "value": "Le Voyage de la vie : l'Enfance" } }, "ar": { "stringUnit": { "state": "translated", - "value": "باريس ليلًا" + "value": "رحلة الحياة: الطفولة" } }, "es": { "stringUnit": { "state": "translated", - "value": "París de noche" + "value": "El viaje de la vida: la infancia" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "巴黎之夜" + "value": "生命之旅:童年" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "巴黎之夜" + "value": "生命之旅:童年" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파리의 밤" + "value": "인생의 항해: 유년기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "夜のパリ" + "value": "人生の航路:幼年期" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Pariz noću" + "value": "Putovanje života: Djetinjstvo" } }, "da": { "stringUnit": { "state": "translated", - "value": "Paris om natten" + "value": "Livets rejse: Barndom" } }, "it": { "stringUnit": { "state": "translated", - "value": "Parigi di notte" + "value": "Il viaggio della vita: l'infanzia" } }, "km": { "stringUnit": { "state": "translated", - "value": "ប៉ារីសពេលយប់" + "value": "ដំណើរជីវិត៖ វ័យកុមារ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Paris om natten" + "value": "Livets reise: Barndom" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Paryż nocą" + "value": "Podróż życia: Dzieciństwo" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Paris à Noite" + "value": "A Viagem da Vida: Infância" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Париж ночью" + "value": "Путешествие жизни: Детство" } }, "th": { "stringUnit": { "state": "translated", - "value": "ปารีสยามราตรี" + "value": "การเดินทางของชีวิต: วัยเด็ก" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gece Paris" + "value": "Hayatın Yolculuğu: Çocukluk" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Париж уночі" + "value": "Подорож життя: Дитинство" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Paris về đêm" + "value": "Hành trình cuộc đời: Tuổi thơ" } } } }, - "backdrop.klimt-garden-sunflowers.title": { + "backdrop.monet-impression-sunrise.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Farm Garden with Sunflowers" + "value": "Impression, Sunrise" } }, "de": { "stringUnit": { "state": "translated", - "value": "Bauerngarten mit Sonnenblumen" + "value": "Impression, Sonnenaufgang" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Jardin de ferme aux tournesols" + "value": "Impression, soleil levant" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حديقة ريفية مع عباد الشمس" + "value": "انطباع، شروق الشمس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Jardín de granja con girasoles" + "value": "Impresión, sol naciente" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "農莊花園與向日葵" + "value": "印象·日出" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "农庄花园与向日葵" + "value": "印象·日出" } }, "ko": { "stringUnit": { "state": "translated", - "value": "해바라기가 있는 농가 정원" + "value": "인상, 해돋이" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ひまわりの咲く農家の庭" + "value": "印象・日の出" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Seoski vrt sa suncokretima" + "value": "Impresija, izlazak sunca" } }, "da": { "stringUnit": { "state": "translated", - "value": "Bondehave med solsikker" + "value": "Impression, solopgang" } }, "it": { "stringUnit": { "state": "translated", - "value": "Giardino di campagna con girasoli" + "value": "Impressione, levar del sole" } }, "km": { "stringUnit": { "state": "translated", - "value": "សួនកសិដ្ឋានជាមួយផ្កាឈូករ័ត្ន" + "value": "ចំណាប់អារម្មណ៍ ថ្ងៃរះ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Bondehage med solsikker" + "value": "Impresjon, soloppgang" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wiejski ogród ze słonecznikami" + "value": "Impresja, wschód słońca" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Jardim Rural com Girassóis" + "value": "Impressão, Nascer do Sol" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Сельский сад с подсолнухами" + "value": "Впечатление. Восходящее солнце" } }, "th": { "stringUnit": { "state": "translated", - "value": "สวนชนบทกับดอกทานตะวัน" + "value": "อิมเพรสชัน ดวงอาทิตย์ขึ้น" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Ayçiçekli Köy Bahçesi" + "value": "İzlenim, Gün Doğumu" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Сільський сад із соняшниками" + "value": "Враження. Схід сонця" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Vườn trại với hoa hướng dương" + "value": "Ấn tượng, mặt trời mọc" } } } }, - "backdrop.redon-butterflies.title": { + "backdrop.monet-woman-parasol.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Butterflies" + "value": "Woman with a Parasol" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schmetterlinge" + "value": "Frau mit Sonnenschirm" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Papillons" + "value": "La Femme à l'ombrelle" } }, "ar": { "stringUnit": { "state": "translated", - "value": "فراشات" + "value": "امرأة تحمل مظلة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mariposas" + "value": "Mujer con sombrilla" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "蝴蝶" + "value": "撐陽傘的女人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "蝴蝶" + "value": "撑阳伞的女人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "나비" + "value": "파라솔을 든 여인" } }, "ja": { "stringUnit": { "state": "translated", - "value": "蝶" + "value": "日傘をさす女" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Leptiri" + "value": "Žena sa suncobranom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sommerfugle" + "value": "Kvinde med parasol" } }, "it": { "stringUnit": { "state": "translated", - "value": "Farfalle" + "value": "Donna con parasole" } }, "km": { "stringUnit": { "state": "translated", - "value": "មេអំបៅ" + "value": "ស្ត្រីកាន់ឆ័ត្រ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Sommerfugler" + "value": "Kvinne med parasoll" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Motyle" + "value": "Kobieta z parasolką" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Borboletas" + "value": "Mulher com Sombrinha" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Бабочки" + "value": "Дама с зонтиком" } }, "th": { "stringUnit": { "state": "translated", - "value": "ผีเสื้อ" + "value": "หญิงสาวกับร่มกันแดด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kelebekler" + "value": "Şemsiyeli Kadın" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Метелики" + "value": "Жінка з парасолькою" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Những cánh bướm" + "value": "Người phụ nữ cầm dù" } } } }, - "backdrop.aivazovsky-winter-landscape.title": { + "backdrop.velde-cannon-shot.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Winter Landscape" + "value": "The Cannon Shot" } }, "de": { "stringUnit": { "state": "translated", - "value": "Winterlandschaft" + "value": "Der Kanonenschuss" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Paysage d'hiver" + "value": "Le Coup de canon" } }, "ar": { "stringUnit": { "state": "translated", - "value": "منظر شتوي" + "value": "طلقة المدفع" } }, "es": { "stringUnit": { "state": "translated", - "value": "Paisaje invernal" + "value": "El cañonazo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "冬景" + "value": "炮擊" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "冬景" + "value": "炮击" } }, "ko": { "stringUnit": { "state": "translated", - "value": "겨울 풍경" + "value": "대포 발사" } }, "ja": { "stringUnit": { "state": "translated", - "value": "冬景色" + "value": "大砲の一撃" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Zimski pejzaž" + "value": "Topovski hitac" } }, "da": { "stringUnit": { "state": "translated", - "value": "Vinterlandskab" + "value": "Kanonskuddet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Paesaggio invernale" + "value": "Il colpo di cannone" } }, "km": { "stringUnit": { "state": "translated", - "value": "ទេសភាពរដូវរងា" + "value": "ការបាញ់កាំភ្លើងធំ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vinterlandskap" + "value": "Kanonskuddet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pejzaż zimowy" + "value": "Wystrzał armatni" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Paisagem de Inverno" + "value": "O Tiro de Canhão" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Зимний пейзаж" + "value": "Пушечный выстрел" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภูมิทัศน์ฤดูหนาว" + "value": "เสียงปืนใหญ่" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kış Manzarası" + "value": "Top Atışı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Зимовий пейзаж" + "value": "Гарматний постріл" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Phong cảnh mùa đông" + "value": "Phát đại bác" } } } }, - "backdrop.aivazovsky-along-coast.title": { + "backdrop.cross-pink-cloud.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Along the Coast" + "value": "The Pink Cloud" } }, "de": { "stringUnit": { "state": "translated", - "value": "An der Küste" + "value": "Die rosa Wolke" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le long de la côte" + "value": "Le Nuage rose" } }, "ar": { "stringUnit": { "state": "translated", - "value": "على طول الساحل" + "value": "الغيمة الوردية" } }, "es": { "stringUnit": { "state": "translated", - "value": "A lo largo de la costa" + "value": "La nube rosa" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "沿岸" + "value": "粉紅色的雲" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "沿岸" + "value": "粉红色的云" } }, "ko": { "stringUnit": { "state": "translated", - "value": "해안을 따라" + "value": "분홍 구름" } }, "ja": { "stringUnit": { "state": "translated", - "value": "海岸に沿って" + "value": "ピンクの雲" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Uz obalu" + "value": "Ružičasti oblak" } }, "da": { "stringUnit": { "state": "translated", - "value": "Langs kysten" + "value": "Den lyserøde sky" } }, "it": { "stringUnit": { "state": "translated", - "value": "Lungo la costa" + "value": "La nuvola rosa" } }, "km": { "stringUnit": { "state": "translated", - "value": "តាមបណ្ដោយឆ្នេរ" + "value": "ពពកពណ៌ផ្កាឈូក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Langs kysten" + "value": "Den rosa skyen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wzdłuż wybrzeża" + "value": "Różowa chmura" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ao Longo da Costa" + "value": "A Nuvem Rosa" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Вдоль берега" + "value": "Розовое облако" } }, "th": { "stringUnit": { "state": "translated", - "value": "เลียบชายฝั่ง" + "value": "เมฆสีชมพู" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Kıyı Boyunca" + "value": "Pembe Bulut" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Уздовж берега" + "value": "Рожева хмара" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Dọc bờ biển" + "value": "Đám mây hồng" } } } }, - "backdrop.grimshaw-silver-moonlight.title": { + "backdrop.laurence-mckinley.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Silver Moonlight" + "value": "Mt. McKinley" } }, "de": { "stringUnit": { "state": "translated", - "value": "Silbernes Mondlicht" + "value": "Mt. McKinley" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Clair de lune argenté" + "value": "Mont McKinley" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ضوء القمر الفضي" + "value": "جبل ماكينلي" } }, "es": { "stringUnit": { "state": "translated", - "value": "Luz de luna plateada" + "value": "Monte McKinley" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "銀色月光" + "value": "麥金利山" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "银色月光" + "value": "麦金利山" } }, "ko": { "stringUnit": { "state": "translated", - "value": "은빛 달빛" + "value": "매킨리산" } }, "ja": { "stringUnit": { "state": "translated", - "value": "銀色の月光" + "value": "マッキンリー山" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Srebrna mjesečina" + "value": "Planina McKinley" } }, "da": { "stringUnit": { "state": "translated", - "value": "Sølvmåneskin" + "value": "Mount McKinley" } }, "it": { "stringUnit": { "state": "translated", - "value": "Chiaro di luna argentato" + "value": "Monte McKinley" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពន្លឺព្រះចន្ទពណ៌ប្រាក់" + "value": "ភ្នំម៉ាឃីនលី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Sølvmåneskinn" + "value": "Mount McKinley" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Srebrzysty blask księżyca" + "value": "Góra McKinley" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Luar Prateado" + "value": "Monte McKinley" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Серебряный лунный свет" + "value": "Гора Мак-Кинли" } }, "th": { "stringUnit": { "state": "translated", - "value": "แสงจันทร์สีเงิน" + "value": "ภูเขาแมกคินลีย์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Gümüş Ay Işığı" + "value": "McKinley Dağı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Срібне місячне світло" + "value": "Гора Мак-Кінлі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Ánh trăng bạc" + "value": "Núi McKinley" } } } }, - "backdrop.monet-water-lilies-setting-sun.title": { + "backdrop.van-gogh-irises.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Water Lilies, Setting Sun" + "value": "Irises" } }, "de": { "stringUnit": { "state": "translated", - "value": "Seerosen, Sonnenuntergang" + "value": "Schwertlilien" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Nymphéas, soleil couchant" + "value": "Les Iris" } }, "ar": { "stringUnit": { "state": "translated", - "value": "زنابق الماء، غروب الشمس" + "value": "السوسن" } }, "es": { "stringUnit": { "state": "translated", - "value": "Nenúfares, sol poniente" + "value": "Lirios" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "睡蓮,落日" + "value": "鳶尾花" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "睡莲,落日" + "value": "鸢尾花" } }, "ko": { "stringUnit": { "state": "translated", - "value": "수련, 해질녘" + "value": "붓꽃" } }, "ja": { "stringUnit": { "state": "translated", - "value": "睡蓮、夕日" + "value": "アイリス" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lopoči, zalazak sunca" + "value": "Perunike" } }, "da": { "stringUnit": { "state": "translated", - "value": "Åkander, solnedgang" + "value": "Iris" } }, "it": { "stringUnit": { "state": "translated", - "value": "Ninfee, sole al tramonto" + "value": "Iris" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាឈូក ថ្ងៃលិច" + "value": "ផ្កាអាយរីស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Vannliljer, solnedgang" + "value": "Iris" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Lilie wodne, zachód słońca" + "value": "Irysy" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ninfeias, Pôr do Sol" + "value": "Íris" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Кувшинки. Закат" + "value": "Ирисы" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกบัว ยามอาทิตย์อัสดง" + "value": "ดอกไอริส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Nilüferler, Gün Batımı" + "value": "Süsenler" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Латаття. Захід сонця" + "value": "Іриси" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa súng, hoàng hôn" + "value": "Hoa diên vĩ" } } } }, - "backdrop.hiroshige-hota-coast.title": { + "backdrop.kramskoi-christ-in-the-desert.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Coast at Hota" + "value": "Christ in the Desert" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Küste bei Hota" + "value": "Christus in der Wüste" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Côte à Hota" + "value": "Le Christ dans le désert" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ساحل هوتا" + "value": "المسيح في البرية" } }, "es": { "stringUnit": { "state": "translated", - "value": "La costa de Hota" + "value": "Cristo en el desierto" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "保田之海岸" + "value": "曠野中的基督" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "保田之海岸" + "value": "旷野中的基督" } }, "ko": { "stringUnit": { "state": "translated", - "value": "호타 해안" + "value": "광야의 그리스도" } }, "ja": { "stringUnit": { "state": "translated", - "value": "房州保田ノ海岸" + "value": "荒野のキリスト" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Obala kod Hote" + "value": "Krist u pustinji" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kysten ved Hota" + "value": "Kristus i ørkenen" } }, "it": { "stringUnit": { "state": "translated", - "value": "La costa a Hota" + "value": "Cristo nel deserto" } }, "km": { "stringUnit": { "state": "translated", - "value": "ឆ្នេរនៅហូតា" + "value": "ព្រះគ្រីស្ទនៅវាលរហោស្ថាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kysten ved Hota" + "value": "Kristus i ørkenen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wybrzeże w Hota" + "value": "Chrystus na pustyni" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Costa em Hota" + "value": "Cristo no Deserto" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Побережье в Хота" + "value": "Христос в пустыне" } }, "th": { "stringUnit": { "state": "translated", - "value": "ชายฝั่งที่โฮตะ" + "value": "พระคริสต์ในถิ่นทุรกันดาร" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hota Kıyısı" + "value": "Çölde İsa" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Узбережжя в Хоті" + "value": "Христос у пустелі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Bờ biển Hota" + "value": "Chúa Kitô trong hoang mạc" } } } }, - "backdrop.durer-praying-hands.title": { + "backdrop.turner-temeraire.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Praying Hands" + "value": "The Fighting Temeraire" } }, "de": { "stringUnit": { "state": "translated", - "value": "Betende Hände" + "value": "Die letzte Fahrt der Temeraire" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Mains en prière" + "value": "Le Dernier Voyage du Téméraire" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الأيدي المصلية" + "value": "السفينة المقاتلة تيميرير" } }, "es": { "stringUnit": { "state": "translated", - "value": "Manos que oran" + "value": "El Temerario remolcado a dique seco" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "祈禱的手" + "value": "被拖去解體的戰艦無畏號" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "祈祷的手" + "value": "被拖去解体的战舰无畏号" } }, "ko": { "stringUnit": { "state": "translated", - "value": "기도하는 손" + "value": "전함 테메레르" } }, "ja": { "stringUnit": { "state": "translated", - "value": "祈る手" + "value": "戦艦テメレール号" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ruke koje se mole" + "value": "Posljednje putovanje broda Temeraire" } }, "da": { "stringUnit": { "state": "translated", - "value": "Bedende hænder" + "value": "Den kæmpende Temeraire" } }, "it": { "stringUnit": { "state": "translated", - "value": "Mani che pregano" + "value": "La valorosa Téméraire" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដៃកំពុងអធិស្ឋាន" + "value": "នាវាចម្បាំងធេមេរែរ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Bedende hender" + "value": "Den kjempende Temeraire" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Modlące się dłonie" + "value": "Ostatnia droga okrętu Temeraire" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mãos em Oração" + "value": "O Temerário" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Руки молящегося" + "value": "Последний рейс корабля «Отважный»" } }, "th": { "stringUnit": { "state": "translated", - "value": "มือที่กำลังอธิษฐาน" + "value": "เรือรบเทเมแรร์" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Dua Eden Eller" + "value": "Savaşan Temeraire" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Руки, що моляться" + "value": "Останній рейс корабля «Відважний»" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đôi bàn tay cầu nguyện" + "value": "Chiến hạm Temeraire" } } } }, - "backdrop.cole-voyage-childhood.title": { + "backdrop.leonardo-vitruvian-man.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Voyage of Life: Childhood" + "value": "Vitruvian Man" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Lebensreise: Kindheit" + "value": "Der vitruvianische Mensch" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Voyage de la vie : l'Enfance" + "value": "L'Homme de Vitruve" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رحلة الحياة: الطفولة" + "value": "الرجل الفيتروفي" } }, "es": { "stringUnit": { "state": "translated", - "value": "El viaje de la vida: la infancia" + "value": "El hombre de Vitruvio" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "生命之旅:童年" + "value": "維特魯威人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "生命之旅:童年" + "value": "维特鲁威人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "인생의 항해: 유년기" + "value": "비트루비우스적 인간" } }, "ja": { "stringUnit": { "state": "translated", - "value": "人生の航路:幼年期" + "value": "ウィトルウィウス的人体図" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Putovanje života: Djetinjstvo" + "value": "Vitruvijev čovjek" } }, "da": { "stringUnit": { "state": "translated", - "value": "Livets rejse: Barndom" + "value": "Den vitruvianske mand" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il viaggio della vita: l'infanzia" + "value": "Uomo vitruviano" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដំណើរជីវិត៖ វ័យកុមារ" + "value": "បុរសវីទ្រូវៀន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Livets reise: Barndom" + "value": "Den vitruvianske mann" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podróż życia: Dzieciństwo" + "value": "Człowiek witruwiański" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Viagem da Vida: Infância" + "value": "Homem Vitruviano" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Путешествие жизни: Детство" + "value": "Витрувианский человек" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเดินทางของชีวิต: วัยเด็ก" + "value": "มนุษย์วิทรูเวียส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hayatın Yolculuğu: Çocukluk" + "value": "Vitruvius Adamı" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Подорож життя: Дитинство" + "value": "Вітрувіанська людина" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hành trình cuộc đời: Tuổi thơ" + "value": "Người Vitruvius" } } } }, - "backdrop.monet-impression-sunrise.title": { + "backdrop.bruegel-hunters-snow.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Impression, Sunrise" + "value": "The Hunters in the Snow" } }, "de": { "stringUnit": { "state": "translated", - "value": "Impression, Sonnenaufgang" + "value": "Die Jäger im Schnee" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Impression, soleil levant" + "value": "Les Chasseurs dans la neige" } }, "ar": { "stringUnit": { "state": "translated", - "value": "انطباع، شروق الشمس" + "value": "الصيادون في الثلج" } }, "es": { "stringUnit": { "state": "translated", - "value": "Impresión, sol naciente" + "value": "Cazadores en la nieve" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "印象·日出" + "value": "雪中獵人" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "印象·日出" + "value": "雪中猎人" } }, "ko": { "stringUnit": { "state": "translated", - "value": "인상, 해돋이" + "value": "눈 속의 사냥꾼들" } }, "ja": { "stringUnit": { "state": "translated", - "value": "印象・日の出" + "value": "雪中の狩人" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Impresija, izlazak sunca" + "value": "Lovci u snijegu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Impression, solopgang" + "value": "Jægerne i sneen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Impressione, levar del sole" + "value": "Cacciatori nella neve" } }, "km": { "stringUnit": { "state": "translated", - "value": "ចំណាប់អារម្មណ៍ ថ្ងៃរះ" + "value": "អ្នកប្រមាញ់ក្នុងព្រិល" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Impresjon, soloppgang" + "value": "Jegerne i snøen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Impresja, wschód słońca" + "value": "Myśliwi na śniegu" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Impressão, Nascer do Sol" + "value": "Caçadores na Neve" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Впечатление. Восходящее солнце" + "value": "Охотники на снегу" } }, "th": { "stringUnit": { "state": "translated", - "value": "อิมเพรสชัน ดวงอาทิตย์ขึ้น" + "value": "นักล่าในหิมะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "İzlenim, Gün Doğumu" + "value": "Karda Avcılar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Враження. Схід сонця" + "value": "Мисливці на снігу" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Ấn tượng, mặt trời mọc" + "value": "Những người thợ săn trên tuyết" } } } }, - "backdrop.monet-woman-parasol.title": { + "backdrop.cole-voyage-youth.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Woman with a Parasol" + "value": "The Voyage of Life: Youth" } }, "de": { "stringUnit": { "state": "translated", - "value": "Frau mit Sonnenschirm" + "value": "Die Lebensreise: Jugend" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Femme à l'ombrelle" + "value": "Le Voyage de la vie : la Jeunesse" } }, "ar": { "stringUnit": { "state": "translated", - "value": "امرأة تحمل مظلة" + "value": "رحلة الحياة: الشباب" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mujer con sombrilla" + "value": "El viaje de la vida: la juventud" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "撐陽傘的女人" + "value": "生命之旅:青年" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "撑阳伞的女人" + "value": "生命之旅:青年" } }, "ko": { "stringUnit": { "state": "translated", - "value": "파라솔을 든 여인" + "value": "인생의 항해: 청년기" } }, "ja": { "stringUnit": { "state": "translated", - "value": "日傘をさす女" + "value": "人生の航路:青年期" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Žena sa suncobranom" + "value": "Putovanje života: Mladost" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kvinde med parasol" + "value": "Livets rejse: Ungdom" } }, "it": { "stringUnit": { "state": "translated", - "value": "Donna con parasole" + "value": "Il viaggio della vita: la giovinezza" } }, "km": { "stringUnit": { "state": "translated", - "value": "ស្ត្រីកាន់ឆ័ត្រ" + "value": "ដំណើរជីវិត៖ វ័យក្មេង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kvinne med parasoll" + "value": "Livets reise: Ungdom" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kobieta z parasolką" + "value": "Podróż życia: Młodość" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Mulher com Sombrinha" + "value": "A Viagem da Vida: Juventude" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Дама с зонтиком" + "value": "Путешествие жизни: Юность" } }, "th": { "stringUnit": { "state": "translated", - "value": "หญิงสาวกับร่มกันแดด" + "value": "การเดินทางของชีวิต: วัยหนุ่มสาว" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Şemsiyeli Kadın" + "value": "Hayatın Yolculuğu: Gençlik" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Жінка з парасолькою" + "value": "Подорож життя: Юність" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Người phụ nữ cầm dù" + "value": "Hành trình cuộc đời: Tuổi trẻ" } } } }, - "backdrop.velde-cannon-shot.title": { + "backdrop.friedrich-monk-by-the-sea.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Cannon Shot" + "value": "The Monk by the Sea" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Kanonenschuss" + "value": "Der Mönch am Meer" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Coup de canon" + "value": "Le Moine au bord de la mer" } }, "ar": { "stringUnit": { "state": "translated", - "value": "طلقة المدفع" + "value": "الراهب على شاطئ البحر" } }, "es": { "stringUnit": { "state": "translated", - "value": "El cañonazo" + "value": "El monje junto al mar" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "炮擊" + "value": "海邊的修士" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "炮击" + "value": "海边的僧侣" } }, "ko": { "stringUnit": { "state": "translated", - "value": "대포 발사" + "value": "바닷가의 수도사" } }, "ja": { "stringUnit": { "state": "translated", - "value": "大砲の一撃" + "value": "海辺の修道士" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Topovski hitac" + "value": "Monah na obali mora" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kanonskuddet" + "value": "Munken ved havet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il colpo di cannone" + "value": "Monaco in riva al mare" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការបាញ់កាំភ្លើងធំ" + "value": "ព្រះសង្ឃនៅមាត់សមុទ្រ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kanonskuddet" + "value": "Munken ved havet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Wystrzał armatni" + "value": "Mnich nad morzem" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Tiro de Canhão" + "value": "O Monge à Beira-Mar" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Пушечный выстрел" + "value": "Монах у моря" } }, "th": { "stringUnit": { "state": "translated", - "value": "เสียงปืนใหญ่" + "value": "นักพรตริมทะเล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Top Atışı" + "value": "Deniz Kıyısındaki Keşiş" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Гарматний постріл" + "value": "Монах біля моря" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Phát đại bác" + "value": "Tu sĩ bên bờ biển" } } } }, - "backdrop.cross-pink-cloud.title": { + "backdrop.van-gogh-wheat-field-cypresses.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Pink Cloud" + "value": "Wheat Field with Cypresses" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die rosa Wolke" + "value": "Weizenfeld mit Zypressen" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Nuage rose" + "value": "Champ de blé avec cyprès" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الغيمة الوردية" + "value": "حقل قمح مع أشجار السرو" } }, "es": { "stringUnit": { "state": "translated", - "value": "La nube rosa" + "value": "Campo de trigo con cipreses" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "粉紅色的雲" + "value": "麥田與柏樹" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "粉红色的云" + "value": "麦田与柏树" } }, "ko": { "stringUnit": { "state": "translated", - "value": "분홍 구름" + "value": "사이프러스가 있는 밀밭" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ピンクの雲" + "value": "糸杉のある麦畑" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ružičasti oblak" + "value": "Žitno polje s čempresima" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den lyserøde sky" + "value": "Hvedemark med cypresser" } }, "it": { "stringUnit": { "state": "translated", - "value": "La nuvola rosa" + "value": "Campo di grano con cipressi" } }, "km": { "stringUnit": { "state": "translated", - "value": "ពពកពណ៌ផ្កាឈូក" + "value": "វាលស្រូវសាលីជាមួយដើមស៊ីប្រេស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den rosa skyen" + "value": "Hveteåker med sypresser" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Różowa chmura" + "value": "Pole pszenicy z cyprysami" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Nuvem Rosa" + "value": "Campo de Trigo com Ciprestes" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Розовое облако" + "value": "Пшеничное поле с кипарисами" } }, "th": { "stringUnit": { "state": "translated", - "value": "เมฆสีชมพู" + "value": "ทุ่งข้าวสาลีกับต้นไซเปรส" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pembe Bulut" + "value": "Selvili Buğday Tarlası" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Рожева хмара" + "value": "Пшеничне поле з кипарисами" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Đám mây hồng" + "value": "Cánh đồng lúa mì với cây bách" } } } }, - "backdrop.laurence-mckinley.title": { + "backdrop.monet-cliff-pourville.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Mt. McKinley" + "value": "The Cliff Walk at Pourville" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mt. McKinley" + "value": "Klippenweg bei Pourville" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Mont McKinley" + "value": "La Promenade sur la falaise, Pourville" } }, "ar": { "stringUnit": { "state": "translated", - "value": "جبل ماكينلي" + "value": "ممشى الجرف في بورفيل" } }, "es": { "stringUnit": { "state": "translated", - "value": "Monte McKinley" + "value": "Paseo por el acantilado en Pourville" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "麥金利山" + "value": "普維爾的懸崖步道" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "麦金利山" + "value": "普尔维尔的悬崖步道" } }, "ko": { "stringUnit": { "state": "translated", - "value": "매킨리산" + "value": "푸르빌 절벽 산책" } }, "ja": { "stringUnit": { "state": "translated", - "value": "マッキンリー山" + "value": "プールヴィルの断崖の散歩" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Planina McKinley" + "value": "Šetnja po litici kod Pourvillea" } }, "da": { "stringUnit": { "state": "translated", - "value": "Mount McKinley" + "value": "Klippestien ved Pourville" } }, "it": { "stringUnit": { "state": "translated", - "value": "Monte McKinley" + "value": "La passeggiata sulla scogliera a Pourville" } }, "km": { "stringUnit": { "state": "translated", - "value": "ភ្នំម៉ាឃីនលី" + "value": "ការដើរលេងលើច្រាំងថ្មនៅពួវីល" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Mount McKinley" + "value": "Klippestien ved Pourville" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Góra McKinley" + "value": "Spacer po klifie w Pourville" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Monte McKinley" + "value": "Passeio no Penhasco em Pourville" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Гора Мак-Кинли" + "value": "Прогулка по скалам в Пурвиле" } }, "th": { "stringUnit": { "state": "translated", - "value": "ภูเขาแมกคินลีย์" + "value": "ทางเดินบนหน้าผาที่ปูร์วิล" } }, "tr": { "stringUnit": { "state": "translated", - "value": "McKinley Dağı" + "value": "Pourville'de Yalıyar Yürüyüşü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Гора Мак-Кінлі" + "value": "Прогулянка скелями в Пурвілі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Núi McKinley" + "value": "Dạo bước trên vách đá ở Pourville" } } } }, - "backdrop.van-gogh-irises.title": { + "backdrop.van-gogh-almond-blossom.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Irises" + "value": "Almond Blossom" } }, "de": { "stringUnit": { "state": "translated", - "value": "Schwertlilien" + "value": "Mandelblüte" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Iris" + "value": "Amandier en fleurs" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السوسن" + "value": "أزهار اللوز" } }, "es": { "stringUnit": { "state": "translated", - "value": "Lirios" + "value": "Almendro en flor" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "鳶尾花" + "value": "盛開的杏花" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "鸢尾花" + "value": "盛开的杏花" } }, "ko": { "stringUnit": { "state": "translated", - "value": "붓꽃" + "value": "꽃 피는 아몬드 나무" } }, "ja": { "stringUnit": { "state": "translated", - "value": "アイリス" + "value": "花咲くアーモンドの木の枝" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Perunike" + "value": "Cvat badema" } }, "da": { "stringUnit": { "state": "translated", - "value": "Iris" + "value": "Mandelblomster" } }, "it": { "stringUnit": { "state": "translated", - "value": "Iris" + "value": "Mandorlo in fiore" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាអាយរីស" + "value": "ផ្កាអាល់ម៉ុនរីក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Iris" + "value": "Mandelblomster" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Irysy" + "value": "Kwitnący migdałowiec" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Íris" + "value": "Amendoeira em Flor" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Ирисы" + "value": "Цветущие ветки миндаля" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกไอริส" + "value": "ดอกอัลมอนด์ผลิบาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Süsenler" + "value": "Badem Çiçekleri" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Іриси" + "value": "Квітучий мигдаль" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa diên vĩ" + "value": "Hoa hạnh nhân" } } } }, - "backdrop.kramskoi-christ-in-the-desert.title": { + "backdrop.van-gogh-fishing-boats.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Christ in the Desert" + "value": "Fishing Boats at Saintes-Maries" } }, "de": { "stringUnit": { "state": "translated", - "value": "Christus in der Wüste" + "value": "Fischerboote in Saintes-Maries" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Christ dans le désert" + "value": "Barques de pêche aux Saintes-Maries" } }, "ar": { "stringUnit": { "state": "translated", - "value": "المسيح في البرية" + "value": "قوارب صيد في سانت ماري" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cristo en el desierto" + "value": "Barcas de pesca en Saintes-Maries" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "曠野中的基督" + "value": "聖瑪麗的漁船" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "旷野中的基督" + "value": "圣玛丽的渔船" } }, "ko": { "stringUnit": { "state": "translated", - "value": "광야의 그리스도" + "value": "생트마리의 고기잡이 배" } }, "ja": { "stringUnit": { "state": "translated", - "value": "荒野のキリスト" + "value": "サント=マリーの漁船" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Krist u pustinji" + "value": "Ribarski čamci u Saintes-Mariesu" } }, "da": { "stringUnit": { "state": "translated", - "value": "Kristus i ørkenen" + "value": "Fiskerbåde ved Saintes-Maries" } }, "it": { "stringUnit": { "state": "translated", - "value": "Cristo nel deserto" + "value": "Barche da pesca a Saintes-Maries" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្រះគ្រីស្ទនៅវាលរហោស្ថាន" + "value": "ទូកនេសាទនៅសាំង-ម៉ារី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Kristus i ørkenen" + "value": "Fiskebåter ved Saintes-Maries" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Chrystus na pustyni" + "value": "Łodzie rybackie w Saintes-Maries" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Cristo no Deserto" + "value": "Barcos de Pesca em Saintes-Maries" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Христос в пустыне" + "value": "Рыбацкие лодки в Сент-Мари" } }, "th": { "stringUnit": { "state": "translated", - "value": "พระคริสต์ในถิ่นทุรกันดาร" + "value": "เรือประมงที่แซ็งต์-มารี" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Çölde İsa" + "value": "Saintes-Maries'de Balıkçı Tekneleri" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Христос у пустелі" + "value": "Рибальські човни в Сент-Марі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chúa Kitô trong hoang mạc" + "value": "Thuyền đánh cá ở Saintes-Maries" } } } }, - "backdrop.turner-temeraire.title": { + "backdrop.hokusai-umezawa.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Fighting Temeraire" + "value": "Umezawa Manor in Sagami" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die letzte Fahrt der Temeraire" + "value": "Umezawa in der Provinz Sagami" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Dernier Voyage du Téméraire" + "value": "Umezawa dans la province de Sagami" } }, "ar": { "stringUnit": { "state": "translated", - "value": "السفينة المقاتلة تيميرير" + "value": "أوميزاوا في ساغامي" } }, "es": { "stringUnit": { "state": "translated", - "value": "El Temerario remolcado a dique seco" + "value": "Umezawa en la provincia de Sagami" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "被拖去解體的戰艦無畏號" + "value": "相州梅澤左" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "被拖去解体的战舰无畏号" + "value": "相州梅泽左" } }, "ko": { "stringUnit": { "state": "translated", - "value": "전함 테메레르" + "value": "사가미 지방 우메자와" } }, "ja": { "stringUnit": { "state": "translated", - "value": "戦艦テメレール号" + "value": "相州梅沢左" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Posljednje putovanje broda Temeraire" + "value": "Umezawa u provinciji Sagami" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den kæmpende Temeraire" + "value": "Umezawa i provinsen Sagami" } }, "it": { "stringUnit": { "state": "translated", - "value": "La valorosa Téméraire" + "value": "Umezawa nella provincia di Sagami" } }, "km": { "stringUnit": { "state": "translated", - "value": "នាវាចម្បាំងធេមេរែរ" + "value": "អ៊ូមេហ្សាវ៉ានៅខេត្តសាហ្គាមី" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den kjempende Temeraire" + "value": "Umezawa i provinsen Sagami" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Ostatnia droga okrętu Temeraire" + "value": "Umezawa w prowincji Sagami" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Temerário" + "value": "Umezawa na Província de Sagami" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Последний рейс корабля «Отважный»" + "value": "Умэдзава в провинции Сагами" } }, "th": { "stringUnit": { "state": "translated", - "value": "เรือรบเทเมแรร์" + "value": "อุเมะซาวะในแคว้นซางามิ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Savaşan Temeraire" + "value": "Sagami Eyaletinde Umezawa" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Останній рейс корабля «Відважний»" + "value": "Умедзава в провінції Саґамі" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Chiến hạm Temeraire" + "value": "Umezawa ở tỉnh Sagami" } } } }, - "backdrop.leonardo-vitruvian-man.title": { + "backdrop.whistler-falling-rocket.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Vitruvian Man" + "value": "Nocturne in Black and Gold" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der vitruvianische Mensch" + "value": "Nocturne in Schwarz und Gold" } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'Homme de Vitruve" + "value": "Nocturne en noir et or" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الرجل الفيتروفي" + "value": "نوكتورن بالأسود والذهبي" } }, "es": { "stringUnit": { "state": "translated", - "value": "El hombre de Vitruvio" + "value": "Nocturno en negro y oro" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "維特魯威人" + "value": "黑色和金色的夜曲" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "维特鲁威人" + "value": "黑色和金色的夜曲" } }, "ko": { "stringUnit": { "state": "translated", - "value": "비트루비우스적 인간" + "value": "검은색과 금색의 녹턴" } }, "ja": { "stringUnit": { "state": "translated", - "value": "ウィトルウィウス的人体図" + "value": "黒と金のノクターン" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Vitruvijev čovjek" + "value": "Nokturno u crnom i zlatnom" } }, "da": { "stringUnit": { "state": "translated", - "value": "Den vitruvianske mand" + "value": "Nocturne i sort og guld" } }, "it": { "stringUnit": { "state": "translated", - "value": "Uomo vitruviano" + "value": "Notturno in nero e oro" } }, "km": { "stringUnit": { "state": "translated", - "value": "បុរសវីទ្រូវៀន" + "value": "ណុកទឺនពណ៌ខ្មៅ និងមាស" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Den vitruvianske mann" + "value": "Nocturne i svart og gull" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Człowiek witruwiański" + "value": "Nokturn w czerni i złocie" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Homem Vitruviano" + "value": "Noturno em preto e dourado" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Витрувианский человек" + "value": "Ноктюрн в чёрном и золотом" } }, "th": { "stringUnit": { "state": "translated", - "value": "มนุษย์วิทรูเวียส" + "value": "น็อกเทิร์นสีดำและทอง" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Vitruvius Adamı" + "value": "Siyah ve Altın Noktürn" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Вітрувіанська людина" + "value": "Ноктюрн у чорному й золотому" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Người Vitruvius" + "value": "Dạ khúc đen và vàng" } } } }, - "backdrop.bruegel-hunters-snow.title": { + "backdrop.dore-fall-of-satan.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Hunters in the Snow" + "value": "The Fall of Satan" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Jäger im Schnee" + "value": "Der Sturz Satans" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Les Chasseurs dans la neige" + "value": "La Chute de Satan" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الصيادون في الثلج" + "value": "سقوط الشيطان" } }, "es": { "stringUnit": { "state": "translated", - "value": "Cazadores en la nieve" + "value": "La caída de Satanás" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "雪中獵人" + "value": "撒旦的墮落" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "雪中猎人" + "value": "撒旦的堕落" } }, "ko": { "stringUnit": { "state": "translated", - "value": "눈 속의 사냥꾼들" + "value": "사탄의 추락" } }, "ja": { "stringUnit": { "state": "translated", - "value": "雪中の狩人" + "value": "サタンの墜落" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Lovci u snijegu" + "value": "Pad Sotone" } }, "da": { "stringUnit": { "state": "translated", - "value": "Jægerne i sneen" + "value": "Satans fald" } }, "it": { "stringUnit": { "state": "translated", - "value": "Cacciatori nella neve" + "value": "La caduta di Satana" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ្នកប្រមាញ់ក្នុងព្រិល" + "value": "ការធ្លាក់របស់សាតាំង" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Jegerne i snøen" + "value": "Satans fall" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Myśliwi na śniegu" + "value": "Upadek Szatana" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Caçadores na Neve" + "value": "A Queda de Satanás" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Охотники на снегу" + "value": "Падение Сатаны" } }, "th": { "stringUnit": { "state": "translated", - "value": "นักล่าในหิมะ" + "value": "การตกสวรรค์ของซาตาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Karda Avcılar" + "value": "Şeytan'ın Düşüşü" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Мисливці на снігу" + "value": "Падіння Сатани" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Những người thợ săn trên tuyết" + "value": "Sự sa ngã của Satan" } } } }, - "backdrop.cole-voyage-youth.title": { + "backdrop.dore-flood.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Voyage of Life: Youth" + "value": "The Deluge" } }, "de": { "stringUnit": { "state": "translated", - "value": "Die Lebensreise: Jugend" + "value": "Die Sintflut" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Voyage de la vie : la Jeunesse" + "value": "Le Déluge" } }, "ar": { "stringUnit": { "state": "translated", - "value": "رحلة الحياة: الشباب" + "value": "الطوفان" } }, "es": { "stringUnit": { "state": "translated", - "value": "El viaje de la vida: la juventud" + "value": "El diluvio" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "生命之旅:青年" + "value": "大洪水" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "生命之旅:青年" + "value": "大洪水" } }, "ko": { "stringUnit": { "state": "translated", - "value": "인생의 항해: 청년기" + "value": "대홍수" } }, "ja": { "stringUnit": { "state": "translated", - "value": "人生の航路:青年期" + "value": "大洪水" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Putovanje života: Mladost" + "value": "Potop" } }, "da": { "stringUnit": { "state": "translated", - "value": "Livets rejse: Ungdom" + "value": "Syndfloden" } }, "it": { "stringUnit": { "state": "translated", - "value": "Il viaggio della vita: la giovinezza" + "value": "Il diluvio universale" } }, "km": { "stringUnit": { "state": "translated", - "value": "ដំណើរជីវិត៖ វ័យក្មេង" + "value": "ទឹកជំនន់ធំ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Livets reise: Ungdom" + "value": "Syndfloden" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Podróż życia: Młodość" + "value": "Potop" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A Viagem da Vida: Juventude" + "value": "O Dilúvio" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Путешествие жизни: Юность" + "value": "Всемирный потоп" } }, "th": { "stringUnit": { "state": "translated", - "value": "การเดินทางของชีวิต: วัยหนุ่มสาว" + "value": "มหาอุทกภัย" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Hayatın Yolculuğu: Gençlik" + "value": "Tufan" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Подорож життя: Юність" + "value": "Всесвітній потоп" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hành trình cuộc đời: Tuổi trẻ" + "value": "Đại hồng thủy" } } } }, - "backdrop.friedrich-monk-by-the-sea.title": { + "backdrop.dore-wolves-sheep.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Monk by the Sea" + "value": "The Wolves and the Sheep" } }, "de": { "stringUnit": { "state": "translated", - "value": "Der Mönch am Meer" + "value": "Die Wölfe und die Schafe" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Le Moine au bord de la mer" + "value": "Les Loups et les Brebis" } }, "ar": { "stringUnit": { "state": "translated", - "value": "الراهب على شاطئ البحر" + "value": "الذئاب والخراف" } }, "es": { "stringUnit": { "state": "translated", - "value": "El monje junto al mar" + "value": "Los lobos y las ovejas" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "海邊的修士" + "value": "狼與羊" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "海边的僧侣" + "value": "狼与羊" } }, "ko": { "stringUnit": { "state": "translated", - "value": "바닷가의 수도사" + "value": "늑대와 양" } }, "ja": { "stringUnit": { "state": "translated", - "value": "海辺の修道士" + "value": "狼と羊" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Monah na obali mora" + "value": "Vukovi i ovce" } }, "da": { "stringUnit": { "state": "translated", - "value": "Munken ved havet" + "value": "Ulvene og fårene" } }, "it": { "stringUnit": { "state": "translated", - "value": "Monaco in riva al mare" + "value": "I lupi e le pecore" } }, "km": { "stringUnit": { "state": "translated", - "value": "ព្រះសង្ឃនៅមាត់សមុទ្រ" + "value": "ចចក និងចៀម" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Munken ved havet" + "value": "Ulvene og sauene" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Mnich nad morzem" + "value": "Wilki i owce" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "O Monge à Beira-Mar" + "value": "Os Lobos e as Ovelhas" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Монах у моря" + "value": "Волки и овцы" } }, "th": { "stringUnit": { "state": "translated", - "value": "นักพรตริมทะเล" + "value": "หมาป่ากับแกะ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Deniz Kıyısındaki Keşiş" + "value": "Kurtlar ve Koyunlar" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Монах біля моря" + "value": "Вовки та вівці" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Tu sĩ bên bờ biển" + "value": "Bầy sói và đàn cừu" } } } }, - "backdrop.van-gogh-wheat-field-cypresses.title": { + "backdrop.dore-leviathan.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Wheat Field with Cypresses" + "value": "The Destruction of Leviathan" } }, "de": { "stringUnit": { "state": "translated", - "value": "Weizenfeld mit Zypressen" + "value": "Die Vernichtung Leviathans" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Champ de blé avec cyprès" + "value": "La Destruction de Léviathan" } }, "ar": { "stringUnit": { "state": "translated", - "value": "حقل قمح مع أشجار السرو" + "value": "هلاك لوياثان" } }, "es": { "stringUnit": { "state": "translated", - "value": "Campo de trigo con cipreses" + "value": "La destrucción del Leviatán" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "麥田與柏樹" + "value": "利維坦的毀滅" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "麦田与柏树" + "value": "利维坦的毁灭" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사이프러스가 있는 밀밭" + "value": "리바이어선의 파멸" } }, "ja": { "stringUnit": { "state": "translated", - "value": "糸杉のある麦畑" + "value": "レヴィアタンの滅亡" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Žitno polje s čempresima" + "value": "Uništenje Levijatana" } }, "da": { "stringUnit": { "state": "translated", - "value": "Hvedemark med cypresser" + "value": "Leviathans tilintetgørelse" } }, "it": { "stringUnit": { "state": "translated", - "value": "Campo di grano con cipressi" + "value": "La distruzione del Leviatano" } }, "km": { "stringUnit": { "state": "translated", - "value": "វាលស្រូវសាលីជាមួយដើមស៊ីប្រេស" + "value": "ការបំផ្លាញលេវីអាថាន" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Hveteåker med sypresser" + "value": "Leviatans tilintetgjørelse" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Pole pszenicy z cyprysami" + "value": "Zniszczenie Lewiatana" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Campo de Trigo com Ciprestes" + "value": "A Destruição do Leviatã" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Пшеничное поле с кипарисами" + "value": "Уничтожение Левиафана" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทุ่งข้าวสาลีกับต้นไซเปรส" + "value": "การทำลายเลวีอาธาน" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Selvili Buğday Tarlası" + "value": "Leviathan'ın Yok Edilişi" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Пшеничне поле з кипарисами" + "value": "Знищення Левіафана" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Cánh đồng lúa mì với cây bách" + "value": "Sự hủy diệt Leviathan" } } } }, - "backdrop.monet-cliff-pourville.title": { + "backdrop.dore-paradise-lost-book-vi.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "The Cliff Walk at Pourville" + "value": "Paradise Lost, Book VI" } }, "de": { "stringUnit": { "state": "translated", - "value": "Klippenweg bei Pourville" + "value": "Das verlorene Paradies, Buch VI" } }, "fr": { "stringUnit": { "state": "translated", - "value": "La Promenade sur la falaise, Pourville" + "value": "Le Paradis perdu, livre VI" } }, "ar": { "stringUnit": { "state": "translated", - "value": "ممشى الجرف في بورفيل" + "value": "الفردوس المفقود، الكتاب السادس" } }, "es": { "stringUnit": { "state": "translated", - "value": "Paseo por el acantilado en Pourville" + "value": "El paraíso perdido, libro VI" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "普維爾的懸崖步道" + "value": "失樂園,第六卷" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "普尔维尔的悬崖步道" + "value": "失乐园,第六卷" } }, "ko": { "stringUnit": { "state": "translated", - "value": "푸르빌 절벽 산책" + "value": "실낙원 제6권" } }, "ja": { "stringUnit": { "state": "translated", - "value": "プールヴィルの断崖の散歩" + "value": "失楽園 第6巻" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Šetnja po litici kod Pourvillea" + "value": "Izgubljeni raj, knjiga VI" } }, "da": { "stringUnit": { "state": "translated", - "value": "Klippestien ved Pourville" + "value": "Det tabte paradis, bog VI" } }, "it": { "stringUnit": { "state": "translated", - "value": "La passeggiata sulla scogliera a Pourville" + "value": "Paradiso perduto, libro VI" } }, "km": { "stringUnit": { "state": "translated", - "value": "ការដើរលេងលើច្រាំងថ្មនៅពួវីល" + "value": "ឋានសួគ៌ដែលបាត់បង់ សៀវភៅទី VI" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Klippestien ved Pourville" + "value": "Det tapte paradis, bok VI" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Spacer po klifie w Pourville" + "value": "Raj utracony, księga VI" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Passeio no Penhasco em Pourville" + "value": "Paraíso Perdido, Livro VI" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Прогулка по скалам в Пурвиле" + "value": "Потерянный рай, книга VI" } }, "th": { "stringUnit": { "state": "translated", - "value": "ทางเดินบนหน้าผาที่ปูร์วิล" + "value": "สวรรค์ที่หายไป เล่มที่ VI" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Pourville'de Yalıyar Yürüyüşü" + "value": "Kaybolmuş Cennet, VI. Kitap" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Прогулянка скелями в Пурвілі" + "value": "Втрачений рай, книга VI" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Dạo bước trên vách đá ở Pourville" + "value": "Thiên đường đã mất, Quyển VI" } } } }, - "backdrop.van-gogh-almond-blossom.title": { + "backdrop.dore-moses-tables.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Almond Blossom" + "value": "Moses Breaks the Tables of the Law" } }, "de": { "stringUnit": { "state": "translated", - "value": "Mandelblüte" + "value": "Moses zerbricht die Gesetzestafeln" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Amandier en fleurs" + "value": "Moïse brise les Tables de la Loi" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أزهار اللوز" + "value": "موسى يحطم ألواح الشريعة" } }, "es": { "stringUnit": { "state": "translated", - "value": "Almendro en flor" + "value": "Moisés rompe las Tablas de la Ley" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "盛開的杏花" + "value": "摩西摔碎法版" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "盛开的杏花" + "value": "摩西摔碎法版" } }, "ko": { "stringUnit": { "state": "translated", - "value": "꽃 피는 아몬드 나무" + "value": "율법의 돌판을 깨뜨리는 모세" } }, "ja": { "stringUnit": { "state": "translated", - "value": "花咲くアーモンドの木の枝" + "value": "律法の石板を砕くモーセ" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Cvat badema" + "value": "Mojsije razbija ploče Zakona" } }, "da": { "stringUnit": { "state": "translated", - "value": "Mandelblomster" + "value": "Moses knuser lovens tavler" } }, "it": { "stringUnit": { "state": "translated", - "value": "Mandorlo in fiore" + "value": "Mosè spezza le tavole della Legge" } }, "km": { "stringUnit": { "state": "translated", - "value": "ផ្កាអាល់ម៉ុនរីក" + "value": "ម៉ូសេបំបែកបន្ទះថ្មក្រឹត្យវិន័យ" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Mandelblomster" + "value": "Moses knuser lovtavlene" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Kwitnący migdałowiec" + "value": "Mojżesz rozbija tablice Prawa" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Amendoeira em Flor" + "value": "Moisés Quebra as Tábuas da Lei" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Цветущие ветки миндаля" + "value": "Моисей разбивает скрижали Завета" } }, "th": { "stringUnit": { "state": "translated", - "value": "ดอกอัลมอนด์ผลิบาน" + "value": "โมเสสทุบแผ่นศิลาพระบัญญัติ" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Badem Çiçekleri" + "value": "Musa Kanun Levhalarını Kırıyor" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Квітучий мигдаль" + "value": "Мойсей розбиває скрижалі Заповіту" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Hoa hạnh nhân" + "value": "Môsê đập vỡ bia đá Lề Luật" } } } }, - "backdrop.van-gogh-fishing-boats.title": { + "backdrop.dore-empyrean.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Fishing Boats at Saintes-Maries" + "value": "The Empyrean" } }, "de": { "stringUnit": { "state": "translated", - "value": "Fischerboote in Saintes-Maries" + "value": "Das Empyreum" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Barques de pêche aux Saintes-Maries" + "value": "L'Empyrée" } }, "ar": { "stringUnit": { "state": "translated", - "value": "قوارب صيد في سانت ماري" + "value": "السماء العليا" } }, "es": { "stringUnit": { "state": "translated", - "value": "Barcas de pesca en Saintes-Maries" + "value": "El Empíreo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "聖瑪麗的漁船" + "value": "最高天" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "圣玛丽的渔船" + "value": "最高天" } }, "ko": { "stringUnit": { "state": "translated", - "value": "생트마리의 고기잡이 배" + "value": "최고천" } }, "ja": { "stringUnit": { "state": "translated", - "value": "サント=マリーの漁船" + "value": "至高天" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Ribarski čamci u Saintes-Mariesu" + "value": "Empirej" } }, "da": { "stringUnit": { "state": "translated", - "value": "Fiskerbåde ved Saintes-Maries" + "value": "Empyræet" } }, "it": { "stringUnit": { "state": "translated", - "value": "Barche da pesca a Saintes-Maries" + "value": "L'Empireo" } }, "km": { "stringUnit": { "state": "translated", - "value": "ទូកនេសាទនៅសាំង-ម៉ារី" + "value": "ឋានសួគ៌ជាន់ខ្ពស់បំផុត" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Fiskebåter ved Saintes-Maries" + "value": "Empyreet" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Łodzie rybackie w Saintes-Maries" + "value": "Empireum" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Barcos de Pesca em Saintes-Maries" + "value": "O Empíreo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Рыбацкие лодки в Сент-Мари" + "value": "Эмпирей" } }, "th": { "stringUnit": { "state": "translated", - "value": "เรือประมงที่แซ็งต์-มารี" + "value": "สวรรค์ชั้นสูงสุด" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Saintes-Maries'de Balıkçı Tekneleri" + "value": "Empireum" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Рибальські човни в Сент-Марі" + "value": "Емпірей" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Thuyền đánh cá ở Saintes-Maries" + "value": "Thiên giới tối cao" } } } }, - "backdrop.hokusai-umezawa.title": { + "backdrop.dore-raven.title": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Umezawa Manor in Sagami" + "value": "The Raven" } }, "de": { "stringUnit": { "state": "translated", - "value": "Umezawa in der Provinz Sagami" + "value": "Der Rabe" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Umezawa dans la province de Sagami" + "value": "Le Corbeau" } }, "ar": { "stringUnit": { "state": "translated", - "value": "أوميزاوا في ساغامي" + "value": "الغراب" } }, "es": { "stringUnit": { "state": "translated", - "value": "Umezawa en la provincia de Sagami" + "value": "El cuervo" } }, "zh-Hant": { "stringUnit": { "state": "translated", - "value": "相州梅澤左" + "value": "烏鴉" } }, "zh-Hans": { "stringUnit": { "state": "translated", - "value": "相州梅泽左" + "value": "乌鸦" } }, "ko": { "stringUnit": { "state": "translated", - "value": "사가미 지방 우메자와" + "value": "갈까마귀" } }, "ja": { "stringUnit": { "state": "translated", - "value": "相州梅沢左" + "value": "大鴉" } }, "bs": { "stringUnit": { "state": "translated", - "value": "Umezawa u provinciji Sagami" + "value": "Gavran" } }, "da": { "stringUnit": { "state": "translated", - "value": "Umezawa i provinsen Sagami" + "value": "Ravnen" } }, "it": { "stringUnit": { "state": "translated", - "value": "Umezawa nella provincia di Sagami" + "value": "Il corvo" } }, "km": { "stringUnit": { "state": "translated", - "value": "អ៊ូមេហ្សាវ៉ានៅខេត្តសាហ្គាមី" + "value": "ក្អែក" } }, "nb": { "stringUnit": { "state": "translated", - "value": "Umezawa i provinsen Sagami" + "value": "Ravnen" } }, "pl": { "stringUnit": { "state": "translated", - "value": "Umezawa w prowincji Sagami" + "value": "Kruk" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Umezawa na Província de Sagami" + "value": "O Corvo" } }, "ru": { "stringUnit": { "state": "translated", - "value": "Умэдзава в провинции Сагами" + "value": "Ворон" } }, "th": { "stringUnit": { "state": "translated", - "value": "อุเมะซาวะในแคว้นซางามิ" + "value": "อีกา" } }, "tr": { "stringUnit": { "state": "translated", - "value": "Sagami Eyaletinde Umezawa" + "value": "Kuzgun" } }, "uk": { "stringUnit": { "state": "translated", - "value": "Умедзава в провінції Саґамі" + "value": "Крук" } }, "vi": { "stringUnit": { "state": "translated", - "value": "Umezawa ở tỉnh Sagami" + "value": "Con quạ" } } } }, - "backdrop.whistler-falling-rocket.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Nocturne in Black and Gold" + "status.label.working" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent is working.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Working" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Nocturne in Schwarz und Gold" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "قيد العمل" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nocturne en noir et or" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Radi" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "نوكتورن بالأسود والذهبي" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Arbejder" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nocturno en negro y oro" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "In Arbeit" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "黑色和金色的夜曲" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Trabajando" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "黑色和金色的夜曲" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "En cours" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "검은색과 금색의 녹턴" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "In corso" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "黒と金のノクターン" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "作業中" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Nokturno u crnom i zlatnom" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "កំពុងធ្វើ" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Nocturne i sort og guld" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "진행 중" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Notturno in nero e oro" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Arbeider" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ណុកទឺនពណ៌ខ្មៅ និងមាស" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "W toku" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Nocturne i svart og gull" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Em andamento" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Nokturn w czerni i złocie" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "В работе" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Noturno em preto e dourado" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "กำลังทำ" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Ноктюрн в чёрном и золотом" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Çalışıyor" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "น็อกเทิร์นสีดำและทอง" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "У роботі" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Siyah ve Altın Noktürn" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Đang làm" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Ноктюрн у чорному й золотому" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "进行中" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Dạ khúc đen và vàng" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "進行中" } } } }, - "backdrop.dore-fall-of-satan.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The Fall of Satan" + "status.label.loading" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. A page or command is loading.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loading" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Der Sturz Satans" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "جارٍ التحميل" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "La Chute de Satan" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Učitava se" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "سقوط الشيطان" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Indlæser" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La caída de Satanás" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Lädt" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "撒旦的墮落" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Cargando" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "撒旦的堕落" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Chargement" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사탄의 추락" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Caricamento" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "サタンの墜落" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "読み込み中" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Pad Sotone" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "កំពុងផ្ទុក" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Satans fald" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "로드 중" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "La caduta di Satana" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Laster inn" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ការធ្លាក់របស់សាតាំង" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Wczytywanie" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Satans fall" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Carregando" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Upadek Szatana" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Загрузка" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "A Queda de Satanás" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "กำลังโหลด" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Падение Сатаны" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Yükleniyor" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "การตกสวรรค์ของซาตาน" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Завантаження" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Şeytan'ın Düşüşü" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Đang tải" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Падіння Сатани" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "正在载入" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Sự sa ngã của Satan" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "正在載入" } } } }, - "backdrop.dore-flood.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The Deluge" + "status.label.paused" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. Work stopped part way.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paused" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die Sintflut" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "متوقف مؤقتًا" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Le Déluge" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pauzirano" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الطوفان" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Sat på pause" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El diluvio" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pausiert" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "大洪水" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "En pausa" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "大洪水" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "En pause" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "대홍수" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "In pausa" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "大洪水" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "一時停止中" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Potop" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "បានផ្អាក" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Syndfloden" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "일시 정지됨" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Il diluvio universale" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Satt på pause" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ទឹកជំនន់ធំ" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Wstrzymano" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Syndfloden" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pausado" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Potop" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Приостановлено" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O Dilúvio" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "หยุดชั่วคราว" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Всемирный потоп" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Duraklatıldı" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "มหาอุทกภัย" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Призупинено" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Tufan" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Tạm dừng" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Всесвітній потоп" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "已暂停" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Đại hồng thủy" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "已暫停" } } } }, - "backdrop.dore-wolves-sheep.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The Wolves and the Sheep" + "status.label.waiting" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent waits for the user.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Waiting" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die Wölfe und die Schafe" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "في الانتظار" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Les Loups et les Brebis" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Čeka" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الذئاب والخراف" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Venter" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Los lobos y las ovejas" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Wartet" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "狼與羊" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "En espera" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "狼与羊" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "En attente" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "늑대와 양" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "In attesa" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "狼と羊" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "待機中" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Vukovi i ovce" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "កំពុងរង់ចាំ" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Ulvene og fårene" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "대기 중" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "I lupi e le pecore" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Venter" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ចចក និងចៀម" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Oczekuje" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Ulvene og sauene" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Aguardando" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Wilki i owce" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ожидание" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Os Lobos e as Ovelhas" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "กำลังรอ" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Волки и овцы" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Bekliyor" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "หมาป่ากับแกะ" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Очікування" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Kurtlar ve Koyunlar" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Đang chờ" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Вовки та вівці" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "等待中" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Bầy sói và đàn cừu" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "等待中" } } } }, - "backdrop.dore-leviathan.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The Destruction of Leviathan" + "status.label.permission" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent asks permission to run something.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Needs permission" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Die Vernichtung Leviathans" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "يحتاج إلى إذن" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "La Destruction de Léviathan" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Treba dozvolu" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "هلاك لوياثان" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Kræver tilladelse" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La destrucción del Leviatán" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Braucht Erlaubnis" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "利維坦的毀滅" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Necesita permiso" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "利维坦的毁灭" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Autorisation requise" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리바이어선의 파멸" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Serve un permesso" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レヴィアタンの滅亡" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "許可が必要" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Uništenje Levijatana" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ត្រូវការការអនុញ្ញាត" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Leviathans tilintetgørelse" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "권한 필요" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "La distruzione del Leviatano" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Trenger tillatelse" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ការបំផ្លាញលេវីអាថាន" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Wymaga zgody" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Leviatans tilintetgjørelse" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Precisa de permissão" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Zniszczenie Lewiatana" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Нужно разрешение" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "A Destruição do Leviatã" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ต้องการสิทธิ์" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Уничтожение Левиафана" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "İzin gerekiyor" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "การทำลายเลวีอาธาน" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Потрібен дозвіл" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Leviathan'ın Yok Edilişi" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Cần quyền" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Знищення Левіафана" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "需要权限" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Sự hủy diệt Leviathan" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "需要權限" } } } }, - "backdrop.dore-paradise-lost-book-vi.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Paradise Lost, Book VI" + "status.label.question" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. An agent asks the user a question.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Question" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Das verlorene Paradies, Buch VI" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "سؤال" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Le Paradis perdu, livre VI" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pitanje" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الفردوس المفقود، الكتاب السادس" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Spørgsmål" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El paraíso perdido, libro VI" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Frage" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "失樂園,第六卷" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pregunta" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "失乐园,第六卷" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Question" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "실낙원 제6권" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Domanda" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "失楽園 第6巻" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "質問" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Izgubljeni raj, knjiga VI" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "សំណួរ" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Det tabte paradis, bog VI" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "질문" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Paradiso perduto, libro VI" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Spørsmål" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ឋានសួគ៌ដែលបាត់បង់ សៀវភៅទី VI" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pytanie" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Det tapte paradis, bok VI" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pergunta" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Raj utracony, księga VI" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Вопрос" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Paraíso Perdido, Livro VI" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "คำถาม" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Потерянный рай, книга VI" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Soru" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สวรรค์ที่หายไป เล่มที่ VI" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Питання" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Kaybolmuş Cennet, VI. Kitap" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Câu hỏi" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Втрачений рай, книга VI" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "问题" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Thiên đường đã mất, Quyển VI" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "問題" } } - } - }, - "backdrop.dore-moses-tables.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Moses Breaks the Tables of the Law" + } + }, + "status.label.auth" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. A program needs the user to sign in.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in needed" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Moses zerbricht die Gesetzestafeln" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "يلزم تسجيل الدخول" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Moïse brise les Tables de la Loi" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Potrebna prijava" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "موسى يحطم ألواح الشريعة" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Log ind kræves" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Moisés rompe las Tablas de la Ley" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Anmeldung nötig" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "摩西摔碎法版" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Hay que iniciar sesión" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "摩西摔碎法版" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Connexion requise" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "율법의 돌판을 깨뜨리는 모세" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Accesso richiesto" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "律法の石板を砕くモーセ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインインが必要" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Mojsije razbija ploče Zakona" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ត្រូវការចូលគណនី" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Moses knuser lovens tavler" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "로그인 필요" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Mosè spezza le tavole della Legge" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Pålogging kreves" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ម៉ូសេបំបែកបន្ទះថ្មក្រឹត្យវិន័យ" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Wymaga logowania" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Moses knuser lovtavlene" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Login necessário" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Mojżesz rozbija tablice Prawa" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Нужен вход" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "Moisés Quebra as Tábuas da Lei" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ต้องลงชื่อเข้าใช้" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Моисей разбивает скрижали Завета" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Oturum açılmalı" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "โมเสสทุบแผ่นศิลาพระบัญญัติ" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Потрібен вхід" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Musa Kanun Levhalarını Kırıyor" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Cần đăng nhập" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Мойсей розбиває скрижалі Заповіту" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "需要登录" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Môsê đập vỡ bia đá Lề Luật" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "需要登入" } } } }, - "backdrop.dore-empyrean.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The Empyrean" + "status.label.error" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. The run failed.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Das Empyreum" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "خطأ" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "L'Empyrée" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Greška" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "السماء العليا" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fejl" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El Empíreo" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fehler" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "最高天" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Error" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "最高天" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erreur" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "최고천" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Errore" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "至高天" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "エラー" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Empirej" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "កំហុស" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Empyræet" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "오류" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "L'Empireo" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Feil" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ឋានសួគ៌ជាន់ខ្ពស់បំផុត" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Błąd" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Empyreet" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Erro" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Empireum" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ошибка" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O Empíreo" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ข้อผิดพลาด" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Эмпирей" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Hata" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "สวรรค์ชั้นสูงสุด" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Помилка" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Empireum" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Lỗi" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Емпірей" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "错误" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Thiên giới tối cao" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "錯誤" } } } }, - "backdrop.dore-raven.title": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The Raven" + "status.label.done" : { + "comment" : "Short status name (cx-sya4n): the status mark's tooltip and VoiceOver label, and the text beside a sidebar workspace row's mark when status indicators are static. Keep it to a word or two. The run finished.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Done" } }, - "de": { - "stringUnit": { - "state": "translated", - "value": "Der Rabe" + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "تم" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Le Corbeau" + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Gotovo" } }, - "ar": { - "stringUnit": { - "state": "translated", - "value": "الغراب" + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Færdig" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El cuervo" + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fertig" } }, - "zh-Hant": { - "stringUnit": { - "state": "translated", - "value": "烏鴉" + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Listo" } }, - "zh-Hans": { - "stringUnit": { - "state": "translated", - "value": "乌鸦" + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Terminé" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "갈까마귀" + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Fatto" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "大鴉" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "完了" } }, - "bs": { - "stringUnit": { - "state": "translated", - "value": "Gavran" + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "រួចរាល់" } }, - "da": { - "stringUnit": { - "state": "translated", - "value": "Ravnen" + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "완료" } }, - "it": { - "stringUnit": { - "state": "translated", - "value": "Il corvo" + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ferdig" } }, - "km": { - "stringUnit": { - "state": "translated", - "value": "ក្អែក" + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Gotowe" } }, - "nb": { - "stringUnit": { - "state": "translated", - "value": "Ravnen" + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Concluído" } }, - "pl": { - "stringUnit": { - "state": "translated", - "value": "Kruk" + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Готово" } }, - "pt-BR": { - "stringUnit": { - "state": "translated", - "value": "O Corvo" + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "เสร็จแล้ว" } }, - "ru": { - "stringUnit": { - "state": "translated", - "value": "Ворон" + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Bitti" } }, - "th": { - "stringUnit": { - "state": "translated", - "value": "อีกา" + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Готово" } }, - "tr": { - "stringUnit": { - "state": "translated", - "value": "Kuzgun" + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Xong" } }, - "uk": { - "stringUnit": { - "state": "translated", - "value": "Крук" + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "完成" } }, - "vi": { - "stringUnit": { - "state": "translated", - "value": "Con quạ" + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "完成" } } } diff --git a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings index 938909c1385a..878b813c3a8d 100644 --- a/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings +++ b/Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings @@ -1,530 +1,133 @@ { "sourceLanguage": "en", "strings": { - "settings.statusIndicator.animation": { - "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): the row that picks animated or static status indicators.", - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Status Indicators" - } - }, - "ar": { - "stringUnit": { - "state": "needs_review", - "value": "مؤشرات الحالة" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Indikatori statusa" - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Statusindikatorer" - } - }, - "de": { - "stringUnit": { - "state": "needs_review", - "value": "Statusanzeigen" - } - }, - "es": { - "stringUnit": { - "state": "needs_review", - "value": "Indicadores de estado" - } - }, - "fr": { - "stringUnit": { - "state": "needs_review", - "value": "Indicateurs d’état" - } - }, - "it": { - "stringUnit": { - "state": "needs_review", - "value": "Indicatori di stato" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ステータスインジケーター" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "សូចនាករស្ថានភាព" - } - }, - "ko": { - "stringUnit": { - "state": "needs_review", - "value": "상태 표시기" - } - }, - "nb": { - "stringUnit": { - "state": "needs_review", - "value": "Statusindikatorer" - } - }, - "pl": { - "stringUnit": { - "state": "needs_review", - "value": "Wskaźniki stanu" - } - }, - "pt-BR": { - "stringUnit": { - "state": "needs_review", - "value": "Indicadores de status" - } - }, - "ru": { - "stringUnit": { - "state": "needs_review", - "value": "Индикаторы состояния" - } - }, - "th": { - "stringUnit": { - "state": "needs_review", - "value": "ตัวบ่งชี้สถานะ" - } - }, - "tr": { - "stringUnit": { - "state": "needs_review", - "value": "Durum göstergeleri" - } - }, - "uk": { - "stringUnit": { - "state": "needs_review", - "value": "Індикатори стану" - } - }, - "vi": { - "stringUnit": { - "state": "needs_review", - "value": "Chỉ báo trạng thái" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "needs_review", - "value": "状态指示器" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "needs_review", - "value": "狀態指示器" - } - } - } - }, - "settings.statusIndicator.animation.help": { - "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): help for the Status Indicators row. \"Reduce Motion\" is the macOS accessibility setting; use its name in this language.", - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion." - } - }, - "ar": { - "stringUnit": { - "state": "needs_review", - "value": "يستخدم الوضع الثابت ألوانًا ثابتة وشكلًا مميزًا لكل حالة وتسميات قصيرة. وهو مفعّل دائمًا عند تشغيل «تقليل الحركة»." - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Statično koristi postojane boje, poseban oblik za svako stanje i kratke oznake. Uvijek je uključeno uz Smanji pokrete." - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Statisk bruger faste farver, en særskilt form for hver tilstand og korte etiketter. Det er altid slået til med Reducer bevægelse." - } - }, - "de": { - "stringUnit": { - "state": "needs_review", - "value": "„Statisch“ verwendet gleichbleibende Farben, eine eigene Form für jeden Zustand und kurze Beschriftungen. Bei „Bewegung reduzieren“ ist es immer aktiv." - } - }, - "es": { - "stringUnit": { - "state": "needs_review", - "value": "Estático usa colores fijos, una forma distinta para cada estado y etiquetas breves. Siempre está activo con Reducir movimiento." - } - }, - "fr": { - "stringUnit": { - "state": "needs_review", - "value": "Statique utilise des couleurs fixes, une forme distincte pour chaque état et de courts libellés. Il est toujours actif avec Réduire les animations." - } - }, - "it": { - "stringUnit": { - "state": "needs_review", - "value": "Statico usa colori fissi, una forma distinta per ogni stato ed etichette brevi. È sempre attivo con Riduci movimento." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "静的では、変化しない色、状態ごとに異なる形、短いラベルを使います。「視差効果を減らす」がオンのときは常に静的になります。" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "ឋិតិវន្តប្រើពណ៌ថេរ រូបរាងខុសគ្នាសម្រាប់ស្ថានភាពនីមួយៗ និងស្លាកខ្លីៗ។ វាតែងតែបើកនៅពេលកាត់បន្ថយចលនាបើក។" - } - }, - "ko": { - "stringUnit": { - "state": "needs_review", - "value": "정적은 고정된 색상, 상태마다 다른 모양, 짧은 레이블을 사용합니다. 동작 줄이기가 켜져 있으면 항상 적용됩니다." - } - }, - "nb": { - "stringUnit": { - "state": "needs_review", - "value": "Statisk bruker faste farger, en egen form for hver tilstand og korte etiketter. Det er alltid på med Reduser bevegelse." - } - }, - "pl": { - "stringUnit": { - "state": "needs_review", - "value": "Statyczne używa stałych kolorów, osobnego kształtu dla każdego stanu i krótkich etykiet. Jest zawsze włączone przy Ogranicz ruch." - } - }, - "pt-BR": { - "stringUnit": { - "state": "needs_review", - "value": "Estático usa cores fixas, uma forma diferente para cada estado e rótulos curtos. Fica sempre ativo com Reduzir movimento." - } - }, - "ru": { - "stringUnit": { - "state": "needs_review", - "value": "В статичном режиме используются постоянные цвета, своя форма для каждого состояния и короткие подписи. При «Уменьшении движения» он включён всегда." - } - }, - "th": { - "stringUnit": { - "state": "needs_review", - "value": "แบบคงที่ใช้สีคงที่ รูปทรงเฉพาะสำหรับแต่ละสถานะ และป้ายสั้นๆ และจะเปิดใช้เสมอเมื่อเปิดลดการเคลื่อนไหว" - } - }, - "tr": { - "stringUnit": { - "state": "needs_review", - "value": "Sabit; değişmeyen renkler, her durum için ayrı bir şekil ve kısa etiketler kullanır. Hareketi Azalt açıkken her zaman etkindir." - } - }, - "uk": { - "stringUnit": { - "state": "needs_review", - "value": "Статичний режим використовує незмінні кольори, окрему форму для кожного стану та короткі підписи. Зі «Зменшенням руху» він завжди ввімкнений." - } - }, - "vi": { - "stringUnit": { - "state": "needs_review", - "value": "Tĩnh dùng màu cố định, hình dạng riêng cho từng trạng thái và nhãn ngắn. Luôn bật khi Giảm chuyển động đang bật." - } - }, - "zh-Hans": { - "stringUnit": { - "state": "needs_review", - "value": "静态使用固定颜色、每种状态独有的形状和简短标签。开启“减弱动态效果”时始终使用静态。" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "needs_review", - "value": "靜態使用固定顏色、每種狀態獨有的形狀和簡短標籤。開啟「減少動態效果」時一律使用靜態。" - } - } - } - }, - "settings.choice.animated": { - "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): choice: status indicators move (spinners, pulses).", + "settings.choice.transparent": { "extractionState": "manual", "localizations": { "en": { "stringUnit": { "state": "translated", - "value": "Animated" + "value": "Transparent" } }, "ar": { "stringUnit": { "state": "needs_review", - "value": "متحركة" + "value": "شفاف بالكامل" } }, "bs": { "stringUnit": { "state": "needs_review", - "value": "Animirano" + "value": "Prozirno" } }, "da": { "stringUnit": { "state": "needs_review", - "value": "Animeret" + "value": "Gennemsigtig" } }, "de": { "stringUnit": { "state": "needs_review", - "value": "Animiert" + "value": "Transparent" } }, "es": { "stringUnit": { "state": "needs_review", - "value": "Animado" + "value": "Transparente" } }, "fr": { "stringUnit": { "state": "needs_review", - "value": "Animé" + "value": "Transparent" } }, "it": { "stringUnit": { "state": "needs_review", - "value": "Animato" + "value": "Trasparente" } }, "ja": { - "stringUnit": { - "state": "translated", - "value": "アニメーション" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "មានចលនា" - } - }, - "ko": { - "stringUnit": { - "state": "needs_review", - "value": "애니메이션" - } - }, - "nb": { - "stringUnit": { - "state": "needs_review", - "value": "Animert" - } - }, - "pl": { - "stringUnit": { - "state": "needs_review", - "value": "Animowane" - } - }, - "pt-BR": { - "stringUnit": { - "state": "needs_review", - "value": "Animado" - } - }, - "ru": { "stringUnit": { "state": "needs_review", - "value": "Анимированные" - } - }, - "th": { - "stringUnit": { - "state": "needs_review", - "value": "เคลื่อนไหว" - } - }, - "tr": { - "stringUnit": { - "state": "needs_review", - "value": "Animasyonlu" - } - }, - "uk": { - "stringUnit": { - "state": "needs_review", - "value": "Анімовані" - } - }, - "vi": { - "stringUnit": { - "state": "needs_review", - "value": "Động" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "needs_review", - "value": "动画" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "needs_review", - "value": "動畫" - } - } - } - }, - "settings.choice.static": { - "comment": "Settings > Appearance > Loading Indicator (cx-sya4n): choice: status indicators stand still, with distinct shapes and short labels.", - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Static" - } - }, - "ar": { - "stringUnit": { - "state": "needs_review", - "value": "ثابتة" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Statično" - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Statisk" - } - }, - "de": { - "stringUnit": { - "state": "needs_review", - "value": "Statisch" - } - }, - "es": { - "stringUnit": { - "state": "needs_review", - "value": "Estático" - } - }, - "fr": { - "stringUnit": { - "state": "needs_review", - "value": "Statique" - } - }, - "it": { - "stringUnit": { - "state": "needs_review", - "value": "Statico" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "静的" + "value": "透明" } }, "km": { "stringUnit": { "state": "needs_review", - "value": "ឋិតិវន្ត" + "value": "ថ្លា" } }, "ko": { "stringUnit": { "state": "needs_review", - "value": "정적" + "value": "투명" } }, "nb": { "stringUnit": { "state": "needs_review", - "value": "Statisk" + "value": "Gjennomsiktig" } }, "pl": { "stringUnit": { "state": "needs_review", - "value": "Statyczne" + "value": "Przezroczysty" } }, "pt-BR": { "stringUnit": { "state": "needs_review", - "value": "Estático" + "value": "Transparente" } }, "ru": { "stringUnit": { "state": "needs_review", - "value": "Статичные" + "value": "Прозрачный" } }, "th": { "stringUnit": { "state": "needs_review", - "value": "คงที่" + "value": "โปร่งใส" } }, "tr": { "stringUnit": { "state": "needs_review", - "value": "Sabit" + "value": "Saydam" } }, "uk": { "stringUnit": { "state": "needs_review", - "value": "Статичні" + "value": "Прозорий" } }, "vi": { "stringUnit": { "state": "needs_review", - "value": "Tĩnh" + "value": "Trong suốt" } }, "zh-Hans": { "stringUnit": { "state": "needs_review", - "value": "静态" + "value": "透明" } }, "zh-Hant": { "stringUnit": { "state": "needs_review", - "value": "靜態" + "value": "透明" } } } @@ -89598,137 +89201,6 @@ } } }, - "settings.choice.transparent": { - "extractionState": "manual", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Transparent" - } - }, - "ar": { - "stringUnit": { - "state": "needs_review", - "value": "شفاف بالكامل" - } - }, - "bs": { - "stringUnit": { - "state": "needs_review", - "value": "Prozirno" - } - }, - "da": { - "stringUnit": { - "state": "needs_review", - "value": "Gennemsigtig" - } - }, - "de": { - "stringUnit": { - "state": "needs_review", - "value": "Transparent" - } - }, - "es": { - "stringUnit": { - "state": "needs_review", - "value": "Transparente" - } - }, - "fr": { - "stringUnit": { - "state": "needs_review", - "value": "Transparent" - } - }, - "it": { - "stringUnit": { - "state": "needs_review", - "value": "Trasparente" - } - }, - "ja": { - "stringUnit": { - "state": "needs_review", - "value": "透明" - } - }, - "km": { - "stringUnit": { - "state": "needs_review", - "value": "ថ្លា" - } - }, - "ko": { - "stringUnit": { - "state": "needs_review", - "value": "투명" - } - }, - "nb": { - "stringUnit": { - "state": "needs_review", - "value": "Gjennomsiktig" - } - }, - "pl": { - "stringUnit": { - "state": "needs_review", - "value": "Przezroczysty" - } - }, - "pt-BR": { - "stringUnit": { - "state": "needs_review", - "value": "Transparente" - } - }, - "ru": { - "stringUnit": { - "state": "needs_review", - "value": "Прозрачный" - } - }, - "th": { - "stringUnit": { - "state": "needs_review", - "value": "โปร่งใส" - } - }, - "tr": { - "stringUnit": { - "state": "needs_review", - "value": "Saydam" - } - }, - "uk": { - "stringUnit": { - "state": "needs_review", - "value": "Прозорий" - } - }, - "vi": { - "stringUnit": { - "state": "needs_review", - "value": "Trong suốt" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "needs_review", - "value": "透明" - } - }, - "zh-Hant": { - "stringUnit": { - "state": "needs_review", - "value": "透明" - } - } - } - }, "settings.appearance.chromeStyle": { "extractionState": "manual", "localizations": { @@ -91431,6 +90903,534 @@ } } } + }, + "settings.statusIndicator.animation" : { + "comment" : "Settings > Appearance > Loading Indicator (cx-sya4n): the row that picks animated or static status indicators.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status Indicators" + } + }, + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "مؤشرات الحالة" + } + }, + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Indikatori statusa" + } + }, + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statusindikatorer" + } + }, + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statusanzeigen" + } + }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Indicadores de estado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Indicateurs d’état" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Indicatori di stato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ステータスインジケーター" + } + }, + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "សូចនាករស្ថានភាព" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "상태 표시기" + } + }, + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statusindikatorer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Wskaźniki stanu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Indicadores de status" + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Индикаторы состояния" + } + }, + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ตัวบ่งชี้สถานะ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Durum göstergeleri" + } + }, + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Індикатори стану" + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Chỉ báo trạng thái" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "状态指示器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "狀態指示器" + } + } + } + }, + "settings.statusIndicator.animation.help" : { + "comment" : "Settings > Appearance > Loading Indicator (cx-sya4n): help for the Status Indicators row. \"Reduce Motion\" is the macOS accessibility setting; use its name in this language.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Static uses steady colors, a distinct shape for each state and short labels. It is always on under Reduce Motion." + } + }, + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "يستخدم الوضع الثابت ألوانًا ثابتة وشكلًا مميزًا لكل حالة وتسميات قصيرة. وهو مفعّل دائمًا عند تشغيل «تقليل الحركة»." + } + }, + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statično koristi postojane boje, poseban oblik za svako stanje i kratke oznake. Uvijek je uključeno uz Smanji pokrete." + } + }, + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statisk bruger faste farver, en særskilt form for hver tilstand og korte etiketter. Det er altid slået til med Reducer bevægelse." + } + }, + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "„Statisch“ verwendet gleichbleibende Farben, eine eigene Form für jeden Zustand und kurze Beschriftungen. Bei „Bewegung reduzieren“ ist es immer aktiv." + } + }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Estático usa colores fijos, una forma distinta para cada estado y etiquetas breves. Siempre está activo con Reducir movimiento." + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statique utilise des couleurs fixes, une forme distincte pour chaque état et de courts libellés. Il est toujours actif avec Réduire les animations." + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statico usa colori fissi, una forma distinta per ogni stato ed etichette brevi. È sempre attivo con Riduci movimento." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "静的では、変化しない色、状態ごとに異なる形、短いラベルを使います。「視差効果を減らす」がオンのときは常に静的になります。" + } + }, + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ឋិតិវន្តប្រើពណ៌ថេរ រូបរាងខុសគ្នាសម្រាប់ស្ថានភាពនីមួយៗ និងស្លាកខ្លីៗ។ វាតែងតែបើកនៅពេលកាត់បន្ថយចលនាបើក។" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "정적은 고정된 색상, 상태마다 다른 모양, 짧은 레이블을 사용합니다. 동작 줄이기가 켜져 있으면 항상 적용됩니다." + } + }, + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statisk bruker faste farger, en egen form for hver tilstand og korte etiketter. Det er alltid på med Reduser bevegelse." + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statyczne używa stałych kolorów, osobnego kształtu dla każdego stanu i krótkich etykiet. Jest zawsze włączone przy Ogranicz ruch." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Estático usa cores fixas, uma forma diferente para cada estado e rótulos curtos. Fica sempre ativo com Reduzir movimento." + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "В статичном режиме используются постоянные цвета, своя форма для каждого состояния и короткие подписи. При «Уменьшении движения» он включён всегда." + } + }, + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "แบบคงที่ใช้สีคงที่ รูปทรงเฉพาะสำหรับแต่ละสถานะ และป้ายสั้นๆ และจะเปิดใช้เสมอเมื่อเปิดลดการเคลื่อนไหว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Sabit; değişmeyen renkler, her durum için ayrı bir şekil ve kısa etiketler kullanır. Hareketi Azalt açıkken her zaman etkindir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Статичний режим використовує незмінні кольори, окрему форму для кожного стану та короткі підписи. Зі «Зменшенням руху» він завжди ввімкнений." + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Tĩnh dùng màu cố định, hình dạng riêng cho từng trạng thái và nhãn ngắn. Luôn bật khi Giảm chuyển động đang bật." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "静态使用固定颜色、每种状态独有的形状和简短标签。开启“减弱动态效果”时始终使用静态。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "靜態使用固定顏色、每種狀態獨有的形狀和簡短標籤。開啟「減少動態效果」時一律使用靜態。" + } + } + } + }, + "settings.choice.animated" : { + "comment" : "Settings > Appearance > Loading Indicator (cx-sya4n): choice: status indicators move (spinners, pulses).", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animated" + } + }, + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "متحركة" + } + }, + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animirano" + } + }, + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animeret" + } + }, + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animiert" + } + }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animé" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アニメーション" + } + }, + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "មានចលនា" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "애니메이션" + } + }, + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animert" + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animowane" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Анимированные" + } + }, + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "เคลื่อนไหว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Animasyonlu" + } + }, + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Анімовані" + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Động" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "动画" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "動畫" + } + } + } + }, + "settings.choice.static" : { + "comment" : "Settings > Appearance > Loading Indicator (cx-sya4n): choice: status indicators stand still, with distinct shapes and short labels.", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Static" + } + }, + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ثابتة" + } + }, + "bs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statično" + } + }, + "da" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statisk" + } + }, + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statisch" + } + }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Estático" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statique" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statico" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "静的" + } + }, + "km" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "ឋិតិវន្ត" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "정적" + } + }, + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statisk" + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Statyczne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Estático" + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Статичные" + } + }, + "th" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "คงที่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Sabit" + } + }, + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Статичні" + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Tĩnh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "静态" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "靜態" + } + } + } } }, "version": "1.0" From c98fa5777d27ba3c3ec10de67f4afb7c20997c90 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Wed, 14 Oct 2026 01:24:31 -0700 Subject: [PATCH 15/16] chore: regenerate settings exports on the merged head Co-Authored-By: Claude Opus 5.5 --- docs/mdm/com.manaflow.cmux.json | 22 ++ docs/mdm/com.manaflow.cmux.plist | 35 +++ docs/mdm/managed-preferences.md | 2 + schemas/settings/settings-schema.json | 181 +++++++++++- .../src/pages/settings/generated/strings.json | 273 ++++++++++++++++++ 5 files changed, 511 insertions(+), 2 deletions(-) diff --git a/docs/mdm/com.manaflow.cmux.json b/docs/mdm/com.manaflow.cmux.json index 6cea289a216c..e199140dae72 100644 --- a/docs/mdm/com.manaflow.cmux.json +++ b/docs/mdm/com.manaflow.cmux.json @@ -583,6 +583,22 @@ "title" : "Borders", "type" : "string" }, + "appearance.chromeStyle" : { + "default" : "default", + "description" : "The look of the window: whether panes sit in one rounded card, and where lines are drawn. Separation, Sidebar Background and the sidebar border still win when you set them.", + "enum" : [ + "default", + "card", + "card-outlined", + "flat", + "flat-sidebar-line", + "bare", + "panes", + "two-tone" + ], + "title" : "Window Style", + "type" : "string" + }, "appearance.density" : { "default" : "compact", "description" : "appearance.density", @@ -2840,6 +2856,12 @@ "title" : "Animations", "type" : "string" }, + "ui.paneAnimations" : { + "default" : false, + "description" : "Splits, closes, moves, zooms, column scrolls and screen switches slide into place. Off: they change at once.", + "title" : "Animate Panes", + "type" : "boolean" + }, "UpdateChannel" : { "description" : "Update channel this device follows.", "enum" : [ diff --git a/docs/mdm/com.manaflow.cmux.plist b/docs/mdm/com.manaflow.cmux.plist index c325929d88c1..69e0e93cf6e2 100644 --- a/docs/mdm/com.manaflow.cmux.plist +++ b/docs/mdm/com.manaflow.cmux.plist @@ -1806,6 +1806,41 @@ pfm_type string
+ + pfm_default + default + pfm_description + The look of the window: whether panes sit in one rounded card, and where lines are drawn. Separation, Sidebar Background and the sidebar border still win when you set them. + pfm_name + appearance.chromeStyle + pfm_range_list + + default + card + card-outlined + flat + flat-sidebar-line + bare + panes + two-tone + + pfm_title + Window Style + pfm_type + string + + + pfm_default + + pfm_description + Splits, closes, moves, zooms, column scrolls and screen switches slide into place. Off: they change at once. + pfm_name + ui.paneAnimations + pfm_title + Animate Panes + pfm_type + boolean + pfm_description How panes are told apart. None draws no border or divider at all; dragging between panes still resizes them. Default: dividers inside the curved main pane, borders otherwise. diff --git a/docs/mdm/managed-preferences.md b/docs/mdm/managed-preferences.md index 3aadf6f9f7bb..6eb957e50f0c 100644 --- a/docs/mdm/managed-preferences.md +++ b/docs/mdm/managed-preferences.md @@ -102,6 +102,8 @@ Files: `com.manaflow.cmux.plist` (ProfileManifests: iMazing Profile Editor, Prof | `appearance.focusIndicator` | string | `"both"` | `border`, `tabs`, `both`, `none` | Focused Pane. How the focused pane stands out: its border, subtler tabs in the other panes, both or neither. | | `focus.inactiveTabStyle` | string | `"fade"` | `fade`, `tonal`, `quiet` | Unfocused Pane Tabs. How the other panes' tabs draw subtler when Focused Pane marks tabs: Fade dims them, Tonal steps their text down, Quiet drops the selected pill. | | `ui.animationSpeed` | string | `"fast"` | `fast`, `normal`, `off` | Animations | +| `appearance.chromeStyle` | string | `"default"` | `default`, `card`, `card-outlined`, `flat`, `flat-sidebar-line`, `bare`, `panes`, `two-tone` | Window Style. The look of the window: whether panes sit in one rounded card, and where lines are drawn. Separation, Sidebar Background and the sidebar border still win when you set them. | +| `ui.paneAnimations` | boolean | `false` | | Animate Panes. Splits, closes, moves, zooms, column scrolls and screen switches slide into place. Off: they change at once. | | `layout.paneSeparation` | string | | `none`, `dividers`, `borders`, `cards` | Separation. How panes are told apart. None draws no border or divider at all; dragging between panes still resizes them. Default: dividers inside the curved main pane, borders otherwise. | | `layout.panePadding` | real | | 0 to 16 | Padding | | `layout.paneCornerRadius` | real | | 0 to 20 | Corner Radius | diff --git a/schemas/settings/settings-schema.json b/schemas/settings/settings-schema.json index b7d97c1d09f6..12c06b8480e7 100644 --- a/schemas/settings/settings-schema.json +++ b/schemas/settings/settings-schema.json @@ -246,7 +246,8 @@ "appearance.borders", "appearance.focusIndicator", "focus.inactiveTabStyle", - "ui.animationSpeed" + "ui.animationSpeed", + "ui.paneAnimations" ], "title" : { "key" : "settings.group.densityMotion", @@ -269,6 +270,7 @@ { "key" : "settings.group.panes", "rows" : [ + "appearance.chromeStyle", "layout.paneSeparation", "layout.panePadding", "layout.paneCornerRadius", @@ -9898,6 +9900,181 @@ }, "validation" : "portable" }, + { + "accepts" : [ + "default", + "card", + "card-outlined", + "flat", + "flat-sidebar-line", + "bare", + "panes", + "two-tone" + ], + "agent_refusal" : null, + "agent_settable" : true, + "choices" : [ + { + "title" : { + "key" : "settings.choice.chromeStyle.default", + "text" : "Default" + }, + "value" : "default" + }, + { + "title" : { + "key" : "settings.choice.chromeStyle.card", + "text" : "Card" + }, + "value" : "card" + }, + { + "title" : { + "key" : "settings.choice.chromeStyle.cardOutlined", + "text" : "Card with Outlines" + }, + "value" : "card-outlined" + }, + { + "title" : { + "key" : "settings.choice.chromeStyle.flat", + "text" : "Flat" + }, + "value" : "flat" + }, + { + "title" : { + "key" : "settings.choice.chromeStyle.flatSidebarLine", + "text" : "Flat with Sidebar Line" + }, + "value" : "flat-sidebar-line" + }, + { + "title" : { + "key" : "settings.choice.chromeStyle.bare", + "text" : "Bare" + }, + "value" : "bare" + }, + { + "title" : { + "key" : "settings.choice.chromeStyle.panes", + "text" : "Panes" + }, + "value" : "panes" + }, + { + "title" : { + "key" : "settings.choice.chromeStyle.twoTone", + "text" : "Two-Tone" + }, + "value" : "two-tone" + } + ], + "consumers" : [ + "cmux-next" + ], + "default" : "default", + "default_label" : null, + "group" : { + "key" : "settings.group.panes", + "text" : "Panes" + }, + "help" : { + "key" : "settings.appearance.chromeStyle.help", + "text" : "The look of the window: whether panes sit in one rounded card, and where lines are drawn. Separation, Sidebar Background and the sidebar border still win when you set them." + }, + "kept_on_reset_all" : false, + "key" : "appearance.chromeStyle", + "keywords" : [ + "window", + "style", + "chrome", + "card", + "flat", + "border", + "borders", + "lines", + "divider", + "outline", + "seam", + "sidebar", + "two-tone", + "minimal", + "bare" + ], + "kind" : "choice", + "page_hidden" : false, + "path" : [ + "appearance", + "chromeStyle" + ], + "refuses" : [ + "__not_a_choice__", + 1, + true + ], + "section" : "appearance", + "summary" : { + "key" : "settings.appearance.chromeStyle.summary", + "text" : "Card, lines and sidebar background" + }, + "title" : { + "key" : "settings.appearance.chromeStyle", + "text" : "Window Style" + }, + "validation" : "portable" + }, + { + "accepts" : [ + true, + false + ], + "agent_refusal" : null, + "agent_settable" : true, + "consumers" : [ + "cmux-next" + ], + "default" : false, + "default_label" : null, + "group" : { + "key" : "settings.group.densityMotion", + "text" : "Density and Motion" + }, + "help" : { + "key" : "settings.ui.paneAnimations.help", + "text" : "Splits, closes, moves, zooms, column scrolls and screen switches slide into place. Off: they change at once." + }, + "kept_on_reset_all" : false, + "key" : "ui.paneAnimations", + "keywords" : [ + "motion", + "animation", + "pane", + "split", + "zoom", + "slide", + "spring" + ], + "kind" : "toggle", + "page_hidden" : false, + "path" : [ + "ui", + "paneAnimations" + ], + "refuses" : [ + "true", + 1, + null + ], + "section" : "appearance", + "summary" : null, + "title" : { + "key" : "settings.ui.paneAnimations", + "text" : "Animate Panes" + }, + "validation" : "portable" + }, { "accepts" : [ "none", @@ -23373,7 +23550,7 @@ "validation" : "portable" } ], - "schema_hash" : "d1c990c0f9d449bb6c2c0c72bdf07613174598229af03f04b590d16523eb1a81", + "schema_hash" : "fd13728e6189f0fd1d3bbe2c99fce55030719b4683d606ca464a26f11f62fac9", "sections" : [ { "id" : "general", diff --git a/webviews/src/pages/settings/generated/strings.json b/webviews/src/pages/settings/generated/strings.json index 78bf4d467843..ab28ac590376 100644 --- a/webviews/src/pages/settings/generated/strings.json +++ b/webviews/src/pages/settings/generated/strings.json @@ -59,6 +59,9 @@ "settings.appearance.backgroundOpacity.summary": "Theme color over the backdrop", "settings.appearance.borders": "Borders", "settings.appearance.borders.help": "None removes every border, hairline and separator in the app.", + "settings.appearance.chromeStyle": "Window Style", + "settings.appearance.chromeStyle.help": "The look of the window: whether panes sit in one rounded card, and where lines are drawn. Separation, Sidebar Background and the sidebar border still win when you set them.", + "settings.appearance.chromeStyle.summary": "Card, lines and sidebar background", "settings.appearance.columnGap": "Column Gap", "settings.appearance.density": "Density", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -237,6 +240,14 @@ "settings.choice.brailleSpinner": "Braille Spinner", "settings.choice.capsule": "Capsule", "settings.choice.cards": "Cards", + "settings.choice.chromeStyle.bare": "Bare", + "settings.choice.chromeStyle.card": "Card", + "settings.choice.chromeStyle.cardOutlined": "Card with Outlines", + "settings.choice.chromeStyle.default": "Default", + "settings.choice.chromeStyle.flat": "Flat", + "settings.choice.chromeStyle.flatSidebarLine": "Flat with Sidebar Line", + "settings.choice.chromeStyle.panes": "Panes", + "settings.choice.chromeStyle.twoTone": "Two-Tone", "settings.choice.click": "You Click or Type in the Pane", "settings.choice.closeFocusMostRecent": "Most Recently Focused", "settings.choice.closeFocusPreviousNeighbor": "Previous Neighbor", @@ -661,6 +672,8 @@ "settings.terminal.fontFamily.help": "A monospaced font installed on this Mac.", "settings.terminal.fontSize": "Font Size", "settings.ui.animationSpeed": "Animations", + "settings.ui.paneAnimations": "Animate Panes", + "settings.ui.paneAnimations.help": "Splits, closes, moves, zooms, column scrolls and screen switches slide into place. Off: they change at once.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -1057,6 +1070,9 @@ "settings.appearance.backgroundOpacity.summary": "لون السمة فوق الخلفية", "settings.appearance.borders": "الحدود", "settings.appearance.borders.help": "«بلا» يزيل كل الحدود والخطوط الرفيعة والفواصل في التطبيق.", + "settings.appearance.chromeStyle": "نمط النافذة", + "settings.appearance.chromeStyle.help": "مظهر النافذة: هل تكون الأجزاء داخل بطاقة واحدة مستديرة الحواف، وأين تُرسم الخطوط. تبقى الأولوية للفصل وخلفية الشريط الجانبي وحد الشريط الجانبي عند ضبطها.", + "settings.appearance.chromeStyle.summary": "البطاقة والخطوط وخلفية الشريط الجانبي", "settings.appearance.columnGap": "المسافة بين الأعمدة", "settings.appearance.density": "الكثافة", "settings.appearance.experimentalControls": "عناصر تحكم المظهر التجريبية", @@ -1235,6 +1251,14 @@ "settings.choice.brailleSpinner": "مؤشر برايل الدوار", "settings.choice.capsule": "كبسولة", "settings.choice.cards": "بطاقات", + "settings.choice.chromeStyle.bare": "مجرد", + "settings.choice.chromeStyle.card": "بطاقة", + "settings.choice.chromeStyle.cardOutlined": "بطاقة بحدود", + "settings.choice.chromeStyle.default": "افتراضي", + "settings.choice.chromeStyle.flat": "مسطح", + "settings.choice.chromeStyle.flatSidebarLine": "مسطح مع خط الشريط الجانبي", + "settings.choice.chromeStyle.panes": "أجزاء", + "settings.choice.chromeStyle.twoTone": "لونان", "settings.choice.click": "تنقر أو تكتب في الجزء", "settings.choice.closeFocusMostRecent": "الأحدث تركيزًا", "settings.choice.closeFocusPreviousNeighbor": "المجاور السابق", @@ -1659,6 +1683,8 @@ "settings.terminal.fontFamily.help": "خط أحادي المسافة مثبّت على جهاز Mac هذا.", "settings.terminal.fontSize": "حجم الخط", "settings.ui.animationSpeed": "الرسوم المتحركة", + "settings.ui.paneAnimations": "تحريك الأجزاء", + "settings.ui.paneAnimations.help": "تنزلق عمليات التقسيم والإغلاق والنقل والتكبير وتمرير الأعمدة وتبديل الشاشات إلى أماكنها. عند الإيقاف: تتغير فورًا.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -2055,6 +2081,9 @@ "settings.appearance.backgroundOpacity.summary": "Boja teme preko pozadine", "settings.appearance.borders": "Ivice", "settings.appearance.borders.help": "Bez uklanja sve ivice, tanke linije i razdjelnike u aplikaciji.", + "settings.appearance.chromeStyle": "Stil prozora", + "settings.appearance.chromeStyle.help": "Izgled prozora: da li su okna u jednoj zaobljenoj kartici i gdje se crtaju linije. Razdvajanje, Pozadina bočne trake i obrub bočne trake i dalje imaju prednost kada ih postavite.", + "settings.appearance.chromeStyle.summary": "Kartica, linije i pozadina bočne trake", "settings.appearance.columnGap": "Razmak između kolona", "settings.appearance.density": "Gustoća", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -2233,6 +2262,14 @@ "settings.choice.brailleSpinner": "Brajev indikator", "settings.choice.capsule": "Kapsula", "settings.choice.cards": "Kartice", + "settings.choice.chromeStyle.bare": "Bez linija", + "settings.choice.chromeStyle.card": "Kartica", + "settings.choice.chromeStyle.cardOutlined": "Kartica s obrubima", + "settings.choice.chromeStyle.default": "Zadano", + "settings.choice.chromeStyle.flat": "Ravno", + "settings.choice.chromeStyle.flatSidebarLine": "Ravno s linijom bočne trake", + "settings.choice.chromeStyle.panes": "Okna", + "settings.choice.chromeStyle.twoTone": "Dvobojno", "settings.choice.click": "Kliknete ili kucate u oknu", "settings.choice.closeFocusMostRecent": "Posljednje fokusirano", "settings.choice.closeFocusPreviousNeighbor": "Prethodni susjed", @@ -2657,6 +2694,8 @@ "settings.terminal.fontFamily.help": "Font fiksne širine instaliran na ovom Macu.", "settings.terminal.fontSize": "Veličina fonta", "settings.ui.animationSpeed": "Animacije", + "settings.ui.paneAnimations": "Animiraj panele", + "settings.ui.paneAnimations.help": "Dijeljenja, zatvaranja, premještanja, zumiranja, pomicanja kolona i promjene ekrana klize na mjesto. Isključeno: mijenjaju se odmah.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -3053,6 +3092,9 @@ "settings.appearance.backgroundOpacity.summary": "Temafarve over baggrunden", "settings.appearance.borders": "Kanter", "settings.appearance.borders.help": "Ingen fjerner alle kanter, hårstreger og skillelinjer i appen.", + "settings.appearance.chromeStyle": "Vinduesstil", + "settings.appearance.chromeStyle.help": "Vinduets udseende: om ruderne ligger i ét afrundet kort, og hvor der tegnes streger. Adskillelse, Sidepanelets baggrund og sidepanelets kant vinder stadig, når du angiver dem.", + "settings.appearance.chromeStyle.summary": "Kort, streger og sidepanelets baggrund", "settings.appearance.columnGap": "Kolonneafstand", "settings.appearance.density": "Tæthed", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -3231,6 +3273,14 @@ "settings.choice.brailleSpinner": "Braille-spinner", "settings.choice.capsule": "Kapsel", "settings.choice.cards": "Kort", + "settings.choice.chromeStyle.bare": "Uden streger", + "settings.choice.chromeStyle.card": "Kort", + "settings.choice.chromeStyle.cardOutlined": "Kort med konturer", + "settings.choice.chromeStyle.default": "Standard", + "settings.choice.chromeStyle.flat": "Flad", + "settings.choice.chromeStyle.flatSidebarLine": "Flad med sidepanelstreg", + "settings.choice.chromeStyle.panes": "Ruder", + "settings.choice.chromeStyle.twoTone": "Totonet", "settings.choice.click": "Du klikker eller skriver i ruden", "settings.choice.closeFocusMostRecent": "Senest fokuseret", "settings.choice.closeFocusPreviousNeighbor": "Forrige nabo", @@ -3655,6 +3705,8 @@ "settings.terminal.fontFamily.help": "En skrift med fast bredde, der er installeret på denne Mac.", "settings.terminal.fontSize": "Skriftstørrelse", "settings.ui.animationSpeed": "Animationer", + "settings.ui.paneAnimations": "Animér paneler", + "settings.ui.paneAnimations.help": "Opdelinger, lukninger, flytninger, zoom, kolonnerulning og skærmskift glider på plads. Fra: de skifter med det samme.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -4051,6 +4103,9 @@ "settings.appearance.backgroundOpacity.summary": "Themenfarbe über dem Hintergrund", "settings.appearance.borders": "Rahmen", "settings.appearance.borders.help": "„Keine“ entfernt alle Rahmen, Haarlinien und Trennlinien in der App.", + "settings.appearance.chromeStyle": "Fensterstil", + "settings.appearance.chromeStyle.help": "Das Aussehen des Fensters: ob die Bereiche in einer abgerundeten Karte liegen und wo Linien gezeichnet werden. Trennung, Hintergrund der Seitenleiste und der Rand der Seitenleiste haben weiterhin Vorrang, wenn du sie festlegst.", + "settings.appearance.chromeStyle.summary": "Karte, Linien und Hintergrund der Seitenleiste", "settings.appearance.columnGap": "Spaltenabstand", "settings.appearance.density": "Dichte", "settings.appearance.experimentalControls": "Experimentelle Erscheinungsbild-Steuerung", @@ -4229,6 +4284,14 @@ "settings.choice.brailleSpinner": "Braille-Spinner", "settings.choice.capsule": "Kapsel", "settings.choice.cards": "Karten", + "settings.choice.chromeStyle.bare": "Ohne Linien", + "settings.choice.chromeStyle.card": "Karte", + "settings.choice.chromeStyle.cardOutlined": "Karte mit Umrissen", + "settings.choice.chromeStyle.default": "Standard", + "settings.choice.chromeStyle.flat": "Flach", + "settings.choice.chromeStyle.flatSidebarLine": "Flach mit Seitenleistenlinie", + "settings.choice.chromeStyle.panes": "Bereiche", + "settings.choice.chromeStyle.twoTone": "Zweifarbig", "settings.choice.click": "Du in den Bereich klickst oder tippst", "settings.choice.closeFocusMostRecent": "Zuletzt fokussiert", "settings.choice.closeFocusPreviousNeighbor": "Vorheriger Nachbar", @@ -4653,6 +4716,8 @@ "settings.terminal.fontFamily.help": "Eine auf diesem Mac installierte Schrift mit fester Breite.", "settings.terminal.fontSize": "Schriftgröße", "settings.ui.animationSpeed": "Animationen", + "settings.ui.paneAnimations": "Bereiche animieren", + "settings.ui.paneAnimations.help": "Teilen, Schließen, Verschieben, Zoomen, Spaltenscrollen und Bildschirmwechsel gleiten an ihren Platz. Aus: Sie wechseln sofort.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -5049,6 +5114,9 @@ "settings.appearance.backgroundOpacity.summary": "Color del tema sobre el fondo", "settings.appearance.borders": "Bordes", "settings.appearance.borders.help": "Ninguno quita todos los bordes, líneas finas y separadores de la app.", + "settings.appearance.chromeStyle": "Estilo de ventana", + "settings.appearance.chromeStyle.help": "El aspecto de la ventana: si los paneles están en una sola tarjeta redondeada y dónde se dibujan líneas. Separación, Fondo de la barra lateral y el borde de la barra lateral siguen teniendo prioridad cuando los configuras.", + "settings.appearance.chromeStyle.summary": "Tarjeta, líneas y fondo de la barra lateral", "settings.appearance.columnGap": "Espacio entre columnas", "settings.appearance.density": "Densidad", "settings.appearance.experimentalControls": "Controles de apariencia experimentales", @@ -5227,6 +5295,14 @@ "settings.choice.brailleSpinner": "Indicador braille", "settings.choice.capsule": "Cápsula", "settings.choice.cards": "Tarjetas", + "settings.choice.chromeStyle.bare": "Sin líneas", + "settings.choice.chromeStyle.card": "Tarjeta", + "settings.choice.chromeStyle.cardOutlined": "Tarjeta con contornos", + "settings.choice.chromeStyle.default": "Predeterminado", + "settings.choice.chromeStyle.flat": "Plano", + "settings.choice.chromeStyle.flatSidebarLine": "Plano con línea de barra lateral", + "settings.choice.chromeStyle.panes": "Paneles", + "settings.choice.chromeStyle.twoTone": "Bicolor", "settings.choice.click": "Haces clic o escribes en el panel", "settings.choice.closeFocusMostRecent": "Enfocado más recientemente", "settings.choice.closeFocusPreviousNeighbor": "Vecino anterior", @@ -5651,6 +5727,8 @@ "settings.terminal.fontFamily.help": "Una fuente monoespaciada instalada en este Mac.", "settings.terminal.fontSize": "Tamaño de fuente", "settings.ui.animationSpeed": "Animaciones", + "settings.ui.paneAnimations": "Animar paneles", + "settings.ui.paneAnimations.help": "Las divisiones, cierres, movimientos, zooms, desplazamientos de columnas y cambios de pantalla se deslizan a su sitio. Desactivado: cambian al instante.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -6047,6 +6125,9 @@ "settings.appearance.backgroundOpacity.summary": "Couleur du thème sur l’arrière-plan", "settings.appearance.borders": "Bordures", "settings.appearance.borders.help": "Aucune retire toutes les bordures, lignes fines et séparateurs de l’app.", + "settings.appearance.chromeStyle": "Style de fenêtre", + "settings.appearance.chromeStyle.help": "L’aspect de la fenêtre : si les panneaux sont dans une seule carte arrondie, et où les lignes sont tracées. Séparation, Arrière-plan de la barre latérale et la bordure de la barre latérale l’emportent toujours lorsque vous les définissez.", + "settings.appearance.chromeStyle.summary": "Carte, lignes et arrière-plan de la barre latérale", "settings.appearance.columnGap": "Espacement des colonnes", "settings.appearance.density": "Densité", "settings.appearance.experimentalControls": "Contrôles d’apparence expérimentaux", @@ -6225,6 +6306,14 @@ "settings.choice.brailleSpinner": "Indicateur braille", "settings.choice.capsule": "Capsule", "settings.choice.cards": "Cartes", + "settings.choice.chromeStyle.bare": "Sans lignes", + "settings.choice.chromeStyle.card": "Carte", + "settings.choice.chromeStyle.cardOutlined": "Carte avec contours", + "settings.choice.chromeStyle.default": "Par défaut", + "settings.choice.chromeStyle.flat": "Plat", + "settings.choice.chromeStyle.flatSidebarLine": "Plat avec ligne de barre latérale", + "settings.choice.chromeStyle.panes": "Panneaux", + "settings.choice.chromeStyle.twoTone": "Bicolore", "settings.choice.click": "Vous cliquez ou tapez dans le panneau", "settings.choice.closeFocusMostRecent": "Dernier actif", "settings.choice.closeFocusPreviousNeighbor": "Voisin précédent", @@ -6649,6 +6738,8 @@ "settings.terminal.fontFamily.help": "Une police à chasse fixe installée sur ce Mac.", "settings.terminal.fontSize": "Taille de police", "settings.ui.animationSpeed": "Animations", + "settings.ui.paneAnimations": "Animer les volets", + "settings.ui.paneAnimations.help": "Les divisions, fermetures, déplacements, zooms, défilements de colonnes et changements d'écran glissent en place. Désactivé : ils changent immédiatement.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -7045,6 +7136,9 @@ "settings.appearance.backgroundOpacity.summary": "Colore del tema sopra lo sfondo", "settings.appearance.borders": "Bordi", "settings.appearance.borders.help": "Nessuno rimuove tutti i bordi, le linee sottili e i separatori dell’app.", + "settings.appearance.chromeStyle": "Stile finestra", + "settings.appearance.chromeStyle.help": "L’aspetto della finestra: se i riquadri stanno in un’unica scheda arrotondata e dove vengono tracciate le linee. Separazione, Sfondo della barra laterale e il bordo della barra laterale hanno comunque la precedenza quando li imposti.", + "settings.appearance.chromeStyle.summary": "Scheda, linee e sfondo della barra laterale", "settings.appearance.columnGap": "Spazio tra le colonne", "settings.appearance.density": "Densità", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -7223,6 +7317,14 @@ "settings.choice.brailleSpinner": "Indicatore braille", "settings.choice.capsule": "Capsula", "settings.choice.cards": "Schede", + "settings.choice.chromeStyle.bare": "Senza linee", + "settings.choice.chromeStyle.card": "Scheda", + "settings.choice.chromeStyle.cardOutlined": "Scheda con contorni", + "settings.choice.chromeStyle.default": "Predefinito", + "settings.choice.chromeStyle.flat": "Piatto", + "settings.choice.chromeStyle.flatSidebarLine": "Piatto con linea della barra laterale", + "settings.choice.chromeStyle.panes": "Riquadri", + "settings.choice.chromeStyle.twoTone": "Bicolore", "settings.choice.click": "Fai clic o scrivi nel riquadro", "settings.choice.closeFocusMostRecent": "Ultimo attivo", "settings.choice.closeFocusPreviousNeighbor": "Vicino precedente", @@ -7647,6 +7749,8 @@ "settings.terminal.fontFamily.help": "Un font a spaziatura fissa installato su questo Mac.", "settings.terminal.fontSize": "Dimensione del font", "settings.ui.animationSpeed": "Animazioni", + "settings.ui.paneAnimations": "Anima i riquadri", + "settings.ui.paneAnimations.help": "Divisioni, chiusure, spostamenti, zoom, scorrimenti delle colonne e cambi di schermata scorrono in posizione. Disattivato: cambiano subito.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -8043,6 +8147,9 @@ "settings.appearance.backgroundOpacity.summary": "背景に重ねるテーマカラー", "settings.appearance.borders": "枠線", "settings.appearance.borders.help": "「なし」にすると、アプリ内のすべての枠線、細線、区切り線がなくなります。", + "settings.appearance.chromeStyle": "ウインドウスタイル", + "settings.appearance.chromeStyle.help": "ウインドウの見た目です。ペインを1枚の角丸カードに収めるか、どこに線を描くかを決めます。区切り、サイドバーの背景、サイドバーの境界線を設定した場合は、そちらが優先されます。", + "settings.appearance.chromeStyle.summary": "カード、線、サイドバーの背景", "settings.appearance.columnGap": "列の間隔", "settings.appearance.density": "密度", "settings.appearance.experimentalControls": "実験的な外観コントロール", @@ -8221,6 +8328,14 @@ "settings.choice.brailleSpinner": "点字スピナー", "settings.choice.capsule": "カプセル", "settings.choice.cards": "カード", + "settings.choice.chromeStyle.bare": "線なし", + "settings.choice.chromeStyle.card": "カード", + "settings.choice.chromeStyle.cardOutlined": "カード(枠線あり)", + "settings.choice.chromeStyle.default": "デフォルト", + "settings.choice.chromeStyle.flat": "フラット", + "settings.choice.chromeStyle.flatSidebarLine": "フラット(サイドバー線あり)", + "settings.choice.chromeStyle.panes": "ペイン", + "settings.choice.chromeStyle.twoTone": "ツートーン", "settings.choice.click": "ペインをクリックまたは入力したとき", "settings.choice.closeFocusMostRecent": "最後にフォーカスしたペイン", "settings.choice.closeFocusPreviousNeighbor": "前の隣接ペイン", @@ -8645,6 +8760,8 @@ "settings.terminal.fontFamily.help": "この Mac にインストールされている等幅フォントです。", "settings.terminal.fontSize": "フォントサイズ", "settings.ui.animationSpeed": "アニメーション", + "settings.ui.paneAnimations": "ペインをアニメーション", + "settings.ui.paneAnimations.help": "分割、閉じる、移動、ズーム、列のスクロール、画面の切り替えがスライドして収まります。オフにすると即座に切り替わります。", "settings.updates.checkAutomatically": "アップデートを自動的に確認", "settings.updates.checkInterval": "確認の間隔", "settings.updates.downloadAutomatically": "アップデートを自動的にダウンロード", @@ -9041,6 +9158,9 @@ "settings.appearance.backgroundOpacity.summary": "ពណ៌រចនាប័ទ្មលើផ្ទៃខាងក្រោយ", "settings.appearance.borders": "ស៊ុម", "settings.appearance.borders.help": "គ្មាន ដកស៊ុម បន្ទាត់ស្តើង និងបន្ទាត់ខណ្ឌទាំងអស់ក្នុងកម្មវិធី។", + "settings.appearance.chromeStyle": "រចនាប័ទ្មបង្អួច", + "settings.appearance.chromeStyle.help": "រូបរាងបង្អួច៖ ថាតើផ្ទាំងស្ថិតក្នុងកាតមូលតែមួយ និងកន្លែងដែលគូរបន្ទាត់។ ការបំបែក ផ្ទៃខាងក្រោយរបារចំហៀង និងគែមរបារចំហៀង នៅតែមានអាទិភាពនៅពេលអ្នកកំណត់វា។", + "settings.appearance.chromeStyle.summary": "កាត បន្ទាត់ និងផ្ទៃខាងក្រោយរបារចំហៀង", "settings.appearance.columnGap": "គម្លាតរវាងជួរឈរ", "settings.appearance.density": "ដង់ស៊ីតេ", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -9219,6 +9339,14 @@ "settings.choice.brailleSpinner": "សញ្ញាវិលអក្សរស្ទាប", "settings.choice.capsule": "កន្សោម", "settings.choice.cards": "កាត", + "settings.choice.chromeStyle.bare": "គ្មានបន្ទាត់", + "settings.choice.chromeStyle.card": "កាត", + "settings.choice.chromeStyle.cardOutlined": "កាតមានគែម", + "settings.choice.chromeStyle.default": "លំនាំដើម", + "settings.choice.chromeStyle.flat": "រាបស្មើ", + "settings.choice.chromeStyle.flatSidebarLine": "រាបស្មើមានបន្ទាត់របារចំហៀង", + "settings.choice.chromeStyle.panes": "ផ្ទាំង", + "settings.choice.chromeStyle.twoTone": "ពីរពណ៌", "settings.choice.click": "អ្នកចុច ឬវាយក្នុងផ្ទាំង", "settings.choice.closeFocusMostRecent": "ផ្ទាំងដែលបានផ្ដោតចុងក្រោយ", "settings.choice.closeFocusPreviousNeighbor": "ផ្ទាំងជិតខាងមុន", @@ -9643,6 +9771,8 @@ "settings.terminal.fontFamily.help": "ពុម្ពអក្សរទទឹងថេរដែលបានដំឡើងនៅលើ Mac នេះ។", "settings.terminal.fontSize": "ទំហំពុម្ពអក្សរ", "settings.ui.animationSpeed": "ចលនា", + "settings.ui.paneAnimations": "ចលនាផ្ទាំង", + "settings.ui.paneAnimations.help": "ការបំបែក ការបិទ ការផ្លាស់ទី ការពង្រីក ការរំកិលជួរឈរ និងការប្តូរអេក្រង់ រអិលចូលកន្លែង។ បិទ៖ ពួកវាប្តូរភ្លាមៗ។", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -10039,6 +10169,9 @@ "settings.appearance.backgroundOpacity.summary": "배경 위에 덮는 테마 색상", "settings.appearance.borders": "테두리", "settings.appearance.borders.help": "없음으로 하면 앱의 모든 테두리, 가는 선, 구분선이 사라집니다.", + "settings.appearance.chromeStyle": "창 스타일", + "settings.appearance.chromeStyle.help": "창의 모양입니다. 창 분할이 하나의 둥근 카드 안에 놓이는지, 어디에 선을 그릴지 정합니다. 구분, 사이드바 배경, 사이드바 테두리를 설정하면 그 값이 우선합니다.", + "settings.appearance.chromeStyle.summary": "카드, 선, 사이드바 배경", "settings.appearance.columnGap": "열 간격", "settings.appearance.density": "밀도", "settings.appearance.experimentalControls": "실험적 모양 제어", @@ -10217,6 +10350,14 @@ "settings.choice.brailleSpinner": "점자 스피너", "settings.choice.capsule": "캡슐", "settings.choice.cards": "카드", + "settings.choice.chromeStyle.bare": "선 없음", + "settings.choice.chromeStyle.card": "카드", + "settings.choice.chromeStyle.cardOutlined": "윤곽선 있는 카드", + "settings.choice.chromeStyle.default": "기본값", + "settings.choice.chromeStyle.flat": "플랫", + "settings.choice.chromeStyle.flatSidebarLine": "사이드바 선 있는 플랫", + "settings.choice.chromeStyle.panes": "창 분할", + "settings.choice.chromeStyle.twoTone": "투톤", "settings.choice.click": "창을 클릭하거나 입력할 때", "settings.choice.closeFocusMostRecent": "가장 최근에 포커스한 패널", "settings.choice.closeFocusPreviousNeighbor": "이전 이웃", @@ -10641,6 +10782,8 @@ "settings.terminal.fontFamily.help": "이 Mac에 설치된 고정폭 서체입니다.", "settings.terminal.fontSize": "서체 크기", "settings.ui.animationSpeed": "애니메이션", + "settings.ui.paneAnimations": "창 애니메이션", + "settings.ui.paneAnimations.help": "분할, 닫기, 이동, 확대/축소, 열 스크롤, 화면 전환이 미끄러지듯 자리를 잡습니다. 끄면 즉시 바뀝니다.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -11037,6 +11180,9 @@ "settings.appearance.backgroundOpacity.summary": "Temafarge over bakgrunnen", "settings.appearance.borders": "Kanter", "settings.appearance.borders.help": "Ingen fjerner alle kanter, hårstreker og skillelinjer i appen.", + "settings.appearance.chromeStyle": "Vindusstil", + "settings.appearance.chromeStyle.help": "Vinduets utseende: om rutene ligger i ett avrundet kort, og hvor linjer tegnes. Atskillelse, Bakgrunn for sidepanelet og kanten på sidepanelet vinner fortsatt når du angir dem.", + "settings.appearance.chromeStyle.summary": "Kort, linjer og bakgrunn for sidepanelet", "settings.appearance.columnGap": "Kolonneavstand", "settings.appearance.density": "Tetthet", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -11215,6 +11361,14 @@ "settings.choice.brailleSpinner": "Braille-spinner", "settings.choice.capsule": "Kapsel", "settings.choice.cards": "Kort", + "settings.choice.chromeStyle.bare": "Uten linjer", + "settings.choice.chromeStyle.card": "Kort", + "settings.choice.chromeStyle.cardOutlined": "Kort med omriss", + "settings.choice.chromeStyle.default": "Standard", + "settings.choice.chromeStyle.flat": "Flat", + "settings.choice.chromeStyle.flatSidebarLine": "Flat med sidepanellinje", + "settings.choice.chromeStyle.panes": "Ruter", + "settings.choice.chromeStyle.twoTone": "Tofarget", "settings.choice.click": "Du klikker eller skriver i ruten", "settings.choice.closeFocusMostRecent": "Sist fokusert", "settings.choice.closeFocusPreviousNeighbor": "Forrige nabo", @@ -11639,6 +11793,8 @@ "settings.terminal.fontFamily.help": "En skrift med fast bredde som er installert på denne Macen.", "settings.terminal.fontSize": "Skriftstørrelse", "settings.ui.animationSpeed": "Animasjoner", + "settings.ui.paneAnimations": "Animer ruter", + "settings.ui.paneAnimations.help": "Delinger, lukkinger, flyttinger, zoom, kolonnerulling og skjermbytter glir på plass. Av: de endres med en gang.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -12035,6 +12191,9 @@ "settings.appearance.backgroundOpacity.summary": "Kolor motywu nad tłem", "settings.appearance.borders": "Obramowania", "settings.appearance.borders.help": "Brak usuwa wszystkie obramowania, cienkie linie i separatory w aplikacji.", + "settings.appearance.chromeStyle": "Styl okna", + "settings.appearance.chromeStyle.help": "Wygląd okna: czy panele leżą na jednej zaokrąglonej karcie i gdzie są rysowane linie. Oddzielenie, Tło paska bocznego i obramowanie paska bocznego nadal mają pierwszeństwo, gdy je ustawisz.", + "settings.appearance.chromeStyle.summary": "Karta, linie i tło paska bocznego", "settings.appearance.columnGap": "Odstęp między kolumnami", "settings.appearance.density": "Gęstość", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -12213,6 +12372,14 @@ "settings.choice.brailleSpinner": "Wskaźnik Braille’a", "settings.choice.capsule": "Kapsuła", "settings.choice.cards": "Karty", + "settings.choice.chromeStyle.bare": "Bez linii", + "settings.choice.chromeStyle.card": "Karta", + "settings.choice.chromeStyle.cardOutlined": "Karta z obramowaniem", + "settings.choice.chromeStyle.default": "Domyślny", + "settings.choice.chromeStyle.flat": "Płaski", + "settings.choice.chromeStyle.flatSidebarLine": "Płaski z linią paska bocznego", + "settings.choice.chromeStyle.panes": "Panele", + "settings.choice.chromeStyle.twoTone": "Dwukolorowy", "settings.choice.click": "Klikniesz lub piszesz w panelu", "settings.choice.closeFocusMostRecent": "Ostatnio aktywny", "settings.choice.closeFocusPreviousNeighbor": "Poprzedni sąsiad", @@ -12637,6 +12804,8 @@ "settings.terminal.fontFamily.help": "Czcionka o stałej szerokości zainstalowana na tym Macu.", "settings.terminal.fontSize": "Rozmiar czcionki", "settings.ui.animationSpeed": "Animacje", + "settings.ui.paneAnimations": "Animuj panele", + "settings.ui.paneAnimations.help": "Podziały, zamknięcia, przeniesienia, powiększenia, przewijanie kolumn i zmiany ekranów wsuwają się na miejsce. Wyłączone: zmieniają się od razu.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -13033,6 +13202,9 @@ "settings.appearance.backgroundOpacity.summary": "Cor do tema sobre o fundo", "settings.appearance.borders": "Bordas", "settings.appearance.borders.help": "Nenhuma remove todas as bordas, linhas finas e separadores do app.", + "settings.appearance.chromeStyle": "Estilo da janela", + "settings.appearance.chromeStyle.help": "A aparência da janela: se os painéis ficam em um único cartão arredondado e onde as linhas são desenhadas. Separação, Fundo da barra lateral e a borda da barra lateral continuam valendo quando você os define.", + "settings.appearance.chromeStyle.summary": "Cartão, linhas e fundo da barra lateral", "settings.appearance.columnGap": "Espaço entre colunas", "settings.appearance.density": "Densidade", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -13211,6 +13383,14 @@ "settings.choice.brailleSpinner": "Indicador em braile", "settings.choice.capsule": "Cápsula", "settings.choice.cards": "Cartões", + "settings.choice.chromeStyle.bare": "Sem linhas", + "settings.choice.chromeStyle.card": "Cartão", + "settings.choice.chromeStyle.cardOutlined": "Cartão com contornos", + "settings.choice.chromeStyle.default": "Padrão", + "settings.choice.chromeStyle.flat": "Plano", + "settings.choice.chromeStyle.flatSidebarLine": "Plano com linha da barra lateral", + "settings.choice.chromeStyle.panes": "Painéis", + "settings.choice.chromeStyle.twoTone": "Duas cores", "settings.choice.click": "Você clica ou digita no painel", "settings.choice.closeFocusMostRecent": "Focado mais recentemente", "settings.choice.closeFocusPreviousNeighbor": "Vizinho anterior", @@ -13635,6 +13815,8 @@ "settings.terminal.fontFamily.help": "Uma fonte monoespaçada instalada neste Mac.", "settings.terminal.fontSize": "Tamanho da fonte", "settings.ui.animationSpeed": "Animações", + "settings.ui.paneAnimations": "Animar painéis", + "settings.ui.paneAnimations.help": "Divisões, fechamentos, movimentos, zooms, rolagens de colunas e trocas de tela deslizam até o lugar. Desativado: mudam na hora.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -14031,6 +14213,9 @@ "settings.appearance.backgroundOpacity.summary": "Цвет темы поверх фона", "settings.appearance.borders": "Рамки", "settings.appearance.borders.help": "«Нет» убирает все рамки, тонкие линии и разделители в приложении.", + "settings.appearance.chromeStyle": "Стиль окна", + "settings.appearance.chromeStyle.help": "Вид окна: лежат ли панели в одной скруглённой карточке и где рисуются линии. Разделение, Фон боковой панели и граница боковой панели по-прежнему главнее, если вы их задали.", + "settings.appearance.chromeStyle.summary": "Карточка, линии и фон боковой панели", "settings.appearance.columnGap": "Промежуток между столбцами", "settings.appearance.density": "Плотность", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -14209,6 +14394,14 @@ "settings.choice.brailleSpinner": "Спиннер Брайля", "settings.choice.capsule": "Капсула", "settings.choice.cards": "Карточки", + "settings.choice.chromeStyle.bare": "Без линий", + "settings.choice.chromeStyle.card": "Карточка", + "settings.choice.chromeStyle.cardOutlined": "Карточка с контурами", + "settings.choice.chromeStyle.default": "По умолчанию", + "settings.choice.chromeStyle.flat": "Плоский", + "settings.choice.chromeStyle.flatSidebarLine": "Плоский с линией боковой панели", + "settings.choice.chromeStyle.panes": "Панели", + "settings.choice.chromeStyle.twoTone": "Двухцветный", "settings.choice.click": "Вы щёлкаете или печатаете в панели", "settings.choice.closeFocusMostRecent": "Последняя активная", "settings.choice.closeFocusPreviousNeighbor": "Предыдущая соседняя", @@ -14633,6 +14826,8 @@ "settings.terminal.fontFamily.help": "Моноширинный шрифт, установленный на этом Mac.", "settings.terminal.fontSize": "Размер шрифта", "settings.ui.animationSpeed": "Анимации", + "settings.ui.paneAnimations": "Анимировать панели", + "settings.ui.paneAnimations.help": "Разделение, закрытие, перемещение, масштабирование, прокрутка колонок и смена экранов плавно встают на место. Выкл.: меняются сразу.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -15029,6 +15224,9 @@ "settings.appearance.backgroundOpacity.summary": "สีธีมที่ทับพื้นหลัง", "settings.appearance.borders": "เส้นขอบ", "settings.appearance.borders.help": "ไม่มี จะเอาเส้นขอบ เส้นบาง และเส้นคั่นทั้งหมดในแอปออก", + "settings.appearance.chromeStyle": "สไตล์หน้าต่าง", + "settings.appearance.chromeStyle.help": "รูปลักษณ์ของหน้าต่าง: บานหน้าต่างอยู่ในการ์ดมุมโค้งใบเดียวหรือไม่ และวาดเส้นที่ใด การแบ่ง พื้นหลังแถบด้านข้าง และเส้นขอบแถบด้านข้างยังมีผลเหนือกว่าเมื่อคุณตั้งค่าไว้", + "settings.appearance.chromeStyle.summary": "การ์ด เส้น และพื้นหลังแถบด้านข้าง", "settings.appearance.columnGap": "ระยะห่างระหว่างคอลัมน์", "settings.appearance.density": "ความหนาแน่น", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -15207,6 +15405,14 @@ "settings.choice.brailleSpinner": "ตัวหมุนอักษรเบรลล์", "settings.choice.capsule": "แคปซูล", "settings.choice.cards": "การ์ด", + "settings.choice.chromeStyle.bare": "ไม่มีเส้น", + "settings.choice.chromeStyle.card": "การ์ด", + "settings.choice.chromeStyle.cardOutlined": "การ์ดมีเส้นขอบ", + "settings.choice.chromeStyle.default": "ค่าเริ่มต้น", + "settings.choice.chromeStyle.flat": "แบน", + "settings.choice.chromeStyle.flatSidebarLine": "แบนมีเส้นแถบด้านข้าง", + "settings.choice.chromeStyle.panes": "บานหน้าต่าง", + "settings.choice.chromeStyle.twoTone": "สองโทน", "settings.choice.click": "คุณคลิกหรือพิมพ์ในแผง", "settings.choice.closeFocusMostRecent": "บานที่โฟกัสล่าสุด", "settings.choice.closeFocusPreviousNeighbor": "บานข้างเคียงก่อนหน้า", @@ -15631,6 +15837,8 @@ "settings.terminal.fontFamily.help": "แบบอักษรความกว้างคงที่ที่ติดตั้งใน Mac เครื่องนี้", "settings.terminal.fontSize": "ขนาดแบบอักษร", "settings.ui.animationSpeed": "ภาพเคลื่อนไหว", + "settings.ui.paneAnimations": "เคลื่อนไหวบานหน้าต่าง", + "settings.ui.paneAnimations.help": "การแบ่ง การปิด การย้าย การซูม การเลื่อนคอลัมน์ และการสลับหน้าจอจะเลื่อนเข้าที่ ปิด: เปลี่ยนทันที", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -16027,6 +16235,9 @@ "settings.appearance.backgroundOpacity.summary": "Arka planın üstündeki tema rengi", "settings.appearance.borders": "Kenarlıklar", "settings.appearance.borders.help": "Yok, uygulamadaki tüm kenarlıkları, ince çizgileri ve ayırıcıları kaldırır.", + "settings.appearance.chromeStyle": "Pencere Stili", + "settings.appearance.chromeStyle.help": "Pencerenin görünümü: bölmelerin tek bir yuvarlatılmış kartta durup durmadığı ve çizgilerin nereye çizildiği. Ayırma, Kenar çubuğu arka planı ve kenar çubuğu kenarlığı ayarlandığında yine önceliklidir.", + "settings.appearance.chromeStyle.summary": "Kart, çizgiler ve kenar çubuğu arka planı", "settings.appearance.columnGap": "Sütun aralığı", "settings.appearance.density": "Yoğunluk", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -16205,6 +16416,14 @@ "settings.choice.brailleSpinner": "Braille döngüsü", "settings.choice.capsule": "Kapsül", "settings.choice.cards": "Kartlar", + "settings.choice.chromeStyle.bare": "Çizgisiz", + "settings.choice.chromeStyle.card": "Kart", + "settings.choice.chromeStyle.cardOutlined": "Çerçeveli kart", + "settings.choice.chromeStyle.default": "Varsayılan", + "settings.choice.chromeStyle.flat": "Düz", + "settings.choice.chromeStyle.flatSidebarLine": "Kenar çubuğu çizgili düz", + "settings.choice.chromeStyle.panes": "Bölmeler", + "settings.choice.chromeStyle.twoTone": "İki tonlu", "settings.choice.click": "Bölmeye Tıkladığınızda veya Yazdığınızda", "settings.choice.closeFocusMostRecent": "En son odaklanan", "settings.choice.closeFocusPreviousNeighbor": "Önceki komşu", @@ -16629,6 +16848,8 @@ "settings.terminal.fontFamily.help": "Bu Mac’te yüklü eş aralıklı bir yazı tipi.", "settings.terminal.fontSize": "Yazı tipi boyutu", "settings.ui.animationSpeed": "Animasyonlar", + "settings.ui.paneAnimations": "Bölmeleri canlandır", + "settings.ui.paneAnimations.help": "Bölme, kapatma, taşıma, yakınlaştırma, sütun kaydırma ve ekran geçişleri kayarak yerine oturur. Kapalı: hemen değişir.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -17025,6 +17246,9 @@ "settings.appearance.backgroundOpacity.summary": "Колір теми поверх тла", "settings.appearance.borders": "Рамки", "settings.appearance.borders.help": "«Немає» прибирає всі рамки, тонкі лінії й роздільники в застосунку.", + "settings.appearance.chromeStyle": "Стиль вікна", + "settings.appearance.chromeStyle.help": "Вигляд вікна: чи лежать панелі в одній заокругленій картці і де малюються лінії. Розділення, Тло бічної панелі та межа бічної панелі все одно мають перевагу, якщо ви їх задали.", + "settings.appearance.chromeStyle.summary": "Картка, лінії та тло бічної панелі", "settings.appearance.columnGap": "Проміжок між стовпцями", "settings.appearance.density": "Щільність", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -17203,6 +17427,14 @@ "settings.choice.brailleSpinner": "Спінер Брайля", "settings.choice.capsule": "Капсула", "settings.choice.cards": "Картки", + "settings.choice.chromeStyle.bare": "Без ліній", + "settings.choice.chromeStyle.card": "Картка", + "settings.choice.chromeStyle.cardOutlined": "Картка з контурами", + "settings.choice.chromeStyle.default": "Типовий", + "settings.choice.chromeStyle.flat": "Плаский", + "settings.choice.chromeStyle.flatSidebarLine": "Плаский з лінією бічної панелі", + "settings.choice.chromeStyle.panes": "Панелі", + "settings.choice.chromeStyle.twoTone": "Двоколірний", "settings.choice.click": "Ви клацаєте чи друкуєте в панелі", "settings.choice.closeFocusMostRecent": "Остання активна", "settings.choice.closeFocusPreviousNeighbor": "Попередня сусідня", @@ -17627,6 +17859,8 @@ "settings.terminal.fontFamily.help": "Моноширинний шрифт, установлений на цьому Mac.", "settings.terminal.fontSize": "Розмір шрифту", "settings.ui.animationSpeed": "Анімації", + "settings.ui.paneAnimations": "Анімувати панелі", + "settings.ui.paneAnimations.help": "Розділення, закриття, переміщення, масштабування, прокручування колонок і зміна екранів плавно стають на місце. Вимк.: змінюються одразу.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -18023,6 +18257,9 @@ "settings.appearance.backgroundOpacity.summary": "Màu chủ đề phủ lên nền", "settings.appearance.borders": "Viền", "settings.appearance.borders.help": "Không sẽ bỏ mọi viền, đường mảnh và đường phân cách trong ứng dụng.", + "settings.appearance.chromeStyle": "Kiểu cửa sổ", + "settings.appearance.chromeStyle.help": "Giao diện cửa sổ: các ngăn có nằm trong một thẻ bo tròn hay không, và đường kẻ được vẽ ở đâu. Phân tách, Nền thanh bên và viền thanh bên vẫn được ưu tiên khi bạn đặt chúng.", + "settings.appearance.chromeStyle.summary": "Thẻ, đường kẻ và nền thanh bên", "settings.appearance.columnGap": "Khoảng cách giữa các cột", "settings.appearance.density": "Mật độ", "settings.appearance.experimentalControls": "Experimental Appearance Controls", @@ -18201,6 +18438,14 @@ "settings.choice.brailleSpinner": "Vòng xoay chữ nổi", "settings.choice.capsule": "Viên nang", "settings.choice.cards": "Thẻ", + "settings.choice.chromeStyle.bare": "Không đường kẻ", + "settings.choice.chromeStyle.card": "Thẻ", + "settings.choice.chromeStyle.cardOutlined": "Thẻ có viền", + "settings.choice.chromeStyle.default": "Mặc định", + "settings.choice.chromeStyle.flat": "Phẳng", + "settings.choice.chromeStyle.flatSidebarLine": "Phẳng có đường thanh bên", + "settings.choice.chromeStyle.panes": "Ngăn", + "settings.choice.chromeStyle.twoTone": "Hai tông màu", "settings.choice.click": "Bạn nhấp hoặc gõ trong khung", "settings.choice.closeFocusMostRecent": "Khung có tiêu điểm gần nhất", "settings.choice.closeFocusPreviousNeighbor": "Khung liền trước", @@ -18625,6 +18870,8 @@ "settings.terminal.fontFamily.help": "Một phông chữ đơn cách được cài trên máy Mac này.", "settings.terminal.fontSize": "Cỡ phông chữ", "settings.ui.animationSpeed": "Hoạt ảnh", + "settings.ui.paneAnimations": "Hiệu ứng ngăn", + "settings.ui.paneAnimations.help": "Chia, đóng, di chuyển, phóng to, cuộn cột và chuyển màn hình trượt vào chỗ. Tắt: thay đổi ngay lập tức.", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -19021,6 +19268,9 @@ "settings.appearance.backgroundOpacity.summary": "覆盖在背景上的主题色", "settings.appearance.borders": "边框", "settings.appearance.borders.help": "“无”会移除应用中的所有边框、细线和分隔线。", + "settings.appearance.chromeStyle": "窗口样式", + "settings.appearance.chromeStyle.help": "窗口的外观:窗格是否位于一张圆角卡片中,以及在哪里绘制线条。设置了分隔、边栏背景和边栏边框时,仍以它们为准。", + "settings.appearance.chromeStyle.summary": "卡片、线条和边栏背景", "settings.appearance.columnGap": "列间距", "settings.appearance.density": "密度", "settings.appearance.experimentalControls": "实验性外观控件", @@ -19199,6 +19449,14 @@ "settings.choice.brailleSpinner": "盲文旋转指示器", "settings.choice.capsule": "胶囊", "settings.choice.cards": "卡片", + "settings.choice.chromeStyle.bare": "无线条", + "settings.choice.chromeStyle.card": "卡片", + "settings.choice.chromeStyle.cardOutlined": "带轮廓的卡片", + "settings.choice.chromeStyle.default": "默认", + "settings.choice.chromeStyle.flat": "扁平", + "settings.choice.chromeStyle.flatSidebarLine": "扁平(带边栏线)", + "settings.choice.chromeStyle.panes": "窗格", + "settings.choice.chromeStyle.twoTone": "双色", "settings.choice.click": "在窗格中点按或输入时", "settings.choice.closeFocusMostRecent": "最近聚焦的窗格", "settings.choice.closeFocusPreviousNeighbor": "前一个相邻窗格", @@ -19623,6 +19881,8 @@ "settings.terminal.fontFamily.help": "此 Mac 上安装的等宽字体。", "settings.terminal.fontSize": "字体大小", "settings.ui.animationSpeed": "动画", + "settings.ui.paneAnimations": "窗格动画", + "settings.ui.paneAnimations.help": "拆分、关闭、移动、缩放、列滚动和屏幕切换会滑动到位。关闭后立即切换。", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", @@ -20019,6 +20279,9 @@ "settings.appearance.backgroundOpacity.summary": "覆蓋在背景上的主題色", "settings.appearance.borders": "邊框", "settings.appearance.borders.help": "「無」會移除應用程式中的所有邊框、細線和分隔線。", + "settings.appearance.chromeStyle": "視窗樣式", + "settings.appearance.chromeStyle.help": "視窗的外觀:窗格是否位於一張圓角卡片中,以及在哪裡繪製線條。設定了分隔、側邊欄背景和側邊欄邊框時,仍以它們為準。", + "settings.appearance.chromeStyle.summary": "卡片、線條和側邊欄背景", "settings.appearance.columnGap": "欄間距", "settings.appearance.density": "密度", "settings.appearance.experimentalControls": "實驗性外觀控制項", @@ -20197,6 +20460,14 @@ "settings.choice.brailleSpinner": "點字旋轉指示器", "settings.choice.capsule": "膠囊", "settings.choice.cards": "卡片", + "settings.choice.chromeStyle.bare": "無線條", + "settings.choice.chromeStyle.card": "卡片", + "settings.choice.chromeStyle.cardOutlined": "帶輪廓的卡片", + "settings.choice.chromeStyle.default": "預設", + "settings.choice.chromeStyle.flat": "扁平", + "settings.choice.chromeStyle.flatSidebarLine": "扁平(帶側邊欄線)", + "settings.choice.chromeStyle.panes": "窗格", + "settings.choice.chromeStyle.twoTone": "雙色", "settings.choice.click": "在窗格中點按或輸入時", "settings.choice.closeFocusMostRecent": "最近聚焦的窗格", "settings.choice.closeFocusPreviousNeighbor": "前一個相鄰窗格", @@ -20621,6 +20892,8 @@ "settings.terminal.fontFamily.help": "這部 Mac 上安裝的等寬字體。", "settings.terminal.fontSize": "字體大小", "settings.ui.animationSpeed": "動畫", + "settings.ui.paneAnimations": "窗格動畫", + "settings.ui.paneAnimations.help": "分割、關閉、移動、縮放、欄捲動和螢幕切換會滑動到位。關閉後立即切換。", "settings.updates.checkAutomatically": "Check for Updates Automatically", "settings.updates.checkInterval": "Check Every", "settings.updates.downloadAutomatically": "Download Updates Automatically", From c6d04a7804fadafe777ba1d8e95fa2a2e536c6fe Mon Sep 17 00:00:00 2001 From: "cmux-autofix[bot]" Date: Wed, 14 Oct 2026 08:47:43 +0000 Subject: [PATCH 16/16] chore(next): PR autofix at c98fa5777d27 - regenerated Packages/macOS/CmuxNext/ci-target-graph.json - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38536731324 --- Packages/macOS/CmuxNext/ci-target-graph.json | 3 ++- schemas/defaults/cmux-next.json | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Packages/macOS/CmuxNext/ci-target-graph.json b/Packages/macOS/CmuxNext/ci-target-graph.json index 859292eccfd3..1263536b8f81 100644 --- a/Packages/macOS/CmuxNext/ci-target-graph.json +++ b/Packages/macOS/CmuxNext/ci-target-graph.json @@ -238,7 +238,8 @@ "CmuxAgentQuestion", "CmuxGhosttyKit", "CmuxHomeCore", - "CmuxHomeRender" + "CmuxHomeRender", + "CmuxMessagesLab" ], "reads": [ "plans/cmux-next/", diff --git a/schemas/defaults/cmux-next.json b/schemas/defaults/cmux-next.json index bfc1b31d5995..1aefa6579863 100644 --- a/schemas/defaults/cmux-next.json +++ b/schemas/defaults/cmux-next.json @@ -245,6 +245,7 @@ "setting.appearance.backgroundBlur": null, "setting.appearance.backgroundOpacity": null, "setting.appearance.borders": "default", + "setting.appearance.chromeStyle": "default", "setting.appearance.density": "compact", "setting.appearance.experimentalControls": false, "setting.appearance.focusIndicator": "both", @@ -256,6 +257,7 @@ "setting.appearance.metrics.titlebarHeight": null, "setting.appearance.saturation": 1, "setting.appearance.sidebarSurface": "same", + "setting.appearance.statusIndicator.animation": "animated", "setting.appearance.statusIndicator.color": null, "setting.appearance.statusIndicator.honorStatusStyle": true, "setting.appearance.statusIndicator.showAgentWorkingOnTabs": true,